From dbff9b7980ee5765858b078e3ba2c02323f17373 Mon Sep 17 00:00:00 2001 From: dborth Date: Thu, 16 Oct 2008 01:38:01 +0000 Subject: [PATCH] [What's New 1.0.1 - September 18, 2008] * GBA games now run at full speed * Menu improvements, with spiffy new background - thanks brakken! * Fixed L/R buttons - they work now --- Makefile.gc | 16 +- Makefile.wii | 14 +- compiling.txt | 30 + readme.txt | 37 +- source/ngc/dvd.cpp | 271 +- source/ngc/dvd.h | 9 +- source/ngc/fileop.cpp | 135 +- source/ngc/fileop.h | 4 +- source/ngc/filesel.cpp | 163 +- source/ngc/filesel.h | 17 +- source/ngc/gcunzip.cpp | 441 +- source/ngc/gcunzip.h | 11 +- source/ngc/images/bg.h | 15812 +++++++++++------------ source/ngc/images/saveicon.h | 194 +- source/ngc/input.cpp | 111 +- source/ngc/input.h | 4 +- source/ngc/memcardop.cpp | 9 +- source/ngc/menu.cpp | 112 +- source/ngc/menudraw.cpp | 57 +- source/ngc/preferences.cpp | 49 +- source/ngc/sdfileio.c | 115 + source/ngc/sdfileio.h | 38 + source/ngc/smbop.cpp | 107 +- source/ngc/smbop.h | 11 +- source/ngc/vba.cpp | 8 +- source/ngc/vba.h | 9 +- source/ngc/vbaconfig.cpp | 2 - source/ngc/vbasupport.cpp | 491 +- source/ngc/vbasupport.h | 8 +- source/ngc/video.cpp | 455 +- source/ngc/video.h | 6 +- source/ngc/vmmem.cpp | 229 +- source/ngc/vmmem.h | 2 +- source/sz/7zAlloc.c | 70 - source/sz/7zAlloc.h | 20 - source/sz/7zBuffer.c | 29 - source/sz/7zBuffer.h | 19 - source/sz/7zCrc.c | 76 - source/sz/7zCrc.h | 24 - source/sz/7zDecode.c | 361 - source/sz/7zDecode.h | 37 - source/sz/7zExtract.c | 254 - source/sz/7zExtract.h | 60 - source/sz/7zHeader.c | 5 - source/sz/7zHeader.h | 55 - source/sz/7zIn.c | 1281 -- source/sz/7zIn.h | 55 - source/sz/7zItem.c | 133 - source/sz/7zItem.h | 90 - source/sz/7zMethodID.c | 14 - source/sz/7zMethodID.h | 18 - source/sz/7zTypes.h | 71 - source/sz/LzmaDecode.c | 584 - source/sz/LzmaDecode.h | 113 - source/sz/LzmaTypes.h | 45 - source/vba/CheatSearch.cpp | 691 +- source/vba/CheatSearch.h | 148 +- source/vba/Cheats.cpp | 4732 +++---- source/vba/Cheats.h | 110 +- source/vba/EEprom.cpp | 420 +- source/vba/EEprom.h | 78 +- source/vba/Flash.cpp | 563 +- source/vba/Flash.h | 69 +- source/vba/GBA.cpp | 4361 +++++++ source/vba/{agb => }/GBA.h | 313 +- source/vba/GBAinline.h | 556 + source/vba/{agb/GBAGfx.cpp => Gfx.cpp} | 94 +- source/vba/Gfx.h | 1809 +++ source/vba/Globals.cpp | 276 +- source/vba/Globals.h | 302 +- source/vba/Mode0.cpp | 1161 +- source/vba/Mode1.cpp | 1075 +- source/vba/Mode2.cpp | 996 +- source/vba/Mode3.cpp | 840 +- source/vba/Mode4.cpp | 834 +- source/vba/Mode5.cpp | 840 +- source/vba/NLS.h | 126 +- source/vba/Port.h | 152 +- source/vba/RTC.cpp | 475 +- source/vba/RTC.h | 62 +- source/vba/Sound.cpp | 1948 +-- source/vba/Sound.h | 166 +- source/vba/Sram.cpp | 71 +- source/vba/Sram.h | 53 +- source/vba/System.h | 262 +- source/vba/Text.cpp | 180 + source/vba/Text.h | 21 + source/vba/Util.cpp | 2216 ++-- source/vba/Util.h | 31 +- source/vba/admame.cpp | 1033 ++ source/vba/agb/GBA-arm.cpp | 2967 ----- source/vba/agb/GBA-thumb.cpp | 2346 ---- source/vba/agb/GBA.cpp | 3997 ------ source/vba/agb/GBAGfx.h | 1601 --- source/vba/agb/GBAcpu.h | 302 - source/vba/agb/GBAinline.h | 834 -- source/vba/{agb => }/agbprint.cpp | 204 +- source/vba/{agb => }/agbprint.h | 54 +- source/vba/arm-new.h | 7472 +++++++++++ source/vba/armdis.cpp | 1551 +-- source/vba/armdis.h | 66 +- source/vba/bilinear.cpp | 432 + source/vba/bios.cpp | 2458 ++-- source/vba/bios.h | 93 +- source/vba/elf.cpp | 6242 ++++----- source/vba/elf.h | 594 +- source/vba/exprNode.h | 69 + source/vba/{dmg => gb}/GB.cpp | 396 +- source/vba/{dmg => gb}/GB.h | 3 - source/vba/{dmg => gb}/gbCheats.cpp | 49 +- source/vba/{dmg => gb}/gbCheats.h | 0 source/vba/{dmg => gb}/gbCodes.h | 0 source/vba/{dmg => gb}/gbCodesCB.h | 0 source/vba/{dmg => gb}/gbDis.cpp | 0 source/vba/{dmg => gb}/gbGfx.cpp | 2 +- source/vba/{dmg => gb}/gbGlobals.cpp | 2 +- source/vba/{dmg => gb}/gbGlobals.h | 0 source/vba/{dmg => gb}/gbMemory.cpp | 2 +- source/vba/{dmg => gb}/gbMemory.h | 0 source/vba/{dmg => gb}/gbPrinter.cpp | 2 +- source/vba/{dmg => gb}/gbPrinter.h | 0 source/vba/{dmg => gb}/gbSGB.cpp | 0 source/vba/{dmg => gb}/gbSGB.h | 0 source/vba/{dmg => gb}/gbSound.cpp | 0 source/vba/{dmg => gb}/gbSound.h | 0 source/vba/getopt.c | 1061 ++ source/vba/getopt.h | 142 + source/vba/getopt1.c | 191 + source/vba/interframe.cpp | 1224 +- source/vba/interp.h | 600 +- source/vba/pixel.cpp | 307 +- source/vba/simple2x.cpp | 112 + source/vba/thumb.h | 2474 ++++ source/vba/unzip.cpp | 47 +- 134 files changed, 45479 insertions(+), 41872 deletions(-) create mode 100644 compiling.txt create mode 100644 source/ngc/sdfileio.c create mode 100644 source/ngc/sdfileio.h delete mode 100644 source/sz/7zAlloc.c delete mode 100644 source/sz/7zAlloc.h delete mode 100644 source/sz/7zBuffer.c delete mode 100644 source/sz/7zBuffer.h delete mode 100644 source/sz/7zCrc.c delete mode 100644 source/sz/7zCrc.h delete mode 100644 source/sz/7zDecode.c delete mode 100644 source/sz/7zDecode.h delete mode 100644 source/sz/7zExtract.c delete mode 100644 source/sz/7zExtract.h delete mode 100644 source/sz/7zHeader.c delete mode 100644 source/sz/7zHeader.h delete mode 100644 source/sz/7zIn.c delete mode 100644 source/sz/7zIn.h delete mode 100644 source/sz/7zItem.c delete mode 100644 source/sz/7zItem.h delete mode 100644 source/sz/7zMethodID.c delete mode 100644 source/sz/7zMethodID.h delete mode 100644 source/sz/7zTypes.h delete mode 100644 source/sz/LzmaDecode.c delete mode 100644 source/sz/LzmaDecode.h delete mode 100644 source/sz/LzmaTypes.h create mode 100644 source/vba/GBA.cpp rename source/vba/{agb => }/GBA.h (72%) create mode 100644 source/vba/GBAinline.h rename source/vba/{agb/GBAGfx.cpp => Gfx.cpp} (85%) create mode 100644 source/vba/Gfx.h create mode 100644 source/vba/Text.cpp create mode 100644 source/vba/Text.h create mode 100644 source/vba/admame.cpp delete mode 100644 source/vba/agb/GBA-arm.cpp delete mode 100644 source/vba/agb/GBA-thumb.cpp delete mode 100644 source/vba/agb/GBA.cpp delete mode 100644 source/vba/agb/GBAGfx.h delete mode 100644 source/vba/agb/GBAcpu.h delete mode 100644 source/vba/agb/GBAinline.h rename source/vba/{agb => }/agbprint.cpp (61%) rename source/vba/{agb => }/agbprint.h (97%) create mode 100644 source/vba/arm-new.h create mode 100644 source/vba/bilinear.cpp create mode 100644 source/vba/exprNode.h rename source/vba/{dmg => gb}/GB.cpp (92%) rename source/vba/{dmg => gb}/GB.h (94%) rename source/vba/{dmg => gb}/gbCheats.cpp (91%) rename source/vba/{dmg => gb}/gbCheats.h (100%) rename source/vba/{dmg => gb}/gbCodes.h (100%) rename source/vba/{dmg => gb}/gbCodesCB.h (100%) rename source/vba/{dmg => gb}/gbDis.cpp (100%) rename source/vba/{dmg => gb}/gbGfx.cpp (99%) rename source/vba/{dmg => gb}/gbGlobals.cpp (98%) rename source/vba/{dmg => gb}/gbGlobals.h (100%) rename source/vba/{dmg => gb}/gbMemory.cpp (99%) rename source/vba/{dmg => gb}/gbMemory.h (100%) rename source/vba/{dmg => gb}/gbPrinter.cpp (99%) rename source/vba/{dmg => gb}/gbPrinter.h (100%) rename source/vba/{dmg => gb}/gbSGB.cpp (100%) rename source/vba/{dmg => gb}/gbSGB.h (100%) rename source/vba/{dmg => gb}/gbSound.cpp (100%) rename source/vba/{dmg => gb}/gbSound.h (100%) create mode 100644 source/vba/getopt.c create mode 100644 source/vba/getopt.h create mode 100644 source/vba/getopt1.c create mode 100644 source/vba/simple2x.cpp create mode 100644 source/vba/thumb.h diff --git a/Makefile.gc b/Makefile.gc index 61e527ae..03728e3a 100644 --- a/Makefile.gc +++ b/Makefile.gc @@ -18,20 +18,18 @@ include $(DEVKITPPC)/gamecube_rules TARGET := vbagx_gc TARGETDIR := executables BUILD := build_gc -SOURCES := source/vba source/vba/agb source/vba/dmg source/ngc source/sz -INCLUDES := source/vba source/ngc +SOURCES := source/vba source/vba/gb source/ngc +INCLUDES := source/vba source/vba/gb source/ngc #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- -CFLAGS = -g -O3 -Wall $(MACHDEP) $(INCLUDE) \ - -DNGC -DUSE_VM -DWORDS_BIGENDIAN \ - -DC_CORE -D__ppc__ -D__POWERPC__ -DFINAL_VERSION \ - -DSDL -DNO_PNG -DHAVE_ZUTIL_H \ - -D_SZ_ONE_DIRECTORY -D_LZMA_IN_CB -D_LZMA_OUT_READ -CXXFLAGS = $(CFLAGS) -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -maltivec \ + -DNGC -DWORDS_BIGENDIAN -DC_CORE \ + -DCHANFFS -DSDL -DHAVE_ZUTIL_H +CXXFLAGS = -save-temps -Xassembler -aln=$@.lst $(CFLAGS) +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--cref #--------------------------------------------------------------------------------- # any extra libraries we wish to link with diff --git a/Makefile.wii b/Makefile.wii index ccbb84fa..43f8219d 100644 --- a/Makefile.wii +++ b/Makefile.wii @@ -18,19 +18,17 @@ include $(DEVKITPPC)/wii_rules TARGET := vbagx_wii TARGETDIR := executables BUILD := build_wii -SOURCES := source/vba source/vba/agb source/vba/dmg source/ngc source/sz -INCLUDES := source/vba source/ngc +SOURCES := source/vba source/vba/gb source/ngc +INCLUDES := source/vba source/vba/gb source/ngc #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- -CFLAGS = -g -O3 -Wall $(MACHDEP) $(INCLUDE) \ - -DNGC -DWII_DVD -DWORDS_BIGENDIAN -DVIDEO_THREADING \ - -DC_CORE -D__ppc__ -D__POWERPC__ -DFINAL_VERSION \ - -DSDL -DNO_PNG -DHAVE_ZUTIL_H \ - -D_SZ_ONE_DIRECTORY -D_LZMA_IN_CB -D_LZMA_OUT_READ -CXXFLAGS = $(CFLAGS) +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -maltivec \ + -DNGC -DWORDS_BIGENDIAN -DC_CORE \ + -DCHANFFS -DSDL -DHAVE_ZUTIL_H +CXXFLAGS = -save-temps -Xassembler -aln=$@.lst $(CFLAGS) LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--cref #--------------------------------------------------------------------------------- diff --git a/compiling.txt b/compiling.txt new file mode 100644 index 00000000..84fd62c7 --- /dev/null +++ b/compiling.txt @@ -0,0 +1,30 @@ +¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤ + + - Visual Boy Advance GX - + (Under GPL License) + +¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤ + +-=[ Compiling ]=- + +This thing is a bugger to compile, at least for now. You can compile +everything using -Os, but gameplay will run slow. Compiling with -O2 +using devkitppc 15 will crash on GBA.cpp. This must be due to some change in +gcc 4.x that sets a compiler flag that the assembly code in thumb.h can't +handle. + +To get around this: + +-use a precompiled GBA.o + +OR + +-compile a GBA.o and GBA.d using devkitpcc 13 (gcc 3.4.6) +-copy these precompiled files to the build dir, and compile everything else +with -O2 on devkitppc 15 (gcc 4.2.3) + +It would be really nice to automate this messy build process, or preferably +to find out how to get gcc 4.x to play nice. + + +-- Tantric, September 2008 diff --git a/readme.txt b/readme.txt index c2ad70c8..64b25047 100644 --- a/readme.txt +++ b/readme.txt @@ -1,13 +1,14 @@ ¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤ - Visual Boy Advance GX - - Version 1.0.3 - http://code.google.com/p/vba-wii + Version 1.0.1 (Under GPL License) ¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤°`°¤ø,¸,ø¤°`°¤ø,¸¸,ø¤ -Visual Boy Advance GX is a modified port of VBA-M / VBA 1.7.2. +-=[ Explanation ]=- + +Visual Boy Advance GX is a port of Visual Boy Advance 1.7.2. With it you can play GBA/Game Boy Color/Game Boy games on your Wii/GameCube. -=[ Features ]=- @@ -15,42 +16,18 @@ With it you can play GBA/Game Boy Color/Game Boy games on your Wii/GameCube. * Wiimote, Nunchuk, Classic, and Gamecube controller support * SRAM and State saving * Custom controller configurations -* SD, USB, DVD, SMB, GC Memory Card, Zip, and 7z support -* GBA compatiblity based on VBA-M r750, GB compatibility based on VBA 1.7.2 -* Turbo speed feature +* SD and USB support ×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬ |0O×øo· UPDATE HISTORY ·oø×O0| `¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨' -[What's New 1.0.3 - October 15, 2008] -* New timing / frameskip algorithm - should (hopefully) work 100% better! -* Performance improvements - video threading, PPC core partly activated -* Video zooming option -* Unfiltered video option -* 7z support -* Loading progress bars added - -[What's New 1.0.2 - October 6, 2008] -* New core! The core is now a custom combination of VBA-M and VBA 1.72 -* Added DVD, SMB, ZIP, GameCube MC support -* Faster USB/SD speeds -* Screen alignment and flickering problems fixed -* 128K save support added -* Better emulation speeds. Should now be nearly full speed all the time - for most games. -* Turbo speed feature. Mapped to right C-stick (classic controller & - Gamecube controller), and A+B for wiimote -* Controller mapping preferences bug fixed. Your preferences will reset - automatically to correct any problems in your preferences file -* Many other tweaks behind the scenes - -[What's New 1.0.1 - September 18, 2008] +[What's New 1.0.1] * GBA games now run at full speed * Menu improvements, with spiffy new background - thanks brakken! * Fixed L/R buttons - they work now -[What's New 1.0.0 - September 16, 2008] +[What's New 1.0.0] * Now compiles with devkitpro r15 * One makefile to make all versions diff --git a/source/ngc/dvd.cpp b/source/ngc/dvd.cpp index 968001bd..9b518cb8 100644 --- a/source/ngc/dvd.cpp +++ b/source/ngc/dvd.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #ifdef WII_DVD extern "C" { @@ -23,12 +22,14 @@ extern "C" { #include "menudraw.h" #include "gcunzip.h" -#include "filesel.h" -#include "vba.h" -u64 dvddir = 0; // offset of currently selected file or folder -int dvddirlength = 0; // length of currently selected file or folder -u64 dvdrootdir = 0; // offset of DVD root +extern int offset; +extern int selection; +extern FILEENTRIES filelist[MAXFILES]; +extern int maxfiles; +u64 dvddir = 0; +u64 dvdrootdir = 0; +int dvddirlength = 0; bool isWii = false; #ifdef HW_DOL @@ -36,192 +37,63 @@ bool isWii = false; volatile unsigned long *dvd = (volatile unsigned long *) 0xCC006000; #endif + /** Due to lack of memory, we'll use this little 2k keyhole for all DVD operations **/ +unsigned char DVDreadbuffer[2048] ATTRIBUTE_ALIGN (32); +unsigned char dvdbuffer[2048]; + + /**************************************************************************** * dvd_read * - * Main DVD function, everything else uses this! + * The only DVD function we need - you gotta luv gc-linux self-boots! * returns: 1 - ok ; 0 - error ***************************************************************************/ -#define ALIGN_FORWARD(x,align) ((typeof(x))((((uint32_t)(x)) + (align) - 1) & (~(align-1)))) -#define ALIGN_BACKWARD(x,align) ((typeof(x))(((uint32_t)(x)) & (~(align-1)))) - int dvd_read (void *dst, unsigned int len, u64 offset) { + + unsigned char *buffer = (unsigned char *) (unsigned int) DVDreadbuffer; + if (len > 2048) return 0; /*** We only allow 2k reads **/ + DCInvalidateRange ((void *) buffer, len); + // don't read past the end of the DVD (1.5 GB for GC DVD, 4.7 GB for DVD) - if((offset < 0x57057C00) || (isWii && (offset < 0x118244F00LL))) + if(offset < 0x57057C00 || (isWii && offset < 0x118244F00LL)) { - u8 * buffer = (u8 *)memalign(32, 0x8000); - u32 off_size = 0; - DCInvalidateRange ((void *) buffer, len); + #ifdef HW_DOL - #ifdef HW_DOL - dvd[0] = 0x2E; - dvd[1] = 0; - dvd[2] = 0xA8000000; - dvd[3] = (u32)(offset >> 2); - dvd[4] = len; - dvd[5] = (u32) buffer; - dvd[6] = len; - dvd[7] = 3; - - // Enable reading with DMA - while (dvd[7] & 1); - - // Ensure it has completed - if (dvd[0] & 0x4) - return 0; - #else - off_size = offset - ALIGN_BACKWARD(offset,0x800); - if (DI_ReadDVD( - buffer, - (ALIGN_FORWARD(offset + len,0x800) - ALIGN_BACKWARD(offset,0x800)) >> 11, - (u32)(ALIGN_BACKWARD(offset, 0x800) >> 11) - )) - return 0; - #endif + dvd[0] = 0x2E; + dvd[1] = 0; + dvd[2] = 0xA8000000; + dvd[3] = (u32)(offset >> 2); + dvd[4] = len; + dvd[5] = (u32) buffer; + dvd[6] = len; + dvd[7] = 3; /*** Enable reading with DMA ***/ + while (dvd[7] & 1); + memcpy (dst, buffer, len); + + if (dvd[0] & 0x4) /* Ensure it has completed */ + return 0; - memcpy (dst, buffer+off_size, len); - free(buffer); return 1; + + #elif WII_DVD + int ret = 1; + ret = DI_ReadDVD(dst, len >> 11, (u32)(offset >> 11)); + if (ret==0) + return 1; + else + return 0; + #endif } return 0; } -/**************************************************************************** - * dvd_buffered_read - * - * the GC's dvd drive only supports offsets and length which are a multiple - * of 32 bytes additionally the max length of a read is 2048 bytes - * this function removes these limitations - * additionally the 7zip SDK does often read data in 1 byte parts from the - * DVD even when it could read 32 bytes. the dvdsf_buffer has been added to - * avoid having to read the same sector over and over again - ***************************************************************************/ - -#define DVD_LENGTH_MULTIPLY 32 -#define DVD_OFFSET_MULTIPLY 32 -#define DVD_MAX_READ_LENGTH 2048 -#define DVD_SECTOR_SIZE 2048 - -unsigned char dvdsf_buffer[DVD_SECTOR_SIZE]; -u64 dvdsf_last_offset = 0; -u64 dvdsf_last_length = 0; - -int dvd_buffered_read(void *dst, u32 len, u64 offset) -{ - int ret = 0; - - // only read data if the data inside dvdsf_buffer cannot be used - if(offset != dvdsf_last_offset || len > dvdsf_last_length) - { - memset(&dvdsf_buffer, '\0', DVD_SECTOR_SIZE); - ret = dvd_read(&dvdsf_buffer, len, offset); - dvdsf_last_offset = offset; - dvdsf_last_length = len; - } - - memcpy(dst, &dvdsf_buffer, len); - return ret; -} - -int dvd_safe_read(void *dst_v, u32 len, u64 offset) -{ - unsigned char buffer[DVD_SECTOR_SIZE]; // buffer for one dvd sector - - // if read size and length are a multiply of DVD_(OFFSET,LENGTH)_MULTIPLY and length < DVD_MAX_READ_LENGTH - // we don't need to fix anything - if(len % DVD_LENGTH_MULTIPLY == 0 && offset % DVD_OFFSET_MULTIPLY == 0 && len <= DVD_MAX_READ_LENGTH) - { - int ret = dvd_buffered_read(buffer, len, offset); - memcpy(dst_v, &buffer, len); - return ret; - } - else - { - // no errors yet -> ret = 0 - // the return value of dvd_read will be OR'd with ret - // because dvd_read does return 1 on error and 0 on success and - // because 0 | 1 = 1 ret will also contain 1 if at least one error - // occured and 0 otherwise ;) - int ret = 0; // return value of dvd_read - - // we might need to fix all 3 issues - unsigned char *dst = (unsigned char *)dst_v; // gcc will not allow to use var[num] on void* types - u64 bytesToRead; // the number of bytes we still need to read & copy to the output buffer - u64 currentOffset; // the current dvd offset - u64 bufferOffset; // the current buffer offset - u64 i, j, k; // temporary variables which might be used for different stuff - // unsigned char buffer[DVD_SECTOR_SIZE]; // buffer for one dvd sector - - currentOffset = offset; - bytesToRead = len; - bufferOffset = 0; - - // fix first issue (offset is not a multiply of 32) - if(offset % DVD_OFFSET_MULTIPLY) - { - // calculate offset of the prior 32 byte position - i = currentOffset - (currentOffset % DVD_OFFSET_MULTIPLY); - - // calculate the offset from which the data of the dvd buffer will be copied - j = currentOffset % DVD_OFFSET_MULTIPLY; - - // calculate the number of bytes needed to reach the next DVD_OFFSET_MULTIPLY byte mark - k = DVD_OFFSET_MULTIPLY - j; - - // maybe we'll only need to copy a few bytes and we therefore don't even reach the next sector - if(k > len) - { - k = len; - } - - // read 32 bytes from the last 32 byte position - ret |= dvd_buffered_read(buffer, DVD_OFFSET_MULTIPLY, i); - - // copy the bytes to the output buffer and update currentOffset, bufferOffset and bytesToRead - memcpy(&dst[bufferOffset], &buffer[j], k); - currentOffset += k; - bufferOffset += k; - bytesToRead -= k; - } - - // fix second issue (more than 2048 bytes are needed) - if(bytesToRead > DVD_MAX_READ_LENGTH) - { - // calculate the number of 2048 bytes sector needed to get all data - i = (bytesToRead - (bytesToRead % DVD_MAX_READ_LENGTH)) / DVD_MAX_READ_LENGTH; - - // read data in 2048 byte sector - for(j = 0; j < i; j++) - { - ret |= dvd_buffered_read(buffer, DVD_MAX_READ_LENGTH, currentOffset); // read sector - memcpy(&dst[bufferOffset], buffer, DVD_MAX_READ_LENGTH); // copy to output buffer - - // update currentOffset, bufferOffset and bytesToRead - currentOffset += DVD_MAX_READ_LENGTH; - bufferOffset += DVD_MAX_READ_LENGTH; - bytesToRead -= DVD_MAX_READ_LENGTH; - } - } - - // fix third issue (length is not a multiply of 32) - if(bytesToRead) - { - ret |= dvd_buffered_read(buffer, DVD_MAX_READ_LENGTH, currentOffset); // read 32 byte from the dvd - memcpy(&dst[bufferOffset], buffer, bytesToRead); // copy bytes to output buffer - } - - //free(tmp); - return ret; - } -} - /** Minimal ISO Directory Definition **/ #define RECLEN 0 /* Record length */ #define EXTENT 6 /* Extent */ @@ -245,7 +117,6 @@ getpvd () { int sector = 16; u32 rootdir32; - unsigned char dvdbuffer[2048]; dvddir = dvddirlength = 0; IsJoliet = -1; @@ -330,7 +201,7 @@ bool TestDVD() ***************************************************************************/ static int diroffset = 0; static int -getentry (int entrycount, unsigned char dvdbuffer[]) +getentry (int entrycount) { char fname[512]; /* Huge, but experience has determined this */ char *ptr; @@ -450,7 +321,6 @@ ParseDVDdirectory () u64 rdoffset; int len = 0; int filecount = 0; - unsigned char dvdbuffer[2048]; // initialize selection selection = offset = 0; @@ -470,7 +340,7 @@ ParseDVDdirectory () diroffset = 0; - while (getentry (filecount, dvdbuffer)) + while (getentry (filecount)) { if(strlen(filelist[filecount].filename) > 0 && filecount < MAXFILES) filecount++; @@ -559,15 +429,15 @@ bool SwitchDVDFolder(char origdir[]) /**************************************************************************** * LoadDVDFile - * This function will load a file from DVD + * This function will load a file from DVD, in BIN, SMD or ZIP format. * The values for offset and length are inherited from dvddir and * dvddirlength. * - * The buffer parameter should re-use the initial ROM buffer + * The buffer parameter should re-use the initial ROM buffer. ***************************************************************************/ int -LoadDVDFile (unsigned char *buffer, int length) +LoadDVDFile (unsigned char *buffer) { int offset; int blocks; @@ -575,46 +445,35 @@ LoadDVDFile (unsigned char *buffer, int length) u64 discoffset; char readbuffer[2048]; - dvddir = filelist[selection].offset; - dvddirlength = filelist[selection].length; - // How many 2k blocks to read blocks = dvddirlength / 2048; offset = 0; discoffset = dvddir; + ShowAction ((char*) "Loading..."); + dvd_read (readbuffer, 2048, discoffset); - if(length > 0 && length <= 2048) // do a partial read (eg: to check file header) + if (!IsZipFile (readbuffer)) { - dvd_read (buffer, length, discoffset); - } - else // load whole file - { - dvd_read (readbuffer, 2048, discoffset); - - if (!IsZipFile (readbuffer)) + for (i = 0; i < blocks; i++) { - for (i = 0; i < blocks; i++) - { - dvd_read (readbuffer, 2048, discoffset); - memcpy (buffer + offset, readbuffer, 2048); - offset += 2048; - discoffset += 2048; - ShowProgress ((char *)"Loading...", offset, length); - } - - /*** And final cleanup ***/ - if (dvddirlength % 2048) - { - i = dvddirlength % 2048; - dvd_read (readbuffer, 2048, discoffset); - memcpy (buffer + offset, readbuffer, i); - } + dvd_read (readbuffer, 2048, discoffset); + memcpy (buffer + offset, readbuffer, 2048); + offset += 2048; + discoffset += 2048; } - else + + /*** And final cleanup ***/ + if (dvddirlength % 2048) { - return UnZipBuffer (buffer, METHOD_DVD); // unzip from dvd + i = dvddirlength % 2048; + dvd_read (readbuffer, 2048, discoffset); + memcpy (buffer + offset, readbuffer, i); } } + else + { + return UnZipFile (buffer, discoffset); // unzip from dvd + } return dvddirlength; } diff --git a/source/ngc/dvd.h b/source/ngc/dvd.h index 7d0083ed..9aaae6b3 100644 --- a/source/ngc/dvd.h +++ b/source/ngc/dvd.h @@ -13,17 +13,10 @@ int getpvd (); int ParseDVDdirectory (); -int LoadDVDFile (unsigned char *buffer, int length); +int LoadDVDFile (unsigned char *buffer); bool TestDVD(); int dvd_read (void *dst, unsigned int len, u64 offset); -int dvd_safe_read (void *dst, unsigned int len, u64 offset); bool SwitchDVDFolder(char dir[]); void SetDVDDriveType(); -#ifdef HW_DOL -void dvd_motor_off (); -#endif - -extern u64 dvddir; -extern int dvddirlength; #endif diff --git a/source/ngc/fileop.cpp b/source/ngc/fileop.cpp index 70d28671..b6f6a376 100644 --- a/source/ngc/fileop.cpp +++ b/source/ngc/fileop.cpp @@ -24,8 +24,14 @@ #include "filesel.h" #include "preferences.h" -// FAT file pointer - the only one we should ever use! -FILE * fatfile; +FILE * filehandle; + +extern unsigned char savebuffer[]; +extern char output[16384]; +extern int offset; +extern int selection; +extern char currentdir[MAXPATHLEN]; +extern FILEENTRIES filelist[MAXFILES]; /**************************************************************************** * fat_is_mounted @@ -61,17 +67,18 @@ bool ChangeFATInterface(int method, bool silent) { devFound = true; fatSetDefaultInterface(PI_INTERNAL_SD); - fatEnableReadAhead (PI_INTERNAL_SD, 6, 64); } #endif if (!devFound && FatIsMounted(PI_SDGECKO_A)) { devFound = true; + fatSetDefaultInterface(PI_SDGECKO_A); } if(!devFound && FatIsMounted(PI_SDGECKO_B)) { devFound = true; + fatSetDefaultInterface(PI_SDGECKO_B); } if(!devFound) { @@ -86,7 +93,6 @@ bool ChangeFATInterface(int method, bool silent) { devFound = true; fatSetDefaultInterface(PI_USBSTORAGE); - fatEnableReadAhead (PI_USBSTORAGE, 6, 64); } else { @@ -164,54 +170,44 @@ ParseFATdirectory(int method) * LoadFATFile ***************************************************************************/ int -LoadFATFile (char * rbuffer, int length) +LoadFATFile (char *filename, int length) { - char zipbuffer[2048]; + /*char zipbuffer[2048]; + FILE *handle; + unsigned char *rbuffer; + u32 size;*/ char filepath[MAXPATHLEN]; - u32 size; /* Check filename length */ - if (!MakeROMPath(filepath, METHOD_SD)) + if ((strlen(currentdir)+1+strlen(filelist[selection].filename)) < MAXPATHLEN) + sprintf(filepath, "%s/%s",currentdir,filelist[selection].filename); + else { WaitPrompt((char*) "Maximum filepath length reached!"); return -1; } - - fatfile = fopen (filepath, "rb"); - if (fatfile > 0) + return loadVBAROM(filepath); +/* + handle = fopen (filepath, "rb"); + if (handle > 0) { - if(length > 0 && length <= 2048) // do a partial read (eg: to check file header) + fread (zipbuffer, 1, 2048, handle); + + if (IsZipFile (zipbuffer)) { - fread (rbuffer, 1, length, fatfile); - size = length; + size = UnZipFile (rbuffer, handle); // unzip from FAT } - else // load whole file + else { - fread (zipbuffer, 1, 2048, fatfile); - - if (IsZipFile (zipbuffer)) - { - size = UnZipBuffer ((unsigned char *)rbuffer, METHOD_SD); // unzip from FAT - } - else - { - // Just load the file up - fseek(fatfile, 0, SEEK_END); - size = ftell(fatfile); // get filesize - fseek(fatfile, 2048, SEEK_SET); // seek back to point where we left off - memcpy (rbuffer, zipbuffer, 2048); // copy what we already read - - ShowProgress ((char *)"Loading...", 2048, size); - - u32 offset = 2048; - while(offset < size) - { - offset += fread (rbuffer + offset, 1, (1024*512), fatfile); // read in 512K chunks - ShowProgress ((char *)"Loading...", offset, size); - } - } + // Just load the file up + fseek(handle, 0, SEEK_END); + length = ftell(handle); // get filesize + fseek(handle, 2048, SEEK_SET); // seek back to point where we left off + memcpy (rbuffer, zipbuffer, 2048); // copy what we already read + fread (rbuffer + 2048, 1, length - 2048, handle); + size = length; } - fclose (fatfile); + fclose (handle); return size; } else @@ -219,29 +215,8 @@ LoadFATFile (char * rbuffer, int length) WaitPrompt((char*) "Error opening file"); return 0; } -} -/**************************************************************************** - * LoadFATSzFile - * Loads the selected file # from the specified 7z into rbuffer - * Returns file size - ***************************************************************************/ -int -LoadFATSzFile(char * filepath, unsigned char * rbuffer) -{ - u32 size; - fatfile = fopen (filepath, "rb"); - if (fatfile > 0) - { - size = SzExtractFile(filelist[selection].offset, rbuffer); - fclose (fatfile); - return size; - } - else - { - WaitPrompt((char*) "Error opening file"); - return 0; - } + return 0;*/ } /**************************************************************************** @@ -250,11 +225,15 @@ LoadFATSzFile(char * filepath, unsigned char * rbuffer) int LoadBufferFromFAT (char *filepath, bool silent) { - int size = 0; + FILE *handle; + int boffset = 0; + int read = 0; - fatfile = fopen (filepath, "rb"); + ClearSaveBuffer (); - if (fatfile <= 0) + handle = fopen (filepath, "rb"); + + if (handle <= 0) { if ( !silent ) { @@ -265,13 +244,15 @@ LoadBufferFromFAT (char *filepath, bool silent) return 0; } - fseek(fatfile, 0, SEEK_END); // go to end of file - size = ftell(fatfile); // get filesize - fseek(fatfile, 0, SEEK_SET); // go to start of file - fread (savebuffer, 1, size, fatfile); - fclose (fatfile); + /*** This is really nice, just load the file and decode it ***/ + while ((read = fread (savebuffer + boffset, 1, 1024, handle)) > 0) + { + boffset += read; + } + + fclose (handle); - return size; + return boffset; } /**************************************************************************** @@ -280,11 +261,13 @@ LoadBufferFromFAT (char *filepath, bool silent) int SaveBufferToFAT (char *filepath, int datasize, bool silent) { - if (datasize) + FILE *handle; + + if (datasize) { - fatfile = fopen (filepath, "wb"); + handle = fopen (filepath, "wb"); - if (fatfile <= 0) + if (handle <= 0) { char msg[100]; sprintf(msg, "Couldn't save %s", filepath); @@ -292,8 +275,10 @@ SaveBufferToFAT (char *filepath, int datasize, bool silent) return 0; } - fwrite (savebuffer, 1, datasize, fatfile); - fclose (fatfile); + fwrite (savebuffer, 1, datasize, handle); + fclose (handle); } + + ClearSaveBuffer (); return datasize; } diff --git a/source/ngc/fileop.h b/source/ngc/fileop.h index a1a549c6..7474c707 100644 --- a/source/ngc/fileop.h +++ b/source/ngc/fileop.h @@ -23,12 +23,10 @@ bool ChangeFATInterface(int method, bool silent); int ParseFATdirectory(int method); -int LoadFATFile (char * fbuffer, int length); -int LoadFATSzFile(char * filepath, unsigned char * rbuffer); +int LoadFATFile (char *filename, int length); int SaveBufferToFAT (char *filepath, int datasize, bool silent); int LoadBufferFromFAT (char *filepath, bool silent); extern char currFATdir[MAXPATHLEN]; -extern FILE * fatfile; #endif diff --git a/source/ngc/filesel.cpp b/source/ngc/filesel.cpp index 03132045..c0ea72d4 100644 --- a/source/ngc/filesel.cpp +++ b/source/ngc/filesel.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #ifdef WII_DVD extern "C" { @@ -32,12 +31,10 @@ extern "C" { #include "input.h" #include "dvd.h" #include "smbop.h" -#include "gcunzip.h" int offset; int selection; char currentdir[MAXPATHLEN]; -char szpath[MAXPATHLEN]; int maxfiles; extern int screenheight; @@ -49,38 +46,20 @@ int hasloaded = 0; // Global file entry table FILEENTRIES filelist[MAXFILES]; -bool inSz = false; -char ROMFilename[512]; -bool ROMLoaded = false; - -unsigned char *savebuffer = NULL; - -/**************************************************************************** - * AllocSaveBuffer () - * Clear and allocate the savebuffer - ***************************************************************************/ -void -AllocSaveBuffer () -{ - if (savebuffer != NULL) - free(savebuffer); +unsigned char savebuffer[SAVEBUFFERSIZE] ATTRIBUTE_ALIGN (32); - savebuffer = (unsigned char *) memalign(32, SAVEBUFFERSIZE); - memset (savebuffer, 0, SAVEBUFFERSIZE); -} +char ROMFilename[512]; +int ROMSize = 0; /**************************************************************************** - * FreeSaveBuffer () - * Free the savebuffer memory + * ClearSaveBuffer () + * Clear the savebuffer ***************************************************************************/ void -FreeSaveBuffer () +ClearSaveBuffer () { - if (savebuffer != NULL) - free(savebuffer); - - savebuffer = NULL; + memset (savebuffer, 0, SAVEBUFFERSIZE); } /**************************************************************************** @@ -192,28 +171,6 @@ int UpdateDirName(int method) } } -bool MakeROMPath(char filepath[], int method) -{ - char temppath[MAXPATHLEN]; - - // Check filename length - if ((strlen(currentdir)+1+strlen(filelist[selection].filename)) < MAXPATHLEN) - { - sprintf(temppath, "%s/%s",currentdir,filelist[selection].filename); - - if(method == METHOD_SMB) - strcpy(filepath, SMBPath(temppath)); - else - strcpy(filepath, temppath); - return true; - } - else - { - filepath[0] = 0; - return false; - } -} - /**************************************************************************** * FileSortCallback * @@ -241,25 +198,6 @@ int FileSortCallback(const void *f1, const void *f2) return stricmp(((FILEENTRIES *)f1)->filename, ((FILEENTRIES *)f2)->filename); } -/**************************************************************************** - * IsSz - * - * Checks if the specified file is a 7z - ***************************************************************************/ - -bool IsSz() -{ - if (strlen(filelist[selection].filename) > 4) - { - char * p = strrchr(filelist[selection].filename, '.'); - - if (p != NULL) - if(stricmp(p, ".7z") == 0) - return true; - } - return false; -} - /**************************************************************************** * StripExt * @@ -273,7 +211,7 @@ void StripExt(char* returnstring, char * inputstring) strcpy (returnstring, inputstring); loc_dot = strrchr(returnstring,'.'); if (loc_dot != NULL) - *loc_dot = 0; // strip file extension + *loc_dot = '\0'; // strip file extension } /**************************************************************************** @@ -315,8 +253,8 @@ int FileSelector (int method) p = PAD_ButtonsDown (0); ph = PAD_ButtonsHeld (0); #ifdef HW_RVL - wm_ay = WPAD_Stick (0, 0, 0); - wm_sx = WPAD_Stick (0, 1, 1); + wm_ay = WPAD_StickY (0, 0); + wm_sx = WPAD_StickX (0, 1); wp = WPAD_ButtonsDown (0); wh = WPAD_ButtonsHeld (0); @@ -334,25 +272,7 @@ int FileSelector (int method) if (filelist[selection].flags) // This is directory { /* update current directory and set new entry list if directory has changed */ - int status; - - if(inSz && selection == 0) // inside a 7z, requesting to leave - { - if(method == METHOD_DVD) - { - // go to directory the 7z was in - dvddir = filelist[0].offset; - dvddirlength = filelist[0].length; - } - inSz = false; - status = 1; - SzClose(); - } - else - { - status = UpdateDirName(method); - } - + int status = UpdateDirName(method); if (status == 1) // ok, open directory { switch (method) @@ -384,42 +304,37 @@ int FileSelector (int method) } else // this is a file { - // 7z file - let's open it up to select a file inside - if(IsSz()) + // store the filename (w/o ext) - used for sram/freeze naming + StripExt(ROMFilename, filelist[selection].filename); + + ShowAction ((char *)"Loading..."); + + switch (method) { - // we'll store the 7z filepath for extraction later - if(!MakeROMPath(szpath, method)) - { - WaitPrompt((char*) "Maximum filepath length reached!"); - return -1; - } - int szfiles = SzParse(szpath, method); - if(szfiles) - { - maxfiles = szfiles; - inSz = true; - } - else - WaitPrompt((char*) "Error opening archive!"); + case METHOD_SD: + case METHOD_USB: + ROMSize = LoadFATFile (filelist[selection].filename, filelist[selection].length); + break; + + case METHOD_DVD: + dvddir = filelist[selection].offset; + dvddirlength = filelist[selection].length; + //ROMSize = LoadDVDFile (Memory.ROM); + break; + + case METHOD_SMB: + //ROMSize = LoadSMBFile (filelist[selection].filename, filelist[selection].length); + break; } - else - { - // store the filename (w/o ext) - used for sram/freeze naming - StripExt(ROMFilename, filelist[selection].filename); - - ShowAction ((char *)"Loading..."); - ROMLoaded = LoadVBAROM(method); - inSz = false; + if (ROMSize > 0) + { - if (ROMLoaded) - { - return 1; - } - else - { - WaitPrompt((char*) "Error loading ROM!"); - } + return 1; + } + else + { + WaitPrompt((char*) "Error loading ROM!"); } } redraw = 1; @@ -613,7 +528,7 @@ OpenFAT (int method) { if(ChangeFATInterface(method, NOTSILENT)) { - // change current dir to vba roms directory + // change current dir to snes roms directory sprintf ( currentdir, "%s/%s", ROOTFATDIR, GCSettings.LoadFolder ); // Parse initial root directory and get entries list diff --git a/source/ngc/filesel.h b/source/ngc/filesel.h index 84cb3aee..f64840d3 100644 --- a/source/ngc/filesel.h +++ b/source/ngc/filesel.h @@ -11,11 +11,9 @@ #ifndef _NGCFILESEL_ #define _NGCFILESEL_ -#include - -#define SAVEBUFFERSIZE (512 * 1024) +#define SAVEBUFFERSIZE ((512 * 1024) + 2048 + 64 + 4 + 4) #define MAXJOLIET 255 -#define MAXDISPLAY 40 +#define MAXDISPLAY 44 typedef struct { @@ -28,18 +26,9 @@ typedef struct #define MAXFILES 2000 // Restrict to 2000 files per dir extern FILEENTRIES filelist[MAXFILES]; -extern unsigned char *savebuffer; -extern int offset; -extern int selection; -extern char currentdir[MAXPATHLEN]; -extern char szpath[MAXPATHLEN]; -extern bool inSz; -extern int maxfiles; extern char ROMFilename[512]; -void AllocSaveBuffer(); -void FreeSaveBuffer(); -bool MakeROMPath(char filepath[], int method); +void ClearSaveBuffer (); int OpenROM (int method); int autoLoadMethod(); int autoSaveMethod(); diff --git a/source/ngc/gcunzip.cpp b/source/ngc/gcunzip.cpp index f6c075dc..b635fe1f 100644 --- a/source/ngc/gcunzip.cpp +++ b/source/ngc/gcunzip.cpp @@ -14,19 +14,11 @@ #include #include -extern "C" { -#include "../sz/7zCrc.h" -#include "../sz/7zIn.h" -#include "../sz/7zExtract.h" -} - #include "dvd.h" #include "smbop.h" -#include "fileop.h" #include "video.h" #include "menudraw.h" #include "gcunzip.h" -#include "vba.h" /* * PKWare Zip Header - adopted into zip standard @@ -67,7 +59,7 @@ FLIP16 (u16 b) * IsZipFile * * Returns TRUE when PKZIPID is first four characters of buffer - ***************************************************************************/ + ****************************************************************************/ int IsZipFile (char *buffer) { @@ -81,14 +73,17 @@ IsZipFile (char *buffer) return 0; } -/***************************************************************************** -* UnZipBuffer -* -* It should be noted that there is a limit of 5MB total size for any ROM -******************************************************************************/ + /***************************************************************************** + * unzip + * + * It should be noted that there is a limit of 5MB total size for any ROM + ******************************************************************************/ +FILE* fatfile; // FAT +u64 discoffset; // DVD +SMBFILE smbfile; // SMB int -UnZipBuffer (unsigned char *outbuffer, int method) +UnZipBuffer (unsigned char *outbuffer, short where) { PKZIPHEADER pkzip; int zipoffset = 0; @@ -100,25 +95,23 @@ UnZipBuffer (unsigned char *outbuffer, int method) int readoffset = 0; int have = 0; char readbuffer[ZIPCHUNK]; - u64 discoffset = 0; + char msg[128]; - // Read Zip Header - switch (method) + /*** Read Zip Header ***/ + switch (where) { - case METHOD_SD: - case METHOD_USB: - fseek(fatfile, 0, SEEK_SET); - fread (readbuffer, 1, ZIPCHUNK, fatfile); - break; - - case METHOD_DVD: - discoffset = dvddir; - dvd_read (readbuffer, ZIPCHUNK, discoffset); - break; - - case METHOD_SMB: - SMB_ReadFile(readbuffer, ZIPCHUNK, 0, smbfile); - break; + case 0: // SD Card + fseek(fatfile, 0, SEEK_SET); + fread (readbuffer, 1, ZIPCHUNK, fatfile); + break; + + case 1: // DVD + dvd_read (readbuffer, ZIPCHUNK, discoffset); + break; + + case 2: // From SMB + SMB_ReadFile(readbuffer, ZIPCHUNK, 0, smbfile); + break; } /*** Copy PKZip header to local, used as info ***/ @@ -126,7 +119,9 @@ UnZipBuffer (unsigned char *outbuffer, int method) pkzip.uncompressedSize = FLIP32 (pkzip.uncompressedSize); - ShowProgress ((char *)"Loading...", 0, pkzip.uncompressedSize); + sprintf (msg, "Unzipping %d bytes ... Wait", + pkzip.uncompressedSize); + ShowAction (msg); /*** Prepare the zip stream ***/ memset (&zs, 0, sizeof (z_stream)); @@ -176,28 +171,26 @@ UnZipBuffer (unsigned char *outbuffer, int method) } while (zs.avail_out == 0); - // Readup the next 2k block + /*** Readup the next 2k block ***/ zipoffset = 0; zipchunk = ZIPCHUNK; - switch (method) + switch (where) { - case METHOD_SD: - case METHOD_USB: - fread (readbuffer, 1, ZIPCHUNK, fatfile); - break; - - case METHOD_DVD: - readoffset += ZIPCHUNK; - dvd_safe_read (readbuffer, ZIPCHUNK, discoffset+readoffset); - break; - - case METHOD_SMB: - readoffset += ZIPCHUNK; - SMB_ReadFile(readbuffer, ZIPCHUNK, readoffset, smbfile); - break; + case 0: // SD Card + fread (readbuffer, 1, ZIPCHUNK, fatfile); + break; + + case 1: // DVD + readoffset += ZIPCHUNK; + dvd_read (readbuffer, ZIPCHUNK, discoffset+readoffset); + break; + + case 2: // From SMB + readoffset += ZIPCHUNK; + SMB_ReadFile(readbuffer, ZIPCHUNK, readoffset, smbfile); + break; } - ShowProgress ((char *)"Loading...", bufferoffset, pkzip.uncompressedSize); } while (res != Z_STREAM_END); @@ -213,344 +206,24 @@ UnZipBuffer (unsigned char *outbuffer, int method) return 0; } - -/**************************************************************************** -* GetFirstZipFilename -* -* Returns the filename of the first file in the zipped archive -* The idea here is to do the least amount of work required -***************************************************************************/ - -char * -GetFirstZipFilename (int method) -{ - char * firstFilename = NULL; - char tempbuffer[ZIPCHUNK]; - - // read start of ZIP - switch (method) - { - case METHOD_SD: // SD Card - case METHOD_USB: // USB - LoadFATFile (tempbuffer, ZIPCHUNK); - break; - - case METHOD_DVD: // DVD - LoadDVDFile ((unsigned char *)tempbuffer, ZIPCHUNK); - break; - - case METHOD_SMB: // From SMB - LoadSMBFile (tempbuffer, ZIPCHUNK); - break; - } - - tempbuffer[28] = 0; // truncate - filename length is 2 bytes long (bytes 26-27) - int namelength = tempbuffer[26]; // filename length starts 26 bytes in - - firstFilename = &tempbuffer[30]; // first filename of a ZIP starts 31 bytes in - firstFilename[namelength] = 0; // truncate at filename length - - return firstFilename; -} - -/**************************************************************************** -* 7z functions -***************************************************************************/ - -typedef struct _SzFileInStream -{ - ISzInStream InStream; - u64 offset; // offset of the file - unsigned int len; // length of the file - u64 pos; // current position of the file pointer -} SzFileInStream; - -// 7zip error list -char szerrormsg[][30] = { - "7z: Data error", - "7z: Out of memory", - "7z: CRC Error", - "7z: Not implemented", - "7z: Fail", - "7z: Archive error", - "7z: Dictionary too large", -}; - -SZ_RESULT SzRes; - -SzFileInStream SzArchiveStream; -CArchiveDatabaseEx SzDb; -ISzAlloc SzAllocImp; -ISzAlloc SzAllocTempImp; -UInt32 SzBlockIndex = 0xFFFFFFFF; -size_t SzBufferSize; -size_t SzOffset; -size_t SzOutSizeProcessed; -CFileItem *SzF; - -char sz_buffer[2048]; -int szMethod = 0; - -/**************************************************************************** -* Is7ZipFile -* -* Returns 1 when 7z signature is found -****************************************************************************/ +// Reading from FAT int -Is7ZipFile (char *buffer) -{ - unsigned int *check; - check = (unsigned int *) buffer; - - // 7z signature - static Byte Signature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; - - int i; - for(i = 0; i < 6; i++) - if(buffer[i] != Signature[i]) - return 0; - - return 1; // 7z archive found -} - -// display an error message -void SzDisplayError(SZ_RESULT res) -{ - WaitPrompt(szerrormsg[(res - 1)]); -} - -// function used by the 7zip SDK to read data from SD/USB/DVD/SMB -SZ_RESULT SzFileReadImp(void *object, void **buffer, size_t maxRequiredSize, size_t *processedSize) -{ - // the void* object is a SzFileInStream - SzFileInStream *s = (SzFileInStream *) object; - - // calculate offset - u64 offset = (u64) (s->offset + s->pos); - - if (maxRequiredSize > 2048) - maxRequiredSize = 2048; - - // read data - switch (szMethod) - { - case METHOD_SD: - case METHOD_USB: - fseek(fatfile, offset, SEEK_SET); - fread(sz_buffer, 1, maxRequiredSize, fatfile); - break; - case METHOD_DVD: - dvd_safe_read(sz_buffer, maxRequiredSize, offset); - break; - case METHOD_SMB: - SMB_ReadFile(sz_buffer, maxRequiredSize, offset, smbfile); - break; - } - - *buffer = sz_buffer; - *processedSize = maxRequiredSize; - s->pos += *processedSize; - - if(maxRequiredSize > 1024) // only show progress for large reads - // this isn't quite right, but oh well - ShowProgress ((char *)"Loading...", s->pos, filelist[selection].length); - - return SZ_OK; -} - -// function used by the 7zip SDK to change the filepointer -SZ_RESULT SzFileSeekImp(void *object, CFileSize pos) -{ - // the void* object is a SzFileInStream - SzFileInStream *s = (SzFileInStream *) object; - - // check if the 7z SDK wants to move the pointer to somewhere after the EOF - if (pos >= s->len) - { - WaitPrompt((char *) "7z: Error - attempt to read after EOF!"); - return SZE_FAIL; - } - - // save new position and return - s->pos = pos; - return SZ_OK; -} - -/**************************************************************************** -* SzParse -* -* Opens a 7z file, and parses it -* Right now doesn't parse 7z, since we'll always use the first file -* But it could parse the entire 7z for full browsing capability -***************************************************************************/ - -int SzParse(char * filepath, int method) +UnZipFile (unsigned char *outbuffer, FILE* infile) { - int nbfiles = 0; - - // save the offset and the length of this file inside the archive stream structure - SzArchiveStream.offset = filelist[selection].offset; - SzArchiveStream.len = filelist[selection].length; - SzArchiveStream.pos = 0; - - // open file - switch (method) - { - case METHOD_SD: - case METHOD_USB: - fatfile = fopen (filepath, "rb"); - if(!fatfile) - return 0; - break; - case METHOD_SMB: - smbfile = OpenSMBFile(filepath); - if(!smbfile) - return 0; - break; - } - - // set szMethod to current chosen load method - szMethod = method; - - // set handler functions for reading data from FAT/SMB/DVD - SzArchiveStream.InStream.Read = SzFileReadImp; - SzArchiveStream.InStream.Seek = SzFileSeekImp; - - // set default 7Zip SDK handlers for allocation and freeing memory - SzAllocImp.Alloc = SzAlloc; - SzAllocImp.Free = SzFree; - SzAllocTempImp.Alloc = SzAllocTemp; - SzAllocTempImp.Free = SzFreeTemp; - - // prepare CRC and 7Zip database structures - InitCrcTable(); - SzArDbExInit(&SzDb); - - // open the archive - SzRes = SzArchiveOpen(&SzArchiveStream.InStream, &SzDb, &SzAllocImp, - &SzAllocTempImp); - - if (SzRes != SZ_OK) - { - SzDisplayError(SzRes); - // free memory used by the 7z SDK - SzClose(); - } - else // archive opened successfully - { - if(SzDb.Database.NumFiles > 0) - { - // Parses the 7z into a full file listing - - // erase all previous entries - memset(&filelist, 0, sizeof(FILEENTRIES) * MAXFILES); - - // add '..' folder in case the user wants exit the 7z - strncpy(filelist[0].displayname, "..", 2); - filelist[0].flags = 1; - filelist[0].offset = dvddir; - filelist[0].length = dvddirlength; - - // get contents and parse them into file list structure - unsigned int SzI, SzJ; - SzJ = 1; - for (SzI = 0; SzI < SzDb.Database.NumFiles; SzI++) - { - SzF = SzDb.Database.Files + SzI; - - // skip directories - if (SzF->IsDirectory) - continue; - - // do not exceed MAXFILES to avoid possible buffer overflows - if (SzJ == (MAXFILES - 1)) - break; - - // parse information about this file to the dvd file list structure - strncpy(filelist[SzJ].filename, SzF->Name, MAXJOLIET); // copy joliet name (useless...) - filelist[SzJ].filename[MAXJOLIET] = 0; // terminate string - strncpy(filelist[SzJ].displayname, SzF->Name, MAXDISPLAY+1); // crop name for display - filelist[SzJ].length = SzF->Size; // filesize - filelist[SzJ].offset = SzI; // the extraction function identifies the file with this number - filelist[SzJ].flags = 0; // only files will be displayed (-> no flags) - SzJ++; - } - - // update maxfiles and select the first entry - offset = selection = 0; - nbfiles = SzJ; - } - else - { - SzArDbExFree(&SzDb, SzAllocImp.Free); - } - } - - // close file - switch (method) - { - case METHOD_SD: - case METHOD_USB: - fclose(fatfile); - break; - case METHOD_SMB: - SMB_CloseFile (smbfile); - break; - } - return nbfiles; + fatfile = infile; + return UnZipBuffer(outbuffer, 0); } - -/**************************************************************************** -* SzClose -* -* Closes a 7z file -***************************************************************************/ - -void SzClose() +// Reading from DVD +int +UnZipFile (unsigned char *outbuffer, u64 inoffset) { - if(SzDb.Database.NumFiles > 0) - SzArDbExFree(&SzDb, SzAllocImp.Free); + discoffset = inoffset; + return UnZipBuffer(outbuffer, 1); } - -/**************************************************************************** -* SzExtractFile -* -* Extracts the given file # into the buffer specified -* Must parse the 7z BEFORE running this function -***************************************************************************/ - -int SzExtractFile(int i, unsigned char *buffer) +// Reading from SMB +int +UnZipFile (unsigned char *outbuffer, SMBFILE infile) { - // prepare some variables - SzBlockIndex = 0xFFFFFFFF; - SzOffset = 0; - - // Unzip the file - - SzRes = SzExtract2( - &SzArchiveStream.InStream, - &SzDb, - i, // index of file - &SzBlockIndex, // index of solid block - &buffer, - &SzBufferSize, - &SzOffset, // offset of stream for required file in *outBuffer - &SzOutSizeProcessed, // size of file in *outBuffer - &SzAllocImp, - &SzAllocTempImp); - - // close 7Zip archive and free memory - SzClose(); - - // check for errors - if(SzRes != SZ_OK) - { - // display error message - SzDisplayError(SzRes); - return 0; - } - else - { - return SzOutSizeProcessed; - } + smbfile = infile; + return UnZipBuffer(outbuffer, 2); } diff --git a/source/ngc/gcunzip.h b/source/ngc/gcunzip.h index 22f3f538..68d6ff9e 100644 --- a/source/ngc/gcunzip.h +++ b/source/ngc/gcunzip.h @@ -12,12 +12,11 @@ #include -int IsZipFile (char *buffer); -char * GetFirstZipFilename(int method); -int UnZipBuffer (unsigned char *outbuffer, int method); -int SzParse(char * filepath, int method); -int SzExtractFile(int i, unsigned char *buffer); -void SzClose(); +extern int IsZipFile (char *buffer); + +int UnZipFile (unsigned char *outbuffer, FILE* infile); // Reading from FAT +int UnZipFile (unsigned char *outbuffer, u64 inoffset); // Reading from DVD +int UnZipFile (unsigned char *outbuffer, SMBFILE infile); // Reading from SMB /* * Zip file header definition diff --git a/source/ngc/images/bg.h b/source/ngc/images/bg.h index 29907081..6d224121 100644 --- a/source/ngc/images/bg.h +++ b/source/ngc/images/bg.h @@ -7,976 +7,976 @@ #define _IMGBG_ const unsigned long bg[480*640]={ -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5554, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5554, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x559A5454, 0x559A5454, 0x549A5554, 0x549A5554, 0x549A5454, 0x559A5454, 0x559A5454, 0x549A5454, -0x559A5454, 0x559A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x559A5554, -0x549A5554, 0x559A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x559A5554, 0x559A5554, -0x549A5554, 0x559A5554, 0x549A5454, 0x549A5554, 0x559A5554, 0x549A5454, 0x549A5554, 0x549A5554, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, -0x559A5454, 0x549A5454, 0x559A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x559A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5554, -0x549A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x549A5454, 0x549A5554, 0x559A5454, 0x549A5454, -0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5554, 0x559A5454, 0x549A5554, 0x549A5454, -0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5554, -0x559A5554, 0x549A5554, 0x559A5454, 0x549A5554, 0x549A5554, 0x559A5454, 0x549A5454, 0x549A5454, -0x559A5454, 0x559A5554, 0x559A5554, 0x559A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x559A5454, -0x559A5554, 0x549A5554, 0x559A5454, 0x549A5454, 0x549A5554, 0x559A5454, 0x559A5554, 0x559A5454, -0x549A5554, 0x549A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5454, -0x549A5454, 0x559A5554, 0x559A5554, 0x549A5454, 0x559A5554, 0x559A5454, 0x549A5454, 0x559A5454, -0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5454, 0x559A5554, 0x549A5554, 0x559A5554, -0x549A5554, 0x559A5554, 0x549A5454, 0x559A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, -0x559A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5554, 0x549A5554, 0x559A5454, 0x549A5454, -0x549A5554, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x559A5454, -0x549A5554, 0x559A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x559A5454, 0x549A5554, 0x549A5554, -0x549A5454, 0x549A5454, 0x559A5454, 0x559A5554, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5554, 0x549A5454, -0x549A5554, 0x559A5554, 0x559A5454, 0x549A5454, 0x559A5554, 0x549A5554, 0x559A5454, 0x549A5554, -0x549A5554, 0x559A5454, 0x549A5454, 0x549A5554, 0x559A5454, 0x549A5454, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5454, -0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x559A5554, 0x549A5454, 0x559A5554, 0x549A5554, -0x559A5554, 0x559A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x559A5554, 0x549A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x549A5554, 0x549A5554, 0x559A5454, 0x549A5454, 0x559A5554, 0x559A5554, -0x559A5454, 0x559A5554, 0x549A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, 0x549A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x559A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x549A5554, 0x549A5554, 0x549A5554, 0x559A5454, -0x559A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5554, 0x549A5454, 0x559A5554, 0x559A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5554, -0x549A5454, 0x549A5454, 0x549A5454, 0x559A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, -0x559A5554, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, -0x559A5554, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5554, 0x549A5454, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5554, -0x559A5554, 0x559A5554, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5554, 0x559A5454, 0x549A5554, 0x559A5454, 0x549A5554, 0x559A5554, 0x559A5454, 0x559A5554, -0x559A5554, 0x559A5454, 0x549A5554, 0x559A5454, 0x549A5554, 0x559A5554, 0x549A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5454, 0x559A5454, 0x559A5454, 0x559A5554, 0x559A5554, 0x549A5454, -0x559A5554, 0x549A5554, 0x559A5454, 0x559A5554, 0x549A5454, 0x559A5554, 0x549A5554, 0x559A5554, -0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x549A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5454, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5554, -0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, -0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x559A5554, 0x549A5454, -0x549A5554, 0x549A5554, 0x549A5554, 0x549A5454, 0x559A5554, 0x559A5454, 0x549A5454, 0x549A5554, -0x559A5554, 0x549A5454, 0x549A5454, 0x549A5554, 0x559A5554, 0x549A5454, 0x559A5454, 0x549A5554, -0x549A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x549A5554, -0x549A5554, 0x559A5454, 0x559A5454, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5454, -0x559A5554, 0x549A5454, 0x559A5454, 0x549A5554, 0x549A5554, 0x559A5554, 0x549A5454, 0x559A5554, -0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x549A5454, 0x559A5554, 0x559A5554, -0x559A5454, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5654, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x569A5553, 0x559A5553, 0x559A5554, 0x559A5654, 0x559A5553, -0x559A5554, 0x569A5654, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5654, -0x569A5554, 0x569A5654, 0x559A5554, 0x559A5654, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5654, -0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5554, 0x559A5554, 0x549A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5454, -0x559A5454, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, -0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5554, -0x569A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5553, 0x559A5653, 0x569A5654, 0x559A5554, 0x559A5654, 0x559A5554, 0x559A5553, -0x569A5554, 0x559A5553, 0x569A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5553, 0x569A5554, -0x559A5654, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5654, 0x559A5554, 0x559A5554, 0x559A5553, -0x559A5553, 0x559A5554, 0x559A5553, 0x559A5654, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, -0x559A5553, 0x559A5553, 0x559A5654, 0x559A5553, 0x559A5654, 0x559A5553, 0x559A5653, 0x559A5553, -0x559A5553, 0x569A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5654, -0x559A5553, 0x559A5553, 0x559A5654, 0x569A5553, 0x559A5653, 0x569A5553, 0x569A5654, 0x569A5553, -0x569A5654, 0x569A5654, 0x559A5553, 0x569A5553, 0x559A5653, 0x559A5553, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x559A5553, 0x569A5654, 0x569A5553, 0x569A5553, 0x559A5553, 0x569A5654, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5654, 0x559A5554, 0x559A5654, -0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x569A5654, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5654, 0x559A5553, 0x569A5554, -0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5654, 0x569A5654, -0x569A5553, 0x559A5553, 0x559A5654, 0x559A5554, 0x559A5654, 0x559A5553, 0x559A5554, 0x559A5553, -0x559A5553, 0x569A5553, 0x569A5654, 0x569A5553, 0x559A5553, 0x559A5653, 0x569A5554, 0x559A5553, -0x559A5654, 0x569A5553, 0x559A5554, 0x559A5553, 0x569A5554, 0x559A5553, 0x559A5553, 0x559A5554, -0x559A5553, 0x559A5554, 0x559A5554, 0x569A5554, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5653, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5554, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5554, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5653, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x569A5654, 0x559A5553, 0x569A5554, 0x559A5553, 0x559A5553, 0x569A5553, 0x559A5553, 0x559A5553, -0x559A5653, 0x569A5654, 0x569A5654, 0x559A5653, 0x559A5653, 0x569A5553, 0x559A5553, 0x559A5553, -0x569A5554, 0x559A5653, 0x569A5654, 0x569A5654, 0x559A5553, 0x569A5654, 0x559A5553, 0x569A5553, -0x569A5553, 0x559A5553, 0x569A5654, 0x559A5653, 0x559A5653, 0x559A5553, 0x569A5654, 0x569A5553, -0x569A5654, 0x559A5553, 0x559A5653, 0x569A5653, 0x569A5654, 0x559A5653, 0x559A5653, 0x559A5653, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5654, 0x559A5653, 0x569A5653, 0x559A5653, -0x559A5553, 0x559A5653, 0x559A5553, 0x569A5654, 0x559A5653, 0x559A5553, 0x559A5653, 0x559A5553, -0x559A5653, 0x569A5553, 0x559A5653, 0x569A5654, 0x569A5553, 0x569A5654, 0x559A5553, 0x569A5653, -0x569A5654, 0x559A5553, 0x569A5654, 0x569A5553, 0x569A5654, 0x569A5654, 0x569A5653, 0x569A5553, -0x569A5654, 0x569A5653, 0x559A5653, 0x569A5553, 0x569A5654, 0x559A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x559A5553, 0x569A5653, 0x569A5654, 0x569A5654, 0x559A5653, 0x569A5653, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x569A5554, 0x569A5554, 0x569A5554, -0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5553, -0x559A5554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x55995554, -0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, -0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, -0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, -0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, -0x55995554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, -0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x559A5554, 0x55995554, 0x55995554, 0x55995554, -0x55995554, 0x55995554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, -0x559A5554, 0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x55995554, 0x559A5554, 0x559A5554, 0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x559A5554, -0x55995554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x56995554, 0x559A5554, 0x559A5554, 0x56995554, -0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, -0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x55995654, 0x559A5654, 0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x569A5554, 0x559A5554, 0x56995654, 0x569A5653, 0x569A5553, 0x569A5653, 0x559A5553, 0x569A5654, -0x569A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5553, -0x569A5653, 0x559A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5654, -0x559A5553, 0x569A5653, 0x569A5553, 0x559A5653, 0x569A5553, 0x569A5654, 0x569A5653, 0x569A5653, -0x569A5553, 0x569A5653, 0x569A5654, 0x569A5653, 0x559A5653, 0x559A5553, 0x569A5654, 0x569A5654, -0x559A5653, 0x569A5553, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x579A5553, 0x559A5653, 0x569A5553, 0x569A5654, 0x559A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5554, -0x569A5554, 0x559A5553, 0x559A5653, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5553, 0x559A5553, 0x559A5553, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x569A5654, -0x559A5653, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5553, -0x559A5654, 0x569A5554, 0x569A5654, 0x569A5554, 0x559A5554, 0x559A5554, 0x569A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x569A5553, 0x559A5553, 0x559A5653, 0x559A5553, 0x569A5554, 0x55995654, -0x559A5554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x55995554, -0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x56995554, 0x56995554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x55995654, 0x56995654, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x56995554, -0x559A5554, 0x559A5554, 0x55995654, 0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, -0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x56995554, 0x559A5554, 0x56995654, 0x569A5654, -0x559A5554, 0x559A5554, 0x56995654, 0x559A5554, 0x56995554, 0x569A5554, 0x56995654, 0x559A5554, -0x559A5553, 0x559A5654, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5654, 0x559A5654, 0x569A5554, -0x559A5654, 0x559A5654, 0x569A5654, 0x569A5554, 0x569A5553, 0x559A5554, 0x569A5654, 0x56995654, -0x569A5654, 0x569A5554, 0x559A5654, 0x56995654, 0x569A5554, 0x569A5654, 0x559A5654, 0x569A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x569A5654, 0x569A5654, 0x559A5554, 0x559A5554, 0x559A5654, -0x569A5553, 0x559A5554, 0x559A5554, 0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x56995654, -0x559A5554, 0x569A5554, 0x559A5654, 0x569A5554, 0x559A5654, 0x55995654, 0x559A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x559A5654, 0x569A5654, 0x559A5653, 0x569A5654, 0x559A5553, 0x559A5554, -0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5654, 0x569A5554, -0x569A5554, 0x559A5554, 0x56995753, 0x57995653, 0x569A5554, 0x559A5654, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5553, -0x569A5653, 0x559A5653, 0x569A5653, 0x579A5754, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5553, -0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569B5654, 0x569A5653, 0x569A5653, -0x559A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x559A5653, 0x569A5553, 0x569A5653, 0x569A5753, 0x579A5753, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x559A5553, 0x559A5553, 0x569A5553, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x569A5554, 0x559A5553, 0x569A5654, 0x559A5553, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x569A5553, 0x569A5654, 0x559A5653, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5653, 0x569A5553, 0x559A5553, 0x559A5553, 0x569A5553, 0x559A5653, 0x559A5553, -0x559A5653, 0x559A5653, 0x559A5553, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5653, 0x569A5654, -0x569A5654, 0x569A5553, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5654, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5553, 0x569A5553, 0x559A5553, -0x569A5654, 0x569A5654, 0x569A5653, 0x559A5553, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x559A5553, 0x569A5654, 0x569A5553, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5654, 0x559A5554, 0x559A5554, 0x569A5554, 0x559A5654, 0x559A5654, 0x569A5554, 0x559A5554, -0x569A5554, 0x559A5554, 0x559A5654, 0x569A5654, 0x559A5554, 0x559A5654, 0x569A5654, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x569A5554, 0x559A5554, 0x559A5654, -0x559A5554, 0x569A5554, 0x559A5654, 0x559A5654, 0x559A5654, 0x569A5554, 0x559A5554, 0x559A5654, -0x569A5654, 0x559A5554, 0x559A5654, 0x569A5554, 0x569A5554, 0x569A5554, 0x569A5554, 0x569A5554, -0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5654, 0x569A5554, 0x569A5554, -0x569A5554, 0x559A5554, 0x559A5654, 0x559A5654, 0x569A5654, 0x559A5654, 0x569A5554, 0x559A5554, -0x559A5654, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x569A5654, 0x569A5654, -0x569A5654, 0x559A5554, 0x559A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x559A5654, 0x569A5654, 0x559A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x559A5654, 0x569A5654, 0x559A5654, 0x569A5554, 0x559A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x559A5554, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5554, 0x559A5554, 0x559A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x559A5554, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5554, 0x569A5554, 0x569A5654, -0x569A5654, 0x559A5554, 0x559A5554, 0x559B5554, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x559A5654, 0x569A5654, 0x569A5654, 0x559A5653, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5554, 0x569A5654, -0x569A5554, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5654, 0x569A5654, 0x569A5654, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x559A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x569A5653, -0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5653, -0x579A5753, 0x579A5653, 0x569A5653, 0x579A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5753, -0x559A5553, 0x559A5553, 0x569A5553, 0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x559A5553, 0x559A5553, 0x569A5553, 0x559A5653, 0x569A5553, 0x569A5553, 0x569A5654, 0x569A5553, -0x569A5654, 0x569A5654, 0x569A5654, 0x569A5553, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5653, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5654, 0x569A5653, 0x569A5654, -0x569A5654, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x559A5553, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5654, 0x569A5654, 0x559A5553, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x559A5553, 0x569A5653, 0x569A5653, 0x559A5653, -0x569A5654, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5553, 0x569A5653, 0x569A5553, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5654, -0x569A5654, 0x569A5654, 0x569A5554, 0x559A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x55995554, 0x549A5554, 0x54995554, 0x559A5554, 0x559A5454, 0x559A5554, 0x55995554, -0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x55995554, 0x55995554, 0x559A5554, -0x55995555, 0x559A5554, 0x55995554, 0x55995454, 0x559A5554, 0x559A5454, 0x55995555, 0x55995554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x55995554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, -0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x55995554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995654, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x56995654, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x569A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x56995554, 0x559A5554, 0x559A5554, -0x55995654, 0x56995654, 0x56995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x569A5654, 0x569A5653, 0x569A5653, 0x579A5654, 0x569A5654, 0x57995653, 0x569A5654, -0x56995753, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x579A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, -0x569A5753, 0x579A5653, 0x569A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x569A5653, 0x579A5753, -0x579A5753, 0x579A5653, 0x569A5753, 0x569A5753, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, -0x569A5654, 0x569A5553, 0x559A5653, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, -0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5654, 0x569A5553, 0x559A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, -0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569B5654, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559B5553, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5554, -0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5454, 0x549A5454, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, -0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x569A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x569A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5654, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5654, 0x569A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, -0x569A5554, 0x569A5654, 0x559A5554, 0x569A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x559A5554, -0x559A5654, 0x569A5654, 0x569A5654, 0x569A5554, 0x569A5654, 0x569A5654, 0x559A5554, 0x559A5654, -0x559A5554, 0x559A5554, 0x56995654, 0x569A5654, 0x569A5653, 0x569A5654, 0x579A5653, 0x569A5753, -0x579A5753, 0x579A5653, 0x57995753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x569A5753, -0x579A5653, 0x579A5653, 0x569A5753, 0x579A5853, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, -0x579A5653, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5753, -0x579A5653, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5653, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x579A5653, 0x579A5753, -0x579A5753, 0x579A5653, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5653, 0x579A5753, 0x569A5753, 0x579A5753, 0x589A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x559B5553, 0x559B5553, 0x569A5653, -0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, -0x569A5753, 0x569A5653, 0x559A5653, 0x579A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5554, -0x55995654, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995555, 0x55995555, 0x55995555, 0x55995555, -0x55995555, 0x55995555, 0x54995554, 0x55995554, 0x55995555, 0x55995555, 0x55995555, 0x55995555, -0x55995554, 0x55995555, 0x55995555, 0x55995555, 0x55995555, 0x55995555, 0x55995554, 0x55995555, -0x55995555, 0x55995555, 0x55995454, 0x55995555, 0x55995555, 0x55995555, 0x55995555, 0x55995555, -0x55995555, 0x55995555, 0x55995554, 0x55995555, 0x55995554, 0x559A5554, 0x55995554, 0x55995555, -0x55995554, 0x559A5554, 0x55995554, 0x55995554, 0x549A5454, 0x55995555, 0x55995554, 0x55995555, -0x55995555, 0x55995555, 0x55995555, 0x55995555, 0x559A5554, 0x55995554, 0x55995554, 0x55995555, -0x55995555, 0x55995555, 0x55995554, 0x55995555, 0x55995554, 0x559A5554, 0x55995555, 0x55995555, -0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x55995554, 0x55995554, 0x55995554, 0x55995554, -0x55995555, 0x55995555, 0x55995555, 0x55995555, 0x55995554, 0x559A5554, 0x55995554, 0x559A5554, -0x55995555, 0x55995555, 0x55995554, 0x55995554, 0x55995554, 0x55995555, 0x55995554, 0x559A5554, -0x55995555, 0x559A5554, 0x55995554, 0x55995554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, -0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, -0x55995554, 0x559A5554, 0x55995555, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, -0x55995554, 0x55995554, 0x559A5554, 0x55995555, 0x559A5554, 0x55995555, 0x559A5554, 0x559A5554, -0x55995554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995555, -0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, -0x55995554, 0x55995554, 0x559A5554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x55995555, 0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x55995554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995554, 0x559A5554, 0x55995554, 0x559A5554, -0x559A5554, 0x559A5554, 0x55995554, 0x55995554, 0x55995554, 0x559A5554, 0x559A5554, 0x55995554, -0x559A5654, 0x569A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, -0x55995554, 0x559A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5554, 0x579A5754, 0x569A5653, -0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x589A5853, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569B5653, 0x569B5653, 0x579A5753, 0x579A5653, -0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5853, -0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, -0x589A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5853, 0x589A5753, 0x579A5753, 0x579A5753, -0x579A5853, 0x579A5753, 0x569B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569B5753, 0x579A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, -0x579A5653, 0x569A5653, 0x579A5653, 0x569A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5753, -0x569A5653, 0x569A5653, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5753, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, -0x579A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x569A5654, 0x579A5753, 0x569A5654, 0x569A5653, 0x559A5654, 0x559A5554, -0x569A5654, 0x55995554, 0x55995554, 0x55995454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5554, 0x559A5554, 0x559A5454, 0x549A5554, 0x549A5554, 0x549A5454, -0x549A5554, 0x559A5554, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, -0x549A5454, 0x559A5454, 0x559A5554, 0x559A5454, 0x559A5454, 0x559A5554, 0x559A5454, 0x559A5454, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5454, 0x549A5454, 0x559A5554, 0x559A5454, -0x549A5454, 0x549A5454, 0x559A5554, 0x549A5454, 0x559A5454, 0x559A5554, 0x559A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x559A5554, 0x549A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5454, -0x549A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5454, 0x549A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x549A5454, 0x559A5554, 0x549A5554, 0x549A5554, 0x549A5454, 0x559A5554, 0x559A5554, -0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x549A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, -0x559A5454, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5554, 0x569A5554, 0x559A5454, -0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, -0x559A5454, 0x549A5554, 0x559A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5754, 0x579A5653, -0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x569B5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5853, 0x599A5853, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, -0x589A5753, 0x579B5753, 0x589A5753, 0x579A5753, 0x569B5753, 0x569A5753, 0x579B5753, 0x579A5753, -0x589A5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5753, 0x579A5753, 0x579A5853, -0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x579B5753, 0x579A5853, -0x589A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5952, 0x589A5753, 0x579B5753, 0x579A5853, -0x589B5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x579A5853, 0x579B5753, 0x579A5753, 0x579A5853, -0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, -0x569A5653, 0x569A5653, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x569A5653, -0x579A5653, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x569A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x569A5753, 0x579A5653, 0x569A5653, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5653, -0x579A5753, 0x569A5753, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x569A5654, 0x579A5653, 0x569A5653, 0x569A5654, 0x569A5654, 0x56995554, -0x559A5554, 0x559A5554, 0x559A5454, 0x549A5454, 0x54995454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x54995455, 0x549A5554, 0x55995554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x55995454, 0x54995454, 0x55995454, 0x55995454, 0x549A5454, -0x54995454, 0x54995454, 0x54995454, 0x549A5554, 0x54995554, 0x55995454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x54995554, 0x55995454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5554, 0x55995555, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5554, -0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, -0x54995454, 0x549A5454, 0x55995554, 0x549A5454, 0x549A5454, 0x549A5554, 0x55995454, 0x549A5454, -0x549A5454, 0x549A5454, 0x559A5454, 0x549A5554, 0x559A5454, 0x549A5554, 0x559A5454, 0x549A5454, -0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x559A5554, 0x549A5454, 0x549A5454, 0x559A5454, -0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x54995454, 0x549A5454, 0x549A5454, -0x549A5454, 0x549A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5454, 0x549A5554, 0x559A5454, -0x549A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x55995454, -0x559A5554, 0x55995454, 0x549A5554, 0x549A5554, 0x559A5554, 0x559A5554, 0x549A5554, 0x559A5454, -0x559A5554, 0x549A5454, 0x549A5554, 0x55995554, 0x559A5554, 0x559A5454, 0x559A5554, 0x559A5454, -0x549A5454, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5454, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5454, 0x559A5554, 0x559A5554, -0x559A5554, 0x549A5454, 0x559A5554, 0x549A5554, 0x549A5454, 0x549A5454, 0x559A5554, 0x559A5554, -0x559A5454, 0x559A5454, 0x559A5454, 0x559A5454, 0x559A5454, 0x559A5554, 0x559A5554, 0x559A5554, -0x549A5454, 0x549A5554, 0x559A5454, 0x559A5554, 0x549A5454, 0x559A5554, 0x559A5454, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5454, 0x559A5554, 0x559A5554, 0x559A5454, -0x559A5554, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x549A5554, -0x559A5554, 0x549A5554, 0x559A5554, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5754, 0x579A5754, -0x579B5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579A5853, 0x599A5853, 0x589A5753, 0x579B5753, 0x579A5753, 0x579B5753, -0x579B5753, 0x579A5853, 0x579B5753, 0x589A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5853, -0x589A5853, 0x579A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5753, 0x579A5853, -0x589A5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x579B5753, 0x589A5853, -0x579A5853, 0x579B5753, 0x589B5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x579B5753, 0x589B5952, -0x579B5753, 0x579A5853, 0x579B5753, 0x589A5753, 0x589A5952, 0x589A5853, 0x579B5753, 0x589A5952, -0x599B5752, 0x579B5753, 0x589A5753, 0x589A5853, 0x579B5853, 0x579B5753, 0x579B5753, 0x579B5853, -0x579A5753, 0x579A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x569A5653, -0x569A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5653, 0x579A5753, 0x579A5753, 0x569A5753, -0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, 0x589A5753, 0x579A5753, -0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x569A5753, 0x579A5753, 0x579B5753, 0x579B5653, -0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579B5753, 0x579A5853, 0x579A5753, 0x579A5853, -0x579B5753, 0x579A5753, 0x569A5653, 0x579B5754, 0x569A5653, 0x569A5554, 0x569A5654, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5454, 0x55995454, 0x54995455, 0x53995455, 0x54995455, 0x54995455, -0x54995455, 0x54995455, 0x54995555, 0x54995455, 0x54995455, 0x54995455, 0x54995455, 0x54995455, -0x549A5454, 0x549A5454, 0x54995455, 0x54995455, 0x54995455, 0x549A5455, 0x54995455, 0x54995455, -0x54995455, 0x54995455, 0x53995455, 0x549A5454, 0x54995455, 0x54995455, 0x54995454, 0x54995455, -0x54995454, 0x54995455, 0x549A5455, 0x54995454, 0x54995455, 0x54995455, 0x55995455, 0x53995455, -0x549A5454, 0x549A5454, 0x549A5455, 0x549A5454, 0x55995555, 0x55995455, 0x53995455, 0x549A5454, -0x54995555, 0x54995455, 0x549A5454, 0x54995454, 0x54995355, 0x539A5355, 0x53995455, 0x54995455, -0x54995454, 0x549A5455, 0x55995455, 0x54995454, 0x54995455, 0x54995554, 0x55995455, 0x549A5454, -0x54995455, 0x54995454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x54995555, 0x549A5455, -0x54995455, 0x54995455, 0x549A5454, 0x55995555, 0x549A5454, 0x549A5454, 0x54995554, 0x54995455, -0x54995455, 0x549A5454, 0x55995455, 0x549A5454, 0x54995454, 0x539A5454, 0x549A5454, 0x549A5454, -0x54995455, 0x549A5454, 0x549A5455, 0x55995455, 0x549A5454, 0x549A5455, 0x54995554, 0x55995455, -0x549A5454, 0x54995554, 0x549A5454, 0x549A5454, 0x54995555, 0x54995555, 0x55995555, 0x55995454, -0x54995554, 0x549A5454, 0x549A5454, 0x54995555, 0x55995455, 0x55995555, 0x549A5455, 0x54995454, -0x549A5454, 0x549A5454, 0x55995454, 0x54995555, 0x55995454, 0x549A5454, 0x55995555, 0x55995454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x55995455, 0x55995555, 0x55995555, -0x55995555, 0x55995455, 0x549A5454, 0x549A5454, 0x55995455, 0x549A5454, 0x55995555, 0x54995554, -0x54995455, 0x549A5454, 0x54995554, 0x549A5454, 0x549A5455, 0x54995454, 0x55995454, 0x549A5454, -0x549A5454, 0x54995455, 0x549A5454, 0x549A5454, 0x549A5454, 0x55995555, 0x559A5554, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x55995555, -0x549A5454, 0x54995555, 0x549A5454, 0x55995454, 0x54995454, 0x55995554, 0x55995455, 0x55995454, -0x54995554, 0x559A5554, 0x54995555, 0x55995555, 0x54995555, 0x54995555, 0x549A5454, 0x54995555, -0x549A5455, 0x559A5554, 0x559A5554, 0x559A5654, 0x569A5654, 0x559A5654, 0x569A5654, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x589A5853, 0x589A5753, 0x589A5753, -0x579B5753, 0x579A5853, 0x589A5853, 0x599B5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x579A5853, -0x579B5853, 0x579A5853, 0x589B5753, 0x579B5853, 0x589B5853, 0x589A5853, 0x589A5853, 0x589B5853, -0x589A5753, 0x589A5853, 0x579B5753, 0x579A5853, 0x579B5753, 0x589A5853, 0x579B5753, 0x589B5952, -0x579B5753, 0x599B5952, 0x589B5853, 0x589A5853, 0x589B5952, 0x599B5852, 0x579A5853, 0x589A5853, -0x579B5753, 0x579B5853, 0x589B5853, 0x579A5853, 0x589B5853, 0x599B5852, 0x589A5853, 0x599B5952, -0x589A5753, 0x589A5853, 0x579B5853, 0x589A5853, 0x599B5852, 0x589B5753, 0x579B5853, 0x599B5952, -0x589A5753, 0x579B5753, 0x599B5852, 0x589B5853, 0x589B5952, 0x589A5852, 0x579B5753, 0x579B5853, -0x579B5753, 0x579A5753, 0x579A5653, 0x569B5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569B5753, -0x579A5753, 0x579A5753, 0x579A5853, 0x579B5753, 0x579B5753, 0x589A5753, 0x579A5753, 0x579A5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, -0x579B5753, 0x569A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579B5753, 0x579A5753, 0x569A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579A5853, 0x579A5753, -0x579B5753, 0x579A5753, 0x569B5753, 0x579A5753, 0x589A5753, 0x589A5853, 0x589A5753, 0x579A5853, -0x589A5753, 0x579A5853, 0x579A5653, 0x579B5754, 0x569A5653, 0x569B5654, 0x569A5654, 0x559A5554, -0x549A5554, 0x56995554, 0x54995555, 0x549A5454, 0x54995354, 0x53995355, 0x53995355, 0x539A5355, -0x53995355, 0x53995455, 0x54995455, 0x539A5355, 0x539A5355, 0x539A5355, 0x53995355, 0x53995355, -0x54995355, 0x53995355, 0x53995455, 0x539A5355, 0x53995455, 0x53995455, 0x53995355, 0x53995355, -0x53995355, 0x53995355, 0x53995455, 0x53995355, 0x53995355, 0x539A5355, 0x539A5355, 0x53995455, -0x53995355, 0x53995355, 0x54995455, 0x53995355, 0x53995355, 0x539A5355, 0x53995455, 0x54995355, -0x53995355, 0x539A5355, 0x53995355, 0x53995455, 0x54995455, 0x549A5455, 0x54995455, 0x53995355, -0x53995355, 0x54995355, 0x53995355, 0x539A5355, 0x53995355, 0x53995355, 0x539A5355, 0x539A5355, -0x539A5355, 0x53995455, 0x54995455, 0x53995455, 0x53995355, 0x53995455, 0x54995355, 0x539A5355, -0x53995355, 0x539A5355, 0x53995455, 0x539A5355, 0x53995355, 0x539A5355, 0x53995355, 0x54995455, -0x54995455, 0x549A5455, 0x54995455, 0x53995355, 0x53995355, 0x53995355, 0x54995355, 0x53995355, -0x53995355, 0x54995455, 0x53995355, 0x54995355, 0x53995355, 0x53995355, 0x53995455, 0x53995455, -0x539A5355, 0x539A5355, 0x53995455, 0x539A5355, 0x53995355, 0x53995355, 0x53995455, 0x54995455, -0x53995355, 0x54995455, 0x54995355, 0x549A5355, 0x53995455, 0x54995455, 0x54995455, 0x54995355, -0x53995455, 0x54995355, 0x53995355, 0x539A5455, 0x55995455, 0x54995455, 0x54995455, 0x539A5355, -0x539A5355, 0x53995455, 0x53995455, 0x549A5455, 0x54995455, 0x53995455, 0x54995455, 0x539A5355, -0x53995455, 0x53995355, 0x539A5455, 0x53995455, 0x54995455, 0x54995455, 0x55995555, 0x549A5455, -0x54995455, 0x54995455, 0x53995355, 0x54995455, 0x549A5455, 0x53995355, 0x549A5455, 0x53995455, -0x54995355, 0x539A5355, 0x53995455, 0x539A5455, 0x54995355, 0x539A5355, 0x549A5455, 0x53995355, -0x53995355, 0x53995355, 0x53995355, 0x539A5355, 0x54995455, 0x549A5554, 0x55995455, 0x549A5355, -0x539A5355, 0x54995455, 0x53995355, 0x539A5355, 0x53995355, 0x53995455, 0x539A5355, 0x54995455, -0x53995455, 0x53995455, 0x539A5455, 0x549A5355, 0x53995455, 0x54995555, 0x549A5455, 0x549A5355, -0x53995455, 0x54995555, 0x53995455, 0x54995555, 0x549A5455, 0x53995455, 0x53995455, 0x539A5455, -0x54995554, 0x549A5454, 0x559A5554, 0x549A5654, 0x569A5654, 0x569A5654, 0x579A5653, 0x569A5754, -0x579A5853, 0x589A5753, 0x579A5853, 0x589A5853, 0x589A5952, 0x589B5753, 0x589B5852, 0x589B5853, -0x579B5853, 0x599A5852, 0x599B5952, 0x599B5853, 0x589B5753, 0x589B5753, 0x579B5753, 0x579B5853, -0x589A5952, 0x589B5753, 0x589B5952, 0x589A5853, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5852, -0x589B5952, 0x589B5753, 0x589B5753, 0x589B5753, 0x579B5853, 0x599B5852, 0x589A5853, 0x599B5852, -0x579B5952, 0x599B5852, 0x589B5853, 0x589B5952, 0x599B5952, 0x599A5853, 0x589B5853, 0x589B5853, -0x589B5753, 0x589B5853, 0x589B5852, 0x579B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x5A9B5852, -0x589B5753, 0x589B5753, 0x589B5952, 0x589B5952, 0x599B5952, 0x589B5753, 0x579B5952, 0x599B5952, -0x589B5752, 0x579B5853, 0x599B5952, 0x599B5852, 0x589B5952, 0x589B5853, 0x589B5753, 0x589B5753, -0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, -0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5853, -0x579B5753, 0x579B5753, 0x579A5853, 0x579B5753, 0x579A5853, 0x589A5853, 0x589A5853, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, -0x579B5753, 0x579A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5952, 0x589A5853, 0x589A5753, -0x589A5753, 0x569B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x589A5853, 0x599A5852, 0x579A5853, -0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x589A5753, 0x589A5952, -0x589A5753, 0x589A5853, 0x569B5653, 0x579A5753, 0x579A5654, 0x569A5654, 0x559A5654, 0x559A5554, -0x559A5554, 0x55995554, 0x54995455, 0x53995355, 0x539A5355, 0x52995355, 0x52995255, 0x52995255, -0x53995356, 0x53995455, 0x53995355, 0x52995355, 0x52995355, 0x53995255, 0x53995356, 0x53995356, -0x53995356, 0x52995355, 0x53995356, 0x52995355, 0x53995355, 0x53995355, 0x53995255, 0x52995355, -0x52995255, 0x52995356, 0x53995356, 0x53995356, 0x53995356, 0x53995356, 0x53995356, 0x53995356, -0x53995356, 0x53995255, 0x53995355, 0x53995255, 0x53995255, 0x52995255, 0x53995356, 0x52995255, -0x53995356, 0x53995356, 0x53995255, 0x52995255, 0x53995356, 0x53995356, 0x53995455, 0x53995455, -0x53995255, 0x52995355, 0x53995355, 0x53995355, 0x53995356, 0x53995255, 0x53995255, 0x52995355, -0x53995355, 0x53995455, 0x53995356, 0x52995355, 0x53995355, 0x52995355, 0x53995455, 0x53995356, -0x53995355, 0x53995356, 0x52995255, 0x53995355, 0x53995355, 0x53995255, 0x53995355, 0x53995355, -0x53995255, 0x53995356, 0x53995255, 0x52995355, 0x53995356, 0x53995355, 0x53995255, 0x53995356, -0x52995355, 0x54995355, 0x52995355, 0x53995355, 0x53995255, 0x52995355, 0x53995356, 0x53995355, -0x53995356, 0x52995355, 0x52995355, 0x52995355, 0x53995356, 0x53995356, 0x53995455, 0x53995355, -0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995455, 0x53995455, 0x53995355, 0x53995355, -0x53995455, 0x53995356, 0x53995355, 0x53995455, 0x54995355, 0x53995355, 0x53995355, 0x53995255, -0x52995355, 0x53995355, 0x53995355, 0x54995355, 0x53995255, 0x53995355, 0x53995355, 0x52995255, -0x53995356, 0x539A5355, 0x53995355, 0x54995355, 0x53995455, 0x54995455, 0x54995455, 0x54995455, -0x54995355, 0x53995455, 0x53995255, 0x52995355, 0x54995355, 0x53995255, 0x53995455, 0x53995355, -0x54995355, 0x539A5355, 0x53995355, 0x53995255, 0x54995355, 0x53995255, 0x53995355, 0x53995255, -0x53995355, 0x53995255, 0x52995355, 0x53995455, 0x53995355, 0x549A5455, 0x54995355, 0x52995255, -0x52995355, 0x54995355, 0x53995255, 0x52995355, 0x53995255, 0x53995455, 0x52995355, 0x53995355, -0x53995355, 0x53995355, 0x539A5455, 0x53995255, 0x52995355, 0x53995455, 0x53995355, 0x53995355, -0x53995455, 0x549A5455, 0x53995355, 0x54995455, 0x53995455, 0x53995355, 0x53995355, 0x52995355, -0x549A5455, 0x549A5355, 0x549A5455, 0x559A5454, 0x569A5654, 0x569A5654, 0x569B5653, 0x569A5654, -0x579A5853, 0x589A5853, 0x579B5753, 0x589A5853, 0x589A5852, 0x589B5853, 0x589B5853, 0x589B5753, -0x589B5952, 0x599B5952, 0x599B5B52, 0x599B5852, 0x599B5852, 0x599B5752, 0x589B5853, 0x579B5852, -0x589B5853, 0x599B5852, 0x589B5853, 0x599B5952, 0x599B5953, 0x599B5952, 0x599B5852, 0x599B5952, -0x589B5852, 0x589B5852, 0x589B5853, 0x579B5853, 0x589B5952, 0x589B5853, 0x599B5952, 0x589B5852, -0x599B5952, 0x599B5852, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x599B5852, 0x589B5853, -0x589B5852, 0x599B5852, 0x589B5753, 0x599B5952, 0x589B5952, 0x599B5852, 0x599B5A52, 0x599B5952, -0x589B5952, 0x589B5753, 0x599B5852, 0x599B5952, 0x599B5952, 0x579B5753, 0x589B5A52, 0x5A9B5952, -0x579B5853, 0x589B5952, 0x589B5952, 0x599B5852, 0x599B5952, 0x589B5853, 0x589B5752, 0x579B5753, -0x579A5753, 0x579B5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5853, -0x579B5753, 0x579B5753, 0x579A5853, 0x589A5753, 0x579A5853, 0x589A5853, 0x589B5952, 0x599B5852, -0x589B5952, 0x589A5853, 0x589A5853, 0x589A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x589A5853, 0x589B5853, 0x589B5753, 0x579B5753, 0x589A5853, 0x589B5952, 0x589A5853, 0x589A5853, -0x599B5752, 0x579B5753, 0x589B5753, 0x579A5853, 0x579A5853, 0x579A5853, 0x589A5853, 0x589A5853, -0x589B5753, 0x579B5753, 0x589A5753, 0x589B5852, 0x579B5853, 0x589A5853, 0x599B5852, 0x579A5853, -0x579A5853, 0x589A5753, 0x579B5753, 0x589A5753, 0x589B5853, 0x589B5853, 0x589B5853, 0x599B5952, -0x589A5853, 0x589A5753, 0x569B5753, 0x579A5754, 0x579A5754, 0x569A5554, 0x569A5654, 0x559A5454, -0x54995554, 0x55995455, 0x54995355, 0x53995356, 0x52995355, 0x52995256, 0x52995256, 0x52995256, -0x52995355, 0x53995355, 0x53995255, 0x52995256, 0x52995255, 0x52995255, 0x52995255, 0x52995255, -0x52995256, 0x52995255, 0x52995255, 0x52995255, 0x53995355, 0x52995255, 0x52995256, 0x52995256, -0x52995256, 0x52995255, 0x52995255, 0x52995255, 0x52995256, 0x52995256, 0x52995256, 0x52995255, -0x52995255, 0x52995255, 0x52995256, 0x53995255, 0x52995256, 0x52995256, 0x52995256, 0x52995255, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995255, 0x52995255, 0x52995355, -0x539A5355, 0x53995255, 0x52995256, 0x52995255, 0x53995355, 0x53995355, 0x539A5355, 0x539A5355, -0x53995355, 0x53995255, 0x52995256, 0x52995255, 0x52995255, 0x52995255, 0x52995355, 0x53995255, -0x52995255, 0x52995255, 0x52995255, 0x52995255, 0x539A5355, 0x52995255, 0x52995255, 0x52995255, -0x52995255, 0x52995255, 0x52995355, 0x52995255, 0x52995355, 0x53995255, 0x52995256, 0x52995255, -0x52995355, 0x53995255, 0x52995355, 0x53995255, 0x52995256, 0x52995255, 0x53995255, 0x52995255, -0x52995256, 0x52995256, 0x52995255, 0x52995255, 0x52995255, 0x52995255, 0x53995355, 0x52995255, -0x52995255, 0x53995255, 0x52995255, 0x52995255, 0x52995355, 0x53995355, 0x52995355, 0x52995255, -0x52995355, 0x52995255, 0x53995355, 0x53995255, 0x53995255, 0x53995255, 0x53995255, 0x53995355, -0x52995255, 0x52995255, 0x539A5355, 0x52995255, 0x52995255, 0x539A5355, 0x52995255, 0x52995255, -0x52995255, 0x52995255, 0x53995355, 0x539A5355, 0x539A5355, 0x53995355, 0x53995355, 0x539A5355, -0x539A5355, 0x53995255, 0x53995255, 0x52995255, 0x539A5355, 0x52995255, 0x52995355, 0x52995255, -0x53995255, 0x52995355, 0x53995255, 0x53995255, 0x53995255, 0x52995255, 0x52995355, 0x52995355, -0x53995355, 0x539A5355, 0x539A5355, 0x53995255, 0x539A5355, 0x54995355, 0x53995255, 0x52995255, -0x52995355, 0x539A5355, 0x52995255, 0x52995255, 0x52995255, 0x53995255, 0x52995255, 0x53995255, -0x52995255, 0x539A5355, 0x52995355, 0x52995256, 0x52995355, 0x539A5355, 0x52995355, 0x52995255, -0x52995355, 0x539A5355, 0x53995255, 0x539A5355, 0x539A5355, 0x52995255, 0x539A5355, 0x52995255, -0x54995455, 0x54995355, 0x539A5554, 0x559A5454, 0x559A5654, 0x569A5654, 0x569A5553, 0x569A5653, -0x579B5654, 0x579A5853, 0x589B5853, 0x599B5952, 0x589B5853, 0x589B5952, 0x599B5852, 0x589B5853, -0x599B5952, 0x599B5952, 0x5A9B5A52, 0x599B5952, 0x599B5852, 0x599B5852, 0x589B5853, 0x589B5852, -0x599B5852, 0x599B5952, 0x589B5852, 0x589B5952, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5952, -0x589B5853, 0x589B5952, 0x589B5753, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, -0x599B5952, 0x589B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, 0x599B5952, 0x589B5952, 0x589B5853, -0x589B5852, 0x599B5952, 0x589B5852, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5A52, 0x599B5952, -0x599B5952, 0x579B5853, 0x599B5952, 0x599B5953, 0x599B5852, 0x589B5852, 0x599B5A52, 0x599B5852, -0x589B5853, 0x599B5A52, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5752, -0x589B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, -0x579A5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x579B5753, 0x579B5753, 0x579B5853, 0x599B5852, -0x579A5853, 0x579A5853, 0x579B5853, 0x589B5753, 0x589A5853, 0x589A5853, 0x589A5853, 0x599B5952, -0x599B5952, 0x599B5852, 0x589A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5853, -0x589B5853, 0x589B5853, 0x589B5852, 0x579B5753, 0x589A5952, 0x599B5852, 0x589A5853, 0x589B5952, -0x599B5752, 0x579B5753, 0x589A5853, 0x579B5853, 0x579B5853, 0x589B5853, 0x589B5853, 0x589B5853, -0x589B5752, 0x589A5853, 0x589A5753, 0x579B5753, 0x589B5853, 0x589B5952, 0x599B5852, 0x579A5853, -0x589B5853, 0x589A5753, 0x579B5753, 0x589B5853, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5852, -0x599B5952, 0x589A5753, 0x569A5753, 0x569A5753, 0x579A5653, 0x559A5654, 0x569A5554, 0x549A5454, -0x549A5554, 0x54995455, 0x54995355, 0x52995256, 0x51995156, 0x52985256, 0x52985156, 0x52985256, -0x52995256, 0x52985256, 0x52995256, 0x52995156, 0x52985256, 0x52995256, 0x52995256, 0x52995256, -0x52985156, 0x52985256, 0x52995256, 0x52985256, 0x52985256, 0x52995256, 0x51985256, 0x52995156, -0x51995256, 0x52995256, 0x52985156, 0x51995156, 0x52995256, 0x52995256, 0x52985256, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x51995156, 0x51995256, -0x52995256, 0x51995156, 0x52995256, 0x52995156, 0x51995156, 0x52995256, 0x52985256, 0x52995256, -0x52995256, 0x52995256, 0x53995256, 0x52995256, 0x51995256, 0x52995256, 0x52995256, 0x52995256, -0x52995156, 0x51995156, 0x52995256, 0x52995256, 0x52985256, 0x52995156, 0x52995256, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52985256, -0x52995256, 0x52985256, 0x52985256, 0x52995256, 0x53985256, 0x52995256, 0x52995256, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x51995156, 0x52995256, 0x52995256, 0x52995256, -0x52985256, 0x52995256, 0x51995156, 0x51995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52985356, 0x52995256, -0x52995256, 0x53995256, 0x52995256, 0x52995256, 0x52995256, 0x52995156, 0x51995256, 0x52995256, -0x51995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995355, -0x53995255, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x51995256, 0x52995256, -0x53985256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x52995355, 0x52995256, 0x52995256, 0x52995256, 0x51995256, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995156, 0x52995256, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x51995156, 0x52995256, 0x52995256, 0x52995256, 0x52995256, -0x52995256, 0x53995255, 0x52995256, 0x53995256, 0x52995256, 0x52995155, 0x52995355, 0x52995255, -0x53995355, 0x53995355, 0x52995455, 0x54995455, 0x559A5554, 0x569A5653, 0x569A5654, 0x569B5654, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5853, 0x589B5952, 0x599B5952, 0x589B5853, 0x599B5952, -0x599B5952, 0x599B5952, 0x5B9B5A52, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, 0x599B5852, -0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x599B5952, -0x599B5952, 0x589B5952, 0x599B5952, 0x5A9B5952, 0x599B5852, 0x589B5952, 0x5A9B5A52, 0x589B5853, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5752, 0x579B5853, 0x579B5753, 0x579B5753, -0x579A5853, 0x589B5853, 0x589B5853, 0x579B5852, 0x579B5852, 0x589B5853, 0x599B5952, 0x599B5852, -0x579B5853, 0x589B5853, 0x589A5952, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, -0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589B5853, 0x589B5952, 0x589B5853, 0x599B5852, -0x589B5952, 0x589B5853, 0x589B5852, 0x579B5853, 0x599B5952, 0x599B5852, 0x589B5952, 0x589B5952, -0x599B5752, 0x579B5853, 0x599B5752, 0x589A5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x589B5853, -0x579B5952, 0x589B5952, 0x589B5852, 0x589B5853, 0x599B5852, 0x599B5952, 0x599B5853, 0x589B5753, -0x589B5853, 0x589B5853, 0x579B5753, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x589B5853, -0x599A5852, 0x589A5653, 0x579A5753, 0x579B5754, 0x579A5653, 0x569A5654, 0x569A5554, 0x549A5355, -0x54995455, 0x539A5355, 0x53995355, 0x52995256, 0x52995156, 0x52995156, 0x51995256, 0x52995256, -0x52995256, 0x52995256, 0x51995256, 0x50995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, -0x51995156, 0x51995256, 0x51995256, 0x51995256, 0x52995256, 0x51995156, 0x51995157, 0x51995157, -0x51995256, 0x52995256, 0x50995156, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, -0x51995157, 0x52995156, 0x51995256, 0x52995156, 0x52995256, 0x52995156, 0x51995256, 0x52995156, -0x51995056, 0x50995056, 0x51995157, 0x51995157, 0x51995157, 0x51995157, 0x51995156, 0x51995256, -0x52995256, 0x51995156, 0x51995156, 0x52995256, 0x52995256, 0x52985256, 0x52985156, 0x52985256, -0x52995256, 0x52995256, 0x52995156, 0x52995156, 0x52995256, 0x51995157, 0x51995256, 0x52995256, -0x53985256, 0x52995256, 0x52985256, 0x51995157, 0x51995256, 0x52995256, 0x52995256, 0x52995256, -0x53985356, 0x53985256, 0x53995356, 0x53995256, 0x51995157, 0x52995256, 0x52995156, 0x52995256, -0x52995256, 0x52995256, 0x52995256, 0x51995156, 0x50995156, 0x51995256, 0x52995256, 0x51995157, -0x52995156, 0x51995156, 0x51995156, 0x51995256, 0x51995256, 0x51995256, 0x53985256, 0x52995256, -0x51995256, 0x52995256, 0x52995256, 0x52995156, 0x52995256, 0x52995256, 0x52995256, 0x51995256, -0x52995256, 0x51995256, 0x52995256, 0x52995256, 0x52995156, 0x53985256, 0x52995256, 0x53995256, -0x52995256, 0x52995256, 0x52995156, 0x52995256, 0x51995156, 0x51995156, 0x52995156, 0x51995156, -0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x53995356, -0x53995356, 0x53985256, 0x52995256, 0x52995256, 0x52995256, 0x52995156, 0x51995156, 0x53995256, -0x53985256, 0x52995256, 0x52995256, 0x51995256, 0x51995256, 0x52995256, 0x52995356, 0x52995256, -0x52995256, 0x52995256, 0x52995356, 0x52995256, 0x53995356, 0x52995256, 0x51995156, 0x52995256, -0x52995256, 0x52995156, 0x50995156, 0x52995256, 0x52995256, 0x51995256, 0x52995256, 0x52995256, -0x52995256, 0x52995256, 0x53995156, 0x51995056, 0x53995256, 0x53995156, 0x53995256, 0x52995256, -0x52995256, 0x53985256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x52995256, 0x51995256, -0x52995255, 0x52995355, 0x52995255, 0x539A5355, 0x549A5455, 0x559A5654, 0x569A5653, 0x569A5653, -0x569B5653, 0x579B5753, 0x589A5853, 0x579B5852, 0x589B5852, 0x589B5852, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5B52, 0x5A9B5952, 0x599B5952, 0x599B5A52, 0x599B5952, 0x599B5952, 0x599B5852, -0x599B5952, 0x599B5952, 0x599C5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x599B5852, 0x599C5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x5A9B5952, 0x599B5A52, 0x5A9B5952, 0x599B5952, -0x5A9B5852, 0x599B5952, 0x599B5B52, 0x599B5952, 0x589B5852, 0x599B5A52, 0x5A9B5952, 0x589B5952, -0x599C5952, 0x5A9B5952, 0x5A9B5A52, 0x5A9B5852, 0x599B5A52, 0x599B5952, 0x599B5952, 0x589B5852, -0x599B5952, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5852, 0x589B5853, 0x589B5952, -0x589B5853, 0x589B5852, 0x589B5852, 0x589B5853, 0x589B5853, 0x599B5A52, 0x5A9B5952, 0x589B5853, -0x589B5853, 0x589B5853, 0x589B5853, 0x599B5952, 0x589B5853, 0x589B5853, 0x579B5753, 0x579B5753, -0x579B5753, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x599B5852, 0x589B5853, 0x599B5952, 0x5A9B5952, 0x589B5853, 0x599B5952, 0x599B5952, -0x599B5752, 0x579B5853, 0x599B5852, 0x589B5952, 0x599B5852, 0x589B5853, 0x599B5952, 0x599B5852, -0x599B5952, 0x599B5852, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5852, 0x599B5852, -0x599B5852, 0x589B5952, 0x579B5753, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x569B5753, 0x589A5753, 0x579A5753, 0x569A5653, 0x569A5654, 0x56995554, 0x549A5355, -0x358F2E66, 0x288C276B, 0x268B276B, 0x288C286C, 0x288C276B, 0x278B286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x278C286B, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x278B276C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x278B286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288B276C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C276B, 0x278C286B, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x278C286B, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C276B, 0x278C286B, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x278C286B, 0x278C286B, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x278C276B, 0x288C286C, 0x288C276B, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286B, 0x288C286B, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C276B, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286B, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x278C286B, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, 0x288C286C, -0x288C286B, 0x288C286C, 0x278C266B, 0x278C286B, 0x2D8F3566, 0x559A5554, 0x569A5754, 0x579B5653, -0x579A5753, 0x579B5753, 0x589A5753, 0x579B5853, 0x599B5952, 0x5A9B5A52, 0x5A9C5952, 0x599C5952, -0x599C5952, 0x5B9B5B52, 0x5A9C5952, 0x599C5952, 0x599C5A52, 0x599B5952, 0x599B5952, 0x599C5852, -0x599B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x599C5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5A52, 0x5B9B5A52, 0x599C5952, 0x599B5952, 0x5A9B5952, 0x599B5952, -0x599B5A52, 0x5A9B5B52, 0x5B9B5A52, 0x5A9B5A52, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9C5A52, -0x5A9C5952, 0x5A9C5952, 0x599B5952, 0x599C5A52, 0x5A9C5952, 0x5A9B5A52, 0x5A9B5A52, 0x599B5952, -0x599B5952, 0x5A9B5952, 0x5B9B5A52, 0x599B5952, 0x599B5952, 0x5A9B5B52, 0x599B5952, 0x599B5952, -0x599B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5A52, 0x599B5952, 0x599B5A52, 0x5A9B5A52, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x599B5952, -0x599B5852, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5A52, 0x5A9B5A52, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, -0x599B5952, 0x599B5852, 0x589B5952, 0x599B5A52, 0x599B5852, 0x589B5952, 0x599B5952, 0x5A9B5952, -0x589B5852, 0x589B5853, 0x599B5852, 0x599B5A52, 0x589B5952, 0x599B5952, 0x599B5952, 0x589B5952, -0x599B5952, 0x599B5852, 0x589B5952, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x5A9B5852, 0x599B5852, -0x599B5952, 0x589B5A52, 0x589B5753, 0x589B5A52, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5752, 0x589B5853, 0x589A5753, 0x579A5753, 0x569B5653, 0x579A5654, 0x56995554, 0x53995355, -0x2E8C246A, 0x1F891F6F, 0x2089216F, 0x228A236E, 0x238A236E, 0x238A226E, 0x228A226E, 0x228A236E, -0x238B236E, 0x228A226E, 0x238A226E, 0x228A226E, 0x228A236E, 0x228A236E, 0x228A236E, 0x238A226E, -0x228A226E, 0x228A226E, 0x238A226E, 0x238A226E, 0x238A226E, 0x228A226E, 0x228A226E, 0x228A226E, -0x238A226E, 0x228A226E, 0x238A226E, 0x228A236E, 0x238B236E, 0x228A226E, 0x228A226E, 0x228A236E, -0x238B236E, 0x228A226E, 0x228A226E, 0x228A226E, 0x238A226E, 0x228A236E, 0x238B236E, 0x238B236E, -0x238B236E, 0x238A226E, 0x228A226E, 0x228A226E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238A226E, -0x228A226E, 0x228A226E, 0x228A236E, 0x238B236E, 0x228A226E, 0x228A226E, 0x228A226E, 0x228A236E, -0x238B236E, 0x238A226E, 0x228A226E, 0x228A226E, 0x228A226E, 0x228A226E, 0x228A226E, 0x228A226E, -0x228A226E, 0x228A226E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, -0x228A226E, 0x228A226E, 0x228A236E, 0x238A236E, 0x238B236E, 0x228A226E, 0x238B236E, 0x238B236E, -0x238B236E, 0x238B236E, 0x228A226E, 0x228A226E, 0x238B236E, 0x238B236E, 0x228A226E, 0x228A226E, -0x228A236E, 0x228A226E, 0x238A226E, 0x228A226E, 0x228A226E, 0x228A236E, 0x238A236E, 0x238B236E, -0x228A226E, 0x238B236E, 0x238B236E, 0x238A226E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, -0x228A236E, 0x228A236E, 0x238A226E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, -0x228A226E, 0x228A236E, 0x238B236E, 0x228A226E, 0x238B236E, 0x228A236E, 0x238B236E, 0x238A226E, -0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x228A226E, 0x228A226E, 0x228A236E, 0x238B236E, -0x238B236E, 0x238A236D, 0x238A236E, 0x238A236E, 0x238B236E, 0x238B236E, 0x238A226E, 0x228A236E, -0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x228A236E, 0x238B236E, 0x238B236E, 0x238B236E, -0x238B236E, 0x238B236E, 0x238A236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, -0x228A226E, 0x228A226E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238A226E, -0x238B236E, 0x238B236E, 0x228A226E, 0x228A236E, 0x238B236E, 0x238B236E, 0x228A226E, 0x238B236E, -0x238A236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x238B236E, 0x228A236D, 0x238A236E, 0x228A246E, -0x238A236E, 0x238A236D, 0x228A206E, 0x1F8A1F6F, 0x248C2D6A, 0x539A5455, 0x569A5654, 0x569B5653, -0x589A5853, 0x599B5952, 0x599B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x599B5952, 0x599C5952, -0x5A9B5B52, 0x5B9B5A52, 0x5A9C5952, 0x5A9B5952, 0x5A9C5A52, 0x599C5A52, 0x599C5A52, 0x599B5952, -0x599B5952, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x599C5952, 0x599B5A52, 0x599C5952, -0x599B5952, 0x5A9B5A52, 0x5B9B5A52, 0x5A9B5952, 0x5A9B5A52, 0x5A9C5A52, 0x599C5952, 0x599B5A52, -0x5A9B5B52, 0x5B9B5A52, 0x5A9C5A52, 0x599C5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, -0x5A9C5952, 0x5A9C5952, 0x5A9C5A52, 0x5A9B5A52, 0x599B5A51, 0x5B9B5A52, 0x5A9B5A52, 0x5A9C5A52, -0x599C5A52, 0x5A9B5A52, 0x5B9B5A52, 0x599C5952, 0x599C5A52, 0x5B9B5A52, 0x599C5952, 0x5A9B5952, -0x599B5A52, 0x599B5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5A52, 0x5B9C5B52, 0x5A9B5A52, 0x5A9B5B52, -0x589B5853, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5A52, 0x599B5953, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5852, 0x599B5952, 0x5A9B5952, 0x589B5853, 0x599B5952, 0x599B5A52, 0x5A9B5952, -0x589B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5952, 0x599B5952, -0x599B5A52, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x5A9B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x5A9B5852, 0x579C5852, 0x599B5A52, 0x599B5952, 0x599B5952, 0x599B5952, -0x589B5952, 0x589A5853, 0x589A5753, 0x579A5653, 0x569B5753, 0x569A5653, 0x55995354, 0x539A5355, -0x288B1F6D, 0x19871972, 0x1B881C71, 0x1D881E70, 0x1E881E70, 0x1E881E70, 0x1E881E70, 0x1E891E70, -0x1E891E70, 0x1E881E70, 0x1E881E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E881E70, -0x1E881E70, 0x1E881E70, 0x1E881E70, 0x1E891E70, 0x1E881E70, 0x1E881E70, 0x1E881E70, 0x1E881E70, -0x1E891D70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E881E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1D881E70, 0x1E891E70, 0x1E881E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E881E70, 0x1E881E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E881E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E881E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E881E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891D70, 0x1E881E70, 0x1E891E70, 0x1E891E70, 0x1E881E70, 0x1E891E70, -0x1E891E70, 0x1E881E70, 0x1E891E70, 0x1E891D70, 0x1E881E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E881E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, 0x1E891E70, -0x1E891E70, 0x1E881E70, 0x1D881C71, 0x19871972, 0x1F8B286D, 0x539A5454, 0x559A5654, 0x569A5753, -0x579B5852, 0x589B5952, 0x599B5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5A52, 0x599C5A52, 0x5A9B5B52, -0x5B9B5B52, 0x5A9B5A51, 0x599C5A52, 0x5A9B5A52, 0x5A9C5952, 0x599C5A52, 0x599C5A52, 0x5A9C5952, -0x589C5952, 0x599C5952, 0x599C5952, 0x599C5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9C5952, -0x5A9B5A52, 0x5B9B5B52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x599C5952, 0x5A9B5A51, 0x5B9C5B51, -0x5B9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5B9B5B52, 0x5B9B5A52, 0x5A9C5A52, 0x5A9C5B52, 0x5A9B5B52, -0x5A9C5A52, 0x5A9B5A51, 0x5A9B5A52, 0x5B9C5B52, 0x5A9C5B52, 0x5B9B5A52, 0x5B9C5A52, 0x5A9B5952, -0x5A9C5B52, 0x5B9B5B52, 0x5A9C5A52, 0x599C5952, 0x5A9B5B52, 0x5A9C5952, 0x599C5A52, 0x599C5A52, -0x5A9B5A52, 0x5A9B5B52, 0x5B9B5A51, 0x5A9B5A52, 0x599C5952, 0x5A9C5B52, 0x5B9C5A51, 0x5A9C5A51, -0x599B5852, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5852, 0x589B5952, 0x599B5952, 0x599B5952, -0x599B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x599B5A52, 0x599B5952, 0x599B5952, 0x599B5952, 0x599C5952, -0x599B5952, 0x599C5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x5A9B5952, 0x599C5952, 0x599B5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, 0x599B5A52, 0x599B5852, -0x599B5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5852, 0x599B5952, 0x5A9B5952, -0x5A9B5A52, 0x599B5952, 0x599B5952, 0x599B5A52, 0x599B5A52, 0x5A9C5A52, 0x5A9B5952, 0x599B5A52, -0x599C5952, 0x5A9B5952, 0x5A9B5A52, 0x599B5852, 0x589C5852, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x589B5853, 0x579B5753, 0x569B5653, 0x579B5653, 0x57995654, 0x549A5355, 0x53995355, -0x268A1F6E, 0x1A8E4467, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0080007F, 0x00800080, +0x00800080, 0x0080007F, 0x0080007F, 0x00800080, 0x0080007F, 0x00800080, 0x00800080, 0x0080007F, +0x0080007F, 0x00800080, 0x00800080, 0x0080007F, 0x00800080, 0x0080007F, 0x00800080, 0x00800080, +0x00800080, 0x0080007F, 0x00800080, 0x0080007F, 0x0080007F, 0x0080007F, 0x00800080, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x00800080, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x00800080, 0x00800080, 0x00800080, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0180007F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0180007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0180017F, 0x0080017F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0180007F, 0x0080017F, 0x0180017F, 0x0180007F, 0x0080007F, 0x0180017F, 0x0080007F, 0x0080007F, +0x0180007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0080007F, 0x0180007F, 0x0180017F, 0x0180007F, +0x0080017F, 0x0080007F, 0x0080007F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0180017F, 0x0080007F, +0x0080007F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0180007F, +0x0080017F, 0x0180007F, 0x0080007F, 0x0180017F, 0x0080017F, 0x0080017F, 0x0080017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180007F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0080017F, 0x0180017F, 0x0080007F, 0x0180017F, 0x0080007F, 0x0180007F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180007F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0080017F, 0x0180007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0080017F, 0x0080017F, 0x0080017F, 0x0180007F, +0x0180007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0180017F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0180017F, +0x0180007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0180017F, 0x0180007F, +0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0180017F, 0x0180017F, 0x0080017F, +0x0080007F, 0x0080007F, 0x0080017F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080017F, 0x0180017F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, 0x0080007F, +0x0080007F, 0x0180007F, 0x0080017F, 0x0180007F, 0x0080007F, 0x0180017F, 0x0080007F, 0x0080017F, +0x0180017F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0180017F, 0x0080017F, 0x0180017F, +0x0080017F, 0x0080007F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0180007F, 0x0180007F, 0x0080007F, +0x0080007F, 0x0080007F, 0x0180007F, 0x0180007F, 0x0080007F, 0x0180017F, 0x0080017F, 0x0180007F, +0x0080017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0080007F, +0x0180017F, 0x0180017F, 0x0180007F, 0x0180007F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0080017F, +0x0180017F, 0x0180007F, 0x0180007F, 0x0180017F, 0x0180007F, 0x0080017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180007F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180017F, +0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0080017F, 0x0080017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0080017F, 0x0180017F, +0x0180027F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, +0x0180017F, 0x0180017F, 0x0180027F, 0x0280027F, 0x0180017F, 0x0180017F, 0x0180017E, 0x0180017F, +0x0180017F, 0x0280017E, 0x0180017F, 0x0080017F, 0x0080007F, 0x0180017F, 0x0180027F, 0x0180017F, +0x0180027F, 0x0180017F, 0x0180017F, 0x0280027F, 0x0280017F, 0x0180017F, 0x0180027E, 0x0180017F, +0x0180017F, 0x0180027E, 0x0180017F, 0x0180017F, 0x0180027E, 0x0280017E, 0x0180027E, 0x0180027E, +0x0180017F, 0x0280017E, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0280017E, +0x0080027E, 0x0280017F, 0x0180017F, 0x0180017F, 0x0280017E, 0x0180027E, 0x0180027E, 0x0280017E, +0x0180017F, 0x0280027E, 0x0180017F, 0x0180027E, 0x0180017F, 0x0180027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0180017F, 0x0280017E, 0x0180017F, 0x0280017E, 0x0280027E, 0x0280027F, +0x0280027E, 0x0280027E, 0x0180017F, 0x0180027E, 0x0280027E, 0x0180027E, 0x0180027E, 0x0180027E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0080007F, 0x0180017F, 0x0180007F, 0x0180007F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0080017F, 0x0180007F, 0x0080017F, 0x0080007F, 0x0180007F, 0x0180017F, 0x0080017F, 0x0080007F, +0x0180007F, 0x0080007F, 0x0180017F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0180007F, 0x0180017F, +0x0180007F, 0x0080007F, 0x0080007F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0080017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180007F, 0x0080017F, 0x0180027E, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180007F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0080007F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0280017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180017F, 0x0080017F, 0x0280017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0080017F, +0x0080007F, 0x0180017E, 0x0080017F, 0x0180027F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0280017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0280017E, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180027E, 0x0180027F, +0x0280017E, 0x0180017F, 0x0180017F, 0x0180017F, 0x0280017E, 0x0180027E, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180027F, 0x0180017F, 0x0180027E, 0x0180017F, 0x0180017F, 0x0180027E, +0x0180027E, 0x0180017E, 0x0180027E, 0x0180017F, 0x0180027F, 0x0180017F, 0x0280017E, 0x0180017F, +0x0280017E, 0x0180017F, 0x0180017F, 0x0180017F, 0x0280017E, 0x0180017F, 0x0180017F, 0x0280017E, +0x0180017E, 0x0180017E, 0x0180027E, 0x0180027E, 0x0180017F, 0x0180027E, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0280027E, 0x0180017F, 0x0180027E, 0x0280017E, 0x0180017F, 0x0180027E, +0x0180027E, 0x0180017F, 0x0181017F, 0x0180027E, 0x0280017E, 0x0180027E, 0x0180027E, 0x0280027E, +0x0280027E, 0x0181017F, 0x0180027E, 0x0280017E, 0x0180017F, 0x0280027E, 0x0280027E, 0x0180027E, +0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0180027E, 0x0280027E, 0x0180017F, 0x0280027E, +0x0280027E, 0x0280027E, 0x0180027E, 0x0280027E, 0x0280027E, 0x0280017E, 0x0181017F, 0x0180017F, +0x0280027E, 0x0280027E, 0x0280017E, 0x0180027E, 0x0180027E, 0x0280017E, 0x0280027E, 0x0180027E, +0x0280017E, 0x0180027E, 0x0280017E, 0x0180037E, 0x0280027E, 0x0280027E, 0x0180017F, 0x0181017F, +0x0280027E, 0x0181027E, 0x0281027E, 0x0280027E, 0x0180017F, 0x0280027E, 0x0280017E, 0x0180027E, +0x0280027E, 0x0180027E, 0x0180027E, 0x0280027E, 0x0180027E, 0x0180027E, 0x0281027E, 0x0280027E, +0x0281027E, 0x0180027E, 0x0280027E, 0x0180017F, 0x0280027E, 0x0280017E, 0x0280017E, 0x0280027E, +0x0280027E, 0x0380027E, 0x0281027E, 0x0280027E, 0x0280027E, 0x0380027E, 0x0280017E, 0x0280017E, +0x0280017E, 0x0280027E, 0x0380037E, 0x0380037E, 0x0280017E, 0x0280027F, 0x0280027E, 0x0281027E, +0x0380027E, 0x0280027E, 0x0280027E, 0x0280017E, 0x0280027E, 0x0280017F, 0x0281027E, 0x0380017E, +0x0280037E, 0x0280027E, 0x0281027E, 0x0380037E, 0x0380037E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0281027E, 0x0280037E, 0x0380027E, 0x0281027E, 0x0281027E, 0x0280027E, +0x0381017E, 0x0280027E, 0x0280037E, 0x0380027E, 0x0180037E, 0x0280027E, 0x0280037E, 0x0281027E, +0x0181027E, 0x0380027E, 0x0280027E, 0x0281027E, 0x0281037E, 0x0381027E, 0x0281027E, 0x0381037E, +0x0380027E, 0x0281027E, 0x0180037E, 0x0381027E, 0x0280037E, 0x0380027E, 0x0380037E, 0x0481037E, +0x0380027E, 0x0481037E, 0x0281027E, 0x0281027E, 0x0280037E, 0x0281037E, 0x0480037E, 0x0481037E, +0x0381037E, 0x0380037E, 0x0381027E, 0x0380037E, 0x0381037E, 0x0380027E, 0x0281037E, 0x0380037E, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0180017F, 0x0180017F, 0x0180027E, 0x0280017E, 0x0280017E, 0x0180017F, 0x0180027E, 0x0180017F, +0x0180027E, 0x0180017F, 0x0280027E, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180027E, 0x0180017F, +0x0280017E, 0x0180027E, 0x0280027E, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0280027E, 0x0180017F, 0x0181017F, 0x0180027E, 0x0280027E, 0x0180017E, 0x0180017F, 0x0180027E, +0x0180017F, 0x0280017E, 0x0280017E, 0x0180027E, 0x0280027E, 0x0280017E, 0x0180027E, 0x0280027E, +0x0180027F, 0x0280027E, 0x0280017E, 0x0180027E, 0x0280017E, 0x0380027E, 0x0380027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0380037E, 0x0280027E, 0x0280027E, 0x0180027E, 0x0180017F, 0x0280027E, +0x0180027E, 0x0280027E, 0x0180027E, 0x0280027E, 0x0281017E, 0x0180017E, 0x0181017F, 0x0181017F, +0x0180017F, 0x0280027E, 0x0380027E, 0x0280027E, 0x0280027E, 0x0180027E, 0x0280017E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0180027E, 0x0280027E, 0x0280027E, 0x0180027E, 0x0281027E, 0x0280017E, +0x0181017F, 0x0280027E, 0x0280037E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280017E, 0x0280027E, 0x0280017E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0381017E, 0x0280017E, 0x0280027E, 0x0180027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0280027E, 0x0380027E, 0x0380027E, 0x0380037E, 0x0380037E, 0x0281027E, +0x0280027E, 0x0281027E, 0x0280027E, 0x0281027E, 0x0281027E, 0x0281027E, 0x0381037E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0280027E, 0x0380027E, 0x0281027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0281017E, 0x0280027E, 0x0281037E, 0x0280027E, 0x0281027E, 0x0380037E, 0x0280027E, 0x0280037E, +0x0380037E, 0x0280017E, 0x0280037E, 0x0280027E, 0x0281037E, 0x0281037E, 0x0380037E, 0x0281027E, +0x0280027E, 0x0381027E, 0x0281027E, 0x0380027E, 0x0280037E, 0x0180037E, 0x0380027E, 0x0380027E, +0x0380017E, 0x0280027E, 0x0281037E, 0x0281037E, 0x0381027E, 0x0280037E, 0x0281027E, 0x0281027E, +0x0380027E, 0x0281027E, 0x0280037E, 0x0381027E, 0x0281027E, 0x0280027E, 0x0281027E, 0x0380037E, +0x0380037E, 0x0380027E, 0x0381027E, 0x0380037E, 0x0281037E, 0x0381027E, 0x0380037E, 0x0381037E, +0x0380037E, 0x0381027E, 0x0380037E, 0x0281027E, 0x0380037E, 0x0380037E, 0x0381037E, 0x0381037E, +0x0381037E, 0x0281027E, 0x0281027E, 0x0381047E, 0x0381037E, 0x0381027E, 0x0381037E, 0x0281027E, +0x0381027E, 0x0380037E, 0x0281027E, 0x0281027E, 0x0281037E, 0x0380037E, 0x0380037E, 0x0380037E, +0x0380037E, 0x0380037E, 0x0381037E, 0x0380037E, 0x0481037E, 0x0381037E, 0x0280037E, 0x0481037E, +0x0281037E, 0x0281037E, 0x0281037E, 0x0381047E, 0x0381037E, 0x0381017E, 0x0281027E, 0x0281027E, +0x0381047E, 0x0381037E, 0x0381037E, 0x0281027E, 0x0380037E, 0x0381037E, 0x0380037E, 0x0381037E, +0x0381037E, 0x0381027E, 0x0381027E, 0x0381037E, 0x0381027E, 0x0381027E, 0x0381037E, 0x0381037E, +0x0381047E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0281037E, 0x0381037E, 0x0281027E, 0x0381037E, +0x0381047E, 0x0381057E, 0x0381047E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0281027E, 0x0381027E, +0x0381027E, 0x0381037E, 0x0481047E, 0x0481057E, 0x0381027E, 0x0380047E, 0x0381037E, 0x0381037E, +0x0481037E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0481047E, 0x0281037E, 0x0481047E, 0x0481037E, +0x0381047E, 0x0281037E, 0x0381037E, 0x0581057E, 0x0481047D, 0x0281047E, 0x0380047E, 0x0381037E, +0x0381037E, 0x0481037E, 0x0381037E, 0x0381047E, 0x0381037E, 0x0381037E, 0x0581047E, 0x0381047E, +0x0381037E, 0x0381047E, 0x0381037E, 0x0481037E, 0x0281037E, 0x0381037E, 0x0381047E, 0x0381037E, +0x0281047E, 0x0581037E, 0x0381047E, 0x0481037E, 0x0481047E, 0x0481047E, 0x0381037E, 0x0481047E, +0x0481047E, 0x0481037E, 0x0481047E, 0x0381047E, 0x0481047E, 0x0381047E, 0x0481047E, 0x0581037D, +0x0481057E, 0x0681037D, 0x0381037E, 0x0481037E, 0x0381037E, 0x0381057E, 0x0581057E, 0x0581047E, +0x0481057E, 0x0481037D, 0x0481037E, 0x0581047E, 0x0481037E, 0x0481047E, 0x0381047E, 0x0481057E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0281027E, 0x0281037E, 0x0380027E, 0x0380037E, 0x0280027E, 0x0281027E, 0x0280027E, 0x0280027E, +0x0380027E, 0x0281037E, 0x0380037E, 0x0281037E, 0x0381027E, 0x0281027E, 0x0280037E, 0x0281027E, +0x0380027E, 0x0380037E, 0x0380037E, 0x0380027E, 0x0281027E, 0x0281027E, 0x0281027E, 0x0281027E, +0x0281037E, 0x0380037E, 0x0380037E, 0x0280027E, 0x0281027E, 0x0381037E, 0x0380037E, 0x0381027E, +0x0380037E, 0x0381047E, 0x0281027E, 0x0380037E, 0x0380047E, 0x0281027E, 0x0281037E, 0x0381037E, +0x0381047E, 0x0381037E, 0x0380027E, 0x0281027E, 0x0281027E, 0x0381037E, 0x0481047E, 0x0481037E, +0x0381047E, 0x0480037E, 0x0381047E, 0x0381037E, 0x0281027E, 0x0281027E, 0x0381037E, 0x0281027E, +0x0481047E, 0x0381037E, 0x0481037E, 0x0381027E, 0x0181027E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0380027E, 0x0281037E, 0x0381037E, 0x0381027E, 0x0481037E, 0x0381037E, 0x0380037E, 0x0281037E, +0x0381037E, 0x0380037E, 0x0381037E, 0x0380037E, 0x0281037E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0381037E, 0x0381047E, 0x0381027E, 0x0281027E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0381037E, 0x0381037E, 0x0481037E, 0x0381037E, 0x0381037E, 0x0380037E, 0x0381037E, 0x0381047E, +0x0381037E, 0x0381037E, 0x0381037E, 0x0381027E, 0x0381047E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0381047E, 0x0381037E, 0x0381037E, 0x0481037E, 0x0381047E, 0x0381047E, 0x0481037E, 0x0381037E, +0x0481037E, 0x0381037E, 0x0381047E, 0x0481057D, 0x0381037E, 0x0381047E, 0x0481047E, 0x0381037E, +0x0381037E, 0x0381027E, 0x0481027E, 0x0381047E, 0x0381027E, 0x0481037E, 0x0381037E, 0x0381047E, +0x0381037E, 0x0481037E, 0x0381047E, 0x0381047E, 0x0381047E, 0x0481047E, 0x0381037E, 0x0381047E, +0x0481047E, 0x0381027E, 0x0381047E, 0x0481037E, 0x0481047E, 0x0481037E, 0x0481037E, 0x0481037E, +0x0381037E, 0x0381037E, 0x0381047E, 0x0381037E, 0x0381037E, 0x0381047E, 0x0481037E, 0x0481037D, +0x0481027E, 0x0381037E, 0x0381047E, 0x0381047E, 0x0481047E, 0x0381047E, 0x0481037E, 0x0381037E, +0x0381047E, 0x0481037E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0481047E, 0x0481047E, +0x0581047D, 0x0381037E, 0x0381047E, 0x0581047D, 0x0481047E, 0x0481047E, 0x0581057E, 0x0481047E, +0x0481047E, 0x0381047E, 0x0581047E, 0x0381057E, 0x0482047E, 0x0481057D, 0x0481047E, 0x0481047E, +0x0381047E, 0x0481047E, 0x0381047E, 0x0481037E, 0x0381047E, 0x0481057D, 0x0481047E, 0x0481047E, +0x0381047E, 0x0481057D, 0x0481057D, 0x0481047E, 0x0481037E, 0x0381037E, 0x0381047E, 0x0481057D, +0x0581057E, 0x0581047D, 0x0581057D, 0x0581057D, 0x0481057D, 0x0581047D, 0x0481057D, 0x0481047E, +0x0481047E, 0x0381037E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0381037E, 0x0481037E, 0x0481047E, +0x0481047E, 0x0381037E, 0x0381037E, 0x0382037E, 0x0481047E, 0x0581047D, 0x0581057E, 0x0481047E, +0x0581047D, 0x0481047E, 0x0381047E, 0x0481047E, 0x0481057D, 0x0481057D, 0x0481047E, 0x0482047E, +0x0481057D, 0x0581057D, 0x0481047E, 0x0481047E, 0x0381057D, 0x0481057E, 0x0481047E, 0x0481047E, +0x0481057D, 0x0581067D, 0x0581057E, 0x0481047E, 0x0481057E, 0x0581057D, 0x0381037E, 0x0482047E, +0x0481037E, 0x0481047E, 0x0481067D, 0x0581057E, 0x0581047E, 0x0381057E, 0x0482047E, 0x0481057D, +0x0581047D, 0x0482047E, 0x0481057E, 0x0581047E, 0x0481047E, 0x0581067D, 0x0581057D, 0x0481047D, +0x0581047E, 0x0481047E, 0x0481057E, 0x0681077D, 0x0681057D, 0x0482047E, 0x0481057D, 0x0481047E, +0x0581047D, 0x0581047E, 0x0581037D, 0x0481047E, 0x0482047E, 0x0581047D, 0x0481047E, 0x0482057D, +0x0481057D, 0x0481057E, 0x0581057D, 0x0581047D, 0x0381047E, 0x0482047E, 0x0482047E, 0x0581047D, +0x0382057E, 0x0681047D, 0x0481057E, 0x0582047E, 0x0581057D, 0x0581057D, 0x0582047E, 0x0581057D, +0x0581067D, 0x0681067D, 0x0582047E, 0x0482057E, 0x0581047D, 0x0581067D, 0x0681067D, 0x0581057D, +0x0681077D, 0x0582047D, 0x0581057D, 0x0481047E, 0x0482047E, 0x0681077D, 0x0682067D, 0x0681057D, +0x0681067D, 0x0681047D, 0x0481057D, 0x0681057D, 0x0681047D, 0x0582047E, 0x0482057D, 0x0581067D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0381037E, 0x0381037E, 0x0381047E, 0x0381037E, 0x0381047E, 0x0481047E, 0x0481047E, 0x0381037E, +0x0381047E, 0x0481047E, 0x0481037E, 0x0381057D, 0x0481037E, 0x0381037E, 0x0481047E, 0x0481037E, +0x0481047E, 0x0481047E, 0x0481057D, 0x0581047E, 0x0481037E, 0x0381037E, 0x0381037E, 0x0382047E, +0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481057D, 0x0481037E, 0x0381037E, 0x0481047E, +0x0481057D, 0x0481037E, 0x0381057D, 0x0481047E, 0x0481047E, 0x0381037E, 0x0481047E, 0x0581057E, +0x0481057D, 0x0481047E, 0x0481037E, 0x0381037E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481057D, +0x0581057D, 0x0681057D, 0x0581057D, 0x0481047E, 0x0481037E, 0x0481047E, 0x0481047E, 0x0581057D, +0x0581047E, 0x0481057D, 0x0481037E, 0x0382037E, 0x0581047E, 0x0481047E, 0x0381047D, 0x0481047E, +0x0581057E, 0x0481047E, 0x0481047E, 0x0581037E, 0x0481057D, 0x0481057D, 0x0481047E, 0x0481037E, +0x0581057D, 0x0481047E, 0x0481047E, 0x0481037E, 0x0481047D, 0x0481047E, 0x0581057D, 0x0681057D, +0x0581047D, 0x0481037E, 0x0381037E, 0x0381047E, 0x0581057E, 0x0481047E, 0x0581047D, 0x0481047E, +0x0481047E, 0x0581057D, 0x0581047D, 0x0581047D, 0x0581057D, 0x0481047E, 0x0581057D, 0x0681047D, +0x0481047E, 0x0482047E, 0x0481047E, 0x0381047E, 0x0581047D, 0x0482047E, 0x0581047E, 0x0482037E, +0x0481057E, 0x0481047E, 0x0582057D, 0x0581037D, 0x0581057D, 0x0581057E, 0x0581047E, 0x0581047E, +0x0581057E, 0x0581067D, 0x0581057E, 0x0682047D, 0x0481047D, 0x0481047E, 0x0581057E, 0x0481047E, +0x0482047E, 0x0481057D, 0x0481047E, 0x0581057E, 0x0481047E, 0x0481057D, 0x0581057D, 0x0581037E, +0x0482047E, 0x0481047E, 0x0581057E, 0x0581047D, 0x0481057D, 0x0681067D, 0x0482047E, 0x0481047E, +0x0581057E, 0x0582047E, 0x0482057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0681057D, 0x0581047D, +0x0581047D, 0x0581057D, 0x0581047D, 0x0481047E, 0x0481057D, 0x0581057E, 0x0581057D, 0x0581057E, +0x0481037E, 0x0481047E, 0x0581067D, 0x0481067D, 0x0581057D, 0x0581047D, 0x0582057D, 0x0582047D, +0x0582047D, 0x0682057D, 0x0581057D, 0x0481057D, 0x0482047E, 0x0681057D, 0x0581057E, 0x0582067D, +0x0581057D, 0x0681057D, 0x0582067D, 0x0581067D, 0x0582057D, 0x0582067D, 0x0581067D, 0x0682057D, +0x0582047E, 0x0681067D, 0x0581047D, 0x0681057D, 0x0681067D, 0x0681067D, 0x0581057D, 0x0582057D, +0x0681067D, 0x0681057D, 0x0582057D, 0x0581057D, 0x0681057D, 0x0581057D, 0x0681067D, 0x0681067D, +0x0581057D, 0x0582057D, 0x0681057D, 0x0582067D, 0x0581067D, 0x0681057D, 0x0481057D, 0x0681047D, +0x0482057D, 0x0582057D, 0x0681067D, 0x0582057D, 0x0681057D, 0x0582057D, 0x0681067D, 0x0582057D, +0x0681057D, 0x0581047D, 0x0582067D, 0x0582067D, 0x0582047E, 0x0581057D, 0x0582057D, 0x0581067D, +0x0482047E, 0x0582057D, 0x0581067D, 0x0582047D, 0x0582057D, 0x0582067D, 0x0581067D, 0x0681067D, +0x0582057D, 0x0481067D, 0x0582057D, 0x0582057D, 0x0482047E, 0x0582057D, 0x0682047D, 0x0582057D, +0x0682057D, 0x0681067D, 0x0582057D, 0x0682057D, 0x0582057D, 0x0681067D, 0x0681057D, 0x0582047D, +0x0582067D, 0x0682077D, 0x0682067D, 0x0682057D, 0x0682067D, 0x0682067D, 0x0582057D, 0x0482067D, +0x0582057D, 0x0482057E, 0x0681067D, 0x0781067D, 0x0682067D, 0x0482057D, 0x0682067D, 0x0582067D, +0x0682067D, 0x0682057D, 0x0681067D, 0x0681067D, 0x0681067D, 0x0682067D, 0x0582047E, 0x0582067D, +0x0582057D, 0x0682057D, 0x0582067D, 0x0781087D, 0x0682067D, 0x0582057D, 0x0582057D, 0x0582057D, +0x0682057D, 0x0681067D, 0x0682067D, 0x0582067D, 0x0681057D, 0x0582057D, 0x0582047D, 0x0582057D, +0x0681057D, 0x0682067D, 0x0681067D, 0x0682057D, 0x0582057D, 0x0582057D, 0x0482057D, 0x0682047D, +0x0682067D, 0x0682057D, 0x0681077D, 0x0682057D, 0x0582057D, 0x0682067D, 0x0682057D, 0x0682077D, +0x0682067D, 0x0582057D, 0x0682067D, 0x0682067D, 0x0582067D, 0x0782067D, 0x0782067D, 0x0682067D, +0x0781077D, 0x0582057D, 0x0682067D, 0x0582067D, 0x0682067D, 0x0881077D, 0x0682067D, 0x0682067D, +0x0781077D, 0x0682067D, 0x0582077D, 0x0682067D, 0x0682067D, 0x0682057D, 0x0582067D, 0x0682077D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, +0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8BAA8B38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0482047D, 0x0481047E, 0x0581057D, 0x0481057D, 0x0681057D, 0x0581057D, 0x0581057D, 0x0581057D, +0x0581067D, 0x0582047E, 0x0481057D, 0x0681057D, 0x0481057D, 0x0582047D, 0x0681057D, 0x0482047E, +0x0682057D, 0x0582057D, 0x0681057D, 0x0581077D, 0x0682057D, 0x0582047D, 0x0481057D, 0x0581057D, +0x0581067D, 0x0681057D, 0x0582047E, 0x0481037E, 0x0482047E, 0x0581057D, 0x0581067D, 0x0681067D, +0x0581057D, 0x0482057E, 0x0681067D, 0x0682057D, 0x0481057D, 0x0482057D, 0x0681067D, 0x0781067D, +0x0581077D, 0x0482057E, 0x0582047D, 0x0482047E, 0x0482057D, 0x0482057D, 0x0582057D, 0x0682057D, +0x0581067D, 0x0681067D, 0x0582057D, 0x0582047D, 0x0581057D, 0x0482057D, 0x0582067D, 0x0682067D, +0x0482057D, 0x0582057E, 0x0482047E, 0x0581067D, 0x0582057D, 0x0681067D, 0x0781067D, 0x0681067D, +0x0682067D, 0x0681067D, 0x0482047E, 0x0682067D, 0x0481067D, 0x0582057D, 0x0582067E, 0x0582057D, +0x0681077D, 0x0682057D, 0x0681067D, 0x0582047D, 0x0581057D, 0x0582057D, 0x0482047E, 0x0482057D, +0x0482057D, 0x0681057D, 0x0582067D, 0x0682067D, 0x0682047D, 0x0582067D, 0x0582067D, 0x0582057D, +0x0681067D, 0x0682067D, 0x0582067D, 0x0581067D, 0x0581057D, 0x0681077D, 0x0681067D, 0x0582057D, +0x0582057D, 0x0581067D, 0x0482067D, 0x0582067D, 0x0582057D, 0x0682067D, 0x0682067D, 0x0582067D, +0x0582057D, 0x0682057D, 0x0682057D, 0x0682057D, 0x0682057D, 0x0682077D, 0x0781057D, 0x0682057D, +0x0682067D, 0x0682067D, 0x0682067D, 0x0782077D, 0x0582047D, 0x0582057D, 0x0681077D, 0x0681067D, +0x0582057D, 0x0582057D, 0x0682067D, 0x0582057D, 0x0682057D, 0x0682067D, 0x0682057D, 0x0482057D, +0x0482057D, 0x0581067D, 0x0781077D, 0x0582067D, 0x0482067D, 0x0682077D, 0x0682067D, 0x0582057D, +0x0681067D, 0x0681067D, 0x0582057D, 0x0682067D, 0x0682067D, 0x0681067D, 0x0682067D, 0x0682067D, +0x0582067D, 0x0682057D, 0x0582057D, 0x0682067D, 0x0681067D, 0x0682067D, 0x0681067D, 0x0782067D, +0x0582057D, 0x0482057D, 0x0682067D, 0x0582067D, 0x0582067D, 0x0582057D, 0x0682067D, 0x0582067D, +0x0582057D, 0x0581077D, 0x0682067D, 0x0682077D, 0x0781067D, 0x0682067D, 0x0682067D, 0x0682077D, +0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0782077D, 0x0782067D, 0x0782067D, +0x0582067D, 0x0682067D, 0x0582067D, 0x0682067D, 0x0782077D, 0x0782067D, 0x0681067D, 0x0682067D, +0x0582057D, 0x0582067D, 0x0682067D, 0x0682067D, 0x0682077C, 0x0682067D, 0x0682077D, 0x0782067D, +0x0582057D, 0x0682067D, 0x0782067D, 0x0582067D, 0x0582057D, 0x0582067D, 0x0682057D, 0x0582057D, +0x0682077D, 0x0781077D, 0x0682057D, 0x0682057D, 0x0682067D, 0x0682057D, 0x0782067D, 0x0682077D, +0x0682067D, 0x0582067D, 0x0682077D, 0x0582067D, 0x0682067D, 0x0582057D, 0x0682057D, 0x0782067D, +0x0582057D, 0x0682067D, 0x0582067D, 0x0682057D, 0x0582057D, 0x0682077D, 0x0682077D, 0x0682077D, +0x0582057D, 0x0682067D, 0x0682067D, 0x0582067D, 0x0582067D, 0x0682057D, 0x0682057D, 0x0682077D, +0x0682057D, 0x0682077D, 0x0682067D, 0x0782067D, 0x0582067D, 0x0782077D, 0x0882067C, 0x0682057D, +0x0582077D, 0x0782087C, 0x0782077D, 0x0682077D, 0x0782077C, 0x0782067D, 0x0682067D, 0x0582067D, +0x0682057D, 0x0582067D, 0x0682067D, 0x0882087C, 0x0782067D, 0x0782057D, 0x0682087D, 0x0882067C, +0x0682067D, 0x0682067D, 0x0782077C, 0x0682067D, 0x0782067D, 0x0682057D, 0x0582067D, 0x0782067D, +0x0682067D, 0x0682067D, 0x0682087D, 0x0A82097C, 0x0782067D, 0x0682067D, 0x0682067D, 0x0582067D, +0x0682077C, 0x0682077D, 0x0682077C, 0x0782067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682077D, +0x0882077C, 0x0782077D, 0x0882067C, 0x0682057D, 0x0582067D, 0x0582067D, 0x0782077C, 0x0682067D, +0x0882077C, 0x0682087C, 0x0882067D, 0x0682067D, 0x0782067C, 0x0882077C, 0x0782067D, 0x0682087C, +0x0782077D, 0x0782067D, 0x0682077C, 0x0682067D, 0x0782077D, 0x0782087D, 0x0782067D, 0x0782097C, +0x0982077C, 0x0682067D, 0x0782057D, 0x0782077D, 0x06820A7C, 0x0882077C, 0x0782077D, 0x0782087C, +0x0982077C, 0x0682067D, 0x0682077D, 0x0782087C, 0x0582087D, 0x0782067D, 0x0682077C, 0x0782087D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8BAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A39, 0x8AAA8939, 0x89AA8939, 0x89AA8939, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x89AA8939, 0x89AA8939, 0x89AA8A39, 0x8AAA8A39, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8B38, 0x8BAA8B38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0782067D, 0x0582057D, 0x0482057D, 0x0582067D, 0x0681067D, 0x0682067D, 0x0582057D, 0x0582057D, +0x0582067D, 0x0682067D, 0x0682067D, 0x0682057D, 0x0682057D, 0x0582067D, 0x0681067D, 0x0582067D, +0x0781067D, 0x0582067D, 0x0682067D, 0x0682067D, 0x0781077D, 0x0682057D, 0x0582067D, 0x0682057D, +0x0582057D, 0x0582057D, 0x0682067D, 0x0782077C, 0x0682067D, 0x0682067D, 0x0682077D, 0x0682067D, +0x0582067D, 0x0782077D, 0x0682067D, 0x0682067D, 0x0582057D, 0x0682077D, 0x0882077C, 0x0782067D, +0x0682077D, 0x0582067D, 0x0682067D, 0x0682067D, 0x0682057D, 0x0582067D, 0x0682067D, 0x0682067D, +0x0682057D, 0x0582057D, 0x0582057D, 0x0682067D, 0x0582057D, 0x0682067D, 0x0782077D, 0x0782057D, +0x0682067D, 0x0682067D, 0x0582057D, 0x0782067D, 0x0682077C, 0x0782087D, 0x0782067D, 0x0782087D, +0x0782067D, 0x0782077D, 0x0582057D, 0x0782077D, 0x0682067D, 0x0682057D, 0x0682077D, 0x0682067D, +0x0582077D, 0x0782077C, 0x0782067D, 0x0782067D, 0x0682067D, 0x0582067D, 0x0782077D, 0x0782067D, +0x0682057D, 0x0682077D, 0x0782087C, 0x0782067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, +0x0682077D, 0x0682067D, 0x0682077D, 0x0782067D, 0x0682077D, 0x0782077D, 0x0782067D, 0x0682067D, +0x0682077D, 0x0682067D, 0x0582067D, 0x0682077D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, +0x0682067D, 0x0682077D, 0x0782077D, 0x0682067D, 0x0682067D, 0x0682077D, 0x0882077C, 0x0582067D, +0x0682067D, 0x0782067D, 0x0782077D, 0x0682077D, 0x0882087C, 0x0882077C, 0x0582067D, 0x0682077D, +0x0881087D, 0x0782067D, 0x0682067D, 0x0682067D, 0x0582057D, 0x0582057D, 0x0582067D, 0x0682067D, +0x0682057D, 0x0782077D, 0x0881077D, 0x0682077C, 0x0682077D, 0x0682087C, 0x0881067D, 0x0682077C, +0x0682067D, 0x0682067D, 0x0782077C, 0x0782077C, 0x0782077C, 0x0682077C, 0x0782087C, 0x0782077D, +0x0682067D, 0x0582067D, 0x0682077D, 0x0881087C, 0x0782067D, 0x0682077D, 0x0682087C, 0x0782067D, +0x0682067D, 0x0682077D, 0x0882057C, 0x0782067C, 0x0682067D, 0x0582067D, 0x0782077C, 0x0682077D, +0x0682067D, 0x0682067D, 0x0782077D, 0x0882057C, 0x0782077C, 0x0782077D, 0x0782087C, 0x0881077D, +0x0782067D, 0x0682087C, 0x0782077C, 0x0782077C, 0x0782087C, 0x0782087C, 0x0882087C, 0x0882067C, +0x0782087C, 0x0782067D, 0x0782077C, 0x0682087D, 0x0881077D, 0x0882087C, 0x0782077D, 0x0682067D, +0x0682067D, 0x0682067D, 0x0882067C, 0x0782087D, 0x0882077C, 0x0682077C, 0x0881087D, 0x0882067C, +0x0682077D, 0x0782077C, 0x0782067C, 0x0782067C, 0x0682077C, 0x0882077C, 0x0882087C, 0x0982097C, +0x0981087C, 0x0882077C, 0x0782067C, 0x0782067C, 0x0882077C, 0x0782067D, 0x0982087C, 0x0781087C, +0x0782067D, 0x0682067D, 0x0682087C, 0x0682077D, 0x0782077D, 0x0682067D, 0x0882077C, 0x0682077C, +0x0782067C, 0x0582057D, 0x0682077D, 0x0682067D, 0x0782077C, 0x0882097C, 0x0A82097C, 0x0782077C, +0x0682067D, 0x0782077C, 0x0782067C, 0x0682067D, 0x0682067D, 0x0782077C, 0x0682067D, 0x0882087C, +0x0682077C, 0x0782087C, 0x0682077D, 0x0982067C, 0x0582067D, 0x0882097C, 0x0982077C, 0x0882067C, +0x0782087C, 0x09820A7C, 0x0782087C, 0x0882087C, 0x0782087C, 0x0782087C, 0x0782077C, 0x0582087C, +0x0882077D, 0x0682067D, 0x0782077C, 0x0883097C, 0x0883087C, 0x0882097C, 0x0682057D, 0x0883097C, +0x0983087C, 0x0883087C, 0x0782077C, 0x0783077C, 0x0783077C, 0x0883097C, 0x0883087C, 0x0883077C, +0x0783077C, 0x0782087C, 0x0882097C, 0x0C82097C, 0x0882077C, 0x0782067D, 0x0682067D, 0x0683087C, +0x0782097C, 0x0783087C, 0x0982077D, 0x0783087C, 0x0983087C, 0x0983087C, 0x0983087C, 0x0983097C, +0x0882077D, 0x0983087C, 0x0783077C, 0x0783087C, 0x0682077D, 0x0883087C, 0x0782077D, 0x09820A7C, +0x0783077C, 0x0A820A7C, 0x0983087C, 0x0883097C, 0x09830A7C, 0x0A82097C, 0x0782087C, 0x0983087C, +0x0883077C, 0x0783097C, 0x0983087C, 0x0782087C, 0x0983097C, 0x0A83097C, 0x0883097C, 0x0B820B7C, +0x0883077C, 0x0883087C, 0x0783087C, 0x0983087C, 0x0A83097C, 0x0983077C, 0x0883087C, 0x0A830C7C, +0x0982087C, 0x0782077C, 0x0A83097C, 0x0983097C, 0x08820A7C, 0x0883087C, 0x0783067C, 0x0783097C, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8C37, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8939, +0x89A98839, 0x88A9883A, 0x88A9883A, 0x87A9873A, 0x87A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9873A, 0x87A9873A, 0x88A9883A, 0x88A9883A, 0x88A98939, 0x89AA8A39, 0x8AAA8A38, 0x8AAA8A38, +0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0682067D, 0x0782077D, 0x0782077D, 0x0782067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, +0x0682067D, 0x0682067D, 0x0682057D, 0x0682067D, 0x0682077D, 0x0782067D, 0x0782057C, 0x0682087D, +0x0782077C, 0x0682077D, 0x0782087C, 0x0782077C, 0x0782087C, 0x0982097C, 0x0982087C, 0x0782077D, +0x0782067D, 0x0782077C, 0x0782077C, 0x0782077D, 0x0782077D, 0x0782067D, 0x0682067D, 0x0682067D, +0x0682077C, 0x0782087D, 0x0782077D, 0x0782067D, 0x0682077D, 0x08820A7C, 0x0882087C, 0x0882077C, +0x0982077C, 0x0582067D, 0x0782067D, 0x0782067D, 0x0682077C, 0x0782067C, 0x0682067C, 0x0782077C, +0x0782077C, 0x0682057D, 0x0782077D, 0x0682077D, 0x0682087C, 0x0882087C, 0x0A82097C, 0x0682087C, +0x0682067D, 0x0782067D, 0x0682067D, 0x0782077C, 0x0883087C, 0x0982097C, 0x0882077C, 0x08820A7C, +0x0982077C, 0x0882087C, 0x0682067D, 0x0882077C, 0x0782087D, 0x0783067C, 0x0782087D, 0x0782077D, +0x0682097C, 0x0A82087C, 0x0882097C, 0x0782077D, 0x0682067D, 0x0782077C, 0x0682067D, 0x0682067C, +0x0782077D, 0x0782097C, 0x0882077D, 0x0682077D, 0x0682077D, 0x0782077C, 0x0782087D, 0x0782077D, +0x0882077D, 0x0782077C, 0x0782077D, 0x0782077C, 0x0782087D, 0x0882077D, 0x0782067D, 0x0681077D, +0x0682067D, 0x0582077D, 0x0782077D, 0x0782087D, 0x0782077D, 0x0782077D, 0x0782077D, 0x0782077D, +0x0782077D, 0x0782077C, 0x0782097D, 0x0782077C, 0x0782077C, 0x0682067D, 0x0782077D, 0x0783077C, +0x0782077D, 0x0782077D, 0x0782067D, 0x0682067D, 0x0782077D, 0x0782077D, 0x0782097C, 0x0882097D, +0x0782067D, 0x0682077D, 0x0882087D, 0x0882087D, 0x0782077D, 0x0782077C, 0x0782077C, 0x0782077C, +0x0882087D, 0x0882097C, 0x0782087D, 0x0782077C, 0x0882077C, 0x0782087C, 0x0882097D, 0x0782077D, +0x0882077C, 0x0782077D, 0x0783077C, 0x0882087C, 0x0882077D, 0x0883077C, 0x0883087D, 0x0882077D, +0x0782077C, 0x0782077D, 0x0782067D, 0x0782077C, 0x0782077D, 0x0882087D, 0x0782067D, 0x0782077D, +0x0782077C, 0x0982087C, 0x0782077C, 0x0782087D, 0x0782067D, 0x0682087D, 0x0782077D, 0x0882077D, +0x0782077D, 0x0782077C, 0x0782077C, 0x0782077C, 0x0782077D, 0x0782077D, 0x0882097C, 0x0883087C, +0x0782077C, 0x0882087C, 0x0782087C, 0x0882077C, 0x0782097C, 0x0983097C, 0x0782087D, 0x0882077D, +0x0882097D, 0x0782077D, 0x0883087C, 0x0782097C, 0x0982087C, 0x0882087C, 0x0882087D, 0x0883077C, +0x0782077C, 0x0882077D, 0x0882087D, 0x0982087C, 0x0882077C, 0x0882087C, 0x0982077D, 0x0582077C, +0x0782077D, 0x0783077C, 0x0882077C, 0x0983097C, 0x0882097C, 0x0983097C, 0x0982097C, 0x0982097D, +0x0982087C, 0x0882097C, 0x0883077C, 0x0783087C, 0x0983097C, 0x0782077C, 0x0882097C, 0x0882087D, +0x0982077C, 0x0783077C, 0x0782077C, 0x0883077C, 0x0982077C, 0x0883077C, 0x0883087C, 0x0983077C, +0x0883087C, 0x0883077C, 0x0682077C, 0x0883097C, 0x0882087D, 0x09830B7C, 0x0983087C, 0x0783077C, +0x0783087C, 0x0983087C, 0x0883077C, 0x0782077C, 0x0883077C, 0x0883097C, 0x0683087C, 0x0983087C, +0x0783087C, 0x0782087C, 0x0783097C, 0x0782067C, 0x0683097C, 0x09830A7C, 0x0883097D, 0x0883087C, +0x0883097C, 0x09830A7C, 0x0883087C, 0x0A83097C, 0x08830A7C, 0x0883087C, 0x0883087D, 0x0783077C, +0x0882087C, 0x0982067D, 0x0883087C, 0x0983077C, 0x0A820A7B, 0x0A83097C, 0x08830A7C, 0x0883077C, +0x08830A7C, 0x0A830A7C, 0x0983097C, 0x0883097C, 0x0983087C, 0x0983097C, 0x0983097C, 0x0983077C, +0x09830A7C, 0x0A830A7C, 0x0A820E7B, 0x0C83097B, 0x0A83087C, 0x0A83087C, 0x0883087C, 0x0783087C, +0x0983097C, 0x0A83087C, 0x0983097C, 0x0B830C7C, 0x0C830B7C, 0x0B830A7C, 0x0A83097C, 0x0A830B7C, +0x0983087C, 0x0883087C, 0x0983097C, 0x0783087C, 0x09830A7C, 0x0983097C, 0x0A830B7C, 0x0983087C, +0x0A830B7C, 0x0A83097C, 0x09830A7B, 0x0A830B7B, 0x0C830C7B, 0x0A83097C, 0x0A83097C, 0x0983097C, +0x0983087C, 0x0A83097B, 0x0983077C, 0x0A830A7C, 0x09830B7C, 0x0A83097B, 0x0B830D7B, 0x0C830A7B, +0x08830A7C, 0x0983077C, 0x0A83097C, 0x0A830C7C, 0x0B830A7C, 0x0783077C, 0x09830D7B, 0x0E830A7B, +0x0783097C, 0x08830A7C, 0x09830A7B, 0x0B83087B, 0x0B830A7B, 0x0983097C, 0x0884077C, 0x0784077C, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x89AA8939, 0x88A9883A, +0x87A9863A, 0x86A9863A, 0x86A9863A, 0x86A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8863B, 0x86A9863A, 0x86A9863A, 0x86A9873A, 0x88A9883A, 0x89AA8939, 0x8AAA8A38, +0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0983087C, 0x0783077C, 0x0783077D, 0x0783077C, 0x0783077D, 0x0682067D, 0x0682057D, 0x0683067D, +0x0582057D, 0x0683067D, 0x0783077C, 0x0883087C, 0x0883077C, 0x0783077C, 0x0883097C, 0x0B82097C, +0x0783087C, 0x0783087C, 0x0783097C, 0x0883087C, 0x0883087C, 0x0883097C, 0x0883097C, 0x0A830A7C, +0x0A820A7C, 0x0A83097C, 0x0983087C, 0x0782077D, 0x0682067D, 0x0783077C, 0x0783077C, 0x0883097C, +0x0983087C, 0x0883097C, 0x0883087C, 0x0783077C, 0x08830A7C, 0x0B83097C, 0x0883097C, 0x09830A7C, +0x0A83067C, 0x0682077C, 0x0983087C, 0x0782097C, 0x0783087C, 0x0883097C, 0x0983097C, 0x0983087C, +0x0883077C, 0x0882097D, 0x0883077C, 0x0783077C, 0x0983097C, 0x09830A7C, 0x0A83097C, 0x0783087C, +0x0883097C, 0x0882077C, 0x0683087D, 0x0983097C, 0x0983097C, 0x0A830A7C, 0x0B830C7C, 0x0B83087C, +0x0A830A7C, 0x0883087C, 0x0783097C, 0x0783087C, 0x0983087C, 0x0783097C, 0x0A820A7C, 0x0883077C, +0x08830A7C, 0x0983097C, 0x0983097C, 0x0783087C, 0x0783077D, 0x0782087D, 0x0882077D, 0x0882097C, +0x09830A7C, 0x0A83097C, 0x0883087C, 0x0883077C, 0x0983097C, 0x0883097C, 0x0A83097C, 0x0982087D, +0x0983077C, 0x0883097C, 0x0883087C, 0x0882097C, 0x0982097C, 0x0882087D, 0x0783087C, 0x0883077D, +0x0783087C, 0x08830A7C, 0x0983077C, 0x0683077C, 0x0883087D, 0x0983097C, 0x0983097C, 0x0883087D, +0x0883097C, 0x0883097C, 0x0983087C, 0x08830A7C, 0x0A83087C, 0x0883087C, 0x0783067C, 0x0783087D, +0x0883087C, 0x0783077D, 0x0883087D, 0x0883077C, 0x0783077D, 0x0883097C, 0x0983097C, 0x0883087C, +0x0883097C, 0x0A830A7C, 0x0B830A7C, 0x0A83087D, 0x0783087C, 0x09830A7D, 0x0983097C, 0x0883087C, +0x0883077C, 0x0783077D, 0x0883087C, 0x0883087C, 0x0883097C, 0x0983077D, 0x0983097C, 0x0A830A7C, +0x0983097D, 0x0983087C, 0x0883087C, 0x0883097C, 0x0883087C, 0x09830B7C, 0x0A830A7C, 0x0983097C, +0x0883087C, 0x0883097C, 0x0983097C, 0x09830B7C, 0x0C83097C, 0x0883087D, 0x0983097D, 0x0883087C, +0x0A830A7C, 0x0983097C, 0x0A83097C, 0x0883087C, 0x0683077D, 0x0883097C, 0x0A830A7C, 0x0983087D, +0x0782097D, 0x0883087C, 0x0783077C, 0x0783087C, 0x0883087C, 0x0883097C, 0x0B83097C, 0x0883097C, +0x0883087C, 0x0A83097C, 0x0884097C, 0x0983087C, 0x09830A7C, 0x0A83097C, 0x08830A7C, 0x08830A7C, +0x09830A7C, 0x0983097C, 0x0983097C, 0x0983097C, 0x0A83097C, 0x0B83097C, 0x0B830C7C, 0x0A83097C, +0x0B830B7C, 0x0B830B7C, 0x0A830A7C, 0x0983087C, 0x0983097C, 0x0984077C, 0x0783097C, 0x0884087C, +0x0784097C, 0x08830A7C, 0x0A830A7C, 0x0B830A7C, 0x0A830A7C, 0x0A830A7C, 0x0B830B7B, 0x0B830C7B, +0x0C830B7B, 0x0B830B7C, 0x0A830B7C, 0x0883087C, 0x0A830A7C, 0x0983087D, 0x07830A7C, 0x0B83097C, +0x0C830A7C, 0x0A840A7C, 0x0984097C, 0x0983097C, 0x08830B7C, 0x09830A7C, 0x0A83097C, 0x0A830A7B, +0x0983087C, 0x0883087C, 0x09830A7C, 0x0B830C7B, 0x0B830B7C, 0x0B830A7C, 0x0883087C, 0x0784097C, +0x0A830A7C, 0x0984087C, 0x0883087D, 0x0883087C, 0x08830A7C, 0x0A83077C, 0x08830A7C, 0x0883097C, +0x0983097C, 0x0A83097C, 0x0B83097C, 0x0783067D, 0x09830B7C, 0x0B830A7C, 0x0A830B7C, 0x0884087C, +0x09830B7C, 0x0C830A7B, 0x09830A7C, 0x0C830A7C, 0x09830A7C, 0x0984087C, 0x0A83097C, 0x0883087C, +0x0B83097C, 0x0A83087C, 0x0783097C, 0x0A830B7C, 0x09840A7C, 0x0C830C7B, 0x0B830A7B, 0x0984097C, +0x0A830A7B, 0x0983097C, 0x0884087C, 0x0884087C, 0x09840A7C, 0x0B840A7B, 0x0983097C, 0x0A830B7C, +0x0B830B7B, 0x0A830B7C, 0x0F830D7B, 0x0B830A7C, 0x0A830C7B, 0x0C83097B, 0x09840A7C, 0x0A84087B, +0x0B830A7B, 0x09830B7B, 0x0B840A7B, 0x0B840B7B, 0x0B830C7B, 0x0D830D7B, 0x0C830A7B, 0x0A840A7C, +0x0A840B7B, 0x0A84097C, 0x0A840A7C, 0x0B830B7B, 0x0C830D7B, 0x0D830B7B, 0x0B840A7B, 0x0B830C7B, +0x0B840A7B, 0x0A840B7B, 0x0C830C7B, 0x0D830E7B, 0x0B840B7B, 0x0A830A7C, 0x0A84097B, 0x09830A7B, +0x0B840A7B, 0x0B840A7B, 0x0A840A7B, 0x0B840A7B, 0x0C840B7B, 0x0B830B7B, 0x0E830D7B, 0x0B840B7B, +0x0C830A7B, 0x09840B7B, 0x0A840C7B, 0x0E830C7B, 0x0A84087C, 0x09840B7B, 0x0E830D7B, 0x0984097C, +0x0B830B7B, 0x0C830C7B, 0x0C840C7B, 0x0C83097B, 0x0B840B7B, 0x0A840A7B, 0x0A840A7B, 0x0A840A7B, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x89A98839, 0x88A9873A, 0x86A9863A, +0x86A8853B, 0x85A8853B, 0x84A8833B, 0x83A8833C, 0x83A8823C, 0x82A7823C, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, +0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823C, +0x82A8833C, 0x83A8833C, 0x83A8843B, 0x85A8853B, 0x85A8863B, 0x86A9863A, 0x87A9883A, 0x88A98939, +0x8AAA8A38, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0B830A7B, 0x0983097C, 0x0983097C, 0x0983097C, 0x09830A7C, 0x0A83097C, 0x0983097C, 0x09830A7C, +0x0884097C, 0x0983087C, 0x0883097C, 0x0983097C, 0x0983097C, 0x0A830D7B, 0x0D830B7B, 0x0983087C, +0x0983087C, 0x0983097C, 0x0983097C, 0x0B830B7B, 0x0983087C, 0x0884087C, 0x0783077C, 0x0783077D, +0x0783077C, 0x0883097C, 0x0A830A7C, 0x0A830B7B, 0x0B830B7B, 0x0B830A7C, 0x0A830A7C, 0x0A830A7C, +0x0A83097C, 0x0A83097B, 0x0983097C, 0x0A830B7B, 0x0D830B7B, 0x0983097C, 0x0B830B7B, 0x0B830C7C, +0x0A83077C, 0x0784087C, 0x0A83087B, 0x09830C7B, 0x0A83097C, 0x0983097C, 0x0A830A7C, 0x0A83087B, +0x0A830B7C, 0x0B83097C, 0x0A83087B, 0x0A830B7B, 0x0A830A7C, 0x0C830B7B, 0x0D83087B, 0x0B83087C, +0x0A83097C, 0x08830B7C, 0x0784067C, 0x0C830A7B, 0x0A830B7B, 0x0B830A7B, 0x0A840A7B, 0x0A830B7C, +0x0A83097C, 0x0783097C, 0x0A83097B, 0x09830A7B, 0x0A830A7B, 0x0B830B7B, 0x0B82097C, 0x0883077C, +0x0781067D, 0x0482047E, 0x0581047D, 0x0482047E, 0x0482037E, 0x0381057D, 0x0581057D, 0x0581057D, +0x0581057D, 0x0581047D, 0x0481047E, 0x0481057D, 0x0581047D, 0x0481067D, 0x0581057D, 0x0481057D, +0x0481047D, 0x0581047D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0481037E, 0x0481047E, 0x0481047E, +0x0581057D, 0x0482047E, 0x0481057D, 0x0581057D, 0x0482047E, 0x0482047E, 0x0482057D, 0x0581067D, +0x0681047D, 0x0481057D, 0x0481047E, 0x0581057D, 0x0481047E, 0x0581067D, 0x0582047D, 0x0481047E, +0x0481047E, 0x0481057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0481047E, 0x0481047E, 0x0481057D, +0x0481057D, 0x0581057D, 0x0581047D, 0x0482037E, 0x0382047E, 0x0581057D, 0x0581057D, 0x0581057D, +0x0581047D, 0x0581057D, 0x0481047E, 0x0482047E, 0x0381057D, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481057D, 0x0681067D, 0x0681067D, 0x0581057D, 0x0581047D, 0x0482047E, 0x0481057D, 0x0581047D, +0x0481057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0481057D, 0x0581057D, +0x0581057D, 0x0581057D, 0x0581047D, 0x0481037E, 0x0481057D, 0x0581057D, 0x0581047D, 0x0481047E, +0x0482047E, 0x0482047E, 0x0481047D, 0x0381047E, 0x0481057D, 0x0482057D, 0x0681057D, 0x0581057D, +0x0482047E, 0x0581057D, 0x0581057D, 0x0581047D, 0x0581057D, 0x0581057D, 0x0481057D, 0x0581067D, +0x0581057D, 0x0481067D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0581057D, +0x0581057D, 0x0581047D, 0x0482047E, 0x0481057D, 0x0482037D, 0x0581057D, 0x0482047D, 0x0581057D, +0x0581057D, 0x0681057D, 0x0581057D, 0x0581057D, 0x0582057D, 0x0582057D, 0x0581057D, 0x0582057D, +0x0582067D, 0x0682067D, 0x0681067D, 0x0582057D, 0x0481057D, 0x0581057D, 0x0481047D, 0x0581067D, +0x0581067D, 0x0582057D, 0x0582057D, 0x0582047D, 0x0581057D, 0x0581067D, 0x0581057D, 0x0581067D, +0x0681067D, 0x0681067D, 0x0681067D, 0x0681067D, 0x0681057D, 0x0581047D, 0x0481057D, 0x0581057D, +0x0581057D, 0x0481047E, 0x0481057D, 0x0581057D, 0x0582047D, 0x0581057D, 0x0581057D, 0x0581047D, +0x0581057D, 0x0581067D, 0x0581047D, 0x0381057D, 0x0681057D, 0x0581067D, 0x0581057D, 0x0482057E, +0x0681067D, 0x0681057D, 0x0581067D, 0x0582057D, 0x0581067D, 0x0482057D, 0x0681047D, 0x0482057D, +0x0681057D, 0x0582057E, 0x0482047D, 0x0482057D, 0x0682067D, 0x0C840B7B, 0x0C840D7B, 0x0D840C7B, +0x0C840C7B, 0x0C840B7A, 0x0A84097B, 0x09840A7B, 0x0A840C7B, 0x0D840D7B, 0x0D840C7B, 0x0C840C7A, +0x0B840C7B, 0x0F83107A, 0x0D840C7B, 0x0B840C7B, 0x0C840D7B, 0x0A840B7B, 0x0A840C7A, 0x0C84097B, +0x0A840C7B, 0x0C840C7B, 0x0D840D7B, 0x0D840D7A, 0x0D850D7A, 0x0D840D7A, 0x0C840B7B, 0x0B840B7B, +0x0A840B7B, 0x0C840C7B, 0x0C840D7B, 0x0F840D7B, 0x0B840C7B, 0x0C840C7B, 0x0D840C7B, 0x0B840B7A, +0x0C840E7A, 0x0F84107A, 0x0F840D7B, 0x0D840D7B, 0x0B840B7A, 0x0C840C7A, 0x0C840D7A, 0x0D840D7A, +0x0D850B7A, 0x0D850C7A, 0x0C840C7A, 0x0C850E7A, 0x0D850C7A, 0x0D840F7A, 0x0D840E7A, 0x0C840C7A, +0x0A840B7B, 0x0D840C7A, 0x0F840E7B, 0x0C840B7B, 0x0A840B7A, 0x0F84107A, 0x0C840B7B, 0x0B840C7B, +0x0C840D7B, 0x0D840D7B, 0x0E850D7A, 0x0D840A7B, 0x0B840E7A, 0x0C840C7B, 0x0C840E7B, 0x0F840F7A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAB8C38, 0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A9863A, 0x85A8853B, +0x4893395E, 0x328F3166, 0x338F3564, 0x37903863, 0x38913863, 0x38913863, 0x38913863, 0x38913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, +0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913763, 0x37913863, 0x38913863, 0x38913863, +0x38913863, 0x38903763, 0x358F3364, 0x318F3266, 0x3993485E, 0x85A8853B, 0x86A9863A, 0x87A9883A, +0x89AA8A39, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0984097B, 0x09840A7C, 0x0B840A7B, 0x0A840A7B, 0x0A840A7B, 0x0A840A7B, 0x0A840B7B, 0x0B840A7B, +0x0A84097B, 0x0A840A7B, 0x0A840B7B, 0x0C840D7B, 0x0E830D7B, 0x0C830C7C, 0x0C830B7B, 0x0B830A7B, +0x0B830C7B, 0x0C840A7B, 0x0C830D7B, 0x0D830C7B, 0x0C830C7B, 0x0B830B7B, 0x0B830B7B, 0x0C840B7B, +0x0B840C7B, 0x0C830C7B, 0x0C830C7B, 0x0C840B7B, 0x0B830B7B, 0x0A840B7B, 0x0B840A7B, 0x0A840A7B, +0x0B840B7B, 0x0A84097B, 0x0B840B7B, 0x0D840C7B, 0x0984097C, 0x0C830C7B, 0x0A830D7B, 0x0D830C7B, +0x08840A7C, 0x0A840B7B, 0x0B84097B, 0x0B830B7B, 0x0C840A7B, 0x0984097C, 0x09840B7B, 0x0B830C7B, +0x0C830D7B, 0x0A840B7B, 0x09840B7B, 0x0C830C7B, 0x0B840C7B, 0x0D840C7B, 0x0E830A7B, 0x0C830A7B, +0x0C840B7B, 0x0A840B7B, 0x0D83087B, 0x0784087B, 0x0B840D7B, 0x0C840B7B, 0x0A840B7B, 0x0B840A7B, +0x08840A7B, 0x0B840B7B, 0x0B840A7B, 0x0A84097B, 0x0B830D7B, 0x0C830C7B, 0x0A84097C, 0x08840C7B, +0x0681047D, 0x0380037E, 0x0381037E, 0x0381037E, 0x0481047E, 0x0381047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0481047E, 0x0481037E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0381037E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0381047E, 0x0481037E, 0x0481047E, +0x0481037E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0581047D, 0x0281037E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0482047E, +0x0482047E, 0x0482047E, 0x0481047E, 0x0481047E, 0x0482047E, 0x0482047E, 0x0482047E, 0x0482047E, +0x0482047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481037E, +0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481057D, 0x0581057E, 0x0581057E, +0x0581057E, 0x0581057D, 0x0581047E, 0x0482047E, 0x0481047E, 0x0481057D, 0x0481057E, 0x0482047E, +0x0481047E, 0x0481047E, 0x0481037E, 0x0481057D, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0481037E, 0x0481047E, 0x0481037E, 0x0381047E, 0x0381047E, 0x0581047D, 0x0481047E, +0x0481047E, 0x0481047E, 0x0482047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481057D, +0x0481047E, 0x0481057D, 0x0581047E, 0x0481047E, 0x0482047E, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0482047E, 0x0482047E, 0x0481047E, 0x0481047E, +0x0481037E, 0x0481047E, 0x0581057D, 0x0581057D, 0x0581047E, 0x0481047E, 0x0481047E, 0x0481037E, +0x0581047E, 0x0481057E, 0x0482047E, 0x0481047E, 0x0581047D, 0x0381047E, 0x0482047E, 0x0481047E, +0x0482047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481057D, 0x0482047E, 0x0481047E, +0x0481047E, 0x0482047E, 0x0482047E, 0x0481047E, 0x0481057E, 0x0482047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0581047E, 0x0381037E, 0x0581047E, 0x0581047D, 0x0581047E, 0x0481047E, 0x0482047E, +0x0581047E, 0x0482047E, 0x0482047E, 0x0482047E, 0x0481037E, 0x0481057E, 0x0481047E, 0x0481057E, +0x0482047E, 0x0481057E, 0x0581047E, 0x0381037E, 0x0482067D, 0x0C840D7A, 0x0C840C7A, 0x0D840E7A, +0x0E840E7A, 0x0E840F79, 0x0F850F79, 0x0F850E79, 0x0E850D7A, 0x0C850D7A, 0x0C850D7A, 0x0E84107B, +0x11840F79, 0x0E840D79, 0x0C850D7A, 0x0E840E7A, 0x0D840C7A, 0x0C850D7A, 0x0C850D7A, 0x0E850C7A, +0x09850A7B, 0x0B850B7A, 0x0B850B7A, 0x0C850D7A, 0x0D840E7A, 0x0E840E7A, 0x0D840D7B, 0x0D840C7A, +0x0C840F7A, 0x11840F7A, 0x0D840D7A, 0x0F840E7A, 0x0E850D7A, 0x0C850C7B, 0x0D850E79, 0x11841079, +0x10840E7A, 0x0D850D7A, 0x0D840F7A, 0x1184107A, 0x0F850E79, 0x0D850D7A, 0x0D850F79, 0x0F841079, +0x0E850D7A, 0x0E850D79, 0x0E840D7A, 0x0F850F79, 0x0D850F79, 0x10840F7A, 0x0F850C79, 0x0F840A7A, +0x0D850F79, 0x0F84127A, 0x0E850D7A, 0x0B840A7A, 0x0C84117A, 0x0D850B7A, 0x0C840D7A, 0x0C840D7A, +0x0D840E7A, 0x0D84117A, 0x11850E79, 0x0E850F7A, 0x0C850C7A, 0x0D850E7A, 0x0F850E79, 0x0E850E79, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9883A, 0x87A9863A, 0x86A8853B, 0x83A8833C, +0x3D913163, 0x29904463, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, @@ -998,25 +998,25 @@ const unsigned long bg[480*640]={ 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, 0x4494445C, -0x4494445C, 0x4494445C, 0x4494445C, 0x448E1A67, 0x1F8A276D, 0x539A5455, 0x559A5654, 0x569A5753, -0x579A5753, 0x589B5852, 0x589B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5B52, 0x5B9B5B52, -0x5B9B5A52, 0x5A9C5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5952, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A52, -0x5A9C5952, 0x599C5952, 0x5A9C5B52, 0x5A9B5A52, 0x5B9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A52, -0x5B9B5B52, 0x5A9B5A52, 0x5B9C5B52, 0x5A9B5A52, 0x599C5A52, 0x5B9C5B52, 0x5B9C5B51, 0x5B9B5B52, -0x5A9C5952, 0x599B5A52, 0x5B9B5B52, 0x5A9C5952, 0x599C5952, 0x599C5952, 0x599C5A52, 0x5B9C5B52, -0x5B9C5A51, 0x5A9B5A51, 0x5B9C5A51, 0x5B9C5B51, 0x5B9C5B52, 0x5B9B5B52, 0x5A9C5A52, 0x5A9C5952, -0x5B9C5B52, 0x5C9C5B52, 0x5A9C5951, 0x599C5A52, 0x5C9C5B52, 0x599C5952, 0x5A9C5952, 0x599C5A52, -0x5A9B5A52, 0x5B9C5B52, 0x5C9C5B52, 0x5B9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5B9C5A52, 0x5A9C5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, -0x599B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x599C5952, 0x599C5952, 0x599B5952, 0x599C5952, -0x599C5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x5A9C5A52, 0x5A9B5952, 0x5A9B5A52, 0x5A9B5952, -0x599B5A52, 0x5A9B5A52, 0x599B5952, 0x599B5A52, 0x5A9C5A52, 0x5A9B5952, 0x599C5952, 0x599C5952, -0x5A9C5A52, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x5A9B5A52, 0x599C5852, -0x599B5952, 0x599C5A52, 0x599C5952, 0x599B5852, 0x5A9B5A52, 0x599C5952, 0x599B5A52, 0x5A9B5952, -0x5A9B5952, 0x5A9C5952, 0x599C5952, 0x599B5A52, 0x599C5A52, 0x5A9C5A52, 0x5A9B5A52, 0x599C5A52, -0x599B5A52, 0x5A9B5A52, 0x599C5A52, 0x5A9B5A52, 0x599B5952, 0x589B5952, 0x599C5952, 0x599B5952, -0x599B5952, 0x599B5852, 0x589A5753, 0x579A5853, 0x579A5854, 0x569A5454, 0x539A5454, 0x54995355, -0x278A206D, 0x1B8F4566, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, +0x4494445C, 0x4494445C, 0x4494445C, 0x44902963, 0x31913D63, 0x83A8833C, 0x85A8863B, 0x86A9873A, +0x88A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0B840B7B, 0x0B830C7B, 0x0B840B7C, 0x0B840C7B, 0x0D830D7B, 0x0E830E7B, 0x0E840E7B, 0x0E840D7B, +0x0C840B7B, 0x0B840A7B, 0x0A84097B, 0x0A840B7B, 0x0B840B7B, 0x0B840B7B, 0x0B840B7B, 0x0C840C7B, +0x0B840B7B, 0x0B840B7B, 0x0B840C7B, 0x0B840B7B, 0x0D840D7A, 0x0D840C7A, 0x0D840D7B, 0x0D840C7A, +0x0C840D7B, 0x0D840D7A, 0x0C840C7A, 0x0C840D7B, 0x0D840D7B, 0x0D840C7B, 0x0C840B7B, 0x0B840C7B, +0x0D840D7A, 0x0D840C7B, 0x0B840A7B, 0x0A840C7B, 0x0D840E7B, 0x0D840C7A, 0x0E840D7B, 0x0B84097B, +0x0C840C7A, 0x0C850D7A, 0x0B850B7A, 0x0C84097B, 0x0D840D7B, 0x0C840C7B, 0x0C830E7B, 0x0E840C7B, +0x0E840B7B, 0x0D840B7A, 0x0C840C7B, 0x0C840D7B, 0x0C850D7A, 0x0D850D7A, 0x0F840E7A, 0x0C840D7B, +0x0C840D7B, 0x0D840D7B, 0x0C850D7A, 0x0E840D7B, 0x0B840A7B, 0x09850A7B, 0x0B840B7A, 0x0C850B7A, +0x0C840D7A, 0x0D850C7A, 0x0D840A7A, 0x0C840E7A, 0x0D830F7B, 0x0D840A7B, 0x09840D7A, 0x0E840C7A, +0x0582057D, 0x048B456D, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, @@ -1038,25 +1038,25 @@ const unsigned long bg[480*640]={ 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, 0x4595455C, -0x4595455C, 0x4595455C, 0x4595455C, 0x458E1C66, 0x208A276D, 0x54995455, 0x569A5654, 0x569A5754, -0x579A5753, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5B9B5B52, 0x5B9C5B52, 0x5B9C5B52, -0x5B9C5A52, 0x5A9B5A52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5A51, 0x5B9C5B52, 0x5A9C5B52, -0x5A9B5A52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5A52, 0x5A9B5B52, 0x5A9C5A51, 0x5B9C5B52, 0x5C9B5C52, -0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5B52, 0x5C9B5C51, 0x5C9C5B52, 0x5B9C5A52, -0x5A9C5B52, 0x5B9C5B52, 0x599C5952, 0x5A9C5A52, 0x5B9C5A52, 0x5A9C5A52, 0x599C5A52, 0x5B9C5B51, -0x5B9C5A51, 0x5B9C5C52, 0x5B9C5B52, 0x5C9C5B52, 0x5B9C5B51, 0x5B9B5B52, 0x5A9C5B52, 0x599C5A51, -0x5B9C5B51, 0x5C9C5B52, 0x5A9C5952, 0x599C5B51, 0x5C9C5A52, 0x5A9C5B52, 0x5A9C5A52, 0x599C5B52, -0x5B9C5A52, 0x5C9C5B52, 0x5C9C5C52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5C9C5B52, 0x5B9C5B52, -0x5B9B5B52, 0x5B9B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5952, 0x5A9C5A52, 0x599B5952, 0x599B5952, -0x599B5852, 0x589B5952, 0x599C5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599C5952, -0x5A9C5A52, 0x599C5A52, 0x599C5A52, 0x5A9B5A51, 0x5A9C5952, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A52, -0x5A9B5952, 0x599B5A52, 0x5B9B5A52, 0x5A9B5A52, 0x5A9C5952, 0x599C5952, 0x599B5A52, 0x5A9B5A52, -0x5A9B5A52, 0x5A9C5952, 0x589B5952, 0x599B5A52, 0x5B9C5A52, 0x5A9C5B52, 0x5A9B5A52, 0x589B5A52, -0x5A9C5952, 0x599C5952, 0x599C5952, 0x5A9B5952, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, -0x5A9B5952, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A51, 0x5B9B5B52, 0x5A9C5A52, -0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x599C5A52, 0x5A9C5952, 0x599C5952, 0x599C5A52, 0x5A9B5A52, -0x5A9B5952, 0x599B5952, 0x579B5852, 0x589B5753, 0x589A5654, 0x559A5454, 0x549A5454, 0x53995255, -0x278A216D, 0x1C8F4566, 0x4595465B, 0x4595465B, 0x4595465B, 0x4595465B, 0x4595455C, 0x4695465B, +0x4595455C, 0x4595455C, 0x4595455C, 0x458B056C, 0x0682067D, 0x0F840F7A, 0x1084107A, 0x0E850E7A, +0x0E850E7A, 0x0F840E7A, 0x0F850E79, 0x0D850C7A, 0x0D850E7A, 0x0F84107A, 0x10850F79, 0x0F850E79, +0x0E850D7A, 0x0E850E7A, 0x0E850E7A, 0x0F850F79, 0x0D850D7A, 0x0F850E79, 0x0E850F79, 0x0E850E7A, +0x0E850D7A, 0x0E850F79, 0x0F851079, 0x0F850D79, 0x0E850E7A, 0x0E850D79, 0x0E85107A, 0x1484127A, +0x10850E7A, 0x10851079, 0x0F851079, 0x0D850C7A, 0x0E851079, 0x12851278, 0x11851079, 0x0E850D7A, +0x0C850E7A, 0x10850F79, 0x0B850C7B, 0x0D850E7A, 0x0E850D7A, 0x0D850D7A, 0x0C860D7A, 0x11851179, +0x10850E79, 0x10851179, 0x10850F79, 0x12861079, 0x11851178, 0x11841079, 0x0E851079, 0x0C850E79, +0x11851079, 0x11850F79, 0x0D850C7A, 0x0B861179, 0x12850D79, 0x0D850E7A, 0x0E850D7A, 0x0C850E7A, +0x0F850E79, 0x11851079, 0x12851279, 0x10851079, 0x10851079, 0x10851079, 0x11850F79, 0x0F85107A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853A, 0x84A8833B, 0x82A7813C, +0x3D913562, 0x2E914562, 0x4595465B, 0x4595465B, 0x4595465B, 0x4595465B, 0x4595455C, 0x4695465B, 0x4595465B, 0x4595455C, 0x4695455B, 0x4695455B, 0x4695465B, 0x4595465B, 0x4695455B, 0x4595455C, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695455B, 0x4695465B, 0x4695465B, 0x4695455B, 0x4595465B, 0x4695455B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4595465B, 0x4695465B, @@ -1078,25 +1078,25 @@ const unsigned long bg[480*640]={ 0x4595465B, 0x4595465B, 0x4695455B, 0x4595455C, 0x4695465B, 0x4595465B, 0x4595455C, 0x4595465B, 0x4695465B, 0x4695465B, 0x4595465B, 0x4695465B, 0x4595455C, 0x4595465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4595465B, 0x4695465B, 0x4695455B, 0x4695465B, 0x4695455B, 0x4695465B, 0x4695465B, -0x4695455B, 0x4695465B, 0x4595455C, 0x468F1C66, 0x218B276D, 0x52995455, 0x549A5555, 0x579A5854, -0x589B5753, 0x579B5753, 0x589B5852, 0x5A9B5A52, 0x5A9B5A52, 0x5B9C5B52, 0x5A9C5A51, 0x5A9C5A52, -0x5B9C5B52, 0x5B9C5A51, 0x5A9C5B52, 0x5B9C5A52, 0x5A9C5B52, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5B52, -0x5B9C5B51, 0x5B9C5C51, 0x5B9C5B52, 0x5B9C5A51, 0x5A9C5A51, 0x5A9B5C51, 0x5C9B5C51, 0x5B9C5A51, -0x5B9C5C52, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5B52, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5B52, 0x5A9C5B52, -0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5B52, 0x5C9C5C51, 0x5C9C5C52, 0x5A9C5A51, 0x5B9C5B52, -0x5B9C5A51, 0x5B9B5C51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9B5B51, 0x5B9C5B52, 0x5A9C5B51, -0x5B9C5C51, 0x5C9C5B52, 0x5A9C5952, 0x5A9C5C51, 0x5A9C5951, 0x5A9C5A52, 0x5A9C5952, 0x5B9C5B52, -0x5B9C5B52, 0x5C9C5C52, 0x5C9C5C51, 0x5C9C5C52, 0x5C9C5C52, 0x5C9C5C52, 0x5C9B5D51, 0x5D9C5C51, -0x5B9B5A52, 0x5A9C5A52, 0x5A9C5952, 0x5A9C5A52, 0x5A9C5A52, 0x599C5952, 0x599C5952, 0x599C5952, -0x599C5952, 0x599C5A52, 0x5A9C5A52, 0x5A9C5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5B52, 0x5B9B5B52, -0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5B9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, -0x5A9B5B52, 0x5B9C5B52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5B52, 0x5A9B5A52, 0x5B9B5A52, 0x5A9B5A52, -0x5A9C5952, 0x589C5852, 0x599C5A52, 0x5B9C5B52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5852, 0x599C5A52, -0x5A9C5952, 0x5A9C5952, 0x5A9C5A52, 0x5A9B5952, 0x5A9B5A52, 0x5B9C5B52, 0x5A9B5B52, 0x5A9B5A52, -0x5A9B5952, 0x5A9B5A52, 0x5B9B5A52, 0x5B9C5A52, 0x5A9B5A51, 0x5A9C5A51, 0x5B9B5B51, 0x5B9C5A52, -0x5A9C5A52, 0x5A9C5A52, 0x5A9B5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9B5B52, 0x5B9C5B52, 0x5B9B5A52, -0x5A9B5952, 0x589B5853, 0x589B5852, 0x589B5853, 0x569A5553, 0x549A5554, 0x54995455, 0x52995356, -0x288B226D, 0x1D8F4765, 0x4695465B, 0x4795475B, 0x4695475B, 0x4695475B, 0x4695465B, 0x4695465B, +0x4695455B, 0x4695465B, 0x4595455C, 0x46912E61, 0x35913D62, 0x81A7823C, 0x83A8843B, 0x85A8863A, +0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x10840F7A, 0x0E850D7A, 0x0C850C7A, 0x0D850D7A, 0x0E850D7A, 0x0C850B7A, 0x0A850B7A, 0x0B850C7A, +0x0C850C7A, 0x0C850D7A, 0x0D840D7A, 0x0D840C7A, 0x0E840E7A, 0x0E840E7A, 0x0F84107A, 0x10840F7A, +0x0D840E7A, 0x0E850D7A, 0x0D850E7A, 0x0F850E79, 0x0D850E7A, 0x0E840F7A, 0x0F840D7A, 0x0D850E7A, +0x0F84107A, 0x10840F7A, 0x0E850D7A, 0x0D850D7A, 0x0E840F7A, 0x0E840E7A, 0x0E850E7A, 0x0F850E7A, +0x0E850B7A, 0x0985097B, 0x0A850D7A, 0x10850F7A, 0x0D850D7A, 0x0F850E7A, 0x0D85097A, 0x0B850D7A, +0x0C850C7A, 0x0D850C7A, 0x0D850D7A, 0x0E840B7B, 0x0E840E7A, 0x0F84107A, 0x0F85107A, 0x0D840F7A, +0x0F840B7A, 0x0D850E7A, 0x0F850E79, 0x0E850D7A, 0x0E850E79, 0x0E850E79, 0x10851179, 0x10840D7A, +0x0E850E7A, 0x0E850D7A, 0x0E851079, 0x0F850F7A, 0x0E850F79, 0x0E850F7A, 0x10851079, 0x10851079, +0x0F850D79, 0x0A850C7A, 0x0D850F7A, 0x0F84107A, 0x0C850A7B, 0x0A850E7A, 0x0E840D7A, 0x0D850F7A, +0x0682057D, 0x048B476C, 0x4695465B, 0x4795475B, 0x4695475B, 0x4695475B, 0x4695465B, 0x4695465B, 0x4695475B, 0x4795465B, 0x4695475B, 0x4695465B, 0x4695465B, 0x4695475B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4795475B, 0x4695465B, 0x4695475B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4795465B, 0x4695475B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, @@ -1118,25 +1118,25 @@ const unsigned long bg[480*640]={ 0x4695465B, 0x4795465B, 0x4795475B, 0x4695465B, 0x4695465B, 0x4695475B, 0x4795465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4695465B, 0x4795475B, 0x4695465B, 0x4795465B, 0x4695465B, 0x4795465B, 0x4795465B, 0x4695475B, 0x4695465B, 0x4795465B, 0x4695465B, 0x4695465B, 0x4695465B, -0x4695465B, 0x4795465B, 0x4695465B, 0x468F1D65, 0x238B286D, 0x52995256, 0x539A5355, 0x559A5654, -0x579B5753, 0x589B5853, 0x589C5952, 0x599C5A52, 0x5A9C5B52, 0x5A9C5A51, 0x5A9C5B52, 0x5C9C5B52, -0x5A9C5A51, 0x5B9C5B51, 0x5B9C5B51, 0x5A9C5B52, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, -0x5C9C5B51, 0x5B9B5C51, 0x5B9C5B51, 0x5A9C5B51, 0x5A9C5B51, 0x5C9C5D52, 0x5C9B5B51, 0x5B9C5C51, -0x5C9C5B51, 0x5B9C5A52, 0x5B9C5B52, 0x5B9C5C51, 0x5B9C5B51, 0x5B9C5B52, 0x5A9C5A51, 0x5B9C5B52, -0x5C9C5C52, 0x5A9C5B52, 0x5B9C5C52, 0x5B9C5B51, 0x5B9C5B52, 0x5C9C5C52, 0x5C9C5A52, 0x5A9C5B51, -0x5C9C5A51, 0x5C9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5C52, -0x5C9C5C51, 0x5C9C5B51, 0x5A9C5A51, 0x5C9C5B52, 0x5A9C5A52, 0x5B9C5A52, 0x599C5B52, 0x5B9C5B52, -0x5B9C5B52, 0x5B9C5C52, 0x5C9C5D51, 0x5D9C5D52, 0x5C9C5D51, 0x5D9C5E51, 0x5D9C5C51, 0x5C9C5B52, -0x5A9C5A52, 0x5A9C5B51, 0x5B9C5A52, 0x5A9C5952, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5952, 0x599C5A52, -0x5A9B5A52, 0x5A9B5A52, 0x5B9B5A52, 0x5B9C5B52, 0x5B9C5C52, 0x5C9C5B52, 0x5B9C5B52, 0x5B9C5B52, -0x5B9B5A52, 0x5B9C5B52, 0x5A9B5A51, 0x5B9C5A52, 0x5B9C5B52, 0x5C9C5B52, 0x5A9C5A52, 0x5B9C5B52, -0x5B9C5A51, 0x5B9C5B52, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5A52, 0x599C5852, -0x589C5852, 0x599C5A52, 0x5A9B5B52, 0x5A9C5A52, 0x5B9C5B52, 0x5B9C5A52, 0x599C5952, 0x5B9C5A51, -0x5A9C5A52, 0x5A9C5A51, 0x5A9C5B51, 0x5B9C5A52, 0x5A9C5B52, 0x5C9B5B52, 0x5B9C5B52, 0x5A9C5B52, -0x5B9C5A52, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5A52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B52, -0x5B9B5A52, 0x5B9C5B52, 0x5B9C5A52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9B5A52, -0x599C5852, 0x599B5952, 0x599B5852, 0x589B5653, 0x569A5653, 0x569A5554, 0x54995354, 0x53995156, -0x278B236C, 0x1E8E4865, 0x4895475A, 0x4895485A, 0x4895485A, 0x4795485A, 0x4895485A, 0x4895485A, +0x4695465B, 0x4795465B, 0x4695465B, 0x468B036C, 0x0582057D, 0x0C850C7A, 0x0D850D7A, 0x0E850E7A, +0x0F860F7A, 0x0F860F79, 0x0F851079, 0x10861079, 0x10861079, 0x0F860E79, 0x0E860F79, 0x11851079, +0x0E860E79, 0x0F851178, 0x11860F79, 0x0E860F79, 0x11861178, 0x11861179, 0x11861378, 0x13861278, +0x12861278, 0x11851278, 0x11861079, 0x0F860F79, 0x0F861179, 0x12851579, 0x13851079, 0x10851378, +0x12861179, 0x0F850D79, 0x0F851079, 0x11861378, 0x11860F79, 0x0F860F79, 0x0E850E79, 0x0F850F79, +0x11851279, 0x0E860F7A, 0x10851279, 0x11861178, 0x0F860F79, 0x11851279, 0x12860E79, 0x0F861278, +0x13861078, 0x12861478, 0x12861378, 0x11861278, 0x11851478, 0x13861178, 0x11860F79, 0x10861279, +0x13861379, 0x13851078, 0x0C860F78, 0x12851079, 0x0E860E7A, 0x0F860D7A, 0x0C86107A, 0x10860F79, +0x11861079, 0x10861279, 0x14851578, 0x15861579, 0x14851578, 0x15851877, 0x15861278, 0x12851079, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x87A9863A, 0x85A8853B, 0x83A7823C, 0x81A77F3E, +0x3E923761, 0x2E914860, 0x4895475A, 0x4895485A, 0x4895485A, 0x4795485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895475A, 0x4895485A, 0x4895485A, 0x4795485A, 0x4895485A, 0x4895485A, 0x4795485A, 0x4795475B, 0x4795485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4795485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895475A, 0x4895485A, 0x4795485A, 0x4895475A, @@ -1158,25 +1158,25 @@ const unsigned long bg[480*640]={ 0x4895485A, 0x4795475B, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895475A, 0x4895485A, 0x4895485A, 0x4895475A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4795475B, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895485A, 0x4895475A, 0x4895485A, 0x4895485A, -0x4895485A, 0x4895485A, 0x4895475A, 0x488F1E65, 0x248B286C, 0x53995455, 0x559A5554, 0x569A5754, -0x589B5853, 0x589B5952, 0x589C5952, 0x599C5A52, 0x599C5A52, 0x5A9B5B51, 0x5B9C5B51, 0x5A9C5A51, -0x5C9C5C51, 0x5C9C5B51, 0x5A9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5D9C5C51, 0x5B9C5C51, 0x5C9C5C51, -0x5B9C5A51, 0x5A9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B52, 0x5C9C5C52, 0x5C9C5C51, -0x5B9C5B52, 0x5B9C5B52, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5A9C5B51, 0x5C9C5B52, 0x5A9C5C51, -0x5C9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5D51, 0x5C9C5B51, 0x5C9C5A51, 0x5C9C5C51, -0x5C9C5C51, 0x5C9C5B51, 0x5A9C5C51, 0x5C9C5B51, 0x5A9C5B51, 0x5B9C5A52, 0x5B9C5B52, 0x5A9C5B51, -0x5C9C5C52, 0x5C9C5C51, 0x5C9C5C51, 0x5D9C5D51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5B52, 0x5A9C5B51, -0x5B9C5C52, 0x5B9C5A52, 0x5A9C5B52, 0x5B9C5B51, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5B52, 0x5B9C5B52, -0x5B9C5A52, 0x5A9C5952, 0x599C5952, 0x599C5A52, 0x5A9C5B52, 0x5B9C5B52, 0x5C9C5C52, 0x5C9C5B52, -0x5C9C5C52, 0x5B9C5B52, 0x5A9B5A51, 0x5B9C5B52, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A51, -0x5B9C5C52, 0x5C9C5B52, 0x5C9C5C52, 0x5C9C5C52, 0x5B9C5A52, 0x599C5952, 0x599C5852, 0x599C5A52, -0x5A9C5B52, 0x5B9C5B52, 0x5A9C5A52, 0x5A9C5C51, 0x5C9C5B52, 0x5A9C5951, 0x5A9C5B52, 0x5A9C5A51, -0x5A9C5B51, 0x5A9C5A51, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5B52, 0x5C9C5C52, 0x5C9C5B51, 0x5B9C5C52, -0x5B9C5A52, 0x5A9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B51, -0x5A9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x599B5952, -0x599C5A52, 0x5A9B5952, 0x5A9B5852, 0x569B5653, 0x569A5753, 0x579A5554, 0x559A5454, 0x52995156, -0x288B236D, 0x1E8F4965, 0x4996485A, 0x4896485B, 0x4896485B, 0x4896485B, 0x4996485A, 0x4996495A, +0x4895485A, 0x4895485A, 0x4895475A, 0x48912E60, 0x37923E61, 0x7FA7813E, 0x82A7833C, 0x85A8853B, +0x86A9873A, 0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0E851179, 0x10850E79, 0x0D850F79, 0x11851079, 0x0F850E79, 0x0D850E7A, 0x0E850F79, 0x10851079, +0x0F850E79, 0x0C850C7A, 0x0B860B7A, 0x0C860D7A, 0x0D850E7A, 0x0F851079, 0x12851279, 0x11851079, +0x1184127A, 0x10851079, 0x0E850F79, 0x0E850F79, 0x0F851179, 0x0F850F79, 0x0F851079, 0x0E850E79, +0x10851179, 0x11851079, 0x11851179, 0x1184127A, 0x10850E7A, 0x0B850A7B, 0x0A85097B, 0x0B850C7A, +0x0D850E7A, 0x10851079, 0x0E850C7A, 0x0E851279, 0x11851079, 0x0E850B79, 0x0C851079, 0x0F860D79, +0x0E850F79, 0x0E860E79, 0x10851279, 0x10850E7A, 0x0F850F79, 0x12851279, 0x11851179, 0x0F861279, +0x10850D79, 0x0F861079, 0x0F851079, 0x10850F79, 0x0E851079, 0x10851178, 0x10861079, 0x11861079, +0x0E851079, 0x10850F79, 0x10851079, 0x10850F79, 0x0F851079, 0x0F850F79, 0x10860F79, 0x0C850B7A, +0x0E860F79, 0x0F851079, 0x11840E7A, 0x0C850C7A, 0x0E851079, 0x10850E79, 0x10850E79, 0x0C850C7A, +0x0682057D, 0x058C496B, 0x4996485A, 0x4896485B, 0x4896485B, 0x4896485B, 0x4996485A, 0x4996495A, 0x4996485A, 0x4896485B, 0x4996485A, 0x4996495A, 0x4896495A, 0x4996485A, 0x4996485A, 0x4896485B, 0x4996495A, 0x4996485A, 0x4996485A, 0x4896495A, 0x4996495A, 0x4996485A, 0x4896495A, 0x4996485A, 0x4896485B, 0x4896485B, 0x4896485B, 0x4896485B, 0x4996495A, 0x4996485A, 0x4996495A, 0x4896485B, @@ -1198,25 +1198,25 @@ const unsigned long bg[480*640]={ 0x4996495A, 0x4896495A, 0x4896495A, 0x4996485A, 0x4896485B, 0x4896495A, 0x4896495A, 0x4896485B, 0x4896485B, 0x4996495A, 0x4896495A, 0x4996495A, 0x4996495A, 0x4896485B, 0x4896485B, 0x4996495A, 0x4996485A, 0x4896485B, 0x4996485A, 0x4996495A, 0x4896485B, 0x4896495A, 0x4896485B, 0x4896485B, -0x4896485B, 0x4996485A, 0x4896485B, 0x488F1E65, 0x238B286C, 0x52995355, 0x549A5654, 0x569A5754, -0x579B5753, 0x579B5853, 0x589C5952, 0x599C5A52, 0x5A9C5B52, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, -0x5A9C5A51, 0x5C9C5C51, 0x5D9C5D51, 0x5D9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9C5C51, 0x5C9D5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5D9C5C51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, -0x5A9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5B9C5C51, 0x5D9C5C51, 0x5B9C5B51, -0x5A9C5A51, 0x5A9C5952, 0x599C5952, 0x599C5952, 0x5B9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5A9C5C51, -0x5D9C5C51, 0x5D9C5D51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5E51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, -0x5C9C5C51, 0x5C9C5A51, 0x5B9C5C51, 0x5C9C5B52, 0x5C9C5B51, 0x5A9C5C52, 0x5B9C5B51, 0x5D9C5D51, -0x5D9C5D51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5B9C5B51, 0x5A9C5B51, 0x5B9C5D51, -0x5C9C5B51, 0x5A9C5B52, 0x5C9C5C52, 0x5C9C5B52, 0x5B9C5A51, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B52, -0x5C9C5C52, 0x5C9B5C51, 0x5C9C5C52, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5A51, 0x5B9C5C52, 0x5C9C5C52, -0x5C9B5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5C52, 0x5C9C5B51, 0x5B9C5C52, 0x5B9C5A52, 0x5A9B5C51, -0x5C9B5C51, 0x5B9C5C52, 0x5B9C5B52, 0x5A9C5952, 0x599C5A52, 0x5A9C5B52, 0x5B9C5B52, 0x5B9C5B51, -0x5B9C5B52, 0x5B9C5A51, 0x5B9C5C52, 0x5C9C5C52, 0x5B9C5A51, 0x5A9C5B52, 0x5C9C5B51, 0x5A9C5A51, -0x5B9C5A51, 0x5B9C5B52, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5B52, 0x5C9B5C51, 0x5C9B5C51, 0x5B9C5B51, -0x5C9C5B52, 0x5A9C5C51, 0x5B9C5B51, 0x5C9C5C52, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A51, 0x5A9B5B52, -0x5A9C5A52, 0x5B9B5A52, 0x599B5752, 0x579B5753, 0x579B5653, 0x569A5554, 0x54995255, 0x529A5156, -0x288B236D, 0x1E8F4965, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, +0x4896485B, 0x4996485A, 0x4896485B, 0x488C056C, 0x0682077C, 0x0F850F79, 0x0F861179, 0x11861179, +0x11861079, 0x0F861079, 0x10860E79, 0x0E860F79, 0x10871278, 0x11871078, 0x10861378, 0x13861278, +0x0F860E79, 0x13861578, 0x16851577, 0x16861578, 0x15861378, 0x13861378, 0x14861478, 0x14861277, +0x13861378, 0x12871277, 0x12871278, 0x13861478, 0x15851578, 0x10861378, 0x15861478, 0x13861079, +0x10861478, 0x14861478, 0x14861278, 0x10861179, 0x13861179, 0x11861478, 0x16861478, 0x10871178, +0x10870F78, 0x0D860C7A, 0x0B860B7A, 0x0B860C7A, 0x0F861378, 0x11861278, 0x13861279, 0x0E861478, +0x16861277, 0x15861578, 0x13871477, 0x11871477, 0x14861777, 0x13871278, 0x12871178, 0x14861378, +0x14861478, 0x14860F78, 0x12861478, 0x12860F79, 0x13861078, 0x0E861279, 0x11861079, 0x15861677, +0x15871577, 0x13861478, 0x13861278, 0x11861079, 0x11861279, 0x12861178, 0x10871278, 0x12861578, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8938, 0x88A9883A, 0x86A9863A, 0x85A8833B, 0x82A7813C, 0x7FA67F3E, +0x3D913662, 0x2E924960, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, @@ -1238,25 +1238,25 @@ const unsigned long bg[480*640]={ 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, 0x4996495A, -0x4996495A, 0x4996495A, 0x4996495A, 0x498F1E65, 0x238B286C, 0x52995355, 0x559A5554, 0x559B5553, -0x579B5753, 0x589B5853, 0x599B5A51, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5C51, -0x5D9C5E51, 0x5E9C5E51, 0x5D9C5C51, 0x5C9C5C51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5D51, 0x5D9C5C51, -0x5C9C5C51, 0x5C9D5C51, 0x5C9C5C51, 0x5C9C5D51, 0x5C9C5B51, 0x5C9C5D51, 0x5C9C5C51, 0x5B9C5C51, -0x5D9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5E9C5E51, 0x5C9C5C51, 0x5B9C5A51, -0x5A9C5A51, 0x5A9C5B51, 0x5A9C5A51, 0x5A9C5A52, 0x599C5A51, 0x5C9C5B51, 0x5C9C5C51, 0x5B9C5C51, -0x5D9D5C51, 0x5D9D5D51, 0x5C9D5D51, 0x5C9D5C51, 0x5D9C5E50, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5C51, -0x5C9C5C51, 0x5C9C5B51, 0x5C9C5C51, 0x5B9C5C51, 0x5B9C5B52, 0x5C9C5C51, 0x5C9C5D51, 0x5D9C5E51, -0x5C9C5D51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5C9C5C51, 0x5B9C5B51, -0x5B9C5A51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5C52, 0x5C9C5C51, 0x5C9C5B51, -0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5C52, 0x5B9C5B52, 0x5B9C5C52, -0x5C9C5C51, 0x5C9B5C51, 0x5B9C5C52, 0x5B9C5C52, 0x5C9C5B51, 0x5C9C5B51, 0x5A9C5B51, 0x5C9C5C51, -0x5C9C5C52, 0x5B9C5A52, 0x5A9C5B52, 0x5B9C5C52, 0x5C9C5B51, 0x5B9C5C51, 0x5C9C5B52, 0x5B9C5A52, -0x5A9C5A51, 0x5B9C5B51, 0x5C9C5C52, 0x5B9C5A51, 0x5A9C5B51, 0x5C9C5C51, 0x5B9C5A51, 0x5A9C5B52, -0x5A9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, -0x5C9C5B51, 0x5B9C5B51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, -0x5C9D5B51, 0x5B9C5B51, 0x5B9C5A51, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B51, -0x5B9C5B52, 0x5A9B5953, 0x589B5852, 0x599B5753, 0x569B5853, 0x559B5354, 0x539A5355, 0x52995256, -0x288B236D, 0x1E8F4A64, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, +0x4996495A, 0x4996495A, 0x4996495A, 0x49922E60, 0x36913D62, 0x7FA67F3E, 0x81A7823C, 0x83A8853B, +0x86A9863A, 0x88A9883A, 0x89AA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x11860F78, 0x12851478, 0x13851278, 0x10861079, 0x10860F79, 0x0E851179, 0x13851479, 0x13861179, +0x11861078, 0x0F860F79, 0x10861179, 0x11861078, 0x10861179, 0x12861279, 0x10861079, 0x10851279, +0x12851478, 0x13851279, 0x0F861279, 0x0F861279, 0x14851178, 0x13861078, 0x0E861178, 0x13861479, +0x12851279, 0x0F850E7A, 0x0D850F79, 0x10861279, 0x13861278, 0x12861378, 0x12851079, 0x0F860E7A, +0x0E860E79, 0x10861179, 0x11851279, 0x11861078, 0x0F861079, 0x12861478, 0x12860E78, 0x0D860F79, +0x0E861079, 0x10861378, 0x13861378, 0x10861079, 0x10861079, 0x0F861578, 0x14851278, 0x10861178, +0x13861078, 0x10861178, 0x14861078, 0x13851378, 0x12861278, 0x11861179, 0x11861179, 0x11871178, +0x12871278, 0x11871178, 0x11860E78, 0x0E860E79, 0x10860F79, 0x0F861079, 0x11861079, 0x11871179, +0x12861278, 0x11860F79, 0x0D850F79, 0x12861179, 0x0E861279, 0x0F850D79, 0x0D850E79, 0x0F850F79, +0x0782067C, 0x068B4A6B, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, @@ -1278,25 +1278,25 @@ const unsigned long bg[480*640]={ 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A964A59, -0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A8F1E64, 0x238B286C, 0x52995355, 0x549A5455, 0x559B5653, -0x589B5853, 0x589B5853, 0x599C5A52, 0x5B9C5C52, 0x5C9C5C52, 0x5C9C5C51, 0x5D9C5D51, 0x5E9C5D51, -0x5D9C5C51, 0x5C9C5B52, 0x5B9C5A51, 0x5A9C5A51, 0x5A9C5A51, 0x5B9C5B51, 0x5B9D5D51, 0x5D9C5C51, -0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5E9C5C51, 0x5C9D5D51, 0x5E9D5D51, 0x5C9C5C51, 0x5D9C5C51, -0x5C9C5C51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5E9C5E51, 0x5D9C5C51, 0x5B9D5B51, 0x5A9C5B51, -0x5B9C5A51, 0x5A9D5A51, 0x5B9D5B51, 0x5A9D5B51, 0x5A9C5A51, 0x5A9C5C51, 0x5C9C5D51, 0x5C9C5C51, -0x5D9D5C51, 0x5D9D5D51, 0x5D9D5D51, 0x5D9D5D50, 0x5E9C5D50, 0x5C9C5D51, 0x5B9C5C51, 0x5D9C5C51, -0x5C9C5C51, 0x5C9D5C51, 0x5C9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5D9D5D51, 0x5C9C5E51, 0x5D9D5D51, -0x5E9C5C50, 0x5C9C5D51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9D5C51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5C51, -0x5B9C5C51, 0x5C9C5D51, 0x5B9C5A51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, -0x5C9C5D51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, -0x5B9C5C51, 0x5D9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5D9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, -0x5C9C5B52, 0x5B9C5B52, 0x5B9C5A51, 0x5A9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A51, 0x5A9C5B51, -0x5B9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5D51, 0x5C9C5B51, 0x5A9C5A52, 0x5A9C5A51, -0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5C52, 0x5C9C5C51, 0x5B9C5C51, 0x5D9C5C51, 0x5B9C5B51, -0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5A9C5B51, 0x5B9C5B52, -0x5A9C5B51, 0x5B9C5B51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9B5C51, -0x5B9C5A52, 0x5A9C5952, 0x599C5952, 0x589B5753, 0x589B5653, 0x559A5454, 0x54995355, 0x52995156, -0x288B236D, 0x1E904B64, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, +0x4A964A59, 0x4A964A59, 0x4A964A59, 0x4A8C066B, 0x0782087C, 0x11861178, 0x11861078, 0x11871278, +0x13871378, 0x13871178, 0x11861278, 0x13861478, 0x14861477, 0x13871377, 0x15861677, 0x17861678, +0x16871378, 0x12861079, 0x10870F79, 0x0E870F79, 0x0E860E79, 0x11870F79, 0x10871678, 0x15871477, +0x14871377, 0x14871477, 0x14871377, 0x17861478, 0x12871578, 0x18871577, 0x14871278, 0x16861578, +0x14871278, 0x10871178, 0x11861079, 0x10861478, 0x18871777, 0x16871477, 0x12871078, 0x0E871179, +0x11871078, 0x10870F78, 0x11881178, 0x10871178, 0x0E870D79, 0x0E871378, 0x14861677, 0x12871478, +0x15871377, 0x16871677, 0x15871577, 0x15871576, 0x17871677, 0x14871677, 0x12861478, 0x15861578, +0x14871478, 0x13871377, 0x13871278, 0x11871379, 0x11871379, 0x16871677, 0x13871777, 0x16871577, +0x17871477, 0x14861678, 0x14861378, 0x14871377, 0x14881477, 0x14871377, 0x11871279, 0x14871478, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A8853A, 0x84A8833B, 0x82A7803D, 0x7FA67D3F, +0x3C913661, 0x2E924B60, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B58, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B58, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, @@ -1318,25 +1318,25 @@ const unsigned long bg[480*640]={ 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, 0x4B964B59, -0x4B964B59, 0x4B964B59, 0x4B964B58, 0x4B8F1E64, 0x238B286D, 0x529A5355, 0x549A5554, 0x569B5653, -0x579B5853, 0x589C5953, 0x5A9C5A52, 0x5C9C5C51, 0x5C9C5D51, 0x5E9C5E51, 0x5D9C5C51, 0x5C9C5B52, -0x5B9C5B51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5B9C5D51, 0x5D9D5E50, -0x5D9D5D51, 0x5C9C5D51, 0x5D9C5E51, 0x5D9C5C51, 0x5D9D5E50, 0x5D9D5C51, 0x5C9C5E51, 0x5D9D5D51, -0x5B9C5B51, 0x5C9C5B51, 0x5A9C5C51, 0x5E9C5F51, 0x5E9D5E51, 0x5C9C5B51, 0x5C9C5C51, 0x5B9D5B51, -0x5C9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5C9D5B51, 0x5A9C5A51, 0x5A9C5C51, 0x5D9C5E51, 0x5C9D5C51, -0x5D9D5C51, 0x5E9C5E50, 0x5D9D5D51, 0x5D9D5D50, 0x5E9D5D51, 0x5D9D5C51, 0x5C9C5C51, 0x5D9C5C51, -0x5D9D5D51, 0x5D9D5C51, 0x5C9C5B51, 0x5C9C5C51, 0x5B9C5F51, 0x5C9C5E50, 0x5E9D5F51, 0x5D9D5E51, -0x5C9C5E51, 0x5E9D5D51, 0x5E9D5D50, 0x5C9D5D51, 0x5D9D5C51, 0x5B9D5B51, 0x5C9C5E50, 0x5D9D5D51, -0x5C9C5C51, 0x5D9C5C51, 0x5B9C5B51, 0x5B9C5C51, 0x5D9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9D5B51, 0x5B9D5B51, 0x5C9D5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5B51, -0x5C9C5C51, 0x5D9C5C51, 0x5B9C5C51, 0x5B9C5D51, 0x5D9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, -0x5B9C5B51, 0x5C9C5B51, 0x5A9C5A51, 0x5A9C5A52, 0x5A9C5A51, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5B51, -0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5D9C5C51, 0x5A9D5A51, 0x5A9C5A51, 0x5B9C5B51, -0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B52, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5B52, 0x5C9C5D51, 0x5C9C5C51, -0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, -0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5A51, 0x5B9C5B51, 0x5C9C5B52, -0x5B9C5B52, 0x5A9C5B52, 0x599C5952, 0x599B5853, 0x569B5753, 0x569A5554, 0x54995355, 0x53995156, -0x288B236D, 0x1E904B64, 0x4C974C59, 0x4C974C59, 0x4C974B58, 0x4B974C58, 0x4B974C58, 0x4B974B58, +0x4B964B59, 0x4B964B59, 0x4B964B58, 0x4B922E60, 0x36913C61, 0x7DA67F3F, 0x80A7823D, 0x83A8843B, +0x85A8863A, 0x87A9883A, 0x89AA8A39, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x13861478, 0x16861378, 0x11871178, 0x10861378, 0x15861477, 0x12871178, 0x13861478, 0x14861377, +0x12871277, 0x12871278, 0x12871277, 0x12871477, 0x14861478, 0x14861478, 0x13861578, 0x14861178, +0x12861378, 0x16861578, 0x11861478, 0x11861678, 0x15861278, 0x11871278, 0x14861578, 0x15861178, +0x10861179, 0x13861178, 0x0F870E79, 0x0E860E7A, 0x0E860E79, 0x0F871178, 0x11861278, 0x11861179, +0x12861378, 0x13861278, 0x11871278, 0x13871378, 0x16871477, 0x10870D78, 0x0D870F79, 0x0F861179, +0x12871378, 0x14861478, 0x10861079, 0x13861478, 0x13871278, 0x12871079, 0x14861578, 0x15861378, +0x12871278, 0x12861378, 0x13861377, 0x12861378, 0x11871078, 0x12861379, 0x13861278, 0x11871178, +0x10871079, 0x10871178, 0x11871178, 0x11871278, 0x11871178, 0x11870F78, 0x10871179, 0x11861079, +0x11871178, 0x11861378, 0x11861178, 0x14871278, 0x0E861079, 0x11861078, 0x10861078, 0x11860F79, +0x0882077D, 0x068C4B6A, 0x4C974C59, 0x4C974C59, 0x4C974B58, 0x4B974C58, 0x4B974C58, 0x4B974B58, 0x4B974C58, 0x4C974C59, 0x4C974B58, 0x4B974C58, 0x4C974B58, 0x4C974C59, 0x4C974C59, 0x4B974C58, 0x4C974B58, 0x4B974C58, 0x4C974B58, 0x4C974C59, 0x4C974C59, 0x4B974B58, 0x4B974B58, 0x4C974C59, 0x4C974C59, 0x4B974C58, 0x4C974B58, 0x4C974C59, 0x4C974C59, 0x4B974C58, 0x4B974B58, 0x4C974C59, @@ -1358,25 +1358,25 @@ const unsigned long bg[480*640]={ 0x4B974B58, 0x4B974B58, 0x4C974C59, 0x4B974C58, 0x4B974B58, 0x4C974C59, 0x4B974B58, 0x4B974C58, 0x4B974C58, 0x4C974C59, 0x4B974C58, 0x4C974C59, 0x4B974C58, 0x4B974C58, 0x4C974C59, 0x4C974C59, 0x4C974B58, 0x4B974C58, 0x4B974C58, 0x4C974C59, 0x4C974C59, 0x4C974B58, 0x4B974C58, 0x4C974B58, -0x4C974C59, 0x4C974C59, 0x4B974C58, 0x4B901E64, 0x248B286D, 0x52995356, 0x549A5455, 0x559B5654, -0x579B5853, 0x599B5A52, 0x5B9C5B51, 0x5C9C5C51, 0x5D9B5D51, 0x5D9C5C51, 0x5B9C5B51, 0x5B9C5C51, -0x5D9D5D51, 0x5C9C5C51, 0x5B9C5C51, 0x5B9D5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5D51, 0x5E9D5E50, -0x5E9D5E50, 0x5D9D5D51, 0x5E9C5E51, 0x5C9D5E51, 0x5E9D5D50, 0x5C9D5C51, 0x5E9C5E51, 0x5D9D5B51, -0x5C9C5D51, 0x5B9C5A51, 0x5C9D5F50, 0x5F9D5E51, 0x5D9D5B51, 0x5C9C5D51, 0x5C9D5C51, 0x5D9D5E50, -0x5D9C5C51, 0x5C9C5C51, 0x5C9D5D51, 0x5D9D5D51, 0x5C9D5B51, 0x5A9D5B51, 0x5D9D5E51, 0x5E9D5D51, -0x5D9D5C51, 0x5E9D5E50, 0x5E9D5E50, 0x5D9D5E50, 0x5E9D5D51, 0x5E9D5C50, 0x5C9C5E51, 0x5E9D5D50, -0x5E9D5D51, 0x5E9D5C50, 0x5C9C5C51, 0x5D9D5C51, 0x5E9D5D51, 0x5E9D5F50, 0x609D5D50, 0x5E9D5C50, -0x5E9C5E51, 0x5E9D5E50, 0x5E9D5D50, 0x5D9D5C51, 0x5C9C5C51, 0x5D9D5E51, 0x5E9D5D51, 0x5D9D5E50, -0x5C9C5D51, 0x5C9C5B51, 0x5C9C5B51, 0x5C9C5D51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9C5C51, 0x5C9C5D51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9D5D51, 0x5D9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9C5B51, 0x5D9C5C51, 0x5B9C5C51, 0x5B9C5E51, 0x5C9C5B51, 0x5B9C5D51, 0x5D9C5C51, 0x5B9C5B52, -0x5C9C5C51, 0x5B9C5B52, 0x5A9C5A51, 0x5B9D5B52, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, -0x5C9D5C51, 0x5C9C5C51, 0x5C9C5D51, 0x5E9C5E50, 0x5C9C5A51, 0x5A9C5A51, 0x5B9C5B52, 0x5B9D5B51, -0x5C9C5D51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5C51, 0x5B9C5A51, 0x5C9C5C51, -0x5C9C5B51, 0x5B9D5B51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9D5B51, 0x5B9C5B51, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5A51, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5B9C5B51, 0x5B9C5A51, 0x5A9C5A52, 0x579C5753, 0x589B5753, 0x559A5454, 0x559A5355, 0x52995256, -0x288B236D, 0x1E904D64, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, +0x4C974C59, 0x4C974C59, 0x4B974C58, 0x4B8C066A, 0x0982087C, 0x11861278, 0x12871177, 0x11871178, +0x11861478, 0x15871577, 0x15881677, 0x17871777, 0x17871877, 0x15871378, 0x11871178, 0x11871478, +0x15871577, 0x14871378, 0x12871378, 0x12871278, 0x12871478, 0x13871478, 0x12871577, 0x18871976, +0x18871776, 0x16881677, 0x19871777, 0x14871877, 0x17881576, 0x13871378, 0x19861777, 0x15881277, +0x14871578, 0x11871078, 0x15871A77, 0x1A871977, 0x15881277, 0x14871677, 0x13881277, 0x16871777, +0x16871477, 0x14871478, 0x13871577, 0x16881577, 0x13881278, 0x10871278, 0x16871976, 0x17871577, +0x16881377, 0x17871777, 0x17881776, 0x15881776, 0x19881576, 0x17881377, 0x14871777, 0x17871677, +0x17881677, 0x17871477, 0x14871378, 0x15871278, 0x17871677, 0x18871A76, 0x1B881576, 0x18871577, +0x19871977, 0x18871776, 0x17881576, 0x16881477, 0x14871477, 0x15881877, 0x19871577, 0x17871777, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9863A, 0x86A8853A, 0x83A8823C, 0x81A77F3D, 0x7EA67D3F, +0x3C913562, 0x2D924D60, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, @@ -1398,25 +1398,25 @@ const unsigned long bg[480*640]={ 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, -0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D901E64, 0x248B286D, 0x529A5355, 0x539A5455, 0x559A5754, -0x589B5953, 0x5A9C5B52, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5B52, 0x5B9C5C51, 0x5C9D5D51, 0x5C9D5C51, -0x5C9D5C51, 0x5B9D5B51, 0x5C9D5C51, 0x5C9D5C51, 0x5D9D5C51, 0x5D9D5C51, 0x5C9D5C51, 0x5E9D5F50, -0x5F9D5E50, 0x5E9D5D50, 0x5F9C5D51, 0x5F9D5E50, 0x5E9D5D50, 0x5C9D5F51, 0x5E9C5D51, 0x5C9D5D51, -0x5D9D5B51, 0x5B9D5E51, 0x5F9D5F50, 0x5E9D5C51, 0x5D9D5E51, 0x5D9D5C51, 0x5D9D5E51, 0x5E9D5D51, -0x5D9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5E9D5C51, 0x5B9D5B51, 0x5D9D5E51, 0x5E9D5D51, -0x5D9D5C51, 0x5E9D5D51, 0x5E9D5D50, 0x5D9D5E50, 0x5E9D5E50, 0x5E9D5C50, 0x5C9D5F50, 0x5D9D5D51, -0x5E9D5E51, 0x5D9D5C51, 0x5C9C5D51, 0x5C9D5C51, 0x609D5E50, 0x5E9D5F50, 0x5F9D5E50, 0x5D9D5E51, -0x5F9D5E50, 0x5D9D5E50, 0x5E9D5D50, 0x5C9D5C51, 0x5D9D5F50, 0x5E9D5D51, 0x5D9D5E50, 0x5E9D5D50, -0x5C9C5E51, 0x5C9C5C51, 0x5B9C5C51, 0x5E9D5C51, 0x5C9D5D51, 0x5D9D5B51, 0x5C9D5D51, 0x5D9D5D51, -0x5D9C5C51, 0x5C9C5C51, 0x5D9D5D51, 0x5D9C5D51, 0x5D9D5C51, 0x5D9D5E50, 0x5D9C5C51, 0x5C9C5C51, -0x5C9C5B51, 0x5C9C5C51, 0x5B9C5D51, 0x5B9C5F51, 0x5C9C5B51, 0x5C9D5D51, 0x5C9C5C51, 0x5A9C5C51, -0x5C9D5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5B9C5C51, 0x5C9C5C51, 0x5D9D5E50, 0x5E9D5D50, 0x5C9C5C51, -0x5C9D5D51, 0x5E9D5E50, 0x5E9D5E51, 0x5E9C5C50, 0x5B9D5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9D5D51, -0x5D9C5D51, 0x5C9C5C51, 0x5D9C5C51, 0x5C9C5B51, 0x5B9D5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B51, -0x5C9C5C51, 0x5C9D5B51, 0x5B9D5B51, 0x5C9D5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5C9C5B51, -0x5B9C5B51, 0x5B9C5B51, 0x5A9D5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5D51, -0x5B9C5B51, 0x5B9C5B51, 0x5A9C5752, 0x599B5853, 0x579C5654, 0x559A5554, 0x549A5455, 0x53995155, -0x278B236C, 0x1D904D64, 0x4D984D58, 0x4D974D58, 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D974D58, +0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D922D60, 0x35913C62, 0x7DA67E3F, 0x7FA7813D, 0x82A8833C, +0x85A8863A, 0x86A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x14861877, 0x14871277, 0x12871478, 0x17871477, 0x14871577, 0x15871277, 0x13871577, 0x15871577, +0x15871477, 0x14871478, 0x15871578, 0x15871577, 0x16871477, 0x15871777, 0x15871477, 0x14871478, +0x13871278, 0x15861478, 0x12871577, 0x11861A77, 0x13871178, 0x13871677, 0x14861378, 0x0F871478, +0x13871178, 0x11871078, 0x11871378, 0x11871278, 0x14871477, 0x16871777, 0x17871677, 0x14871377, +0x13881577, 0x17871777, 0x18871877, 0x17871377, 0x11881178, 0x11871278, 0x12871377, 0x13871677, +0x15861678, 0x13871478, 0x15871477, 0x14871278, 0x12871278, 0x11871178, 0x12871378, 0x14871277, +0x14871478, 0x13871278, 0x12871278, 0x13881377, 0x13871378, 0x13871378, 0x13871277, 0x12871278, +0x12871278, 0x12871178, 0x10871078, 0x11871278, 0x13871378, 0x14871478, 0x14871478, 0x13871577, +0x13881277, 0x14871577, 0x12870F78, 0x13871278, 0x11871178, 0x11871178, 0x10871278, 0x13861178, +0x0783077C, 0x058C4D6A, 0x4D984D58, 0x4D974D58, 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D984D58, 0x4D974D58, 0x4D974D58, 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D974D58, @@ -1438,25 +1438,25 @@ const unsigned long bg[480*640]={ 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, 0x4D974D58, 0x4D984D58, 0x4D984D58, 0x4D984D58, -0x4D974D58, 0x4D984D58, 0x4D974D58, 0x4D901E64, 0x238B286C, 0x51995255, 0x53995654, 0x579A5753, -0x589B5953, 0x5A9C5B52, 0x5B9C5C52, 0x5B9C5B52, 0x5C9C5C51, 0x5E9C5D50, 0x5C9D5B51, 0x5B9D5B51, -0x5B9D5B51, 0x5B9D5B51, 0x5C9D5C51, 0x5D9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5D9D5C51, 0x5F9D5F50, -0x5F9D5E50, 0x5E9D5E50, 0x5F9C5E50, 0x609D5E50, 0x5F9D5D50, 0x5F9D5F51, 0x5E9D5D51, 0x5F9D5E50, -0x5B9D5B51, 0x5F9D5F50, 0x5F9D5E50, 0x5D9D5E51, 0x5E9D5C51, 0x5C9D5E51, 0x609D5E50, 0x5E9D5E50, -0x5E9D5E50, 0x5E9D5D50, 0x5D9D5D51, 0x5E9D5E51, 0x5E9D5D50, 0x5D9D5C51, 0x5E9D5F50, 0x5E9D5D51, -0x5D9D5D51, 0x5F9D5E50, 0x5E9D5D50, 0x5D9D5F50, 0x5F9D5E50, 0x5E9D5C50, 0x5D9D6050, 0x5E9D5E50, -0x609D5E50, 0x5D9D5D51, 0x5C9D5E51, 0x5D9D5D51, 0x5E9D5E51, 0x5E9D5D50, 0x5F9D5E50, 0x5F9C5F51, -0x5E9D5E50, 0x5E9D5E50, 0x5E9D5D50, 0x5E9D5F50, 0x5F9D5D50, 0x5E9D5E50, 0x5F9D5E50, 0x5D9D5C51, -0x5C9C5E51, 0x5C9D5C51, 0x5C9C5D51, 0x5D9D5D51, 0x5E9D5E50, 0x5C9D5E50, 0x5E9D5D50, 0x5D9D5D51, -0x5D9D5E50, 0x5E9D5E51, 0x5D9C5C51, 0x5D9D5D51, 0x5E9D5E50, 0x5D9D5D51, 0x5E9D5D50, 0x5C9C5C51, -0x5C9C5C51, 0x5C9D5D51, 0x5C9C5E50, 0x5B9D5F51, 0x5C9D5C51, 0x5D9D5D51, 0x5C9C5B51, 0x5C9C5C51, -0x5B9D5C51, 0x5B9D5C51, 0x5B9D5B51, 0x5C9D5D51, 0x5D9D5E50, 0x5E9D5E50, 0x5E9D5E50, 0x5E9D5E50, -0x5F9C6050, 0x5E9D5E51, 0x5E9D5D50, 0x5B9D5B51, 0x5B9D5B51, 0x5B9D5C51, 0x5D9D5C51, 0x5E9D5D50, -0x5D9C5C51, 0x5D9D5C51, 0x5D9D5B51, 0x5C9D5C51, 0x5C9C5C51, 0x5C9D5B51, 0x5B9D5A51, 0x5B9C5C51, -0x5C9D5D51, 0x5C9D5B51, 0x5B9D5C51, 0x5C9D5C51, 0x5B9D5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5C9D5C51, -0x5C9C5C51, 0x5C9D5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9D5C51, 0x5C9C5C51, 0x5C9D5D51, 0x5D9D5D51, -0x5B9C5C51, 0x5B9C5A52, 0x599C5952, 0x589C5853, 0x579B5753, 0x569B5654, 0x569A5354, 0x53995155, -0x288B236D, 0x1E904F63, 0x4E974F57, 0x4E974E57, 0x4F974E57, 0x4E974F57, 0x4E974E57, 0x4E974E57, +0x4D974D58, 0x4D984D58, 0x4D974D58, 0x4D8D076A, 0x0883097C, 0x11871178, 0x11861578, 0x16871577, +0x17881776, 0x16871777, 0x17871778, 0x14871378, 0x15881577, 0x17881577, 0x13881277, 0x12881078, +0x11881177, 0x12881277, 0x13881377, 0x15881677, 0x14881577, 0x16881577, 0x16881377, 0x19891A76, +0x1A881876, 0x17881876, 0x1A871876, 0x1B881876, 0x1A881676, 0x1B871B76, 0x18881677, 0x1A871776, +0x12881278, 0x19881A76, 0x1A881876, 0x15881977, 0x18881377, 0x14881977, 0x1B881976, 0x19881876, +0x17881776, 0x17881677, 0x15881677, 0x18881777, 0x17881677, 0x15881277, 0x17881976, 0x19871577, +0x16881476, 0x1A881876, 0x17891576, 0x16881975, 0x1A881975, 0x19881376, 0x16871B77, 0x17881877, +0x1B881976, 0x15881576, 0x14881777, 0x16881577, 0x19881976, 0x18881676, 0x19881876, 0x1A871B76, +0x18881876, 0x18891875, 0x17881576, 0x17881B76, 0x1A881676, 0x17881876, 0x1A881875, 0x16881477, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x81A77F3E, 0x7EA67C3F, +0x3C913562, 0x2D924F5F, 0x4E974F57, 0x4E974E57, 0x4F974E57, 0x4E974F57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974F57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974F57, 0x4F974E57, 0x4E974E57, 0x4E974F57, 0x4E974F57, 0x4F974E57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974F57, 0x4E974F57, 0x4E974E57, 0x4E974E57, 0x4F974E57, 0x4E974E57, @@ -1478,25 +1478,25 @@ const unsigned long bg[480*640]={ 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4F984F57, 0x4E974F57, 0x4E974F57, 0x4E974F57, 0x4F984F57, 0x4E974E57, 0x4F974E57, 0x4F974E57, 0x4E974F57, 0x4E974E57, 0x4E974E57, 0x4E974E57, 0x4E974F57, 0x4E974E57, 0x4E974F57, 0x4F974E57, 0x4F974E57, 0x4E974F57, 0x4E974E57, 0x4F974E57, -0x4F974E57, 0x4E974E57, 0x4E974F57, 0x4F901E63, 0x238B286C, 0x51995456, 0x569A5654, 0x589B5853, -0x589B5953, 0x5A9B5B52, 0x599C5B52, 0x5C9C5C52, 0x5C9C5C51, 0x5C9C5B51, 0x5B9D5C51, 0x5D9D5E50, -0x5E9D5D50, 0x5D9D5C51, 0x5C9D5C51, 0x5C9D5D51, 0x5D9D5C51, 0x5D9D5E50, 0x5D9D5C51, 0x5F9D5E50, -0x5F9D5E50, 0x5E9D5E50, 0x5E9D5F50, 0x609D5F50, 0x5E9D5E51, 0x609D5E50, 0x5E9D5F50, 0x5E9D5C51, -0x5C9D5E51, 0x5F9D5F50, 0x5F9D5E50, 0x609D5E50, 0x5C9D5D51, 0x609D5F50, 0x5E9D5D51, 0x5D9D5E50, -0x5E9D5D50, 0x5B9D5B51, 0x5C9D5C51, 0x5D9D5F50, 0x5E9D5E50, 0x5D9D5C51, 0x5E9D5F50, 0x5F9D5D51, -0x5E9D5D50, 0x5F9D5E50, 0x5E9D5E50, 0x5E9D5F50, 0x609D5E50, 0x5F9D5D50, 0x5E9D5F50, 0x5E9D5F50, -0x609D5F50, 0x5D9D5D51, 0x5D9D5E51, 0x5E9D5F50, 0x5D9D5D51, 0x5D9D5F50, 0x5E9D5E51, 0x5F9D5E50, -0x5E9D5F50, 0x5F9D5E50, 0x5D9D5E51, 0x5F9D5E50, 0x5D9D5E50, 0x5F9D6050, 0x5F9D5D50, 0x5D9D5E50, -0x5C9D5F50, 0x5D9D5C50, 0x5C9D5E51, 0x5D9D5E50, 0x5E9D5C51, 0x5E9D5E51, 0x5C9D5C51, 0x5C9D5C51, -0x5C9D5C51, 0x5C9D5C51, 0x5D9D5D51, 0x5C9C5C51, 0x5C9D5E51, 0x5E9D5D51, 0x5D9D5E51, 0x5C9D5C51, -0x5C9C5D51, 0x5C9D5E51, 0x5D9D5E51, 0x5C9C6050, 0x5C9D5C51, 0x5E9C5C51, 0x5B9D5B51, 0x5D9D5C51, -0x5C9D5B51, 0x5C9D5B51, 0x5C9D5E50, 0x5E9D5E51, 0x5F9D6050, 0x609D6050, 0x609D6050, 0x609D5F50, -0x5F9D5E50, 0x5E9D5C51, 0x5B9D5B51, 0x5B9D5C51, 0x5C9C5D51, 0x5E9D5E50, 0x5C9D5E51, 0x5E9D5E51, -0x5C9D5D51, 0x5E9D5D51, 0x5C9D5D51, 0x5E9D5E50, 0x5D9D5C51, 0x5B9D5B51, 0x5B9D5B51, 0x5B9D5B51, -0x5B9D5B51, 0x5B9D5B51, 0x5B9D5B51, 0x5B9D5B51, 0x5B9D5B51, 0x5B9D5B51, 0x5C9D5C51, 0x5D9D5D51, -0x5C9D5D51, 0x5D9D5D51, 0x5C9D5C51, 0x5C9C5C51, 0x5C9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5D9C5E50, -0x5B9C5B51, 0x5B9C5A51, 0x599C5852, 0x589C5952, 0x589B5653, 0x579B5654, 0x549A5455, 0x53995256, -0x288B246D, 0x1E905063, 0x50985057, 0x4F984F57, 0x50985057, 0x50985057, 0x50985057, 0x50985057, +0x4F974E57, 0x4E974E57, 0x4E974F57, 0x4F922D5F, 0x35913C62, 0x7CA67E3F, 0x7FA7813E, 0x82A7833C, +0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x15871A77, 0x15881476, 0x14871777, 0x16881777, 0x19871476, 0x17881877, 0x14881476, 0x14881477, +0x14881477, 0x12881377, 0x15881577, 0x14871478, 0x15871877, 0x18871577, 0x16871876, 0x14871578, +0x15871678, 0x14871877, 0x15871877, 0x13861B77, 0x14881377, 0x19871477, 0x12871278, 0x16881277, +0x13881277, 0x14881277, 0x14871777, 0x18871877, 0x1A881B76, 0x1C881C76, 0x1D871D76, 0x1C871B76, +0x1A871976, 0x17881477, 0x11881277, 0x12871378, 0x13881577, 0x18881776, 0x14881976, 0x17871877, +0x14881678, 0x18881677, 0x15881677, 0x17881777, 0x15881377, 0x11881178, 0x11881178, 0x10881177, +0x11881077, 0x11881177, 0x11881077, 0x12881177, 0x10881177, 0x10891177, 0x13881477, 0x15881577, +0x14881677, 0x16881577, 0x14881478, 0x15871478, 0x15871577, 0x16881677, 0x16881677, 0x16881776, +0x14881377, 0x12871377, 0x12881078, 0x10871478, 0x14871377, 0x14881377, 0x11871277, 0x13871478, +0x0983097C, 0x078D506A, 0x50985057, 0x4F984F57, 0x50985057, 0x50985057, 0x50985057, 0x50985057, 0x50985057, 0x4F984F57, 0x4F985057, 0x4F985057, 0x50985057, 0x50985057, 0x50984F57, 0x50985057, 0x50985057, 0x50984F57, 0x50985057, 0x50985057, 0x4F985057, 0x4F985057, 0x50985057, 0x50985057, 0x50985057, 0x50985057, 0x50985057, 0x50984F57, 0x50985057, 0x50985057, 0x50984F57, 0x50985057, @@ -1518,25 +1518,25 @@ const unsigned long bg[480*640]={ 0x50985057, 0x50985057, 0x50985057, 0x50985057, 0x50985057, 0x50984F57, 0x50984F57, 0x4F984F57, 0x50985057, 0x50984F57, 0x50985057, 0x50984F57, 0x50985057, 0x4F985057, 0x50985057, 0x50985057, 0x4F984F57, 0x50984F57, 0x4F985057, 0x4F984F57, 0x4F984F57, 0x4F985057, 0x50985057, 0x50984F57, -0x50985057, 0x50985057, 0x50985057, 0x50901E63, 0x238B286D, 0x529A5556, 0x559A5754, 0x599B5753, -0x589B5A53, 0x599C5B52, 0x5B9C5C51, 0x5C9D5C51, 0x5B9D5B51, 0x5C9D5C51, 0x5E9D5E50, 0x5E9D5F51, -0x5F9D5F51, 0x5F9D5F51, 0x5E9D5D51, 0x5C9D5C51, 0x5D9D5D51, 0x5D9D5E50, 0x5D9D5D51, 0x5F9D5E50, -0x609D5E50, 0x5E9D5E50, 0x5F9D6050, 0x5F9D6050, 0x5F9D6050, 0x609D5E50, 0x5F9D5F50, 0x5D9D5C51, -0x5E9D5F50, 0x609D5F50, 0x5F9D6050, 0x5F9D5D50, 0x5E9D6050, 0x5F9D5D50, 0x5C9D5E50, 0x5E9D5D50, -0x5C9D5C51, 0x5D9D5C51, 0x5C9D5C51, 0x5D9D5F50, 0x5F9D5F50, 0x5E9D5D50, 0x5E9D5F50, 0x5F9D5D51, -0x5E9D5E50, 0x609D5E50, 0x5F9D5F50, 0x5E9D6050, 0x609D5E50, 0x5E9D5E50, 0x5E9D5F50, 0x5E9D5F50, -0x5F9D6050, 0x5E9D5D50, 0x5E9D5E51, 0x5D9D5E51, 0x5E9D5E50, 0x5E9D5E51, 0x609D6050, 0x5F9D5F50, -0x5F9D5F4F, 0x5E9D5F50, 0x609D5E50, 0x5D9D5F50, 0x609D6050, 0x5F9D5E50, 0x5E9D5E50, 0x5F9D5F50, -0x5D9D5F50, 0x5E9D5C50, 0x5D9D5D51, 0x5E9D5E50, 0x5E9D5C50, 0x5F9D5D50, 0x5D9D5D51, 0x5D9D5E50, -0x5E9D5F51, 0x609D6050, 0x609D6050, 0x5E9D5D51, 0x5C9C5D51, 0x5E9D5E51, 0x5D9D5E50, 0x5D9D5C51, -0x5D9D5E51, 0x5C9D5F50, 0x5E9D5E50, 0x5C9C6050, 0x5C9D5C51, 0x5E9C5C50, 0x5B9D5D51, 0x5D9D5C51, -0x5C9D5C51, 0x5D9D5D51, 0x5E9D5E51, 0x5F9D6050, 0x609D6050, 0x619D6050, 0x5F9D5F51, 0x5F9D5F51, -0x5D9D5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5D9D5D51, 0x5D9D5E50, 0x5D9D5E50, 0x5E9D5E51, 0x5F9D5D51, -0x5E9D5F51, 0x5E9D5D51, 0x5E9D5E50, 0x5D9D5B51, 0x5B9D5C51, 0x5C9D5D51, 0x5E9D5F50, 0x609D6050, -0x609D6050, 0x609D6050, 0x609D6050, 0x5F9D5F51, 0x5E9D5E51, 0x5E9D5E51, 0x5E9D5E51, 0x5E9D5E51, -0x5D9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5C9D5D51, 0x5E9D5E50, 0x5E9D5E50, 0x5E9D5E50, 0x5C9D5C51, -0x5B9C5B51, 0x5B9C5A52, 0x599C5952, 0x5A9C5952, 0x589B5753, 0x569B5653, 0x559A5554, 0x54995355, -0x288B246C, 0x1E905063, 0x50985057, 0x50985057, 0x51985056, 0x50985156, 0x50985156, 0x50985057, +0x50985057, 0x50985057, 0x50985057, 0x508D0769, 0x0883087C, 0x13871878, 0x16881976, 0x1A881676, +0x16881777, 0x14881677, 0x18881977, 0x17891676, 0x14881276, 0x14891476, 0x17881977, 0x19881A77, +0x1B881A76, 0x1A881B76, 0x19881677, 0x13881377, 0x14891676, 0x15891776, 0x16891576, 0x1B891975, +0x1B881975, 0x17881976, 0x1A881C75, 0x1B881B76, 0x19881D75, 0x1B891776, 0x1A881A76, 0x16881377, +0x17891976, 0x1D891B75, 0x1B881D75, 0x19891576, 0x17881C76, 0x1A881676, 0x14891776, 0x17881577, +0x13881377, 0x16891476, 0x13891376, 0x16881A76, 0x1A881A76, 0x17891576, 0x17891A76, 0x1B881677, +0x17891876, 0x1D891875, 0x1A891A75, 0x18891E75, 0x1C891975, 0x18891776, 0x19881A76, 0x19891B75, +0x1B891B75, 0x17891676, 0x19881976, 0x16881977, 0x17891776, 0x19881976, 0x1C881C76, 0x1A891975, +0x1B891A74, 0x19891A75, 0x1B891776, 0x14891976, 0x1D891D74, 0x1A881776, 0x17891874, 0x1A891A75, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x80A77F3E, 0x7DA57B40, +0x3C913562, 0x2D92505F, 0x50985057, 0x50985057, 0x51985056, 0x50985156, 0x50985156, 0x50985057, 0x51985156, 0x50985156, 0x50985057, 0x50985057, 0x51985156, 0x50985057, 0x50985057, 0x51985056, 0x50985057, 0x51985056, 0x50985057, 0x51985156, 0x51985056, 0x51985056, 0x50985057, 0x50985156, 0x50985057, 0x50985057, 0x51985056, 0x50985156, 0x51985056, 0x51985056, 0x51985056, 0x50985057, @@ -1558,25 +1558,25 @@ const unsigned long bg[480*640]={ 0x51985056, 0x51985056, 0x51985056, 0x50985156, 0x50985156, 0x50985057, 0x50985057, 0x50985057, 0x51985056, 0x51985056, 0x51985056, 0x51985156, 0x50985057, 0x50985156, 0x50985057, 0x50985156, 0x50985057, 0x51985056, 0x50985057, 0x51985156, 0x50985156, 0x50985057, 0x50985057, 0x50985156, -0x50985156, 0x50985057, 0x51985056, 0x51901E63, 0x238B286D, 0x53995456, 0x569A5854, 0x599A5854, -0x589B5953, 0x5B9C5C52, 0x5D9C5C51, 0x5C9D5A51, 0x5B9D5C51, 0x5E9D5F50, 0x5E9D5E50, 0x5D9D5D51, -0x5D9D5C51, 0x5D9D5E50, 0x5F9D5F50, 0x5F9D5D50, 0x5B9D5D51, 0x5D9D5D51, 0x5E9D5E50, 0x5F9D5F50, -0x609D5F50, 0x5E9D6050, 0x609D6050, 0x609D6050, 0x5F9D6250, 0x5F9D5E50, 0x609D5E50, 0x5D9D5D51, -0x5F9D6050, 0x609D6050, 0x619D6050, 0x5C9D5E51, 0x609D5F50, 0x5E9D5E50, 0x5E9D5E50, 0x5D9D5C51, -0x5E9D5E50, 0x5F9D6050, 0x609D5D50, 0x5C9E5E51, 0x5F9D6050, 0x5E9D5D50, 0x5E9D6050, 0x609D5E50, -0x5E9D5F50, 0x609D5E50, 0x5F9D6050, 0x5F9D6150, 0x609D5F50, 0x5E9D5E50, 0x609D5F50, 0x5E9D6050, -0x609D6050, 0x5E9D5D50, 0x5E9E5E51, 0x5E9D5F51, 0x5E9D5E50, 0x5E9D6050, 0x609D6050, 0x5F9D6050, -0x609D5F50, 0x609D5F50, 0x5D9D5D51, 0x609D6150, 0x609D5E50, 0x5D9D5E50, 0x5F9D5F50, 0x5F9D5F50, -0x5D9D6050, 0x5E9D5C50, 0x5D9D5D51, 0x5F9D5F50, 0x5D9D5D51, 0x5E9D5D51, 0x5D9D5D51, 0x5F9D5F50, -0x5F9D5E50, 0x5E9D5E51, 0x5F9D6050, 0x609D5F50, 0x5F9D5C51, 0x5E9D5E51, 0x5D9D5D51, 0x5E9D5D50, -0x5D9D5E51, 0x5C9D5F50, 0x5E9D5F51, 0x5D9D6050, 0x5C9D5D51, 0x5E9D5C51, 0x5B9D5E50, 0x5C9D5D51, -0x5C9D5E50, 0x5E9D5E50, 0x5E9D5F50, 0x609D6050, 0x5F9D5F50, 0x5F9D5F50, 0x5E9D5D51, 0x5C9D5C51, -0x5D9D5E50, 0x5E9D5E51, 0x5E9D5D50, 0x5D9D5E50, 0x5D9D5E50, 0x5E9D5E50, 0x5E9D5F51, 0x5E9D5E51, -0x5E9D6050, 0x5E9D5E50, 0x5E9D5E50, 0x5C9D5C51, 0x5E9D5E50, 0x5F9D5F50, 0x5F9D5F50, 0x5F9D6050, -0x609D5F50, 0x609D6150, 0x619C6050, 0x5F9D5E50, 0x5C9D5C51, 0x5C9D5D51, 0x5E9D5E51, 0x5E9D5E51, -0x5E9D5E51, 0x5E9D5E50, 0x5E9D5D50, 0x5D9D5E50, 0x5D9D5D51, 0x5D9D5E50, 0x5D9D5C51, 0x5C9D5C51, -0x5C9D5B51, 0x5A9C5A52, 0x5B9C5B51, 0x599C5A52, 0x599B5853, 0x579A5753, 0x569A5554, 0x55995355, -0x288B236C, 0x1D905163, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, +0x50985156, 0x50985057, 0x51985056, 0x51922D5F, 0x35913C62, 0x7BA57D40, 0x7FA7803E, 0x82A7833C, +0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x15881C76, 0x18891276, 0x15881577, 0x19881A76, 0x16881676, 0x19881676, 0x15891676, 0x19881976, +0x1A881976, 0x19871976, 0x1A871D76, 0x1C881A76, 0x1A881277, 0x18881977, 0x16881676, 0x18881576, +0x16881877, 0x14881A76, 0x19871B76, 0x15871D76, 0x14881577, 0x18881577, 0x11881777, 0x14891576, +0x13891776, 0x17881777, 0x19881975, 0x1C881D75, 0x1A881A76, 0x1A881B76, 0x19881777, 0x14881277, +0x15881876, 0x18881877, 0x18881676, 0x16881776, 0x15891776, 0x19881776, 0x17881B76, 0x18881877, +0x18881D75, 0x18881776, 0x18881776, 0x14881377, 0x17881976, 0x1A891A75, 0x1A881B76, 0x1B871C76, +0x1D871B76, 0x1C871F76, 0x1E871D76, 0x1A881776, 0x15881578, 0x14881577, 0x17881777, 0x18881877, +0x18881877, 0x18881776, 0x17881677, 0x16891776, 0x16891676, 0x15891875, 0x15891476, 0x14891376, +0x14891476, 0x11881277, 0x16881776, 0x15891676, 0x16891576, 0x15881677, 0x17881677, 0x17881577, +0x0983077B, 0x068D5169, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, @@ -1598,25 +1598,25 @@ const unsigned long bg[480*640]={ 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, 0x51985156, -0x51985156, 0x51985156, 0x51985156, 0x51901E63, 0x238B286C, 0x53995555, 0x589A5754, 0x599B5853, -0x589C5A53, 0x5A9C5D52, 0x5C9C5B52, 0x599D5C51, 0x5D9D5E51, 0x5E9D5E50, 0x5D9D5E50, 0x5E9D5E50, -0x5E9E5E50, 0x5F9D5F50, 0x5F9D5F50, 0x5F9D6050, 0x5D9E5C51, 0x5E9D5D51, 0x5E9D5E50, 0x5E9D6050, -0x609D5F50, 0x5E9D6050, 0x619D6050, 0x5F9D6150, 0x619D6350, 0x5F9D6050, 0x609D5E50, 0x5C9E5E50, -0x5F9D614F, 0x609D6250, 0x619D5D50, 0x5F9D6050, 0x5F9D5E50, 0x5D9D5F50, 0x5F9D5E50, 0x5F9D6050, -0x609D6050, 0x5F9D5F50, 0x609D6050, 0x5C9D5E51, 0x5F9E6050, 0x5F9E5D50, 0x5E9E6050, 0x609D5D50, -0x5E9D5F50, 0x619D5F50, 0x609D6050, 0x609D6150, 0x609D6050, 0x5E9D5E50, 0x609D5F50, 0x5E9E6050, -0x619D6050, 0x5E9D5E51, 0x5F9D5F50, 0x5F9D6050, 0x609D5F51, 0x609D6150, 0x609D6050, 0x609E604F, -0x609D6150, 0x5F9D5D50, 0x5E9D6150, 0x619D5F50, 0x5E9D5F50, 0x609D6050, 0x5F9E5F50, 0x5F9E5F50, -0x5C9D5F50, 0x5F9D5C50, 0x5D9D5D51, 0x5E9D6050, 0x5D9D5D51, 0x5F9D5E50, 0x5D9D5F51, 0x609D5F50, -0x5E9D5E51, 0x5D9D5D51, 0x5C9D5D51, 0x609D6050, 0x5F9D5F50, 0x5C9C5E51, 0x5E9D5D50, 0x5F9D5E50, -0x5E9D5F50, 0x5D9D5F50, 0x5F9D6050, 0x5D9D6050, 0x5C9D5E50, 0x5E9D5C51, 0x5C9D5E51, 0x5D9D5E50, -0x5C9D5F50, 0x5E9D5E51, 0x5F9D6050, 0x609D5E50, 0x5F9D5E51, 0x5E9D5C51, 0x5C9D5D51, 0x5E9D5F50, -0x5E9D5F50, 0x5F9D5D50, 0x5E9D5F50, 0x5D9E5E50, 0x5E9D5F50, 0x5E9D5E50, 0x5F9D5F51, 0x609D5E50, -0x5F9D6050, 0x5F9D5E50, 0x5E9D5D50, 0x5D9D5E50, 0x609D6050, 0x5F9D5F50, 0x609D6050, 0x629D6250, -0x619D5F50, 0x5E9D5E50, 0x5E9D5E50, 0x5E9D5E50, 0x5E9D5F50, 0x5F9D5E50, 0x5F9D5F50, 0x5E9E5E50, -0x5E9D5F50, 0x5E9D5E51, 0x5E9D5F50, 0x5E9D5D50, 0x5D9E5D50, 0x5D9D5D51, 0x5D9E5C50, 0x5E9C5D50, -0x5C9D5B51, 0x5C9D5C51, 0x5B9D5B51, 0x5A9D5A52, 0x5A9B5753, 0x589B5854, 0x579A5554, 0x549A5355, -0x288B236C, 0x1E915163, 0x52995155, 0x52995155, 0x51995255, 0x51995156, 0x51995156, 0x51995255, +0x51985156, 0x51985156, 0x51985156, 0x518D0869, 0x08830A7C, 0x16881876, 0x1D881B76, 0x19881676, +0x15881877, 0x18881D76, 0x19891576, 0x12891676, 0x18891976, 0x188A1775, 0x15891775, 0x17891776, +0x188A1975, 0x1A891A75, 0x1B891A75, 0x1B891C75, 0x158A1476, 0x18891576, 0x18891875, 0x19891C75, +0x1D891B74, 0x17891B75, 0x1F881C75, 0x1A891E75, 0x1F892374, 0x1A891B75, 0x1C891775, 0x148A1875, +0x1A892074, 0x1C892174, 0x1E891575, 0x1B891C74, 0x1A891875, 0x16891A75, 0x1A891975, 0x1A891C75, +0x1C891D74, 0x1A891974, 0x1B891B74, 0x14891876, 0x1A891D75, 0x1A891675, 0x188A1D74, 0x1C891776, +0x17891B75, 0x1F891974, 0x1D891D75, 0x1B8A1E74, 0x1C8A1C74, 0x19891875, 0x1D891B74, 0x19891C75, +0x1E891B74, 0x18891976, 0x1B891A75, 0x1B881D76, 0x1E881A76, 0x1E882075, 0x1C891B74, 0x1E8A1D73, +0x1D892075, 0x1B891576, 0x188A1E74, 0x1F891A74, 0x17891A75, 0x1C8A1B74, 0x1A8A1A75, 0x1A8A1A74, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D93515F, 0x52995155, 0x52995155, 0x51995255, 0x51995156, 0x51995156, 0x51995255, 0x51995156, 0x51995156, 0x52995255, 0x52995255, 0x52995155, 0x52995155, 0x51995156, 0x52995155, 0x52995255, 0x52995155, 0x51995255, 0x51995255, 0x51995255, 0x52995155, 0x51995255, 0x51995156, 0x52995255, 0x52995255, 0x51995156, 0x51995156, 0x51995156, 0x52995255, 0x51995255, 0x51995255, @@ -1638,25 +1638,25 @@ const unsigned long bg[480*640]={ 0x51995156, 0x51995156, 0x52995155, 0x51995255, 0x51995156, 0x52995155, 0x51995156, 0x52995255, 0x51995156, 0x51995255, 0x51995255, 0x52995255, 0x51995255, 0x51995156, 0x51995156, 0x52995155, 0x51995156, 0x51995156, 0x52995255, 0x52995155, 0x52995155, 0x51995156, 0x51995255, 0x51995156, -0x52995155, 0x51995156, 0x52995255, 0x51911E63, 0x238B286C, 0x539A5655, 0x589A5854, 0x589B5753, -0x599B5A53, 0x5D9C5C52, 0x5A9D5A52, 0x5C9D5E51, 0x5D9D5D50, 0x5E9D5E50, 0x5F9D5F50, 0x5E9D5E50, -0x5E9D5E50, 0x5E9E5E51, 0x5F9D6050, 0x609D6050, 0x609D5D50, 0x5E9E5D51, 0x5F9D5E50, 0x5E9E6050, -0x619D6050, 0x5E9D5F50, 0x629D6150, 0x609D6150, 0x639D6350, 0x5F9D6150, 0x5F9D5E50, 0x5E9E5E50, -0x619D614F, 0x619D6250, 0x5E9D6050, 0x619D604F, 0x5E9E5E50, 0x5E9D6150, 0x609D6050, 0x5F9E5E50, -0x5E9D6050, 0x619D6050, 0x5F9E6050, 0x5E9D5E50, 0x5F9D6050, 0x609E5D50, 0x5E9D6150, 0x609D5D50, -0x5D9E5E50, 0x619D5F4F, 0x619D6150, 0x619E614F, 0x619D604F, 0x5F9D5E50, 0x619D5F50, 0x5E9E6050, -0x619D6050, 0x5E9D6050, 0x609E5F50, 0x609D5F50, 0x619D6250, 0x629D6150, 0x619D614F, 0x619D6150, -0x619D6050, 0x5E9D5F50, 0x619E614F, 0x5F9D5F50, 0x619D6150, 0x609D5F50, 0x5F9E5F4F, 0x5F9E5F4F, -0x5B9D5E51, 0x609D5D50, 0x5E9D5C50, 0x5F9D5F50, 0x5E9D5E50, 0x5F9D5E50, 0x5F9D6150, 0x609D5E50, -0x5E9D5D50, 0x5D9D5D50, 0x5E9D5D50, 0x5C9D6050, 0x609D6050, 0x5C9D5E51, 0x5F9D5D50, 0x5F9D5E50, -0x5F9D6050, 0x5E9D5F50, 0x5F9D6050, 0x5D9D6050, 0x5D9D5E50, 0x5F9D5C50, 0x5D9D5E50, 0x5E9D5E50, -0x5E9D5E50, 0x5F9D6050, 0x619D604F, 0x5F9D5F51, 0x5D9D5D51, 0x5E9D5F50, 0x609D5F50, 0x609D6050, -0x5E9D5E50, 0x609D5F50, 0x5E9E5E50, 0x5E9D5F50, 0x5F9D5E50, 0x5E9D5F50, 0x5E9D6050, 0x619D6050, -0x609D6050, 0x609D6050, 0x5E9D5E50, 0x5D9D5F51, 0x609D6050, 0x609D6050, 0x629C6250, 0x619D5F50, -0x5E9D5E50, 0x5E9D5F50, 0x609D6050, 0x609D6050, 0x609D6050, 0x609D5E50, 0x5F9D6050, 0x609D6050, -0x609E6050, 0x5F9E5F50, 0x5E9D5E50, 0x5E9E5E50, 0x5D9D5D51, 0x5E9D5E50, 0x5D9D5D50, 0x5E9D5C50, -0x5C9D5D51, 0x5D9D5D50, 0x5B9D5B51, 0x5B9C5A52, 0x5A9B5953, 0x599B5853, 0x569A5554, 0x54995355, -0x288B246C, 0x1E915362, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, +0x52995155, 0x51995156, 0x52995255, 0x51932D5F, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x10891977, 0x1D891575, 0x18881476, 0x1A891A75, 0x19891775, 0x1A891875, 0x1B881F75, 0x1C881975, +0x17891476, 0x15891676, 0x17891575, 0x13881D76, 0x1C891D75, 0x14881977, 0x1A881676, 0x1A891875, +0x1A881B76, 0x17891A75, 0x1A881C75, 0x16881E75, 0x15891975, 0x1A881277, 0x15891876, 0x178A1775, +0x17891875, 0x1A881B75, 0x20891C74, 0x1A881A77, 0x16891676, 0x17891B75, 0x1C891B75, 0x1C891C75, +0x18891876, 0x1B891A76, 0x188A1875, 0x18891A75, 0x1A891975, 0x19891A75, 0x19881D76, 0x1F881B76, +0x1C891B75, 0x1C881C75, 0x18891876, 0x15881B76, 0x1C891B74, 0x1B881D76, 0x21872375, 0x1E891A75, +0x17891776, 0x18891976, 0x1B881D75, 0x1B891C75, 0x1B891C75, 0x1B891974, 0x1A891B75, 0x1C881C76, +0x1D891C74, 0x1A8A1A75, 0x18891775, 0x18891875, 0x16891676, 0x178A1775, 0x15891676, 0x19891375, +0x14891776, 0x19891975, 0x178A1874, 0x19881876, 0x18881776, 0x19881A75, 0x18881776, 0x16871677, +0x0B830A7B, 0x088E5368, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995255, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, @@ -1678,25 +1678,25 @@ const unsigned long bg[480*640]={ 0x53995355, 0x53995355, 0x53995355, 0x53995255, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x52995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995355, 0x53995255, 0x53995355, -0x53995355, 0x53995355, 0x53995355, 0x53911E62, 0x238B296C, 0x549A5755, 0x589A5854, 0x579B5853, -0x599B5C52, 0x5D9C5A52, 0x5A9D5C52, 0x5E9D5D51, 0x5D9D5D50, 0x5F9D5F50, 0x5F9E5E50, 0x5F9E5F50, -0x609E6150, 0x619D6050, 0x609D5F50, 0x609D6150, 0x619D6050, 0x5E9E5E50, 0x5E9E5E50, 0x5E9E6050, -0x619E6050, 0x5E9E6050, 0x639D614F, 0x609E614F, 0x639E624F, 0x609E6250, 0x5E9E5E50, 0x5E9E5F4F, -0x619E614F, 0x639D6150, 0x5E9D6250, 0x619D5F50, 0x5F9E5E50, 0x609D6150, 0x609E5E50, 0x5E9D6250, -0x609D5E50, 0x609D6250, 0x609D614F, 0x5F9E5E50, 0x609E6050, 0x609E5E50, 0x5E9E614F, 0x609E5E50, -0x5E9E5E50, 0x609E5F50, 0x619D604F, 0x619E614F, 0x619E604F, 0x5F9E5E50, 0x619E5F50, 0x5E9E6150, -0x619D6150, 0x609D6050, 0x629D6150, 0x619E6050, 0x619D614F, 0x619E614F, 0x619E614F, 0x629D6150, -0x609D5D50, 0x5F9E614F, 0x619D5F50, 0x609D6150, 0x609E6050, 0x609E6050, 0x5F9E604F, 0x619D614F, -0x5B9D5D51, 0x619D5E50, 0x5E9D5C50, 0x5F9D6050, 0x5E9D5E50, 0x5F9D5F50, 0x5F9D6150, 0x609D5E50, -0x5E9D5C50, 0x5D9D5D51, 0x5D9D5D50, 0x5C9E5E50, 0x619D6050, 0x5E9D5E51, 0x609D5E50, 0x609D5F50, -0x609D6150, 0x5E9E5F50, 0x609D6050, 0x5D9D6150, 0x5D9D5F50, 0x5E9D5C51, 0x5E9D5E50, 0x5E9E5D50, -0x5F9D5E50, 0x609D6150, 0x619D5E50, 0x5F9D5E50, 0x5F9D6050, 0x619D6050, 0x5F9D6150, 0x5F9D5F50, -0x5F9D5F50, 0x5F9D5F50, 0x5E9E5F50, 0x5F9E6050, 0x5F9D5D50, 0x5F9D6050, 0x5F9D6050, 0x629D6250, -0x619D6050, 0x609D6050, 0x5F9D5E50, 0x5E9D6050, 0x5F9D6050, 0x619D6250, 0x629D6150, 0x5E9D5E50, -0x5D9D5F50, 0x609D6050, 0x609D6050, 0x5F9E5E50, 0x5E9D5F50, 0x609E6050, 0x609D6050, 0x609E5F50, -0x5E9E5E50, 0x5E9D5F50, 0x5F9D5E50, 0x5D9E5D50, 0x5E9E5E50, 0x5E9D5E50, 0x5F9D5E50, 0x5C9D5C50, -0x5D9D5F50, 0x5D9D5D50, 0x5D9D5C51, 0x5A9C5A52, 0x5A9B5A52, 0x599B5953, 0x579A5754, 0x569A5455, -0x298B246D, 0x1E915363, 0x54995355, 0x54995455, 0x54995455, 0x54995355, 0x54995355, 0x53995455, +0x53995355, 0x53995355, 0x53995355, 0x538E0768, 0x08830D7B, 0x16891F75, 0x1E881C75, 0x18891875, +0x18891D75, 0x1C891775, 0x148A1876, 0x1C891875, 0x168A1774, 0x1B8A1A75, 0x1A8A1875, 0x1A8A1A74, +0x1D8A1F73, 0x1E8A1C73, 0x1B891A75, 0x1D891E74, 0x1E891D74, 0x17891976, 0x188A1875, 0x198A1D74, +0x1F8A1D73, 0x198A1C75, 0x23892074, 0x1D8A2073, 0x26892273, 0x1D8A2174, 0x18891876, 0x198A1B74, +0x218A2073, 0x23891E73, 0x19892175, 0x1E8A1A74, 0x1A8A1875, 0x1C891E74, 0x1C8A1875, 0x19882076, +0x1D891976, 0x1B892175, 0x1B892074, 0x198A1775, 0x1C8A1D74, 0x1D8A1874, 0x198A2074, 0x1D891775, +0x178A1975, 0x1E8A1A74, 0x21891E74, 0x208A2073, 0x1F8B1C74, 0x1A8A1875, 0x1F8A1B74, 0x198A1F74, +0x1F8A1F73, 0x1C891C75, 0x218A1E74, 0x1F8A1D74, 0x1E8A2074, 0x1F8A2073, 0x208B2073, 0x20892074, +0x1C8A1675, 0x1B8B1F74, 0x1F8A1A74, 0x1B8A1F74, 0x1D8A1B74, 0x1B8A1B74, 0x1A8B1D73, 0x1F8A1E73, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D93535E, 0x54995355, 0x54995455, 0x54995455, 0x54995355, 0x54995355, 0x53995455, 0x54995455, 0x54995355, 0x54995455, 0x53995455, 0x54995455, 0x53995355, 0x53995455, 0x53995355, 0x54995355, 0x53995355, 0x54995355, 0x53995355, 0x53995455, 0x54995355, 0x54995355, 0x54995355, 0x53995355, 0x54995355, 0x53995355, 0x53995455, 0x54995455, 0x53995355, 0x54995455, 0x54995355, @@ -1718,25 +1718,25 @@ const unsigned long bg[480*640]={ 0x53995455, 0x54995355, 0x53995355, 0x54995455, 0x53995455, 0x54995355, 0x53995455, 0x54995455, 0x53995455, 0x54995355, 0x53995455, 0x53995355, 0x53995455, 0x53995455, 0x53995355, 0x54995355, 0x53995455, 0x54995355, 0x54995355, 0x54995455, 0x54995455, 0x54995455, 0x53995455, 0x53995455, -0x54995355, 0x53995455, 0x53995455, 0x54911E62, 0x238B296C, 0x559A5755, 0x589B5754, 0x589B5853, -0x5B9C5C51, 0x5C9C5952, 0x5B9D5E51, 0x5D9D5C50, 0x5D9D5E51, 0x5F9D6050, 0x5F9E6050, 0x619E6250, -0x629D6150, 0x609D6150, 0x609E6050, 0x5E9E6050, 0x609E6150, 0x5F9D5F50, 0x5E9E5F50, 0x5F9E6150, -0x619D614F, 0x5E9E6050, 0x639E624F, 0x609E624F, 0x649E624F, 0x619D624F, 0x5D9E5D50, 0x5F9D614F, -0x629E614F, 0x639E604F, 0x609E614F, 0x5F9E5F50, 0x5E9E5F50, 0x619D614F, 0x5F9D6050, 0x629D6150, -0x609D6150, 0x5E9D6350, 0x5F9D6250, 0x5F9E5E50, 0x609E604F, 0x609E5F4F, 0x5E9E614F, 0x609E5E50, -0x5F9E5F50, 0x609E5F4F, 0x629D6050, 0x619E614F, 0x629E604F, 0x609E5E50, 0x619E5F50, 0x609E614F, -0x619E624F, 0x609E6050, 0x629E624F, 0x619E614F, 0x619E614F, 0x619E624F, 0x619E614F, 0x629D6050, -0x5E9E5F4F, 0x609E6150, 0x609E6050, 0x619E6050, 0x609E6050, 0x619E604F, 0x619E614F, 0x5E9E5F4F, -0x5E9D5D50, 0x609D6050, 0x5D9E5D51, 0x5E9D6150, 0x5E9E5E50, 0x5F9D5F50, 0x619D6150, 0x609E5E50, -0x5D9D5D51, 0x5F9D604F, 0x5E9E5C50, 0x5D9D5D50, 0x629D6050, 0x609D5D50, 0x609D5F50, 0x5F9D6050, -0x619D6150, 0x5E9D6050, 0x609D6150, 0x5E9D6150, 0x5D9D5F50, 0x5F9D5C50, 0x5F9D5E50, 0x5E9E5E50, -0x609D5E50, 0x619D6150, 0x619D5E50, 0x5F9D6050, 0x619D6150, 0x5F9E6050, 0x609E5F50, 0x609D6050, -0x5F9D5F50, 0x619D6050, 0x5E9E6050, 0x609D5F50, 0x5F9D5E50, 0x5E9D5F50, 0x609D5F50, 0x609D6250, -0x639D6250, 0x609E6050, 0x609D5E50, 0x609D6150, 0x5F9D6150, 0x619D6250, 0x619D5F50, 0x5E9E5E50, -0x609D6150, 0x619D6050, 0x5E9E5E50, 0x5E9E6050, 0x619D6050, 0x609E5F50, 0x5E9E5E50, 0x5F9D6050, -0x5F9E5E50, 0x5E9D5D50, 0x5E9E5D50, 0x5E9E5E50, 0x5E9E5E50, 0x5E9E5F50, 0x5E9E5C50, 0x5D9D5F50, -0x5F9D5F50, 0x5E9D5E50, 0x5C9D5A51, 0x5A9C5C52, 0x5B9B5B52, 0x5A9B5A54, 0x579A5554, 0x54995355, -0x288B246C, 0x1E915462, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, +0x54995355, 0x53995455, 0x53995455, 0x54932D5E, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x17891576, 0x1C891B74, 0x16891676, 0x188A1E74, 0x198A1875, 0x198A1974, 0x1E891E75, 0x1C8A1975, +0x15891677, 0x1B891C74, 0x18891576, 0x15891676, 0x21891C74, 0x1C891676, 0x1C891A75, 0x1A891C75, +0x1F891F74, 0x198A1B74, 0x1D891F75, 0x18892075, 0x15891A75, 0x1A891376, 0x19891875, 0x188A1875, +0x1B891875, 0x1F891E74, 0x1E891875, 0x1B891B74, 0x1E891F74, 0x1A8A1D74, 0x1C8A1B74, 0x1D891C75, +0x1B891A75, 0x1E891C74, 0x198A1B74, 0x1C8A1A75, 0x1A891975, 0x178A1A75, 0x1B8A1A75, 0x1D882374, +0x24892174, 0x1C891D74, 0x1C891874, 0x1B891E74, 0x1A891E74, 0x20882274, 0x1E891974, 0x188A1975, +0x1C891E74, 0x1E891C75, 0x188A1775, 0x188A1C75, 0x1E8A1D74, 0x1C8A1A74, 0x188A1975, 0x1A891C74, +0x1B891875, 0x17891576, 0x178B1675, 0x188A1874, 0x188A1974, 0x198A1B75, 0x198A1376, 0x158A1B75, +0x1C8A1C74, 0x1B8B1B73, 0x19891676, 0x17891A75, 0x1B891E75, 0x1D871D76, 0x1B881777, 0x16881677, +0x0B830A7B, 0x088E5468, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, @@ -1758,25 +1758,25 @@ const unsigned long bg[480*640]={ 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5554, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x549A5454, 0x559A5454, 0x549A5454, -0x549A5454, 0x549A5454, 0x549A5454, 0x54911E62, 0x248C286C, 0x559A5755, 0x589B5754, 0x599B5953, -0x5C9C5C51, 0x5B9D5A52, 0x5C9D5E51, 0x5C9E5D50, 0x5F9D5F51, 0x609D6050, 0x619D6150, 0x609D6150, -0x609D6050, 0x609E6050, 0x609E5F50, 0x609D6050, 0x619D6150, 0x619E5E50, 0x5E9E5F4F, 0x5F9E604F, -0x629E614F, 0x5F9E6150, 0x649E624F, 0x609E624F, 0x649E614F, 0x629D614F, 0x5D9E5E50, 0x5F9E624F, -0x639D614F, 0x649E604F, 0x619E614F, 0x5F9E6050, 0x5F9E6150, 0x619E604F, 0x5F9E6150, 0x629D6250, -0x629D6350, 0x5F9E624F, 0x619E614F, 0x5F9E5E50, 0x609E614F, 0x619E604F, 0x609E624F, 0x609E5F50, -0x609E6050, 0x609E604F, 0x629D604F, 0x619E614F, 0x629E604F, 0x5F9D5F4F, 0x609E5F4F, 0x609E624F, -0x619E624F, 0x609E6150, 0x619E624F, 0x639E634F, 0x629E614F, 0x629E624F, 0x629E624F, 0x609E5E50, -0x5F9E604F, 0x609E604F, 0x609E6150, 0x5F9E604F, 0x619E614F, 0x619E634F, 0x619E6050, 0x619D634F, -0x5F9E5C50, 0x5E9D6150, 0x5E9E5E50, 0x5E9E6150, 0x5F9E5E50, 0x5F9E5F50, 0x629D6150, 0x609E5F50, -0x5D9D5E50, 0x5E9E5F50, 0x5E9E5E50, 0x5C9E5E50, 0x629D6050, 0x619D5D50, 0x609E6050, 0x609D6150, -0x619E614F, 0x5E9E5F4F, 0x619D6250, 0x5E9D6250, 0x5D9E6050, 0x609D5D50, 0x5F9E5E50, 0x609D5E50, -0x609D5E50, 0x619D6150, 0x609D5F50, 0x609E5F50, 0x619D604F, 0x609E604F, 0x609D6150, 0x609E6050, -0x5F9D5F50, 0x619E6150, 0x609E5F50, 0x609E5F50, 0x5F9D6050, 0x609D6050, 0x5F9E6050, 0x609D6050, -0x629D634F, 0x629D614F, 0x619D5F50, 0x609D614F, 0x5F9D624F, 0x629D6250, 0x609D5E50, 0x5F9D6050, -0x619D6250, 0x609E5E50, 0x5E9E6050, 0x619D6050, 0x5F9E5E50, 0x5E9E5F50, 0x609E6050, 0x609D5E50, -0x5D9E5E50, 0x5E9E5F50, 0x5E9E5F50, 0x5F9E5F4F, 0x5E9E6050, 0x609E5E50, 0x5C9E5E50, 0x609D6050, -0x609D5F50, 0x5F9D5D50, 0x5B9D5C51, 0x5C9C5D51, 0x5D9B5C52, 0x5B9B5954, 0x559B5454, 0x569A5555, -0x298B246C, 0x1F915561, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, +0x549A5454, 0x549A5454, 0x549A5454, 0x548E0768, 0x0A840C7B, 0x1D891F74, 0x1E891A75, 0x1C891B75, +0x1E8A1E73, 0x188A1776, 0x1B8A1D74, 0x178B1875, 0x1C8A1D74, 0x1D8B1C74, 0x1E8A1E74, 0x1D891E75, +0x1E8A1C75, 0x1C8A1D75, 0x1C8A1B74, 0x1B8A1C74, 0x1E891E75, 0x218A1874, 0x188A1B75, 0x1A8B1E73, +0x228A2073, 0x1A8B1E74, 0x288A2273, 0x1C8B2373, 0x278A2073, 0x218A2073, 0x168A1876, 0x198B2273, +0x248A2173, 0x278A1E74, 0x208A1F73, 0x1A8B1B74, 0x1B8B1F74, 0x218A1D73, 0x1A8A1F75, 0x228A2274, +0x208A2374, 0x1B8A2274, 0x1E8A2074, 0x198A1975, 0x1C8A1F74, 0x1E8B1C74, 0x1C8A2173, 0x1D8A1A74, +0x1B8B1C74, 0x1D8B1C74, 0x218A1D73, 0x218B2173, 0x238B1C73, 0x1B8A1A75, 0x1E8B1A73, 0x1D8A2374, +0x1F8A2373, 0x1D8A1E74, 0x208A2373, 0x258A2472, 0x238A2172, 0x238B2272, 0x228A2173, 0x1E8A1775, +0x1C8B1D73, 0x1E8B1B73, 0x1D8A1E74, 0x198B1B74, 0x1F8B1F73, 0x1F8B2472, 0x1F8A1D73, 0x218A2373, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D93555D, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, @@ -1798,25 +1798,25 @@ const unsigned long bg[480*640]={ 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x55911E61, 0x248C286C, 0x559A5755, 0x589B5754, 0x599B5A53, -0x5C9C5C52, 0x5A9D5B52, 0x5D9D5C51, 0x5C9E5D50, 0x619D5F50, 0x609D6150, 0x609E6150, 0x619E5F50, -0x5E9E5E51, 0x5E9E6150, 0x629D6050, 0x609E6050, 0x5F9D6150, 0x629E5E4F, 0x5F9E604F, 0x5F9E604F, -0x629E614F, 0x5F9E6150, 0x659D614F, 0x609E634F, 0x649E624F, 0x629E624F, 0x5D9E5E50, 0x5E9E624F, -0x629E624F, 0x659D624F, 0x619E614F, 0x5F9E6150, 0x5F9E614F, 0x619E604F, 0x609E6150, 0x619D6250, -0x629E614F, 0x5F9D6150, 0x629E604F, 0x5F9E5F4F, 0x609E624F, 0x609E604F, 0x609E624F, 0x609E5E50, -0x619E6050, 0x619E614F, 0x629E604F, 0x639E624F, 0x639E604F, 0x609E5E50, 0x619E604F, 0x619E6350, -0x619E644F, 0x619E5F4F, 0x629E6250, 0x629E634F, 0x629E624E, 0x619E624F, 0x629E614F, 0x5F9E604F, -0x609E624F, 0x609E614F, 0x609E604F, 0x619F614F, 0x619E624F, 0x619E614F, 0x629E634F, 0x629E5F4F, -0x609D5E50, 0x5C9E6050, 0x5F9E5F50, 0x5E9E6150, 0x619E5F50, 0x5E9E6050, 0x629D6250, 0x609E6050, -0x5D9E5E50, 0x5E9E5E50, 0x5E9E5F50, 0x5C9D6050, 0x619E604F, 0x619D5D50, 0x609E6050, 0x609D6150, -0x619E624F, 0x5E9E5F4F, 0x619D624F, 0x5F9D6250, 0x5E9E6050, 0x609E5E50, 0x5F9E5E50, 0x619D5F4F, -0x5F9E5F50, 0x619D6150, 0x609D6050, 0x609D6150, 0x609D614F, 0x619E5F4F, 0x609E6150, 0x619D6050, -0x609E6050, 0x609D6150, 0x619E624F, 0x629E6150, 0x619E6050, 0x609E6050, 0x609E6050, 0x609D6150, -0x609E614F, 0x639D634F, 0x629D6150, 0x609D614F, 0x609D6250, 0x639D614F, 0x5F9E5E50, 0x609D6150, -0x619D5F50, 0x5E9E5F4F, 0x619E614F, 0x609E5E50, 0x5E9E6050, 0x619E6150, 0x5F9E5D50, 0x5D9E5F50, -0x609E604F, 0x5F9E5F4F, 0x5F9E5F4F, 0x5F9E5F50, 0x609E5F50, 0x5E9E5D50, 0x5E9D6150, 0x619D6150, -0x609E604F, 0x5E9D5C51, 0x5C9C5D51, 0x5D9C5D51, 0x5D9B5C52, 0x599B5854, 0x589B5854, 0x569A5455, -0x288C246C, 0x1E915761, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, +0x559A5553, 0x559A5553, 0x559A5553, 0x55932D5D, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x1B8A1974, 0x148A1C75, 0x1A8A1B74, 0x198A1E74, 0x1F8A1B74, 0x188B1D74, 0x21892074, 0x1C891D74, +0x168A1875, 0x178B1774, 0x178A1A74, 0x158A1B75, 0x218A1C73, 0x1F891675, 0x1D8A1D74, 0x1C8A1F74, +0x218A2173, 0x198B1A74, 0x1F892274, 0x1A892174, 0x178A1B75, 0x1D891875, 0x1B8A1975, 0x1E8A1B74, +0x1B8A1A75, 0x1F8A1F74, 0x1C891D75, 0x1D891E74, 0x1B8A2173, 0x208A1A74, 0x1D8A1E74, 0x1E891D74, +0x1D8A1C75, 0x1B8A1E74, 0x218A2273, 0x228B1E73, 0x1E8B1C74, 0x1B8A1C74, 0x1D8A1C74, 0x1B8A1E74, +0x1D8A2074, 0x24892573, 0x22891F74, 0x1B8A2074, 0x1D8A2174, 0x24892074, 0x1A8A1975, 0x1D8A1E74, +0x1E8A1B75, 0x188B1A74, 0x208A1F73, 0x1B8A1874, 0x178A1C75, 0x1F8A1F74, 0x1B8A1675, 0x158B1975, +0x1D8B1C74, 0x1A8B1C73, 0x1B8B1973, 0x198B1974, 0x1D8B1B74, 0x178A1675, 0x188A1E74, 0x1F8B1E74, +0x1E8B1F72, 0x1B8A1676, 0x19891D75, 0x208A1D74, 0x20882075, 0x19891876, 0x1C891C75, 0x1A8A1975, +0x0C840A7A, 0x098E5767, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5753, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, @@ -1838,25 +1838,25 @@ const unsigned long bg[480*640]={ 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x57911E61, 0x258C286C, 0x559A5755, 0x589B5854, 0x5B9C5B53, -0x5D9C5B52, 0x5B9D5C51, 0x5D9D5C51, 0x5C9E5E50, 0x609E5F50, 0x619D6050, 0x629E614F, 0x619E604F, -0x619E6050, 0x609E5F50, 0x619E6150, 0x609E614F, 0x609E6050, 0x609E614F, 0x5F9E6050, 0x609E604F, -0x619E624F, 0x5F9E6150, 0x659E624F, 0x609E644F, 0x649E634F, 0x629E614F, 0x5E9E5F50, 0x5F9E624F, -0x639E624F, 0x659E624F, 0x619E604F, 0x609E614F, 0x609E614F, 0x619E604F, 0x619E614F, 0x629E6250, -0x619E614F, 0x619E6250, 0x639E614F, 0x5F9E604F, 0x619E624F, 0x609E614F, 0x619F624E, 0x609E5E50, -0x619E604F, 0x619E604F, 0x629E604E, 0x629E624E, 0x659E604E, 0x609E5F4F, 0x619E614F, 0x619E634F, -0x629E644F, 0x639E614F, 0x629E634F, 0x619E604F, 0x619E634F, 0x639E634F, 0x619E604F, 0x619E604F, -0x629E614F, 0x629E614F, 0x609E614F, 0x629F624F, 0x629E614F, 0x619E654F, 0x629E614F, 0x5D9F5C4F, -0x5F9E6050, 0x5D9E5D50, 0x609E5F4F, 0x5F9E6050, 0x619E5F4F, 0x5E9E5F4F, 0x619D6350, 0x609E6050, -0x619E5D50, 0x5E9E5E50, 0x5E9E5D50, 0x5D9E6150, 0x619E604F, 0x629D5E50, 0x619E604F, 0x609E614F, -0x629E624F, 0x5F9E5F4F, 0x619E624F, 0x5F9E6250, 0x5E9E6050, 0x629D5F50, 0x609E5F50, 0x619E604F, -0x5F9E6050, 0x629D6150, 0x609E6050, 0x619D6050, 0x609E624F, 0x629E604F, 0x619D6150, 0x619E614F, -0x619D6150, 0x619D6050, 0x609E6050, 0x609E6050, 0x609E604F, 0x619E634F, 0x639E624F, 0x619E614F, -0x609E624F, 0x619D6450, 0x639D6350, 0x609E614F, 0x619D634F, 0x639D614F, 0x5E9E5E50, 0x619E6150, -0x609E5E50, 0x5F9E624F, 0x619E6050, 0x5E9E5F50, 0x629D6250, 0x609E5E50, 0x5D9E6050, 0x609E5F4F, -0x609E604F, 0x609E5F4F, 0x5F9E5E4F, 0x5F9E6150, 0x5E9E5E50, 0x5D9E5E50, 0x619E614F, 0x619D604F, -0x619D5F4F, 0x5D9D5D51, 0x5E9D5E51, 0x5E9C5E52, 0x5D9C5A52, 0x5A9B5A53, 0x579B5654, 0x559A5355, -0x288B246C, 0x1E915761, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, +0x569A5653, 0x569A5653, 0x569A5653, 0x578E0767, 0x0C840C7B, 0x1D891F74, 0x1E891B74, 0x208A2173, +0x218B1B74, 0x198B1D74, 0x1C8B1974, 0x188B1C75, 0x1E8B1C73, 0x1F8A1E74, 0x228A2074, 0x1F8B1E74, +0x1E8A1E74, 0x1D8A1B75, 0x1F8A1E74, 0x1D8B1E74, 0x1D8A1C75, 0x1D8B1E74, 0x1B8B1C74, 0x1B8B1C74, +0x208B2272, 0x1B8B1E74, 0x298A2272, 0x1C8B2773, 0x278B2571, 0x228B2073, 0x198B1A75, 0x1A8B2173, +0x248B2372, 0x298A2273, 0x208B1D73, 0x1B8B1E74, 0x1D8B2173, 0x218A1C73, 0x208B1E74, 0x21892274, +0x208B1E74, 0x208A2174, 0x238B1E73, 0x1A8B1C74, 0x1E8B2273, 0x1D8B1E73, 0x1E8C2272, 0x1D8B1875, +0x218B1D73, 0x1F8B1D73, 0x228B1D72, 0x228B2372, 0x288C1C71, 0x1D8B1A74, 0x208B1F72, 0x1F8A2573, +0x238B2872, 0x248B1F73, 0x218A2473, 0x218B1D73, 0x208B2473, 0x258A2473, 0x1E8B1D73, 0x1F8C1C73, +0x218C1E73, 0x228B2073, 0x1C8C2073, 0x208C2172, 0x238B1F72, 0x218B2972, 0x238B1E73, 0x168C1374, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D93575D, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, @@ -1878,25 +1878,25 @@ const unsigned long bg[480*640]={ 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x57911E61, 0x258C286C, 0x569A5755, 0x589B5854, 0x5B9C5B53, -0x5D9C5B52, 0x5B9D5D51, 0x5B9D5D51, 0x5D9E6050, 0x609E6050, 0x619D6250, 0x629E604F, 0x609E604F, -0x619F614F, 0x629E614F, 0x609E6150, 0x619E614F, 0x619E604F, 0x609E624F, 0x609E604F, 0x619E604F, -0x609E624F, 0x609E604F, 0x639E634F, 0x619E634F, 0x659E644E, 0x629E624F, 0x609E5E4F, 0x609F624E, -0x639E624F, 0x659D634F, 0x629E614F, 0x609E614F, 0x619F624F, 0x629E5F4F, 0x619E624F, 0x639E6250, -0x629E6150, 0x609E634F, 0x629E614E, 0x609E614F, 0x619E624E, 0x619E614F, 0x629F634F, 0x619E5F50, -0x629E604F, 0x619E614F, 0x639E614F, 0x639F634F, 0x659E604E, 0x609E5F4F, 0x629F624F, 0x619E634F, -0x639E634F, 0x649E634F, 0x619E624F, 0x639E644F, 0x649E634F, 0x639E614F, 0x5F9E604F, 0x609E624E, -0x629E624F, 0x629F604F, 0x629F624F, 0x629E634F, 0x619E634F, 0x659E624F, 0x609F5C4F, 0x5D9F614F, -0x609E5F4F, 0x609E5D4F, 0x609E5F4F, 0x5F9E5E50, 0x619E614F, 0x5E9E5F4F, 0x609E624F, 0x639E6050, -0x609E5F4F, 0x5D9E5F50, 0x5E9E5E50, 0x619E624F, 0x609E614F, 0x609E5F50, 0x619E604F, 0x609E614F, -0x629E624F, 0x609E5F4F, 0x619E634F, 0x609E6250, 0x5F9E604F, 0x629E6050, 0x609E6050, 0x619E614F, -0x5F9E6050, 0x629E6150, 0x619E614F, 0x609E6050, 0x609E614F, 0x619E624F, 0x629E614F, 0x619E624F, -0x639D6350, 0x639D6350, 0x629E624F, 0x629E624F, 0x629E614F, 0x609E604F, 0x609E6050, 0x609E614F, -0x629E614F, 0x619E614F, 0x659D634F, 0x629E614F, 0x629E624F, 0x639E624F, 0x5E9E5F4F, 0x619E614F, -0x5F9E5F4F, 0x629E614F, 0x609E5E50, 0x619E624F, 0x629E6050, 0x5D9E5F4F, 0x619E614F, 0x619E614F, -0x609F604F, 0x619E5F4F, 0x5F9E604F, 0x619E5E4F, 0x5F9E5F4F, 0x5F9E5F4F, 0x629E614F, 0x619E624F, -0x619E5E50, 0x5D9D5F50, 0x609D6050, 0x5E9C5F52, 0x5B9C5A52, 0x5B9C5953, 0x579B5454, 0x559A5555, -0x298C246C, 0x1E925861, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, +0x579A5753, 0x579A5753, 0x579A5753, 0x57932D5D, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x1B8B1B74, 0x1C8C1475, 0x1D8B1B73, 0x1A8B1875, 0x1F8B1F73, 0x198B1974, 0x1D8B2273, 0x248A1C73, +0x1D8A1A74, 0x168B1A75, 0x198A1975, 0x1E8A2373, 0x1E8B2073, 0x1E8A1B75, 0x208A1D74, 0x1D8A1F73, +0x238A2373, 0x1C8B1A74, 0x208A2472, 0x1B8A2273, 0x1B8B1D74, 0x218A1C74, 0x1C8A1B74, 0x1F8B1E73, +0x1A8B1C74, 0x218A1F74, 0x1E8B2074, 0x1E8A1D75, 0x1E8B1F73, 0x218B2372, 0x228A2073, 0x1E8A2273, +0x24892373, 0x238A2473, 0x228A2373, 0x238A2373, 0x228A2073, 0x1E8B1D73, 0x1C8B1B74, 0x1D8B2073, +0x228A2073, 0x218B1F73, 0x298A2372, 0x238A1F73, 0x238A2273, 0x268A2173, 0x198B1B74, 0x1F8A1E73, +0x1A8B1974, 0x218B2073, 0x1C8B1874, 0x208A2373, 0x218A1C74, 0x168A1A75, 0x1F8B1E73, 0x1E8B2073, +0x1C8B1C73, 0x1E8C1A73, 0x1A8B1E74, 0x1F8B1874, 0x198B1A74, 0x1A8A1A75, 0x228A1E73, 0x208B2372, +0x1F8A1B74, 0x178A1E75, 0x228A2472, 0x20892174, 0x1B8A1B75, 0x1E8A1B75, 0x1A8A1675, 0x17891B75, +0x0D840A7A, 0x078F5867, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, @@ -1918,25 +1918,25 @@ const unsigned long bg[480*640]={ 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, -0x589B5852, 0x589B5852, 0x589B5852, 0x58921E61, 0x258C296B, 0x569A5755, 0x589B5854, 0x5C9C5B52, -0x5E9C5C52, 0x5C9D5C52, 0x5B9E5D51, 0x609D6150, 0x619E6150, 0x629D634F, 0x609E614F, 0x619E624F, -0x629F604F, 0x609F614F, 0x619E604F, 0x629E614F, 0x629E614F, 0x609E624F, 0x619E604F, 0x629F614F, -0x609F624F, 0x619E604F, 0x639E644F, 0x619F644F, 0x669E634E, 0x629E634F, 0x619E5F4F, 0x609E634E, -0x649E624F, 0x649E644E, 0x629E614F, 0x619E614F, 0x629F624F, 0x639F624F, 0x619E634F, 0x629E624F, -0x629E624F, 0x639F624E, 0x639E604F, 0x619E624F, 0x639E624F, 0x629F624F, 0x629E634E, 0x609E614F, -0x629E614F, 0x619F624F, 0x639E604E, 0x639F624E, 0x649F604E, 0x609E5F4F, 0x619F624E, 0x619E634F, -0x639E634E, 0x649F634E, 0x619E604F, 0x619F634F, 0x639E624F, 0x609F604F, 0x619E5F4F, 0x639E624F, -0x619E624F, 0x609F624F, 0x619F624E, 0x639E624F, 0x659E654F, 0x629F5F4F, 0x5C9F604F, 0x659D684E, -0x609E604F, 0x619E5F4F, 0x5E9E614F, 0x5F9E604F, 0x5F9E624F, 0x609E5E50, 0x609F614F, 0x639E624F, -0x609E614F, 0x619E614F, 0x639E634F, 0x629E614F, 0x619E624F, 0x619E6050, 0x619E604F, 0x609E614F, -0x629E634F, 0x619E604F, 0x619E634F, 0x609E6350, 0x609E614F, 0x619E604F, 0x609E604F, 0x619E624F, -0x5F9E604F, 0x619E624F, 0x619E624F, 0x609E5F50, 0x609E6050, 0x619E614F, 0x629E634F, 0x629E634F, -0x629D634F, 0x629E6250, 0x629D6250, 0x629D6350, 0x639E634F, 0x629E634F, 0x639D6350, 0x619E6050, -0x5F9E614F, 0x619E614F, 0x629E654F, 0x639E604F, 0x639E624F, 0x639E624F, 0x5F9E614F, 0x619E604F, -0x5F9E614F, 0x629E604F, 0x5E9E604F, 0x639E624F, 0x619E5E4F, 0x609E624F, 0x619E624F, 0x619E604F, -0x609F604F, 0x5F9E604F, 0x619E604F, 0x5E9E604F, 0x5F9E5F50, 0x5F9E624F, 0x619E624F, 0x619E624F, -0x5F9E5D50, 0x5E9D6150, 0x619D5E50, 0x5F9C5D51, 0x5B9C5C52, 0x589C5853, 0x569B5754, 0x579A5454, -0x288C246C, 0x1E925861, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, +0x589B5852, 0x589B5852, 0x589B5852, 0x588F0867, 0x0D840D7A, 0x1E891F74, 0x1E8A1C74, 0x248B2172, +0x238A1C73, 0x1C8B1C74, 0x188B1C74, 0x1F8B2273, 0x218B2073, 0x218B2673, 0x1D8C1E73, 0x1F8C2072, +0x208C1D73, 0x1D8C1F73, 0x1E8C1D73, 0x228B2173, 0x218B1E73, 0x1C8B2174, 0x1F8B1D74, 0x208C1E72, +0x1D8C2273, 0x1F8B1C73, 0x248B2872, 0x1E8C2672, 0x2B8B2671, 0x238B2373, 0x1E8C1B73, 0x1D8C2471, +0x278C2272, 0x288B2871, 0x218B1F73, 0x1F8B1F73, 0x218C2272, 0x238C2072, 0x1E8B2473, 0x228B2273, +0x228B2174, 0x238B2272, 0x248C1C73, 0x218B2073, 0x248C2171, 0x218C2172, 0x228C2571, 0x1D8B1E74, +0x238B1E73, 0x1F8C2173, 0x268C1E72, 0x248C2272, 0x288D1C71, 0x1C8C1B73, 0x208C2172, 0x1E8B2473, +0x268C2471, 0x278C2671, 0x208B1B73, 0x1E8B2373, 0x258B2272, 0x1C8C1D73, 0x1E8C1B73, 0x248C2272, +0x218B2173, 0x1D8D2072, 0x208D2372, 0x248C2272, 0x298B2971, 0x208D1972, 0x148D1B74, 0x288A2F71, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D94585D, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, @@ -1958,25 +1958,25 @@ const unsigned long bg[480*640]={ 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, -0x589B5852, 0x589B5852, 0x589B5852, 0x58921E61, 0x258C296C, 0x569B5954, 0x589C5953, 0x5D9C5C52, -0x5E9C5B52, 0x5D9D5B51, 0x5C9D5D50, 0x619E6150, 0x629D6150, 0x639E614F, 0x609F604F, 0x619F604F, -0x609F614F, 0x619F614E, 0x619F624F, 0x609E634F, 0x629F624E, 0x609E604F, 0x639F604F, 0x629F614E, -0x619E624F, 0x619E604F, 0x629E664F, 0x619E634F, 0x679E644E, 0x639E644F, 0x619E604F, 0x619E634E, -0x649F624E, 0x639E654E, 0x629E614F, 0x609F624F, 0x639F614F, 0x639E634F, 0x609F624F, 0x649E644F, -0x639F624E, 0x629F634E, 0x629E624F, 0x629E644F, 0x649E614E, 0x639E624F, 0x629F634E, 0x609E624F, -0x629E614F, 0x619F634E, 0x649E614E, 0x639F634E, 0x659F604E, 0x609E604E, 0x629F624E, 0x609E634F, -0x639F624F, 0x649E634E, 0x639F634E, 0x639E624F, 0x609F604F, 0x609F604F, 0x609F624F, 0x629F634E, -0x639F604E, 0x619F624E, 0x639E644E, 0x639E674E, 0x649E624F, 0x5F9F5D4F, 0x629E664F, 0x689D674E, -0x5E9E604F, 0x5F9E614F, 0x5E9E604F, 0x609E604F, 0x609E614F, 0x629E604F, 0x609E614F, 0x629E634F, -0x629E604F, 0x5F9E614F, 0x619E6150, 0x5F9E614F, 0x619E634F, 0x609E6050, 0x629E604F, 0x619E614F, -0x619E624F, 0x619E604F, 0x619E644F, 0x609E634F, 0x609E624F, 0x619E614F, 0x609E614F, 0x619E624E, -0x5F9E604F, 0x619E604F, 0x639F624F, 0x619E604F, 0x609E5F50, 0x609E6050, 0x619E624F, 0x629E624F, -0x629E614F, 0x619E604F, 0x619E604F, 0x609E604F, 0x609E6050, 0x5F9E5F50, 0x5F9E5F50, 0x619E614F, -0x619E604F, 0x619E614F, 0x639E634F, 0x639E624F, 0x629F634F, 0x639E634F, 0x609E624F, 0x619E5F4F, -0x5F9F624F, 0x619E604F, 0x5F9E634F, 0x639E624F, 0x5F9E604F, 0x629F624E, 0x629E624F, 0x609F604F, -0x619E604F, 0x609E634F, 0x619E5F4F, 0x609E604F, 0x609E5F4F, 0x629E624F, 0x639E614F, 0x639E614E, -0x5F9E5E50, 0x629E624F, 0x619D5E50, 0x5F9D5D52, 0x5C9D5A51, 0x599C5952, 0x589B5753, 0x579A5554, -0x288C246C, 0x1E925A61, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5A51, +0x589B5852, 0x589B5852, 0x589B5852, 0x58942D5D, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x198B1C74, 0x1A8C2073, 0x178C1B73, 0x1C8C1C73, 0x1C8B1E73, 0x228C1C73, 0x1B8B2073, 0x228B2572, +0x238B1D73, 0x1B8C1E73, 0x1E8B1E74, 0x1B8B1E74, 0x218B2572, 0x1D8A1D74, 0x218B1E73, 0x1E8B2072, +0x218B2373, 0x1E8C1D73, 0x208B2772, 0x1C8A2473, 0x1D8B2073, 0x218B1F73, 0x1C8B1F73, 0x1F8B2372, +0x1B8C1C74, 0x1E8B1D74, 0x238B2172, 0x1F8B1C74, 0x1C8B1B75, 0x1C8B1C74, 0x208B2273, 0x228B2273, +0x218B2074, 0x1F8B1E74, 0x1E8B1C74, 0x1D8B1C74, 0x1C8B1C75, 0x1B8B1B75, 0x1A8B1B75, 0x1F8A2074, +0x1F8B1D73, 0x1E8B2173, 0x248B2573, 0x248B2273, 0x218B2372, 0x258B2372, 0x1C8B2173, 0x218B1B74, +0x1A8D2172, 0x218B1C73, 0x1B8B2473, 0x258B2272, 0x1A8B1B74, 0x228C2172, 0x228C2172, 0x1C8C1C73, +0x1F8B1D73, 0x1D8C2473, 0x1E8B1A74, 0x1E8B1C73, 0x1D8B1A74, 0x218B2273, 0x238C1F72, 0x248C2171, +0x1C8B1B74, 0x248B2672, 0x248A2073, 0x218A1C74, 0x1F8B1974, 0x1B8B1B74, 0x1D8B1A74, 0x1C8A1A74, +0x0C840A7B, 0x098F5A67, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5A51, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x5A9B5951, 0x599B5951, 0x599B5951, 0x5A9B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x5A9B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x5A9B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, @@ -1998,25 +1998,25 @@ const unsigned long bg[480*640]={ 0x599B5A51, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5A51, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5A51, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5A51, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5A51, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, -0x599B5951, 0x599B5951, 0x599B5951, 0x59921E60, 0x258C2A6B, 0x579A5954, 0x589B5953, 0x5D9C5D52, -0x5D9C5C51, 0x5D9D5B51, 0x5D9E5E50, 0x609E6250, 0x629E6150, 0x639E604F, 0x609F604E, 0x619F624E, -0x639F644E, 0x649E624E, 0x619F624F, 0x629E624F, 0x639E634F, 0x629E6050, 0x639E614E, 0x629F624E, -0x629F604F, 0x629F604E, 0x619E654F, 0x629E624E, 0x669E664E, 0x639E644E, 0x619F614E, 0x609F634E, -0x639F634E, 0x649F654E, 0x639E634F, 0x629F604E, 0x629F624F, 0x629E644F, 0x659E634E, 0x619F634E, -0x649F644E, 0x639E634F, 0x619F624E, 0x639E654F, 0x639F614E, 0x639E614E, 0x639F634E, 0x619E624F, -0x619E624F, 0x619E634E, 0x649E614E, 0x639F634E, 0x669F604E, 0x619F614E, 0x639F644D, 0x609F624E, -0x629E634E, 0x629E634F, 0x639F624E, 0x619F614F, 0x619F614E, 0x619F604F, 0x619F624E, 0x649E654E, -0x619F614E, 0x639F634E, 0x649F644E, 0x679E654F, 0x629F604E, 0x609F644F, 0x669E674F, 0x649F604E, -0x609E604F, 0x609E614F, 0x619E5E4F, 0x609F604F, 0x619E604F, 0x629E624E, 0x609E614F, 0x619E634E, -0x639E644F, 0x629E604F, 0x609E604F, 0x619E624F, 0x649E624F, 0x619E604F, 0x629E614F, 0x629E614F, -0x629E634F, 0x619F604E, 0x629E654E, 0x619E624F, 0x609E624F, 0x629E614F, 0x619E614F, 0x619E634E, -0x609E614F, 0x619E614F, 0x629F624F, 0x629E624F, 0x609E5F4F, 0x5F9E5F4F, 0x609E614F, 0x629E614F, -0x619E614F, 0x619E614F, 0x619E614F, 0x619E614F, 0x629F624F, 0x639E634F, 0x639E624F, 0x609E6050, -0x609E614F, 0x629F604F, 0x629E634F, 0x659E634F, 0x619E644F, 0x649E634F, 0x619E614F, 0x629E604E, -0x609F624E, 0x619E604F, 0x619E634F, 0x639E614F, 0x5F9E624E, 0x629E634F, 0x639E614F, 0x619F624F, -0x619E614F, 0x649E624F, 0x5F9E624F, 0x609E604F, 0x619E604F, 0x639E624E, 0x639E624F, 0x639E614E, -0x5F9E6150, 0x639E634F, 0x5F9D5F50, 0x5E9D5D52, 0x5C9D5A52, 0x599C5A53, 0x589B5853, 0x569A5455, -0x288C246C, 0x1E925A60, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, +0x599B5951, 0x599B5951, 0x599B5951, 0x598F0966, 0x0E850F79, 0x208A2373, 0x208A1E73, 0x258C2472, +0x228B1C73, 0x1F8C1973, 0x1C8C1E73, 0x218C2373, 0x238B2073, 0x238D1D72, 0x1E8D1D72, 0x1F8D2172, +0x258C2871, 0x278C2371, 0x1E8C2172, 0x228C2173, 0x238C2472, 0x208B1E74, 0x248D1E72, 0x218C2272, +0x228C1E73, 0x228C1D72, 0x1F8C2A72, 0x228C2272, 0x2C8C2B70, 0x258C2871, 0x208D1F71, 0x1D8D2372, +0x258C2571, 0x288C2A70, 0x258B2373, 0x228C1E71, 0x228C2273, 0x208C2771, 0x2A8B2471, 0x218D2471, +0x278C2771, 0x258C2472, 0x208D2372, 0x238C2972, 0x268E2170, 0x258D2071, 0x258D2571, 0x1F8B2273, +0x1F8C2073, 0x208C2572, 0x278D1F71, 0x248D2371, 0x2B8E1E70, 0x1F8D1E72, 0x248D2671, 0x1C8D2272, +0x218C2472, 0x218C2472, 0x238D2271, 0x1F8D1F72, 0x208D1E72, 0x1F8D1C72, 0x208D2272, 0x258C2971, +0x1E8E2071, 0x238D2370, 0x288C2871, 0x2F8B2971, 0x228D1B72, 0x1D8C2672, 0x2C8B2F71, 0x288C1C72, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D945A5C, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, @@ -2038,25 +2038,25 @@ const unsigned long bg[480*640]={ 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, -0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A921E60, 0x258C2A6B, 0x579A5953, 0x589C5A53, 0x5C9D5E52, -0x5E9D5C51, 0x5D9D5B51, 0x5E9E5E50, 0x619E634F, 0x629E614F, 0x629E614F, 0x609F634E, 0x639F634E, -0x629F624E, 0x649E664E, 0x639F614E, 0x629E614E, 0x639E624F, 0x639E614F, 0x629F624F, 0x629F624E, -0x629F604E, 0x639F624E, 0x619E654E, 0x649F634F, 0x669F684E, 0x649F644E, 0x639F614E, 0x619F624F, -0x639F644E, 0x649F654E, 0x659E624E, 0x649E624E, 0x629E634F, 0x629F604F, 0x639E664E, 0x659E644F, -0x639E634E, 0x639F624E, 0x639F634E, 0x669E664E, 0x619F644E, 0x649F624E, 0x649F624E, 0x619E624E, -0x609F614F, 0x619E634E, 0x639E614E, 0x639F644E, 0x669F614E, 0x609F604E, 0x629F634E, 0x619F624E, -0x639E634E, 0x629F604F, 0x629F624F, 0x629F614E, 0x619F624E, 0x619F624F, 0x629F644E, 0x669E614E, -0x609F634E, 0x639F644E, 0x659E694E, 0x659F624E, 0x609F624F, 0x659E664E, 0x679E624E, 0x5D9F5B50, -0x629E614F, 0x609F5F4F, 0x629F5F4F, 0x5E9F614E, 0x619E614F, 0x609E634F, 0x629E604F, 0x619F624F, -0x629F634E, 0x659E654F, 0x649E644F, 0x649E654F, 0x649E614F, 0x609E614F, 0x629F604E, 0x629F624E, -0x639E644F, 0x619F604F, 0x629F644E, 0x619E624F, 0x619E624F, 0x629F624F, 0x619E614F, 0x629F634E, -0x619F624E, 0x619E614F, 0x619E634E, 0x629F624F, 0x639E634F, 0x639E624F, 0x629E624F, 0x629F624F, -0x629E624F, 0x629E634F, 0x639F634F, 0x639E644F, 0x649E644F, 0x649E654E, 0x659E654E, 0x659E644F, -0x629E614F, 0x619E624F, 0x619E624F, 0x649F644F, 0x639E644F, 0x649E644F, 0x619E624F, 0x639E604F, -0x619F624E, 0x619E604F, 0x639E644F, 0x639E604E, 0x619F634E, 0x629F634E, 0x629F614E, 0x629F634F, -0x619E624E, 0x649F5E4F, 0x629E624E, 0x629E624F, 0x609E624F, 0x639E644E, 0x639E634E, 0x639E614F, -0x5F9D634F, 0x639E624F, 0x5E9D6051, 0x5E9D5D51, 0x5C9D5B51, 0x5A9D5A53, 0x599B5753, 0x559B5355, -0x288C246C, 0x1E935B60, 0x5B9C5B51, 0x5B9C5C50, 0x5B9C5B51, 0x5C9C5B50, 0x5C9C5B50, 0x5B9C5B51, +0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A942D5C, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x218B1F73, 0x1D8D1A73, 0x208D1A72, 0x188D1F72, 0x208C1E73, 0x1D8C2473, 0x218C1C73, 0x1E8C2072, +0x228C2372, 0x298B2A71, 0x288B2672, 0x288B2972, 0x288B1F73, 0x1D8C1E73, 0x228C1D72, 0x228C2072, +0x248B2772, 0x1E8D1D72, 0x238C2771, 0x1E8C2273, 0x1F8B2073, 0x218B2173, 0x1F8C2073, 0x208D2371, +0x1F8C2272, 0x1E8C1F73, 0x1E8C2572, 0x208C2172, 0x248C2472, 0x248B2372, 0x228C2173, 0x208C2273, +0x218B2273, 0x228B2373, 0x238B2373, 0x248C2772, 0x278C2672, 0x278C2971, 0x298C2A71, 0x298B2871, +0x218B2074, 0x1F8C2073, 0x1E8C2272, 0x268C2672, 0x238C2771, 0x278B2672, 0x1E8C2173, 0x238C1C73, +0x1F8C2272, 0x208C1C73, 0x248B2772, 0x258C1D72, 0x1E8C2472, 0x228D2671, 0x218D1F72, 0x218C2372, +0x1F8C2372, 0x258C1973, 0x228C2272, 0x218B2273, 0x1D8B2173, 0x248C2771, 0x258C2470, 0x258C2072, +0x1B8C2473, 0x298B2772, 0x1E8B2474, 0x1F8C1F73, 0x1D8C1C72, 0x1C8C1F73, 0x1E8B1B74, 0x188A1676, +0x0B850A7A, 0x09905B66, 0x5B9C5B51, 0x5B9C5C50, 0x5B9C5B51, 0x5C9C5B50, 0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5C50, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C50, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5B51, @@ -2078,25 +2078,25 @@ const unsigned long bg[480*640]={ 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5C50, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C50, 0x5B9C5C50, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C50, 0x5C9C5B50, 0x5B9C5C50, 0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C50, 0x5B9C5C50, -0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5B921F60, 0x258C2A6B, 0x569B5B53, 0x599C5A53, 0x5D9D5E52, -0x5E9D5D51, 0x5D9D5C51, 0x5F9E5F50, 0x629E634F, 0x629E614F, 0x629F624F, 0x619F624E, 0x639F624E, -0x639F654E, 0x669E654D, 0x669E634E, 0x629F634E, 0x639E634F, 0x629E624E, 0x619F634E, 0x629F624E, -0x639F614E, 0x639F634E, 0x619F634E, 0x659F624E, 0x669E684E, 0x659F644E, 0x669F614E, 0x619F624E, -0x649F644E, 0x649F654E, 0x659F634E, 0x639E654F, 0x639F624E, 0x649F634F, 0x619F624E, 0x639F644E, -0x649F644E, 0x649F654E, 0x659F654E, 0x669F654E, 0x639F654E, 0x649F624E, 0x659F624E, 0x619E634E, -0x619F624F, 0x619E644E, 0x649F614E, 0x639F634E, 0x679F624E, 0x619F604E, 0x639F634E, 0x629F614E, -0x639F644E, 0x649F634E, 0x619F624F, 0x629F614F, 0x609F624F, 0x639F634E, 0x649F664E, 0x639F614E, -0x629F634E, 0x659E664E, 0x6A9E664E, 0x639F614E, 0x629F654E, 0x679E654E, 0x609F5D4F, 0x5D9F614F, -0x679E634F, 0x609F624F, 0x609F624E, 0x5E9F5F4F, 0x619E614E, 0x619E624F, 0x649F614E, 0x609F614F, -0x629E634F, 0x639F634E, 0x649E664F, 0x659E644F, 0x629E614F, 0x619E634E, 0x619F604E, 0x629F624E, -0x639E654F, 0x629F614E, 0x639E644E, 0x619F634F, 0x629E624F, 0x629F624E, 0x619E624F, 0x629F624E, -0x629F624E, 0x629E614E, 0x619E614F, 0x649F634E, 0x629F624F, 0x629F624F, 0x629F624F, 0x629F634E, -0x639F634E, 0x639F634E, 0x639F634E, 0x639E634E, 0x629F614E, 0x629F624E, 0x639E654E, 0x669F664E, -0x659F644E, 0x629F614F, 0x629F614E, 0x639E654E, 0x649E644F, 0x649E654E, 0x629F624F, 0x629F604E, -0x619F624E, 0x619E604F, 0x649F644F, 0x639F614F, 0x619F624E, 0x639F624E, 0x629F624E, 0x629F624E, -0x619F644E, 0x609F604F, 0x639F634E, 0x629E634F, 0x609E634F, 0x629F654E, 0x629F644D, 0x649E614F, -0x619E634F, 0x639E614F, 0x5F9D6050, 0x5E9D5E51, 0x5C9E5B51, 0x5A9C5A53, 0x599B5653, 0x559B5555, -0x298C256C, 0x20935C60, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, +0x5C9C5B50, 0x5B9C5B51, 0x5B9C5B51, 0x5B900A66, 0x0F851179, 0x1E8B2773, 0x228C2172, 0x258D2772, +0x258C1E72, 0x1E8D1C72, 0x218C2172, 0x258C2672, 0x248D2172, 0x228E2172, 0x1F8E2271, 0x268D2271, +0x248D2970, 0x2B8C2970, 0x2C8C2571, 0x228D2371, 0x258C2373, 0x238C2272, 0x1F8D2471, 0x228D2272, +0x248D1F71, 0x248D2371, 0x208E2471, 0x2B8C2271, 0x2B8C316F, 0x2A8D2870, 0x2C8D2070, 0x208D2172, +0x278E2670, 0x278D2A71, 0x288D2570, 0x258B2972, 0x258D2370, 0x258C2372, 0x208E2271, 0x258D2871, +0x278D2870, 0x288E2A6F, 0x288D2970, 0x2C8D2970, 0x258E2A70, 0x268E2270, 0x298D2070, 0x1F8C2672, +0x1F8D2172, 0x208D2771, 0x268D2171, 0x268D2571, 0x2D8E2370, 0x1F8E1D71, 0x248E2570, 0x228E2070, +0x268D2671, 0x268D2471, 0x1F8D2072, 0x208D1E72, 0x1D8D2073, 0x268D2571, 0x268D2C71, 0x258E2071, +0x238E246F, 0x2A8C2B70, 0x378B2B6F, 0x238E1E71, 0x238D2A71, 0x2D8B2A71, 0x1D8D1674, 0x168D1F74, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D945C5C, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, @@ -2118,25 +2118,25 @@ const unsigned long bg[480*640]={ 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, -0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C932060, 0x258C2A6B, 0x569B5B53, 0x599C5A53, 0x5D9D5E52, -0x5F9D5D51, 0x5D9D5D51, 0x5F9E6150, 0x629E634F, 0x639E624F, 0x629F614E, 0x619F614E, 0x649F624E, -0x649F654D, 0x649F664D, 0x669E674E, 0x629F624E, 0x639F644E, 0x639F644F, 0x619F644E, 0x629F634F, -0x639F624E, 0x639F634E, 0x629F614E, 0x659F644E, 0x659E694E, 0x689F654D, 0x679E634E, 0x619F614E, -0x639F654E, 0x659F644E, 0x659F654E, 0x649F644E, 0x669E654D, 0x629F634E, 0x649F634F, 0x629F634E, -0x659F664D, 0x669F644E, 0x669F664E, 0x669F644E, 0x669F664D, 0x639F624E, 0x659F624E, 0x629F644E, -0x629F634E, 0x639F654E, 0x649F624E, 0x639F634E, 0x679F624E, 0x61A0604E, 0x639F644D, 0x64A0614D, -0x649F644E, 0x639E644F, 0x639F624E, 0x629F634F, 0x649F654E, 0x649F634E, 0x669F644E, 0x629F634E, -0x639F664E, 0x669F6A4E, 0x679F634E, 0x629F634E, 0x669E664E, 0x659F614E, 0x5E9F624F, 0x629F5F4F, -0x699E664E, 0x629F614E, 0x629F614F, 0x619F5E4F, 0x609F614E, 0x629E624F, 0x629E654E, 0x619F604F, -0x609F624E, 0x629F654E, 0x649F624E, 0x629F624E, 0x619F614E, 0x639F624E, 0x619F614E, 0x649F624E, -0x639E654E, 0x629F624F, 0x629F654E, 0x619F634F, 0x639F624F, 0x629E634F, 0x629E634F, 0x629F634E, -0x619F614E, 0x649F614E, 0x619F614E, 0x619F634E, 0x649F644E, 0x649F634E, 0x629F614F, 0x619F624F, -0x629F624F, 0x629F624F, 0x629F624F, 0x629F624F, 0x629F614F, 0x619F614E, 0x619F614E, 0x629F634E, -0x659F654E, 0x659E634E, 0x619F624F, 0x629E654F, 0x669E644F, 0x659E654E, 0x629F624E, 0x629F614E, -0x619F624E, 0x629F604F, 0x649E644F, 0x639E614F, 0x619F624E, 0x649F624E, 0x629F634E, 0x639F624E, -0x619F644E, 0x5E9F624F, 0x649F624E, 0x639E634F, 0x609F644E, 0x629F664D, 0x639F644E, 0x649E604E, -0x629E644F, 0x639E604F, 0x619E6050, 0x5E9E5E51, 0x5C9E5B51, 0x5B9D5A53, 0x589C5654, 0x579B5754, -0x2A8C246C, 0x1F925C60, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, +0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C942D5C, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x348A2C70, 0x238D1E72, 0x208D1F72, 0x1E8D1972, 0x1D8E2072, 0x238B2073, 0x228C2872, 0x1F8D1C72, +0x1D8D2271, 0x238D2970, 0x268D2370, 0x228D2272, 0x208D1F71, 0x238D2371, 0x208D2071, 0x278C2271, +0x258C2872, 0x208D2171, 0x238D2871, 0x1E8C2473, 0x248C2172, 0x218D2571, 0x228C2573, 0x238D2471, +0x218D1F71, 0x278D1F71, 0x1F8D2072, 0x1E8D2472, 0x278C2671, 0x268D2472, 0x228C1E73, 0x1F8D2072, +0x218D2072, 0x218D2172, 0x208D2072, 0x218D2072, 0x208D1E72, 0x1F8D1F71, 0x1F8D1F71, 0x228D2671, +0x288D2871, 0x288C2371, 0x1F8D2072, 0x208C2A72, 0x2C8C2671, 0x288C2971, 0x228D2272, 0x238D1E72, +0x1E8D2371, 0x208C1D73, 0x268C2772, 0x238C1F72, 0x1F8D2371, 0x278D2371, 0x238D2470, 0x268D2271, +0x208D2771, 0x188D2273, 0x268D2371, 0x248B2572, 0x1D8C2773, 0x238D2B70, 0x258E2670, 0x268D1C72, +0x238C2A71, 0x298B2172, 0x248C2473, 0x208C2172, 0x1C8E1D72, 0x1F8C1F73, 0x1C8B1A75, 0x1D8C2072, +0x10850C7A, 0x0A905C66, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5D9C5C50, 0x5C9C5D50, 0x5C9C5C50, 0x5C9C5C50, 0x5D9C5C50, 0x5C9C5D50, 0x5C9C5C50, 0x5C9C5C50, 0x5D9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5D9C5C50, 0x5C9C5C50, 0x5C9C5D50, @@ -2158,25 +2158,25 @@ const unsigned long bg[480*640]={ 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5D50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5D9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5D50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5D9C5C50, 0x5C9C5C50, -0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C932060, 0x258C2A6B, 0x579B5B53, 0x5A9C5A53, 0x5C9D5E52, -0x5E9E5E51, 0x5E9E5D50, 0x609E6050, 0x629E634F, 0x639F624F, 0x639F624E, 0x629F614E, 0x65A0624D, -0x659F644D, 0x629F634E, 0x669F664D, 0x649F624E, 0x649E654E, 0x639F634E, 0x629F644E, 0x649F634E, -0x61A0624E, 0x629F644E, 0x62A0604F, 0x659F654E, 0x649F684D, 0x6A9F664D, 0x669F674E, 0x629F624E, -0x629F644E, 0x659F654D, 0x649F674E, 0x659F644D, 0x649F664E, 0x65A0644D, 0x639F654E, 0x649F634E, -0x639F634E, 0x639F654E, 0x659F654E, 0x649F654E, 0x669E674D, 0x639F634E, 0x639F624E, 0x649F644E, -0x629F634E, 0x649F664E, 0x639F634E, 0x639F644E, 0x689F634D, 0x639F604E, 0x639F634E, 0x65A0644D, -0x64A0624E, 0x639F644E, 0x649F644E, 0x659F664E, 0x659F654E, 0x639F654E, 0x65A0614D, 0x64A0634D, -0x649F664D, 0x6A9F684E, 0x649F634D, 0x659F664E, 0x679F654E, 0x619F624F, 0x639F614E, 0x5F9F614F, -0x659E694E, 0x649F624E, 0x619F614E, 0x629F604E, 0x5F9F614E, 0x629F634E, 0x629F634E, 0x649F604E, -0x5F9F5F4F, 0x619F624E, 0x629F634E, 0x639F624E, 0x619F624E, 0x639F614E, 0x609F644E, 0x659E624E, -0x639E654E, 0x629F624E, 0x639E654E, 0x609F634F, 0x639F624F, 0x639E654E, 0x639F634E, 0x639F644E, -0x629F614E, 0x639F634E, 0x629F624F, 0x639F624E, 0x619F624F, 0x639F624F, 0x629F624F, 0x639F644F, -0x659F644E, 0x649F644F, 0x649F644E, 0x649F644F, 0x649F644F, 0x639F624F, 0x629F624F, 0x619F614E, -0x619F634E, 0x649F664D, 0x639F624E, 0x619F644E, 0x679E644E, 0x649F664E, 0x639F634E, 0x639F614E, -0x619F624E, 0x629F604E, 0x649F644E, 0x629F614E, 0x619F634E, 0x659F634E, 0x629F644D, 0x649F634E, -0x629F634E, 0x5E9F624F, 0x659F624E, 0x629F644E, 0x629E654F, 0x629F654E, 0x639F654E, 0x639F5F4E, -0x629E654E, 0x639E5F4F, 0x619E5F50, 0x5F9D5E51, 0x5D9E5C51, 0x5C9D5B52, 0x589C5754, 0x579B5554, -0x298C246C, 0x20935D60, 0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5D9C5E4F, 0x5E9C5D4F, 0x5E9C5E4F, +0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C900B65, 0x0F851079, 0x208B2772, 0x238D2172, 0x248D2771, +0x248D2271, 0x208D1F71, 0x238D2371, 0x258D2671, 0x268D2372, 0x248E2270, 0x228F2070, 0x288E226F, +0x2A8E276F, 0x238E2470, 0x2B8D2B70, 0x278E2270, 0x278C2971, 0x258D2471, 0x208E2771, 0x278E2571, +0x218E2370, 0x228D2771, 0x218E1D71, 0x298D2970, 0x288D3070, 0x368D2B6E, 0x2C8D2D70, 0x228E2171, +0x238E2770, 0x288E296F, 0x288E2E70, 0x288E276F, 0x288D2C71, 0x288E266F, 0x258D2870, 0x258D2472, +0x258D2471, 0x258D2A70, 0x2A8E2A6F, 0x278F296F, 0x2B8D2D6F, 0x248F2570, 0x248D2272, 0x268D2870, +0x238E2571, 0x278D2D70, 0x258E2470, 0x248D2771, 0x308E2470, 0x248E1E71, 0x248E2471, 0x298F266F, +0x268E2170, 0x258D2671, 0x288D2871, 0x2A8D2B70, 0x298E2870, 0x268E2A6F, 0x288F2170, 0x278F256F, +0x278E2B6F, 0x348D306F, 0x288E256F, 0x298D2C70, 0x2E8E2970, 0x1F8D2072, 0x258D1E72, 0x1B8D1F73, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D945D5C, 0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5D9C5E4F, 0x5E9C5D4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5E9C5E4F, 0x5D9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5D9C5E4F, 0x5D9C5E4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5E9C5E4F, 0x5E9C5E4F, 0x5E9C5D4F, 0x5E9C5E4F, @@ -2198,25 +2198,25 @@ const unsigned long bg[480*640]={ 0x5D9C5E4F, 0x5E9C5E4F, 0x5E9C5D4F, 0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5D9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5E9C5D4F, 0x5E9C5D4F, 0x5D9C5D50, 0x5E9C5E4F, 0x5D9C5D50, 0x5E9C5D4F, 0x5E9C5E4F, 0x5E9C5D4F, 0x5D9C5D50, 0x5E9C5D4F, 0x5D9C5E4F, 0x5D9C5D50, 0x5E9C5E4F, 0x5E9C5D4F, 0x5E9C5E4F, -0x5D9C5D50, 0x5E9C5D4F, 0x5D9C5D50, 0x5D932060, 0x258C2A6B, 0x579C5B53, 0x5C9C5A53, 0x5B9D5E52, -0x5E9E5E51, 0x5F9E5E50, 0x609E614F, 0x619E634E, 0x639E624E, 0x639F634E, 0x62A0624E, 0x64A0654D, -0x659F634E, 0x619F624E, 0x649F654D, 0x669F624E, 0x649F644E, 0x649F624E, 0x639F624F, 0x659F634E, -0x629F634E, 0x629F634E, 0x639F614E, 0x639F654E, 0x649F674D, 0x6A9F684D, 0x659F674E, 0x65A0624D, -0x61A0644E, 0x65A0654D, 0x659F644E, 0x679F654E, 0x649F654E, 0x679E654E, 0x65A0654D, 0x659F644D, -0x63A0654D, 0x659F654E, 0x669F664D, 0x66A0664D, 0x679F674D, 0x639F654E, 0x629F614F, 0x659F654E, -0x63A0644D, 0x649F664E, 0x639F644D, 0x649F654E, 0x679F644D, 0x63A0624E, 0x60A0624E, 0x65A0664D, -0x65A0644D, 0x639F644E, 0x639F634E, 0x639F634E, 0x649F634E, 0x65A0644D, 0x63A0634E, 0x659F644D, -0x669F694D, 0x6A9F654D, 0x649F654E, 0x669F674D, 0x659F624E, 0x629F634E, 0x609F604E, 0x60A0604E, -0x639F674E, 0x689E644E, 0x629F614E, 0x619F624E, 0x609F604E, 0x639F644E, 0x649F624E, 0x629F654E, -0x619F5F4F, 0x5FA0614F, 0x639F634E, 0x629F624E, 0x629F624E, 0x619F614E, 0x629F664E, 0x659F634E, -0x649F654E, 0x629F634E, 0x649F664E, 0x609F644F, 0x649F624E, 0x649E654E, 0x659F634E, 0x639E654E, -0x639F624E, 0x629F644E, 0x629F624E, 0x629F634E, 0x639F634E, 0x639F624E, 0x619F604F, 0x609F604F, -0x629F614F, 0x629F634F, 0x639F624E, 0x629F634E, 0x639F634F, 0x629F624E, 0x629F624E, 0x629F624E, -0x639F614E, 0x629F644E, 0x669F634D, 0x629F614E, 0x659F654E, 0x649F664E, 0x649F634E, 0x629F624E, -0x60A0614E, 0x629F614E, 0x649E654E, 0x639F614E, 0x619F644E, 0x669F644E, 0x639F644D, 0x659F644E, -0x629F644E, 0x609F624F, 0x659F634E, 0x639F634E, 0x629F654E, 0x629F664D, 0x639F664D, 0x649E604F, -0x639F664E, 0x649E604F, 0x619E5F50, 0x5F9E5E50, 0x5D9D5D51, 0x5C9D5C52, 0x599C5753, 0x579C5754, -0x2A8C256B, 0x20935E5F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5F4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5F4F, +0x5D9C5D50, 0x5E9C5D4F, 0x5D9C5D50, 0x5D942D5C, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x268E2D70, 0x318C2770, 0x228E2071, 0x1F8E2271, 0x1D8E1C71, 0x248E2671, 0x258C2271, 0x238D2971, +0x1F8D1A72, 0x1A8E1F72, 0x248D2470, 0x228E2271, 0x238E2271, 0x218E1E71, 0x228D2B70, 0x288C2571, +0x288D2871, 0x228E2671, 0x268D2C70, 0x1D8D2672, 0x258D2372, 0x268D2970, 0x298D2470, 0x248D2871, +0x238E2270, 0x238D2770, 0x228E2271, 0x238D2670, 0x268E2670, 0x248D2271, 0x1F8D1D73, 0x1D8D1E74, +0x218D1F73, 0x218D2372, 0x258D2371, 0x228D2372, 0x238D2372, 0x228D2072, 0x228E2271, 0x238D2371, +0x248D1F71, 0x228D2770, 0x2C8E266F, 0x238E1F71, 0x2A8D2A70, 0x268D2C71, 0x288C2371, 0x238E2171, +0x1C8E2171, 0x238D1E71, 0x288C2971, 0x248D1F72, 0x1F8E2671, 0x2C8C2871, 0x258E2770, 0x298E276F, +0x238E2770, 0x1D8D2172, 0x298D2570, 0x258D2471, 0x218C2A72, 0x228D2B70, 0x268E2B6F, 0x278D1C72, +0x268D2E70, 0x2B8C2072, 0x258D2272, 0x238D2171, 0x1F8E2071, 0x238C2372, 0x1D8C1C73, 0x1C8C1F73, +0x10850F79, 0x0B905E65, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5F4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5F4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5F4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5F9D5E4F, 0x5E9D5E4F, @@ -2238,25 +2238,25 @@ const unsigned long bg[480*640]={ 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5F4F, 0x5E9D5F4F, 0x5E9D5E4F, 0x5E9D5E4F, -0x5E9D5E4F, 0x5F9D5E4F, 0x5E9D5E4F, 0x5E93205F, 0x258C2A6B, 0x579C5B53, 0x5C9C5B53, 0x5B9D5D51, -0x5E9E5F50, 0x609E6050, 0x609E624F, 0x629E634E, 0x639E624E, 0x649F634E, 0x62A0624E, 0x65A0664D, -0x669F654D, 0x629F624E, 0x62A0664D, 0x67A0654D, 0x64A0644E, 0x659F624E, 0x63A0614F, 0x65A0644E, -0x63A0644D, 0x62A0624E, 0x65A0634D, 0x619F654E, 0x649F654E, 0x689F6A4D, 0x679F664D, 0x689F654D, -0x619F614E, 0x65A0674D, 0x669F654D, 0x659F674E, 0x679F644E, 0x659F674D, 0x679F654E, 0x65A0654D, -0x65A0664D, 0x67A0674D, 0x65A0664D, 0x669F654D, 0x689F654D, 0x64A0654D, 0x629F624E, 0x669F644E, -0x65A0654D, 0x659F684D, 0x649F654D, 0x649F654E, 0x679F644E, 0x64A0634E, 0x629F644E, 0x63A0654D, -0x66A0654D, 0x64A0654D, 0x64A0634D, 0x63A0644E, 0x65A0664D, 0x64A0634D, 0x63A0654D, 0x659F674D, -0x699F6A4D, 0x66A0654D, 0x649F664D, 0x669F654D, 0x62A0644E, 0x639F604E, 0x61A0604E, 0x60A05F4E, -0x659F634E, 0x689E674E, 0x659F614E, 0x629F624E, 0x629F614E, 0x619F634E, 0x649E654E, 0x639F634E, -0x669F624E, 0x609F604E, 0x619F614E, 0x629F624E, 0x639F614E, 0x609F614E, 0x659F674E, 0x639F644E, -0x659F634E, 0x629F644E, 0x649F684D, 0x619F634E, 0x649F634E, 0x649F654E, 0x659F644E, 0x629F654E, -0x649F634E, 0x639F644E, 0x639F634E, 0x639F644E, 0x659F654E, 0x659F634E, 0x639F624E, 0x629F624E, -0x62A0624E, 0x629F624E, 0x629F624E, 0x629F624E, 0x639F624F, 0x639F624F, 0x629F624E, 0x62A0624E, -0x639F644E, 0x629F624E, 0x659F664D, 0x639F634E, 0x639F674E, 0x659F664E, 0x669F634E, 0x639F624E, -0x609F614E, 0x639F624E, 0x649F654E, 0x649F624E, 0x609F644D, 0x669F664E, 0x639F644D, 0x66A0664D, -0x63A0644D, 0x619F624E, 0x659F644E, 0x649F634E, 0x619F654E, 0x62A0664D, 0x649F664D, 0x659F604E, -0x649F674E, 0x659E604F, 0x619E5F50, 0x5F9E5F50, 0x5D9E5E50, 0x5D9D5B52, 0x599C5853, 0x579C5754, -0x2A8C256B, 0x1F935F5F, 0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, +0x5E9D5E4F, 0x5F9D5E4F, 0x5E9D5E4F, 0x5E900C65, 0x0E851179, 0x208C2871, 0x298D2271, 0x228E2571, +0x248D2671, 0x268D2471, 0x248E2670, 0x268E2871, 0x268D2471, 0x278F246F, 0x2290226F, 0x298F2D6E, +0x2B8E296F, 0x238E2272, 0x238E2B70, 0x2E8E296F, 0x278F286F, 0x2A8D2371, 0x248E1F72, 0x2A8F286F, +0x268E2670, 0x238E2271, 0x288F266F, 0x208F2A70, 0x288E2A70, 0x308E356E, 0x2E8E2C6F, 0x318F286F, +0x1F8F2071, 0x2A8F2E6F, 0x2C8F2A6E, 0x288E2E6F, 0x2E8E276F, 0x298E2E6F, 0x2F8F2A6F, 0x298F296E, +0x2A8F2B6E, 0x2D8F2D6F, 0x2A902B6E, 0x2C8F296F, 0x308E2A6F, 0x278F286F, 0x238D2172, 0x2C8E2770, +0x288F286F, 0x298D3070, 0x278F2A6E, 0x278E2A70, 0x2E8F276F, 0x278F256F, 0x238F2770, 0x248F2A6F, +0x2B90296D, 0x278F286F, 0x268F266F, 0x268F2770, 0x2A8F2B6E, 0x268F266F, 0x2490296E, 0x288F2F6F, +0x318D356F, 0x2B8F2A6F, 0x288E2B6F, 0x2C8E286F, 0x238F2870, 0x258E1E71, 0x208F1D71, 0x1B901B71, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D955F5B, 0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, @@ -2278,25 +2278,25 @@ const unsigned long bg[480*640]={ 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, -0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F93205F, 0x258C2B6B, 0x589C5B53, 0x5D9C5C53, 0x5B9E5C51, -0x5F9E6050, 0x619E6050, 0x609F634F, 0x629F634E, 0x639F624F, 0x649F634E, 0x62A0634D, 0x67A0664D, -0x679F664E, 0x669F654E, 0x629F634E, 0x679F684D, 0x63A0654D, 0x659F654E, 0x629F614F, 0x63A0664D, -0x659F634E, 0x63A0624E, 0x649F654E, 0x62A0654D, 0x65A0644E, 0x669F6A4D, 0x6A9F674D, 0x689F684D, -0x64A0604D, 0x629F674E, 0x67A0664D, 0x659F654D, 0x689F6A4D, 0x679F654E, 0x65A0674D, 0x67A0674D, -0x66A0654D, 0x66A0654D, 0x659F654E, 0x649F674E, 0x67A0664D, 0x66A0644D, 0x649F644E, 0x66A0634D, -0x65A0654D, 0x679F694D, 0x65A0664D, 0x659F654D, 0x679F644E, 0x63A0634E, 0x659F654D, 0x62A0644E, -0x66A0664D, 0x66A0674C, 0x67A0674D, 0x67A0664C, 0x66A0654D, 0x64A0624E, 0x65A0644D, 0x689F684D, -0x6B9F674D, 0x66A0664D, 0x67A0654D, 0x65A0634D, 0x659F644E, 0x61A0604E, 0x5FA0604F, 0x62A0664E, -0x669F644E, 0x659F684D, 0x669F644E, 0x619F634E, 0x639F634E, 0x639F614E, 0x649F654D, 0x669F654E, -0x639F674D, 0x649F614E, 0x619F624E, 0x62A0624F, 0x619F614E, 0x639F664E, 0x669F664D, 0x639E674E, -0x669F634D, 0x639F644E, 0x659F684D, 0x629F644E, 0x649F634E, 0x649F664E, 0x679F654D, 0x639F654E, -0x669F634E, 0x639F634E, 0x649F634E, 0x629F624E, 0x629F624E, 0x639F634E, 0x649F634E, 0x649F644E, -0x649F644E, 0x639F624E, 0x629F614E, 0x62A0624E, 0x629F624E, 0x619F614E, 0x629F644E, 0x649F624E, -0x639F654E, 0x639F624E, 0x62A0644D, 0x66A0624D, 0x619F674E, 0x679F664E, 0x699F654E, 0x639F624E, -0x609F614E, 0x639F624E, 0x639F654E, 0x659F634E, 0x609F634E, 0x669F674D, 0x659F634E, 0x67A0674D, -0x64A0644D, 0x629F624E, 0x669F654D, 0x639F634E, 0x629F654E, 0x62A0674D, 0x65A0674D, 0x669F614E, -0x659F674E, 0x659E604E, 0x619E604F, 0x5F9E5F50, 0x5E9E5E50, 0x5D9D5A52, 0x5A9C5853, 0x589C5954, -0x298C246B, 0x1F93605F, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, +0x5F9D5F4E, 0x5F9D5F4F, 0x5F9D5F4E, 0x5F952D5B, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x2C8D276F, 0x288D306F, 0x2B8E276F, 0x1F8E2471, 0x258E246F, 0x248F1F70, 0x268E2A6F, 0x2C8D296F, +0x258E2D70, 0x288E2070, 0x218E2371, 0x218E2171, 0x208E2072, 0x268D2B70, 0x2C8D2C6F, 0x268C2E71, +0x2C8F256F, 0x268E2870, 0x288D316F, 0x208E2871, 0x288E2471, 0x278D2C70, 0x2D8D286F, 0x258E2970, +0x2C8E2570, 0x258F2470, 0x278F2670, 0x228E2270, 0x228E2271, 0x248D2671, 0x278E2670, 0x278E2770, +0x288D2770, 0x258E2371, 0x218F2071, 0x228F2270, 0x228E2370, 0x208F2071, 0x228E2771, 0x288E2370, +0x258F2970, 0x248E2171, 0x238F276F, 0x2D8F226F, 0x208E2D71, 0x2E8D2C70, 0x318D2A6F, 0x268E2271, +0x1C8F2072, 0x258E2271, 0x268E2A70, 0x2A8E2570, 0x1E8E2470, 0x2B8D2D6F, 0x288E256F, 0x2E8E2D6E, +0x278F286F, 0x228E2371, 0x2B8E286F, 0x268E2670, 0x218C2A71, 0x238E2E6F, 0x288E2E6E, 0x2B8E2071, +0x2C8E316F, 0x2E8C1F71, 0x248E2371, 0x228E2270, 0x228F2570, 0x248D1F72, 0x1F8D1F72, 0x218D2571, +0x0E860B79, 0x0A906064, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, @@ -2318,25 +2318,25 @@ const unsigned long bg[480*640]={ 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609D604E, 0x609E604E, 0x609D604E, 0x609D604E, -0x609D604E, 0x609D604E, 0x609D604E, 0x6093205F, 0x268C2B6B, 0x599C5B53, 0x5E9C5C52, 0x5C9E5C51, -0x5F9E6050, 0x629E624F, 0x619F634E, 0x639F634E, 0x649F614E, 0x65A0654D, 0x62A0634D, 0x66A0674C, -0x689F674D, 0x689F684D, 0x67A0624D, 0x669F694D, 0x65A0654D, 0x63A0674D, 0x62A0624E, 0x61A0674E, -0x67A0654D, 0x65A0644D, 0x63A0654E, 0x669F634E, 0x66A0654D, 0x65A0684D, 0x6A9F684D, 0x679F694E, -0x68A0644D, 0x61A0624E, 0x67A0684D, 0x68A0664D, 0x669F674D, 0x6A9F6B4D, 0x68A0654D, 0x65A0664D, -0x67A0674D, 0x66A0654D, 0x649F664E, 0x699F684D, 0x66A0664D, 0x67A0654D, 0x649F664D, 0x64A0644E, -0x64A0664D, 0x689F694D, 0x65A0664C, 0x65A0654D, 0x679F654E, 0x62A0634E, 0x62A0634D, 0x63A0644E, -0x65A0644D, 0x66A0664D, 0x65A1654D, 0x65A0664D, 0x67A0644D, 0x62A0654D, 0x63A0684D, 0x679F6B4D, -0x68A0664D, 0x659F664D, 0x65A0654D, 0x64A0664D, 0x63A0614E, 0x61A0614E, 0x62A0674E, 0x6AA06A4C, -0x679F674E, 0x65A0664D, 0x689F654E, 0x62A0614E, 0x639F644E, 0x64A0634D, 0x62A0644D, 0x679F674E, -0x669F634E, 0x659F674E, 0x649F634E, 0x64A0644D, 0x659F674D, 0x689F684D, 0x679F634E, 0x659F694D, -0x66A0624D, 0x669F664D, 0x659F684D, 0x629F654E, 0x649F624E, 0x64A0664D, 0x689F654D, 0x659F644E, -0x679F634E, 0x64A0634D, 0x639F634E, 0x62A0624E, 0x61A0604E, 0x61A0614E, 0x62A0614E, 0x61A0624E, -0x62A0624F, 0x629F624E, 0x629F624E, 0x629F634E, 0x639F624E, 0x629F614E, 0x61A0614E, 0x629F654E, -0x65A0644E, 0x65A0634D, 0x62A0624E, 0x65A0664D, 0x639F634E, 0x689F674D, 0x679F674E, 0x649F634E, -0x61A0614E, 0x639F634E, 0x639F664E, 0x659F634E, 0x61A0624E, 0x659F674E, 0x659F624E, 0x67A0684D, -0x659F664D, 0x639F634E, 0x659F664D, 0x659F644D, 0x629F654E, 0x639F684D, 0x65A0684D, 0x669F614E, -0x669F684E, 0x659F5F4E, 0x619F614F, 0x5F9E5F50, 0x5E9E5F50, 0x5D9D5B52, 0x5A9C5853, 0x599C5953, -0x298D256C, 0x2094605F, 0x609E604E, 0x619D614E, 0x609E604E, 0x609E604E, 0x609E604E, 0x619D604E, +0x609D604E, 0x609D604E, 0x609D604E, 0x60910D64, 0x0F851179, 0x238D2871, 0x2C8D256F, 0x248E2371, +0x268E2870, 0x2A8E2970, 0x268E2A70, 0x288E2970, 0x288F2171, 0x2A90286F, 0x2290266F, 0x2C902D6D, +0x318E2E6F, 0x318E316E, 0x2D8E2370, 0x2D8E326E, 0x2990286F, 0x268F2D6F, 0x238F2470, 0x1E8F2E70, +0x2D8F2A6F, 0x288F276F, 0x258F2A70, 0x2C8F256F, 0x2B902A6F, 0x2A8E316F, 0x368E326E, 0x2F8E336F, +0x2F90266E, 0x208F2270, 0x2F8F326E, 0x318F2D6E, 0x2B8E2D6F, 0x348D376F, 0x318F296F, 0x2A902D6E, +0x2D8F2E6E, 0x2D8F2A6E, 0x278E2B70, 0x338E306E, 0x2B902B6D, 0x2E902A6E, 0x278E2B70, 0x288F2770, +0x27902C6E, 0x308E326E, 0x28902C6D, 0x298F2A6F, 0x2E8F2A6F, 0x23902570, 0x2291246F, 0x248F2770, +0x2890266F, 0x2B902A6D, 0x2991296D, 0x2A902C6E, 0x2E8F276F, 0x23912A6E, 0x268F306E, 0x2F8E3A6E, +0x328F2B6E, 0x2A8F2B6F, 0x2890286F, 0x27902B6F, 0x258F2071, 0x1F901E71, 0x22902F6F, 0x3690366D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D95605B, 0x609E604E, 0x619D614E, 0x609E604E, 0x609E604E, 0x609E604E, 0x619D604E, 0x619D604E, 0x609D614E, 0x619D614E, 0x619D604E, 0x619D614E, 0x619D604E, 0x609E604E, 0x619D614E, 0x609E604E, 0x619D614E, 0x609E604E, 0x609D614E, 0x619D614E, 0x619D604E, 0x609D614E, 0x619D604E, 0x609E604E, 0x619D614E, 0x609E604E, 0x609D614E, 0x619D614E, 0x619D614E, 0x609E604E, 0x609D614E, @@ -2358,25 +2358,25 @@ const unsigned long bg[480*640]={ 0x609D614E, 0x619D604E, 0x619D604E, 0x619D604E, 0x619D614E, 0x609E604E, 0x609E604E, 0x619D614E, 0x619D614E, 0x609D614E, 0x619D614E, 0x609D614E, 0x609D614E, 0x619D604E, 0x619D614E, 0x619D614E, 0x609D614E, 0x609D614E, 0x609E604E, 0x609E604E, 0x609E604E, 0x619D604E, 0x619D604E, 0x619D614E, -0x619D614E, 0x619D614E, 0x609E604E, 0x6193205F, 0x268C2B6B, 0x599C5A53, 0x5F9C5C52, 0x5D9E5C51, -0x609E614F, 0x629E634F, 0x639F644E, 0x649F644E, 0x649F614E, 0x65A0654D, 0x62A0644D, 0x66A0684C, -0x679F684D, 0x67A0684D, 0x699F644D, 0x64A0684D, 0x69A0654D, 0x65A0674D, 0x66A0634D, 0x62A0654E, -0x68A0664D, 0x64A0664D, 0x63A0654D, 0x66A0644E, 0x65A0654D, 0x66A0674D, 0x6A9F694D, 0x67A0694D, -0x6A9F684D, 0x63A0614E, 0x62A0654E, 0x699F6A4C, 0x67A0664D, 0x669F664D, 0x6A9F6B4D, 0x6A9F684D, -0x67A0664D, 0x679F674D, 0x699F6A4D, 0x68A0664D, 0x66A0674C, 0x669F664D, 0x659F654E, 0x64A0664D, -0x66A1664D, 0x68A0674D, 0x64A0654C, 0x65A0654E, 0x669F674D, 0x62A0634E, 0x64A1644D, 0x67A0634D, -0x65A0634D, 0x63A0634E, 0x63A0654D, 0x68A0674D, 0x65A0624D, 0x66A0644D, 0x67A0684D, 0x6AA06A4D, -0x67A0664D, 0x65A0664D, 0x65A0644D, 0x66A0644D, 0x63A0614E, 0x60A0654E, 0x69A0684D, 0x689E6A4E, -0x649E694E, 0x669F654D, 0x689F674D, 0x659F624E, 0x629F644E, 0x64A0644D, 0x64A0624D, 0x659F664D, -0x679F674D, 0x669F644D, 0x679E674E, 0x659F654E, 0x679F684D, 0x679F684D, 0x659F654D, 0x679F664D, -0x66A0634D, 0x679F674D, 0x659F684D, 0x629F644E, 0x659F644E, 0x659F664D, 0x699F674D, 0x66A0644D, -0x679F654D, 0x63A0644D, 0x65A0654D, 0x649F624E, 0x62A0624E, 0x62A0624E, 0x63A0634E, 0x63A0634E, -0x62A0634E, 0x62A0624E, 0x62A0624E, 0x62A0624E, 0x63A0624E, 0x62A0624E, 0x649F634E, 0x62A0634E, -0x64A0664E, 0x65A0654D, 0x63A0624E, 0x63A0684D, 0x65A0624D, 0x669F684D, 0x689F694D, 0x669F654D, -0x62A0604E, 0x639F654E, 0x639F674E, 0x67A0644D, 0x619F634E, 0x649F684D, 0x659F624E, 0x67A0684D, -0x67A0664D, 0x659F654D, 0x659F684D, 0x659F654D, 0x639F664E, 0x63A0684D, 0x669F684D, 0x669F614E, -0x679F694D, 0x659E604E, 0x639F624F, 0x609F604F, 0x5F9E5F4F, 0x5E9D5B52, 0x5A9D5953, 0x5B9D5753, -0x2A8D266C, 0x2093625E, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, +0x619D614E, 0x619D614E, 0x609E604E, 0x61952D5B, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x288D336F, 0x2C8E286F, 0x308D2F6F, 0x298E2270, 0x228F2770, 0x288F276E, 0x2790226F, 0x2A8F2B6F, +0x2D8E2E6F, 0x2B8E276F, 0x2F8D2D6F, 0x298E296F, 0x2D8D306F, 0x2E8D2F6F, 0x288E296F, 0x2E8E2B70, +0x2B8F266F, 0x2E8E2D6F, 0x288E316F, 0x238E2871, 0x298E2670, 0x2A8F2C6F, 0x328E2E6E, 0x2B8F286F, +0x2E8E2B6F, 0x2590276F, 0x2A8F296E, 0x278F2370, 0x238F2270, 0x238F2370, 0x258F2670, 0x258F2570, +0x22902570, 0x22902370, 0x228F2370, 0x238F2371, 0x24902170, 0x238E2371, 0x288E2571, 0x228F2371, +0x288F2C6F, 0x2890296F, 0x258F2070, 0x2590306D, 0x298F2270, 0x2C8D3070, 0x308E326F, 0x2B8E286F, +0x20901E71, 0x248F2970, 0x248E2F70, 0x2D8F286F, 0x218F2470, 0x278F306F, 0x2A8F2370, 0x2E8E326E, +0x2D8F2A6E, 0x288E286F, 0x2A8E2F6E, 0x298E2A6F, 0x238E2C71, 0x258F306F, 0x2C8E306E, 0x2D8F1F70, +0x308F356E, 0x2E8D1F71, 0x298E2770, 0x258F256F, 0x258F276F, 0x288D2171, 0x218D2271, 0x288E2170, +0x0F850F79, 0x0C906264, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, @@ -2398,25 +2398,25 @@ const unsigned long bg[480*640]={ 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, 0x629D624D, -0x629D624D, 0x629D624D, 0x629D624D, 0x6293205E, 0x268C2B6B, 0x599C5A53, 0x609C5D52, 0x5E9D5C51, -0x609E604F, 0x629F624F, 0x639F654E, 0x659F634E, 0x659F634E, 0x64A0654D, 0x63A1644D, 0x66A0684C, -0x689F684D, 0x68A0684D, 0x68A0694D, 0x62A0674D, 0x699F674D, 0x65A0654D, 0x69A0634D, 0x63A0624E, -0x67A0684D, 0x65A0664D, 0x63A0634E, 0x66A0684D, 0x64A0654D, 0x66A0684D, 0x689F694D, 0x69A0684D, -0x6AA06A4D, 0x67A0644C, 0x61A0624E, 0x63A0684D, 0x6AA0694C, 0x66A0664D, 0x65A0664E, 0x679F694D, -0x6AA06A4D, 0x6A9F6A4D, 0x68A0674D, 0x65A0654C, 0x67A0664C, 0x659F664E, 0x66A0654E, 0x64A0664D, -0x67A0674C, 0x68A0654D, 0x65A1664D, 0x66A0664D, 0x66A0674D, 0x62A0654E, 0x65A1654D, 0x64A1664D, -0x63A0644D, 0x64A1644D, 0x65A1654D, 0x65A1654D, 0x65A0684D, 0x64A0674D, 0x68A0684D, 0x6C9F684C, -0x68A0664D, 0x65A1654D, 0x65A0674D, 0x65A0634D, 0x61A0614E, 0x67A1674D, 0x659F6A4E, 0x6C9F6C4D, -0x659F644D, 0x699E664E, 0x659F694D, 0x689F654E, 0x609F634E, 0x65A0654D, 0x64A0654D, 0x62A0674D, -0x669F674D, 0x67A0684D, 0x639F644E, 0x659F654E, 0x659F664D, 0x659F654D, 0x649F664E, 0x69A0674D, -0x649F654E, 0x68A0674D, 0x65A0684D, 0x62A0644E, 0x659F654E, 0x66A0664D, 0x68A0674D, 0x66A0654D, -0x659F684E, 0x63A0644D, 0x66A0674D, 0x66A0664D, 0x66A0664D, 0x66A0664D, 0x65A0664D, 0x65A0664D, -0x65A0654D, 0x66A0664D, 0x65A0654D, 0x64A0644E, 0x64A0634E, 0x64A0644E, 0x64A0644E, 0x639F644E, -0x63A0654D, 0x66A0654D, 0x66A0644D, 0x62A0654D, 0x68A0634D, 0x629F684E, 0x68A0694D, 0x67A0664D, -0x63A0604E, 0x629F654E, 0x63A0684D, 0x659F654E, 0x639F624E, 0x65A0684D, 0x67A0634D, 0x679F6A4D, -0x68A0664D, 0x66A0644D, 0x659F684D, 0x65A0674D, 0x639F654E, 0x63A0664D, 0x669F684D, 0x679F614D, -0x689F674D, 0x659F5F4E, 0x639F624F, 0x609F614F, 0x609F604F, 0x5F9D5B52, 0x5A9D5952, 0x5B9C5653, -0x2B8C266B, 0x2194625E, 0x629E624D, 0x629E624D, 0x639E624D, 0x639E624D, 0x629E634D, 0x629E624D, +0x629D624D, 0x629D624D, 0x629D624D, 0x62910D63, 0x0F861279, 0x248E2470, 0x308E276F, 0x288F2270, +0x288F276F, 0x2D8F2A6E, 0x2A8F2F6E, 0x2E8F296F, 0x2C8F2570, 0x2891296E, 0x2391276E, 0x2C91306C, +0x318E316E, 0x3090316D, 0x3090336D, 0x238F2F6F, 0x348F2D6D, 0x28902A6E, 0x3490256E, 0x24902271, +0x2E90306E, 0x29902C6E, 0x25902470, 0x2C8F306E, 0x27902A6F, 0x2C90306E, 0x318E336E, 0x338F316E, +0x358E376D, 0x2F91266D, 0x20902070, 0x2590316F, 0x3790326B, 0x2B912B6D, 0x2A8F2D6F, 0x2F8E336E, +0x378E386E, 0x368E366D, 0x328F2E6E, 0x2A91296D, 0x2F912D6C, 0x2A8F2C6F, 0x2D8F2970, 0x28902B6F, +0x2F902F6D, 0x3190296F, 0x28912B6D, 0x2C902C6F, 0x2C902E6F, 0x23902A6F, 0x2991296E, 0x26912C6E, +0x2490276F, 0x2791276E, 0x29902A6E, 0x2A91296E, 0x2990306D, 0x27912D6D, 0x308F326D, 0x3B8F2F6D, +0x318F2B6E, 0x2991296D, 0x2A902E6E, 0x2990256F, 0x20911F70, 0x2E912E6E, 0x2B8D3670, 0x3B8D3C6E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D95625A, 0x629E624D, 0x629E624D, 0x639E624D, 0x639E624D, 0x629E634D, 0x629E624D, 0x629E634D, 0x629E624D, 0x629E624D, 0x629E624D, 0x629E634D, 0x639E624D, 0x629E624D, 0x629E634D, 0x639E624D, 0x629E634D, 0x639E624D, 0x629E624D, 0x629E624D, 0x639E634D, 0x629E634D, 0x639E624D, 0x629E634D, 0x629E624D, 0x639E624D, 0x629E634D, 0x629E634D, 0x639E624D, 0x629E624D, 0x629E634D, @@ -2438,25 +2438,25 @@ const unsigned long bg[480*640]={ 0x639E624D, 0x629E624D, 0x629E634D, 0x629E624D, 0x629E634D, 0x629E634D, 0x639E624D, 0x629E624D, 0x629E634D, 0x629E634D, 0x639E624D, 0x629E634D, 0x639E634D, 0x639E624D, 0x639E634D, 0x629E634D, 0x629E634D, 0x639E624D, 0x629E624D, 0x629E634D, 0x639E624D, 0x639E634D, 0x629E634D, 0x629E624D, -0x629E634D, 0x629E634D, 0x629E624D, 0x6394205E, 0x268C2B6B, 0x599C5853, 0x609C5D52, 0x5E9E5C51, -0x609E5F4F, 0x639E634F, 0x649F654E, 0x679F634E, 0x66A0644F, 0x64A0654D, 0x63A1634D, 0x65A0684C, -0x69A0684D, 0x68A0684D, 0x68A0674D, 0x68A0654D, 0x69A0684C, 0x65A1664D, 0x6AA0664D, 0x63A0624E, -0x65A0674D, 0x67A0664D, 0x65A0634D, 0x66A0674D, 0x67A0654D, 0x64A1674D, 0x689F684D, 0x69A0684D, -0x699F6B4C, 0x6AA0684C, 0x65A1624D, 0x62A0614E, 0x65A06A4D, 0x6CA0674B, 0x65A1654D, 0x65A0644D, -0x65A0664D, 0x66A0664D, 0x66A0654D, 0x66A1674C, 0x67A0664C, 0x689F674D, 0x66A0644D, 0x65A0654D, -0x67A0684C, 0x67A1634D, 0x66A1664C, 0x67A0674D, 0x67A0674D, 0x63A0674D, 0x64A0634E, 0x64A1674D, -0x67A0634D, 0x65A0654D, 0x66A1664D, 0x65A0674C, 0x66A0654D, 0x68A06A4C, 0x69A06B4C, 0x69A0694D, -0x67A0654D, 0x66A1654D, 0x68A0664D, 0x62A1614E, 0x61A0684D, 0x679F684E, 0x6B9F6A4D, 0x68A0684D, -0x65A0654D, 0x649F684E, 0x66A0674D, 0x6A9F694D, 0x64A0614D, 0x63A0664D, 0x66A0644D, 0x65A1634D, -0x67A0684C, 0x65A0654E, 0x69A0674D, 0x629F634E, 0x649F644E, 0x649F654E, 0x65A0684D, 0x69A0674D, -0x64A0654E, 0x67A0674D, 0x66A0674D, 0x639F634E, 0x65A0664D, 0x66A0664D, 0x679F6A4C, 0x67A0674D, -0x64A0654E, 0x679F644E, 0x65A0664D, 0x679F674D, 0x67A0664D, 0x67A0674D, 0x66A0664D, 0x66A0684D, -0x68A0694D, 0x6A9F6A4D, 0x6A9F694C, 0x68A0674C, 0x66A0664D, 0x65A0654E, 0x64A0644E, 0x64A0644E, -0x659F644E, 0x64A0674D, 0x66A0664D, 0x65A0624D, 0x65A0674C, 0x629F664E, 0x68A0684D, 0x699F664D, -0x65A0614D, 0x63A0654D, 0x65A0674D, 0x67A0654D, 0x65A0624E, 0x65A0674D, 0x679F644E, 0x659F6B4C, -0x69A0674D, 0x67A0644D, 0x65A0684D, 0x67A0674D, 0x659F664E, 0x659F674D, 0x65A0684D, 0x68A0624E, -0x689F684D, 0x659F604E, 0x659F634F, 0x619F624F, 0x5F9E624F, 0x5F9D5B51, 0x5A9D5B52, 0x5A9C5853, -0x2C8C266B, 0x2194635E, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, +0x629E634D, 0x629E634D, 0x629E624D, 0x63952D5A, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x298F286E, 0x278D3171, 0x2B8E2E6E, 0x348E326F, 0x26902070, 0x24902B6F, 0x2B90266D, 0x2991246D, +0x2F8F306D, 0x2A8F2A6F, 0x32902E6D, 0x228E2571, 0x278E2870, 0x278E2A70, 0x2A8F326F, 0x33902C6C, +0x2790296F, 0x2F8F2E6E, 0x2B8F2F6E, 0x258F2670, 0x2A8F2C6F, 0x2B8F2B6E, 0x2E8F366D, 0x2D8F2F6D, +0x278F2A6F, 0x2E8E2770, 0x298F2C6F, 0x2F8F2D6F, 0x2D8F2C6F, 0x2E8F2E6E, 0x2C8F2C6F, 0x2D8F306D, +0x318F346D, 0x368E366D, 0x368E346D, 0x31902F6D, 0x2D902C6E, 0x2A90296F, 0x26902770, 0x288F2870, +0x298E2771, 0x28902E6E, 0x2B912A6D, 0x2A90226E, 0x29912F6D, 0x238F2C70, 0x318E306E, 0x358E2D6E, +0x29901E6F, 0x2490296F, 0x2A8F2D6F, 0x2D8F296F, 0x2A8F226F, 0x28902F6E, 0x2D8F286F, 0x2890386D, +0x358F2D6D, 0x2E90276E, 0x2A8F316E, 0x2E8F2E6D, 0x2B8E2B70, 0x298F2E6E, 0x2A8F306E, 0x328F226F, +0x328F356D, 0x2E8F1F70, 0x2D902A6F, 0x2790296E, 0x25902E6D, 0x298E2071, 0x218E2571, 0x278E2371, +0x14861178, 0x0F916363, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, @@ -2478,25 +2478,25 @@ const unsigned long bg[480*640]={ 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, 0x639E634C, -0x639E634C, 0x639E634C, 0x639E634C, 0x6394215E, 0x268C2C6B, 0x599C5853, 0x609C5D52, 0x5F9E5D51, -0x5F9F604F, 0x629F634F, 0x659F674D, 0x679F644E, 0x67A0654E, 0x65A0644D, 0x63A1644D, 0x65A0694C, -0x6AA0694C, 0x68A0684D, 0x68A0684D, 0x68A0674C, 0x67A0694C, 0x67A1674D, 0x69A06A4C, 0x64A0644D, -0x64A1674D, 0x68A0664D, 0x67A0644D, 0x65A0664D, 0x69A0654D, 0x64A0654D, 0x67A0674D, 0x69A0684D, -0x6AA0694D, 0x6C9F6B4C, 0x68A1664C, 0x65A1624D, 0x61A0634E, 0x67A06C4C, 0x6AA1674C, 0x65A1654D, -0x66A1654D, 0x65A1654D, 0x67A1684C, 0x68A1684C, 0x67A0684D, 0x66A0684D, 0x66A0654D, 0x67A1674D, -0x68A1684C, 0x66A0614D, 0x65A1654C, 0x67A0664D, 0x67A0684D, 0x63A0654E, 0x65A0664D, 0x66A1654C, -0x67A1684C, 0x66A1664D, 0x67A0674C, 0x67A1654D, 0x66A1684C, 0x6BA06A4C, 0x6C9F6A4C, 0x6AA0694D, -0x66A0664D, 0x66A1684D, 0x69A0644D, 0x61A1624E, 0x69A0674D, 0x679F6A4D, 0x68A0684C, 0x69A0694C, -0x64A0674D, 0x639F664E, 0x689F664D, 0x689F6A4D, 0x67A0634E, 0x61A0634E, 0x65A0664D, 0x65A0664D, -0x64A0684C, 0x689F654D, 0x65A0684D, 0x6AA0684C, 0x66A0644D, 0x66A0664D, 0x68A0694D, 0x67A0644C, -0x65A0664D, 0x68A0674D, 0x66A0674D, 0x64A0644E, 0x66A0654D, 0x65A0674D, 0x679F694D, 0x67A0684C, -0x67A0634D, 0x659F684E, 0x66A0644D, 0x64A0644D, 0x65A0664D, 0x67A0674D, 0x66A0664D, 0x67A0684D, -0x68A0694D, 0x68A0694D, 0x69A0684D, 0x699F694D, 0x699F6A4D, 0x6A9F6A4D, 0x68A0654D, 0x65A0654E, -0x65A0654E, 0x669F644E, 0x66A1674D, 0x66A1654D, 0x62A1664D, 0x65A0634D, 0x699F694D, 0x6A9F684D, -0x67A0624D, 0x61A0654D, 0x66A0664D, 0x68A0654D, 0x66A0634D, 0x65A0664D, 0x699F654D, 0x63A06A4D, -0x6AA0684D, 0x68A0664C, 0x65A0684D, 0x69A0684C, 0x68A0664D, 0x67A0674D, 0x65A0674D, 0x699F634D, -0x67A0694D, 0x669F604E, 0x649F634E, 0x609F624F, 0x609F634F, 0x609E5B51, 0x5A9D5B52, 0x5A9C5C53, -0x2B8C286B, 0x2094655D, 0x649F654C, 0x649F654C, 0x649F654C, 0x659F644C, 0x649F644C, 0x649F644C, +0x639E634C, 0x639E634C, 0x639E634C, 0x63910F63, 0x10861478, 0x268F2170, 0x318E296F, 0x2C8F246F, +0x2890266F, 0x2C8F2C6E, 0x2F8F336D, 0x34902B6F, 0x328F2C6F, 0x2991276E, 0x2392276E, 0x2B92326C, +0x3590336C, 0x3190316D, 0x3090316D, 0x32902F6D, 0x2D90346D, 0x2C912D6D, 0x3290356C, 0x2691276F, +0x27912F6E, 0x31912C6D, 0x2F91266F, 0x28912C6E, 0x3291296D, 0x28912A6E, 0x2F8F2F6E, 0x338E316F, +0x3490336D, 0x3B8F396C, 0x33922C6B, 0x2991236E, 0x1E902370, 0x2E913A6C, 0x37912E6B, 0x2991296D, +0x2A912A6D, 0x2992296D, 0x2E91326C, 0x3091326C, 0x2D90316E, 0x2C8F316F, 0x2B912A6E, 0x2F902D6D, +0x31922F6C, 0x2C91206E, 0x29922B6C, 0x2D912B6D, 0x2D90316E, 0x24912A6F, 0x29912A6E, 0x2C92286C, +0x3092306C, 0x2C912C6E, 0x2D912F6D, 0x2E91286D, 0x2C91326C, 0x3990366C, 0x3B8F366C, 0x3590336D, +0x2C912B6E, 0x2B922F6D, 0x3391266E, 0x2192226F, 0x31902F6E, 0x308E366E, 0x3190316C, 0x3490336C, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D96655A, 0x649F654C, 0x649F654C, 0x649F654C, 0x659F644C, 0x649F644C, 0x649F644C, 0x649F654C, 0x659F644C, 0x649F644C, 0x649F654C, 0x659F644C, 0x649F654C, 0x649F654C, 0x659F654C, 0x649F644C, 0x659F644C, 0x659F654C, 0x649F654C, 0x649F644C, 0x659F644C, 0x649F644C, 0x649F644C, 0x659F654C, 0x649F644C, 0x659F654C, 0x659F654C, 0x659F644C, 0x649F644C, 0x649F654C, 0x649F654C, @@ -2518,25 +2518,25 @@ const unsigned long bg[480*640]={ 0x659F644C, 0x649F654C, 0x649F644C, 0x649F644C, 0x649F644C, 0x649F644C, 0x649F644C, 0x649F654C, 0x649F644C, 0x649F644C, 0x659F644C, 0x649F654C, 0x659F644C, 0x649F644C, 0x649F654C, 0x649F654C, 0x649F644C, 0x659F644C, 0x649F654C, 0x649F644C, 0x659F644C, 0x659F654C, 0x649F644C, 0x649F644C, -0x659F654C, 0x649F644C, 0x649F644C, 0x6494215D, 0x268D2B6B, 0x5A9C5953, 0x609C5E52, 0x609E5E50, -0x5F9F604F, 0x649F624F, 0x659F684D, 0x689F664D, 0x689F664E, 0x65A0654D, 0x63A1654D, 0x67A06B4C, -0x69A0694C, 0x6AA0684C, 0x67A0674C, 0x68A0684C, 0x64A0694D, 0x68A0674C, 0x68A06C4C, 0x65A1654D, -0x65A0674D, 0x6AA0674D, 0x68A0664D, 0x63A0674D, 0x68A1684D, 0x65A1654D, 0x66A0684D, 0x68A0684D, -0x6AA0694C, 0x6AA06A4C, 0x6CA06A4C, 0x68A1664C, 0x62A1614E, 0x61A0644E, 0x69A06B4C, 0x6CA16A4B, -0x68A1674C, 0x67A0684C, 0x68A1684C, 0x67A0664C, 0x67A0654D, 0x67A0664D, 0x65A1674D, 0x67A1674C, -0x68A1684C, 0x66A1614D, 0x66A1664C, 0x67A1664D, 0x66A0694D, 0x65A1654D, 0x68A0674D, 0x64A1674D, -0x65A1674D, 0x67A1674D, 0x66A1644D, 0x66A1694C, 0x68A06A4C, 0x69A06C4D, 0x6CA06A4C, 0x6BA0684C, -0x65A1664D, 0x67A06C4C, 0x65A1614D, 0x62A0694C, 0x69A0694D, 0x69A0674C, 0x68A0694C, 0x68A1674D, -0x68A0654D, 0x67A0644D, 0x699F674D, 0x66A0684D, 0x69A0684D, 0x64A0624D, 0x62A0664D, 0x66A0654D, -0x67A1644D, 0x67A0684C, 0x67A0654D, 0x66A0684D, 0x6AA06B4C, 0x6CA16B4C, 0x69A0684C, 0x65A1634D, -0x67A0694D, 0x68A0664D, 0x66A0674D, 0x65A0654E, 0x67A0664D, 0x67A0684D, 0x66A0684D, 0x68A0684C, -0x69A0664D, 0x63A0644E, 0x68A0684D, 0x67A0664D, 0x67A0674D, 0x67A0664D, 0x66A0664D, 0x65A0664D, -0x65A0664D, 0x65A0654E, 0x64A0644E, 0x65A0664E, 0x65A0664E, 0x66A0654E, 0x679F694D, 0x69A0684D, -0x67A0664D, 0x679F664E, 0x65A0664D, 0x67A1664C, 0x66A1634D, 0x66A1644C, 0x66A0694D, 0x699F6B4C, -0x69A0644D, 0x60A0634E, 0x65A0664D, 0x68A0674D, 0x66A0674D, 0x63A0674D, 0x68A0684D, 0x64A0654E, -0x6C9F6A4C, 0x69A1694C, 0x65A0694D, 0x6CA0694C, 0x68A0684D, 0x679F664D, 0x67A0674D, 0x69A0634D, -0x66A0684D, 0x689F614E, 0x64A0644E, 0x629F624F, 0x609F634F, 0x619E5B51, 0x5A9D5B52, 0x599C5E53, -0x2C8C266B, 0x2094655E, 0x659E654C, 0x659E654C, 0x659E654C, 0x659F654C, 0x659E654C, 0x659E654C, +0x659F654C, 0x649F644C, 0x649F644C, 0x64962D5A, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3090286E, 0x2D90266E, 0x328D2E70, 0x2C902F6E, 0x338E306E, 0x2691216F, 0x23912C6E, 0x2A91296D, +0x2E92266D, 0x3090316D, 0x2F8F296E, 0x2D90326D, 0x3690396B, 0x3B91386B, 0x3491316C, 0x2A91246E, +0x2D90346E, 0x328F2B6E, 0x2B902E6E, 0x2A8F2970, 0x2E8F2C6E, 0x2E90316D, 0x2A90306D, 0x3290316D, +0x31912B6E, 0x24902870, 0x318F306E, 0x2E902B6E, 0x2D902F6E, 0x2D902C6F, 0x2B902B6F, 0x2A902B6F, +0x2A902B6F, 0x29902970, 0x288F2770, 0x2B8F2C70, 0x2B8F2D70, 0x2B902A70, 0x2F8E346E, 0x358F326D, +0x2F902C6F, 0x2E8F2D70, 0x2A902B6F, 0x2E922C6C, 0x2B91256D, 0x2D91276D, 0x2C8F346E, 0x348E386D, +0x3291276D, 0x1C912670, 0x2A902B6F, 0x32902D6E, 0x2B902D6E, 0x25912D6D, 0x328F306E, 0x28902A6F, +0x3A8F366C, 0x3391336B, 0x2991336D, 0x3A90326B, 0x308F306E, 0x2F902B6E, 0x2D902E6E, 0x3690266E, +0x2D90346E, 0x338F236F, 0x2D902D6E, 0x29912C6D, 0x2790316D, 0x2C8F236F, 0x238F2570, 0x228E3070, +0x14861178, 0x0C926563, 0x659E654C, 0x659E654C, 0x659E654C, 0x659F654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659F654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, @@ -2558,25 +2558,25 @@ const unsigned long bg[480*640]={ 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659F654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, 0x659E654C, -0x659E654C, 0x659E654C, 0x659E654C, 0x6594215D, 0x278D2B6B, 0x5A9C5A53, 0x609D5F51, 0x609E5E50, -0x609F614F, 0x649F634F, 0x679F684D, 0x689F674D, 0x699F654E, 0x65A0634D, 0x63A1654C, 0x69A06C4C, -0x69A0694C, 0x6AA16B4C, 0x6AA0694C, 0x67A1684D, 0x69A0674D, 0x6BA1684C, 0x68A06A4C, 0x69A0654C, -0x66A1674D, 0x68A1684D, 0x68A1684D, 0x64A0654E, 0x66A06A4C, 0x64A1644D, 0x67A1694D, 0x69A0664D, -0x68A06A4D, 0x69A1694D, 0x6BA06D4C, 0x6CA16A4B, 0x67A1644C, 0x63A0614E, 0x62A0644E, 0x67A1694D, -0x6CA06C4C, 0x6BA06A4C, 0x68A0664D, 0x67A1674D, 0x65A0654E, 0x65A1664D, 0x65A0694C, 0x67A1694C, -0x68A1684C, 0x63A1624E, 0x66A1664C, 0x67A1674D, 0x67A06A4D, 0x65A1634D, 0x6AA0654D, 0x65A1664C, -0x67A1664D, 0x66A1674D, 0x67A1694D, 0x69A16B4B, 0x6BA1674C, 0x6BA06B4D, 0x6AA06B4C, 0x6AA0664C, -0x65A1674C, 0x6CA0694C, 0x61A1614E, 0x68A0694C, 0x68A06A4C, 0x68A1684C, 0x68A1674C, 0x67A1674C, -0x6AA0664D, 0x66A1674D, 0x63A0694D, 0x67A0664D, 0x69A0694C, 0x68A0654D, 0x62A0634E, 0x66A1664D, -0x64A1674C, 0x65A1674D, 0x69A06A4C, 0x69A0654D, 0x65A0664D, 0x67A0674D, 0x67A1654D, 0x63A0664D, -0x68A06A4D, 0x6AA0674D, 0x66A0684D, 0x64A0654E, 0x68A0654D, 0x67A0694C, 0x67A0684D, 0x68A0684C, -0x69A0694D, 0x68A0644D, 0x63A0644E, 0x67A0674D, 0x67A0684D, 0x68A0684D, 0x68A0684D, 0x68A0674D, -0x66A0654D, 0x64A1654D, 0x66A1664D, 0x66A1674D, 0x65A0654D, 0x65A0654E, 0x66A0664D, 0x65A0654E, -0x69A06A4C, 0x69A0684D, 0x67A0664D, 0x65A1674C, 0x67A1654C, 0x66A1664C, 0x66A0694D, 0x689F6B4C, -0x6BA0684C, 0x62A0624E, 0x64A0684D, 0x67A0684D, 0x65A0694D, 0x65A1664D, 0x69A06A4C, 0x66A0634D, -0x69A06D4C, 0x6AA06A4C, 0x68A0694D, 0x6DA06B4C, 0x6AA0684C, 0x68A0664D, 0x67A1664D, 0x69A0644D, -0x65A0684D, 0x689F624D, 0x63A0634E, 0x639F624F, 0x609F644F, 0x619E5C51, 0x5C9D5C52, 0x5A9C5D53, -0x2C8D256B, 0x2094665D, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F664B, 0x669F654B, +0x659E654C, 0x659E654C, 0x659E654C, 0x65911062, 0x13861378, 0x268F2770, 0x358E2F6E, 0x2D90276F, +0x2891296E, 0x30902C6E, 0x3490356C, 0x378F316D, 0x368F2B6E, 0x2B92256E, 0x24932B6D, 0x35903B6C, +0x3590326C, 0x3591386B, 0x3791336C, 0x2E91306D, 0x33902E6D, 0x3891316B, 0x3290356C, 0x33922A6D, +0x2C922E6D, 0x3091316C, 0x3191316D, 0x2791296F, 0x2C91366C, 0x2792286E, 0x2D91336C, 0x34902C6E, +0x318F356E, 0x3291336D, 0x398F3C6B, 0x3A923569, 0x2F91276D, 0x2691216F, 0x2391286F, 0x2E91336D, +0x3A903A6B, 0x3890366C, 0x31902C6D, 0x2F912F6D, 0x2A902970, 0x29912C6E, 0x2A91336D, 0x2F91326C, +0x3192316C, 0x2592236F, 0x2C932D6C, 0x2E922E6C, 0x2E90346E, 0x2A91266E, 0x3490296E, 0x2B922D6C, +0x2E932B6C, 0x2C922D6C, 0x2D92336C, 0x3492376A, 0x38912E6C, 0x3790386C, 0x3691396C, 0x36912C6D, +0x2B932F6C, 0x3A91356C, 0x2193216E, 0x3190346D, 0x3290376D, 0x3192336B, 0x31922F6C, 0x2F942E6B, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D966659, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F664B, 0x669F654B, 0x659F664B, 0x659F654C, 0x669F654B, 0x669F654B, 0x659F664B, 0x659F654C, 0x659F654C, 0x669F664B, 0x659F654C, 0x669F654B, 0x659F654C, 0x659F664B, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F664B, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, @@ -2598,25 +2598,25 @@ const unsigned long bg[480*640]={ 0x659F654C, 0x669F654B, 0x669F654B, 0x659F654C, 0x659F664B, 0x659F664B, 0x659F654C, 0x659F654C, 0x659F654C, 0x669F654B, 0x659F654C, 0x669F654B, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F664B, 0x659F654C, 0x659F654C, 0x659F654C, 0x659F654C, 0x669F654B, 0x659F664B, 0x659F654C, 0x669F654B, -0x669F654B, 0x659F664B, 0x659F654C, 0x6594215D, 0x288D2C6B, 0x5A9C5D52, 0x619D5F51, 0x5F9E5F50, -0x609F614F, 0x65A0654F, 0x689F694D, 0x6A9F674D, 0x6BA0654D, 0x66A1634D, 0x62A1684C, 0x6AA06A4C, -0x69A16A4C, 0x68A0694C, 0x6AA06B4C, 0x6BA0674C, 0x68A0684C, 0x69A16B4C, 0x69A1694C, 0x6DA0654C, -0x67A1684D, 0x67A0694C, 0x68A1674D, 0x67A1644D, 0x65A16A4D, 0x67A1644D, 0x65A1674C, 0x6AA0694C, -0x68A0694D, 0x6AA06A4C, 0x69A06C4C, 0x6DA06D4B, 0x6BA1684B, 0x67A1644D, 0x63A1624E, 0x62A1624E, -0x63A0644E, 0x64A1634E, 0x64A1664D, 0x65A0654E, 0x65A0644D, 0x66A1664D, 0x68A1674C, 0x67A1694C, -0x68A1684C, 0x61A1654D, 0x66A1674C, 0x68A1694C, 0x68A06A4D, 0x66A1634D, 0x6BA0654D, 0x66A1654C, -0x69A1684C, 0x68A1694C, 0x6AA1694C, 0x6AA16A4C, 0x68A1694C, 0x6AA16A4C, 0x6AA06B4C, 0x6BA0654D, -0x68A16A4C, 0x6EA0654C, 0x61A1664D, 0x6BA0684D, 0x6AA0674C, 0x6BA1694C, 0x6AA2694C, 0x6BA16C4C, -0x66A06A4C, 0x65A0664D, 0x67A0644D, 0x69A0654D, 0x67A0694D, 0x69A0684D, 0x65A0634D, 0x64A1674D, -0x66A1644C, 0x67A1674D, 0x67A06A4C, 0x6AA0694C, 0x69A0694C, 0x67A0654D, 0x65A0654D, 0x67A0694D, -0x69A06A4C, 0x69A0674D, 0x66A0684D, 0x65A0654E, 0x67A0654D, 0x67A0694C, 0x69A0674D, 0x67A0694D, -0x67A1684C, 0x68A1684C, 0x67A1654D, 0x65A0644D, 0x64A0644D, 0x63A0624E, 0x62A0634E, 0x63A0624E, -0x62A0624E, 0x62A0634E, 0x63A0634E, 0x64A0664D, 0x65A1664D, 0x67A1674D, 0x67A1674D, 0x65A1654D, -0x67A0684D, 0x6BA06B4C, 0x69A0674D, 0x68A0664D, 0x68A1684C, 0x66A1654D, 0x66A1664C, 0x6AA0684D, -0x6C9F694C, 0x67A1624D, 0x64A0674D, 0x68A0694D, 0x67A0674D, 0x68A1644D, 0x69A06A4C, 0x68A0634D, -0x64A06D4D, 0x6CA16A4C, 0x6AA1674C, 0x6BA06D4C, 0x6BA0694C, 0x69A0674D, 0x67A1654D, 0x68A0664D, -0x64A0684D, 0x699F644D, 0x61A0634E, 0x63A0634E, 0x619F644F, 0x609E5C50, 0x5D9D5D52, 0x5A9C5B53, -0x2C8D266B, 0x2294665D, 0x679F664B, 0x679F674B, 0x679F674B, 0x679F674B, 0x679F674B, 0x669F674B, +0x669F654B, 0x659F664B, 0x659F654C, 0x65962D5A, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x2D90376C, 0x2A912B6E, 0x2E91286E, 0x338F296E, 0x2E90336D, 0x3290306D, 0x2991246F, 0x26922E6D, +0x2C92266D, 0x2E922E6C, 0x2D91366C, 0x3790336C, 0x348F326D, 0x2D91296E, 0x28912A6E, 0x2F8F356D, +0x3390376C, 0x35902D6D, 0x2C90316E, 0x2990296F, 0x2F902A6F, 0x2E91346C, 0x33912E6C, 0x2E90316D, +0x3091326C, 0x3192316C, 0x2E922A6D, 0x2991286E, 0x2890266E, 0x2591236F, 0x22902370, 0x23902170, +0x22902270, 0x20902370, 0x2491266F, 0x28902B6F, 0x2A912B6E, 0x2D922E6D, 0x2F922E6D, 0x29922A6E, +0x2D90306E, 0x3790396C, 0x328F2F6F, 0x30902B6F, 0x3192326B, 0x2C922A6D, 0x2E922C6C, 0x3690316E, +0x3A90356C, 0x2D92236E, 0x28902D6F, 0x3090326E, 0x2E902E6D, 0x3091276D, 0x3390366C, 0x3290266E, +0x28903D6D, 0x3C91366B, 0x36922F6B, 0x388F3C6B, 0x3790346C, 0x32902E6E, 0x2E92296D, 0x31912D6D, +0x2A91346D, 0x38902B6E, 0x25912B6E, 0x2D912F6D, 0x2B91346D, 0x2C90246F, 0x278F2A70, 0x248F2970, +0x15860F78, 0x11916662, 0x679F664B, 0x679F674B, 0x679F674B, 0x679F674B, 0x679F674B, 0x669F674B, 0x679F674B, 0x679F664B, 0x669F674B, 0x679F674B, 0x669F674B, 0x679F664B, 0x679F674B, 0x669F674B, 0x679F674B, 0x679F674B, 0x679F674B, 0x669F674B, 0x679F664B, 0x679F674B, 0x679F664B, 0x679F674B, 0x679F664B, 0x679F664B, 0x679F674B, 0x679F674B, 0x679F674B, 0x669F664B, 0x669F674B, 0x679F674B, @@ -2638,25 +2638,25 @@ const unsigned long bg[480*640]={ 0x679F674B, 0x679F664B, 0x679F664B, 0x669F664B, 0x669F674B, 0x679F674B, 0x679F674B, 0x679F674B, 0x669F674B, 0x679F674B, 0x669F664B, 0x679F664B, 0x669F664B, 0x679F674B, 0x679F664B, 0x679F674B, 0x679F664B, 0x669F664B, 0x679F664B, 0x669F674B, 0x679F674B, 0x669F664B, 0x669F664B, 0x679F674B, -0x679F664B, 0x669F674B, 0x669F664B, 0x6794225D, 0x288D2B6B, 0x5A9C5F52, 0x619D6051, 0x5F9E6050, -0x5F9F614F, 0x659F664E, 0x679F6B4D, 0x6AA0674C, 0x6AA0644E, 0x65A1634D, 0x63A16A4C, 0x6CA06A4C, -0x6AA1684C, 0x68A1674C, 0x66A1684D, 0x6AA06B4C, 0x67A16A4C, 0x66A16B4C, 0x68A16A4C, 0x6DA1684B, -0x66A1674D, 0x69A1694C, 0x68A1674C, 0x68A1654C, 0x65A1674C, 0x6BA1654C, 0x66A1684D, 0x69A16A4C, -0x68A0674D, 0x69A1694D, 0x69A16B4C, 0x6BA06D4C, 0x6EA16D4B, 0x6AA1684C, 0x65A0634E, 0x62A1634D, -0x63A1644D, 0x65A1644D, 0x64A0654E, 0x65A1654D, 0x65A1674D, 0x67A1694D, 0x67A1674C, 0x68A1694C, -0x6AA1664C, 0x62A1684D, 0x66A1664C, 0x67A1684D, 0x69A06A4C, 0x67A1634D, 0x6BA0674D, 0x65A1664D, -0x67A1684C, 0x68A1684C, 0x69A16B4C, 0x6BA16A4C, 0x67A06C4C, 0x6AA1684C, 0x6AA16C4C, 0x69A1674C, -0x6AA16E4C, 0x6AA1634C, 0x62A16A4D, 0x6AA0694D, 0x69A06A4C, 0x69A16A4C, 0x69A06C4C, 0x69A0674C, -0x65A1684C, 0x6AA0654D, 0x67A1674C, 0x64A0694D, 0x65A0684D, 0x6AA0674D, 0x68A0654C, 0x64A0664D, -0x69A1674C, 0x66A1684C, 0x69A1674C, 0x69A16C4C, 0x6AA06C4C, 0x6DA06C4C, 0x6BA06B4C, 0x6AA06B4D, -0x6CA06A4C, 0x69A1674C, 0x67A0694D, 0x66A0674D, 0x67A0664D, 0x68A1694C, 0x6BA0684C, 0x67A0684D, -0x69A1684D, 0x69A06A4C, 0x68A1674C, 0x67A1674C, 0x67A1684C, 0x68A0694C, 0x69A0694C, 0x69A1684C, -0x68A1684C, 0x68A0684D, 0x67A1674D, 0x67A1674D, 0x67A1684D, 0x68A1674D, 0x67A0674D, 0x67A1674C, -0x66A1674D, 0x67A0694D, 0x6AA16A4C, 0x68A0694D, 0x67A0674D, 0x68A1674C, 0x66A1654C, 0x65A0694D, -0x69A06B4C, 0x69A1634D, 0x64A0664D, 0x69A0684C, 0x67A0664D, 0x69A1644D, 0x68A06A4C, 0x6AA0674D, -0x65A1664D, 0x6EA06D4B, 0x6AA16B4B, 0x6AA06D4C, 0x6AA06A4C, 0x6AA06A4D, 0x68A1654C, 0x66A1684D, -0x64A0694D, 0x69A0654D, 0x61A0644E, 0x64A0634E, 0x639F654E, 0x609E5E50, 0x5D9D5D52, 0x5A9D5B53, -0x2C8D266B, 0x2294675C, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, +0x679F664B, 0x669F674B, 0x669F664B, 0x67921262, 0x14871377, 0x278F336E, 0x34902F6D, 0x2A902B6F, +0x27912B6D, 0x3391346D, 0x35903D6C, 0x3B91336B, 0x3890286E, 0x2A93246D, 0x2694356C, 0x3C90366B, +0x3793326B, 0x32922F6B, 0x2C922F6D, 0x3590396D, 0x2E92356C, 0x2B92396C, 0x3393356B, 0x3C91326B, +0x2B922F6D, 0x3492336B, 0x31922E6C, 0x3292296D, 0x2992306D, 0x3993296C, 0x2C93306C, 0x3492356B, +0x2F902F6D, 0x3391336E, 0x33923A6B, 0x39903E6C, 0x3F923E69, 0x3793326A, 0x2A92246E, 0x2392246E, +0x2493276E, 0x2992276E, 0x2891296F, 0x2A92296E, 0x29922F6D, 0x2E92336C, 0x3094306B, 0x3393346A, +0x36932B6B, 0x2192316E, 0x2B942D6B, 0x2E92316D, 0x3291366C, 0x2E92266E, 0x37912D6D, 0x2A922C6D, +0x3092336B, 0x3292336B, 0x3492386B, 0x3992366A, 0x2F923A6C, 0x3892326B, 0x37923A6B, 0x35922F6B, +0x36923F6B, 0x3893246C, 0x2392356D, 0x3690336D, 0x3491366B, 0x3593366B, 0x33913B6C, 0x34912E6C, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D966759, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, @@ -2678,25 +2678,25 @@ const unsigned long bg[480*640]={ 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, 0x679F674A, -0x679F674A, 0x679F674A, 0x679F674A, 0x6794215C, 0x288D2B6B, 0x5A9D6252, 0x609D6051, 0x5E9E6150, -0x609F624F, 0x659F684E, 0x689F6D4D, 0x69A0694C, 0x68A0644E, 0x65A1614D, 0x67A16E4B, 0x6BA16A4C, -0x68A1684C, 0x69A1674C, 0x68A1674D, 0x65A1684D, 0x6BA0684C, 0x68A1674C, 0x6AA1694C, 0x6BA16C4B, -0x65A1684D, 0x69A1684C, 0x69A1684C, 0x68A1674D, 0x65A1674C, 0x6AA16A4C, 0x64A2664D, 0x67A16D4B, -0x6AA1674C, 0x68A0684D, 0x69A16A4C, 0x6DA16A4B, 0x6DA0704B, 0x6EA16B4B, 0x69A1684C, 0x67A1634D, -0x62A1624E, 0x63A1644D, 0x65A1644D, 0x66A1674D, 0x68A1694D, 0x69A1694C, 0x68A1694C, 0x68A16B4B, -0x68A1624D, 0x67A1674C, 0x67A1674C, 0x66A1674D, 0x6AA06B4C, 0x67A1654D, 0x6BA06A4D, 0x66A1674C, -0x65A2674D, 0x67A1684C, 0x6AA16A4C, 0x6BA1674B, 0x69A16B4C, 0x6AA16A4C, 0x6BA16D4B, 0x68A1684C, -0x6AA1704B, 0x68A2624C, 0x65A06B4D, 0x69A16A4C, 0x69A16A4C, 0x68A16A4C, 0x70A06D4B, 0x69A06A4C, -0x63A1684C, 0x69A06C4C, 0x64A1684D, 0x68A0654D, 0x69A0654D, 0x69A0694C, 0x67A1684C, 0x66A0634D, -0x64A1694D, 0x68A1674C, 0x69A16B4C, 0x68A1684C, 0x6CA16C4B, 0x6BA06A4C, 0x6BA06A4C, 0x6CA06C4C, -0x6CA06B4C, 0x67A1684C, 0x67A0684C, 0x67A0684D, 0x66A1674D, 0x68A0684C, 0x6AA06B4C, 0x69A1674C, -0x66A0694C, 0x6AA16A4C, 0x6AA16A4C, 0x6CA06C4C, 0x6BA16B4C, 0x6CA16C4B, 0x6CA16D4B, 0x6DA16D4B, -0x6DA16C4B, 0x6BA1694B, 0x6AA1694B, 0x69A2694B, 0x69A1684C, 0x67A1674C, 0x66A1654D, 0x65A1664D, -0x68A1674D, 0x66A1664D, 0x67A06A4D, 0x6AA1694C, 0x69A0674D, 0x67A1694C, 0x68A1664C, 0x67A0674D, -0x69A06B4D, 0x6BA0684C, 0x65A1664D, 0x69A0694D, 0x6AA0674C, 0x66A1684C, 0x63A1694D, 0x69A0694C, -0x66A1654D, 0x68A16E4C, 0x6DA16C4B, 0x68A16C4C, 0x6CA16B4C, 0x6AA06B4D, 0x69A0664C, 0x65A1684D, -0x66A1694D, 0x6AA0664D, 0x61A0644E, 0x64A0634E, 0x639F654E, 0x619E5F50, 0x5D9D5E52, 0x5A9D5B53, -0x2B8D266B, 0x2295675C, 0x67A0674A, 0x67A0674A, 0x68A0684A, 0x67A0684A, 0x67A0674A, 0x67A0674A, +0x679F674A, 0x679F674A, 0x679F674A, 0x67962D59, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x2592326C, 0x34903B6C, 0x2891326D, 0x31912B6D, 0x34902A6E, 0x3390346C, 0x2F91326C, 0x2B92256E, +0x2892346D, 0x32922F6B, 0x3392396B, 0x3192316B, 0x3B913A69, 0x3891366B, 0x3890376C, 0x3A903C6C, +0x3A90386C, 0x2D92316C, 0x2E91316D, 0x2D91306E, 0x2C912E6E, 0x3092336C, 0x3691396A, 0x34922E6B, +0x2C91346D, 0x3592376B, 0x3691376B, 0x3A913A6B, 0x3991396B, 0x3A923A6A, 0x3A923D69, 0x3D923D6A, +0x3C923A6A, 0x3892346A, 0x3593336A, 0x34933469, 0x3393316A, 0x2F932E6B, 0x2B93296D, 0x29932B6E, +0x2F922E6D, 0x2B932B6D, 0x2D91346D, 0x3791336B, 0x33902E6E, 0x2D93346B, 0x31932D6B, 0x2D912E6E, +0x3190386D, 0x3892316B, 0x28912B6E, 0x3291326D, 0x36912D6D, 0x2B92336C, 0x2691336D, 0x3391336D, +0x2B91296E, 0x3191406B, 0x3D923B68, 0x32923A6B, 0x3B91396A, 0x3790386D, 0x33922B6C, 0x2A92336C, +0x2D91366C, 0x3A91326C, 0x25912E6E, 0x2F922F6C, 0x3091366B, 0x2F912B6D, 0x2B902C6F, 0x2690296F, +0x13871078, 0x13926761, 0x67A0674A, 0x67A0674A, 0x68A0684A, 0x67A0684A, 0x67A0674A, 0x67A0674A, 0x67A0674A, 0x68A0674A, 0x68A0674A, 0x67A0684A, 0x68A0684A, 0x67A0674A, 0x68A0674A, 0x67A0684A, 0x68A0674A, 0x68A0674A, 0x68A0674A, 0x67A0684A, 0x67A0684A, 0x68A0684A, 0x67A0674A, 0x67A0674A, 0x68A0684A, 0x67A0674A, 0x68A0674A, 0x67A0674A, 0x67A0684A, 0x68A0684A, 0x68A0674A, 0x67A0684A, @@ -2718,25 +2718,25 @@ const unsigned long bg[480*640]={ 0x68A0674A, 0x67A0684A, 0x67A0684A, 0x68A0674A, 0x67A0684A, 0x68A0674A, 0x67A0684A, 0x67A0674A, 0x68A0674A, 0x67A0674A, 0x68A0674A, 0x67A0684A, 0x68A0674A, 0x67A0674A, 0x67A0674A, 0x67A0684A, 0x67A0674A, 0x68A0674A, 0x67A0674A, 0x68A0674A, 0x67A0674A, 0x67A0674A, 0x67A0684A, 0x67A0684A, -0x67A0684A, 0x67A0674A, 0x68A0674A, 0x6795215C, 0x278D2B6B, 0x5C9D6252, 0x619E5F51, 0x609E6150, -0x60A0634F, 0x669F684E, 0x6A9F6C4D, 0x67A06A4C, 0x66A0664E, 0x63A1614D, 0x6AA16C4C, 0x6AA16A4B, -0x68A1684C, 0x67A1674D, 0x67A1674D, 0x68A1674D, 0x6CA0684C, 0x69A1674C, 0x6AA2694C, 0x6AA16E4B, -0x66A1674D, 0x69A1694C, 0x6AA1674C, 0x68A16A4C, 0x66A1674C, 0x68A16C4C, 0x67A1674C, 0x69A26A4B, -0x6EA16B4B, 0x66A1674D, 0x68A0674D, 0x6AA16C4C, 0x6AA16C4C, 0x6EA16E4B, 0x6BA16A4B, 0x69A2694C, -0x68A1674C, 0x67A1684D, 0x68A1694C, 0x69A1694C, 0x69A1694C, 0x69A26A4B, 0x69A2694C, 0x6AA2694B, -0x63A1654E, 0x6AA1664B, 0x67A1684C, 0x66A1684C, 0x6AA16A4C, 0x67A1684D, 0x6BA1694D, 0x67A1684C, -0x66A2664C, 0x68A1684C, 0x6BA16A4C, 0x6AA2684B, 0x69A16B4C, 0x69A16A4C, 0x6CA16D4C, 0x68A2684C, -0x6DA16F4B, 0x66A1644C, 0x67A16B4D, 0x68A16A4C, 0x6BA1684B, 0x69A16F4B, 0x6AA2634C, 0x68A26A4B, -0x61A1654E, 0x67A16A4C, 0x6CA0644D, 0x69A1684C, 0x66A0684D, 0x66A16A4C, 0x68A1664D, 0x67A1664C, -0x63A1634E, 0x68A16A4C, 0x68A1674C, 0x6CA16C4B, 0x69A1684C, 0x6AA16C4B, 0x6CA16C4B, 0x6CA16B4C, -0x6CA1684C, 0x66A1684C, 0x69A0694C, 0x68A1694D, 0x65A0674D, 0x66A0674D, 0x69A26A4C, 0x6BA1684C, -0x67A1674D, 0x68A16A4D, 0x6AA16A4C, 0x69A1684C, 0x69A1694C, 0x69A1694D, 0x68A1694C, 0x68A1674D, -0x67A1684D, 0x68A1684C, 0x68A1674C, 0x68A1674C, 0x67A1674C, 0x67A2674B, 0x67A2674B, 0x67A2674C, -0x65A1654C, 0x67A1674C, 0x67A1674C, 0x69A1694C, 0x69A06A4C, 0x67A0674D, 0x6AA1674B, 0x68A1674C, -0x69A0694D, 0x6CA16B4C, 0x65A1664D, 0x67A06A4C, 0x68A06A4C, 0x67A1694C, 0x66A1654D, 0x6AA1694C, -0x6AA0674D, 0x67A16A4C, 0x6FA16C4B, 0x6BA16A4B, 0x6EA06A4C, 0x6CA06C4C, 0x6BA0684C, 0x63A1694D, -0x67A1694C, 0x6BA0684C, 0x63A0644E, 0x65A0644E, 0x649F644E, 0x639E604F, 0x5E9D5F51, 0x5A9D5C53, -0x2B8D266B, 0x2294695C, 0x699F694A, 0x699F684A, 0x689F694A, 0x699F694A, 0x699F694A, 0x699F694A, +0x67A0684A, 0x67A0674A, 0x68A0674A, 0x67931061, 0x12871378, 0x2D8F3B6D, 0x34912D6D, 0x2E902D6E, +0x2B922F6C, 0x3791386C, 0x3C8F3F6B, 0x33923A6B, 0x2D912F6E, 0x25931F6E, 0x37933C6A, 0x3692366A, +0x3293316C, 0x2F922E6E, 0x2E912E6E, 0x31912E6D, 0x3C91316C, 0x34932D6B, 0x3794346A, 0x36944069, +0x2B932D6D, 0x3593336B, 0x3693306B, 0x3093366B, 0x2B94306C, 0x32933B6A, 0x2D942F6C, 0x3294366A, +0x3F92386A, 0x2B922E6D, 0x31912F6E, 0x35923B6B, 0x37923A6B, 0x40923F69, 0x39943669, 0x3494346A, +0x32932E6C, 0x2D93306D, 0x3193356C, 0x3493346C, 0x3593346B, 0x3493356A, 0x3393336A, 0x36943369, +0x24922B6F, 0x35942D6A, 0x3093306C, 0x2C93316D, 0x3692366C, 0x2F92306C, 0x3892336C, 0x2F93326C, +0x2C942C6B, 0x3293316A, 0x39933769, 0x3694306A, 0x3593396A, 0x3493366A, 0x3A913D6A, 0x3294316B, +0x3D934369, 0x2C93276C, 0x2D92376D, 0x3192376C, 0x3893336A, 0x3491436A, 0x3594266B, 0x3194356A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D966959, 0x699F694A, 0x699F684A, 0x689F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x689F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F684A, 0x699F684A, 0x699F694A, @@ -2758,25 +2758,25 @@ const unsigned long bg[480*640]={ 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F684A, 0x689F694A, 0x689F694A, 0x689F694A, 0x699F684A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, -0x699F694A, 0x699F694A, 0x699F694A, 0x6994215C, 0x268D2B6B, 0x609D6151, 0x619E5D51, 0x609E5F50, -0x63A0654E, 0x699F684E, 0x6D9F684D, 0x68A0694D, 0x68A0654D, 0x61A1654C, 0x6DA16B4C, 0x6BA2684C, -0x6AA1684C, 0x68A16A4C, 0x69A1684C, 0x67A1674D, 0x68A06C4C, 0x6AA1694C, 0x68A2684C, 0x68A16D4B, -0x6AA2664C, 0x68A26C4C, 0x6AA1684C, 0x68A1694C, 0x67A1674C, 0x6AA16B4B, 0x6BA2654C, 0x69A2694B, -0x6DA16D4B, 0x6AA1664C, 0x69A0694C, 0x67A1694D, 0x6AA26A4C, 0x6AA16C4C, 0x6FA16E4B, 0x6DA26B4B, -0x6BA26C4C, 0x6BA16B4C, 0x6BA1694D, 0x68A1694C, 0x6AA16A4C, 0x68A2694C, 0x6AA26B4B, 0x69A1634C, -0x64A16A4D, 0x68A2684C, 0x69A1674C, 0x68A1694D, 0x6AA1694C, 0x68A16A4D, 0x6AA1684C, 0x69A1684C, -0x68A2674C, 0x6AA1694B, 0x6BA16B4B, 0x68A2684C, 0x69A16B4B, 0x69A1694C, 0x6BA16C4C, 0x69A2694B, -0x70A16D4B, 0x66A2654C, 0x67A16B4C, 0x69A16A4C, 0x6BA2684B, 0x6CA16D4B, 0x64A1694C, 0x67A1684C, -0x68A1614D, 0x64A1684C, 0x6BA06C4C, 0x66A16B4C, 0x68A1664C, 0x6AA0674D, 0x6BA06A4C, 0x67A1684C, -0x66A1634D, 0x64A1684D, 0x6BA16A4B, 0x68A1694C, 0x6DA16B4C, 0x6AA2684C, 0x69A2694C, 0x68A2684C, -0x67A1674C, 0x6AA16A4C, 0x6BA0684C, 0x68A06A4C, 0x66A1664D, 0x67A1674D, 0x66A1684C, 0x6AA16B4C, -0x69A1684D, 0x68A1674D, 0x68A1684C, 0x67A1684C, 0x67A1664D, 0x67A1664D, 0x66A1664C, 0x67A1674D, -0x66A1674D, 0x67A1684D, 0x68A1684C, 0x67A1674C, 0x68A1674C, 0x68A1684C, 0x68A1674C, 0x67A2664C, -0x66A2674C, 0x66A2664C, 0x66A1674D, 0x69A16A4C, 0x6AA1694C, 0x6BA1694D, 0x67A26A4C, 0x68A16A4C, -0x68A16A4C, 0x6BA06B4C, 0x67A2654C, 0x65A1694D, 0x69A16B4C, 0x69A1664D, 0x6AA1654C, 0x67A16B4C, -0x69A06A4D, 0x67A1664D, 0x69A16E4B, 0x6CA16B4B, 0x6DA16C4C, 0x6CA06D4B, 0x6CA06A4C, 0x63A1674D, -0x68A1694D, 0x6AA16A4C, 0x66A0644E, 0x64A0654E, 0x659F644E, 0x659F604F, 0x5F9D6051, 0x5B9D5D52, -0x2C8D276B, 0x21956A5C, 0x69A06A49, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x6AA06949, 0x69A0694A, +0x699F694A, 0x699F694A, 0x699F694A, 0x69962D59, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x31921F6F, 0x2893336B, 0x38913A6B, 0x2B92386C, 0x32932B6C, 0x35902D6D, 0x3891356C, 0x2D92326D, +0x2C92246E, 0x2792326D, 0x39943569, 0x3193346B, 0x3E92396A, 0x3694326A, 0x3394336A, 0x3293326A, +0x30942F6B, 0x3592376A, 0x3991306C, 0x3091366C, 0x2B912B6F, 0x2F912E6D, 0x2D93306B, 0x3793396A, +0x3392306C, 0x30922D6D, 0x3192306C, 0x2F92306C, 0x2D932C6D, 0x2D932C6D, 0x2D932C6C, 0x2E932D6C, +0x2C932E6D, 0x2F92306D, 0x3092326C, 0x2F932F6C, 0x31922E6C, 0x3093316C, 0x3193306C, 0x2F942E6A, +0x2D942F6B, 0x2D942A6B, 0x2C932E6C, 0x3493366B, 0x3892356B, 0x3890346D, 0x2E93366B, 0x3393356B, +0x3091376C, 0x3691386C, 0x2D942A6C, 0x2B92336D, 0x3592386A, 0x32922C6D, 0x3793286B, 0x2F92386B, +0x3391346C, 0x2E922C6E, 0x3592406A, 0x3B933969, 0x3D913A6B, 0x3A913D6B, 0x3C91376B, 0x2594316D, +0x3292366B, 0x3B923A6A, 0x32922D6D, 0x3093326B, 0x3592346B, 0x38912E6C, 0x2D90326E, 0x27902E6F, +0x15861378, 0x11926A61, 0x69A06A49, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x6AA06949, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x6AA06A49, 0x69A06A49, 0x69A06A49, 0x6AA06A49, 0x6AA06949, 0x69A06A49, 0x69A06A49, 0x69A0694A, 0x69A0694A, 0x6AA06949, 0x6AA06949, 0x6AA06A49, 0x69A06A49, 0x69A0694A, 0x6AA06949, 0x6AA06949, 0x69A06A49, 0x69A06A49, 0x69A0694A, 0x69A06A49, @@ -2798,25 +2798,25 @@ const unsigned long bg[480*640]={ 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A06A49, 0x6AA06949, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A06A49, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A0694A, 0x69A06A49, 0x69A0694A, 0x69A06A49, 0x6AA06949, 0x69A06A49, 0x69A0694A, 0x69A06A49, 0x69A06A49, -0x69A0694A, 0x69A0694A, 0x6AA06949, 0x6A95215C, 0x278D2C6B, 0x619D6051, 0x609E5F51, 0x609E5F50, -0x659F694E, 0x6AA06A4D, 0x6BA0674D, 0x6BA0694C, 0x69A1634D, 0x61A16A4D, 0x6AA1694C, 0x68A1684C, -0x68A1694C, 0x6DA16F4B, 0x6EA16C4B, 0x6BA1684B, 0x69A16A4C, 0x6CA16A4C, 0x67A1694B, 0x68A26C4B, -0x6CA2664B, 0x66A26C4C, 0x6BA2694B, 0x69A2684C, 0x69A2684C, 0x69A26A4C, 0x6BA1684C, 0x68A2684C, -0x69A26E4B, 0x6CA16A4B, 0x67A1694C, 0x67A1664D, 0x68A16A4C, 0x6BA2694B, 0x6AA26C4B, 0x6CA26D4B, -0x6CA16B4B, 0x6AA2694C, 0x68A2694C, 0x6BA26B4B, 0x69A2694B, 0x69A26B4B, 0x6CA2694B, 0x64A1674D, -0x6BA16A4B, 0x69A16A4C, 0x68A2694C, 0x68A1694D, 0x69A1684C, 0x6BA16C4C, 0x6BA16D4C, 0x69A2674C, -0x65A2654C, 0x67A26C4B, 0x6BA16A4B, 0x69A2694B, 0x6AA26A4C, 0x69A16A4C, 0x6CA16B4C, 0x6AA2684B, -0x71A16C4A, 0x66A2664C, 0x69A16B4C, 0x6BA26B4B, 0x6BA2684B, 0x6EA16C4B, 0x63A1694C, 0x63A2634C, -0x6CA1674C, 0x61A2664D, 0x67A16B4B, 0x6CA0664C, 0x6AA2684C, 0x67A06B4C, 0x67A06B4C, 0x6BA1674D, -0x69A1664D, 0x63A1664D, 0x69A16D4C, 0x6AA2684B, 0x66A16A4C, 0x6CA16C4B, 0x6BA26A4B, 0x6BA26C4B, -0x6BA16B4B, 0x6CA16A4C, 0x6CA0694C, 0x68A1694C, 0x6AA1654D, 0x66A1674C, 0x68A1674C, 0x68A2694C, -0x6AA16A4C, 0x6AA1694C, 0x68A1684C, 0x67A1674C, 0x67A1664D, 0x66A1654C, 0x66A1664C, 0x66A1664D, -0x67A1674C, 0x68A1674D, 0x67A2694D, 0x69A16A4C, 0x6BA16C4B, 0x6CA16B4B, 0x69A16A4C, 0x69A1694C, -0x6AA2684B, 0x67A2674B, 0x66A2644C, 0x67A1684C, 0x6AA16C4C, 0x6AA06C4C, 0x67A1674D, 0x6AA26A4B, -0x69A16A4C, 0x69A16C4C, 0x6AA2654C, 0x65A1684D, 0x6AA16A4C, 0x6CA1684C, 0x67A16B4C, 0x64A16A4C, -0x6BA1684C, 0x6BA1684D, 0x67A16C4C, 0x6EA16D4B, 0x6DA16E4B, 0x6AA06C4C, 0x6DA06B4C, 0x66A1654D, -0x69A1684D, 0x69A16A4C, 0x68A0644D, 0x64A0654E, 0x66A0644E, 0x669F624F, 0x5F9E6151, 0x5C9E5E52, -0x2C8D276B, 0x21956B5C, 0x6BA06A49, 0x6BA06B49, 0x6AA06B49, 0x6BA06B49, 0x6BA06B49, 0x6AA06A49, +0x69A0694A, 0x69A0694A, 0x6AA06949, 0x6A930F61, 0x12871578, 0x3990356C, 0x32912F6D, 0x2E92296D, +0x37913E6B, 0x3F913D6A, 0x3F92336B, 0x3D91386B, 0x3693266C, 0x2293386C, 0x3892356B, 0x3193336A, +0x3293356B, 0x3E934268, 0x40943A68, 0x3894326A, 0x3592356C, 0x3A92356B, 0x3093346A, 0x31953969, +0x3A942B6A, 0x2C933B6B, 0x3894326A, 0x34942F6B, 0x31942F6C, 0x3394366A, 0x39932F6A, 0x3095326A, +0x34944068, 0x3B93366A, 0x3092336C, 0x2D932D6D, 0x3092366C, 0x38953469, 0x35943A6A, 0x3B943C69, +0x3A933869, 0x3794326B, 0x3194346B, 0x38943869, 0x3495346A, 0x34953869, 0x3A963468, 0x28932E6E, +0x39943669, 0x3493366B, 0x3194326C, 0x3092326D, 0x3493326C, 0x38923A6B, 0x38933D6B, 0x34942E6B, +0x29952A6C, 0x2E943A6A, 0x39943669, 0x33943369, 0x3694376A, 0x3593356B, 0x3B92396A, 0x3695316A, +0x47943C67, 0x2E942C6B, 0x3292396C, 0x38933869, 0x39942F6A, 0x3F933968, 0x2493356D, 0x2595246E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D966B58, 0x6BA06A49, 0x6BA06B49, 0x6AA06B49, 0x6BA06B49, 0x6BA06B49, 0x6AA06A49, 0x6BA06B49, 0x6AA06B49, 0x6BA06B49, 0x6BA06A49, 0x6AA06B49, 0x6AA06A49, 0x6BA06B49, 0x6BA06B49, 0x6BA06A49, 0x6AA06B49, 0x6AA06B49, 0x6AA06B49, 0x6AA06A49, 0x6AA06A49, 0x6BA06A49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06A49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, @@ -2838,25 +2838,25 @@ const unsigned long bg[480*640]={ 0x6BA06A49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6AA06B49, 0x6AA06A49, 0x6BA06B49, 0x6BA06B49, 0x6AA06A49, 0x6BA06B49, 0x6AA06A49, 0x6BA06B49, 0x6AA06B49, 0x6BA06B49, 0x6BA06A49, 0x6AA06B49, 0x6AA06A49, 0x6BA06A49, 0x6BA06A49, 0x6BA06B49, 0x6AA06A49, -0x6AA06A49, 0x6BA06B49, 0x6BA06B49, 0x6A95215C, 0x278D2F6A, 0x5F9D6251, 0x5E9E6151, 0x5D9F6350, -0x679F6D4D, 0x6A9F6D4D, 0x66A16B4C, 0x6BA06A4C, 0x65A1624D, 0x69A16B4C, 0x6AA16A4B, 0x6AA2684C, -0x6BA1704B, 0x72A1714B, 0x6DA16D4C, 0x6DA16C4B, 0x67A16A4C, 0x6EA16A4C, 0x69A16A4B, 0x67A26B4B, -0x6DA2674B, 0x68A16B4C, 0x6CA16A4B, 0x68A2694C, 0x69A2684C, 0x6AA26A4B, 0x6BA16B4C, 0x66A2694C, -0x6AA26A4B, 0x6FA16D4B, 0x6CA1674C, 0x68A1684D, 0x67A1684D, 0x6AA16A4C, 0x68A2684B, 0x6AA26A4B, -0x6AA26B4B, 0x6BA26C4B, 0x6CA26C4B, 0x6AA2694B, 0x68A26B4B, 0x6CA26C4B, 0x67A1634D, 0x69A16A4C, -0x69A26A4B, 0x69A1684C, 0x69A2694C, 0x68A1684D, 0x69A16C4C, 0x6CA16B4C, 0x6BA2684C, 0x67A2674C, -0x67A2664C, 0x65A2674B, 0x6BA26C4B, 0x6AA26A4B, 0x6AA26B4B, 0x6AA26A4C, 0x6CA16B4C, 0x6CA2684B, -0x70A26C4A, 0x68A2674C, 0x6AA16B4C, 0x6CA16C4B, 0x6AA2684B, 0x6DA16A4B, 0x64A2664C, 0x6CA3694A, -0x6DA16C4B, 0x66A1624D, 0x66A2694C, 0x6BA16B4B, 0x67A16B4C, 0x68A2654C, 0x6BA0694C, 0x6BA06D4C, -0x6AA16A4C, 0x68A1654C, 0x67A1684C, 0x6CA26C4B, 0x68A3664B, 0x67A16A4C, 0x6EA16A4C, 0x6CA26D4B, -0x6EA16E4B, 0x6EA16C4B, 0x6DA0694C, 0x6AA1684C, 0x6BA1694D, 0x65A1654D, 0x65A2674D, 0x68A2674C, -0x67A2674C, 0x67A2684C, 0x67A1674C, 0x67A1664C, 0x66A1664C, 0x67A1684C, 0x69A2684C, 0x67A1684C, -0x68A2694B, 0x6AA2684B, 0x67A2684C, 0x69A2694B, 0x69A26A4B, 0x6AA26C4B, 0x6DA26D4B, 0x6CA16C4B, -0x6CA16B4B, 0x6AA2684C, 0x66A2674C, 0x66A2664C, 0x68A26A4C, 0x6CA1694C, 0x6CA0654D, 0x68A2694B, -0x6BA1694C, 0x6AA16B4C, 0x6CA1684C, 0x65A1674D, 0x6AA16C4C, 0x6AA16B4C, 0x67A1694C, 0x69A2654C, -0x6BA16C4B, 0x69A16B4C, 0x68A1684C, 0x6DA16E4B, 0x6EA16E4B, 0x6CA16B4B, 0x6EA06D4C, 0x69A1654C, -0x69A1664D, 0x69A16A4C, 0x69A0644D, 0x64A0654E, 0x669F654D, 0x669F634F, 0x5F9E6350, 0x5F9D5E51, -0x2C8D276B, 0x21956B5B, 0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6CA16B48, +0x6AA06A49, 0x6BA06B49, 0x6BA06B49, 0x6A962D58, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3D933B69, 0x2C92226F, 0x2A94346B, 0x39923A6A, 0x2D92386B, 0x31942A6C, 0x3A91336C, 0x38913D6B, +0x3692356B, 0x31932A6C, 0x2E92326D, 0x3B943A68, 0x32952E69, 0x2F93366B, 0x4092366A, 0x3B943D68, +0x41934068, 0x3F923B6A, 0x3D91346C, 0x3693316C, 0x3892346C, 0x2A92296F, 0x28932E6C, 0x31942E6B, +0x2C942D6C, 0x2F94326B, 0x2F932E6C, 0x2E932D6C, 0x2D932D6C, 0x3093326B, 0x3493316A, 0x3094316B, +0x3294336A, 0x35943169, 0x2F943269, 0x34953469, 0x33963568, 0x37953A69, 0x3C943C69, 0x3C933A69, +0x3A93396A, 0x3694326A, 0x2D952E6A, 0x2C942B6B, 0x3193376A, 0x3C93356A, 0x3A922B6E, 0x3195336A, +0x3893326B, 0x3692386B, 0x3B94306A, 0x2A932F6D, 0x37923B6A, 0x3793386B, 0x3092346C, 0x33942A6B, +0x39933C6A, 0x35933A6B, 0x3292316C, 0x3E924069, 0x40933F69, 0x3A93386A, 0x40903D6B, 0x3693296C, +0x3493306C, 0x38943C69, 0x37932E6B, 0x3093316B, 0x3792366A, 0x3A91356B, 0x2C90396C, 0x3090316D, +0x15871377, 0x11936B60, 0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16C48, 0x6BA16B48, 0x6CA16B48, 0x6BA16B48, 0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6CA16B48, 0x6BA16B48, 0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, @@ -2878,25 +2878,25 @@ const unsigned long bg[480*640]={ 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6CA16B48, 0x6BA16B48, 0x6BA16C48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6CA16C48, 0x6BA16B48, -0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6B95215B, 0x298D2F6A, 0x609E5F51, 0x5F9D5C52, 0x5E9F6650, -0x6B9F6C4D, 0x6C9F684D, 0x68A06E4C, 0x6BA0674D, 0x63A2684D, 0x6DA16A4C, 0x69A26A4C, 0x68A26D4B, -0x71A16F4B, 0x6BA26A4C, 0x6CA16C4C, 0x6BA16D4C, 0x6BA26A4C, 0x6CA26C4B, 0x6BA16A4B, 0x66A3694B, -0x6CA2684A, 0x69A16B4C, 0x6CA16B4B, 0x67A26B4B, 0x69A2674C, 0x6AA26A4C, 0x6CA16C4B, 0x68A2694C, -0x68A26C4B, 0x6CA16F4B, 0x6CA26B4B, 0x69A1684C, 0x68A1694C, 0x69A26A4C, 0x6CA16B4B, 0x69A2674B, -0x67A3674B, 0x68A3694B, 0x69A2684B, 0x68A26B4B, 0x6CA26B4A, 0x67A2634C, 0x67A16C4C, 0x68A26B4B, -0x6BA2694C, 0x69A26A4C, 0x69A1684C, 0x69A2694C, 0x6CA16B4C, 0x6CA2694C, 0x69A2684C, 0x65A2654D, -0x66A2684C, 0x68A2674C, 0x6AA26C4B, 0x6BA26C4B, 0x6AA26B4B, 0x6AA2684B, 0x6CA26B4C, 0x6CA2684B, -0x6FA26C4A, 0x6BA2684B, 0x6CA16B4C, 0x6CA26D4A, 0x69A2684C, 0x6EA26A4B, 0x69A2634C, 0x6EA1644C, -0x6FA16D4B, 0x6CA1664C, 0x64A2674C, 0x69A26B4B, 0x6CA1674C, 0x6AA2694B, 0x65A16B4C, 0x6AA16B4C, -0x6DA06B4C, 0x6BA26A4C, 0x66A1674D, 0x69A16C4C, 0x6EA26C4A, 0x69A2684B, 0x68A16B4C, 0x6EA16E4B, -0x6BA16B4C, 0x6DA16E4C, 0x6FA06A4C, 0x6AA1694C, 0x6AA16D4C, 0x6EA16A4C, 0x66A1654D, 0x66A2664C, -0x66A2674C, 0x67A2674C, 0x67A2684C, 0x67A1674C, 0x68A2694C, 0x6AA16C4C, 0x6BA16D4B, 0x6EA16E4B, -0x6EA16E4C, 0x6DA16E4B, 0x6FA16F4B, 0x6EA16F4B, 0x6EA16D4B, 0x6CA26B4B, 0x6BA26B4A, 0x6BA26C4B, -0x6BA26C4C, 0x6BA26A4C, 0x69A2674C, 0x67A2674C, 0x65A2684C, 0x6AA16C4B, 0x69A16B4C, 0x65A1694D, -0x6AA26A4C, 0x69A16A4C, 0x6DA16B4B, 0x65A1674D, 0x69A16E4B, 0x6BA26D4B, 0x69A1674C, 0x6AA2674C, -0x67A16D4C, 0x6DA1694B, 0x6BA2674C, 0x68A16F4C, 0x6FA1704A, 0x6EA16C4B, 0x6FA16F4C, 0x6BA1664C, -0x67A1664D, 0x6AA26A4C, 0x6AA0664D, 0x64A0654E, 0x649F664E, 0x659F644F, 0x5F9E6250, 0x609E5E51, -0x2C8D276B, 0x22956C5B, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, +0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6B931060, 0x16861C77, 0x3992306C, 0x2F90276F, 0x29923A6C, +0x44914469, 0x4591396A, 0x38934369, 0x3C92326C, 0x2794316C, 0x3F93386A, 0x3494376A, 0x31953C69, +0x48934368, 0x3994376B, 0x3A933A6A, 0x3A923E6A, 0x3993376A, 0x3C933B69, 0x3894366A, 0x2E963469, +0x3C953267, 0x3294396B, 0x3A943869, 0x2E95386A, 0x32942D6C, 0x35943769, 0x3A933C6A, 0x3294346A, +0x32953A68, 0x39944368, 0x3A943969, 0x3393316B, 0x3393336B, 0x3394366B, 0x3A943969, 0x33963069, +0x2F96306A, 0x31963468, 0x33963169, 0x31963768, 0x3B963867, 0x2F95256C, 0x2E933A6C, 0x33953869, +0x3894336B, 0x3395366B, 0x3294326B, 0x3394326B, 0x3B93386B, 0x3C953469, 0x3295306B, 0x2A95296E, +0x2B94316C, 0x30952F6B, 0x36963A68, 0x38953B68, 0x36953869, 0x3595336A, 0x3B93386A, 0x3A953369, +0x43953B67, 0x3895306A, 0x3B94386A, 0x3A943E68, 0x3494316A, 0x40943768, 0x3494236C, 0x4093286B, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D976C58, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, @@ -2918,25 +2918,25 @@ const unsigned long bg[480*640]={ 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, -0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6C95225B, 0x2A8D306A, 0x609E5F51, 0x5D9E5C51, 0x639F694E, -0x6D9F6C4D, 0x6CA0674D, 0x6DA06B4C, 0x6AA1634D, 0x66A26C4C, 0x69A16B4C, 0x6BA2674B, 0x6EA2704B, -0x6BA16B4C, 0x6AA1694C, 0x69A1684D, 0x69A16A4C, 0x6DA26A4B, 0x6CA26E4B, 0x6CA26C4B, 0x67A3694B, -0x6CA2694B, 0x69A26B4C, 0x6CA26C4B, 0x67A26E4B, 0x6AA2694C, 0x69A2694C, 0x6CA26D4B, 0x6DA2674B, -0x6AA36A4B, 0x6AA26E4B, 0x6DA26C4B, 0x6CA26A4B, 0x67A2694C, 0x6AA2694C, 0x6AA26B4B, 0x6CA26D4B, -0x6CA26B4B, 0x6AA26B4B, 0x6BA26C4A, 0x6CA26A4A, 0x67A2634C, 0x65A26B4C, 0x6AA2684B, 0x6DA26B4B, -0x67A26A4C, 0x69A26A4B, 0x6AA2684C, 0x69A16C4B, 0x6CA26B4B, 0x68A2674C, 0x66A2644D, 0x62A2634C, -0x64A2654C, 0x67A2694C, 0x69A26C4B, 0x6CA26B4A, 0x6DA26A4B, 0x6AA26A4B, 0x6DA26B4B, 0x6DA2694B, -0x6EA26C4B, 0x6CA2694B, 0x6CA26C4B, 0x6AA26C4B, 0x6AA2694B, 0x6DA26A4B, 0x6AA2654C, 0x68A3694B, -0x69A26E4A, 0x6DA16C4B, 0x66A1634D, 0x66A2694B, 0x6BA16C4B, 0x67A26B4C, 0x68A2664B, 0x6AA16B4C, -0x6CA0704B, 0x6BA16D4C, 0x6DA2694B, 0x67A1694D, 0x6BA26E4B, 0x6EA26B4B, 0x6AA2694B, 0x6BA16C4C, -0x6EA0704B, 0x6CA06C4C, 0x6DA06A4C, 0x6AA1694C, 0x69A16A4C, 0x6DA16F4B, 0x70A16E4C, 0x6CA16A4C, -0x67A1674D, 0x67A1684D, 0x69A16A4D, 0x69A06B4D, 0x6BA06C4C, 0x6DA16E4C, 0x6EA16E4B, 0x6EA16D4B, -0x6CA26A4B, 0x6BA26A4B, 0x6BA26C4C, 0x6BA26A4C, 0x6AA16B4C, 0x6CA16E4C, 0x6EA16E4B, 0x6CA2694B, -0x6AA26B4B, 0x6CA26C4B, 0x6CA26A4B, 0x68A2674B, 0x67A2644C, 0x67A26A4B, 0x6AA16A4C, 0x6BA1684C, -0x6AA26C4B, 0x6AA16B4C, 0x6CA16C4B, 0x67A2674C, 0x67A16E4C, 0x6EA16C4B, 0x6AA1694C, 0x67A26A4C, -0x67A2664C, 0x6EA16E4B, 0x69A26B4C, 0x68A16B4C, 0x6FA1714A, 0x6FA16D4B, 0x6EA1704C, 0x6EA1694C, -0x66A2684D, 0x69A26A4C, 0x6AA1694C, 0x62A1644E, 0x649F674E, 0x659F674F, 0x619E6250, 0x629D5D51, -0x2D8D286A, 0x22956D5B, 0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16C48, +0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6C972D58, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x33953E67, 0x3D943A69, 0x2C94266D, 0x2E94336A, 0x37943A69, 0x2F93386B, 0x32952C6A, 0x3692396B, +0x3A92436A, 0x38923D6B, 0x3D94326A, 0x2E93326D, 0x39933F6A, 0x3E953767, 0x36953369, 0x38933B6A, +0x3F91446A, 0x3C913B6B, 0x3D91376B, 0x3792356B, 0x3593366B, 0x3D92426A, 0x4591406A, 0x3B92366B, +0x30922E6E, 0x2F92306D, 0x3492356D, 0x3291366D, 0x39913C6B, 0x3E923F6A, 0x3E933F69, 0x3F933D69, +0x3A943569, 0x3894366A, 0x38943B6A, 0x3993376A, 0x3792396B, 0x3B92406A, 0x40933F68, 0x3A953468, +0x35963868, 0x3B943C69, 0x3B943769, 0x3395306A, 0x2E96286B, 0x3095356A, 0x3693376B, 0x3792306C, +0x35943B69, 0x3693396B, 0x3B943B69, 0x2E952E6B, 0x2F923F6C, 0x41943A69, 0x3893326B, 0x2D94376B, +0x2E942C6C, 0x40923F69, 0x3494386A, 0x3093386C, 0x43934768, 0x43933D68, 0x4091456B, 0x4293366A, +0x2D94336C, 0x38953A68, 0x3B933869, 0x2A942F6C, 0x33933B6A, 0x38913E6B, 0x3292386B, 0x38912E6C, +0x16881377, 0x13936D60, 0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16C48, 0x6DA16D48, 0x6CA16D48, 0x6CA16D48, 0x6DA16C48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16C48, 0x6CA16C48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, 0x6CA16D48, 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, @@ -2958,25 +2958,25 @@ const unsigned long bg[480*640]={ 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, 0x6CA16C48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16C48, 0x6DA16D48, 0x6DA16D48, 0x6DA16C48, 0x6CA16D48, 0x6DA16D48, -0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6D95235B, 0x2A8D2F6A, 0x5E9E5F51, 0x5C9F6051, 0x699F6C4E, -0x6C9F6D4D, 0x65A06B4D, 0x6CA06C4D, 0x63A1644D, 0x6AA16B4C, 0x69A26D4B, 0x69A36F4A, 0x6FA16C4B, -0x6CA26B4C, 0x6AA2694C, 0x68A1684C, 0x67A2684C, 0x6DA16D4B, 0x6EA1704B, 0x6CA26C4B, 0x67A3694B, -0x6CA26A4A, 0x69A26A4B, 0x6CA16C4B, 0x67A26E4B, 0x6BA26A4C, 0x68A2694C, 0x6CA26E4B, 0x6EA2694B, -0x6AA2684B, 0x6DA36A4A, 0x6EA16E4B, 0x6CA26A4B, 0x6AA2674C, 0x66A2674C, 0x69A26A4B, 0x6BA26C4B, -0x6DA26E4A, 0x6FA26D4A, 0x6CA26B4B, 0x67A3654B, 0x65A2694C, 0x6AA2684B, 0x6CA26C4B, 0x69A2674C, -0x6AA26B4C, 0x6DA26B4C, 0x6AA26F4B, 0x6EA26E4B, 0x6BA2674B, 0x66A2664B, 0x68A26A4B, 0x6CA26C4B, -0x6CA26A4B, 0x69A2684C, 0x69A2694B, 0x6DA26C4A, 0x6CA26A4B, 0x6AA26A4C, 0x6CA26F4A, 0x6DA26B4B, -0x6BA36E4A, 0x6CA2694B, 0x6CA26F4B, 0x68A26C4B, 0x6AA26A4B, 0x6BA2704A, 0x6AA2684B, 0x69A26A4B, -0x69A36A4A, 0x6FA16B4B, 0x6BA2664C, 0x64A2674B, 0x6BA26C4B, 0x6EA1684C, 0x6BA16A4B, 0x68A16A4C, -0x6AA26B4B, 0x6FA16B4C, 0x6CA26E4B, 0x6AA2694C, 0x6AA16B4C, 0x6EA16E4B, 0x6DA26B4B, 0x6BA26A4B, -0x6AA16B4C, 0x6DA16E4C, 0x6EA16A4C, 0x6AA2694C, 0x68A2684C, 0x68A2694C, 0x6AA26A4C, 0x6CA26C4B, -0x6CA16C4B, 0x6CA16D4B, 0x6DA16E4B, 0x6DA26C4B, 0x6BA26B4B, 0x69A2694C, 0x6AA26A4B, 0x68A2684B, -0x69A2684B, 0x68A2694B, 0x6AA26A4B, 0x6AA2694B, 0x68A2684B, 0x68A26A4C, 0x6AA16B4C, 0x6DA16D4B, -0x6CA26C4B, 0x6BA36A4A, 0x6BA26A4B, 0x6AA2684C, 0x67A2664B, 0x64A3674B, 0x6BA2694C, 0x6DA0694C, -0x6AA26C4B, 0x6CA16B4C, 0x6BA16D4B, 0x6AA2674B, 0x68A16C4C, 0x70A16B4B, 0x6DA1694B, 0x6AA2694B, -0x6BA2674B, 0x67A26E4C, 0x6EA2694B, 0x6AA1684C, 0x6FA16F4B, 0x70A16F4A, 0x6DA1704B, 0x6DA16D4C, -0x66A26A4C, 0x68A26B4C, 0x6BA1694C, 0x64A1624E, 0x65A0674E, 0x659F674E, 0x639F614F, 0x639D5D51, -0x2E8D286A, 0x22956E5B, 0x6DA16E47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, +0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6D931560, 0x1A871D76, 0x3191326D, 0x2893326C, 0x42914A69, +0x46914768, 0x34944168, 0x40923F6B, 0x29952B6C, 0x3A933B6A, 0x35943F69, 0x35964368, 0x43943B69, +0x3B94396B, 0x3694346A, 0x3194316B, 0x2D95316B, 0x3D933D69, 0x3F934668, 0x3C943B69, 0x2E963469, +0x3A963667, 0x3495346A, 0x3A943A6A, 0x2D963E69, 0x3895356A, 0x3195356A, 0x3B953F68, 0x3F963368, +0x35963269, 0x3D963767, 0x3F944167, 0x3A953668, 0x36942D6A, 0x2B952E6B, 0x34953568, 0x38953B68, +0x3E954066, 0x42953E66, 0x3A963767, 0x2F962A6B, 0x2A94326D, 0x37953269, 0x3A953B68, 0x34952E6A, +0x3695386A, 0x3E94396A, 0x3794416A, 0x3F954069, 0x38962F6A, 0x2C962D6B, 0x3395376A, 0x3A943A6A, +0x3A94376A, 0x3495306A, 0x3295336A, 0x3D963A67, 0x3A963768, 0x36953869, 0x3B954168, 0x3C953768, +0x38964167, 0x39963568, 0x3A954268, 0x31953A6A, 0x37953769, 0x39944568, 0x3795326A, 0x33963568, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D976E57, 0x6DA16E47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6EA16D47, 0x6EA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16E47, 0x6EA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16E47, 0x6EA16D47, 0x6DA16D47, 0x6DA16E47, 0x6DA16E47, 0x6DA16D47, 0x6EA16E47, 0x6DA16D47, 0x6DA16D47, @@ -2998,25 +2998,25 @@ const unsigned long bg[480*640]={ 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16E47, 0x6EA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6EA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6EA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6EA16E47, 0x6EA16D47, 0x6EA16D47, 0x6DA16D47, -0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6E95235B, 0x2A8D2E6A, 0x5F9E5C51, 0x619E664F, 0x6C9E6B4E, -0x6D9F654E, 0x6AA06C4C, 0x6AA0644E, 0x64A26A4C, 0x6BA16A4C, 0x6CA26A4C, 0x70A2704A, 0x6EA26D4B, -0x6EA16F4B, 0x6FA26D4B, 0x6BA2684B, 0x66A2684C, 0x69A26F4C, 0x6EA2704B, 0x6EA26D4B, 0x68A26A4B, -0x6CA36C4A, 0x6AA2684B, 0x6CA26C4B, 0x67A26D4B, 0x6BA2694B, 0x69A2684B, 0x6AA26F4A, 0x6EA26C4A, -0x67A26B4B, 0x68A36D4A, 0x69A26F4A, 0x6FA16D4B, 0x6AA3694A, 0x6AA2694C, 0x67A2684C, 0x68A2694C, -0x6AA26A4B, 0x6AA2694B, 0x68A2684B, 0x69A26A4C, 0x6AA3684B, 0x6BA36D4A, 0x69A3674B, 0x69A26A4C, -0x6EA16F4B, 0x6EA16F4B, 0x72A26F4A, 0x6EA2694B, 0x69A26C4B, 0x6EA26D4B, 0x6BA26A4B, 0x6CA36C4B, -0x6CA26E4B, 0x6FA26D4B, 0x69A3694B, 0x69A36C4A, 0x6CA26E4A, 0x6AA36B4B, 0x6AA26F4A, 0x6CA26D4B, -0x6AA26E4B, 0x6CA26C4B, 0x6AA26F4B, 0x6AA26A4B, 0x6CA26B4B, 0x6AA36B4B, 0x70A26B4B, 0x68A2684C, -0x6AA2694B, 0x6AA26E4B, 0x6BA26B4B, 0x66A2654C, 0x68A3694B, 0x6CA16D4B, 0x69A16A4C, 0x6BA2694B, -0x6AA26C4B, 0x6DA16F4B, 0x6CA16B4C, 0x6FA16E4B, 0x6AA1694C, 0x6DA16E4B, 0x6EA26D4B, 0x6BA26B4A, -0x6AA2694C, 0x6BA16E4C, 0x6DA16C4B, 0x69A1694C, 0x69A2684D, 0x68A1694D, 0x69A2694D, 0x69A1684C, -0x68A1694C, 0x6AA16A4C, 0x6AA2694B, 0x6AA26A4B, 0x6BA26A4A, 0x6BA26C4B, 0x6CA26C4A, 0x6CA26D4A, -0x6DA26D4A, 0x6CA26D4B, 0x6DA16D4B, 0x6DA16E4B, 0x6EA16D4B, 0x6CA26B4B, 0x6AA3694B, 0x69A16A4C, -0x6BA26C4B, 0x6CA26C4B, 0x6AA3694B, 0x6AA26C4B, 0x6AA2684C, 0x66A3654B, 0x68A26D4B, 0x6AA16B4C, -0x69A26B4B, 0x6CA26C4B, 0x6CA16D4B, 0x6DA3654B, 0x68A16A4C, 0x6FA16C4B, 0x6BA16A4C, 0x69A2684C, -0x6AA26C4B, 0x67A2664C, 0x6FA16F4B, 0x6BA26A4C, 0x6BA16E4C, 0x71A2714A, 0x6DA16F4B, 0x6EA1704C, -0x68A2684C, 0x67A16C4C, 0x6BA16A4C, 0x65A0624E, 0x64A0664D, 0x669F664E, 0x649F6150, 0x649D5E51, -0x2D8D286A, 0x22956E5A, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, +0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6E972D57, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x35963468, 0x35953F68, 0x39953869, 0x2C952A6C, 0x31963569, 0x39953E68, 0x3394366B, 0x37963368, +0x36943B6A, 0x3D934468, 0x3B93396A, 0x43943F68, 0x3594346B, 0x3E933F69, 0x40943D67, 0x39953868, +0x3694336A, 0x39923F6A, 0x3E933A6A, 0x3494356B, 0x3394316C, 0x3194326D, 0x3494336C, 0x3394326C, +0x3193346C, 0x3693376A, 0x36943469, 0x36953668, 0x37953767, 0x38963A67, 0x3A963C67, 0x3C963D67, +0x3D953E67, 0x3B953C68, 0x3E943E68, 0x3E933F69, 0x3F933E69, 0x3B94386A, 0x36963569, 0x3394376B, +0x39943A69, 0x3A963967, 0x37963468, 0x37953B69, 0x3595306A, 0x2C97286B, 0x32943C69, 0x3593376C, +0x3194396A, 0x3C943B6A, 0x3A943E69, 0x3C962A69, 0x3294376B, 0x44933B69, 0x3893386B, 0x3395316A, +0x37953B69, 0x2E952C6B, 0x44934168, 0x3894366A, 0x3A93416A, 0x49944766, 0x3D944369, 0x42924669, +0x3394336B, 0x32953F69, 0x3D943E68, 0x33942C6B, 0x33943869, 0x3D923D69, 0x3993336A, 0x3D91316C, +0x17881577, 0x13936E5F, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, @@ -3038,25 +3038,25 @@ const unsigned long bg[480*640]={ 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E47, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E47, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, -0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6E95235B, 0x298E2E6A, 0x5C9E5F52, 0x669E6B4F, 0x6C9E6D4E, -0x66A0684D, 0x6C9F6A4D, 0x63A1644D, 0x69A16A4C, 0x68A26E4B, 0x6CA2724B, 0x6FA16D4B, 0x6DA26F4B, -0x70A26F4A, 0x70A2704B, 0x6FA26D4B, 0x66A2684B, 0x69A26C4C, 0x6EA1714A, 0x70A26F4B, 0x6AA36A4B, -0x6DA36D4A, 0x6AA2684B, 0x6EA26D4B, 0x68A36D4A, 0x6BA2694B, 0x69A2694B, 0x6AA2704A, 0x6EA26E4B, -0x69A36A4B, 0x6AA3694B, 0x6CA26C4A, 0x6FA2704A, 0x6DA26C4B, 0x6CA36C4A, 0x6DA26C4B, 0x6BA3694B, -0x6AA26B4B, 0x6AA26B4B, 0x6CA36C4B, 0x6AA26A4B, 0x6CA26C4A, 0x69A3674B, 0x67A36A4B, 0x6DA26F4B, -0x6EA2704B, 0x73A2714A, 0x6EA2694B, 0x6AA26E4B, 0x6EA26C4A, 0x6CA26D4B, 0x6DA26E4B, 0x6EA26E4A, -0x6EA26E4A, 0x6EA26F4A, 0x6EA26A4B, 0x6AA2694B, 0x6EA36C4A, 0x6EA26D4B, 0x6AA36C4A, 0x71A26D4A, -0x6EA36C4A, 0x6FA36C4A, 0x6AA36C4B, 0x70A26A4B, 0x6DA26C4B, 0x6DA26C4B, 0x6CA36D4A, 0x6FA26F4B, -0x6AA26B4B, 0x6BA36A4A, 0x6DA26B4B, 0x6AA2684B, 0x67A36A4A, 0x6CA26C4B, 0x6FA16B4B, 0x6BA26C4B, -0x6CA26C4B, 0x6DA26D4B, 0x71A16F4A, 0x6BA1704B, 0x6FA26B4A, 0x6AA26D4C, 0x6EA2704B, 0x6DA36C4A, -0x6BA26C4A, 0x6AA16B4C, 0x6CA16B4C, 0x69A2684C, 0x68A2694B, 0x6AA26A4A, 0x6BA26C4A, 0x6CA26C4A, -0x6BA26B4B, 0x6CA26C4B, 0x6CA26B4A, 0x6CA26C4B, 0x6EA26F4A, 0x6FA26E4B, 0x6DA26B4B, 0x6AA2694C, -0x68A2694C, 0x68A2684C, 0x68A1694C, 0x6AA16A4C, 0x6BA16D4B, 0x6DA16D4B, 0x6DA26D4B, 0x6DA26B4B, -0x6CA16C4B, 0x6BA26B4B, 0x6CA36C4A, 0x6AA26A4B, 0x6DA26A4B, 0x67A3664C, 0x66A26C4B, 0x6AA16B4C, -0x69A26B4C, 0x6CA26D4B, 0x6DA26E4B, 0x6EA2664B, 0x69A16A4C, 0x6EA26C4B, 0x6BA26C4B, 0x6AA26A4C, -0x68A26C4C, 0x6CA2694B, 0x69A1714B, 0x6DA26E4B, 0x68A16E4B, 0x71A1704B, 0x6FA2704A, 0x6FA1704C, -0x6CA2674C, 0x67A2694C, 0x6AA16A4C, 0x69A0624E, 0x62A0664E, 0x66A0654E, 0x659F6150, 0x639D6051, -0x2E8D296A, 0x22966F5B, 0x6FA26F47, 0x6FA16E46, 0x6FA16E46, 0x6FA26F47, 0x6FA26F47, 0x6EA16E46, +0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6E931560, 0x18881976, 0x2C93316C, 0x40904B69, 0x4B904B68, +0x38953D68, 0x43923E6A, 0x2B952C6C, 0x38943A6A, 0x34954069, 0x3D954A67, 0x42943F6A, 0x3D944168, +0x45944368, 0x44944467, 0x41943D68, 0x2C96306A, 0x34953C69, 0x41944867, 0x43944168, 0x35973768, +0x3C973C65, 0x3795306A, 0x3F943D69, 0x31973D68, 0x3996346A, 0x3296346A, 0x37954567, 0x3F963F67, +0x33963669, 0x37973469, 0x3B973A67, 0x43944467, 0x3C953A68, 0x39973C66, 0x3D963B68, 0x39963569, +0x36963969, 0x37953969, 0x3C963B68, 0x35963569, 0x3B963A67, 0x32972F6A, 0x2F96366A, 0x3D944269, +0x3F944568, 0x4C944766, 0x3F963369, 0x37954067, 0x3F963B67, 0x3C963C68, 0x3D963F68, 0x40963F67, +0x3F964066, 0x41964167, 0x3F953769, 0x35963369, 0x3F973966, 0x3F953D68, 0x37963B68, 0x46963D68, +0x3F973A67, 0x42973A66, 0x35963B68, 0x46963568, 0x3D963B68, 0x3C963A67, 0x3B973D67, 0x42944167, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D976F57, 0x6FA26F47, 0x6FA16E46, 0x6FA16E46, 0x6FA26F47, 0x6FA26F47, 0x6EA16E46, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6EA16F46, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA16E46, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6EA16F46, 0x6FA26F47, 0x6FA16E46, 0x6FA26F47, @@ -3078,25 +3078,25 @@ const unsigned long bg[480*640]={ 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA16E46, 0x6FA26F47, 0x6FA26F47, 0x6EA16F46, 0x6FA26F47, 0x6EA16E46, 0x6FA26F47, 0x6FA26F47, 0x6EA16F46, 0x6EA16F46, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, -0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6E96235A, 0x288D2C6B, 0x5D9E6451, 0x6A9E6A4F, 0x6C9F654E, -0x66A06C4D, 0x69A0614E, 0x63A16A4C, 0x6AA16A4C, 0x6DA26B4B, 0x74A2704A, 0x6EA26F4B, 0x6EA26E4B, -0x6EA26F4B, 0x6EA16E4C, 0x6EA2714B, 0x6DA2694B, 0x68A2694C, 0x6FA2724A, 0x70A26F4B, 0x6BA26C4B, -0x6DA36D49, 0x6AA3684B, 0x6EA26D4B, 0x6AA36E4A, 0x6CA36A4B, 0x69A26A4B, 0x69A2704A, 0x6FA26D4A, -0x6CA2684B, 0x6EA3694A, 0x6CA36D4A, 0x6DA26E4A, 0x70A26F4B, 0x6EA26E4A, 0x6DA26C4B, 0x6CA36C4A, -0x6CA36C4A, 0x6CA36C4A, 0x6DA26C4B, 0x6EA26B4A, 0x68A3684B, 0x6AA36B4B, 0x6CA26E4B, 0x6EA26F4B, -0x72A2714A, 0x6EA26B4B, 0x6CA36D4A, 0x6CA36C4A, 0x6CA26A4B, 0x69A3684B, 0x68A2694B, 0x69A2684C, -0x69A26A4C, 0x6BA26C4B, 0x6EA26C4B, 0x6FA26C4B, 0x6BA36E4A, 0x6DA36E4A, 0x6BA26B4B, 0x6FA2704A, -0x6DA36D4A, 0x6CA36E4A, 0x6CA3694A, 0x6EA2714A, 0x6AA36E4A, 0x6EA26B4B, 0x6AA36C4A, 0x6DA36E4A, -0x68A26D4C, 0x6CA36B4A, 0x6BA26D4B, 0x6BA26B4B, 0x69A2694B, 0x6AA26B4A, 0x6AA26D4A, 0x6BA16A4C, -0x6CA36D4A, 0x6AA26C4B, 0x6EA1704A, 0x70A16C4C, 0x6EA26F4B, 0x6CA26D4B, 0x70A2714B, 0x70A26E4A, -0x6CA26C4A, 0x6CA26A4B, 0x6AA16A4C, 0x68A2684C, 0x69A26A4B, 0x6AA26A4B, 0x6CA26C4B, 0x6DA26D4B, -0x6EA36E4A, 0x6EA26F4A, 0x6EA26F4A, 0x6FA16D4A, 0x6BA2684B, 0x68A2694C, 0x69A2694C, 0x6AA26C4C, -0x6CA26D4C, 0x6BA16C4C, 0x6CA26D4C, 0x6DA26D4C, 0x6CA16B4C, 0x6AA16E4B, 0x6FA16F4B, 0x6EA16F4B, -0x6CA26B4A, 0x6DA26C4B, 0x6BA26D4A, 0x6DA36B4A, 0x69A26C4B, 0x68A2674C, 0x65A2684C, 0x6DA26A4B, -0x6AA26C4C, 0x6CA26D4B, 0x6DA16F4B, 0x6FA3674B, 0x6AA26A4C, 0x6CA26C4B, 0x6BA26B4B, 0x6AA26A4C, -0x69A26A4B, 0x6CA36C4A, 0x68A26D4B, 0x6FA16C4B, 0x6CA26A4B, 0x6EA2714A, 0x71A26F4A, 0x71A16E4B, -0x6FA1674C, 0x67A2664D, 0x6BA2694C, 0x69A1634D, 0x61A1674E, 0x669F664E, 0x649E6350, 0x619E6351, -0x2E8D296A, 0x2296705A, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, +0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6E972D57, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x31943E6A, 0x3A973867, 0x37953D67, 0x38963869, 0x3296336A, 0x36973868, 0x37963E67, 0x3A94366A, +0x3B963F66, 0x36953A69, 0x40934567, 0x45933B6A, 0x3F954267, 0x3A963C68, 0x45944667, 0x45954067, +0x3C963A66, 0x3C94366A, 0x3794366B, 0x3195306B, 0x34953769, 0x35953669, 0x3A953B68, 0x3D963D67, +0x40964166, 0x40964366, 0x41954366, 0x43943E67, 0x38953269, 0x2F95356A, 0x3395336B, 0x35943B6B, +0x3C943D6B, 0x39943A6B, 0x3A943E6B, 0x3E943E6A, 0x3B93396B, 0x38933F6A, 0x42934268, 0x41944368, +0x3A963869, 0x3D933C6A, 0x37963E67, 0x3C963867, 0x33963C69, 0x30962E6B, 0x2897306A, 0x3D953669, +0x35943B6B, 0x3A953D69, 0x3D944368, 0x43962F68, 0x3594376A, 0x3B953B69, 0x3895396A, 0x3594366A, +0x3595376A, 0x3B963B67, 0x32953E69, 0x44943A69, 0x3C95366A, 0x40954867, 0x48954267, 0x47934268, +0x4494306A, 0x3295326B, 0x3D963968, 0x3B952E6A, 0x2B953C6A, 0x39943D68, 0x3A923A6B, 0x38923E6A, +0x1A881576, 0x1294705F, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, @@ -3118,25 +3118,25 @@ const unsigned long bg[480*640]={ 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, -0x70A27046, 0x70A27046, 0x70A27046, 0x7096225A, 0x288D2D6A, 0x639D6950, 0x699E694F, 0x65A0654E, -0x6BA0694E, 0x62A1624E, 0x6AA1694C, 0x6AA16F4B, 0x6CA2734A, 0x6FA26F4C, 0x70A26C4B, 0x70A26D4B, -0x6DA26C4C, 0x6CA26E4B, 0x6FA16F4B, 0x71A26A4A, 0x69A2664B, 0x70A2724A, 0x6FA26F4A, 0x6AA36D4A, -0x6FA36D49, 0x69A3694B, 0x6DA26E4B, 0x6AA36F4A, 0x6CA36A4B, 0x69A3694B, 0x69A36F4A, 0x70A26C4A, -0x6CA3694A, 0x6EA26E4A, 0x69A36C4A, 0x6DA36B49, 0x6BA26E4B, 0x6EA26D4A, 0x6DA36D4A, 0x6CA36C4A, -0x6CA36C4A, 0x6DA26E4B, 0x6EA36A4A, 0x68A3694B, 0x6AA36B4B, 0x6CA26C4A, 0x6DA36E4A, 0x71A3734A, -0x6FA36D4A, 0x6EA36E4A, 0x6FA2704A, 0x6DA26C4C, 0x6EA26F4B, 0x70A2704B, 0x6FA2704B, 0x6FA26D4B, -0x6CA2694C, 0x69A2694C, 0x6AA36D4B, 0x6EA26F4A, 0x6DA36D4A, 0x6DA36E4A, 0x6FA36A4A, 0x6BA36F4A, -0x6FA26F4A, 0x6CA36E4A, 0x6FA36A4A, 0x69A36F4A, 0x70A36C4A, 0x6CA36F4A, 0x6DA26C4A, 0x6AA36B4A, -0x6AA26A4C, 0x6EA26D4A, 0x6DA36B4A, 0x6CA26C4B, 0x6AA2694B, 0x6AA2694A, 0x6CA36A4A, 0x6EA26F4B, -0x6CA26E4A, 0x6FA26C4A, 0x6CA26D4B, 0x70A1724B, 0x6CA26E4B, 0x6EA36B4A, 0x6CA2704B, 0x71A2724A, -0x6EA36D4A, 0x6CA26A4B, 0x6BA16B4C, 0x69A3684B, 0x69A26A4C, 0x6CA26C4B, 0x6DA26E4A, 0x6EA36F4A, -0x71A27149, 0x6FA26D4A, 0x6BA26A4B, 0x69A2694C, 0x69A26B4C, 0x6BA26C4B, 0x6CA26E4B, 0x6FA26F4B, -0x71A2714B, 0x71A1714B, 0x72A2714A, 0x71A2724A, 0x74A2734A, 0x72A2704B, 0x6EA16D4C, 0x6FA16F4A, -0x70A16F4A, 0x6CA26C4B, 0x6DA26C4B, 0x6DA36D49, 0x69A36A4B, 0x6AA2674C, 0x65A3674B, 0x6EA26A4B, -0x69A26C4C, 0x6DA26F4A, 0x6EA2704A, 0x70A3694A, 0x6CA26B4B, 0x6BA26C4B, 0x6BA26C4B, 0x6BA26B4C, -0x6BA26A4B, 0x6CA36C4A, 0x6CA3694A, 0x70A16C4B, 0x70A2694B, 0x6CA2724B, 0x71A26D4A, 0x72A16F4B, -0x6EA2684C, 0x64A2664D, 0x6CA1684B, 0x6AA1674C, 0x61A1644E, 0x67A0674E, 0x649E634F, 0x619E6450, -0x2F8D296A, 0x2296705A, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, +0x70A27046, 0x70A27046, 0x70A27046, 0x7094115F, 0x15881677, 0x3D914B6A, 0x48914668, 0x3B943769, +0x4492406A, 0x29952A6C, 0x3C943869, 0x3A954568, 0x3E964E67, 0x45944469, 0x44953C68, 0x44953E68, +0x3D943B6A, 0x3B953F6A, 0x42934269, 0x46953668, 0x33962C6A, 0x45954A65, 0x43954267, 0x37973D67, +0x40983E65, 0x3396336A, 0x3D953F68, 0x36974167, 0x3B973768, 0x33973469, 0x33974368, 0x45963B67, +0x3B983169, 0x3E973F67, 0x31983B68, 0x3E983966, 0x39963E68, 0x40963D67, 0x3E973C66, 0x3B963A67, +0x3B963B67, 0x3E954068, 0x40973666, 0x32983269, 0x35973968, 0x3A963B68, 0x3C964166, 0x47964C66, +0x43973C66, 0x40973F66, 0x42964467, 0x3E953B6A, 0x3F954269, 0x44954568, 0x42944469, 0x43943E69, +0x3A96346A, 0x3396336B, 0x38963D69, 0x41964367, 0x3D963C67, 0x3C974065, 0x42973668, 0x38974267, +0x42964166, 0x3B974066, 0x41983766, 0x34974267, 0x46963B67, 0x3B984167, 0x3D963967, 0x37973767, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D977057, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, @@ -3158,25 +3158,25 @@ const unsigned long bg[480*640]={ 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, -0x70A27046, 0x70A27046, 0x70A27046, 0x7096235A, 0x278D2F6A, 0x689D6850, 0x679E644F, 0x63A0684E, -0x69A0614E, 0x64A1694D, 0x6AA16A4C, 0x6DA26C4B, 0x72A26F4B, 0x6FA26F4B, 0x6FA36D4A, 0x6EA1724B, -0x74A1744A, 0x74A2724A, 0x72A26F4A, 0x73A26D4A, 0x6AA2654C, 0x70A27249, 0x6FA2704A, 0x69A36F4A, -0x6FA36D49, 0x69A3694B, 0x6CA26E4B, 0x6AA36F4A, 0x6DA36A4A, 0x6AA36B4A, 0x69A36E4A, 0x71A36D4A, -0x6BA36E4A, 0x6BA3704A, 0x6DA3694A, 0x6BA36D49, 0x6DA46B4A, 0x6BA36C4A, 0x6DA36E4A, 0x6EA36E4A, -0x6DA36E4A, 0x6BA4684A, 0x6AA36C4A, 0x6BA36B4B, 0x6DA36C4B, 0x6EA3714A, 0x73A2724A, 0x70A36D4A, -0x6DA36F4A, 0x71A2714A, 0x6FA2704B, 0x72A2744A, 0x74A2734A, 0x73A2734A, 0x74A1754A, 0x75A1754A, -0x75A2734A, 0x71A36D4A, 0x6AA2694C, 0x6BA36D4A, 0x6FA36F4A, 0x6FA26F4A, 0x6EA36F4A, 0x6CA36A4A, -0x6FA36F49, 0x6FA36E4A, 0x6DA36F4A, 0x6BA36A4A, 0x6FA37249, 0x6FA36C4A, 0x6FA36F4A, 0x6DA36D4B, -0x69A26A4C, 0x6CA2704B, 0x6DA36C4A, 0x6BA36D4A, 0x6BA36A4A, 0x69A36A4A, 0x68A36A4A, 0x69A36D4A, -0x70A26C4B, 0x6CA36F4A, 0x6DA26B4B, 0x6DA2724B, 0x73A16D4B, 0x6EA26F4A, 0x6CA26D4A, 0x6FA2724B, -0x72A26E4A, 0x6BA36B4A, 0x6AA26B4C, 0x69A3694B, 0x69A36B4B, 0x6DA26C4B, 0x6EA2724A, 0x70A26D4A, -0x6CA36C4A, 0x6BA26A4B, 0x69A26B4C, 0x6CA26C4B, 0x6FA26F4B, 0x70A2714B, 0x70A26F4B, 0x6CA26C4C, -0x6BA16B4C, 0x6DA16D4C, 0x6EA16E4C, 0x6EA26F4C, 0x70A1704B, 0x73A2754A, 0x75A2724A, 0x70A16D4B, -0x70A2724A, 0x71A16D4B, 0x6DA26E4B, 0x6DA36E49, 0x6CA3674A, 0x6AA3694B, 0x68A3644C, 0x6BA36A4B, -0x68A26C4C, 0x6EA2704B, 0x6EA2714A, 0x6FA36D4A, 0x6EA26B4B, 0x6CA26D4B, 0x6CA26C4B, 0x6DA26A4B, -0x6CA26C4B, 0x6BA36D4A, 0x6BA36A4A, 0x6FA26F4B, 0x6DA26E4B, 0x6EA2724B, 0x71A2714A, 0x71A1704B, -0x6EA26A4C, 0x64A2664D, 0x6BA16A4C, 0x69A1694C, 0x62A1614E, 0x67A0654E, 0x649F6150, 0x649E6250, -0x308D296A, 0x2296705A, 0x71A27145, 0x71A27045, 0x71A27145, 0x71A27145, 0x71A27045, 0x70A27145, +0x70A27046, 0x70A27046, 0x70A27046, 0x70972D57, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3395356A, 0x3B944468, 0x3C983B66, 0x37963E67, 0x38973568, 0x34963569, 0x32973568, 0x32973D68, +0x45943A69, 0x3C964467, 0x3C953869, 0x3D944967, 0x4E933F69, 0x3F954367, 0x3B963C67, 0x42954967, +0x4A953F66, 0x39973967, 0x3595376A, 0x35973469, 0x35953969, 0x3C963968, 0x41954A65, 0x45963F65, +0x3A973A67, 0x38953669, 0x3396376B, 0x3A963C69, 0x42964268, 0x44954668, 0x43954268, 0x3C953A6B, +0x3994396B, 0x3E933E6B, 0x4093406A, 0x4194436A, 0x44944668, 0x4B945066, 0x52944B66, 0x44933E69, +0x44954966, 0x48943D69, 0x3D954068, 0x3E974065, 0x39972E68, 0x37963369, 0x3097276B, 0x39963668, +0x31953C6B, 0x40954468, 0x3F954867, 0x42973C66, 0x40953968, 0x3B953E68, 0x3C963A69, 0x3D953869, +0x3A963B68, 0x37973D68, 0x38973767, 0x42944268, 0x3D953F68, 0x40944867, 0x48964766, 0x48944767, +0x4095386A, 0x2C95316C, 0x3E953D67, 0x3C963F66, 0x2E962E6B, 0x3E943C68, 0x3A93366B, 0x3D943B69, +0x1E881776, 0x1394705F, 0x71A27145, 0x71A27045, 0x71A27145, 0x71A27145, 0x71A27045, 0x70A27145, 0x71A27145, 0x70A27145, 0x71A27145, 0x71A27045, 0x71A27145, 0x71A27145, 0x71A27045, 0x71A27145, 0x70A27145, 0x71A27145, 0x71A27145, 0x70A27145, 0x71A27145, 0x71A27145, 0x71A27045, 0x70A27145, 0x71A27045, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x70A27046, @@ -3198,25 +3198,25 @@ const unsigned long bg[480*640]={ 0x71A27145, 0x71A27145, 0x71A27145, 0x70A27145, 0x71A27145, 0x71A27045, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x70A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27045, -0x70A27145, 0x71A27145, 0x71A27045, 0x7196225A, 0x298D336A, 0x679D6650, 0x629F624F, 0x68A0674E, -0x62A0644F, 0x69A0684D, 0x6BA26D4C, 0x6CA2714A, 0x6EA26E4C, 0x6EA36D4B, 0x6EA2704B, 0x72A2744A, -0x73A2734A, 0x74A2744A, 0x75A2704A, 0x71A2714A, 0x6AA3654B, 0x70A27349, 0x6FA2704A, 0x6AA36F4A, -0x6FA36D49, 0x69A26C4B, 0x6AA36E4A, 0x6AA3704A, 0x6EA36A4A, 0x6CA36C4A, 0x6AA36F4A, 0x73A36D49, -0x6AA36E4B, 0x6AA3704A, 0x71A36F4A, 0x6AA4694B, 0x6BA36C4A, 0x6DA46D49, 0x6CA46B49, 0x69A4674A, -0x66A46A4A, 0x6EA36F4A, 0x70A36F4A, 0x6EA26D4A, 0x6DA2714A, 0x73A2734A, 0x71A36F49, 0x6CA36C4A, -0x71A2714A, 0x6FA2724B, 0x73A2734A, 0x74A2724A, 0x6FA36D4A, 0x6DA36D4A, 0x6DA26E4A, 0x6FA2704A, -0x71A2714B, 0x72A27549, 0x71A36C4A, 0x69A3694B, 0x6EA36D4A, 0x6FA3704A, 0x71A37049, 0x70A36B49, -0x69A36E4A, 0x6FA3704A, 0x6EA46E4A, 0x6FA36D49, 0x6CA36D49, 0x71A37149, 0x6EA36D4A, 0x6EA46E4A, -0x6CA3694B, 0x6CA26E4B, 0x70A36D49, 0x6CA36A4A, 0x6CA36C4A, 0x6AA3694B, 0x6AA36A4A, 0x6CA36A4A, -0x6FA2714A, 0x6EA26C4B, 0x70A2704A, 0x6CA26E4A, 0x72A1754A, 0x6EA26E4B, 0x6EA36B4A, 0x6CA2714A, -0x72A26F4A, 0x6DA36B4A, 0x6AA26B4B, 0x69A36A4B, 0x6BA26B4A, 0x6DA36E49, 0x70A36F49, 0x6EA36B4A, -0x6AA26B4C, 0x6AA26B4B, 0x6EA36E4A, 0x6EA36F4A, 0x6EA26E4A, 0x70A2714A, 0x72A2714B, 0x71A1724B, -0x73A1734A, 0x74A2754A, 0x75A2734A, 0x73A2744A, 0x72A26F4B, 0x6CA26D4B, 0x6FA2714A, 0x74A2734A, -0x70A26F4A, 0x73A1734A, 0x6DA26E4B, 0x6FA26E4A, 0x6DA4674A, 0x69A36A4B, 0x6AA3654B, 0x6AA36B4A, -0x69A26C4C, 0x6DA2704A, 0x6EA2724A, 0x6EA36E4A, 0x6EA26D4A, 0x6EA26D4B, 0x6EA26D4B, 0x6CA26B4B, -0x6DA26D4A, 0x6CA36C4A, 0x6AA36D4A, 0x6EA1704B, 0x6AA2704B, 0x6CA26F4B, 0x73A2724A, 0x6EA1714B, -0x6EA26E4C, 0x66A2664C, 0x69A26C4B, 0x69A26A4C, 0x66A0614E, 0x65A0664E, 0x669F624F, 0x629E6350, -0x308D296A, 0x23967259, 0x72A27245, 0x72A27245, 0x72A37245, 0x72A27245, 0x72A27245, 0x72A27245, +0x70A27145, 0x71A27145, 0x71A27045, 0x7194105F, 0x17882575, 0x48924368, 0x38953669, 0x43933E69, +0x2E95336B, 0x3C95396A, 0x3F964367, 0x41964B65, 0x43954269, 0x42974067, 0x3F964568, 0x4B944E66, +0x4D944E66, 0x4F944F65, 0x52954366, 0x48944967, 0x37972B69, 0x46964B65, 0x42964466, 0x37974267, +0x43983C65, 0x32973A69, 0x37964167, 0x35974466, 0x3F973668, 0x3C983B67, 0x35974367, 0x4C973E65, +0x37973F68, 0x37964668, 0x46984166, 0x37993468, 0x38983B66, 0x3D9A3D64, 0x3C9A3A64, 0x349A2E66, +0x2E9A3467, 0x3E984366, 0x44984166, 0x40963D67, 0x3D974766, 0x4C964D65, 0x48974164, 0x3A973C67, +0x47964767, 0x43944968, 0x4D944D66, 0x4E944A65, 0x42963D67, 0x3D973E67, 0x3E963F67, 0x41954667, +0x46944768, 0x4B955066, 0x49963B67, 0x3297346A, 0x3F973E68, 0x41964666, 0x48984564, 0x46983966, +0x33974068, 0x43974466, 0x40993F65, 0x42983C65, 0x3A983E66, 0x46984863, 0x41963E67, 0x3F993F66, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D977256, 0x72A27245, 0x72A27245, 0x72A37245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, @@ -3238,25 +3238,25 @@ const unsigned long bg[480*640]={ 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A37245, 0x72A27245, -0x72A27245, 0x72A27245, 0x72A27245, 0x7297225A, 0x2C8D3269, 0x649E6150, 0x60A0674F, 0x699F614F, -0x63A1684E, 0x69A16A4D, 0x6CA16C4B, 0x72A16F4A, 0x6BA26B4B, 0x6BA36F4B, 0x70A2704A, 0x72A2724A, -0x70A3704A, 0x6FA2704A, 0x72A2714A, 0x71A1734A, 0x69A3644B, 0x71A37549, 0x6FA36F4A, 0x6AA36F4A, -0x6FA46D49, 0x69A36E4A, 0x6BA3704A, 0x6CA37149, 0x6EA36A4A, 0x6EA36A4A, 0x6BA36F4A, 0x73A26F49, -0x6BA36C4A, 0x69A36F4A, 0x71A37249, 0x72A37049, 0x6EA46C4A, 0x6AA46A4A, 0x6AA56C49, 0x6CA46D49, -0x70A3704A, 0x70A3714A, 0x70A26F4A, 0x6FA36F4A, 0x74A27249, 0x70A37049, 0x6CA36B4A, 0x71A2734A, -0x71A2724B, 0x73A2734A, 0x73A27149, 0x6DA36A4A, 0x6BA36A4B, 0x6BA36B4B, 0x6CA36D4A, 0x6DA36D4A, -0x6CA36D4A, 0x6EA36E4A, 0x70A3724A, 0x71A36D4A, 0x6AA26C4B, 0x6DA3704A, 0x72A3734A, 0x71A37048, -0x6CA3694A, 0x6CA37049, 0x71A36F49, 0x6DA46F49, 0x6EA46D49, 0x6DA46E4A, 0x70A37049, 0x6FA3704A, -0x6AA26E4A, 0x6CA26D4B, 0x6EA2704A, 0x6DA46D4A, 0x6BA36F4A, 0x6CA3694A, 0x68A36B4B, 0x6AA36D4A, -0x6AA36D4A, 0x71A26E4A, 0x6BA3704A, 0x6FA36C4A, 0x6EA2724A, 0x75A2704A, 0x6EA36F4A, 0x6CA36E4A, -0x73A2724A, 0x6EA36A4A, 0x6BA36B4B, 0x69A36B4B, 0x6DA36C4A, 0x6FA36F49, 0x6DA36C49, 0x6AA26B4B, -0x6DA36F4A, 0x70A2714A, 0x6EA36E4A, 0x6FA36F4A, 0x71A3714A, 0x71A2714B, 0x70A2704A, 0x6FA36D4A, -0x6BA3694A, 0x69A4684B, 0x68A3694B, 0x68A36A4B, 0x6EA27249, 0x75A27249, 0x70A26D4B, 0x70A2724A, -0x76A1724A, 0x71A27549, 0x72A26D4A, 0x70A26E4A, 0x6DA3694A, 0x67A36B4B, 0x6CA3664B, 0x69A36C4A, -0x6AA26D4C, 0x6EA2704A, 0x6EA2724A, 0x6CA26F4A, 0x6EA26D4A, 0x6DA36F4A, 0x6CA36C4B, 0x6CA36E4A, -0x6EA26E4A, 0x6EA36D4A, 0x6AA36F49, 0x6FA2714A, 0x69A3714B, 0x6EA36E4A, 0x71A3734A, 0x6CA2714B, -0x70A26E4B, 0x6AA2674C, 0x68A26D4B, 0x69A16B4B, 0x6AA1614D, 0x62A0664E, 0x649F644F, 0x619E6550, -0x308D2A69, 0x2397735A, 0x72A37345, 0x72A37345, 0x73A37345, 0x73A37245, 0x73A37245, 0x73A37245, +0x72A27245, 0x72A27245, 0x72A27245, 0x72982D56, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x36964067, 0x3C953D69, 0x3F964467, 0x3C993C66, 0x37974166, 0x3A983367, 0x31973869, 0x35983C66, +0x36983D67, 0x48954067, 0x38974566, 0x42963C67, 0x40954B66, 0x51944368, 0x40974166, 0x3B973E67, +0x4C954966, 0x40983766, 0x37963969, 0x32973769, 0x3C973A67, 0x43974164, 0x3D973B66, 0x37953969, +0x3D964268, 0x45964667, 0x40973F67, 0x41964466, 0x47964866, 0x47954767, 0x45964666, 0x42973D66, +0x39983467, 0x34993068, 0x30983269, 0x32973768, 0x40964965, 0x51954B65, 0x43963D68, 0x43954B67, +0x53934B66, 0x48945065, 0x4B953D68, 0x45963F66, 0x3C973467, 0x2D973869, 0x3C962C6A, 0x34973A68, +0x35963E6A, 0x3F964468, 0x40964B67, 0x3B974267, 0x3F953E68, 0x3D964267, 0x3A973B68, 0x3B963F68, +0x3F964167, 0x3E973C67, 0x35984266, 0x42954767, 0x33974668, 0x3E964067, 0x49964C65, 0x3D954B67, +0x45954467, 0x3996336A, 0x35974267, 0x3D974266, 0x41952D69, 0x30953D69, 0x3A943D69, 0x3693426A, +0x1F881B74, 0x1495735E, 0x72A37345, 0x72A37345, 0x73A37345, 0x73A37245, 0x73A37245, 0x73A37245, 0x72A37245, 0x73A37345, 0x72A37245, 0x72A37245, 0x73A37345, 0x72A37245, 0x72A37345, 0x72A37245, 0x72A37245, 0x73A37345, 0x73A37245, 0x73A37345, 0x72A37345, 0x72A37245, 0x73A37245, 0x73A37345, 0x73A37345, 0x72A37245, 0x72A37245, 0x72A37245, 0x72A37245, 0x73A37345, 0x72A37245, 0x73A37245, @@ -3278,1860 +3278,2842 @@ const unsigned long bg[480*640]={ 0x73A37245, 0x72A37245, 0x73A37345, 0x73A37345, 0x73A37345, 0x73A37345, 0x72A37245, 0x73A37345, 0x73A37245, 0x73A37345, 0x73A37245, 0x72A37345, 0x73A37245, 0x72A37345, 0x72A37245, 0x73A37245, 0x72A37245, 0x72A37345, 0x73A37345, 0x73A37245, 0x73A37245, 0x72A37345, 0x72A37245, 0x72A37345, -0x73A37345, 0x73A37245, 0x73A37345, 0x7397235A, 0x2D8D316A, 0x609F5F51, 0x679F694F, 0x62A0644F, -0x67A1694D, 0x69A16B4D, 0x6BA2704B, 0x6EA26A4B, 0x6BA36F4A, 0x71A36E4A, 0x6FA37149, 0x70A47049, -0x71A47348, 0x72A37049, 0x70A27549, 0x72A2744A, 0x6AA3654B, 0x71A37549, 0x70A3704A, 0x6BA36E4A, -0x70A46E49, 0x67A3704A, 0x6CA36E4A, 0x6FA3714A, 0x6CA36C4A, 0x6EA36A4A, 0x6DA36F49, 0x72A27049, -0x6DA36B4A, 0x6BA36D4B, 0x71A3724A, 0x72A3724A, 0x72A37249, 0x71A37149, 0x71A37149, 0x72A37049, -0x70A37049, 0x6EA3704A, 0x71A3724A, 0x75A27649, 0x73A36E49, 0x6DA36D4A, 0x71A2754A, 0x73A2714B, -0x71A2714A, 0x71A36D49, 0x6CA36D4A, 0x6EA3714A, 0x71A3714A, 0x71A3724A, 0x72A3724A, 0x72A37049, -0x6FA36F49, 0x6DA36E4A, 0x6DA36D4A, 0x70A2754A, 0x71A36B4B, 0x6AA36D4B, 0x6EA3734A, 0x75A37249, -0x72A36E49, 0x6BA36C4B, 0x71A37149, 0x70A46E49, 0x6DA46D49, 0x6EA46E49, 0x6CA46D4A, 0x6FA47148, -0x73A36949, 0x6FA26D4B, 0x6CA26D4B, 0x71A36E49, 0x6EA36A4A, 0x6FA36E4A, 0x6AA3684B, 0x6CA36B4A, -0x6DA36C4A, 0x6EA27349, 0x70A26A4A, 0x70A36E4A, 0x6CA36E4A, 0x71A2744A, 0x71A2714A, 0x6EA36C4A, -0x71A2734A, 0x6FA36C4A, 0x6DA36C4A, 0x6AA36A4A, 0x6DA36F4A, 0x71A36E48, 0x6CA36A4A, 0x6CA3704A, -0x71A3714A, 0x70A36E49, 0x6FA3714A, 0x71A36F4A, 0x6EA36E4A, 0x6EA36E4A, 0x6CA36A4A, 0x6BA36B4B, -0x6CA36D4B, 0x6EA26D4B, 0x6DA26E4B, 0x6EA26E4A, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x73A37345, 0x73A37245, 0x73A37345, 0x7395165E, 0x20882275, 0x3895316A, 0x43944568, 0x3196346A, +0x3C953E68, 0x3E953F68, 0x3F954966, 0x45963A69, 0x39984367, 0x4A974265, 0x42984864, 0x45994563, +0x46984B62, 0x49974564, 0x45965066, 0x4A955066, 0x37982A69, 0x47975064, 0x46964465, 0x38983F67, +0x44994064, 0x2D974667, 0x3B974067, 0x43974665, 0x3B983B67, 0x40993466, 0x3E974266, 0x4A974565, +0x3D973868, 0x37983D69, 0x47964B66, 0x48974965, 0x4B984A64, 0x46984765, 0x47984765, 0x4B974565, +0x45974566, 0x40964567, 0x48974A65, 0x51955365, 0x4C984065, 0x3D983C66, 0x47965065, 0x4B954668, +0x48954966, 0x47983E65, 0x3A973E68, 0x41964767, 0x49964966, 0x48964A66, 0x4B964A65, 0x49974664, +0x43984166, 0x3D983E67, 0x3E983D67, 0x44965065, 0x48963868, 0x35983D68, 0x40974D66, 0x52984A63, +0x49984065, 0x39973C68, 0x47984765, 0x449A3F64, 0x3E9A3F64, 0x3F9B4063, 0x3A9A3D65, 0x439A4663, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00917362, 0x73A37345, 0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x4D8B006C, 0x00723988, +0xB135B9AD, 0xBD497EA1, 0x00800080, 0x006F558A, 0xB737B8AC, 0xB431AFAF, 0x526D008B, 0x00800080, +0x4E3EA5A8, 0xA525A3B7, 0x9F53009D, 0x00800080, 0x006E3E8B, 0xA026A2B9, 0xA22C8BB5, 0x00800080, +0x006E3E8B, 0x9E26A4B9, 0xB640A8A7, 0x00754086, 0xB62DA4B2, 0x6B620093, 0x00800080, 0x00800080, +0x006E548A, 0x51565B99, 0xA625A4B7, 0xA325A5B8, 0xA625A4B7, 0xA352009C, 0x00800080, 0x2B46A2A4, +0xA226A2B9, 0x9F4D14A1, 0x00800080, 0x005F7495, 0xA125A3B8, 0xA43763AC, 0x00800080, 0x4F41AAA6, +0xAA27A5B6, 0xA1413EA8, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0xA527AAB6, +0xAE2EAEB2, 0xA827A5B6, 0xA525A4B7, 0xA425A3B8, 0xA425A3B8, 0xA32B8CB4, 0x00800080, 0x0F94735E, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A26F46, 0x6A9E614B, 0x408A006F, +0x00800080, 0x1D5188A3, 0x922D92BF, 0x942B97BD, 0x99299CBB, 0x9E289EBB, 0x9C2999BC, 0x962C93BE, +0x923575B8, 0x0A7D0082, 0x00800080, 0x00800080, 0x00800080, 0x00820F7C, 0x1B881D70, 0x298E3667, +0x3F94455D, 0x509A5C53, 0x66A06C49, 0x71A27345, 0x73A37344, 0x72A37045, 0x70A26E46, 0x6CA16C48, +0x6CA16D47, 0x70A27046, 0x72A27345, 0x72A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, +0x73A37344, 0x73A37344, 0x73A37344, 0x73910062, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4A974464, 0x31974667, 0x3F963F68, 0x3F964667, 0x44994564, 0x3C964267, 0x40983667, 0x36983D67, +0x37983F66, 0x3C984166, 0x4E964165, 0x37984267, 0x40973B66, 0x3A974967, 0x4A954867, 0x48973D65, +0x3D974D65, 0x45974066, 0x3C973C67, 0x34983668, 0x3F994264, 0x46993E63, 0x3D973E67, 0x47964E65, +0x49974664, 0x44974665, 0x48964466, 0x40984166, 0x43994065, 0x3C973E68, 0x44964A66, 0x4C964E65, +0x4F964D65, 0x4C964C65, 0x49964965, 0x46984765, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00917462, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x22850077, 0x00695B8E, +0xAE31B3B0, 0xB433B3AE, 0xB333B4AE, 0xB12FAEB1, 0xAE2FAFB1, 0xAF2FAEB1, 0x80620092, 0x00800080, +0x4D3DA4A9, 0xA425A4B8, 0xA253009C, 0x00800080, 0x006E418B, 0xA325A4B8, 0xA32B8CB4, 0x00800080, +0x007C0A81, 0x9D27A1BA, 0xAE35BCAD, 0x26647090, 0xAD2AA2B6, 0x406E008B, 0x00800080, 0x006C718C, +0xC03FBEA7, 0xB733AEAE, 0xA625A3B7, 0xA225A4B8, 0xA425A3B8, 0xA253009C, 0x00800080, 0x2B46A2A4, +0xA325A2B8, 0xA04C15A0, 0x00800080, 0x005F7595, 0xA225A4B8, 0xA43761AD, 0x00800080, 0x4C3DA3A9, +0xA425A4B8, 0xA24140A8, 0x00800080, 0x0180007F, 0x00800080, 0x00800080, 0x007A1683, 0xA225A3B8, +0xA425A4B8, 0xA425A3B8, 0xA325A2B8, 0xA226A1B9, 0xA126A0B9, 0xA026A0B9, 0x00800080, 0x00917362, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x73A27244, 0x6EA06649, 0x5C95315B, +0x00800080, 0x007D0A82, 0x6B3892B6, 0x922D92BF, 0x922D92BF, 0x922D92BF, 0x922D92BF, 0x922D92BF, +0x4E670A93, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0F8C4669, 0x58995054, 0x4996485A, +0x4B975157, 0x5A9C634E, 0x6BA17047, 0x73A37444, 0x74A37444, 0x73A37344, 0x73A37244, 0x72A37244, +0x72A37344, 0x73A37344, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37444, 0x74910062, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x008C4572, 0x46964C66, 0x4C974B65, 0x3D993966, 0x44965266, 0x52954966, 0x3C974367, 0x46993D64, +0x3D964A67, 0x55955464, 0x51974A64, 0x46984565, 0x44984567, 0x45984466, 0x46984C64, 0x51985362, +0x55974F63, 0x45973F67, 0x40994366, 0x40994166, 0x45984266, 0x54974364, 0x34983C69, 0x40984C64, +0x5C965562, 0x4D994863, 0x45973D67, 0x3D984766, 0x469A4A63, 0x449C3C63, 0x3C9B3C65, 0x3F9B4263, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00917462, 0x75A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37543, 0x75A37443, +0x74A37444, 0x74A37444, 0x75A37443, 0x74A37543, 0x74A37444, 0x74A37543, 0x75A37443, 0x74A37444, +0x74A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, +0x74A37444, 0x74A37444, 0x74A37543, 0x75A37443, 0x74A37444, 0x74A37444, 0x74A37543, 0x75A37543, +0x75A37443, 0x74A37444, 0x75A37443, 0x74A37444, 0x75A37443, 0x74A37444, 0x74A37444, 0x74A37444, +0x75A37443, 0x74A37444, 0x74A37444, 0x75A37543, 0x74A37543, 0x74A27045, 0x00800080, 0x00579E99, +0xA928A7B5, 0xA425A2B8, 0xA126A1B9, 0xA126A0B9, 0xA225A4B8, 0xA729ABB5, 0xAE540C9A, 0x00800080, +0x4C3DA2A9, 0xA426A7B7, 0xA753009B, 0x00800080, 0x006E448A, 0xAB2BABB4, 0xA42B8CB4, 0x00800080, +0x00800080, 0x68369FB0, 0xA42BB2B3, 0x5549A4A1, 0xA425A0B8, 0x0A7C0081, 0x00800080, 0x7B49C0A2, +0xC442C0A6, 0xB74369A4, 0x4E6B008C, 0x4C3DA4A9, 0xA425A3B8, 0xA253009C, 0x00800080, 0x2B46A2A4, +0xA425A3B8, 0xA24C15A0, 0x00800080, 0x005F7695, 0xA325A4B8, 0xA33761AD, 0x00800080, 0x4A3EA0AA, +0xA225A4B8, 0xA54042A6, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x007C0A81, 0xA026A0B9, +0xA126A2B9, 0xA226A1B9, 0xA126A1B9, 0xA0279FBA, 0x9E289EBA, 0x9D289DBB, 0x00800080, 0x00917362, +0x74A37444, 0x74A37444, 0x74A37444, 0x75A37443, 0x74A37444, 0x74A37444, 0x74A37543, 0x75A37443, +0x74A37444, 0x75A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37344, 0x70A16B47, 0x629C5650, +0x2E870074, 0x00800080, 0x00742788, 0x623B92B4, 0x922D92BF, 0x922D92BF, 0x92327FBB, 0x4E641395, +0x00800080, 0x0080017F, 0x28891470, 0x07841777, 0x2A904363, 0x5E9C5F4E, 0x5E9B5A50, 0x569A5553, +0x599B5D50, 0x649F6B4A, 0x6EA17245, 0x73A37444, 0x74A37444, 0x74A37444, 0x75A37443, 0x74A37444, +0x74A37444, 0x74A37543, 0x74A37543, 0x75A37543, 0x75A37443, 0x74A37444, 0x74A37543, 0x74A37543, +0x74A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x75A37443, 0x75A37443, +0x74A37444, 0x74A37444, 0x74A37543, 0x74A37444, 0x74A37444, 0x75A37443, 0x74A37543, 0x75A37443, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x75A37543, 0x74A37543, 0x75A37543, +0x75A37443, 0x74A37543, 0x74A37444, 0x74910062, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x499A3F64, 0x50983964, 0x39974566, 0x41963D68, 0x45974D65, 0x48994763, 0x40974467, 0x45993965, +0x3B984466, 0x3C994365, 0x43984665, 0x4E973B66, 0x3E984566, 0x3D983568, 0x43974E65, 0x45974F65, +0x42993A66, 0x46993D65, 0x3E983F66, 0x32993B67, 0x469A4762, 0x43984365, 0x48984F64, 0x4F984A63, +0x4A974B65, 0x4C974764, 0x49984665, 0x43984C64, 0x48983E65, 0x3B993C66, 0x40993F66, 0x39983968, +0x3A993A66, 0x3E994165, 0x42984365, 0x43974366, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00927661, 0x76A47643, 0x76A37543, 0x76A47643, 0x76A37543, 0x76A47643, 0x75A37543, +0x76A47643, 0x76A37543, 0x75A37543, 0x75A37643, 0x76A47643, 0x76A47643, 0x75A37543, 0x76A37543, +0x76A37543, 0x76A37543, 0x75A37543, 0x76A47643, 0x76A37543, 0x76A47643, 0x76A37543, 0x76A47643, +0x75A37543, 0x76A37543, 0x75A37543, 0x76A47643, 0x76A47643, 0x75A37643, 0x76A47643, 0x75A37543, +0x76A37543, 0x75A37643, 0x75A37643, 0x76A47643, 0x75A37643, 0x75A37543, 0x75A37643, 0x75A37543, +0x75A37543, 0x76A37543, 0x76A37543, 0x76A47643, 0x75A37543, 0x769E524C, 0x00800080, 0x2D48A7A2, +0xA425A1B8, 0x9D289ABB, 0x992A98BD, 0x992A99BC, 0x9B289FBA, 0xA226A7B7, 0xAD4646A3, 0x00800080, +0x4141A1A7, 0xA227A8B7, 0xAF550C99, 0x00800080, 0x00704789, 0xB130AEB0, 0xA42B8CB5, 0x00800080, +0x00800080, 0x3E429DA9, 0xA125A5B8, 0x9E2AA4B5, 0xA03569B0, 0x00800080, 0x00723988, 0xB539BDAB, +0xC341BFA6, 0x556F008A, 0x00800080, 0x4C3DA4A9, 0xA425A3B8, 0xA253009C, 0x00800080, 0x2B46A2A4, +0xA425A4B8, 0xA24D15A0, 0x00800080, 0x005F7695, 0xA325A4B8, 0xA33761AD, 0x00800080, 0x3E429DA9, +0x9F26A3B9, 0xA94252A5, 0x00800080, 0x00800080, 0xA450C99C, 0xBF39B1AB, 0x2B730087, 0x922B9CB9, +0x9E279FBA, 0x60650091, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x1A95745B, +0x76A47643, 0x76A37543, 0x75A37643, 0x76A37543, 0x76A37543, 0x76A37543, 0x75A37643, 0x75A37643, +0x75A37543, 0x76A47643, 0x76A47643, 0x75A37543, 0x76A37543, 0x75A37443, 0x72A26F45, 0x689E5F4C, +0x5293325D, 0x0580007E, 0x00800080, 0x00800080, 0x27692790, 0x27692790, 0x0A7D0082, 0x00800080, +0x00800080, 0x09882E71, 0x4293445D, 0x48964D59, 0x549B5C52, 0x639E664C, 0x659E644C, 0x629D624D, +0x649E684B, 0x6CA16F46, 0x72A27444, 0x75A37543, 0x75A37643, 0x75A37543, 0x76A37543, 0x75A37643, +0x76A37543, 0x76A37543, 0x75A37543, 0x76A47643, 0x75A37643, 0x76A47643, 0x75A37543, 0x76A37543, +0x75A37543, 0x76A37543, 0x76A37543, 0x76A47643, 0x75A37643, 0x76A37543, 0x76A37543, 0x75A37643, +0x75A37643, 0x75A37643, 0x75A37543, 0x76A37543, 0x76A47643, 0x75A37643, 0x75A37543, 0x76A47643, +0x76A37543, 0x75A37543, 0x76A47643, 0x76A47643, 0x75A37543, 0x75A37543, 0x76A47643, 0x75A37543, +0x76A47643, 0x75A37643, 0x75A37543, 0x75910061, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x008C4C72, 0x48993C66, 0x399A4765, 0x49965765, 0x4B973F67, 0x409A3E65, 0x3E984966, 0x5E965B62, +0x50994664, 0x47984B65, 0x47984066, 0x43984266, 0x40994265, 0x419A4165, 0x3F9B4164, 0x439A4264, +0x48994963, 0x49994E62, 0x4C984F63, 0x4D974667, 0x409A3C66, 0x46984C64, 0x45994A64, 0x469A3E65, +0x3C9A3D67, 0x46985863, 0x59995661, 0x50974565, 0x43964367, 0x47994A63, 0x469B4762, 0x469C4162, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D987655, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76982B56, 0x00800080, 0x573AA3AB, +0xA0289BBB, 0x962C92BE, 0x922D92BF, 0x922D92BF, 0x942B98BE, 0x9E27A2BA, 0xA4346FAE, 0x00800080, +0x204B9EA2, 0xA026A3B9, 0xAD4749A2, 0x00800080, 0x00686B8E, 0xAE2AA7B4, 0xA22C8AB5, 0x00800080, +0x00800080, 0x0A519BA0, 0x9D279FBA, 0xA0269FB9, 0x9D423EA9, 0x00800080, 0x0067578F, 0xA429AEB5, +0xB433B2AE, 0x177A0083, 0x00800080, 0x7732A2B1, 0xA226A1B9, 0xA053009C, 0x00800080, 0x2B47A1A4, +0xA226A2B9, 0xA14C15A0, 0x00800080, 0x005F7595, 0xA226A2B9, 0xA1385FAE, 0x00800080, 0x0A5299A0, +0x9B289FBA, 0xA43877AB, 0x00800080, 0x007C1B81, 0xCB45C1A3, 0xB32CA4B3, 0x0A7C0081, 0x5B3B99B0, +0x9A299CBB, 0x755F0095, 0x00800080, 0x007C0A81, 0xA226A0B9, 0x9E2E89B6, 0x00800080, 0x0E93745E, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A37543, 0x75A37244, 0x6EA06749, +0x5D9A5153, 0x3E8D1D68, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x05862774, 0x44964B5B, 0x50985356, 0x549A5853, 0x5D9D634E, 0x679F6C49, 0x6CA16C48, 0x6BA06C48, +0x6DA17046, 0x71A37345, 0x74A37544, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76982D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DA34A4D, +0x54994C61, 0x409A4E63, 0x4D993664, 0x3F984965, 0x46964467, 0x4D974E63, 0x439A4563, 0x40974467, +0x429A3965, 0x41994064, 0x41994764, 0x47984864, 0x47993666, 0x4A994564, 0x36994166, 0x4E974366, +0x4B994065, 0x40994864, 0x3C9A4365, 0x369A3867, 0x489A4961, 0x48994563, 0x4E984A64, 0x51975363, +0x48994A64, 0x4A994764, 0x51994863, 0x3E9A3A66, 0x3C9A3367, 0x2F993269, 0x399A4065, 0x45984866, +0x48974865, 0x49974965, 0x4C965164, 0x4F984A63, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D987755, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77920360, 0x00800080, 0x8C2C9FB5, +0x9A2A95BD, 0x1D770086, 0x00800080, 0x00800080, 0x0A56899F, 0x972A9CBC, 0x9F2996B7, 0x0A7C0081, +0x005A8699, 0x9B289EBB, 0xA22F95B2, 0x24780084, 0x3B46A7A2, 0xA226A0B9, 0x9E2E88B6, 0x00800080, +0x0B81007D, 0x00636594, 0x982A99BC, 0x992A99BC, 0x99520AA0, 0x00800080, 0x00655F91, 0x9E279FBA, +0xA026A2B9, 0x61650091, 0x00656191, 0x9F279EBA, 0x9D289DBB, 0x9D54009D, 0x00800080, 0x2A489EA5, +0x9E289EBA, 0x9E4D15A1, 0x00800080, 0x005F7395, 0x9E289EBA, 0x9E3A5DAF, 0x00800080, 0x00665B92, +0x972A9ABC, 0xA027A7B8, 0x566F008A, 0x0D678F8E, 0xBA33ABAF, 0xA23569B0, 0x00800080, 0x145095A3, +0x962B99BD, 0x9C3A5FAF, 0x0A7C0081, 0x16597698, 0x9E289CBA, 0x9B4048AC, 0x00800080, 0x29977457, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47742, 0x77A47743, 0x77A47743, 0x77A47743, 0x76A37543, 0x72A26D46, +0x659D5C4E, 0x51974658, 0x3B8D1E68, 0x0B81007D, 0x00800080, 0x00800080, 0x0081067E, 0x13882770, +0x4095495C, 0x529A5853, 0x5E9D604E, 0x619E644D, 0x66A06A4A, 0x6EA27046, 0x72A37245, 0x72A37345, +0x73A37543, 0x75A47643, 0x76A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, +0x77A47743, 0x77A47743, 0x77A47743, 0x77982D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E3573, 0x3A9A4266, 0x4B975864, 0x45984466, 0x46993C65, 0x48975764, 0x50994463, 0x45994166, +0x43994665, 0x4B9A4D62, 0x4E9B4D60, 0x4B9A4B62, 0x4E9A4E64, 0x50994F63, 0x4D994E64, 0x4F995462, +0x58995861, 0x549A5061, 0x4E994C63, 0x469A4563, 0x4D994F63, 0x49984566, 0x419A4565, 0x55975164, +0x4A9C4162, 0x3D9B3F65, 0x409B4564, 0x5A98605F, 0x58995162, 0x4A984566, 0x44974467, 0x4D9A4863, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D987755, 0x78A57842, 0x77A47742, 0x77A47742, 0x78A47742, 0x77A47742, 0x77A47742, +0x78A57842, 0x77A47742, 0x77A47742, 0x77A47842, 0x77A47742, 0x77A47742, 0x78A57842, 0x78A47742, +0x77A47842, 0x78A47742, 0x78A47742, 0x77A47742, 0x77A47842, 0x77A47742, 0x78A47742, 0x78A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, 0x77A47742, 0x77A47842, 0x78A57842, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x78A47742, 0x77A47842, 0x77A47742, +0x78A47742, 0x78A47742, 0x78A47742, 0x78A47742, 0x77A47742, 0x538C006A, 0x00772085, 0x9E289BBB, +0x973476B7, 0x00800080, 0x00800080, 0x00800080, 0x00646294, 0x942B97BE, 0x9A299CBB, 0x34710089, +0x006C468E, 0x972B98BD, 0x9C28A0BA, 0xA225A3B8, 0xA22D89B6, 0x9C299ABB, 0x992F85B8, 0x00800080, +0x0B81007C, 0x0072328A, 0x952C95BE, 0x952C95BE, 0x64630094, 0x00800080, 0x006E3D8C, 0x982B98BD, +0x99299BBC, 0x9C289EBA, 0x9E289DBA, 0x673899B2, 0x992A99BD, 0x9A54009E, 0x00800080, 0x29499AA6, +0x992A99BC, 0x9A4E14A2, 0x00800080, 0x00607196, 0x9A2999BC, 0x993B5CB0, 0x00800080, 0x007A1484, +0x803195BA, 0x99299EBB, 0xA327A9B6, 0xAB28A4B6, 0xA1279DBA, 0x905114A0, 0x00800080, 0x006C448E, +0x942C95BE, 0x99299CBC, 0xA026A1B9, 0xA0279EBA, 0x9B2999BC, 0x7A5E0098, 0x00800080, 0x569E754B, +0x77A47742, 0x77A47842, 0x78A47742, 0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x78A47742, 0x78A47742, 0x77A47742, 0x76A37244, +0x6DA06649, 0x5D9B5452, 0x4B95435B, 0x3C913562, 0x268B256C, 0x258B266C, 0x31903964, 0x3E93455E, +0x4D985755, 0x5F9E654D, 0x69A06C49, 0x6CA16C48, 0x6EA27046, 0x73A37444, 0x76A47743, 0x77A47743, +0x77A47743, 0x78A47742, 0x78A47742, 0x77A47742, 0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, +0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, 0x77A47742, +0x78A47742, 0x77A47742, 0x77A47842, 0x78A57842, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47842, 0x78A57842, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, +0x77A47842, 0x77A47742, 0x77A47842, 0x77982D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x499A4D63, 0x4C9B4862, 0x46995563, 0x48993E64, 0x49985064, 0x4C964567, 0x53985062, 0x49994763, +0x43984966, 0x419A3D64, 0x4E994163, 0x489A4963, 0x48994E63, 0x3D9A4864, 0x48993E64, 0x45984B65, +0x49994D63, 0x42994964, 0x429A4564, 0x3D9B3A65, 0x489B4461, 0x469A4A63, 0x4A994A63, 0x55984B63, +0x50994C63, 0x54994C62, 0x429A3E65, 0x319A266B, 0x2F994468, 0x47994564, 0x42984265, 0x41993F66, +0x41994166, 0x41984267, 0x46984567, 0x43984167, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D987855, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A57842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, +0x78A57842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x2B860074, 0x0068538F, 0x992A97BC, +0x94404EB0, 0x00800080, 0x00800080, 0x00800080, 0x006C448E, 0x922D93BF, 0x952B97BD, 0x5B660092, +0x00800080, 0x623B93B4, 0x952B97BD, 0x992A99BD, 0x8E4A32A6, 0x952C94BE, 0x953183B9, 0x00800080, +0x0B82007C, 0x007D0A82, 0x892F92BC, 0x922D92BF, 0x3172008A, 0x00800080, 0x00800080, 0x6D3793B6, +0x932C94BF, 0x962B97BD, 0x983965B3, 0x274A94A7, 0x942C95BE, 0x9755009E, 0x00800080, 0x284A97A6, +0x962C96BD, 0x974F14A2, 0x00800080, 0x00606F96, 0x972B96BD, 0x963C5BB1, 0x00800080, 0x00800080, +0x13567F9F, 0x932C96BE, 0x99299ABC, 0x9A2999BC, 0x973181B9, 0x1D770086, 0x00800080, 0x00800080, +0x444392AE, 0x952B97BD, 0x99299ABC, 0x9A2999BC, 0x973379B7, 0x147A0084, 0x00852576, 0x70A37644, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, +0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A57742, 0x77A47543, +0x72A26E46, 0x679F604C, 0x599A5153, 0x4B96465A, 0x4294405D, 0x4094415E, 0x4395485B, 0x4D995456, +0x5C9D624E, 0x69A16E48, 0x71A27244, 0x72A37345, 0x73A37444, 0x76A47743, 0x77A57842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A57842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A47842, 0x78A57842, +0x78A57842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, +0x78A57842, 0x78A47842, 0x78A47842, 0x78992D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008D4672, 0x43995863, 0x429A3D66, 0x47994465, 0x56985862, 0x4E9A4364, 0x439A4465, 0x499B5162, +0x4D9A4C62, 0x49994765, 0x47994865, 0x499A4863, 0x489C4A61, 0x4B9C4C60, 0x499C4761, 0x459A4663, +0x4D984D64, 0x4F984F64, 0x4B9B4B63, 0x529A5561, 0x519A5261, 0x4A9A4F61, 0x4E984965, 0x439A3967, +0x3C9A5264, 0x5A9B4D60, 0x419D3C62, 0x429B4764, 0x459A4F63, 0x5D99625E, 0x589B4C61, 0x44984A68, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D997954, 0x78A47941, 0x78A47941, 0x78A47941, 0x78A47941, 0x79A57941, 0x78A47842, +0x79A47841, 0x78A47941, 0x79A47841, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, +0x78A47941, 0x79A57941, 0x78A47941, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, +0x78A47842, 0x79A57941, 0x79A47841, 0x79A57941, 0x78A47941, 0x78A47842, 0x78A47941, 0x79A57941, +0x79A47841, 0x78A47941, 0x78A47941, 0x79A57941, 0x79A47841, 0x79A47841, 0x78A47941, 0x78A47842, +0x78A47941, 0x79A47841, 0x79A57941, 0x79A57941, 0x78A47941, 0x1082007C, 0x005B849A, 0x952C92BE, +0x924E1DA5, 0x00800080, 0x268E3967, 0x2A860075, 0x007A1384, 0x922D92BF, 0x922D92BF, 0x8B550A9F, +0x00800080, 0x006C448E, 0x883092BD, 0x923D58B2, 0x13751388, 0x922D92BF, 0x923280BA, 0x00800080, +0x0C840E78, 0x00800080, 0x623B92B4, 0x923088BD, 0x0A7D0082, 0x00852676, 0x00800080, 0x006C448E, +0x883092BD, 0x92327FBB, 0x446C008E, 0x135192A3, 0x922D92BF, 0x945014A3, 0x00800080, 0x284A94A7, +0x922D92BF, 0x945014A3, 0x00800080, 0x00616D96, 0x932D92BF, 0x933D59B2, 0x00800080, 0x00800080, +0x00800080, 0x444E6BA5, 0x922D92BF, 0x923575B8, 0x446C008E, 0x00800080, 0x00841B78, 0x00800080, +0x00771D86, 0x444392AE, 0x922D93BF, 0x933B62B4, 0x3A6F008C, 0x00800080, 0x028D5A67, 0x72A37643, +0x79A57941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, 0x78A47941, 0x79A47841, 0x79A47841, +0x79A57941, 0x78A47842, 0x79A47841, 0x78A47941, 0x79A47841, 0x78A47941, 0x79A47841, 0x77A47842, +0x76A37443, 0x70A16B47, 0x669E604C, 0x5C9B5751, 0x54995255, 0x52995355, 0x559A5952, 0x5D9D624E, +0x67A06D48, 0x71A27444, 0x76A47642, 0x77A47742, 0x78A47842, 0x78A47842, 0x78A47941, 0x79A57941, +0x79A57941, 0x79A47841, 0x78A47941, 0x79A57941, 0x79A47841, 0x78A47941, 0x78A47941, 0x79A57941, +0x78A47842, 0x79A47841, 0x79A57941, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, +0x79A57941, 0x79A57941, 0x79A57941, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, +0x79A47841, 0x78A47842, 0x78A47941, 0x79A47841, 0x78A47842, 0x79A57941, 0x79A47841, 0x79A47841, +0x79A57941, 0x78A47941, 0x79A57941, 0x79A47841, 0x78A47941, 0x79A47841, 0x79A47841, 0x78A47941, +0x79A57941, 0x79A57941, 0x78A47941, 0x79992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3C994A66, 0x489B5361, 0x4C9B4662, 0x579A5660, 0x3E9B4465, 0x4F995B62, 0x4B964E66, 0x5D9A4D60, +0x48994864, 0x499A4B64, 0x3C9B4464, 0x449B4763, 0x449A4763, 0x4C9A4164, 0x4A9C4A61, 0x3E9A4765, +0x4C9A4D62, 0x4A9A3D64, 0x4A9B4762, 0x419B3C64, 0x4A9C4461, 0x46995263, 0x49995262, 0x4D995163, +0x4E9A5061, 0x489B4563, 0x319B216B, 0x39994C65, 0x49994864, 0x449A4664, 0x4A994565, 0x449A4664, +0x4D9B5660, 0x539D4C5E, 0x489E4A60, 0x499C4960, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D997A54, 0x7AA57941, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57941, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x79A57941, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, +0x79A57A41, 0x7AA57A41, 0x79A57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x79A57A41, 0x79A57941, 0x79A57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA47941, 0x2C860074, 0x00800080, 0x00800080, +0x00800080, 0x0080027F, 0x4193435E, 0x408A066D, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x248D3668, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0E8E5666, 0x0881007D, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x32870073, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x3593515D, 0x1A840079, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0080027F, 0x449A6B52, 0x73A37843, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA47841, +0x78A47842, 0x77A37343, 0x70A16B47, 0x699E664A, 0x649D624D, 0x629D624D, 0x639E674B, 0x6AA06E48, +0x71A27445, 0x77A47842, 0x79A47941, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7A992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008D4F71, 0x529B3F63, 0x449A4565, 0x529A5262, 0x4E9A4E62, 0x4E9A4A63, 0x4F9C4C61, 0x4D9A4D64, +0x519A4C63, 0x439C4864, 0x599A5D60, 0x61985E61, 0x61976261, 0x6499665E, 0x6699665E, 0x65995D5F, +0x529B4862, 0x439B4B63, 0x4B9A4B62, 0x469B4964, 0x4B9A4765, 0x479B5462, 0x56995162, 0x4F9A5461, +0x51994765, 0x429A4265, 0x489B5961, 0x579C4A60, 0x3E9E4162, 0x4A9B4C63, 0x509B5C5F, 0x5C9C515E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D997A54, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57B41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57941, 0x5D8E0068, 0x00800080, 0x00800080, +0x00800080, 0x00872E73, 0x50985256, 0x5093305F, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00841A79, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x509B6252, 0x0E82007C, 0x00800080, 0x00800080, 0x00800080, 0x43986155, 0x55911E62, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x0081087D, 0x00800080, 0x00800080, 0x00800080, 0x0083147B, 0x56963D5A, +0x19830079, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x1B8D4068, 0x589A5752, 0x51932E5F, +0x0280007F, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x22904D63, 0x65A06F49, 0x76A47942, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57941, 0x79A47842, 0x76A37343, 0x72A27045, 0x6FA16D47, 0x6DA16E47, 0x70A27145, 0x73A37544, +0x77A47842, 0x79A57942, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57B41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57B41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7A992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4A9A4864, 0x529B4861, 0x539C4E5F, 0x4F9B5062, 0x5E9A4761, 0x409B5163, 0x5D985761, 0x48995364, +0x549C4661, 0x479A4A64, 0x549B4262, 0x409A4663, 0x489B4762, 0x4A9A4F63, 0x439B5063, 0x4C9A3D64, +0x4B9A4A62, 0x509B4263, 0x429C4C62, 0x479C3D62, 0x4E9C4461, 0x4D995B62, 0x479B5062, 0x499B4D63, +0x4F9B4862, 0x4C9C3365, 0x279B4867, 0x4C994A63, 0x459B4762, 0x4C9A4C63, 0x559A565F, 0x5B9B5460, +0x4B9A4564, 0x479A4D64, 0x4E994D65, 0x50984D64, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D997B54, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, +0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, +0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, +0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57A41, 0x779F584A, 0x26870B72, 0x00800080, +0x0082117B, 0x3495585B, 0x5F9D614E, 0x5F9C5950, 0x348A106E, 0x00800080, 0x00800080, 0x05841A77, +0x3D95505B, 0x338A146D, 0x0480007E, 0x0082107C, 0x2B880E70, 0x00800080, 0x00810A7D, 0x22915062, +0x6B9F6949, 0x5E952F5A, 0x1082007B, 0x0080047E, 0x178D4169, 0x639E664B, 0x639C584F, 0x358A136D, +0x0380007E, 0x0081087D, 0x198A2C6D, 0x0F82007C, 0x00800080, 0x0083147B, 0x3A913A62, 0x1382007B, +0x00800080, 0x0082147A, 0x3C96575A, 0x2D89126F, 0x00800080, 0x0082127B, 0x39975F59, 0x5E9C5850, +0x4E93355D, 0x20870E73, 0x00800080, 0x00820D7C, 0x1E8D3969, 0x519A5854, 0x5F9D5F4F, 0x5A9A5353, +0x4B912B61, 0x0F82007C, 0x00800080, 0x0082107B, 0x29904164, 0x569C6151, 0x6BA27346, 0x77A47A41, +0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, +0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, +0x7BA57B41, 0x7BA57A40, 0x7AA57941, 0x78A47742, 0x77A47643, 0x77A47743, 0x77A47842, 0x79A57941, +0x7AA57A41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, +0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, +0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, +0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, +0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, +0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, +0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7B992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E5070, 0x4C9A5263, 0x459A5962, 0x4F9C4E61, 0x5A9B4F61, 0x4F9C4E60, 0x549B5362, 0x4F9C3E63, +0x489C5F61, 0x5F9A5560, 0x559C5460, 0x509D505F, 0x509D4E61, 0x519D5261, 0x559C595F, 0x599D555E, +0x559D575D, 0x5D9B605E, 0x5A9A5262, 0x4C9A5262, 0x53995161, 0x4F9A5163, 0x479A3F67, 0x4C9B5C60, +0x5E995861, 0x5A9A5861, 0x4C9A5063, 0x429C4264, 0x589B615E, 0x4E9F425F, 0x439D4D62, 0x599A5461, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, +0x3C913562, 0x2D997B54, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x77A37144, 0x679D5C4D, 0x53984D56, +0x4D985456, 0x5C9D654E, 0x6BA16D47, 0x6B9F654A, 0x5C9A5252, 0x4995465A, 0x48964D59, 0x559B5C52, +0x5C9B5950, 0x52974B57, 0x4695465B, 0x4795495A, 0x4995465A, 0x4494465B, 0x4B985457, 0x609F6B4B, +0x6FA16E46, 0x679E5B4E, 0x4F974958, 0x48964C59, 0x579C6250, 0x6AA06C48, 0x689E5F4C, 0x54974B57, +0x4494425C, 0x4595485B, 0x4B964B59, 0x4895455B, 0x45954A5A, 0x519A5B53, 0x5F9D5F4E, 0x58995154, +0x4B974C59, 0x519A5C53, 0x629E634D, 0x5F9B5551, 0x4D974B58, 0x4F995755, 0x609E664C, 0x679E624C, +0x59995153, 0x4A95465A, 0x4595455C, 0x4695485A, 0x4B985157, 0x599C614F, 0x67A0684A, 0x659D5E4D, +0x55984E55, 0x4995485A, 0x4795485A, 0x49964B59, 0x4F995555, 0x5E9E674C, 0x6FA27644, 0x79A57B41, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7B992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4F9B4463, 0x589C4E60, 0x479E4A60, 0x4B9D5660, 0x589B5E5F, 0x4C9B3D65, 0x4C9A6061, 0x68975162, +0x4B9B5361, 0x469D4A61, 0x50995264, 0x449C3F63, 0x459C4A62, 0x509B4E62, 0x4B9B4164, 0x509B4962, +0x459B5262, 0x529B4D61, 0x399C4964, 0x479D3E62, 0x4D9D4561, 0x53995B60, 0x439B4E63, 0x4E9B4662, +0x55995862, 0x459C2568, 0x429B4D64, 0x4A9C4662, 0x519B4F61, 0x519B5760, 0x5A9A5860, 0x489C4A62, +0x4E994B62, 0x4F985B61, 0x61976560, 0x60985B60, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A77F3E, 0x7DA57B40, +0x3C913562, 0x2D997C54, 0x7CA57B40, 0x7BA57B40, 0x7CA67C40, 0x7CA57B40, 0x7CA67C40, 0x7CA57B40, +0x7BA57B40, 0x7BA57C40, 0x7BA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57C40, +0x7BA57B40, 0x7CA67C40, 0x7CA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57C40, +0x7CA57B40, 0x7CA67C40, 0x7CA67C40, 0x7CA57B40, 0x7BA57C40, 0x7CA57B40, 0x7CA57B40, 0x7BA57C40, +0x7BA57B40, 0x7CA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA67C40, 0x7BA57C40, 0x7BA57C40, 0x7BA57C40, +0x7CA57B40, 0x7BA57C40, 0x7CA67C40, 0x7BA57C40, 0x7CA57B40, 0x77A37243, 0x6B9F614B, 0x5B9B5851, +0x599C5F50, 0x67A06E49, 0x74A37643, 0x74A26F45, 0x679E5E4C, 0x56995254, 0x53995754, 0x5C9D634E, +0x669E624C, 0x5D9B5751, 0x53985155, 0x51985255, 0x53985155, 0x50985156, 0x569B5D51, 0x67A06F48, +0x72A37244, 0x6D9F6349, 0x5C9B5551, 0x559A5853, 0x609F6A4B, 0x6FA17145, 0x6FA06848, 0x5F9B5750, +0x51984F56, 0x50985256, 0x54995454, 0x53985155, 0x51995455, 0x5B9C624F, 0x659F654C, 0x5F9C594F, +0x569A5653, 0x5B9D624F, 0x689F684A, 0x669D5E4D, 0x589A5552, 0x589C5F50, 0x67A06D49, 0x6EA16B47, +0x649D5C4E, 0x57995154, 0x4F984D57, 0x4F985256, 0x579B5D51, 0x649F6B4A, 0x6FA17145, 0x6EA06848, +0x619C5B4F, 0x55995155, 0x4F984F57, 0x51985455, 0x589C5F50, 0x66A06E49, 0x74A37843, 0x7AA57B40, +0x7CA67C40, 0x7CA67C40, 0x7CA57B40, 0x7BA57C40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7BA57C40, +0x7CA67C40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57B40, 0x7CA67C40, +0x7BA57B40, 0x7BA57B40, 0x7BA57C40, 0x7BA57C40, 0x7CA57B40, 0x7CA67C40, 0x7BA57C40, 0x7CA57B40, +0x7BA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA67C40, 0x7BA57B40, 0x7CA57B40, 0x7BA57C40, 0x7CA67C40, +0x7BA57B40, 0x7BA57C40, 0x7BA57B40, 0x7CA67C40, 0x7CA67C40, 0x7CA57B40, 0x7CA67C40, 0x7CA67C40, +0x7CA57B40, 0x7CA57B40, 0x7CA67C40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57C40, 0x7CA57B40, +0x7BA57B40, 0x7CA57B40, 0x7BA57C40, 0x7BA57C40, 0x7CA57B40, 0x7CA67C40, 0x7CA67C40, 0x7BA57C40, +0x7CA67C40, 0x7BA57C40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7BA57C40, 0x7CA67C40, 0x7CA67C40, +0x7CA57B40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7CA67C40, 0x7BA57C40, 0x7BA57B40, 0x7BA57B40, +0x7BA57C40, 0x7BA57C40, 0x7BA57C40, 0x7B992D54, 0x35913C62, 0x7BA57D40, 0x7FA7803E, 0x82A7833C, +0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E546F, 0x589A4E62, 0x549B5360, 0x5A9B5D5F, 0x4F9C5360, 0x529D5B5E, 0x599C4362, 0x4E9B5E60, +0x509B5363, 0x4C9D4F61, 0x519D4D60, 0x479D4263, 0x459E4760, 0x4C9E4F5E, 0x4B9E475F, 0x459E4960, +0x4C9D5461, 0x5B9D5F5E, 0x5C9E5A5D, 0x599C5860, 0x539C4762, 0x4B9B5262, 0x559A5062, 0x469A4A65, +0x3B9C3A67, 0x4F9C5460, 0x4F9B5262, 0x549B5062, 0x4F9C5161, 0x4E9D5860, 0x629E4F5D, 0x3D9F4962, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x80A77F3E, 0x7DA57B40, +0x3C913562, 0x2D997C54, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67C3F, 0x7CA67D3F, 0x7DA67D3F, +0x7DA67D3F, 0x7CA67C40, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, +0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7CA67D3F, 0x7CA67D3F, 0x7CA67C40, 0x7CA67D3F, +0x7DA67D3F, 0x7DA67C3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67C3F, 0x7DA67C3F, +0x7CA67C40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67D3F, +0x7CA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x79A47542, 0x71A16B47, 0x669E654B, +0x669F6A4A, 0x70A37644, 0x79A57B40, 0x79A47641, 0x72A16B47, 0x639D614C, 0x609D634D, 0x67A06C49, +0x6EA16C47, 0x699F644B, 0x619D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D604E, 0x639E684B, 0x6EA27445, +0x77A47742, 0x73A26E45, 0x679E644B, 0x639E664B, 0x6BA17246, 0x76A47742, 0x74A27144, 0x6B9F654A, +0x609C5E4E, 0x5E9C5F4F, 0x609D614D, 0x619D604D, 0x609D624D, 0x669F6B4A, 0x6EA16E47, 0x6A9F664A, +0x639E634D, 0x66A06B49, 0x6FA27045, 0x6EA06948, 0x659E634C, 0x649F6A4A, 0x6FA27345, 0x75A37243, +0x6FA16948, 0x649D604D, 0x5D9C5C4F, 0x5D9D604E, 0x639F694B, 0x6FA27345, 0x76A47742, 0x76A37244, +0x6CA06749, 0x639D5F4E, 0x5C9C5C50, 0x5D9D604E, 0x659F6A4A, 0x6FA27544, 0x78A47A41, 0x7BA57C40, +0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67D3F, +0x7CA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67C3F, +0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7CA67D3F, 0x7CA67C40, 0x7CA67D3F, 0x7CA67D3F, +0x7CA67C40, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67C3F, 0x7CA67D3F, 0x7DA67C3F, +0x7CA67D3F, 0x7CA67C40, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7CA67D3F, 0x7DA67D3F, +0x7CA67C40, 0x7CA67D3F, 0x7DA67C3F, 0x7DA67C3F, 0x7DA67C3F, 0x7DA67C3F, 0x7DA67D3F, 0x7CA67D3F, +0x7DA67C3F, 0x7CA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x7DA67C3F, 0x7CA67D3F, +0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, +0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, +0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7C992D54, 0x35913C62, 0x7BA57D40, 0x7FA7803E, 0x82A7833C, +0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x509C4463, 0x589C535E, 0x499F495F, 0x4B9E4F5E, 0x5F9C5B5F, 0x649B5060, 0x409A5364, 0x6499695F, +0x4F9B4D63, 0x549C4A60, 0x4C9A5463, 0x4E9C4562, 0x489C4B62, 0x4D9C5160, 0x4F9A4863, 0x529C4F60, +0x4D9C4F61, 0x499C5261, 0x459D3C63, 0x489E4760, 0x4A9E4960, 0x549B5B5F, 0x4A9C4D61, 0x519D4A60, +0x589B5F60, 0x339D3667, 0x4D9C4B62, 0x489D4B60, 0x4F9B5062, 0x5D9B615D, 0x589B4263, 0x4B9B4763, +0x499B4965, 0x449D4363, 0x459D3C64, 0x3D9D5262, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x81A77F3E, 0x7DA67C40, +0x3C913562, 0x2D997D53, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, +0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, +0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, +0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, +0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, +0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67C40, 0x7BA47841, 0x75A37244, 0x70A16E46, +0x70A27245, 0x76A47942, 0x7CA67C40, 0x7CA57A41, 0x77A37244, 0x6EA16C47, 0x6CA16D47, 0x70A27344, +0x74A37444, 0x72A27045, 0x6CA16C48, 0x6BA16C48, 0x6CA16C48, 0x6CA16C48, 0x6EA17146, 0x74A37843, +0x79A57A41, 0x78A37443, 0x71A26F46, 0x6EA27046, 0x73A37643, 0x7AA57A41, 0x7AA47742, 0x73A27045, +0x6CA06B48, 0x6AA06B49, 0x6CA16D47, 0x6DA16C47, 0x6CA16E47, 0x70A27245, 0x74A47444, 0x72A27045, +0x6EA16E47, 0x70A27245, 0x75A37543, 0x74A37144, 0x6FA16E47, 0x6FA27246, 0x75A47843, 0x79A47842, +0x76A37344, 0x6FA16C47, 0x6AA06949, 0x6AA06C48, 0x6EA17245, 0x76A47942, 0x7BA57B40, 0x79A57841, +0x75A37144, 0x6EA16B48, 0x69A06949, 0x6AA06C48, 0x6FA27345, 0x77A47A42, 0x7BA57C40, 0x7DA67D40, +0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, +0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, +0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, +0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, +0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, +0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, +0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, +0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, +0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, +0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7D992D53, 0x35913C62, 0x7CA67D40, 0x7FA7813E, 0x82A7833C, +0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008D5771, 0x559B5861, 0x539C5E5F, 0x639D4B5E, 0x4E9E545E, 0x569C4C61, 0x469C5E61, 0x579B5462, +0x4D9D4C61, 0x4E9D4C61, 0x5D9C645D, 0x609F5C5B, 0x5A9F5A5C, 0x579F565D, 0x53A0535C, 0x54A2575B, +0x56A1545B, 0x4CA0465E, 0x4D9D555F, 0x589E5D5E, 0x5A9E555D, 0x559E4C60, 0x489D4B61, 0x529C5860, +0x569B4962, 0x4A9C3D65, 0x309F4764, 0x5C9B575F, 0x4E9B5A62, 0x5C9B5560, 0x479D5361, 0x609F525B, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x81A77F3E, 0x7DA67C40, +0x3C913562, 0x2D997E53, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7DA67E3F, 0x7DA67E3F, +0x7DA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, +0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7DA67D40, 0x7DA67C40, 0x79A47842, 0x77A47743, +0x77A47942, 0x7BA57C40, 0x7DA67D40, 0x7DA67C40, 0x7BA47941, 0x77A47543, 0x75A47643, 0x77A47942, +0x7BA57B41, 0x79A47742, 0x76A47543, 0x75A47544, 0x76A47643, 0x76A47643, 0x77A47742, 0x79A57B41, +0x7CA67C40, 0x7BA57941, 0x78A47742, 0x77A47742, 0x79A47B41, 0x7CA67D40, 0x7CA57B40, 0x79A47742, +0x76A37543, 0x75A37543, 0x76A47743, 0x77A47543, 0x76A47643, 0x77A47842, 0x79A47942, 0x78A47742, +0x76A47543, 0x77A47942, 0x7AA57A41, 0x79A47842, 0x77A47643, 0x77A47842, 0x7BA57C40, 0x7CA57B40, +0x7BA57941, 0x77A47643, 0x74A37444, 0x74A37643, 0x77A47942, 0x7BA57C40, 0x7CA67D40, 0x7DA67C40, +0x7BA47941, 0x77A47543, 0x74A37444, 0x74A37643, 0x78A47A41, 0x7BA57C40, 0x7DA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7DA67D40, +0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7DA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, +0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67D3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, +0x7DA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7E992D53, 0x35913C62, 0x7CA67D40, 0x7FA7813E, 0x82A7833C, +0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x459A4D65, 0x5C9E515D, 0x539E4B60, 0x4F9F535D, 0x569D685D, 0x629B615E, 0x4C9B4264, 0x579B6260, +0x6E9A565F, 0x549C5660, 0x489E4662, 0x579A4E63, 0x469E4561, 0x499D4D61, 0x4F9D4961, 0x489C5761, +0x489C4863, 0x4F9D4E60, 0x529D3B62, 0x4A9F4F5F, 0x4F9F4A5F, 0x469D5B5F, 0x509D4D60, 0x499E5061, +0x5E99655F, 0x359E3C66, 0x4E9E5060, 0x4D9E575E, 0x4B9B5861, 0x639B5660, 0x429C4863, 0x469D4764, +0x429D5261, 0x519B4B62, 0x509D4C61, 0x479E4061, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A8823C, 0x81A77F3E, 0x7EA67C3F, +0x3C913562, 0x2D997F53, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7EA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, +0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67E3F, 0x7DA67C40, 0x7CA67C40, +0x7CA67D40, 0x7EA67E3F, 0x7EA67F3F, 0x7EA67E3F, 0x7EA67C3F, 0x7CA67C40, 0x7BA57C40, 0x7CA67D40, +0x7EA67E3F, 0x7DA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7DA67E3F, +0x7EA67E3F, 0x7EA67D3F, 0x7CA67C40, 0x7CA67C40, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67C3F, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7DA67D40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7DA67D40, 0x7DA67C40, 0x7CA67C40, 0x7CA67C40, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67D3F, 0x7CA67C40, 0x7BA57B40, 0x7BA57C40, 0x7CA67E3F, 0x7EA67E3F, 0x7FA67F3F, 0x7FA67E3F, +0x7EA67C3F, 0x7CA67C40, 0x7BA57B40, 0x7CA67C40, 0x7DA67E3F, 0x7EA67E3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, +0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7F992D53, 0x35913C62, 0x7CA67E3F, 0x7FA7813E, 0x82A8833C, +0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E5570, 0x569E4D60, 0x5B9C645E, 0x509E515F, 0x5C9D5E5D, 0x4D9D4B61, 0x5C9D5A5F, 0x4D9E4D61, +0x499E5260, 0x6D9E5C5B, 0x5B9E595C, 0x5A9D565E, 0x539E5060, 0x4F9F545E, 0x559E565E, 0x5C9C5860, +0x599C4E60, 0x4BA0545E, 0x54A04C5D, 0x41A04560, 0x5E9E5F5D, 0x629F5C5C, 0x4C9E4D61, 0x499F4460, +0x539D595F, 0x5B9C575F, 0x4B9D5261, 0x3B9E3A66, 0x509D555F, 0x459C4F64, 0x5D9D545F, 0x499F565F, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9863A, 0x86A8853B, 0x83A8823C, 0x81A77F3E, 0x7EA67D3F, +0x3C913562, 0x2D9A7F53, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7F9A2D53, 0x35913C62, 0x7DA67E3F, 0x7FA7813E, 0x82A8833C, +0x85A8863B, 0x86A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4F9D5960, 0x4FA0495D, 0x589F4C60, 0x53A04D5D, 0x579E5E5D, 0x6A9B685E, 0x619C4F5F, 0x4B9B5F61, +0x649C6C5E, 0x579B5560, 0x539F4060, 0x4A9D5B61, 0x509E3F62, 0x489E4961, 0x4F9E4A60, 0x459C5762, +0x529D4861, 0x559D4C5F, 0x539E4361, 0x4E9F565D, 0x569E545F, 0x459D5B5F, 0x509E4E5F, 0x4E9E555F, +0x5B9A685F, 0x399E3D65, 0x539F535E, 0x549F565E, 0x4E9B6260, 0x5E9B4D60, 0x4C9D5161, 0x429E4464, +0x519C5661, 0x5C9C5960, 0x5B9D5C5E, 0x5C9E4B5E, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A8853A, 0x84A8823B, 0x81A77F3D, 0x7FA67D3F, +0x3C913562, 0x2E9A7F53, 0x7FA77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x80A7803E, 0x80A77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A7803E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x80A77F3E, 0x80A77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, +0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A7803E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, +0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA7803E, +0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7F9A2E53, 0x35913C62, 0x7DA67F3F, 0x7FA7813D, 0x82A8843B, +0x85A8863A, 0x87A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E5670, 0x519E5C5E, 0x679E525C, 0x509E5A5E, 0x599D5060, 0x4D9E625E, 0x599E525F, 0x489F4D61, +0x699C605C, 0x619E6559, 0x5D9E555E, 0x5A9C615F, 0x5D9D5A5E, 0x5A9F565E, 0x569D5D5F, 0x579E585F, +0x57A0575C, 0x559E5B5D, 0x539F4361, 0x51A1565C, 0x4BA0465F, 0x509F5C5E, 0x5DA0645B, 0x509F4D60, +0x559F4E5E, 0x4F9F5C5E, 0x639D6C5B, 0x539E5B5F, 0x479F3D64, 0x499E5461, 0x499D5862, 0x5B9D555E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8B38, 0x8BAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A8853A, 0x84A8833B, 0x81A7803D, 0x7FA67D3F, +0x3C913661, 0x2E9A8153, 0x80A7803E, 0x81A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x81A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7813E, 0x81A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, +0x80A7813E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x81A7813E, 0x80A7803E, 0x81A7803E, +0x81A7803E, 0x81A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x81A7813E, 0x80A7803E, 0x81A7803E, 0x80A7803E, +0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7813E, 0x81A7813E, 0x80A7813E, 0x80A7803E, +0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7803E, 0x81A7803E, +0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x81A7803E, 0x80A7803E, 0x81A7813E, 0x81A7813E, 0x80A7803E, 0x81A7803E, 0x81A7803E, +0x80A7803E, 0x80A7813E, 0x80A7813E, 0x80A7813E, 0x81A7803E, 0x81A7803E, 0x80A7813E, 0x80A7813E, +0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x81A7803E, +0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x81A7803E, +0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7813E, +0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7813E, +0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, +0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7813E, +0x81A7803E, 0x80A7803E, 0x81A7803E, 0x809A2E53, 0x36913C61, 0x7DA67F3F, 0x80A7813D, 0x83A8843B, +0x85A8863A, 0x87A9883A, 0x89AA8A39, 0x8AAA8B38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x59A0485D, 0x44A0555E, 0x4C9F4C60, 0x51A04E5E, 0x5C9F555D, 0x649C685E, 0x679B5A5F, 0x4F9C5561, +0x649D6D5C, 0x679C585F, 0x5D9F465E, 0x449F5360, 0x579D4762, 0x419E4562, 0x4DA04B5E, 0x499D4B62, +0x619E505E, 0x559D595F, 0x509F4F5F, 0x4CA05A5D, 0x5A9F565E, 0x499E4F60, 0x569E4C5E, 0x4C9F5260, +0x599A6960, 0x449E3B64, 0x549F515E, 0x549E5B5D, 0x559B6160, 0x5D9C4E60, 0x4C9D5A5F, 0x3F9E4464, +0x659C5E5F, 0x5F9F5C5C, 0x5D9D5F5E, 0x6D9E495D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A9863A, 0x85A8833B, 0x82A7813D, 0x7FA67E3E, +0x3D913661, 0x2E870074, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00917362, 0x73A37345, 0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x4D8B006C, 0x00723988, -0xB135B9AD, 0xBD497EA1, 0x00800080, 0x006F558A, 0xB737B8AC, 0xB431AFAF, 0x526D008B, 0x00800080, -0x4E3EA5A8, 0xA525A3B7, 0x9F53009D, 0x00800080, 0x006E3E8B, 0xA026A2B9, 0xA22C8BB5, 0x00800080, -0x006E3E8B, 0x9E26A4B9, 0xB640A8A7, 0x00754086, 0xB62DA4B2, 0x6B620093, 0x00800080, 0x00800080, -0x006E548A, 0x51565B99, 0xA625A4B7, 0xA325A5B8, 0xA625A4B7, 0xA352009C, 0x00800080, 0x2B46A2A4, -0xA226A2B9, 0x9F4D14A1, 0x00800080, 0x005F7495, 0xA125A3B8, 0xA43763AC, 0x00800080, 0x4F41AAA6, -0xAA27A5B6, 0xA1413EA8, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0xA527AAB6, -0xAE2EAEB2, 0xA827A5B6, 0xA525A4B7, 0xA425A3B8, 0xA425A3B8, 0xA32B8CB4, 0x00800080, 0x0F94735E, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A26F46, 0x6A9E614B, 0x408A006F, -0x00800080, 0x1D5188A3, 0x922D92BF, 0x942B97BD, 0x99299CBB, 0x9E289EBB, 0x9C2999BC, 0x962C93BE, -0x923575B8, 0x0A7D0082, 0x00800080, 0x00800080, 0x00800080, 0x00820F7C, 0x1B881D70, 0x298E3667, -0x3F94455D, 0x509A5C53, 0x66A06C49, 0x71A27345, 0x73A37344, 0x72A37045, 0x70A26E46, 0x6CA16C48, -0x6CA16D47, 0x70A27046, 0x72A27345, 0x72A37345, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, -0x73A37344, 0x73A37344, 0x73A37344, 0x73910062, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00916F65, 0x70A3714A, 0x72A2754A, 0x74A37149, 0x6DA36D4A, 0x70A2734A, 0x73A2714A, 0x6FA2704A, -0x6EA46B49, 0x6CA3714A, 0x75A27649, 0x76A27749, 0x78A27849, 0x79A27849, 0x77A27849, 0x76A37449, -0x70A36F4A, 0x6FA36F4A, 0x6EA46F49, 0x6EA36C4A, 0x72A27549, 0x6DA3694B, 0x6DA46D4A, 0x76A27849, -0x75A47348, 0x71A36C4A, 0x6AA3704A, 0x71A46F49, 0x71A46D48, 0x6CA46D49, 0x6FA46F48, 0x6EA46E49, -0x72A37049, 0x68A3704A, 0x6EA26E4B, 0x6EA2714A, 0x6FA37049, 0x6DA36F4A, 0x6EA36A4A, 0x6AA36D4A, -0x6AA46E4A, 0x6CA36F4A, 0x74A26F4A, 0x6AA36F4A, 0x6EA36C4A, 0x6CA3724A, 0x72A2724A, 0x71A36D49, -0x6DA3734A, 0x70A36E4A, 0x6CA36C4A, 0x69A36A4B, 0x6DA46F49, 0x71A46D48, 0x6DA36E4A, 0x71A27449, -0x72A37149, 0x70A3714A, 0x71A2704A, 0x6EA36E49, 0x6FA36E49, 0x6CA36D4B, 0x6FA2724A, 0x73A2744A, -0x74A2734A, 0x73A2734A, 0x71A3714A, 0x70A37149, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00917462, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x22850077, 0x00695B8E, -0xAE31B3B0, 0xB433B3AE, 0xB333B4AE, 0xB12FAEB1, 0xAE2FAFB1, 0xAF2FAEB1, 0x80620092, 0x00800080, -0x4D3DA4A9, 0xA425A4B8, 0xA253009C, 0x00800080, 0x006E418B, 0xA325A4B8, 0xA32B8CB4, 0x00800080, -0x007C0A81, 0x9D27A1BA, 0xAE35BCAD, 0x26647090, 0xAD2AA2B6, 0x406E008B, 0x00800080, 0x006C718C, -0xC03FBEA7, 0xB733AEAE, 0xA625A3B7, 0xA225A4B8, 0xA425A3B8, 0xA253009C, 0x00800080, 0x2B46A2A4, -0xA325A2B8, 0xA04C15A0, 0x00800080, 0x005F7595, 0xA225A4B8, 0xA43761AD, 0x00800080, 0x4C3DA3A9, -0xA425A4B8, 0xA24140A8, 0x00800080, 0x0180007F, 0x00800080, 0x00800080, 0x007A1683, 0xA225A3B8, -0xA425A4B8, 0xA425A3B8, 0xA325A2B8, 0xA226A1B9, 0xA126A0B9, 0xA026A0B9, 0x00800080, 0x00917362, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x73A27244, 0x6EA06649, 0x5C95315B, -0x00800080, 0x007D0A82, 0x6B3892B6, 0x922D92BF, 0x922D92BF, 0x922D92BF, 0x922D92BF, 0x922D92BF, -0x4E670A93, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0F8C4669, 0x58995054, 0x4996485A, -0x4B975157, 0x5A9C634E, 0x6BA17047, 0x73A37444, 0x74A37444, 0x73A37344, 0x73A37244, 0x72A37244, -0x72A37344, 0x73A37344, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37444, 0x74910062, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00917064, 0x70A3734A, 0x73A37249, 0x6DA46B4A, 0x70A2754A, 0x75A2724A, 0x6CA36F4A, 0x71A36D49, -0x6DA3724A, 0x77A27649, 0x75A37249, 0x71A4704A, 0x70A3704A, 0x70A3704A, 0x71A37349, 0x75A37648, -0x77A37449, 0x70A36E4A, 0x6EA36F49, 0x6EA36E4A, 0x70A46F4A, 0x76A37049, 0x69A36C4B, 0x6EA4734A, -0x79A37749, 0x73A47149, 0x71A36D4A, 0x6DA37149, 0x71A47248, 0x6FA56C49, 0x6CA46D49, 0x6EA56F48, -0x6BA37349, 0x6DA36C49, 0x70A36E4A, 0x6CA26F4B, 0x72A37149, 0x70A36C49, 0x70A26F4A, 0x6CA36A4A, -0x6EA46D4A, 0x6EA36F4A, 0x6EA3744A, 0x70A36C4A, 0x71A36C4A, 0x6BA36F4A, 0x72A2714A, 0x73A3714A, -0x6CA36F49, 0x71A36D49, 0x6DA36E4A, 0x69A46B4B, 0x6EA47048, 0x6FA36F48, 0x6DA37149, 0x76A27449, -0x70A37149, 0x73A2724A, 0x70A37049, 0x70A36F49, 0x6EA3704A, 0x72A37149, 0x6FA36F4A, 0x6FA46D4A, -0x6CA36D4A, 0x6CA36C4A, 0x6CA36D4A, 0x6EA36F4A, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00917462, 0x75A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37543, 0x75A37443, -0x74A37444, 0x74A37444, 0x75A37443, 0x74A37543, 0x74A37444, 0x74A37543, 0x75A37443, 0x74A37444, -0x74A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, -0x74A37444, 0x74A37444, 0x74A37543, 0x75A37443, 0x74A37444, 0x74A37444, 0x74A37543, 0x75A37543, -0x75A37443, 0x74A37444, 0x75A37443, 0x74A37444, 0x75A37443, 0x74A37444, 0x74A37444, 0x74A37444, -0x75A37443, 0x74A37444, 0x74A37444, 0x75A37543, 0x74A37543, 0x74A27045, 0x00800080, 0x00579E99, -0xA928A7B5, 0xA425A2B8, 0xA126A1B9, 0xA126A0B9, 0xA225A4B8, 0xA729ABB5, 0xAE540C9A, 0x00800080, -0x4C3DA2A9, 0xA426A7B7, 0xA753009B, 0x00800080, 0x006E448A, 0xAB2BABB4, 0xA42B8CB4, 0x00800080, -0x00800080, 0x68369FB0, 0xA42BB2B3, 0x5549A4A1, 0xA425A0B8, 0x0A7C0081, 0x00800080, 0x7B49C0A2, -0xC442C0A6, 0xB74369A4, 0x4E6B008C, 0x4C3DA4A9, 0xA425A3B8, 0xA253009C, 0x00800080, 0x2B46A2A4, -0xA425A3B8, 0xA24C15A0, 0x00800080, 0x005F7695, 0xA325A4B8, 0xA33761AD, 0x00800080, 0x4A3EA0AA, -0xA225A4B8, 0xA54042A6, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x007C0A81, 0xA026A0B9, -0xA126A2B9, 0xA226A1B9, 0xA126A1B9, 0xA0279FBA, 0x9E289EBA, 0x9D289DBB, 0x00800080, 0x00917362, -0x74A37444, 0x74A37444, 0x74A37444, 0x75A37443, 0x74A37444, 0x74A37444, 0x74A37543, 0x75A37443, -0x74A37444, 0x75A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37344, 0x70A16B47, 0x629C5650, -0x2E870074, 0x00800080, 0x00742788, 0x623B92B4, 0x922D92BF, 0x922D92BF, 0x92327FBB, 0x4E641395, -0x00800080, 0x0080017F, 0x28891470, 0x07841777, 0x2A904363, 0x5E9C5F4E, 0x5E9B5A50, 0x569A5553, -0x599B5D50, 0x649F6B4A, 0x6EA17245, 0x73A37444, 0x74A37444, 0x74A37444, 0x75A37443, 0x74A37444, -0x74A37444, 0x74A37543, 0x74A37543, 0x75A37543, 0x75A37443, 0x74A37444, 0x74A37543, 0x74A37543, -0x74A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x75A37443, 0x75A37443, -0x74A37444, 0x74A37444, 0x74A37543, 0x74A37444, 0x74A37444, 0x75A37443, 0x74A37543, 0x75A37443, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x75A37543, 0x74A37543, 0x75A37543, -0x75A37443, 0x74A37543, 0x74A37444, 0x74910062, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00872E74, 0x36913D61, 0x7EA67F3E, 0x81A7823D, 0x83A8853B, +0x86A9863A, 0x87A9883A, 0x89AA8A39, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008F5470, 0x569E6A5D, 0x5C9F515E, 0x5AA05C5D, 0x529F4C60, 0x5B9E575E, 0x59A04A5F, 0x549C645F, +0x5A9F615B, 0x65A0575C, 0x649E5F5D, 0x52A0565D, 0x569D635F, 0x6E9C6D5C, 0x6E9B725B, 0x6D9C665B, +0x609D565F, 0x54A0515D, 0x52A0515D, 0x599F4D5F, 0x53A15B5B, 0x56A0515E, 0x4F9E5460, 0x59A1605B, +0x569F555F, 0x5B9F4E5F, 0x56A15C5C, 0x649D715B, 0x5A9D5F5F, 0x47A14961, 0x4F9F4861, 0x4B9D5F61, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8938, 0x88A9873A, 0x86A9863A, 0x85A8833B, 0x82A7813D, 0x7FA67F3E, +0x3D913662, 0x2E870073, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00872E73, 0x36913D62, 0x7FA67F3E, 0x81A7823D, 0x83A8853B, +0x86A9863A, 0x87A9883A, 0x89AA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x44A24B5E, 0x599E4B61, 0x4BA03F61, 0x51A24A5D, 0x57A0595C, 0x579E6A5C, 0x699C6A5D, 0x559D4F61, +0x619D615E, 0x699D5A5E, 0x5F9D5C5E, 0x48A04D5F, 0x599C5A60, 0x3F9F4563, 0x4DA04D5E, 0x519E4962, +0x679D5C5D, 0x549E5F5D, 0x549F505F, 0x4FA05C5D, 0x609F585C, 0x4D9D4F61, 0x5B9F565E, 0x529F535E, +0x559C665F, 0x549F3D62, 0x4D9F5C5E, 0x539F615C, 0x579C645F, 0x609D545F, 0x479F595E, 0x469F4A62, +0x6A9D5D5E, 0x5C9E575F, 0x589E695D, 0x649F4B5D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x88A9883A, 0x86A9863A, 0x85A8843B, 0x82A7813C, 0x80A77F3E, +0x3E923661, 0x2E870073, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00916F65, 0x72A37349, 0x6FA46A4A, 0x6EA3714A, 0x77A2744A, 0x6EA36D4A, 0x6EA46D49, 0x6EA3754A, -0x7AA27749, 0x74A37149, 0x70A36F49, 0x71A3714A, 0x70A46F4A, 0x6EA36E4A, 0x6FA37049, 0x70A47049, -0x71A47348, 0x73A37549, 0x72A3704A, 0x6FA36E4A, 0x6DA4714A, 0x6FA47149, 0x73A36C49, 0x6BA46B4B, -0x6EA47649, 0x79A37648, 0x75A37248, 0x71A36D4A, 0x70A37149, 0x71A57148, 0x6FA56D49, 0x6DA46E49, -0x71A46E49, 0x75A36C49, 0x6BA3704A, 0x6FA36D4A, 0x70A3734A, 0x71A47149, 0x6EA2704A, 0x70A46B49, -0x6CA36F49, 0x6DA36F49, 0x6FA37049, 0x73A36C4A, 0x6DA4704A, 0x6DA36A4A, 0x6FA27449, 0x70A37449, -0x6FA36C4A, 0x70A46D49, 0x6DA36E49, 0x68A36C4A, 0x71A47148, 0x6FA36F49, 0x71A37449, 0x75A37249, -0x72A37249, 0x73A37149, 0x71A47149, 0x6FA37349, 0x71A46E49, 0x6CA46D4A, 0x6EA46E4A, 0x6BA36B4B, -0x6CA36C4A, 0x6DA46E49, 0x6FA46F49, 0x6FA36F49, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00927661, 0x76A47643, 0x76A37543, 0x76A47643, 0x76A37543, 0x76A47643, 0x75A37543, -0x76A47643, 0x76A37543, 0x75A37543, 0x75A37643, 0x76A47643, 0x76A47643, 0x75A37543, 0x76A37543, -0x76A37543, 0x76A37543, 0x75A37543, 0x76A47643, 0x76A37543, 0x76A47643, 0x76A37543, 0x76A47643, -0x75A37543, 0x76A37543, 0x75A37543, 0x76A47643, 0x76A47643, 0x75A37643, 0x76A47643, 0x75A37543, -0x76A37543, 0x75A37643, 0x75A37643, 0x76A47643, 0x75A37643, 0x75A37543, 0x75A37643, 0x75A37543, -0x75A37543, 0x76A37543, 0x76A37543, 0x76A47643, 0x75A37543, 0x769E524C, 0x00800080, 0x2D48A7A2, -0xA425A1B8, 0x9D289ABB, 0x992A98BD, 0x992A99BC, 0x9B289FBA, 0xA226A7B7, 0xAD4646A3, 0x00800080, -0x4141A1A7, 0xA227A8B7, 0xAF550C99, 0x00800080, 0x00704789, 0xB130AEB0, 0xA42B8CB5, 0x00800080, -0x00800080, 0x3E429DA9, 0xA125A5B8, 0x9E2AA4B5, 0xA03569B0, 0x00800080, 0x00723988, 0xB539BDAB, -0xC341BFA6, 0x556F008A, 0x00800080, 0x4C3DA4A9, 0xA425A3B8, 0xA253009C, 0x00800080, 0x2B46A2A4, -0xA425A4B8, 0xA24D15A0, 0x00800080, 0x005F7695, 0xA325A4B8, 0xA33761AD, 0x00800080, 0x3E429DA9, -0x9F26A3B9, 0xA94252A5, 0x00800080, 0x00800080, 0xA450C99C, 0xBF39B1AB, 0x2B730087, 0x922B9CB9, -0x9E279FBA, 0x60650091, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x1A95745B, -0x76A47643, 0x76A37543, 0x75A37643, 0x76A37543, 0x76A37543, 0x76A37543, 0x75A37643, 0x75A37643, -0x75A37543, 0x76A47643, 0x76A47643, 0x75A37543, 0x76A37543, 0x75A37443, 0x72A26F45, 0x689E5F4C, -0x5293325D, 0x0580007E, 0x00800080, 0x00800080, 0x27692790, 0x27692790, 0x0A7D0082, 0x00800080, -0x00800080, 0x09882E71, 0x4293445D, 0x48964D59, 0x549B5C52, 0x639E664C, 0x659E644C, 0x629D624D, -0x649E684B, 0x6CA16F46, 0x72A27444, 0x75A37543, 0x75A37643, 0x75A37543, 0x76A37543, 0x75A37643, -0x76A37543, 0x76A37543, 0x75A37543, 0x76A47643, 0x75A37643, 0x76A47643, 0x75A37543, 0x76A37543, -0x75A37543, 0x76A37543, 0x76A37543, 0x76A47643, 0x75A37643, 0x76A37543, 0x76A37543, 0x75A37643, -0x75A37643, 0x75A37643, 0x75A37543, 0x76A37543, 0x76A47643, 0x75A37643, 0x75A37543, 0x76A47643, -0x76A37543, 0x75A37543, 0x76A47643, 0x76A47643, 0x75A37543, 0x75A37543, 0x76A47643, 0x75A37543, -0x76A47643, 0x75A37643, 0x75A37543, 0x75910061, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00917365, 0x71A46C49, 0x6BA47149, 0x72A2774A, 0x72A36E4A, 0x6EA46D49, 0x6DA3724A, 0x7AA27948, -0x75A47048, 0x71A37349, 0x71A36E4A, 0x70A36F4A, 0x6EA46F4A, 0x6FA46E49, 0x6EA46E49, 0x6FA46F49, -0x71A47248, 0x72A47448, 0x73A37449, 0x73A3704A, 0x6EA46D4A, 0x70A37349, 0x70A37249, 0x70A46D49, -0x6CA46D4A, 0x71A47749, 0x78A37648, 0x75A37049, 0x6FA36F4A, 0x71A47248, 0x71A47148, 0x70A56E49, -0x77A46F48, 0x71A37249, 0x6CA36D49, 0x70A2714A, 0x6CA3714A, 0x73A46F49, 0x70A36E49, 0x70A36E49, -0x6CA36F49, 0x6FA46D49, 0x6FA37049, 0x6FA37149, 0x6AA46E4A, 0x71A36C49, 0x6AA3734A, 0x71A37349, -0x72A36B49, 0x70A46F49, 0x6DA46F49, 0x6AA46C4A, 0x71A47248, 0x71A46F49, 0x72A37449, 0x72A37549, -0x73A3704A, 0x72A47149, 0x70A37349, 0x74A36F49, 0x6CA46D4A, 0x6EA46B4A, 0x69A4694B, 0x6AA46E4A, -0x71A3734A, 0x73A3724A, 0x73A37249, 0x73A37149, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00872E73, 0x36923E61, 0x7FA7803E, 0x81A7823C, 0x84A8853B, +0x86A9863A, 0x88A9883A, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0090586E, 0x6B9D635C, 0x5A9F545D, 0x5D9F5D5D, 0x4CA1505E, 0x57A1565D, 0x529F5F5F, 0x649D5B5D, +0x61A1635A, 0x59A0685C, 0x56A0595D, 0x5D9F5C5D, 0x51A04B60, 0x4EA14F5F, 0x49A14560, 0x41A24660, +0x579F6C5C, 0x669D5C5D, 0x53A2465D, 0x47A2545D, 0x61A0545D, 0x60A15E5A, 0x57A04E5E, 0x4F9E5860, +0x5CA25A5A, 0x559F585F, 0x59A0535D, 0x55A1575C, 0x719D625C, 0x66A04E5E, 0x4CA34D5D, 0x4B9F4A62, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x87A9863A, 0x85A8843B, 0x83A7823C, 0x81A77F3E, +0x7FA67D3F, 0x7CA57B40, 0x7BA57A41, 0x7AA57941, 0x78A47842, 0x77A47742, 0x77A47743, 0x77A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, +0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47743, 0x77A47743, 0x77A47742, +0x78A47842, 0x79A57A41, 0x7AA57B41, 0x7BA57C40, 0x7DA67F3F, 0x7FA7813E, 0x82A7833C, 0x84A8853B, +0x86A9873A, 0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5F9E585F, 0x539F4C61, 0x4AA04261, 0x51A2515C, 0x55A1615A, 0x589F635C, 0x6C9E6D5B, 0x609D4D60, +0x599E615E, 0x679F675B, 0x5C9E655D, 0x4BA14B5F, 0x4F9D5961, 0x519F4262, 0x49A1525E, 0x489E4A62, +0x5F9D685D, 0x549F5D5E, 0x53A0525E, 0x57A0515D, 0x69A15F58, 0x529D4961, 0x62A0575C, 0x54A0575F, +0x4F9E5E5F, 0x679F455F, 0x489F5E5F, 0x5AA0575C, 0x569E615E, 0x5F9D5A5F, 0x41A05A5E, 0x549F4462, +0x579E635D, 0x5D9E655D, 0x5E9F685A, 0x59A05A5D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x87A9863A, 0x86A8853B, 0x83A8823C, 0x81A7803D, +0x7FA67E3E, 0x7DA67C40, 0x7BA57B40, 0x7AA57A41, 0x79A57941, 0x78A47842, 0x78A57842, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, +0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x78A57842, 0x78A47842, +0x79A57941, 0x7AA57A41, 0x7BA57B40, 0x7CA67D40, 0x7EA67F3E, 0x80A7813D, 0x82A8833C, 0x85A8863B, +0x86A9873A, 0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0090606D, 0x68A0615A, 0x4EA05E5D, 0x5EA0565C, 0x4DA1585D, 0x53A2515E, 0x5C9C665F, 0x54A0635C, +0x64A25B5A, 0x63A1525C, 0x629E5F5C, 0x4FA2475F, 0x42A3465E, 0x599F6A5A, 0x6A9F6459, 0x61A15B5B, +0x50A24C5D, 0x5B9F6C5B, 0x639F525D, 0x46A5475C, 0x56A0645C, 0x5CA0635A, 0x5EA1655A, 0x599E555F, +0x4EA05E5E, 0x5AA2535B, 0x59A05D5D, 0x56A2515C, 0x51A16B5A, 0x5CA0635D, 0x4FA24B5E, 0x4AA14461, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x89A98839, 0x88A9863A, 0x86A8853A, 0x84A8833B, 0x82A7813D, +0x80A77F3E, 0x7EA67D3F, 0x7DA57B3F, 0x7BA57B40, 0x7AA57A41, 0x7AA57941, 0x79A57941, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, +0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x79A57941, 0x79A57A41, +0x7AA57A41, 0x7BA57B40, 0x7BA57D3F, 0x7DA67E3F, 0x7FA7803E, 0x81A7823D, 0x83A8843B, 0x85A8863A, +0x86A9883A, 0x88A98939, 0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6E9D555E, 0x47A04D61, 0x48A04D60, 0x43A2555E, 0x53A35A59, 0x619F555C, 0x6AA06D5A, 0x6A9D545F, +0x509E605F, 0x65A16C5A, 0x629E6B5C, 0x5BA1495E, 0x549F5A5E, 0x5E9E4A60, 0x4BA1515E, 0x4F9F5760, +0x509E6B5E, 0x609F595E, 0x5AA0585D, 0x50A2515E, 0x679F6A59, 0x58A04C5F, 0x5DA0635A, 0x5AA0575E, +0x52A15E5C, 0x6F9D4F5D, 0x47A05360, 0x5EA15D5B, 0x679F5D5C, 0x629D645E, 0x4AA14D5E, 0x53A05B5E, +0x4DA04F5F, 0x519F555D, 0x58A0555E, 0x5AA1575B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A9863A, 0x85A8833B, 0x82A7823C, +0x81A77F3E, 0x7FA67F3E, 0x7DA67D3F, 0x7CA57B40, 0x7BA57B40, 0x7BA57B41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, +0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57B41, +0x7BA57B40, 0x7BA57C40, 0x7DA67D3F, 0x7FA67F3E, 0x7FA7813E, 0x82A7823C, 0x83A8853B, 0x86A9863A, +0x87A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E716D, 0x64A1595A, 0x53A0635C, 0x58A2535C, 0x55A1515D, 0x57A2585D, 0x689D575E, 0x5EA25F5A, +0x5EA25D5C, 0x5AA0665B, 0x5FA1575C, 0x59A15B5C, 0x6CA0695A, 0x60A45959, 0x56A3545C, 0x52A1605C, +0x63A1565A, 0x4EA25D5D, 0x6AA0655A, 0x4CA54A5C, 0x49A1605C, 0x63A0615B, 0x63A16059, 0x64A2535B, +0x569F4A60, 0x5FA36259, 0x51A1685C, 0x5DA25B5B, 0x52A45F59, 0x64A0685B, 0x5BA24E5C, 0x44A2545E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9883A, 0x86A9863A, 0x85A8853B, 0x83A8823C, +0x82A7813D, 0x80A77F3E, 0x7FA67E3F, 0x7DA67D3F, 0x7DA67C3F, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, +0x7CA67D3F, 0x7DA67D3F, 0x7EA67F3F, 0x7FA7803E, 0x81A7823D, 0x82A8833C, 0x85A8853B, 0x86A9863A, +0x88A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x789B615D, 0x519E5461, 0x47A1555E, 0x4FA14460, 0x50A3555B, 0x5FA15D5A, 0x54A26D5B, 0x6C9E615C, +0x559D625F, 0x61A06A59, 0x6E9F695B, 0x6CA04D5C, 0x57A1555E, 0x699E545E, 0x50A2505E, 0x56A05C5D, +0x579F695D, 0x6D9D585D, 0x5CA05B5C, 0x4FA3565C, 0x59A16F59, 0x60A0545D, 0x58A1665A, 0x5DA1635A, +0x5AA25D5A, 0x6F9C655C, 0x50A14F5F, 0x5FA15C5B, 0x60A2605B, 0x5E9C685F, 0x5CA1475D, 0x56A2595B, +0x61A0525D, 0x4AA24A5F, 0x56A0605C, 0x58A2505B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAB8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x87A9863A, 0x86A8853B, 0x84A8833B, +0x82A7823C, 0x81A7803D, 0x7FA77F3E, 0x7FA67F3F, 0x7EA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, +0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, +0x7DA67E3F, 0x7FA67F3F, 0x7FA77F3E, 0x80A7813D, 0x82A7823C, 0x83A8843B, 0x85A8863B, 0x86A9873A, +0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8BAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00906A6D, 0x5CA2555D, 0x62A0605B, 0x5AA4545B, 0x52A34C5E, 0x53A2595D, 0x699F5E5C, 0x5CA46458, +0x64A25E5A, 0x5BA15B5C, 0x59A35E5A, 0x58A1675B, 0x60A36759, 0x5CA05C5E, 0x59A05F5D, 0x57A34F5C, +0x5EA1625B, 0x52A3565C, 0x69A16A59, 0x51A44A5D, 0x4CA3525D, 0x65A15D5B, 0x62A26059, 0x5FA35D59, +0x5E9E4F5F, 0x57A36659, 0x52A3685B, 0x6BA15F5B, 0x65A45958, 0x63A2605A, 0x64A45759, 0x49A34D5E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAB8C38, 0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x88A9873A, 0x86A9863A, 0x85A8843B, +0x83A8833C, 0x82A7823C, 0x81A7813D, 0x80A77F3E, 0x7FA77F3E, 0x7FA67F3F, 0x7FA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, +0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67F3F, 0x7FA67F3F, +0x7FA77F3E, 0x7FA7803E, 0x81A7813D, 0x82A7823C, 0x83A8833C, 0x84A8853B, 0x86A9863A, 0x87A9883A, +0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x71A27357, 0x6DA17257, 0x799D6C5A, 0x5F9F565E, 0x5AA24B5E, 0x55A46458, 0x5FA15D5C, 0x6AA16C59, +0x569E635F, 0x69A06759, 0x70A16859, 0x759F5B5B, 0x5AA2585C, 0x6A9F5F5C, 0x5CA15B5D, 0x54A15C5D, +0x56A0695D, 0x6A9F5E5C, 0x60A1565C, 0x4DA3595B, 0x59A2665A, 0x6AA15A5B, 0x56A15A5C, 0x68A25E58, +0x5EA25A5B, 0x639E705C, 0x58A14F5E, 0x5FA0685B, 0x60A2615A, 0x59A05C5E, 0x6D9F505E, 0x54A3565B, +0x57A35C5C, 0x5AA3525C, 0x56A3575B, 0x50A46359, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, +0x8CAB8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9883A, 0x87A9863A, 0x86A8853B, +0x85A8843B, 0x83A8833C, 0x82A7823C, 0x81A7813D, 0x81A7813E, 0x80A7803E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A7803E, +0x81A7813E, 0x81A7813D, 0x82A7823C, 0x83A8833C, 0x84A8853B, 0x85A8863B, 0x86A9873A, 0x88A9883A, +0x89AA8A39, 0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00915A6E, 0x5EA1565D, 0x68A15B5B, 0x5DA4525A, 0x58A5505B, 0x53A1645D, 0x5FA25E5B, 0x62A46158, +0x68A45C59, 0x5AA25B5B, 0x5AA45D58, 0x62A3605A, 0x65A05A5D, 0x63A2605A, 0x60A1635B, 0x63A25A5B, +0x5BA15F5D, 0x55A3555C, 0x72A16E59, 0x5DA54A5B, 0x4EA44A5D, 0x5EA2615C, 0x5CA4575A, 0x57A35E5A, +0x609E575F, 0x53A4665A, 0x50A3645C, 0x72A0625B, 0x6FA45557, 0x66A25C5A, 0x6FA45E57, 0x4EA4455E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x89A98839, 0x88A9873A, 0x86A9863A, +0x86A8853B, 0x85A8843B, 0x83A8833C, 0x83A8823C, 0x82A7823C, 0x82A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, +0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7823D, +0x82A7823C, 0x82A8833C, 0x83A8833C, 0x84A8853B, 0x85A8863B, 0x86A9863A, 0x87A9883A, 0x88A98939, +0x8AAA8A38, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x47A04D62, 0x5FA05A5D, 0x60A06A5B, 0x689E745B, 0x5FA1585C, 0x55A55B5A, 0x65A25D59, 0x6BA2655A, +0x649F5E5D, 0x6CA06959, 0x65A35F5A, 0x749F6B5A, 0x5CA3585B, 0x63A06A5B, 0x5DA05F5C, 0x59A2585D, +0x59A1645C, 0x68A0645B, 0x59A35B5A, 0x55A3525C, 0x5CA3595B, 0x79A06159, 0x57A0595E, 0x6AA36757, +0x65A2565B, 0x5BA1655B, 0x67A1575B, 0x54A0655D, 0x6BA35B58, 0x65A15D5C, 0x639F685D, 0x58A2575D, +0x56A65F57, 0x64A36059, 0x57A45C59, 0x53A4525B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8939, 0x88A9883A, 0x87A9863A, +0x86A9863A, 0x85A8853B, 0x85A8843B, 0x84A8833B, 0x83A8833C, 0x83A8833C, 0x83A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, +0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8833C, 0x83A8833C, +0x83A8833C, 0x83A8843B, 0x84A8853B, 0x85A8853B, 0x86A9863A, 0x86A9873A, 0x88A9883A, 0x89AA8A39, +0x8AAA8A38, 0x8AAA8B38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0091606D, 0x58A2635B, 0x67A46059, 0x58A6505A, 0x56A6545A, 0x5BA25F5C, 0x65A35E5A, 0x61A56859, +0x6DA35859, 0x57A35D5B, 0x69A45B58, 0x62A3655A, 0x5EA35A5B, 0x65A15E5B, 0x64A25E5A, 0x57A4685A, +0x62A26B5A, 0x58A4515B, 0x6EA16D59, 0x64A55559, 0x53A5495C, 0x5EA36B59, 0x5AA55C58, 0x61A36059, +0x669E625E, 0x4EA46D59, 0x5AA26A5A, 0x76A16359, 0x73A45858, 0x67A25B5B, 0x6DA36A56, 0x5AA5425C, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x89A98839, 0x88A9873A, +0x87A9863A, 0x86A9863A, 0x86A8853B, 0x85A8853B, 0x85A8853B, 0x84A8843B, 0x84A8843B, 0x84A8843B, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, +0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x84A8843B, 0x84A8843B, 0x84A8843B, +0x85A8853B, 0x85A8853B, 0x85A8863B, 0x86A9863A, 0x86A9873A, 0x87A9883A, 0x88A98939, 0x8AAA8A38, +0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3EA33C61, 0x3DA25C60, 0x5CA2585D, 0x5AA16B5C, 0x649E5A5E, 0x5BA3605A, 0x59A46358, 0x54A37359, +0x5FA15F5C, 0x66A16E59, 0x62A2615A, 0x709F6F5A, 0x67A35E59, 0x5EA16D5A, 0x5BA1605C, 0x57A3575C, +0x63A15F5C, 0x6BA07159, 0x5BA26359, 0x5DA34B5C, 0x5EA3575A, 0x74A07058, 0x5F9F5F5D, 0x5DA47257, +0x63A1625B, 0x5EA35C5B, 0x69A0665B, 0x55A15E5E, 0x66A26A58, 0x5EA26B59, 0x60A1625C, 0x66A1585C, +0x60A3605A, 0x5EA55B59, 0x56A65258, 0x55A3605A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8C37, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8939, 0x89A98839, +0x88A9873A, 0x87A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, +0x86A9863B, 0x86A9863A, 0x86A9863A, 0x86A9873A, 0x87A9883A, 0x88A98939, 0x89AA8A39, 0x8AAA8A38, +0x8AAA8B38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0091656D, 0x5AA26D5A, 0x61A65D59, 0x4DA5545C, 0x54A76359, 0x60A25B5C, 0x65A4565A, 0x5EA67158, +0x67A35659, 0x62A35F59, 0x65A66258, 0x61A46458, 0x57A4665A, 0x59A4685A, 0x5AA45F5A, 0x5CA45E59, +0x5EA26C5A, 0x5EA4535A, 0x69A46658, 0x64A75458, 0x4EA54C5D, 0x61A47057, 0x5EA56157, 0x64A36559, +0x629F5F5E, 0x49A46B59, 0x5BA3665B, 0x6DA1645A, 0x75A55957, 0x6BA26459, 0x69A36F58, 0x63A54B5A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8C37, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8939, +0x88A9883A, 0x88A9883A, 0x87A9873A, 0x87A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, +0x86A9863A, 0x86A9873A, 0x87A9873A, 0x88A9883A, 0x88A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8AAA8A38, +0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x51A1505F, 0x65A1665C, 0x6AA0695B, 0x5F9D5562, 0x51A15D5E, 0x65A55F59, 0x68A36059, 0x4FA46C5A, +0x5CA2665B, 0x6BA07D57, 0x5EA36759, 0x66A0745A, 0x6BA36958, 0x61A36759, 0x639F675C, 0x5FA35C5A, +0x6AA1615B, 0x64A26D59, 0x68A36757, 0x68A25859, 0x50A5605A, 0x5AA18159, 0x66A1695A, 0x67A46C57, +0x68A36758, 0x66A06C5A, 0x58A16B5C, 0x61A1575C, 0x65A26B5A, 0x73A26159, 0x6BA36358, 0x62A2675C, +0x59A3525D, 0x5CA36B59, 0x73A26F58, 0x60A2585D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8939, 0x89A98839, 0x88A9883A, 0x88A9883A, 0x88A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, +0x87A9883A, 0x88A9883A, 0x88A9883A, 0x88A98939, 0x89AA8A39, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8B38, +0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0093596C, 0x62A3675A, 0x64A65759, 0x46A65F5C, 0x59A76159, 0x62A2685B, 0x54A55A5B, 0x6EA67454, +0x58A5535B, 0x6AA46B56, 0x63A65F58, 0x65A45C59, 0x67A36E58, 0x69A57B55, 0x60A45E5A, 0x51A65D5A, +0x59A4665A, 0x61A4555A, 0x6AA46D56, 0x67A75158, 0x49A5545D, 0x63A56B57, 0x5CA46558, 0x63A35E5A, +0x64A0625D, 0x4DA56E59, 0x5EA2635B, 0x67A2655A, 0x7EA55955, 0x6CA26659, 0x6FA37556, 0x64A55958, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A39, 0x89AA8939, 0x89A98839, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, +0x88A9883A, 0x88A98939, 0x89AA8939, 0x8AAA8A39, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8BAA8B38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5DA35D5A, 0x5AA45959, 0x58A55659, 0x59A75C57, 0x5FA86156, 0x69A56756, 0x5AA25D5C, 0x59A56459, +0x5AA3655B, 0x71A07F56, 0x5FA47257, 0x60A27B59, 0x6FA27058, 0x6AA46657, 0x69A0615C, 0x6CA25E59, +0x6EA1655A, 0x5CA2685C, 0x6DA36957, 0x6BA36557, 0x4FA55F5A, 0x5CA35D5B, 0x76A26259, 0x66A16D5A, +0x71A56655, 0x6FA26A58, 0x64A35D5A, 0x71A16958, 0x60A0625C, 0x6BA16B58, 0x62A35C5A, 0x6AA45E57, +0x5AA4635A, 0x5FA5585B, 0x58A25F5C, 0x71A47454, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8B38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, +0x89AA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8BAA8B38, 0x8BAA8C38, +0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0092656C, 0x6CA57356, 0x5DA65359, 0x51A8555A, 0x66A66456, 0x63A3665B, 0x4EA65A5B, 0x76A67553, +0x54A5545B, 0x68A56E56, 0x62A85A57, 0x61A55B5A, 0x6DA36B58, 0x6BA36159, 0x65A5545A, 0x56A7525A, +0x58A56D58, 0x5AA56659, 0x67A57157, 0x63A8485A, 0x4AA65B5C, 0x6BA56258, 0x59A56858, 0x66A2605B, +0x63A35D5B, 0x58A66B57, 0x6EA2655B, 0x5CA46C5A, 0x73A65756, 0x6CA26759, 0x6FA56F56, 0x68A56157, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8B38, +0x8BAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, +0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8B38, 0x8BAA8B38, 0x8BAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x62A2675A, 0x6EA16A59, 0x6AA1675A, 0x69A26959, 0x6AA46959, 0x63A35D5A, 0x5BA5545C, 0x5EA66659, +0x5EA36A5A, 0x75A17B56, 0x62A47356, 0x59A1805A, 0x6CA27658, 0x73A46856, 0x69A16C5A, 0x6BA17059, +0x67A0765A, 0x5EA3695B, 0x66A46A59, 0x68A56956, 0x61A55659, 0x67A45C59, 0x55A2745A, 0x69A26859, +0x6CA37557, 0x69A66955, 0x70A26259, 0x64A35B5C, 0x71A26658, 0x63A16E5A, 0x7FA17057, 0x67A45A59, +0x60A46558, 0x67A66856, 0x66A76156, 0x63A2625A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, +0x8AAA8A38, 0x8AAA8A38, 0x8AAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0091726B, 0x73A66E55, 0x58A6505C, 0x5CA84D59, 0x76A65F55, 0x65A36B5A, 0x51A66959, 0x74A87852, +0x5FA64F5A, 0x67A66F55, 0x63A85657, 0x50A74E5B, 0x5AA56359, 0x60A5555A, 0x44A7525C, 0x58A75958, +0x67A56457, 0x66A46E58, 0x67A77255, 0x51A6505D, 0x5BA66658, 0x69A65D57, 0x5AA56559, 0x61A2595C, +0x65A65259, 0x72A57454, 0x6DA35B5C, 0x59A57C57, 0x68A75F56, 0x6EA2615B, 0x69A67555, 0x63A56757, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, +0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5CA75B5A, 0x61A76458, 0x5FA66359, 0x66A4675A, 0x67A46459, 0x60A56359, 0x61A56959, 0x71A27A56, +0x77A37555, 0x7EA36D54, 0x66A47357, 0x70A18257, 0x70A27958, 0x75A57D54, 0x61A56659, 0x63A07D5A, +0x70A27158, 0x75A35C59, 0x67A46059, 0x68A66A56, 0x68A46557, 0x5AA66857, 0x68A44E5B, 0x6EA26559, +0x6EA17458, 0x76A57554, 0x6DA56F56, 0x6CA35C5A, 0x65A2585D, 0x6AA46C57, 0x66A3675A, 0x7AA27A56, +0x73A37355, 0x6CA36957, 0x66A56257, 0x5FA66B56, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0092716B, 0x6DA66456, 0x5DA7535B, 0x69A85857, 0x70A85556, 0x5EA4735A, 0x5DA55F59, 0x6DAA6E52, +0x70A45359, 0x5BA77755, 0x6DA66457, 0x67A96755, 0x62A96155, 0x64AA6755, 0x64A95A56, 0x5AA66D58, +0x5CA57358, 0x69A56958, 0x6AA95357, 0x55A65C5B, 0x66A76257, 0x60A85C57, 0x6EA35E5A, 0x5CA4655A, +0x4DA66C58, 0x78A37157, 0x5BA65A5B, 0x74A67953, 0x67A57255, 0x66A35D5C, 0x65A86E55, 0x61A46A59, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, +0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7AA47755, 0x73A47057, 0x72A47556, 0x77A47654, 0x7CA47E53, 0x7FA28754, 0x87A18C53, 0x8AA08653, +0x7DA37255, 0x68A66756, 0x68A37B57, 0x77A17957, 0x75A27158, 0x73A68253, 0x6DA66656, 0x6AA55E59, +0x7EA27156, 0x6AA26F59, 0x65A56958, 0x67A56059, 0x6FA76C54, 0x6EA56056, 0x66A47756, 0x61A54B5B, +0x5FA3685A, 0x73A27657, 0x7FA47554, 0x71A56D56, 0x70A36358, 0x64A2635C, 0x54A36B5B, 0x71A46C55, +0x6CA27559, 0x74A37258, 0x73A57855, 0x76A47853, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, +0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0093756A, 0x71A66456, 0x5DA75659, 0x70A85F55, 0x6FA95555, 0x5BA46C5A, 0x6EA56158, 0x6BA97354, +0x78A56954, 0x53A85759, 0x77A77852, 0x66A86255, 0x61A85958, 0x5DA76658, 0x6DA66957, 0x5AA76957, +0x64A76658, 0x71A86055, 0x57A7535C, 0x5CA95A58, 0x62A86156, 0x60A4665A, 0x52A3585E, 0x5AA6535A, +0x72A57A54, 0x70A45A59, 0x61A67955, 0x7EA87252, 0x6EA46957, 0x5FA76658, 0x6DA75857, 0x66A36F59, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7B9A7A5E, 0x7F9B7A5D, 0x7B9B7F5D, 0x839B855A, 0x859D7F59, 0x7F9F7C58, 0x77A17358, 0x77A27458, +0x6BA2675B, 0x66A1725A, 0x7B9F7E57, 0x7DA17856, 0x78A35C59, 0x68A57657, 0x84A66B54, 0x6BA66E56, +0x59A46E59, 0x6FA3625A, 0x6AA3625A, 0x5CA66758, 0x67A86056, 0x64A86754, 0x6FA55F57, 0x6BA47D56, +0x61A64C5B, 0x59A45A5D, 0x6CA27759, 0x7CA27D55, 0x76A56F55, 0x6BA56956, 0x67A3695A, 0x5EA3515E, +0x56A5605C, 0x64A56A58, 0x67A56658, 0x61A35B5C, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946F6A, 0x72A56557, 0x65A65958, 0x75A85D54, 0x6FA96653, 0x61A75D59, 0x6EA56C56, 0x6FA57356, +0x7DA97850, 0x6FA75856, 0x50A8585B, 0x65A76858, 0x6DA76F56, 0x6BA76357, 0x5EA86158, 0x6BA57456, +0x73A96853, 0x54A6535C, 0x5AAA5C57, 0x5CA86B56, 0x68A57457, 0x5BA44D5F, 0x58A7505C, 0x72A47E55, +0x75A35D59, 0x64A77055, 0x7FA87A51, 0x78A66A55, 0x62A7565B, 0x6AA87453, 0x58A56B58, 0x78A57854, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x65A66859, 0x66A76958, 0x6BA56A58, 0x6CA56E57, 0x6EA56F57, 0x73A36F58, 0x65A3605B, 0x5AA25E5E, +0x6BA26E59, 0x6FA37359, 0x70A37458, 0x69A56458, 0x62A64C5C, 0x5AA3695C, 0x75A58055, 0x75A66B55, +0x68A96654, 0x58A38059, 0x6AA3685A, 0x73A36059, 0x5EA76158, 0x62A95B57, 0x67A86455, 0x74A66955, +0x67A57B55, 0x71A75657, 0x57A7525A, 0x57A6645A, 0x6EA37F56, 0x7CA57853, 0x69A46F56, 0x70A47156, +0x75A47155, 0x68A66157, 0x61A76458, 0x68A67056, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946A6A, 0x7EA56855, 0x6EA65A59, 0x67A86D55, 0x5FA97B54, 0x67AB6854, 0x5CA57559, 0x76A37057, +0x72A57D54, 0x7AAA7850, 0x72A66B55, 0x60A85D57, 0x62A66957, 0x67A76856, 0x6AA96954, 0x6AA66358, +0x69A56A58, 0x66A96256, 0x68A77056, 0x72A67557, 0x53A54F5F, 0x5DA8555A, 0x79A47D54, 0x75A46558, +0x6BA77355, 0x7FA87551, 0x73A86E53, 0x70A75C58, 0x61AA7653, 0x6AA75E56, 0x7EA38952, 0x7DA95153, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x78A97951, 0x7AA97850, 0x74A97651, 0x76A87352, 0x6FA86F53, 0x72A97251, 0x75A87551, 0x74A86755, +0x62A45D5C, 0x61A3635C, 0x57A4665C, 0x57A65E5C, 0x59A6515C, 0x4CA55D5E, 0x65A66E58, 0x7BA57D54, +0x73A76555, 0x5EAA6156, 0x54A46B5C, 0x6AA56459, 0x79A46358, 0x60A95C58, 0x62A85D58, 0x63A76A56, +0x69A77056, 0x68A77555, 0x86A37356, 0x5BA95358, 0x4BA6515D, 0x5CA5655A, 0x68A46959, 0x72A46B57, +0x6EA67154, 0x73A36F57, 0x70A2685A, 0x62A4615A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946D6A, 0x7CA57654, 0x6BA66E57, 0x5BA87056, 0x6DAA6C53, 0x80AA7150, 0x68A95D57, 0x64A48258, +0x7EA47E54, 0x79A57655, 0x77A87652, 0x71A87353, 0x76A77753, 0x6FA56D57, 0x6EA47257, 0x69A76856, +0x66A86855, 0x74A77555, 0x7BA66558, 0x4DA74D5D, 0x53AA6158, 0x73A87652, 0x6BA76557, 0x68A77E54, +0x88A87C4F, 0x69AA6C53, 0x7AA86754, 0x6AA97753, 0x6AA76357, 0x7DA48C52, 0x7FA86652, 0x60A66857, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x73AB7050, 0x71AB6C50, 0x6EA96D52, 0x6BA86555, 0x64A66C56, 0x76A57E53, 0x79A86C52, 0x64A96E55, +0x75A97651, 0x70A96A52, 0x64A5555B, 0x59A5645B, 0x61A76758, 0x58A4675C, 0x58A6545C, 0x61A5655A, +0x67A67F55, 0x7FA47055, 0x5EA96955, 0x69A85758, 0x6BA46A5A, 0x76A56857, 0x4EAA5659, 0x58A95958, +0x5BA85D58, 0x5CA85B58, 0x67A86856, 0x7CA68A52, 0x79A66056, 0x60A75A59, 0x4AA8535C, 0x5FA66458, +0x73A46D58, 0x69A56857, 0x68A86E54, 0x6EA86E54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0093766A, 0x71A67055, 0x72A67556, 0x61A66858, 0x76AA7350, 0x78AA844F, 0x73AB6751, 0x65A96156, +0x64A67A57, 0x85A68751, 0x89A48A51, 0x8BA38D52, 0x8DA38C52, 0x84A78351, 0x7EA87E51, 0x7AA77754, +0x78A67556, 0x65A7555B, 0x54A95059, 0x5AA96955, 0x77A87750, 0x71A76357, 0x69A78254, 0x7FAB6B50, +0x67AB6F52, 0x60A96B56, 0x6EAA6A53, 0x5FA86856, 0x7EA58452, 0x69A95954, 0x70A66A57, 0x6DA37F59, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x69A46659, 0x61A65D59, 0x5AA75659, 0x55A95459, 0x57AB5D55, 0x62AA6B53, 0x6AA76555, 0x6EA67953, +0x83A77551, 0x6BAA7651, 0x73AB6B51, 0x67A76158, 0x6AA66457, 0x62A55F5A, 0x67A76459, 0x67A6645A, +0x60A6515C, 0x62A66659, 0x6FA57E55, 0x77A66456, 0x5EAB6753, 0x5BA76E58, 0x6EA56F57, 0x60A84C5A, +0x5AA96857, 0x5EA95B59, 0x62A95F56, 0x5FA86455, 0x6BA87953, 0x85A48053, 0x66A75959, 0x59A65E5A, +0x57A8515B, 0x53AA5B59, 0x5BA76159, 0x66A76557, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00938269, 0x74A66955, 0x81A57255, 0x77A66657, 0x67A97F52, 0x78AA7750, 0x7FAA8A4E, 0x7AAC704F, +0x6AAC6053, 0x5FA95C58, 0x5FA7615A, 0x63A86759, 0x67A96856, 0x6EAA7154, 0x75A86B55, 0x62A85E58, +0x5DA85958, 0x5EA86756, 0x6AAA6B51, 0x73A66F55, 0x6AA67C56, 0x89A87C4F, 0x70AE6E4F, 0x69AA6355, +0x6BAA7153, 0x68AA5A56, 0x66A76D56, 0x71A76856, 0x6CA67A56, 0x7AA47957, 0x80A17A58, 0x72A3595D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x81A78250, 0x7DA77C51, 0x7AA67553, 0x6FA86E54, 0x72A67954, 0x72A66957, 0x59A85759, 0x63A87255, +0x73A67754, 0x85A6864F, 0x6DAB7350, 0x77AB6B50, 0x6BA57657, 0x75A76E56, 0x7EA87D53, 0x84A68952, +0x81A78353, 0x84A78351, 0x7CA55758, 0x50A86459, 0x81A58652, 0x75A96953, 0x62AC6353, 0x63A96357, +0x6DA76656, 0x51A8565C, 0x6CA86857, 0x5AA75F59, 0x5DAA6055, 0x71A67254, 0x6EA67754, 0x7EA76F54, +0x66A86657, 0x67A76658, 0x6AA6575A, 0x5AAA5A58, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0092796A, 0x7FA77D53, 0x78A57A54, 0x72A77C53, 0x7BA66556, 0x6EA77D54, 0x7AA97453, 0x71A98152, +0x89AA8A4E, 0x7CAB7650, 0x75AB7850, 0x76AC7050, 0x6BAC6C51, 0x6FAB7052, 0x6EAC6B51, 0x6EAA6752, +0x6CA97052, 0x70A76E55, 0x6CA67357, 0x7FA78451, 0x78AE714E, 0x6AAD5D52, 0x5EA96B57, 0x71AA6353, +0x5BAA6055, 0x6CA76C56, 0x6DA48755, 0x84A38455, 0x81A37857, 0x64A64D5C, 0x4CAA5C59, 0x66AA6854, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x62A76857, 0x67A76057, 0x5BA95B57, 0x60AB6155, 0x6DAA7851, 0x84A67C52, 0x72A77954, 0x79A76656, +0x5FA76C57, 0x7EA67453, 0x87A67951, 0x6BAC7150, 0x6AA86D55, 0x72A77756, 0x8BA79250, 0x7DA77D53, +0x85A58054, 0x83A67F53, 0x72A76C56, 0x72A67755, 0x81A57554, 0x5DA76A58, 0x7BA67D53, 0x71AA5D54, +0x68AA6954, 0x64A87155, 0x6CA85B59, 0x58A76C5B, 0x72A66358, 0x66A75D58, 0x63A96F54, 0x74A86E54, +0x6DA77356, 0x7BA97751, 0x6DA87055, 0x5DA65F5B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00937C6A, 0x70A77B54, 0x81A78052, 0x7CA68052, 0x74A97652, 0x7CA67855, 0x65A96156, 0x6DA87B54, +0x7FA87E53, 0x7DAA8051, 0x7EA97E51, 0x7EA97D52, 0x77AA7452, 0x71A96A54, 0x67A76457, 0x65A66759, +0x79A68654, 0x8CA88350, 0x78AD714E, 0x64AD5F53, 0x61AA6A56, 0x74AA6F53, 0x67A95D57, 0x6CA47457, +0x7CA58B53, 0x8CA68052, 0x78A57257, 0x58AA5559, 0x5FAB6C54, 0x6DAC6852, 0x65AC6156, 0x5BAA565A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D987655, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76982B56, 0x00800080, 0x573AA3AB, -0xA0289BBB, 0x962C92BE, 0x922D92BF, 0x922D92BF, 0x942B98BE, 0x9E27A2BA, 0xA4346FAE, 0x00800080, -0x204B9EA2, 0xA026A3B9, 0xAD4749A2, 0x00800080, 0x00686B8E, 0xAE2AA7B4, 0xA22C8AB5, 0x00800080, -0x00800080, 0x0A519BA0, 0x9D279FBA, 0xA0269FB9, 0x9D423EA9, 0x00800080, 0x0067578F, 0xA429AEB5, -0xB433B2AE, 0x177A0083, 0x00800080, 0x7732A2B1, 0xA226A1B9, 0xA053009C, 0x00800080, 0x2B47A1A4, -0xA226A2B9, 0xA14C15A0, 0x00800080, 0x005F7595, 0xA226A2B9, 0xA1385FAE, 0x00800080, 0x0A5299A0, -0x9B289FBA, 0xA43877AB, 0x00800080, 0x007C1B81, 0xCB45C1A3, 0xB32CA4B3, 0x0A7C0081, 0x5B3B99B0, -0x9A299CBB, 0x755F0095, 0x00800080, 0x007C0A81, 0xA226A0B9, 0x9E2E89B6, 0x00800080, 0x0E93745E, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A37543, 0x75A37244, 0x6EA06749, -0x5D9A5153, 0x3E8D1D68, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x05862774, 0x44964B5B, 0x50985356, 0x549A5853, 0x5D9D634E, 0x679F6C49, 0x6CA16C48, 0x6BA06C48, -0x6DA17046, 0x71A37345, 0x74A37544, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76982D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927165, 0x6AA46C4A, 0x71A37149, 0x78A37249, 0x6EA37149, 0x6DA36E4A, 0x78A37949, 0x74A47049, -0x6FA47049, 0x72A3704A, 0x71A47149, 0x74A47348, 0x74A57448, 0x75A57447, 0x74A57548, 0x74A47448, -0x73A47348, 0x73A37349, 0x71A47248, 0x72A37349, 0x72A3704A, 0x6FA46F49, 0x74A37349, 0x71A47149, -0x6EA46D49, 0x6EA46D4A, 0x73A37A48, 0x78A47548, 0x73A37049, 0x70A3704A, 0x73A47248, 0x6FA47249, -0x76A47347, 0x6EA47449, 0x73A36A49, 0x6EA3724A, 0x71A2704A, 0x73A37449, 0x6FA47049, 0x6EA3704A, -0x6FA46B49, 0x6FA46E49, 0x6EA47149, 0x71A37149, 0x71A36A49, 0x72A37049, 0x6AA46F4A, 0x73A37049, -0x73A36E49, 0x6EA37149, 0x6DA46F49, 0x6AA46B4A, 0x71A47248, 0x71A47049, 0x73A37249, 0x75A37649, -0x71A37249, 0x72A47149, 0x75A47148, 0x6EA46C4A, 0x6DA4694A, 0x67A4694B, 0x6BA46E4A, 0x70A3714A, -0x71A3714A, 0x71A37249, 0x73A37549, 0x74A37249, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D987755, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77920360, 0x00800080, 0x8C2C9FB5, -0x9A2A95BD, 0x1D770086, 0x00800080, 0x00800080, 0x0A56899F, 0x972A9CBC, 0x9F2996B7, 0x0A7C0081, -0x005A8699, 0x9B289EBB, 0xA22F95B2, 0x24780084, 0x3B46A7A2, 0xA226A0B9, 0x9E2E88B6, 0x00800080, -0x0B81007D, 0x00636594, 0x982A99BC, 0x992A99BC, 0x99520AA0, 0x00800080, 0x00655F91, 0x9E279FBA, -0xA026A2B9, 0x61650091, 0x00656191, 0x9F279EBA, 0x9D289DBB, 0x9D54009D, 0x00800080, 0x2A489EA5, -0x9E289EBA, 0x9E4D15A1, 0x00800080, 0x005F7395, 0x9E289EBA, 0x9E3A5DAF, 0x00800080, 0x00665B92, -0x972A9ABC, 0xA027A7B8, 0x566F008A, 0x0D678F8E, 0xBA33ABAF, 0xA23569B0, 0x00800080, 0x145095A3, -0x962B99BD, 0x9C3A5FAF, 0x0A7C0081, 0x16597698, 0x9E289CBA, 0x9B4048AC, 0x00800080, 0x29977457, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47742, 0x77A47743, 0x77A47743, 0x77A47743, 0x76A37543, 0x72A26D46, -0x659D5C4E, 0x51974658, 0x3B8D1E68, 0x0B81007D, 0x00800080, 0x00800080, 0x0081067E, 0x13882770, -0x4095495C, 0x529A5853, 0x5E9D604E, 0x619E644D, 0x66A06A4A, 0x6EA27046, 0x72A37245, 0x72A37345, -0x73A37543, 0x75A47643, 0x76A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, 0x77A47743, -0x77A47743, 0x77A47743, 0x77A47743, 0x77982D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00926A65, 0x6BA46F4A, 0x73A37849, 0x70A3704A, 0x71A46C4A, 0x72A37849, 0x75A46F48, 0x70A46F4A, -0x6FA47049, 0x73A47348, 0x74A57448, 0x73A47248, 0x73A47349, 0x75A47448, 0x73A47349, 0x74A47648, -0x78A47748, 0x76A47548, 0x74A47348, 0x70A47048, 0x73A47448, 0x72A3704A, 0x6FA4704A, 0x77A37549, -0x72A56E48, 0x6DA56E4A, 0x6EA47049, 0x78A47B47, 0x78A37548, 0x72A3704A, 0x70A3704A, 0x73A47148, -0x74A47847, 0x72A46E49, 0x75A47348, 0x6BA47149, 0x72A3744A, 0x71A2734A, 0x73A47148, 0x71A37049, -0x73A36F49, 0x6CA37149, 0x6FA46F49, 0x71A47149, 0x73A46E49, 0x6DA47349, 0x6FA46B4A, 0x72A37149, -0x72A47149, 0x6EA47249, 0x6DA46F49, 0x6AA46C4A, 0x71A47048, 0x71A37149, 0x75A37249, 0x77A37349, -0x71A47349, 0x71A47648, 0x71A46E49, 0x6EA4694A, 0x65A4664C, 0x6CA47049, 0x6FA36E49, 0x6DA46E49, -0x6DA46D49, 0x6CA46D4A, 0x6DA36D4A, 0x6FA37449, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D987755, 0x78A57842, 0x77A47742, 0x77A47742, 0x78A47742, 0x77A47742, 0x77A47742, -0x78A57842, 0x77A47742, 0x77A47742, 0x77A47842, 0x77A47742, 0x77A47742, 0x78A57842, 0x78A47742, -0x77A47842, 0x78A47742, 0x78A47742, 0x77A47742, 0x77A47842, 0x77A47742, 0x78A47742, 0x78A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, 0x77A47742, 0x77A47842, 0x78A57842, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x78A47742, 0x77A47842, 0x77A47742, -0x78A47742, 0x78A47742, 0x78A47742, 0x78A47742, 0x77A47742, 0x538C006A, 0x00772085, 0x9E289BBB, -0x973476B7, 0x00800080, 0x00800080, 0x00800080, 0x00646294, 0x942B97BE, 0x9A299CBB, 0x34710089, -0x006C468E, 0x972B98BD, 0x9C28A0BA, 0xA225A3B8, 0xA22D89B6, 0x9C299ABB, 0x992F85B8, 0x00800080, -0x0B81007C, 0x0072328A, 0x952C95BE, 0x952C95BE, 0x64630094, 0x00800080, 0x006E3D8C, 0x982B98BD, -0x99299BBC, 0x9C289EBA, 0x9E289DBA, 0x673899B2, 0x992A99BD, 0x9A54009E, 0x00800080, 0x29499AA6, -0x992A99BC, 0x9A4E14A2, 0x00800080, 0x00607196, 0x9A2999BC, 0x993B5CB0, 0x00800080, 0x007A1484, -0x803195BA, 0x99299EBB, 0xA327A9B6, 0xAB28A4B6, 0xA1279DBA, 0x905114A0, 0x00800080, 0x006C448E, -0x942C95BE, 0x99299CBC, 0xA026A1B9, 0xA0279EBA, 0x9B2999BC, 0x7A5E0098, 0x00800080, 0x569E754B, -0x77A47742, 0x77A47842, 0x78A47742, 0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x78A47742, 0x78A47742, 0x77A47742, 0x76A37244, -0x6DA06649, 0x5D9B5452, 0x4B95435B, 0x3C913562, 0x268B256C, 0x258B266C, 0x31903964, 0x3E93455E, -0x4D985755, 0x5F9E654D, 0x69A06C49, 0x6CA16C48, 0x6EA27046, 0x73A37444, 0x76A47743, 0x77A47743, -0x77A47743, 0x78A47742, 0x78A47742, 0x77A47742, 0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, -0x78A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, 0x77A47742, -0x78A47742, 0x77A47742, 0x77A47842, 0x78A57842, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47842, 0x78A57842, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47842, -0x77A47842, 0x77A47742, 0x77A47842, 0x77982D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00926B65, 0x70A4704A, 0x78A47049, 0x6EA37149, 0x6FA37449, 0x78A37548, 0x6EA46F49, 0x70A46F4A, -0x72A47348, 0x73A47248, 0x71A47249, 0x72A47249, 0x72A4724A, 0x73A37549, 0x76A37449, 0x73A4734A, -0x73A47349, 0x74A47648, 0x77A47847, 0x75A47448, 0x72A57348, 0x76A37449, 0x72A36E4A, 0x6CA47149, -0x78A37548, 0x70A56D48, 0x6CA46F49, 0x70A57248, 0x79A47A47, 0x77A47448, 0x70A3714A, 0x71A3724A, -0x71A47348, 0x73A47148, 0x70A47648, 0x71A46D49, 0x71A37549, 0x73A3704A, 0x76A37448, 0x72A47148, -0x70A37149, 0x6EA46D49, 0x74A46E48, 0x71A47248, 0x71A37449, 0x6DA47149, 0x71A46D49, 0x70A37249, -0x71A47349, 0x6FA37249, 0x6FA47049, 0x6DA46C49, 0x71A57048, 0x70A47249, 0x72A37249, 0x77A37348, -0x75A47348, 0x76A47348, 0x6FA46E49, 0x68A4644C, 0x67A46F4A, 0x71A37049, 0x6FA46F49, 0x6FA46E4A, -0x6EA46F4A, 0x6EA36F4A, 0x71A3704A, 0x6FA36E4A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7EA57554, 0x6FA86A54, 0x64AA6454, 0x60AC5B54, 0x61AA6A53, 0x69A96355, 0x62AB6E52, 0x7FA77852, +0x7BA76B54, 0x64A77E55, 0x71A57157, 0x79AA6952, 0x6AAC6251, 0x6BA87855, 0x82A87D52, 0x76A76D56, +0x60A96459, 0x6BA76756, 0x60A8575A, 0x55A9535A, 0x5EA86E58, 0x70A67256, 0x7CA77A53, 0x69A77856, +0x86A76E53, 0x67A96E54, 0x6DA96555, 0x6CA86756, 0x63A85D5A, 0x71A67856, 0x6EA56459, 0x59AA6954, +0x6EA66E57, 0x69A96356, 0x80A88751, 0x84A9814F, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D987855, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A57842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, -0x78A57842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x2B860074, 0x0068538F, 0x992A97BC, -0x94404EB0, 0x00800080, 0x00800080, 0x00800080, 0x006C448E, 0x922D93BF, 0x952B97BD, 0x5B660092, -0x00800080, 0x623B93B4, 0x952B97BD, 0x992A99BD, 0x8E4A32A6, 0x952C94BE, 0x953183B9, 0x00800080, -0x0B82007C, 0x007D0A82, 0x892F92BC, 0x922D92BF, 0x3172008A, 0x00800080, 0x00800080, 0x6D3793B6, -0x932C94BF, 0x962B97BD, 0x983965B3, 0x274A94A7, 0x942C95BE, 0x9755009E, 0x00800080, 0x284A97A6, -0x962C96BD, 0x974F14A2, 0x00800080, 0x00606F96, 0x972B96BD, 0x963C5BB1, 0x00800080, 0x00800080, -0x13567F9F, 0x932C96BE, 0x99299ABC, 0x9A2999BC, 0x973181B9, 0x1D770086, 0x00800080, 0x00800080, -0x444392AE, 0x952B97BD, 0x99299ABC, 0x9A2999BC, 0x973379B7, 0x147A0084, 0x00852576, 0x70A37644, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, -0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A57742, 0x77A47543, -0x72A26E46, 0x679F604C, 0x599A5153, 0x4B96465A, 0x4294405D, 0x4094415E, 0x4395485B, 0x4D995456, -0x5C9D624E, 0x69A16E48, 0x71A27244, 0x72A37345, 0x73A37444, 0x76A47743, 0x77A57842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A57842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A47842, 0x78A57842, -0x78A57842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A57842, 0x78A47842, 0x78A57842, 0x78A47842, -0x78A57842, 0x78A47842, 0x78A47842, 0x78992D55, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927064, 0x6FA47748, 0x6FA46D4A, 0x71A47049, 0x77A47748, 0x74A47049, 0x6FA47049, 0x72A47548, -0x73A47348, 0x72A4714A, 0x71A47149, 0x71A47149, 0x71A57248, 0x73A57348, 0x72A57148, 0x70A47049, -0x73A37349, 0x74A37449, 0x73A47248, 0x75A47748, 0x75A47648, 0x72A47447, 0x74A37249, 0x6FA46B4A, -0x6CA47549, 0x78A47448, 0x6FA56D48, 0x6FA47149, 0x70A47449, 0x7AA37C47, 0x78A47348, 0x70A3724A, -0x6EA37349, 0x76A57347, 0x71A47349, 0x77A47049, 0x6DA47249, 0x75A37549, 0x73A37849, 0x73A47148, -0x70A4714A, 0x72A46D49, 0x6FA47348, 0x6EA47149, 0x72A47248, 0x71A46E49, 0x73A46F48, 0x6DA47349, -0x70A47348, 0x71A46E49, 0x71A46F49, 0x6CA46D49, 0x71A57048, 0x70A47448, 0x73A47548, 0x74A37149, -0x73A47448, 0x75A47248, 0x6FA4664A, 0x64A46B4C, 0x71A47348, 0x72A37149, 0x6FA47149, 0x71A4704A, -0x6FA46E49, 0x71A47248, 0x71A47149, 0x70A4704A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00947869, 0x84A78052, 0x78A87B52, 0x7FA78651, 0x85A48852, 0x85A97650, 0x67AB6B53, 0x74A87E54, +0x82A68153, 0x7DA87953, 0x7EA88052, 0x7FA88551, 0x84A88451, 0x7FA87E53, 0x7EA97F51, 0x81AA7950, +0x71AD5D51, 0x51AB5E57, 0x6FAB7153, 0x69AA6256, 0x5EA6625A, 0x65A56A59, 0x81A58B53, 0x8CA77153, +0x5FAA5F57, 0x62AB6155, 0x62AC6354, 0x67AA6754, 0x70A87553, 0x74A97352, 0x78AA7A50, 0x77A97A51, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D997954, 0x78A47941, 0x78A47941, 0x78A47941, 0x78A47941, 0x79A57941, 0x78A47842, -0x79A47841, 0x78A47941, 0x79A47841, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, -0x78A47941, 0x79A57941, 0x78A47941, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, -0x78A47842, 0x79A57941, 0x79A47841, 0x79A57941, 0x78A47941, 0x78A47842, 0x78A47941, 0x79A57941, -0x79A47841, 0x78A47941, 0x78A47941, 0x79A57941, 0x79A47841, 0x79A47841, 0x78A47941, 0x78A47842, -0x78A47941, 0x79A47841, 0x79A57941, 0x79A57941, 0x78A47941, 0x1082007C, 0x005B849A, 0x952C92BE, -0x924E1DA5, 0x00800080, 0x268E3967, 0x2A860075, 0x007A1384, 0x922D92BF, 0x922D92BF, 0x8B550A9F, -0x00800080, 0x006C448E, 0x883092BD, 0x923D58B2, 0x13751388, 0x922D92BF, 0x923280BA, 0x00800080, -0x0C840E78, 0x00800080, 0x623B92B4, 0x923088BD, 0x0A7D0082, 0x00852676, 0x00800080, 0x006C448E, -0x883092BD, 0x92327FBB, 0x446C008E, 0x135192A3, 0x922D92BF, 0x945014A3, 0x00800080, 0x284A94A7, -0x922D92BF, 0x945014A3, 0x00800080, 0x00616D96, 0x932D92BF, 0x933D59B2, 0x00800080, 0x00800080, -0x00800080, 0x444E6BA5, 0x922D92BF, 0x923575B8, 0x446C008E, 0x00800080, 0x00841B78, 0x00800080, -0x00771D86, 0x444392AE, 0x922D93BF, 0x933B62B4, 0x3A6F008C, 0x00800080, 0x028D5A67, 0x72A37643, -0x79A57941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, 0x78A47941, 0x79A47841, 0x79A47841, -0x79A57941, 0x78A47842, 0x79A47841, 0x78A47941, 0x79A47841, 0x78A47941, 0x79A47841, 0x77A47842, -0x76A37443, 0x70A16B47, 0x669E604C, 0x5C9B5751, 0x54995255, 0x52995355, 0x559A5952, 0x5D9D624E, -0x67A06D48, 0x71A27444, 0x76A47642, 0x77A47742, 0x78A47842, 0x78A47842, 0x78A47941, 0x79A57941, -0x79A57941, 0x79A47841, 0x78A47941, 0x79A57941, 0x79A47841, 0x78A47941, 0x78A47941, 0x79A57941, -0x78A47842, 0x79A47841, 0x79A57941, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, -0x79A57941, 0x79A57941, 0x79A57941, 0x78A47941, 0x79A57941, 0x79A57941, 0x79A47841, 0x79A57941, -0x79A47841, 0x78A47842, 0x78A47941, 0x79A47841, 0x78A47842, 0x79A57941, 0x79A47841, 0x79A47841, -0x79A57941, 0x78A47941, 0x79A57941, 0x79A47841, 0x78A47941, 0x79A47841, 0x79A47841, 0x78A47941, -0x79A57941, 0x79A57941, 0x78A47941, 0x79992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00926E65, 0x77A47148, 0x6CA46E4A, 0x70A47649, 0x77A47448, 0x71A47249, 0x71A47449, 0x76A47248, -0x72A4744A, 0x74A47149, 0x6FA57149, 0x74A47548, 0x75A47448, 0x74A47349, 0x74A47248, 0x71A57048, -0x71A47148, 0x71A47049, 0x71A47049, 0x72A47349, 0x74A47548, 0x75A47548, 0x74A47448, 0x75A37349, -0x6FA46C4A, 0x70A47848, 0x79A47447, 0x6FA56F48, 0x72A47249, 0x71A47648, 0x7BA47847, 0x75A46F49, -0x6DA4724A, 0x71A47648, 0x73A47048, 0x77A47747, 0x6EA47049, 0x74A37949, 0x73A3734A, 0x7AA47448, -0x71A47149, 0x72A47349, 0x6CA46F49, 0x6FA47149, 0x70A47149, 0x73A46F49, 0x72A57248, 0x6EA4714A, -0x73A47348, 0x72A46D49, 0x72A47148, 0x6EA46C49, 0x72A56F48, 0x70A47548, 0x72A47548, 0x73A37548, -0x74A47448, 0x71A47049, 0x69A4624C, 0x6BA47349, 0x71A47149, 0x70A47149, 0x72A47049, 0x6FA47049, -0x73A57747, 0x76A57247, 0x71A57247, 0x72A57248, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x79A67556, 0x72A96954, 0x62AD5B53, 0x5DAB6155, 0x5DA95959, 0x53AA5F59, 0x71A76D55, 0x68AC6A52, +0x82A87F50, 0x7FA76355, 0x76A77955, 0x76A87854, 0x73AE644F, 0x6DA87B54, 0x87AA6852, 0x6AA96256, +0x78A67555, 0x6FA76658, 0x61A85E59, 0x67A96756, 0x69A86955, 0x72A97154, 0x6DA76C57, 0x72A58055, +0x82A77154, 0x77A78152, 0x7CAA6C51, 0x78A87A52, 0x6CAA6D54, 0x66A7615B, 0x69A67F57, 0x71A57956, +0x77A96753, 0x6FA96B54, 0x6EA87C52, 0x6DA77F54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D997A54, 0x7AA57941, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57941, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x79A57941, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, -0x79A57A41, 0x7AA57A41, 0x79A57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x79A57A41, 0x79A57941, 0x79A57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA47941, 0x2C860074, 0x00800080, 0x00800080, -0x00800080, 0x0080027F, 0x4193435E, 0x408A066D, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x248D3668, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0E8E5666, 0x0881007D, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x32870073, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x3593515D, 0x1A840079, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0080027F, 0x449A6B52, 0x73A37843, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA47841, -0x78A47842, 0x77A37343, 0x70A16B47, 0x699E664A, 0x649D624D, 0x629D624D, 0x639E674B, 0x6AA06E48, -0x71A27445, 0x77A47842, 0x79A47941, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x79A57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57941, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7A992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927464, 0x75A56E48, 0x70A4704A, 0x75A47548, 0x74A47448, 0x74A47249, 0x74A47348, 0x73A47349, -0x75A47348, 0x70A57249, 0x78A47A47, 0x7BA37A48, 0x7BA37C48, 0x7DA47D47, 0x7DA47E47, 0x7DA37A47, -0x75A47148, 0x70A57348, 0x73A47348, 0x70A47249, 0x72A47149, 0x71A57648, 0x76A47548, 0x74A47647, -0x75A47149, 0x6FA46F4A, 0x71A47848, 0x77A47247, 0x6DA56E49, 0x72A47349, 0x74A47947, 0x7AA57547, -0x70A47249, 0x71A47647, 0x74A47548, 0x70A47848, 0x74A46D49, 0x73A47748, 0x79A37349, 0x76A47848, -0x72A47148, 0x72A47349, 0x71A56D49, 0x71A46F48, 0x70A47149, 0x71A47349, 0x70A47548, 0x6FA46E49, -0x73A47249, 0x74A56E48, 0x71A57148, 0x71A56D48, 0x73A56F48, 0x72A47748, 0x72A47548, 0x72A47448, -0x74A57448, 0x73A46E48, 0x62A4694C, 0x73A47148, 0x72A46F48, 0x71A47149, 0x71A47348, 0x74A57647, -0x76A47447, 0x73A47149, 0x70A47149, 0x72A57248, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D997A54, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57B41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57941, 0x5D8E0068, 0x00800080, 0x00800080, -0x00800080, 0x00872E73, 0x50985256, 0x5093305F, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00841A79, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x509B6252, 0x0E82007C, 0x00800080, 0x00800080, 0x00800080, 0x43986155, 0x55911E62, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x0081087D, 0x00800080, 0x00800080, 0x00800080, 0x0083147B, 0x56963D5A, -0x19830079, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x1B8D4068, 0x589A5752, 0x51932E5F, -0x0280007F, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x22904D63, 0x65A06F49, 0x76A47942, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57941, 0x79A47842, 0x76A37343, 0x72A27045, 0x6FA16D47, 0x6DA16E47, 0x70A27145, 0x73A37544, -0x77A47842, 0x79A57942, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57B41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7BA57A41, 0x7AA57A41, 0x7AA57B41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7A992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927764, 0x71A47148, 0x72A47449, 0x76A57548, 0x74A47748, 0x72A47448, 0x72A57447, 0x73A47548, -0x6EA56F49, 0x78A47B47, 0x7AA47947, 0x75A57648, 0x76A57748, 0x76A57548, 0x75A57647, 0x76A47847, -0x7CA47C47, 0x7AA37348, 0x72A47448, 0x73A57348, 0x72A47249, 0x72A46E4A, 0x72A47748, 0x7AA37748, -0x75A47847, 0x74A47149, 0x71A46E49, 0x71A47A48, 0x77A56F47, 0x6DA57148, 0x73A57548, 0x78A47747, -0x72A47149, 0x75A57148, 0x76A57447, 0x74A47548, 0x7AA47148, 0x6EA47548, 0x7AA37848, 0x71A37649, -0x76A57048, 0x71A47249, 0x76A46F48, 0x6EA57149, 0x71A47148, 0x72A47449, 0x6FA47548, 0x73A46D49, -0x73A47248, 0x75A46F49, 0x6FA47348, 0x71A56D48, 0x74A57048, 0x73A47948, 0x71A47548, 0x71A47348, -0x75A47148, 0x73A56949, 0x64A4714B, 0x73A47249, 0x70A47148, 0x73A47349, 0x76A47747, 0x79A47647, -0x72A47049, 0x71A47349, 0x73A47349, 0x74A37349, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D997B54, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, -0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, -0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, -0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57A41, 0x779F584A, 0x26870B72, 0x00800080, -0x0082117B, 0x3495585B, 0x5F9D614E, 0x5F9C5950, 0x348A106E, 0x00800080, 0x00800080, 0x05841A77, -0x3D95505B, 0x338A146D, 0x0480007E, 0x0082107C, 0x2B880E70, 0x00800080, 0x00810A7D, 0x22915062, -0x6B9F6949, 0x5E952F5A, 0x1082007B, 0x0080047E, 0x178D4169, 0x639E664B, 0x639C584F, 0x358A136D, -0x0380007E, 0x0081087D, 0x198A2C6D, 0x0F82007C, 0x00800080, 0x0083147B, 0x3A913A62, 0x1382007B, -0x00800080, 0x0082147A, 0x3C96575A, 0x2D89126F, 0x00800080, 0x0082127B, 0x39975F59, 0x5E9C5850, -0x4E93355D, 0x20870E73, 0x00800080, 0x00820D7C, 0x1E8D3969, 0x519A5854, 0x5F9D5F4F, 0x5A9A5353, -0x4B912B61, 0x0F82007C, 0x00800080, 0x0082107B, 0x29904164, 0x569C6151, 0x6BA27346, 0x77A47A41, -0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, -0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, -0x7BA57B41, 0x7BA57A40, 0x7AA57941, 0x78A47742, 0x77A47643, 0x77A47743, 0x77A47842, 0x79A57941, -0x7AA57A41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, -0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, -0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, -0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, -0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, -0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, -0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7B992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927564, 0x73A47548, 0x70A47848, 0x74A57448, 0x78A47447, 0x74A57347, 0x76A47548, 0x74A56D49, -0x71A47B48, 0x7AA47747, 0x77A57647, 0x74A57447, 0x75A57448, 0x75A57548, 0x77A57847, 0x78A57647, -0x76A57846, 0x7AA57B47, 0x78A47548, 0x73A47548, 0x75A47548, 0x74A47549, 0x71A46E4A, 0x73A57947, -0x7AA37848, 0x78A47848, 0x73A47548, 0x6FA56F49, 0x78A47C46, 0x73A66F47, 0x6FA57349, 0x78A47648, -0x74A47148, 0x76A47348, 0x75A57447, 0x75A47648, 0x79A57747, 0x6EA47149, 0x77A37D48, 0x76A37249, -0x78A47148, 0x70A47248, 0x74A47348, 0x6DA46F49, 0x6FA57348, 0x73A47348, 0x71A47049, 0x75A46F48, -0x71A57448, 0x75A47148, 0x6CA57349, 0x71A56D48, 0x74A57048, 0x75A47947, 0x71A47548, 0x73A57248, -0x75A47448, 0x74A5644A, 0x69A47449, 0x72A57148, 0x71A57448, 0x73A47648, 0x78A57A47, 0x76A47248, -0x6FA57248, 0x72A57348, 0x74A47548, 0x76A47248, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0095706A, 0x6FA87154, 0x7FA68853, 0x8AA87A50, 0x74AC7F4F, 0x85A68650, 0x7FA67F52, 0x7AA87552, +0x74A97152, 0x76A97851, 0x77AA7451, 0x72AB7351, 0x6FAB6551, 0x59AD5254, 0x51AB5958, 0x6AA97355, +0x74A87155, 0x6FA77057, 0x65A86058, 0x66A77457, 0x84A78451, 0x78A96A54, 0x6AAA7153, 0x75AC6A52, +0x67AC6753, 0x6BAA6E53, 0x68A96855, 0x69AA6455, 0x65A96857, 0x6AA76E58, 0x6FA96858, 0x6EAC7652, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A67F3E, 0x7DA57B40, -0x3C913562, 0x2D997B54, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x77A37144, 0x679D5C4D, 0x53984D56, -0x4D985456, 0x5C9D654E, 0x6BA16D47, 0x6B9F654A, 0x5C9A5252, 0x4995465A, 0x48964D59, 0x559B5C52, -0x5C9B5950, 0x52974B57, 0x4695465B, 0x4795495A, 0x4995465A, 0x4494465B, 0x4B985457, 0x609F6B4B, -0x6FA16E46, 0x679E5B4E, 0x4F974958, 0x48964C59, 0x579C6250, 0x6AA06C48, 0x689E5F4C, 0x54974B57, -0x4494425C, 0x4595485B, 0x4B964B59, 0x4895455B, 0x45954A5A, 0x519A5B53, 0x5F9D5F4E, 0x58995154, -0x4B974C59, 0x519A5C53, 0x629E634D, 0x5F9B5551, 0x4D974B58, 0x4F995755, 0x609E664C, 0x679E624C, -0x59995153, 0x4A95465A, 0x4595455C, 0x4695485A, 0x4B985157, 0x599C614F, 0x67A0684A, 0x659D5E4D, -0x55984E55, 0x4995485A, 0x4795485A, 0x49964B59, 0x4F995555, 0x5E9E674C, 0x6FA27644, 0x79A57B41, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B41, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7B992D54, 0x35913C62, 0x7BA57D40, 0x7FA6803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937464, 0x77A47548, 0x73A47548, 0x76A47A47, 0x78A57447, 0x76A57647, 0x77A57548, 0x6DA57348, -0x7BA57847, 0x78A47748, 0x75A57347, 0x73A57348, 0x72A67148, 0x72A67348, 0x73A67448, 0x76A57947, -0x7BA57A47, 0x77A67846, 0x78A57747, 0x78A57448, 0x74A47748, 0x74A47547, 0x74A47249, 0x6EA46E4A, -0x75A47947, 0x79A47648, 0x79A47747, 0x75A47448, 0x72A57548, 0x7BA57847, 0x71A76E47, 0x72A57748, -0x74A47048, 0x78A57347, 0x71A57247, 0x72A57747, 0x78A57A47, 0x73A46C49, 0x73A47B48, 0x7EA37548, -0x73A47647, 0x70A57248, 0x74A47549, 0x6FA56E49, 0x70A57248, 0x75A47448, 0x72A46F49, 0x75A57148, -0x70A57548, 0x75A47348, 0x6BA57249, 0x71A56D48, 0x73A57048, 0x75A47947, 0x6FA47448, 0x73A47148, -0x77A47748, 0x70A5644A, 0x6FA47349, 0x72A47148, 0x75A57448, 0x75A47847, 0x78A47847, 0x71A57248, -0x74A47348, 0x75A37948, 0x7CA27D48, 0x7BA37947, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x87A9863A, 0x86A8853B, 0x83A7823C, 0x80A77F3E, 0x7DA57B40, -0x3C913562, 0x2D997C54, 0x7CA57B40, 0x7BA57B40, 0x7CA67C40, 0x7CA57B40, 0x7CA67C40, 0x7CA57B40, -0x7BA57B40, 0x7BA57C40, 0x7BA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57C40, -0x7BA57B40, 0x7CA67C40, 0x7CA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57C40, -0x7CA57B40, 0x7CA67C40, 0x7CA67C40, 0x7CA57B40, 0x7BA57C40, 0x7CA57B40, 0x7CA57B40, 0x7BA57C40, -0x7BA57B40, 0x7CA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA67C40, 0x7BA57C40, 0x7BA57C40, 0x7BA57C40, -0x7CA57B40, 0x7BA57C40, 0x7CA67C40, 0x7BA57C40, 0x7CA57B40, 0x77A37243, 0x6B9F614B, 0x5B9B5851, -0x599C5F50, 0x67A06E49, 0x74A37643, 0x74A26F45, 0x679E5E4C, 0x56995254, 0x53995754, 0x5C9D634E, -0x669E624C, 0x5D9B5751, 0x53985155, 0x51985255, 0x53985155, 0x50985156, 0x569B5D51, 0x67A06F48, -0x72A37244, 0x6D9F6349, 0x5C9B5551, 0x559A5853, 0x609F6A4B, 0x6FA17145, 0x6FA06848, 0x5F9B5750, -0x51984F56, 0x50985256, 0x54995454, 0x53985155, 0x51995455, 0x5B9C624F, 0x659F654C, 0x5F9C594F, -0x569A5653, 0x5B9D624F, 0x689F684A, 0x669D5E4D, 0x589A5552, 0x589C5F50, 0x67A06D49, 0x6EA16B47, -0x649D5C4E, 0x57995154, 0x4F984D57, 0x4F985256, 0x579B5D51, 0x649F6B4A, 0x6FA17145, 0x6EA06848, -0x619C5B4F, 0x55995155, 0x4F984F57, 0x51985455, 0x589C5F50, 0x66A06E49, 0x74A37843, 0x7AA57B40, -0x7CA67C40, 0x7CA67C40, 0x7CA57B40, 0x7BA57C40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7BA57C40, -0x7CA67C40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57B40, 0x7CA67C40, -0x7BA57B40, 0x7BA57B40, 0x7BA57C40, 0x7BA57C40, 0x7CA57B40, 0x7CA67C40, 0x7BA57C40, 0x7CA57B40, -0x7BA57B40, 0x7BA57B40, 0x7CA57B40, 0x7CA67C40, 0x7BA57B40, 0x7CA57B40, 0x7BA57C40, 0x7CA67C40, -0x7BA57B40, 0x7BA57C40, 0x7BA57B40, 0x7CA67C40, 0x7CA67C40, 0x7CA57B40, 0x7CA67C40, 0x7CA67C40, -0x7CA57B40, 0x7CA57B40, 0x7CA67C40, 0x7CA57B40, 0x7CA57B40, 0x7BA57B40, 0x7BA57C40, 0x7CA57B40, -0x7BA57B40, 0x7CA57B40, 0x7BA57C40, 0x7BA57C40, 0x7CA57B40, 0x7CA67C40, 0x7CA67C40, 0x7BA57C40, -0x7CA67C40, 0x7BA57C40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7BA57C40, 0x7CA67C40, 0x7CA67C40, -0x7CA57B40, 0x7BA57C40, 0x7BA57B40, 0x7CA57B40, 0x7CA67C40, 0x7BA57C40, 0x7BA57B40, 0x7BA57B40, -0x7BA57C40, 0x7BA57C40, 0x7BA57C40, 0x7B992D54, 0x35913C62, 0x7BA57D40, 0x7FA7803E, 0x82A7833C, -0x85A8863B, 0x86A9873A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927663, 0x78A47348, 0x76A57647, 0x78A47A47, 0x74A57647, 0x75A57947, 0x78A46F48, 0x74A47A47, -0x74A47549, 0x73A57448, 0x75A57348, 0x71A56F48, 0x70A67148, 0x73A67447, 0x72A67147, 0x70A67247, -0x73A57648, 0x79A57B46, 0x79A67946, 0x78A57847, 0x76A57148, 0x72A47648, 0x76A47448, 0x71A47249, -0x6CA56B4A, 0x74A47647, 0x74A47548, 0x76A47548, 0x74A57548, 0x74A57847, 0x7CA67446, 0x6DA67248, -0x75A47049, 0x79A57547, 0x72A67447, 0x74A57747, 0x78A57A47, 0x77A47048, 0x6FA47849, 0x7FA37A48, -0x72A47448, 0x72A67248, 0x75A47649, 0x72A56F48, 0x71A47148, 0x74A57647, 0x73A47049, 0x74A57448, -0x71A47448, 0x73A57548, 0x6CA56F49, 0x72A56E48, 0x71A57148, 0x76A47A47, 0x71A47448, 0x74A57148, -0x77A47A48, 0x6AA5674A, 0x74A47148, 0x72A57248, 0x75A57548, 0x76A57A47, 0x7AA47348, 0x72A47248, -0x6FA47349, 0x75A47349, 0x70A47149, 0x78A37B47, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x80A77F3E, 0x7DA57B40, -0x3C913562, 0x2D997C54, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67C3F, 0x7CA67D3F, 0x7DA67D3F, -0x7DA67D3F, 0x7CA67C40, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, -0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7CA67D3F, 0x7CA67D3F, 0x7CA67C40, 0x7CA67D3F, -0x7DA67D3F, 0x7DA67C3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67C3F, 0x7DA67C3F, -0x7CA67C40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67D3F, -0x7CA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x79A47542, 0x71A16B47, 0x669E654B, -0x669F6A4A, 0x70A37644, 0x79A57B40, 0x79A47641, 0x72A16B47, 0x639D614C, 0x609D634D, 0x67A06C49, -0x6EA16C47, 0x699F644B, 0x619D5F4E, 0x5F9D5F4E, 0x5F9D5F4E, 0x5F9D604E, 0x639E684B, 0x6EA27445, -0x77A47742, 0x73A26E45, 0x679E644B, 0x639E664B, 0x6BA17246, 0x76A47742, 0x74A27144, 0x6B9F654A, -0x609C5E4E, 0x5E9C5F4F, 0x609D614D, 0x619D604D, 0x609D624D, 0x669F6B4A, 0x6EA16E47, 0x6A9F664A, -0x639E634D, 0x66A06B49, 0x6FA27045, 0x6EA06948, 0x659E634C, 0x649F6A4A, 0x6FA27345, 0x75A37243, -0x6FA16948, 0x649D604D, 0x5D9C5C4F, 0x5D9D604E, 0x639F694B, 0x6FA27345, 0x76A47742, 0x76A37244, -0x6CA06749, 0x639D5F4E, 0x5C9C5C50, 0x5D9D604E, 0x659F6A4A, 0x6FA27544, 0x78A47A41, 0x7BA57C40, -0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67D3F, -0x7CA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67C3F, -0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7CA67D3F, 0x7CA67C40, 0x7CA67D3F, 0x7CA67D3F, -0x7CA67C40, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67C3F, 0x7CA67D3F, 0x7DA67C3F, -0x7CA67D3F, 0x7CA67C40, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7CA67D3F, 0x7DA67D3F, -0x7CA67C40, 0x7CA67D3F, 0x7DA67C3F, 0x7DA67C3F, 0x7DA67C3F, 0x7DA67C3F, 0x7DA67D3F, 0x7CA67D3F, -0x7DA67C3F, 0x7CA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x7DA67C3F, 0x7CA67D3F, -0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, -0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, -0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7C992D54, 0x35913C62, 0x7BA57D40, 0x7FA7803E, 0x82A7833C, -0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927764, 0x78A47748, 0x73A57947, 0x7CA57646, 0x74A57347, 0x78A47847, 0x71A57148, 0x7CA47647, -0x75A57149, 0x73A57547, 0x71A47249, 0x75A57747, 0x78A67A46, 0x7BA67A46, 0x79A67846, 0x75A67247, -0x70A67148, 0x73A57647, 0x7AA57B46, 0x79A57847, 0x76A57747, 0x72A57148, 0x76A47647, 0x76A47149, -0x72A56E49, 0x68A66C4A, 0x74A57647, 0x74A47448, 0x77A47847, 0x76A57148, 0x76A57D46, 0x74A76F46, -0x75A57049, 0x78A57646, 0x72A67248, 0x73A57447, 0x7AA57947, 0x7DA57547, 0x6EA47649, 0x7CA47E47, -0x74A47349, 0x76A57247, 0x73A47648, 0x73A57048, 0x71A57249, 0x74A57548, 0x74A47149, 0x76A57448, -0x73A57448, 0x72A57648, 0x70A56C49, 0x71A67147, 0x72A57248, 0x76A57947, 0x72A57348, 0x75A57248, -0x78A47A47, 0x69A56A4A, 0x73A57348, 0x71A57348, 0x74A47548, 0x7AA47B46, 0x78A46F48, 0x73A47148, -0x72A57249, 0x70A56F49, 0x70A56C49, 0x6DA57548, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x81A77F3E, 0x7DA67C40, -0x3C913562, 0x2D997D53, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, -0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, -0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, -0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, -0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, -0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67C40, 0x7BA47841, 0x75A37244, 0x70A16E46, -0x70A27245, 0x76A47942, 0x7CA67C40, 0x7CA57A41, 0x77A37244, 0x6EA16C47, 0x6CA16D47, 0x70A27344, -0x74A37444, 0x72A27045, 0x6CA16C48, 0x6BA16C48, 0x6CA16C48, 0x6CA16C48, 0x6EA17146, 0x74A37843, -0x79A57A41, 0x78A37443, 0x71A26F46, 0x6EA27046, 0x73A37643, 0x7AA57A41, 0x7AA47742, 0x73A27045, -0x6CA06B48, 0x6AA06B49, 0x6CA16D47, 0x6DA16C47, 0x6CA16E47, 0x70A27245, 0x74A47444, 0x72A27045, -0x6EA16E47, 0x70A27245, 0x75A37543, 0x74A37144, 0x6FA16E47, 0x6FA27246, 0x75A47843, 0x79A47842, -0x76A37344, 0x6FA16C47, 0x6AA06949, 0x6AA06C48, 0x6EA17245, 0x76A47942, 0x7BA57B40, 0x79A57841, -0x75A37144, 0x6EA16B48, 0x69A06949, 0x6AA06C48, 0x6FA27345, 0x77A47A42, 0x7BA57C40, 0x7DA67D40, -0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, -0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, -0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, -0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, -0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, -0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, -0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, -0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D40, -0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, -0x7DA67D40, 0x7DA67D40, 0x7DA67D40, 0x7D992D53, 0x35913C62, 0x7CA67D40, 0x7FA7813E, 0x82A7833C, -0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927764, 0x77A57848, 0x75A47A47, 0x7CA57246, 0x74A67647, 0x77A57348, 0x70A47A48, 0x77A47648, -0x73A67348, 0x74A57348, 0x7AA57C46, 0x7BA67945, 0x79A67946, 0x77A67746, 0x76A77646, 0x76A77745, -0x77A77646, 0x73A67147, 0x73A57747, 0x78A67A47, 0x79A67646, 0x76A57347, 0x71A57348, 0x75A57848, -0x77A47248, 0x72A56D4A, 0x68A67149, 0x7AA47747, 0x74A47848, 0x79A47647, 0x71A57648, 0x7BA67545, -0x72A47249, 0x77A57646, 0x72A67048, 0x71A67547, 0x7AA57C46, 0x7CA47946, 0x70A57049, 0x7AA47E47, -0x7CA47547, 0x78A57447, 0x72A57348, 0x76A57248, 0x6FA57248, 0x71A67448, 0x74A47249, 0x75A57548, -0x72A57248, 0x72A57648, 0x73A56C48, 0x73A67247, 0x73A67047, 0x74A47847, 0x74A57448, 0x73A57348, -0x79A47B47, 0x69A56C4A, 0x72A57348, 0x71A67447, 0x72A47748, 0x7DA47C46, 0x70A57348, 0x6EA57249, -0x6EA66F49, 0x71A57348, 0x70A66F48, 0x6DA66F49, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A7823C, 0x81A77F3E, 0x7DA67C40, -0x3C913562, 0x2D997E53, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7DA67E3F, 0x7DA67E3F, -0x7DA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, -0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7DA67D40, 0x7DA67C40, 0x79A47842, 0x77A47743, -0x77A47942, 0x7BA57C40, 0x7DA67D40, 0x7DA67C40, 0x7BA47941, 0x77A47543, 0x75A47643, 0x77A47942, -0x7BA57B41, 0x79A47742, 0x76A47543, 0x75A47544, 0x76A47643, 0x76A47643, 0x77A47742, 0x79A57B41, -0x7CA67C40, 0x7BA57941, 0x78A47742, 0x77A47742, 0x79A47B41, 0x7CA67D40, 0x7CA57B40, 0x79A47742, -0x76A37543, 0x75A37543, 0x76A47743, 0x77A47543, 0x76A47643, 0x77A47842, 0x79A47942, 0x78A47742, -0x76A47543, 0x77A47942, 0x7AA57A41, 0x79A47842, 0x77A47643, 0x77A47842, 0x7BA57C40, 0x7CA57B40, -0x7BA57941, 0x77A47643, 0x74A37444, 0x74A37643, 0x77A47942, 0x7BA57C40, 0x7CA67D40, 0x7DA67C40, -0x7BA47941, 0x77A47543, 0x74A37444, 0x74A37643, 0x78A47A41, 0x7BA57C40, 0x7DA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7DA67D40, -0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7DA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, -0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67D3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7DA67E3F, 0x7EA67E3F, -0x7DA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67D3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7E992D53, 0x35913C62, 0x7CA67D40, 0x7FA7813E, 0x82A7833C, -0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927664, 0x75A57748, 0x76A57C46, 0x78A67147, 0x75A57A46, 0x77A56F48, 0x75A57947, 0x76A57548, -0x72A67148, 0x77A57E47, 0x7BA67A45, 0x76A67646, 0x74A57447, 0x75A57647, 0x76A57648, 0x75A67447, -0x75A67746, 0x78A77546, 0x6FA66F47, 0x72A57847, 0x7AA67B46, 0x76A67447, 0x71A67148, 0x71A57548, -0x78A57B47, 0x73A57348, 0x72A5694A, 0x6DA77648, 0x77A57248, 0x74A47948, 0x77A56F48, 0x75A67B46, -0x70A47349, 0x7AA57546, 0x75A67247, 0x74A67646, 0x77A57E46, 0x7CA57C46, 0x73A46F49, 0x77A57C47, -0x81A47747, 0x76A57748, 0x71A57048, 0x77A47449, 0x71A57048, 0x71A57448, 0x74A57148, 0x72A57748, -0x71A57248, 0x74A57447, 0x75A56C48, 0x72A57447, 0x74A67247, 0x71A57947, 0x74A57447, 0x72A67448, -0x7AA47D47, 0x6AA56C4A, 0x74A57447, 0x73A67747, 0x72A47748, 0x7CA47747, 0x6FA57149, 0x70A57149, -0x6FA57548, 0x75A57348, 0x75A57348, 0x71A66E48, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AA98839, 0x88A9863A, 0x86A8853B, 0x83A8823C, 0x81A77F3E, 0x7EA67C3F, -0x3C913562, 0x2D997F53, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7EA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, -0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67E3F, 0x7DA67C40, 0x7CA67C40, -0x7CA67D40, 0x7EA67E3F, 0x7EA67F3F, 0x7EA67E3F, 0x7EA67C3F, 0x7CA67C40, 0x7BA57C40, 0x7CA67D40, -0x7EA67E3F, 0x7DA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7DA67E3F, -0x7EA67E3F, 0x7EA67D3F, 0x7CA67C40, 0x7CA67C40, 0x7DA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67C3F, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7DA67D40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7DA67D40, 0x7DA67C40, 0x7CA67C40, 0x7CA67C40, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67D3F, 0x7CA67C40, 0x7BA57B40, 0x7BA57C40, 0x7CA67E3F, 0x7EA67E3F, 0x7FA67F3F, 0x7FA67E3F, -0x7EA67C3F, 0x7CA67C40, 0x7BA57B40, 0x7CA67C40, 0x7DA67E3F, 0x7EA67E3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, -0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7F992D53, 0x35913C62, 0x7CA67E3F, 0x7FA7813E, 0x82A8833C, -0x85A8863B, 0x86A9883A, 0x88A98A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927764, 0x77A57348, 0x79A47C46, 0x75A57547, 0x79A57A46, 0x73A57247, 0x79A57847, 0x73A67348, -0x72A57548, 0x80A57945, 0x79A67846, 0x78A57647, 0x76A57447, 0x74A67647, 0x76A67747, 0x79A57847, -0x78A57447, 0x73A67646, 0x76A67346, 0x6EA77048, 0x7AA67B46, 0x7CA67946, 0x73A67348, 0x72A67048, -0x76A57847, 0x79A57747, 0x73A67548, 0x6CA66B49, 0x75A57747, 0x70A57449, 0x7AA57647, 0x71A67747, -0x6EA47848, 0x79A67346, 0x77A57347, 0x76A67446, 0x76A57D46, 0x7DA57E46, 0x78A47148, 0x74A57A48, -0x7EA47A47, 0x77A57847, 0x72A66F48, 0x75A47748, 0x72A66D48, 0x71A57447, 0x74A57248, 0x70A57748, -0x72A57248, 0x76A57348, 0x76A56E48, 0x74A67647, 0x76A67347, 0x6FA57A47, 0x75A57547, 0x72A67548, -0x79A47E47, 0x6CA56C4A, 0x75A67447, 0x73A67747, 0x72A57A47, 0x7BA47348, 0x71A57348, 0x6FA56F49, -0x72A57648, 0x75A57348, 0x79A57947, 0x73A67147, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x81A48C56, 0x8DA48A54, 0x88A58554, 0x7BA67855, 0x6EAA6454, 0x60AD6254, 0x51AB5559, 0x7AA68253, +0x71AA6753, 0x7CA88151, 0x6DA67356, 0x7CA57955, 0x6DAD7150, 0x6AAA7C52, 0x7EAC6651, 0x6AA87C54, +0x7EA56C56, 0x64A75B59, 0x5FA96A56, 0x6EAD714F, 0x76AA7552, 0x77A97254, 0x7DA77F53, 0x77A86E54, +0x73A57757, 0x76A87654, 0x74A68254, 0x7DAA7451, 0x6EA77D54, 0x72AB6754, 0x6EA76F57, 0x75A67F56, +0x80A57355, 0x8AA67953, 0x69A97453, 0x73A78054, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9863A, 0x86A8853B, 0x83A8823C, 0x81A77F3E, 0x7EA67D3F, -0x3C913562, 0x2D9A7F53, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7F9A2D53, 0x35913C62, 0x7DA67E3F, 0x7FA7813E, 0x82A8833C, -0x85A8863B, 0x86A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927764, 0x76A57647, 0x7DA57946, 0x73A57647, 0x7AA57647, 0x71A67847, 0x7AA67847, 0x73A67448, -0x76A47F47, 0x78A67A46, 0x7BA67A46, 0x76A57647, 0x77A67947, 0x78A57747, 0x76A67447, 0x75A67647, -0x77A57947, 0x79A57248, 0x72A77746, 0x76A77147, 0x70A67847, 0x7CA67B45, 0x7BA67446, 0x74A67348, -0x71A67447, 0x76A67A46, 0x7DA57447, 0x75A67049, 0x6DA67148, 0x79A57048, 0x74A47B48, 0x76A67447, -0x74A57848, 0x74A77147, 0x77A67347, 0x76A67346, 0x77A67A46, 0x7FA57E47, 0x7BA57447, 0x72A47A48, -0x7CA58046, 0x78A57748, 0x75A66E48, 0x72A57948, 0x74A56E49, 0x71A67248, 0x74A57248, 0x70A57848, -0x76A57148, 0x76A57347, 0x76A56F48, 0x74A67746, 0x77A57647, 0x70A57947, 0x74A57447, 0x73A67648, -0x79A47E47, 0x6BA66D4A, 0x76A67647, 0x76A67747, 0x74A47C47, 0x7AA47348, 0x73A57548, 0x6FA67049, -0x75A57748, 0x7AA57847, 0x79A57946, 0x79A57347, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A8853A, 0x84A8823B, 0x81A77F3D, 0x7FA67D3F, -0x3C913562, 0x2E9A7F53, 0x7FA77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x80A7803E, 0x80A77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A7803E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x80A77F3E, 0x80A77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, -0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A7803E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, -0x7FA77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x7FA7803E, -0x80A77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7F9A2E53, 0x35913C62, 0x7DA67F3F, 0x7FA7813D, 0x82A8843B, -0x85A8863A, 0x87A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927764, 0x75A67947, 0x7EA67546, 0x75A57947, 0x78A57547, 0x73A57C46, 0x78A67547, 0x71A67348, -0x7EA57B45, 0x7BA67D45, 0x7AA67747, 0x78A57B47, 0x7AA57847, 0x78A67747, 0x77A57947, 0x77A57847, -0x77A67846, 0x76A67947, 0x76A66F48, 0x75A77746, 0x73A77047, 0x75A67947, 0x7AA67D46, 0x75A67348, -0x77A67347, 0x74A67947, 0x7CA57F46, 0x75A67947, 0x71A66D49, 0x72A57648, 0x71A57848, 0x79A67647, -0x7AA57846, 0x71A77147, 0x73A67348, 0x77A67446, 0x78A67847, 0x7EA57E46, 0x7CA57747, 0x73A57748, -0x7DA58046, 0x7BA57747, 0x78A66F47, 0x70A67948, 0x78A66E48, 0x6EA67148, 0x75A67347, 0x70A67548, -0x79A57347, 0x76A57447, 0x74A57248, 0x73A67846, 0x79A67647, 0x70A57647, 0x75A67447, 0x74A67647, -0x79A47E47, 0x6CA66D4A, 0x75A67547, 0x76A67747, 0x76A47D47, 0x79A57347, 0x73A57747, 0x6FA66E4A, -0x78A57A47, 0x7BA57A46, 0x78A57B46, 0x7EA67247, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8B38, 0x8BAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A8853A, 0x84A8833B, 0x81A7803D, 0x7FA67D3F, -0x3C913661, 0x2E9A8153, 0x80A7803E, 0x81A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x81A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7813E, 0x81A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, -0x80A7813E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x81A7813E, 0x80A7803E, 0x81A7803E, -0x81A7803E, 0x81A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x81A7813E, 0x80A7803E, 0x81A7803E, 0x80A7803E, -0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7813E, 0x81A7813E, 0x80A7813E, 0x80A7803E, -0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7803E, 0x81A7803E, -0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x81A7803E, 0x80A7803E, 0x81A7813E, 0x81A7813E, 0x80A7803E, 0x81A7803E, 0x81A7803E, -0x80A7803E, 0x80A7813E, 0x80A7813E, 0x80A7813E, 0x81A7803E, 0x81A7803E, 0x80A7813E, 0x80A7813E, -0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x81A7803E, -0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x81A7803E, -0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7813E, -0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7813E, -0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x80A7803E, 0x81A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, -0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7803E, 0x80A7803E, 0x80A7803E, 0x80A7813E, 0x80A7813E, -0x81A7803E, 0x80A7803E, 0x81A7803E, 0x809A2E53, 0x36913C61, 0x7DA67F3F, 0x80A7813D, 0x83A8843B, -0x85A8863A, 0x87A9883A, 0x89AA8A39, 0x8AAA8B38, 0x8BAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937763, 0x74A67C47, 0x7CA67446, 0x76A57A46, 0x77A57448, 0x78A57846, 0x78A67347, 0x71A57B47, -0x7BA67C45, 0x7DA67D45, 0x77A67A47, 0x7CA67746, 0x76A77647, 0x77A57947, 0x7AA57846, 0x79A57747, -0x78A67846, 0x76A77846, 0x77A67947, 0x71A77547, 0x77A77446, 0x73A67647, 0x79A67A46, 0x7CA67746, -0x75A67947, 0x74A67547, 0x7BA67B46, 0x80A57746, 0x79A67048, 0x70A67448, 0x75A56F49, 0x7AA57947, -0x78A77146, 0x70A67747, 0x73A67348, 0x75A67347, 0x79A67646, 0x7DA57E46, 0x7EA57947, 0x74A57748, -0x7DA58046, 0x7EA57847, 0x7AA67147, 0x70A67648, 0x77A57148, 0x6EA67049, 0x73A67347, 0x71A57249, -0x7CA57546, 0x77A57847, 0x75A67447, 0x73A67947, 0x79A67746, 0x71A57447, 0x77A67347, 0x73A67548, -0x78A47E47, 0x70A66C49, 0x76A67547, 0x76A67946, 0x77A47B47, 0x7AA47447, 0x73A57847, 0x6EA67049, -0x7DA57A47, 0x7BA67946, 0x7AA57A47, 0x80A67246, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8C38, 0x8BAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A9863A, 0x85A8833B, 0x82A7813D, 0x7FA67E3E, -0x3D913661, 0x2E870074, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00872E74, 0x36913D61, 0x7EA67F3E, 0x81A7823D, 0x83A8853B, -0x86A9863A, 0x87A9883A, 0x89AA8A39, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937664, 0x77A67F46, 0x79A67547, 0x78A77946, 0x75A67347, 0x79A67746, 0x78A67248, 0x76A57D46, -0x78A67B45, 0x7DA67746, 0x7CA67A47, 0x75A67747, 0x77A57C47, 0x80A48046, 0x80A48246, 0x80A57D46, -0x7BA57747, 0x76A77447, 0x75A77447, 0x78A67347, 0x76A77946, 0x77A67547, 0x74A67647, 0x78A77B46, -0x77A67647, 0x79A67447, 0x77A77946, 0x7DA58146, 0x78A57A47, 0x71A77148, 0x74A67148, 0x72A57A48, -0x70A76E47, 0x73A67647, 0x73A67048, 0x74A77346, 0x79A77646, 0x7AA57E46, 0x80A57C46, 0x76A57448, -0x7CA57D46, 0x7FA57747, 0x7AA57547, 0x6FA67347, 0x7AA57548, 0x6EA67048, 0x73A77147, 0x73A57248, -0x7DA57846, 0x76A57A46, 0x74A67647, 0x73A67947, 0x7AA67846, 0x73A67347, 0x78A67547, 0x73A67547, -0x77A47E46, 0x73A66B49, 0x75A67647, 0x76A67A46, 0x77A57C47, 0x79A57647, 0x73A57847, 0x6FA67249, -0x7EA57846, 0x7BA57B46, 0x78A57A47, 0x7EA67346, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8C38, 0x8BAA8A38, 0x8AAA8938, 0x88A9873A, 0x86A9863A, 0x85A8833B, 0x82A7813D, 0x7FA67F3E, -0x3D913662, 0x2E870073, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00872E73, 0x36913D62, 0x7FA67F3E, 0x81A7823D, 0x83A8853B, -0x86A9863A, 0x87A9883A, 0x89AA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937863, 0x7CA57E46, 0x79A57646, 0x78A67B46, 0x73A77447, 0x79A67747, 0x76A67447, 0x7CA57947, -0x7AA67B45, 0x7AA67B46, 0x7DA67646, 0x77A67647, 0x7CA67C46, 0x77A67347, 0x73A77348, 0x77A57F46, -0x80A57C46, 0x78A67647, 0x74A77246, 0x76A67A46, 0x75A67A46, 0x7AA77846, 0x73A67448, 0x76A77A46, -0x79A67746, 0x76A67847, 0x73A77747, 0x76A67F46, 0x7EA57C46, 0x79A67147, 0x71A77547, 0x72A67748, -0x70A77346, 0x78A57248, 0x73A66E48, 0x74A77246, 0x78A67846, 0x77A67F46, 0x7FA57F46, 0x77A57448, -0x7BA57B46, 0x7EA57846, 0x7AA57947, 0x71A77347, 0x78A57948, 0x6EA67049, 0x73A77347, 0x75A67148, -0x7DA67946, 0x76A57B46, 0x76A67547, 0x74A67946, 0x7AA67846, 0x73A57448, 0x79A67646, 0x75A67647, -0x76A57E47, 0x76A66D49, 0x73A67947, 0x76A67B46, 0x77A57C47, 0x7AA57647, 0x71A67847, 0x70A67248, -0x7FA57946, 0x79A67747, 0x78A67E46, 0x7CA67346, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x88A9883A, 0x86A9863A, 0x85A8843B, 0x82A7813C, 0x80A77F3E, -0x3E923661, 0x2E870073, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00872E73, 0x36923E61, 0x7FA7803E, 0x81A7823C, 0x84A8853B, -0x86A9863A, 0x88A9883A, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937863, 0x7FA57C46, 0x79A67646, 0x7AA67946, 0x73A67547, 0x77A77746, 0x75A67A47, 0x7DA57946, -0x7BA67C45, 0x78A67E46, 0x77A67846, 0x7AA67A46, 0x75A67247, 0x74A77447, 0x72A77048, 0x6EA77047, -0x77A67F46, 0x7DA57946, 0x75A77146, 0x71A77646, 0x7BA67646, 0x7BA77A45, 0x77A67347, 0x74A67847, -0x7AA77845, 0x77A67847, 0x78A67547, 0x77A77746, 0x82A57C45, 0x7DA67447, 0x73A87446, 0x72A67248, -0x75A67C46, 0x75A57248, 0x71A76D48, 0x75A77346, 0x77A67A46, 0x77A67E46, 0x7EA58046, 0x78A57248, -0x79A57B47, 0x7FA67B46, 0x78A67B47, 0x71A77347, 0x76A57848, 0x71A67049, 0x72A77447, 0x73A67248, -0x7CA57C46, 0x76A67A47, 0x76A67447, 0x76A77846, 0x7DA67A45, 0x72A57148, 0x7BA67546, 0x77A67747, -0x75A57C47, 0x7AA67048, 0x71A67A47, 0x77A67B46, 0x77A57D47, 0x7CA57647, 0x6FA67847, 0x75A67048, -0x7BA67B47, 0x78A67747, 0x7AA67D46, 0x7CA67646, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, -0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x87A9863A, 0x85A8843B, 0x83A7823C, 0x81A77F3E, -0x7FA67D3F, 0x7CA57B40, 0x7BA57A41, 0x7AA57941, 0x78A47842, 0x77A47742, 0x77A47743, 0x77A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, -0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47743, 0x77A47743, 0x77A47742, -0x78A47842, 0x79A57A41, 0x7AA57B41, 0x7BA57C40, 0x7DA67F3F, 0x7FA7813E, 0x82A7833C, 0x84A8853B, -0x86A9873A, 0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937863, 0x80A57D46, 0x75A67746, 0x79A67846, 0x74A67846, 0x76A77547, 0x77A57F47, 0x78A67C46, -0x7AA77B45, 0x7BA67B46, 0x78A67847, 0x79A77346, 0x72A77147, 0x6FA87047, 0x75A77547, 0x75A77247, -0x6FA77547, 0x7DA57D46, 0x79A77346, 0x71A77346, 0x7AA77846, 0x7BA67A45, 0x7CA77946, 0x76A57448, -0x77A87A45, 0x79A77547, 0x7AA77646, 0x76A87446, 0x79A67E45, 0x79A77847, 0x75A87146, 0x75A67248, -0x7AA67847, 0x76A67348, 0x72A76F48, 0x75A87545, 0x77A77B45, 0x78A67C46, 0x7FA68045, 0x7BA57348, -0x78A57C46, 0x7DA67E45, 0x79A67D46, 0x72A77347, 0x74A57848, 0x75A66F48, 0x72A77547, 0x71A67249, -0x7AA67E47, 0x77A67A46, 0x76A67547, 0x77A77546, 0x7FA67A44, 0x75A67148, 0x7CA67746, 0x76A67747, -0x74A57A46, 0x7EA67047, 0x71A67A47, 0x79A67746, 0x77A67B47, 0x7BA57947, 0x6EA67947, 0x76A67048, -0x77A67C46, 0x79A67D46, 0x7AA67E45, 0x78A77846, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00967269, 0x78A98051, 0x75A87054, 0x74A67955, 0x81A68352, 0x7FA87951, 0x77A97451, 0x77A87053, +0x71A77555, 0x79A77A53, 0x78A87753, 0x70A96D54, 0x68A86857, 0x6CA76C55, 0x6EA86F54, 0x6DA96A54, +0x60AA5C57, 0x69AB7752, 0x7BA97651, 0x6FA96D54, 0x6CAD6851, 0x66AE6751, 0x62AB6054, 0x5DAA5758, +0x56AA5C58, 0x62A7615A, 0x66A96C56, 0x6FAC6752, 0x64AC6553, 0x67AE6551, 0x65AE6450, 0x5FAB6354, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, -0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x87A9863A, 0x86A8853B, 0x83A8823C, 0x81A7803D, -0x7FA67E3E, 0x7DA67C40, 0x7BA57B40, 0x7AA57A41, 0x79A57941, 0x78A47842, 0x78A57842, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, -0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x78A57842, 0x78A47842, -0x79A57941, 0x7AA57A41, 0x7BA57B40, 0x7CA67D40, 0x7EA67F3E, 0x80A7813D, 0x82A8833C, 0x85A8863B, -0x86A9873A, 0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937B63, 0x7EA67B45, 0x74A77A47, 0x7AA77746, 0x73A77846, 0x75A77547, 0x79A57D47, 0x76A77C46, -0x7CA77945, 0x7CA77546, 0x7CA57B46, 0x74A77147, 0x6FA77147, 0x78A67F45, 0x7FA67C45, 0x7BA77945, -0x75A77346, 0x79A67F46, 0x7CA67546, 0x70A97046, 0x77A67D46, 0x7AA67C45, 0x7AA77D45, 0x78A67747, -0x73A67A47, 0x79A77646, 0x79A67A46, 0x77A77546, 0x75A77F45, 0x79A77C46, 0x74A77346, 0x72A67048, -0x81A57746, 0x74A67348, 0x72A77048, 0x73A77646, 0x75A77C45, 0x79A67A46, 0x81A68045, 0x7DA57447, -0x77A57C47, 0x7DA67F45, 0x7AA67D46, 0x76A77247, 0x75A57948, 0x77A66F48, 0x71A77547, 0x72A67448, -0x76A57F47, 0x79A67947, 0x77A77746, 0x76A77446, 0x80A77C44, 0x76A67247, 0x7AA67A45, 0x77A67847, -0x75A67B46, 0x80A67346, 0x72A67748, 0x79A77845, 0x7BA57A46, 0x7BA57A47, 0x6FA77647, 0x77A67148, -0x70A67B47, 0x7BA67946, 0x7BA67B46, 0x74A77646, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, -0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x89A98839, 0x88A9863A, 0x86A8853A, 0x84A8833B, 0x82A7813D, -0x80A77F3E, 0x7EA67D3F, 0x7DA57B3F, 0x7BA57B40, 0x7AA57A41, 0x7AA57941, 0x79A57941, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, -0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x78A47842, 0x79A57941, 0x79A57A41, -0x7AA57A41, 0x7BA57B40, 0x7BA57D3F, 0x7DA67E3F, 0x7FA7803E, 0x81A7823D, 0x83A8843B, 0x85A8863A, -0x86A9883A, 0x88A98939, 0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937F62, 0x7DA77945, 0x75A67B47, 0x7AA77646, 0x75A77746, 0x76A77846, 0x7BA57947, 0x78A77B45, -0x7BA77946, 0x79A67946, 0x7BA67846, 0x73A77446, 0x75A67D46, 0x80A67D45, 0x7BA77B45, 0x7BA67B45, -0x78A77246, 0x76A67B47, 0x7FA67746, 0x72A97046, 0x74A77D46, 0x7AA67B45, 0x7AA77C45, 0x7BA67846, -0x74A67547, 0x7BA77845, 0x78A67D46, 0x78A77845, 0x74A87D45, 0x7DA67C46, 0x77A77246, 0x71A77147, -0x80A57747, 0x71A77348, 0x71A77348, 0x6FA77747, 0x76A87845, 0x7BA67646, 0x7FA78045, 0x7EA67647, -0x75A67B47, 0x7DA68045, 0x7CA57F46, 0x79A77247, 0x76A67846, 0x7AA57248, 0x73A77546, 0x74A67748, -0x74A67F47, 0x7BA67847, 0x78A77747, 0x75A77546, 0x7EA67F44, 0x78A67347, 0x7AA67C45, 0x79A67747, -0x75A77A46, 0x81A57447, 0x71A67647, 0x7AA77A46, 0x7DA67946, 0x7CA57C47, 0x72A77347, 0x76A67946, -0x73A67447, 0x75A67647, 0x78A67647, 0x79A67745, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, -0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9873A, 0x86A9863A, 0x85A8833B, 0x82A7823C, -0x81A77F3E, 0x7FA67F3E, 0x7DA67D3F, 0x7CA57B40, 0x7BA57B40, 0x7BA57B41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, -0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7BA57B41, -0x7BA57B40, 0x7BA57C40, 0x7DA67D3F, 0x7FA67F3E, 0x7FA7813E, 0x82A7823C, 0x83A8853B, 0x86A9863A, -0x87A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00928262, 0x7CA77845, 0x75A67C46, 0x78A77646, 0x76A77546, 0x77A77846, 0x7EA67747, 0x7AA77A45, -0x7AA77946, 0x79A67D46, 0x7BA77746, 0x78A77946, 0x7FA67E45, 0x7BA87844, 0x76A87646, 0x76A77B46, -0x7CA77646, 0x74A77A46, 0x7FA67D45, 0x73A87246, 0x72A77B46, 0x7CA67B45, 0x7CA77B45, 0x7CA77646, -0x77A67247, 0x7BA87C45, 0x75A77E46, 0x7AA77945, 0x75A87A45, 0x7DA67E46, 0x79A77446, 0x6FA77646, -0x7CA47B47, 0x73A67547, 0x75A77347, 0x71A77147, 0x75A87745, 0x7CA77746, 0x7AA78045, 0x7FA57A46, -0x75A67B47, 0x7CA78045, 0x7FA68045, 0x7CA77146, 0x78A67846, 0x7CA57547, 0x74A77447, 0x75A67847, -0x75A67F47, 0x7FA67846, 0x78A77847, 0x75A87646, 0x7AA77F45, 0x7AA67347, 0x79A77E45, 0x7AA67A46, -0x76A77946, 0x80A57846, 0x72A77448, 0x7CA77946, 0x7BA67A45, 0x7DA57E47, 0x75A77246, 0x78A77D45, -0x76A77247, 0x75A77847, 0x77A77447, 0x79A67846, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, -0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9883A, 0x86A9863A, 0x85A8853B, 0x83A8823C, -0x82A7813D, 0x80A77F3E, 0x7FA67E3F, 0x7DA67D3F, 0x7DA67C3F, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, -0x7CA67D3F, 0x7DA67D3F, 0x7EA67F3F, 0x7FA7803E, 0x81A7823D, 0x82A8833C, 0x85A8853B, 0x86A9863A, -0x88A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00938162, 0x7AA77845, 0x7AA67D46, 0x77A87646, 0x77A77447, 0x76A77746, 0x7FA67846, 0x7BA87C44, -0x7AA87A45, 0x79A67C46, 0x7AA77946, 0x79A77946, 0x7BA77D44, 0x7EA77C45, 0x7CA77A46, 0x75A77746, -0x7AA77A45, 0x73A77A46, 0x7EA77F45, 0x74A87446, 0x73A77846, 0x7DA67B46, 0x7DA77A45, 0x7BA77845, -0x79A67347, 0x7BA77D45, 0x76A77D45, 0x7DA77845, 0x7AA87944, 0x7BA77D45, 0x7BA87645, 0x70A77547, -0x85A47B46, 0x75A67648, 0x71A77647, 0x74A76F48, 0x75A87745, 0x7AA77A45, 0x76A78046, 0x7FA67B46, -0x77A57C47, 0x7BA67F44, 0x81A67F46, 0x7FA77346, 0x77A67746, 0x7FA57747, 0x75A77546, 0x77A67946, -0x77A67F47, 0x80A67846, 0x7AA67946, 0x75A87745, 0x78A78145, 0x7BA67646, 0x78A77D45, 0x79A77C45, -0x78A77A45, 0x81A57C46, 0x75A77447, 0x7BA67945, 0x7BA77B46, 0x7AA57E47, 0x79A77147, 0x77A77846, -0x7CA67546, 0x72A77247, 0x77A67B46, 0x78A77446, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, -0x8CAB8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x87A9863A, 0x86A8853B, 0x84A8833B, -0x82A7823C, 0x81A7803D, 0x7FA77F3E, 0x7FA67F3F, 0x7EA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, -0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, 0x7CA67D3F, 0x7DA67D3F, 0x7DA67D3F, -0x7DA67E3F, 0x7FA67F3F, 0x7FA77F3E, 0x80A7813D, 0x82A7823C, 0x83A8843B, 0x85A8863B, 0x86A9873A, -0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8BAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937F62, 0x7AA77746, 0x7CA77B46, 0x78A87645, 0x75A77347, 0x76A77946, 0x7FA67A46, 0x79A87C44, -0x7CA87A45, 0x79A77946, 0x78A87A45, 0x78A67E46, 0x7BA87E45, 0x79A67947, 0x78A77A47, 0x77A87446, -0x7AA77C45, 0x76A87746, 0x7EA77F45, 0x75A87246, 0x73A87546, 0x7DA77A45, 0x7BA77B45, 0x7AA87A45, -0x7AA67447, 0x77A87D45, 0x75A77E46, 0x7FA67B45, 0x7DA87844, 0x7CA77B46, 0x7DA87845, 0x71A87347, -0x80A78244, 0x83A57E46, 0x7DA57647, 0x78A77446, 0x71A87846, 0x77A77D45, 0x75A77E46, 0x80A67E45, -0x78A67C47, 0x7DA67E45, 0x81A67E45, 0x82A77645, 0x77A77746, 0x7EA67847, 0x77A77746, 0x76A67B46, -0x77A67F46, 0x80A67946, 0x7AA77646, 0x73A77946, 0x78A68045, 0x7CA77746, 0x78A67B45, 0x7DA77B44, -0x79A77845, 0x7FA58145, 0x76A77547, 0x7CA67B45, 0x79A77C45, 0x78A67B47, 0x7EA67346, 0x76A87645, -0x7BA77A46, 0x7AA77B45, 0x79A77746, 0x76A77D45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6EAD734F, 0x76AC7350, 0x6CA86057, 0x61A6705A, 0x80A57856, 0x6AA96356, 0x5EAC6A54, 0x55AA545A, +0x8AA8864F, 0x6AAB7A51, 0x78A96E53, 0x7AA67755, 0x71AC6B51, 0x69AC7650, 0x82AD6350, 0x68A87D55, +0x71A86955, 0x57A96D57, 0x7DA9804F, 0x84A87D50, 0x7EA97850, 0x7AAA7950, 0x79AA7650, 0x76A87853, +0x83A97253, 0x67A77C55, 0x78A67955, 0x77A57A57, 0x78AA7C52, 0x71A77554, 0x71AA6C54, 0x75A87156, +0x74A87854, 0x7CA77753, 0x83A87A52, 0x6DA97553, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, -0x8CAB8C38, 0x8CAA8C38, 0x8BAA8A38, 0x8AAA8A38, 0x89A98839, 0x88A9873A, 0x86A9863A, 0x85A8843B, -0x83A8833C, 0x82A7823C, 0x81A7813D, 0x80A77F3E, 0x7FA77F3E, 0x7FA67F3F, 0x7FA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, -0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67F3F, 0x7FA67F3F, -0x7FA77F3E, 0x7FA7803E, 0x81A7813D, 0x82A7823C, 0x83A8833C, 0x84A8853B, 0x86A9863A, 0x87A9883A, -0x88A98939, 0x8AAA8A38, 0x8AAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937C63, 0x7AA77646, 0x7CA67A46, 0x79A87445, 0x76A87246, 0x76A77946, 0x7EA67B45, 0x7BA87B44, -0x7EA87A45, 0x78A77946, 0x78A87D44, 0x78A87C45, 0x7CA77B46, 0x78A67947, 0x7DA67846, 0x7BA77446, -0x78A77B46, 0x76A77646, 0x81A77F45, 0x78A87146, 0x74A87346, 0x7CA77A46, 0x7AA87A45, 0x7AA87A45, -0x7AA67447, 0x76A87C45, 0x74A87C46, 0x80A77A45, 0x80A87844, 0x7CA77B45, 0x7FA87844, 0x73A87146, -0x82A78344, 0x80A78244, 0x85A57F45, 0x7AA67747, 0x78A77347, 0x76A87D44, 0x7AA77A46, 0x7FA77F45, -0x77A67C47, 0x7EA67E45, 0x81A77E45, 0x83A67945, 0x78A77746, 0x7FA67A46, 0x79A67946, 0x76A77947, -0x77A67F46, 0x7FA67A46, 0x7BA77746, 0x74A87845, 0x78A77D45, 0x7FA77846, 0x77A77946, 0x7EA77A44, -0x7AA87845, 0x7CA68145, 0x78A77447, 0x7AA77E46, 0x7BA77B45, 0x78A67946, 0x80A67546, 0x76A87745, -0x77A77A46, 0x78A87646, 0x76A87746, 0x74A87C45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, -0x8CAB8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8939, 0x88A9883A, 0x87A9863A, 0x86A8853B, -0x85A8843B, 0x83A8833C, 0x82A7823C, 0x81A7813D, 0x81A7813E, 0x80A7803E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A7803E, -0x81A7813E, 0x81A7813D, 0x82A7823C, 0x83A8833C, 0x84A8853B, 0x85A8863B, 0x86A9873A, 0x88A9883A, -0x89AA8A39, 0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947863, 0x7AA77746, 0x7EA77945, 0x7AA87545, 0x77A87445, 0x76A77C46, 0x7AA77A46, 0x7BA87C44, -0x7EA87944, 0x78A77946, 0x79A87944, 0x7CA77B45, 0x7DA77846, 0x7CA87B45, 0x7BA77C46, 0x7CA77846, -0x79A77A46, 0x77A87646, 0x82A78045, 0x7AA87245, 0x74A87246, 0x7AA77B46, 0x7AA87745, 0x77A87A45, -0x7BA67747, 0x76A87D45, 0x75A77C46, 0x82A67C45, 0x81A87744, 0x7DA77946, 0x81A87A44, 0x74A87046, -0x79A77E45, 0x7CA77F45, 0x7FA77F45, 0x83A57D46, 0x7AA77946, 0x77A87844, 0x80A67746, 0x80A77D45, -0x7AA67B46, 0x80A67D45, 0x7FA77C45, 0x84A67D45, 0x78A87646, 0x7FA67C46, 0x79A67B46, 0x78A77846, -0x77A77F46, 0x7FA67D46, 0x7BA77845, 0x75A87845, 0x79A77A46, 0x83A67A45, 0x77A77746, 0x7FA77B44, -0x7CA77745, 0x7BA67F45, 0x7AA77546, 0x78A67E46, 0x7DA77A45, 0x7AA67A46, 0x7DA67A46, 0x77A77746, -0x79A87945, 0x7AA87B44, 0x7BA87845, 0x7AA87845, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x89A98839, 0x88A9873A, 0x86A9863A, -0x86A8853B, 0x85A8843B, 0x83A8833C, 0x83A8823C, 0x82A7823C, 0x82A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, -0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7823D, -0x82A7823C, 0x82A8833C, 0x83A8833C, 0x84A8853B, 0x85A8863B, 0x86A9863A, 0x87A9883A, 0x88A98939, -0x8AAA8A38, 0x8AAA8A38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937963, 0x78A77946, 0x7EA77945, 0x78A87645, 0x77A87545, 0x77A77C46, 0x7CA77C45, 0x7CA87C45, -0x7EA77945, 0x79A77845, 0x7BA87A44, 0x7EA87A45, 0x78A77B45, 0x7CA77F45, 0x7BA67E46, 0x79A87C45, -0x7AA77E46, 0x76A87446, 0x83A78144, 0x7BA87445, 0x75A87146, 0x7AA77E45, 0x77A87845, 0x7AA87B45, -0x7CA67A47, 0x75A87F44, 0x76A77E45, 0x84A67C45, 0x82A87844, 0x7CA77946, 0x80A87C44, 0x77A87046, -0x71A67348, 0x7AA77846, 0x7BA67F46, 0x7EA68345, 0x7AA77846, 0x77A87945, 0x7DA77A45, 0x7FA77D45, -0x7DA67A46, 0x80A67F45, 0x7DA87A45, 0x83A67F45, 0x79A87845, 0x7CA67F45, 0x7AA77B46, 0x78A77846, -0x78A77D46, 0x7EA67D46, 0x78A77945, 0x76A87545, 0x7AA87845, 0x85A67B45, 0x77A67846, 0x7FA87E44, -0x7DA77746, 0x79A77D45, 0x7DA77746, 0x76A77D47, 0x7FA77944, 0x7DA77946, 0x7CA67E46, 0x78A77846, -0x77A87A44, 0x7CA87B44, 0x78A87944, 0x76A87545, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8939, 0x88A9883A, 0x87A9863A, -0x86A9863A, 0x85A8853B, 0x85A8843B, 0x84A8833B, 0x83A8833C, 0x83A8833C, 0x83A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, -0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8823C, 0x82A8833C, 0x83A8833C, -0x83A8833C, 0x83A8843B, 0x84A8853B, 0x85A8853B, 0x86A9863A, 0x86A9873A, 0x88A9883A, 0x89AA8A39, -0x8AAA8A38, 0x8AAA8B38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937B63, 0x78A77C46, 0x7EA87B45, 0x78A97445, 0x77A97645, 0x79A77A46, 0x7DA87A45, 0x7CA87E45, -0x80A77845, 0x77A77A46, 0x7EA87944, 0x7CA77D45, 0x7AA87845, 0x7DA77A46, 0x7CA77A45, 0x77A87E45, -0x7CA77F45, 0x78A87445, 0x80A78045, 0x7CA97645, 0x75A87246, 0x7AA87F45, 0x78A97944, 0x7BA87B44, -0x7DA67B47, 0x74A88044, 0x78A77F46, 0x84A67C45, 0x83A87844, 0x7DA77945, 0x80A87F44, 0x79A96F46, -0x75A66E48, 0x71A67747, 0x7AA77746, 0x78A77F46, 0x81A67845, 0x79A87844, 0x7AA87C44, 0x7CA77F45, -0x7BA77A46, 0x7FA77F44, 0x7DA77A45, 0x82A68145, 0x7CA87845, 0x7AA77F45, 0x7AA67B46, 0x78A77846, -0x79A77C46, 0x7FA77F45, 0x78A77945, 0x77A87346, 0x7AA87745, 0x85A77D44, 0x79A67846, 0x7DA88144, -0x7EA77946, 0x7AA77A46, 0x7FA77B45, 0x74A77A47, 0x7FA77D44, 0x7AA77C46, 0x7CA67E46, 0x73A77947, -0x79A97844, 0x76A97744, 0x79A97845, 0x75A77A45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x89A98839, 0x88A9873A, -0x87A9863A, 0x86A9863A, 0x86A8853B, 0x85A8853B, 0x85A8853B, 0x84A8843B, 0x84A8843B, 0x84A8843B, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, -0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x84A8843B, 0x84A8843B, 0x84A8843B, -0x85A8853B, 0x85A8853B, 0x85A8863B, 0x86A9863A, 0x86A9873A, 0x87A9883A, 0x88A98939, 0x8AAA8A38, -0x8AAA8A38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937D63, 0x78A77E45, 0x7CA97B44, 0x76A97545, 0x75A97A45, 0x79A77A46, 0x7EA87745, 0x79A88144, -0x7FA87645, 0x7AA87A45, 0x7DA87A44, 0x7CA87945, 0x78A87E45, 0x7BA87845, 0x7BA77A45, 0x77A87C44, -0x7DA78045, 0x79A87645, 0x80A87E44, 0x7DA87744, 0x76A87246, 0x7AA88045, 0x79A87B44, 0x7DA77D44, -0x7CA67B47, 0x72A88045, 0x79A77E45, 0x82A77C45, 0x83A87744, 0x7DA77A45, 0x80A88044, 0x7AA87045, -0x6DA86C48, 0x6DA77947, 0x79A77846, 0x78A77F45, 0x7CA57947, 0x79A87B45, 0x78A87C44, 0x76A88245, -0x7AA77A46, 0x7DA78045, 0x7BA77B45, 0x81A68145, 0x7EA87A45, 0x7AA78045, 0x79A67B46, 0x77A87746, -0x7CA77A46, 0x7FA68245, 0x79A77C45, 0x7AA87346, 0x7AA87745, 0x83A68145, 0x7AA77A47, 0x7AA88244, -0x7CA77C45, 0x7AA87945, 0x7EA67D45, 0x76A77A47, 0x7DA77F44, 0x7AA77F45, 0x7BA77C46, 0x7DA77846, -0x7BA77B45, 0x7AA97945, 0x77A97644, 0x76A87B45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8C37, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8939, 0x89A98839, -0x88A9873A, 0x87A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, -0x86A9863B, 0x86A9863A, 0x86A9863A, 0x86A9873A, 0x87A9883A, 0x88A98939, 0x89AA8A39, 0x8AAA8A38, -0x8AAA8B38, 0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937D63, 0x78A78045, 0x7CA97A44, 0x73A97646, 0x76A97C45, 0x7BA77946, 0x7DA87745, 0x7AA88244, -0x7DA87745, 0x7CA87A44, 0x7DA87C44, 0x7BA87C44, 0x77A87D44, 0x78A87E45, 0x78A87B45, 0x79A87A45, -0x7AA78045, 0x7AA87545, 0x7FA87D44, 0x7DA97644, 0x74A87346, 0x7BA88144, 0x7AA87B44, 0x7CA87D44, -0x7CA67A47, 0x71A87F45, 0x79A77D45, 0x80A77C45, 0x83A87844, 0x7FA77C45, 0x7FA88044, 0x7CA97345, -0x6CA77348, 0x76A77646, 0x77A77846, 0x7CA68046, 0x76A67748, 0x7BA87B44, 0x7CA87A44, 0x73A88245, -0x7AA77C46, 0x7EA68345, 0x7CA77E45, 0x80A68145, 0x80A87C45, 0x7AA77F45, 0x7AA67E46, 0x79A87845, -0x80A77946, 0x7EA78045, 0x7BA87D44, 0x7DA77345, 0x78A87B45, 0x7EA68644, 0x7CA67C45, 0x7BA78244, -0x7CA77D45, 0x7BA77C45, 0x7AA68145, 0x78A77946, 0x7DA78045, 0x7FA77D45, 0x7EA77946, 0x7FA77547, -0x76A87C45, 0x7BA87745, 0x77A87C45, 0x7EA87745, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00956D69, 0x6FAA7452, 0x79AC754F, 0x6DAD7251, 0x76A87653, 0x70A96E54, 0x6DA96555, 0x65A96556, +0x68A96855, 0x6AA96556, 0x64A86B56, 0x69AA6855, 0x6CA97055, 0x70AB7153, 0x73A97B52, 0x79A77F52, +0x7EA77652, 0x72AB6C51, 0x62AE5753, 0x55AE5655, 0x55AA5559, 0x58AA5859, 0x5DA86459, 0x6AA77156, +0x6FAC6A51, 0x68AD7251, 0x76AC774F, 0x6FAE6750, 0x62AD5D53, 0x5EAC5F55, 0x64AD6852, 0x71AD7450, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8C37, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8939, -0x88A9883A, 0x88A9883A, 0x87A9873A, 0x87A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, -0x86A9863A, 0x86A9873A, 0x87A9873A, 0x88A9883A, 0x88A9883A, 0x89AA8A39, 0x8AAA8A38, 0x8AAA8A38, -0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947A62, 0x7AA87F45, 0x7CA97944, 0x70A87946, 0x77A97C44, 0x7CA77B46, 0x79A87845, 0x7DA98243, -0x7CA87545, 0x7EA87E44, 0x7BA97C44, 0x7DA87B44, 0x78A87F45, 0x83A78444, 0x77A87C45, 0x76A87B45, -0x78A87F45, 0x7AA87645, 0x7EA87F43, 0x7DA97644, 0x72A97446, 0x7CA87E44, 0x7CA87D44, 0x7CA87C45, -0x7BA67B47, 0x71A98045, 0x79A77C46, 0x7FA77C46, 0x85A87843, 0x80A77D45, 0x7EA88144, 0x7CA97545, -0x75A77547, 0x7DA77D46, 0x7FA67F46, 0x7BA57648, 0x75A67A47, 0x7DA87A44, 0x7EA77B45, 0x74A88045, -0x79A77D45, 0x7FA78644, 0x7AA87E45, 0x7DA68345, 0x7FA87E44, 0x7BA87D44, 0x7CA67E46, 0x7AA87945, -0x7FA77B46, 0x7DA78045, 0x7EA87E44, 0x7EA77845, 0x75A87B45, 0x78A78845, 0x7DA77E45, 0x7EA88044, -0x7EA87E45, 0x7EA68045, 0x78A77F45, 0x7BA77746, 0x7DA77F45, 0x82A77B44, 0x7FA87C44, 0x7CA77E46, -0x78A87547, 0x7AA77F45, 0x83A78144, 0x7BA77846, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8939, 0x89A98839, 0x88A9883A, 0x88A9883A, 0x88A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, -0x87A9883A, 0x88A9883A, 0x88A9883A, 0x88A98939, 0x89AA8A39, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8B38, -0x8BAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947862, 0x7CA77E45, 0x7CA97744, 0x71A97A46, 0x78A97B44, 0x7CA77E45, 0x76A97845, 0x81A98342, -0x77A87545, 0x7FA87F43, 0x7CA97B44, 0x7DA87A44, 0x7EA88144, 0x7FA88643, 0x7BA87A45, 0x75A97A45, -0x78A87E45, 0x7BA87645, 0x7FA88043, 0x7DA97545, 0x72A87646, 0x7CA87F44, 0x7AA87D44, 0x7CA87A45, -0x7CA77C46, 0x73A88045, 0x7AA87C46, 0x7EA77D46, 0x87A87843, 0x80A77E45, 0x81A88343, 0x7CA87845, -0x73A77149, 0x72A67348, 0x73A67447, 0x75A77846, 0x7AA77A45, 0x79A97E44, 0x7DA77946, 0x76A87E45, -0x79A87D45, 0x81A68843, 0x79A78244, 0x7AA78345, 0x81A88144, 0x7DA87E44, 0x7DA67B46, 0x7DA87845, -0x81A77C45, 0x7BA77F45, 0x81A87B44, 0x7DA87B45, 0x74A87C45, 0x77A78445, 0x80A77D44, 0x7EA77F45, -0x82A87C44, 0x81A77E45, 0x7DA77C45, 0x7FA77845, 0x7AA77F46, 0x81A78044, 0x7AA88144, 0x7BA77B45, -0x7DA77A46, 0x77A87A46, 0x7BA87845, 0x78A77F46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A39, 0x89AA8939, 0x89A98839, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, -0x88A9883A, 0x88A98939, 0x89AA8939, 0x8AAA8A39, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8BAA8B38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947C62, 0x7DA87E44, 0x7CA97545, 0x71A97845, 0x7BA97C44, 0x7CA78046, 0x75A97846, 0x82A98342, -0x77A87545, 0x7EA88043, 0x7CA97A44, 0x7BA97845, 0x7DA78145, 0x7FA88344, 0x78A87E45, 0x74A97745, -0x78A87E45, 0x7AA87944, 0x7FA87F44, 0x7EA97244, 0x73A87746, 0x7DA87E44, 0x7AA97C44, 0x7EA87C45, -0x7DA67D46, 0x75A98044, 0x7DA77D46, 0x7AA87D45, 0x86A97643, 0x7FA77E45, 0x81A88143, 0x7EA97B44, -0x7AA87A45, 0x79A87845, 0x78A97745, 0x78A97944, 0x7BA97B43, 0x7EA87E43, 0x78A87A46, 0x78A97C44, -0x78A87D46, 0x82A78743, 0x7AA88243, 0x7BA78545, 0x81A78244, 0x7FA87D44, 0x7FA67B46, 0x80A77A45, -0x80A77D45, 0x79A77E46, 0x80A87F44, 0x80A77D44, 0x74A97A44, 0x79A87A45, 0x84A77C45, 0x7DA78045, -0x81A87D43, 0x81A77F44, 0x7DA87A45, 0x81A77F44, 0x7BA67C46, 0x7FA77F45, 0x7CA87945, 0x7FA97A44, -0x78A87C45, 0x7AA97745, 0x78A77A46, 0x82A88343, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8B38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, 0x89AA8939, -0x89AA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8BAA8B38, 0x8BAA8C38, -0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947D62, 0x80A88243, 0x7AA97645, 0x75AA7645, 0x7DA97C43, 0x7CA77D45, 0x74A97846, 0x83A98342, -0x76A87645, 0x7EA88143, 0x7BAA7944, 0x7BA87944, 0x80A88044, 0x7FA87B45, 0x7DA87645, 0x77A97545, -0x78A98044, 0x78A87E45, 0x7DA88144, 0x7CA97245, 0x72A87946, 0x7FA87C44, 0x78A87E44, 0x7EA87B45, -0x7CA87A45, 0x78A98044, 0x80A77D45, 0x79A88045, 0x82A97743, 0x80A77E45, 0x81A88144, 0x7EA97B43, -0x7BA97C43, 0x7BA97B43, 0x7AA97944, 0x79A97A44, 0x7BA87B44, 0x7BA77B46, 0x7EA87A45, 0x78A87C44, -0x7AA77D45, 0x82A78643, 0x7BA88243, 0x7AA78844, 0x81A88344, 0x82A87D44, 0x7EA77E45, 0x81A77C44, -0x7EA78045, 0x7AA77D46, 0x7EA88144, 0x80A87E43, 0x79A87944, 0x7EA87446, 0x82A77E44, 0x7EA77F45, -0x80A88143, 0x7CA87F44, 0x7CA77D45, 0x7DA78245, 0x7CA77C45, 0x7FA78245, 0x82A77C44, 0x7DA87F44, -0x7FA87D44, 0x7DA87E45, 0x82A88343, 0x81A87D43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x87AC854A, 0x85AA844E, 0x8AA9864F, 0x81AB7C4F, 0x71AA6355, 0x68A67558, 0x69AA6855, 0x67AC6255, +0x48AA7B57, 0x87AB6E4F, 0x75AA7552, 0x6DA88753, 0x7AA96B54, 0x6FAB7351, 0x7BAD6950, 0x60A87956, +0x71A95C55, 0x68A98652, 0x84A97252, 0x5CAD5A56, 0x60AD6255, 0x64A97157, 0x77AA7053, 0x6DAA7D52, +0x81A87852, 0x7AA97952, 0x6BA87655, 0x7CA67C53, 0x86A57455, 0x69A97C54, 0x7EA77654, 0x6BA97256, +0x71A77C56, 0x70A97554, 0x6BA77F55, 0x7FAA7351, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8B38, 0x8BAA8B38, -0x8BAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, -0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8B38, 0x8BAA8B38, 0x8BAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947F62, 0x80A88344, 0x77A97445, 0x77AA7445, 0x81A97B43, 0x7CA77E46, 0x74A97A45, 0x82A98442, -0x77A97645, 0x7DA88044, 0x7BAA7644, 0x78A87A45, 0x7DA87E44, 0x7FA87D44, 0x7FA87045, 0x76A97944, -0x79A88244, 0x78A88144, 0x7BA98443, 0x77AA7346, 0x74A87D45, 0x7EA97B44, 0x79A97C45, 0x7EA77A46, -0x7CA87545, 0x7EA97F43, 0x82A77B46, 0x77A88144, 0x81A97A43, 0x80A87C45, 0x80A98144, 0x7DA97C44, -0x7CA77E45, 0x80A77F45, 0x7FA77E45, 0x7FA87F45, 0x7FA87F45, 0x7CA87A45, 0x79A87645, 0x7AA97D44, -0x7AA77F45, 0x83A78643, 0x7CA88344, 0x78A78845, 0x80A78445, 0x83A87E44, 0x7EA78045, 0x7FA78245, -0x7EA78345, 0x7AA87F45, 0x7DA87F44, 0x7EA87F43, 0x7CA97744, 0x7DA87944, 0x76A78345, 0x7FA77E45, -0x80A88344, 0x7FA97F43, 0x81A77C45, 0x7DA77946, 0x82A77D44, 0x7CA78045, 0x87A78144, 0x7EA87944, -0x7BA77D45, 0x7EA97E43, 0x7DA97B44, 0x7CA77C45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, -0x8AAA8A38, 0x8AAA8A38, 0x8AAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948262, 0x83A98143, 0x78A97546, 0x7AA97344, 0x84A97A43, 0x7DA88045, 0x74A97E44, 0x82A98442, -0x7BA87445, 0x7EA98143, 0x7CAA7744, 0x74A97445, 0x78A97C44, 0x7BA97645, 0x70A97546, 0x78A97844, -0x7DA87C44, 0x7EA88144, 0x7DA98243, 0x75A97446, 0x79A97D44, 0x7EA97A44, 0x78A97D45, 0x7BA77846, -0x7DA87645, 0x82A98342, 0x80A87946, 0x78A88644, 0x7EA97A43, 0x80A77B45, 0x7EA98343, 0x7CA87D44, -0x73A77548, 0x79A67847, 0x79A77846, 0x79A87A46, 0x7AA87A46, 0x78A87846, 0x79A97945, 0x7BA87C44, -0x80A78344, 0x83A78443, 0x7DA88144, 0x7DA78844, 0x7FA78645, 0x84A88143, 0x7DA77F45, 0x7CA78445, -0x7FA78444, 0x7FA87D45, 0x7DA87A45, 0x80A87D43, 0x7DA87845, 0x7CA97E44, 0x76A78045, 0x7FA77E45, -0x7FA78344, 0x83A97F43, 0x80A88044, 0x7BA77A46, 0x79A78245, 0x7FA77C45, 0x80A78544, 0x81A88044, -0x7AA87845, 0x7AA87845, 0x7BA77E45, 0x7AA87944, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, -0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948362, 0x82A97F43, 0x79A97645, 0x7CAA7444, 0x82A97844, 0x7DA88245, 0x77A97B45, 0x81AA8242, -0x7EA87445, 0x7BA98443, 0x7DAA7D43, 0x79AA7644, 0x71A96F47, 0x6FA97146, 0x76AA7A44, 0x79A97A44, -0x80A97A44, 0x83A87C44, 0x84A97943, 0x75A87846, 0x7BA97F44, 0x7BA97944, 0x7AA87F45, 0x7AA87B46, -0x78A97A44, 0x83A88543, 0x7EA87746, 0x7DA88643, 0x7DA98043, 0x81A77B45, 0x7DA98243, 0x7BA87F45, -0x79A97945, 0x7BA97D44, 0x7AA97C45, 0x7DA87E45, 0x7EA87D45, 0x7BA97C45, 0x7BA87E44, 0x82A78544, -0x84A88343, 0x87A88043, 0x7DA88344, 0x81A78944, 0x81A78544, 0x84A88643, 0x7CA87D44, 0x7CA68745, -0x81A78144, 0x83A77945, 0x7EA87B45, 0x7EA97F43, 0x7EA87D43, 0x78A97E44, 0x7EA87445, 0x80A77D45, -0x81A78344, 0x84A88343, 0x80A98143, 0x7FA87945, 0x7DA77846, 0x7FA88044, 0x7EA87E45, 0x85A78544, -0x82A88243, 0x80A87F44, 0x7DA87B44, 0x7AA97F44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948262, 0x80A97D43, 0x7AA97645, 0x7EA97844, 0x81AA7644, 0x7AA88245, 0x7AA87A45, 0x80AA8042, -0x81A87645, 0x79A98443, 0x80A97D43, 0x7EAA7E43, 0x7BAA7B43, 0x7CAB7D43, 0x7CAA7943, 0x79A98044, -0x79A98344, 0x7EA97E44, 0x7FAA7644, 0x77A97945, 0x7DA97C44, 0x7BA97A44, 0x80A87A45, 0x7AA87D45, -0x73A98044, 0x84A88144, 0x79A97845, 0x82A98542, 0x7EA98343, 0x7DA77A46, 0x7DAA8143, 0x7BA87F45, -0x7EA97E43, 0x7FA98143, 0x81A98143, 0x7FA97E43, 0x7DA97B43, 0x7EA98043, 0x81A88343, 0x82A88143, -0x84A78943, 0x86A87E43, 0x7EA88644, 0x84A68644, 0x82A78244, 0x83A88643, 0x7FA87D44, 0x7EA77F45, -0x87A78044, 0x83A77E45, 0x7CA87E45, 0x7AA98244, 0x7FA97F43, 0x79A97A44, 0x82A87D44, 0x74A87F46, -0x7DA88243, 0x81A78544, 0x83A88143, 0x81A87F43, 0x79A87E45, 0x7AA77B46, 0x81A88243, 0x7CA88045, -0x86A88644, 0x84A88243, 0x7FA97D43, 0x82A98143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8C37, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, -0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAA8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948361, 0x81A97D43, 0x7AA97844, 0x81AA7943, 0x81AA7543, 0x78A88245, 0x7EA87C44, 0x82AA8242, -0x82A97843, 0x75A97F44, 0x85A98042, 0x83A98243, 0x82AA8342, 0x80AA7D42, 0x7AA97D44, 0x82A97944, -0x7EA98244, 0x7CA98343, 0x75A97645, 0x78A97A45, 0x7CAA7A44, 0x7BA97C44, 0x7EA87746, 0x7CA97445, -0x78A98343, 0x85A77C44, 0x78A97D45, 0x88A98242, 0x81A98143, 0x79A87D45, 0x7FA97F43, 0x7CA88045, -0x85A88443, 0x83A88144, 0x82A88344, 0x84A88443, 0x86A88743, 0x87A78B43, 0x8BA68D43, 0x8CA78A43, -0x86A78343, 0x7EA97D44, 0x7EA88643, 0x84A78544, 0x83A78144, 0x83A98942, 0x80A97D43, 0x7FA87A44, -0x87A78244, 0x7FA78145, 0x7DA97E44, 0x7EA97B45, 0x81A98043, 0x80A87B43, 0x7DA88444, 0x7CA97345, -0x7AA87E45, 0x83A78444, 0x87A88342, 0x82A88043, 0x81A87C44, 0x7DA77C46, 0x76A87F45, 0x82A88043, -0x80A78345, 0x83A78244, 0x83A88443, 0x84A88542, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0093786B, 0x74A87A55, 0x7EA77855, 0x78A77B54, 0x7BA78351, 0x81A97D50, 0x7FAA7F4E, 0x7BAB7E4F, +0x7CAB7F50, 0x80A88651, 0x84A58452, 0x82A38554, 0x7AA57155, 0x71A87154, 0x75A97352, 0x6CAB5D54, +0x55AE5256, 0x51AC5558, 0x5AAB5B58, 0x5BAB5E56, 0x64A96F56, 0x73AA7352, 0x75AA7750, 0x74AC6F51, +0x67AD6453, 0x66AC6454, 0x62A86857, 0x6AA76357, 0x66A96556, 0x66A96555, 0x69A57658, 0x78A65959, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, -0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8CAB8C38, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948361, 0x82A97D43, 0x7AA97744, 0x81AA7A43, 0x81AA7743, 0x79A88045, 0x80A87C44, 0x7FAA8242, -0x85A97F43, 0x76AA7745, 0x84A98541, 0x7DAA7B43, 0x7BAA7844, 0x7AA97D44, 0x80A87F44, 0x79A97E44, -0x7DA97D44, 0x82A97B43, 0x77A97645, 0x79AA7845, 0x7BAA7B44, 0x7BA87E45, 0x76A87847, 0x78A97645, -0x82A88543, 0x81A87945, 0x7BA88543, 0x87A98242, 0x81A87F44, 0x7AA97D44, 0x80A97844, 0x7EA88145, -0x87A68744, 0x88A78844, 0x86A78344, 0x84A78344, 0x80A87F44, 0x7FA87E44, 0x7EA97D44, 0x7EA97E43, -0x7BA97C44, 0x7EA98044, 0x85A78544, 0x85A78444, 0x85A77F45, 0x81A98642, 0x84A97D43, 0x80A97E43, -0x7DA78644, 0x7DA77F46, 0x7CA97C44, 0x7FA87F44, 0x7AAA7E43, 0x7EA98043, 0x79A98243, 0x87A77A44, -0x71A87C46, 0x7EA88244, 0x85A78844, 0x85A98043, 0x80A88043, 0x7CA87C45, 0x7DA77647, 0x77A87E45, -0x7FA98043, 0x83A88543, 0x87A78743, 0x87A98442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5140,9 +6122,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x86A78153, 0x80A88152, 0x88A88350, 0x84AA874D, 0x87A88650, 0x80AA6E52, 0x6AA76659, 0x73AB6D51, +0x6BAA4A59, 0x6DAB8750, 0x73AB7451, 0x78A87953, 0x88A87053, 0x74AA7350, 0x79AB6E52, 0x59A77857, +0x6FAA4E58, 0x7AAB8A4E, 0x6FAC6B53, 0x70AB8251, 0x8BA6934F, 0x90A78C4F, 0x85A96F53, 0x6AAB6C54, +0x6DA87854, 0x80AA7650, 0x78AB7151, 0x76A58155, 0x87A48653, 0x72A86656, 0x72A88453, 0x78A86456, +0x6DAA7054, 0x7CA87454, 0x72A97553, 0x78A88152, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5162,16 +6151,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x81A97C44, 0x7CA97645, 0x83A97943, 0x81AA7A43, 0x7AA97C45, 0x82A97C43, 0x7EA98443, -0x86A98341, 0x76AA7745, 0x79AA8144, 0x83AA7F42, 0x7EA97C43, 0x7CA97D44, 0x7CA97D44, 0x7DA97E44, -0x7DA98443, 0x7CAA7744, 0x76AA7845, 0x78AA7B44, 0x7DAA7B44, 0x81A87646, 0x76A87846, 0x76A88345, -0x84A88144, 0x79AA7C45, 0x81A98942, 0x84A98442, 0x7EA97A45, 0x7AAA8043, 0x7FA97944, 0x82A88B43, -0x86A48646, 0x87A48646, 0x86A48746, 0x89A58A45, 0x8AA58745, 0x87A68744, 0x84A78344, 0x84A78344, -0x80A77E46, 0x7DA78245, 0x86A68744, 0x87A78443, 0x85A87A45, 0x7EA88444, 0x8AA87F43, 0x7FA98143, -0x78A88145, 0x81A87C45, 0x7FA87C45, 0x7AA97E44, 0x7EA97A44, 0x7DAA7E42, 0x81A87B44, 0x7FA88743, -0x7BA97345, 0x78A87946, 0x80A78445, 0x87A78743, 0x84A88143, 0x80A87F43, 0x7EA87F45, 0x7BA87547, -0x77A97A46, 0x7DA87F44, 0x7DA87D44, 0x7BA77946, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5183,10 +6162,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00929368, 0x93A68B51, 0x8FA68B51, 0x89A78553, 0x85A78253, 0x85A78A53, 0x86A78253, 0x81A77E53, +0x7EA97953, 0x7AAA7A52, 0x7BAA7851, 0x76AA7054, 0x6BAC6A52, 0x5EAD6055, 0x64AA6857, 0x71AA6C54, +0x68AB6953, 0x6AAB6A53, 0x6AAA6C54, 0x73A87952, 0x75AB6B52, 0x66AE6A50, 0x6CAC6E51, 0x6AAB5E55, +0x59A96057, 0x5FAA5E57, 0x57AD5257, 0x4EAE5057, 0x51AD4E58, 0x4CAC4F59, 0x57AC6655, 0x71A66F56, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5202,16 +6187,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x82A87D44, 0x7DA97845, 0x83A97943, 0x81AA7D43, 0x7BA97945, 0x80A98043, 0x81A88344, -0x87AA8441, 0x81A97843, 0x75AA7846, 0x7DAA7E45, 0x80A98143, 0x7FA97C44, 0x7AAA7B44, 0x7FA88344, -0x82AA7E42, 0x76A97646, 0x78AA7944, 0x79AA7F44, 0x7EA98344, 0x79A87447, 0x78A97446, 0x82A88743, -0x83A87A45, 0x7DA98143, 0x88A98541, 0x84A97F43, 0x7CA97745, 0x7FAA8343, 0x78A87F44, 0x85A98443, -0x84A88344, 0x80A87F45, 0x7DA77E46, 0x7EA77E46, 0x7FA68146, 0x81A68146, 0x81A68345, 0x83A78245, -0x83A78444, 0x86A78843, 0x8BA68943, 0x84A88144, 0x83A87545, 0x7DA88144, 0x8BA88343, 0x7FA98043, -0x81A97844, 0x85A78044, 0x7EA78046, 0x7BA97B44, 0x7BA97C44, 0x7AAA7E43, 0x7DA88144, 0x7CA98243, -0x87A87D44, 0x74A97746, 0x77A87C46, 0x7FA78744, 0x89A88642, 0x81A87F44, 0x81A87F44, 0x81A88144, -0x7DA97745, 0x77A87846, 0x7BA87A46, 0x7CA77D46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5227,9 +6202,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8EA58851, 0x86A68751, 0x80A88254, 0x8DA68652, 0x7DA98C50, 0x88A9884F, 0x82A97452, 0x61AA7554, +0x74A97153, 0x50A88357, 0x89AD704E, 0x72AA7452, 0x8DA77752, 0x66AB7451, 0x82AA7751, 0x5AA77858, +0x6BAA5C56, 0x87AB804D, 0x6BAC7253, 0x7BA86854, 0x6BA76957, 0x6DA76D56, 0x7BA68853, 0x85A86D53, +0x6BAB6355, 0x65A87F54, 0x80A87852, 0x71A97553, 0x82A38A54, 0x85A67654, 0x66AA7155, 0x7FA77B53, +0x63AB7254, 0x77A87754, 0x75AA6F52, 0x65A87256, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5242,16 +6224,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x84A97E43, 0x7FA97845, 0x81AA7D43, 0x7FAA8242, 0x7BAA7A44, 0x7DA98244, 0x81A88044, -0x86AA8641, 0x84A98242, 0x7BAA7844, 0x7AAA7844, 0x78AA7845, 0x78AA7945, 0x7EA98244, 0x83A98242, -0x7FA97845, 0x7CA97A44, 0x79AA7C44, 0x80A97F43, 0x84A87546, 0x74A87846, 0x76A88145, 0x86A78444, -0x7CA97E44, 0x81A98843, 0x82AA8342, 0x7FA97E44, 0x76A97B45, 0x83AA7C43, 0x7AA88743, 0x8DA97A42, -0x7DA97E45, 0x7EA97F44, 0x7FA97E44, 0x7FA98044, 0x80A88144, 0x82A88145, 0x7DA87B45, 0x79A77A46, -0x7FA78045, 0x81A88245, 0x81A88344, 0x7EA97D44, 0x7CA97346, 0x78A87E45, 0x83A88843, 0x83A97F43, -0x7EAA7D43, 0x78A78845, 0x7FA77E45, 0x83A77B44, 0x7AA97C44, 0x7CAA7944, 0x7EA97C43, 0x82A97F43, -0x7EA88643, 0x81A97744, 0x78A97545, 0x77A97C45, 0x80A78744, 0x86A88442, 0x7EA88143, 0x81A88244, -0x83A88243, 0x7EA97B44, 0x7CA97D44, 0x7EA98143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5270,9 +6242,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00967068, 0x75AC7950, 0x75AC7651, 0x76A97753, 0x76A87955, 0x78A87255, 0x6EAA6755, 0x66AB6355, +0x61AA6357, 0x6BAA6A55, 0x6EAA6D54, 0x68AA6755, 0x5FAA5B57, 0x61AC6653, 0x67AC6553, 0x68AC6F53, +0x7AA87E52, 0x74AA6454, 0x63AC6953, 0x73AD734F, 0x6FAB6853, 0x5BA95E57, 0x64AA6157, 0x5DAB5E57, +0x64AC6055, 0x5EAB6456, 0x63AA6056, 0x60AA6C54, 0x67AA5E56, 0x56AC5D58, 0x5EAA5F57, 0x53AC6755, +0x9AA88D43, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5282,16 +6261,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x87A97E43, 0x80A97844, 0x7EAA8043, 0x7AAA8643, 0x7EAA7E42, 0x79A98345, 0x84A88144, -0x82A88743, 0x85AA8441, 0x82A97F43, 0x7BAA7A44, 0x7CA97E44, 0x7EA97E43, 0x7FAA7F43, 0x7FA97C44, -0x7FA87F44, 0x7DAA7B44, 0x7EA98143, 0x82A98344, 0x75A87447, 0x7AA97745, 0x85A88643, 0x83A87C44, -0x7FA98343, 0x88AA8341, 0x82A98142, 0x81A97944, 0x7BAA8442, 0x7FA97A44, 0x87A88B42, 0x87AA7542, -0x82AA8042, 0x7EAA7D42, 0x7CAA7E42, 0x7EAA7F42, 0x80A97F43, 0x81A88343, 0x82A88143, 0x81A77F45, -0x7AA87A46, 0x79A87946, 0x77A87846, 0x77A97A46, 0x7BA97246, 0x76A87C46, 0x7EA98543, 0x88A88442, -0x7DAA7B44, 0x7DA97745, 0x82A87C45, 0x7CA88244, 0x7DA97A44, 0x78A97D44, 0x7CAA7E43, 0x7DA98043, -0x81A97E42, 0x84A88744, 0x7BAA7644, 0x75A97346, 0x7BA97D44, 0x81A88344, 0x82A98043, 0x80A98243, -0x84A78644, 0x85A88144, 0x82A88343, 0x82A98243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5313,25 +6282,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6EA77455, 0x80A88851, 0x8AA58753, 0x88A67F53, 0x8BA68F52, 0x81A8904F, 0x88AA884E, 0x74A85D57, +0x76A87454, 0x6EA96157, 0x8AAB7C4E, 0x71AA7A52, 0x7BA98551, 0x62AA6E54, 0x7CA97552, 0x5AA87158, +0x6AA96256, 0x83AC794E, 0x76AB7253, 0x6BA77956, 0x8BA57A52, 0x72A76E55, 0x7AA96953, 0x81A58953, +0x6FA96457, 0x5FAB6656, 0x7DA88151, 0x7BA97352, 0x7FA48255, 0x7DA47A55, 0x75A96E53, 0x7DA97851, +0x6EAA6655, 0x7AA97C52, 0x72AA7352, 0x69A96D55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x87A98143, 0x80A97C44, 0x7AAA8243, 0x7DAA8343, 0x84AB7F42, 0x7BA97B45, 0x84A88344, -0x84A78444, 0x84A98441, 0x82AA8042, 0x80AA7F42, 0x7DAB7C43, 0x7DAA7F43, 0x7FA97E44, 0x7FA88144, -0x7EA97E44, 0x7BAA8143, 0x84A88543, 0x7FA97445, 0x74A97546, 0x78A98444, 0x85A88043, 0x7DA97B44, -0x83A98A42, 0x85AA8242, 0x80AA8442, 0x7BA97B44, 0x85A98142, 0x7AA98644, 0x8DA88B41, 0x7CAA7D43, -0x85AA8541, 0x86AA8541, 0x83AA8441, 0x84AA8242, 0x81AA8042, 0x82AA8242, 0x84A98341, 0x83AA7E43, -0x7CA87A45, 0x7CA87C46, 0x77A87D46, 0x77A97A46, 0x78A87546, 0x72A87A46, 0x7DA88044, 0x85A98642, -0x83A97D43, 0x7AAA7B43, 0x76A87F46, 0x7FA87C44, 0x85A87C44, 0x7BAA7944, 0x7CAA7A44, 0x7CA97F43, -0x7FA98243, 0x7EA98443, 0x8AA78243, 0x79AA7644, 0x72A97547, 0x79A97D45, 0x7EA87E44, 0x82A87F44, -0x80A98143, 0x83A88144, 0x81A77E45, 0x7CA87B45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5356,22 +6322,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0095656A, 0x60A96358, 0x5FA95E59, 0x61AA6256, 0x65A86657, 0x73AA6F52, 0x68AC6852, 0x66AB5B55, +0x5AAA5F58, 0x66AB7554, 0x7CAA7850, 0x6BAB6554, 0x66AB6D54, 0x77A78052, 0x7EA86E52, 0x62AC7152, +0x83A9844F, 0x78A97053, 0x6FA96157, 0x60AA6D56, 0x72AB6852, 0x63A96A56, 0x73A86655, 0x5FAA6B55, +0x7AA97752, 0x74AA7F50, 0x7FAA7D4F, 0x7EAA7A4F, 0x79AB7D4F, 0x83AA7F4E, 0x76AA6354, 0x56AA5959, +0x57AC8D45, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x86A88443, 0x7FA98143, 0x79A98244, 0x80AA8042, 0x88AB8141, 0x7EAA7944, 0x7CA88844, -0x87A88743, 0x85A88443, 0x84A98442, 0x82AA8242, 0x83A98442, 0x81A88044, 0x80A88244, 0x7FA97E43, -0x7DAA7E43, 0x83A98343, 0x86A97D44, 0x73A97346, 0x76AA7B44, 0x82AA8442, 0x7FA97D44, 0x7EA98743, -0x8BA98641, 0x7FAA8042, 0x85AA7E43, 0x7FAA8442, 0x7FA97C43, 0x86A88D42, 0x87AA7D42, 0x7BA97E44, -0x76AA7644, 0x76AA7A44, 0x7AAA7B44, 0x7FA98242, 0x85AA8541, 0x81A98143, 0x81AA8242, 0x83AA8242, -0x81AA8242, 0x7EA87C45, 0x79A87A46, 0x7AA97945, 0x80A87B45, 0x76A87646, 0x7CA87F45, 0x7EA98243, -0x88A88343, 0x7DA97A44, 0x7DAA7744, 0x7BA88045, 0x7EA88544, 0x7EA97844, 0x77AA7945, 0x79AA7845, -0x7AAA7B44, 0x7EA97D43, 0x80A98A42, 0x88A87D43, 0x77A97845, 0x71A97347, 0x7BA97E44, 0x7EA87E44, -0x82A88243, 0x82A98243, 0x82A97F43, 0x7CA97C44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5399,19 +6362,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x83A88443, 0x7FA88444, 0x78A98244, 0x83AA7F42, 0x87AA8541, 0x81AB7C42, 0x7CA87F45, -0x88A98842, 0x8BA78B42, 0x88A88543, 0x83A88043, 0x80A88045, 0x80A88045, 0x81A98243, 0x84AA8342, -0x82A98442, 0x86A98643, 0x7BA97546, 0x74AB7844, 0x80AA8342, 0x84A98142, 0x80A97C44, 0x86A98B41, -0x85AB7E42, 0x82AA8242, 0x7DAA8043, 0x80AA7A43, 0x7DA88943, 0x8DA98542, 0x7BAA7D43, 0x7BA97B45, -0x82AB8141, 0x82AB8041, 0x80AA8042, 0x7FAA7D43, 0x7CA98043, 0x84A88742, 0x85A97F42, 0x7CAA8143, -0x83AA8341, 0x81AA7F42, 0x7DA87645, 0x78A97C46, 0x7CA97E44, 0x78A87D46, 0x78A97646, 0x7BA87D45, -0x7DA98743, 0x87A88143, 0x7AAA7E43, 0x7FAA7844, 0x80A87F45, 0x84A87E44, 0x74AA7745, 0x78AA7845, -0x79AA7A45, 0x79AA7944, 0x7DA97E43, 0x86A98C42, 0x84A97B44, 0x7BA97844, 0x72AA7646, 0x7AA97C44, -0x83A88044, 0x7EA97E44, 0x7EAA8042, 0x81AA8143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x7EAC6A50, 0x5FAB5855, 0x64A78055, 0x80A48156, 0x88A77454, 0x88A68552, 0x91A8884F, 0x7FA96E52, +0x60A97F54, 0x81A86855, 0x80A9874F, 0x7CAB7E50, 0x78AA8950, 0x6CA96C54, 0x70AA6D53, 0x57A96459, +0x74A86C55, 0x83AA7450, 0x6CAB6F55, 0x72A77753, 0x81A76555, 0x68AA6058, 0x61A77A57, 0x67A79053, +0x85A76954, 0x6BAB6454, 0x76A87E53, 0x7BA76E54, 0x7AA68153, 0x7DA37757, 0x6BA97154, 0x70AA7154, +0x7CA95E56, 0x7AA97952, 0x72AA6B53, 0x76A96654, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5443,19 +6403,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948461, 0x82A98143, 0x82A98343, 0x7BA97E44, 0x84AA8242, 0x85AA8941, 0x82AB7E42, 0x7DAA7B44, -0x7DA98544, 0x8AA98A42, 0x8BA88C42, 0x8CA88D42, 0x8CA88D42, 0x89A98941, 0x87AA8741, 0x85A98442, -0x85A98343, 0x7DA97745, 0x76AA7444, 0x79AA7F43, 0x84AA8441, 0x82A97C44, 0x7FA98942, 0x87AA7F42, -0x7EAB8142, 0x7BAA7F43, 0x80AA7F42, 0x7BA97E43, 0x87A88942, 0x7FAA7843, 0x81A97E44, 0x80A88745, -0x78AC7843, 0x78AB7843, 0x78AC7A42, 0x7CAC7D42, 0x7FAA7F42, 0x7CA97C44, 0x7EA98443, 0x85AA8141, -0x7DAA8043, 0x85AA8241, 0x7FAA7D43, 0x7AA87B46, 0x7EA97C44, 0x7BA97A46, 0x79A97846, 0x77A87746, -0x7DA87E44, 0x80A88944, 0x85A88043, 0x7CAA8042, 0x7AA97A45, 0x81A88244, 0x80A97545, 0x76AA7C45, -0x7BAA7B44, 0x7CAA7C44, 0x79AA7B44, 0x7CAA8143, 0x88A88A42, 0x83A97B44, 0x79A97845, 0x73AA7545, -0x79AA7B44, 0x7DA87D45, 0x7BA87945, 0x77A97546, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00966569, 0x5DA96D56, 0x79AB7551, 0x6BAC5853, 0x51AA5459, 0x59AC5B57, 0x68AB7552, 0x75A87D52, +0x76A87753, 0x7BAB7A4F, 0x84A68051, 0x7AA97353, 0x67AD6852, 0x85A98C4E, 0x84A88250, 0x7EA76E55, +0x62A95E59, 0x70A98651, 0x7AAB7351, 0x6FA86A57, 0x6CA86157, 0x60AA6956, 0x7CA97751, 0x6FAB7151, +0x73A96554, 0x6AA87D52, 0x7CAA7150, 0x73A97652, 0x7CA87552, 0x7AA96F52, 0x7CA97A50, 0x65AA5458, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5482,23 +6438,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x82A97F43, 0x84A98143, 0x7FA97A44, 0x84AA8541, 0x82AA8841, 0x89AA8341, 0x7EAB7A42, -0x7AAA7C44, 0x80A88544, 0x87A88A43, 0x8CA88C42, 0x89A98542, 0x82A98043, 0x80AA8343, 0x84A98343, -0x7EA97945, 0x79AA7745, 0x78AA7C44, 0x80AA8441, 0x82A97F43, 0x80A88743, 0x88AA8641, 0x7EAB8042, -0x7DAA7C44, 0x7EAB7F42, 0x7CAA7C44, 0x7DA88743, 0x84A97C43, 0x7DA98443, 0x82A88544, 0x88A78944, -0x7EA87E44, 0x7CA97A45, 0x78A97745, 0x76AA7645, 0x77AB7943, 0x7BAA7F42, 0x7FAA7D43, 0x81A98542, -0x89A98341, 0x7FAA8342, 0x83AB7F41, 0x7EA97B44, 0x7FA97D44, 0x7CA87A45, 0x7EA97C45, 0x7EA97C45, -0x7BA87545, 0x7CA87D44, 0x81A88743, 0x84A97D43, 0x7AAB7E42, 0x79A98044, 0x81A88144, 0x7BAA7345, -0x78AA7E44, 0x7AAA7845, 0x7CAA7A43, 0x7AAA7C43, 0x7FAA8542, 0x8AA88842, 0x7EA97844, 0x78A97A45, -0x78AA7545, 0x76AA7945, 0x79AA7B45, 0x7DA97D44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x74A38557, 0x98A38753, 0x77AB6053, 0x61A88C54, 0x86A68153, 0x75A78B52, 0x7FA88451, 0x86A97751, +0x61A87456, 0x7AA77F54, 0x64A88E53, 0x82AB834E, 0x79A97952, 0x7FA96A53, 0x6EA96854, 0x59AA4B5A, +0x76A87753, 0x80AA6F51, 0x6FAA7155, 0x72AA7052, 0x72A76A57, 0x5BAB5E59, 0x63A77158, 0x75A97D52, +0x8BA66156, 0x7BAB5F53, 0x6DA87755, 0x76A86955, 0x77A78652, 0x75A46A58, 0x76A87253, 0x77A87953, +0x7BA86157, 0x77AA7652, 0x75AA6754, 0x70AA5E55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5522,16 +6475,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948861, 0x83A97E43, 0x88A88243, 0x84A97D43, 0x7DAA8742, 0x84AA8442, 0x87AA8B41, 0x86AB8141, -0x7FAB7B42, 0x7BAA7944, 0x7AA97B45, 0x7CA97E44, 0x7DAA7E44, 0x80AB8243, 0x83A97F43, 0x7CAA7A45, -0x7AAA7844, 0x7AAA7E44, 0x7FAB7F42, 0x83A98143, 0x7FA88643, 0x8BAA8641, 0x81AC8041, 0x7FAA7C43, -0x7FAB8242, 0x7EAA7943, 0x7DA98043, 0x82A97E43, 0x7FA88544, 0x85A88544, 0x88A78544, 0x82A77846, -0x77AA7A44, 0x7DA97F44, 0x81A98443, 0x86A88344, 0x7FA87945, 0x76AA7645, 0x78AA7F43, 0x83A98343, -0x84A88A42, 0x88AA7F41, 0x82AB8540, 0x80AA8142, 0x80A98144, 0x7DA97D44, 0x7FAA8343, 0x86AA8442, -0x87A98643, 0x80A87645, 0x78A97A44, 0x85A98A42, 0x84A97D43, 0x7CAC7B41, 0x7BA97E44, 0x80A98044, -0x75AA7345, 0x7CAA7E44, 0x7CAA7A44, 0x7BAA7A43, 0x7BA97F43, 0x7EA98442, 0x88A88343, 0x7CA97A45, -0x7CA87E45, 0x79A97446, 0x74AC7943, 0x7AAC7943, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5539,10 +6482,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094766A, 0x7DAC6650, 0x5FAC5955, 0x5CAB6355, 0x72AB7552, 0x73A97353, 0x76A88353, 0x78AC824E, +0x7FA77F51, 0x82AC7050, 0x5EAD6952, 0x83A88450, 0x81A98051, 0x77A87054, 0x58A9545B, 0x64A98B52, +0x82AB894D, 0x78A76F55, 0x69A85C57, 0x65A87555, 0x82A98150, 0x65AB5D54, 0x6DAA6655, 0x62A97F53, +0x7FA87051, 0x73AA7151, 0x70AC6C52, 0x6DA97354, 0x78A88352, 0x84AA804E, 0x6AAA7352, 0x72AB6953, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5562,16 +6511,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x85A98442, 0x82A98543, 0x84A98643, 0x7DAA8143, 0x89AA8441, 0x83AA8741, 0x8AAA8941, -0x86AB8241, 0x82AB8341, 0x82AB8242, 0x81AB8242, 0x84AA8442, 0x83AA8342, 0x7FAA7D43, 0x7DAA7F43, -0x7FAA8143, 0x82AA8142, 0x81A98143, 0x82A88544, 0x8AA98741, 0x82AB8141, 0x80AB7A42, 0x7DAA7E44, -0x80AA7D43, 0x79AA7F43, 0x7FAA7F43, 0x80A98643, 0x88A88944, 0x89A78444, 0x7EA87746, 0x73AA7246, -0x88A98941, 0x87A98641, 0x85A98342, 0x81AA8143, 0x82A98543, 0x82A97F44, 0x78AA7745, 0x7CAA8243, -0x82A98442, 0x8AA98A41, 0x80AB8341, 0x84AB8041, 0x7FA88444, 0x83A98044, 0x87AA8743, 0x89A98C42, -0x88A98942, 0x8AA98941, 0x86A87744, 0x74A97C45, 0x88A88A42, 0x83AA7F42, 0x7CAB7C42, 0x7BAA7C44, -0x80A97D44, 0x75AA7746, 0x7FAA7E44, 0x78A97B44, 0x79AA7B43, 0x82A98242, 0x81A98443, 0x87A98142, -0x7EA97D44, 0x7EA97E44, 0x7EA97745, 0x78AA7844, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5583,9 +6522,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5BAD6553, 0x65AA6A54, 0x89A68153, 0x6DAB6154, 0x86A58D52, 0x8BA87C52, 0x8BA58A51, 0x7BA97A51, +0x62A96457, 0x7EA58653, 0x60A98155, 0x8AAB7B4E, 0x7AA96B54, 0x86A97850, 0x76A96654, 0x5CAA415A, +0x7BA97352, 0x7BA97850, 0x6BAA7055, 0x69A96655, 0x6EA86A55, 0x5FA6605D, 0x5CA87956, 0x80A77952, +0x7FA86954, 0x7DAC6052, 0x75A76C56, 0x70AA6654, 0x7CA78C51, 0x75A66D56, 0x73A86D54, 0x82A97752, +0x77A85958, 0x78AB7850, 0x6EAA6E54, 0x6BA96556, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5602,16 +6548,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948561, 0x87A98642, 0x84A98542, 0x82A98642, 0x86A97D43, 0x81A98743, 0x85AA8342, 0x82AA8842, -0x8BAA8B40, 0x86AB8441, 0x83AB8441, 0x84AB8141, 0x7FAB8042, 0x81AB8142, 0x80AB8042, 0x80AA7D42, -0x80AA8142, 0x82A98043, 0x80A98244, 0x87A98941, 0x85AC8240, 0x7FAB7A42, 0x7AAA7F44, 0x81AA7C42, -0x79AA7A44, 0x80A98043, 0x80A88A43, 0x8AA88943, 0x88A78544, 0x7CA97346, 0x73AA7945, 0x7DAB7E43, -0x7AAB7A43, 0x7EAB8042, 0x82AA8541, 0x85A98841, 0x88A98642, 0x82AA8143, 0x84AA8043, 0x78AA7A45, -0x7EA98443, 0x84A88942, 0x89AA7E41, 0x84AB7F41, 0x80A98543, 0x84A98343, 0x87A98D42, 0x8FA98D41, -0x8BAA8941, 0x88AA8841, 0x85A98642, 0x87A88044, 0x77AA7E44, 0x8AA88942, 0x83AA7B42, 0x7BAB7D43, -0x7CAA7E44, 0x82A97A44, 0x77AA7C45, 0x81A97D44, 0x7CA97C44, 0x7BAA7D43, 0x82A98242, 0x7FA98543, -0x84AA8242, 0x7FAA7D43, 0x7BA97C45, 0x7FA88144, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5626,9 +6562,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957C68, 0x62AC6A53, 0x57AA5659, 0x69AC7652, 0x7EA97451, 0x84A78951, 0x7CAA834F, 0x70AA7852, +0x82AD6F4F, 0x6EAB7E51, 0x78A98551, 0x89A78151, 0x6AA85A59, 0x59AA6357, 0x7DAA7B50, 0x7CAA7651, +0x6CA76159, 0x5EAA5757, 0x76A97853, 0x82A86F53, 0x4CAC5958, 0x67AB6255, 0x5CAA8153, 0x72A96853, +0x76AB6B51, 0x74A77256, 0x7CA77455, 0x78A78255, 0x86A67357, 0x7CA89050, 0x83AB6D50, 0x66AC6953, +0x7EAA8D43, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5642,16 +6585,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948461, 0x84A98742, 0x89A98642, 0x88A98442, 0x86A88543, 0x7EA97C43, 0x83A98743, 0x89AA8941, -0x89AA8841, 0x88AA8941, 0x89AA8A41, 0x8AAA8941, 0x87AA8741, 0x86AB8541, 0x82AA7F42, 0x7EAA8143, -0x83A97E43, 0x81A98743, 0x89A98741, 0x86AC8340, 0x7EAB7B42, 0x7AAB8044, 0x83AB8142, 0x7BAA7944, -0x80A98343, 0x83A88C42, 0x8FA78B43, 0x86A98143, 0x79AA7445, 0x78AB7E43, 0x7FAA7F42, 0x7EAB7B43, -0x7CA97E44, 0x7EA97B44, 0x79AA7944, 0x7BAB7B43, 0x80AA8541, 0x89A98642, 0x83A98543, 0x85A97E43, -0x7BA98044, 0x87A98342, 0x8AA98541, 0x80AB8241, 0x7FAA8043, 0x82A98443, 0x8CA98F41, 0x87A98642, -0x8AA88743, 0x89A88742, 0x82A98043, 0x82A98443, 0x88A98343, 0x79A97F44, 0x85A98742, 0x82AA7943, -0x7EAA7F43, 0x7CAA8243, 0x80AA7945, 0x77A98046, 0x82A97C44, 0x7DA97944, 0x7CAA8143, 0x83AA8143, -0x80A98343, 0x86AA8441, 0x80A98143, 0x7AA97A46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5669,9 +6602,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x53A97C54, 0x75AC6752, 0x63A78554, 0x85A96A52, 0x6BA98551, 0x87A48E53, 0x89A89150, 0x82A97752, +0x69A95858, 0x85A67E53, 0x68A97556, 0x87AB824D, 0x76AA7A51, 0x88A87951, 0x76A87054, 0x5FAA4E58, +0x5AAA8154, 0x77A87952, 0x6AAA6D55, 0x72A68854, 0x65AB6E52, 0x7BA68452, 0x81A87C51, 0x79A58854, +0x66A87C55, 0x6BAB6654, 0x80A86B53, 0x64AA6B54, 0x7EA58B53, 0x6FA67A55, 0x60A96F56, 0x85A96F52, +0x6FAA5957, 0x70AB7851, 0x65AA6D54, 0x59AB6856, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5682,16 +6622,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x81A98543, 0x88A98842, 0x86A98841, 0x83AA8442, 0x86A98443, 0x7DAA7B43, 0x80A98643, -0x87A98742, 0x86AA8841, 0x87AA8741, 0x87AA8642, 0x84AB8342, 0x82AA7F43, 0x7EA97D44, 0x7DA97E45, -0x85A98A42, 0x8DA98941, 0x85AB8240, 0x7DAB7A42, 0x7BAB7F44, 0x83AB8143, 0x7DAA7A44, 0x80A88344, -0x86A88C42, 0x8DA98842, 0x85A98243, 0x78AA7645, 0x7AAB8042, 0x80AB7E42, 0x7DAB7B43, 0x79AB7745, -0x7DAB7D43, 0x7CAB7C43, 0x7DAB7C42, 0x7DAA8143, 0x7EAA7C43, 0x7BAA8042, 0x87A98442, 0x85A98743, -0x7FA97944, 0x83A98643, 0x82A88943, 0x7FAB8141, 0x7EAA7B43, 0x80AA8342, 0x8AAA8B41, 0x85A98643, -0x84A97A44, 0x78AA7646, 0x7BAB7C44, 0x82A98143, 0x7FA98244, 0x88A98442, 0x7EA98044, 0x88A98642, -0x79AB7C44, 0x81AA8042, 0x7EAA8343, 0x7EAA7945, 0x7BA98544, 0x80A87F44, 0x79AA7B44, 0x81A98242, -0x80AA7B43, 0x84A98642, 0x88AA8741, 0x86A98342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5712,26 +6642,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957E68, 0x68AB6455, 0x5AAA6657, 0x6DAC7151, 0x73A78C50, 0x92A9824F, 0x7AA77B53, 0x7CAB844F, +0x6CAB7752, 0x86A88150, 0x8AA78E4F, 0x7EA65958, 0x5AAA5B59, 0x79A88C50, 0x8FA97551, 0x6DA75D5A, +0x5FAA5857, 0x78A77C54, 0x7BA97A52, 0x5CAA5958, 0x5EAA6E56, 0x56AA6957, 0x71AA6F51, 0x71AC6651, +0x76A77954, 0x6CAB6554, 0x66AC7153, 0x7EA87E50, 0x7AA78E52, 0x69A98854, 0x86AA6D51, 0x6CAB7152, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958761, 0x87A98243, 0x84AA8543, 0x89A88843, 0x88A98741, 0x81AA8343, 0x87A88843, 0x81AA7E43, -0x7DAA8043, 0x81AA7F43, 0x81A98244, 0x81A98044, 0x80A98044, 0x81A98044, 0x83A98643, 0x88AA8B41, -0x8BAA8840, 0x84AB7D41, 0x77AB7943, 0x7CAB8044, 0x81AB7F43, 0x79AA7A45, 0x7CA98044, 0x87A88E42, -0x8BA98642, 0x81A97D44, 0x7AAB7B44, 0x7DAB7F43, 0x7EAB7F43, 0x7CAB7E43, 0x82AA8342, 0x84AB8442, -0x87A88443, 0x81AA7F43, 0x7CAB7C43, 0x7BAB7943, 0x7BAB7F43, 0x7EAA7C43, 0x7CAA8042, 0x88A98442, -0x86A97F43, 0x7DA98643, 0x81A98244, 0x85AA7E42, 0x7FAB7C42, 0x7FA98443, 0x88AA8642, 0x84A98043, -0x7AAA7D44, 0x7FA97E44, 0x7BAA7745, 0x77AA7645, 0x7AAA8144, 0x81A98243, 0x86A98642, 0x7FA98543, -0x8AA98043, 0x7DAA8043, 0x80AA7D43, 0x80AA7E43, 0x7CA97A45, 0x82A98544, 0x80A87C44, 0x78AB7E43, -0x81A98043, 0x7FAA7C43, 0x88A98B41, 0x89AA8841, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5756,22 +6682,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x74AD5C52, 0x6FA97F51, 0x67AA6656, 0x87A77752, 0x5EAA7B53, 0x75A58B55, 0x84A78852, 0x83AB7850, +0x6BAA5358, 0x83A58653, 0x6AA96B57, 0x7FAA7F50, 0x7AAB7251, 0x83A97E50, 0x75A77354, 0x62A95B57, +0x43AB7757, 0x7CA97951, 0x77A96B53, 0x6DA96158, 0x83A77953, 0x74A97A52, 0x7AA67E54, 0x89A66B56, +0x7BA96F52, 0x6DAB7151, 0x7DA86A54, 0x5BAB7653, 0x90A48053, 0x7BA77654, 0x5FA97855, 0x80A97451, +0x63AA6C55, 0x6AAA7D52, 0x65AA7254, 0x55AC7154, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x89A98842, 0x84AA8641, 0x88A98A41, 0x8AA88B42, 0x8AAA8441, 0x7EAB7F42, 0x83AA8743, -0x89A98842, 0x86AA8542, 0x87AA8842, 0x87A98A41, 0x8AAA8941, 0x87A98742, 0x87AA8742, 0x88AB8541, -0x82AB7941, 0x74AB7A44, 0x81AB8242, 0x7FAA7C43, 0x7AA87C45, 0x7DA87F45, 0x88A88C42, 0x8CA98242, -0x7AAB7A44, 0x7CAB7B43, 0x7CAB7C43, 0x7DAB7D43, 0x81A98342, 0x83AA8242, 0x85AA8641, 0x84AA8542, -0x7DAB7E42, 0x7FAB7F43, 0x7DA97D44, 0x7AA97745, 0x79AB7A44, 0x7EAA8143, 0x7DAA7C43, 0x80AA8841, -0x87A98742, 0x7FA97E44, 0x86A97E44, 0x88A97F43, 0x81AC7D41, 0x80A98743, 0x89AB8142, 0x81AA7A44, -0x81A98043, 0x81A98144, 0x84A98542, 0x81AA8142, 0x80AA7F43, 0x7DA98044, 0x83A98343, 0x87A98642, -0x81A98A42, 0x88AA8142, 0x7FAA8642, 0x7FAB7F43, 0x81A97C44, 0x7CA97F45, 0x86A88143, 0x83A97E44, -0x7AAB8242, 0x80A98244, 0x80AA8043, 0x8CAA8841, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5799,19 +6722,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00947D69, 0x6EAA6056, 0x4EAB6558, 0x66AC6E51, 0x71A79750, 0x89A87F51, 0x72A77E53, 0x7FAB7B51, +0x76AA7151, 0x80A78A50, 0x93A58150, 0x6BA65E59, 0x5FAA6B55, 0x81A88950, 0x78AA7353, 0x5FA75B5B, +0x61A87C56, 0x75A97353, 0x7CA76056, 0x55AB6157, 0x6AAB6156, 0x63AA6C55, 0x6FAC5852, 0x6DAA7C51, +0x83A75F55, 0x73AB7A4F, 0x6DAB884F, 0x69AC7D51, 0x7AA97D51, 0x75A87F54, 0x84AA6951, 0x69AB7352, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x85A98843, 0x8CA98842, 0x85AB8940, 0x8AA88942, 0x8BA98A42, 0x86A98741, 0x82AB7F42, -0x80AA7F42, 0x7FAB7F43, 0x81AB8043, 0x7FAB8142, 0x82AB8442, 0x85AB8442, 0x83AB7D41, 0x77AC7543, -0x77AA7F44, 0x85AA8343, 0x82AA7E43, 0x7AA97E44, 0x7FA98244, 0x8AA89041, 0x8AAA8342, 0x7EAA7D44, -0x7CAB7D43, 0x7CAC7C43, 0x7DAB8143, 0x83AA8342, 0x84AA8242, 0x7FAB7C43, 0x7CAC7D42, 0x7EAB7F42, -0x85A88344, 0x82AA7F43, 0x7CAB7942, 0x79AB7B43, 0x7AAA7845, 0x76AA7B44, 0x82A98043, 0x7EAB7F42, -0x89A98741, 0x87A97C43, 0x84A98543, 0x84AA8442, 0x82AC7C41, 0x80AA8542, 0x8BAB7E42, 0x7FAA7C43, -0x85A98343, 0x81A97D44, 0x7BA97A45, 0x7DAA7D44, 0x7EAA7E43, 0x82AA8243, 0x80A98044, 0x82A88843, -0x88A98143, 0x84AA8842, 0x86AB8042, 0x84AA8542, 0x80AA8043, 0x7DA97B45, 0x7EA98743, 0x82A88543, -0x84AA7E42, 0x81AA7F43, 0x81AA8642, 0x80A98843, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5843,18 +6763,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x81AA8243, 0x87A98B42, 0x8CA98541, 0x83AB8841, 0x8AA98A41, 0x87A88842, 0x85A98342, -0x82AA8142, 0x84AA8442, 0x84AA8341, 0x82AB8242, 0x81AB7D42, 0x78AC7543, 0x75AB7844, 0x7FAA8343, -0x83AA8243, 0x81A98144, 0x7DAA7B44, 0x7EA98343, 0x8AA98A41, 0x84AA7F42, 0x7FAA8242, 0x83AB7F42, -0x7DAB7E42, 0x7FAA8143, 0x7EAA7E43, 0x7EAB7D43, 0x7DAA7E44, 0x7FA98144, 0x81AA7E44, 0x80AB8442, -0x8BA78A44, 0x88A88743, 0x87A88643, 0x82AB7B42, 0x79AC7C42, 0x7BAB7444, 0x76AA8243, 0x85A98142, -0x7FAA8642, 0x88A98542, 0x7BA98844, 0x81A98743, 0x81AC7F41, 0x7EAA8742, 0x88AB7D42, 0x7DAB8043, -0x84A98443, 0x7CA97A45, 0x78AA7845, 0x79AA7A45, 0x7AAA7F44, 0x82A98642, 0x85A98243, 0x7EA98444, -0x86A88642, 0x83A98144, 0x87AA8541, 0x81AA8042, 0x86AA8142, 0x7FAA7E44, 0x7FA98045, 0x85A98842, -0x86A88843, 0x82AA7E42, 0x80A98143, 0x87A98242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7AAB754E, 0x63AB6D53, 0x79A97053, 0x79A77B54, 0x68AA7553, 0x75A57557, 0x7AA78453, 0x81AA7A50, +0x71AA5556, 0x6EA69053, 0x74A86F56, 0x7FA97651, 0x7EAA7951, 0x82A98751, 0x74A77654, 0x60AA5A57, +0x40AB6259, 0x7AA97B51, 0x79A96E52, 0x64A96B58, 0x68A85859, 0x66AB6B55, 0x6EA86758, 0x64A97E54, +0x6CAB6E52, 0x69A98153, 0x6EA96055, 0x67A98253, 0x8EA57253, 0x7BAA6353, 0x67A87D55, 0x78A97753, +0x5AAD6954, 0x85A86954, 0x76A96455, 0x58AC7652, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5882,22 +6799,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948861, 0x85AA8142, 0x83A98643, 0x89A88C42, 0x8CA98541, 0x83AB8541, 0x87AA8641, 0x86AA8742, -0x89A98841, 0x86AA8641, 0x87AA8641, 0x83AB8242, 0x83AB8242, 0x82AA8342, 0x81A97F44, 0x80A98043, -0x83A98143, 0x7FAA7C43, 0x7DAA8243, 0x86AB8441, 0x80AB7E43, 0x7FAB8042, 0x81AB8042, 0x7EAB7E42, -0x7DAB7B43, 0x79AA7944, 0x7CAA7D44, 0x7EA98144, 0x82AA8543, 0x84AA8143, 0x7FAA7D43, 0x7AAB7E44, -0x88A88D44, 0x8DA88B43, 0x8BA88A43, 0x86A98443, 0x80AA7C43, 0x7BAC7B42, 0x75AB7745, 0x85A98842, -0x82AB7E42, 0x86AA8842, 0x80A98343, 0x86A98543, 0x80AB8241, 0x7FAA8642, 0x87AB7D41, 0x7FA98642, -0x86A98043, 0x7CAA7945, 0x7AAA7F43, 0x80AB8241, 0x84AA8341, 0x84AA8243, 0x86A98742, 0x84AA8143, -0x82A88444, 0x84AA8443, 0x83A98843, 0x86AB8342, 0x81A98642, 0x82AA7E43, 0x81AA8144, 0x83A98743, -0x88A98343, 0x8CA98442, 0x7FAA8342, 0x83A98842, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946E6B, 0x7BA96554, 0x51AB5559, 0x62AC6D53, 0x62A78C53, 0x8CA98D4E, 0x6FA77E54, 0x7EA97A53, +0x76AA7451, 0x70A88552, 0x90A7854F, 0x60A85959, 0x61A96F55, 0x80A88450, 0x6FA97553, 0x62A95A59, +0x5BA97E55, 0x7AA97952, 0x79A86256, 0x4EA96958, 0x67AB6855, 0x66AA7054, 0x77AB5753, 0x6EA97D51, +0x80A76655, 0x67AA7F51, 0x77AD7250, 0x6EAC774F, 0x80A88250, 0x6CA98553, 0x84A96D52, 0x64AB7154, +0x6FAB8D43, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5922,25 +6836,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x84AA8842, 0x84A98143, 0x83A98543, 0x88A98942, 0x87A98541, 0x84AA8342, 0x84AA8142, -0x82A98343, 0x85A98542, 0x85AA8442, 0x81AA8042, 0x7EA97E44, 0x7FA98043, 0x81A98143, 0x80AA7F43, -0x7BAB7A44, 0x7FAB8442, 0x86AA8341, 0x81AA8043, 0x80AB7F41, 0x7DAC7E41, 0x7BAB7B43, 0x7AAA7744, -0x77AA7945, 0x7BA97C45, 0x7DAA8044, 0x81AB7E42, 0x7DAB7D43, 0x7EAC7D41, 0x7DAC7D41, 0x7AAB7C43, -0x7CA97C45, 0x7EA98045, 0x82A88744, 0x89A88544, 0x83A98043, 0x7DAB7C43, 0x7FAB7843, 0x77AA8743, -0x89AB7F41, 0x7FAA8642, 0x85A97F43, 0x8AA88343, 0x82AC8141, 0x80AB8341, 0x89AB7D41, 0x7FAA8742, -0x83A98044, 0x7AAA7A45, 0x83AB8641, 0x88AA8940, 0x88AA8740, 0x86AB8340, 0x83AA8442, 0x87AA8542, -0x82AA8243, 0x85A88343, 0x82AA8243, 0x84A98642, 0x84AA8142, 0x86AA8542, 0x7DAA8343, 0x84AA8343, -0x85AA8543, 0x84A98A42, 0x85AA7F42, 0x84A98442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6BAA804F, 0x73AC6151, 0x78A87253, 0x6FA77656, 0x6EAA7052, 0x75A76757, 0x7AA88551, 0x7EAA7D50, +0x6EAB5556, 0x60A88B54, 0x81A77255, 0x7AA97653, 0x73AA7552, 0x75A98852, 0x75A77C54, 0x60AA6155, +0x55AA515A, 0x74AA8350, 0x81A87251, 0x6DA86455, 0x6CA96D56, 0x6AA96657, 0x6AA96F55, 0x7DA96155, +0x6EAC6552, 0x87A87253, 0x64AA6C55, 0x81A68D51, 0x76A87853, 0x6AAB6B54, 0x7FA88151, 0x78A96755, +0x66AD7151, 0x7FA87153, 0x75A95A55, 0x71AB6B51, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5962,16 +6873,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x82AB8142, 0x81AA8442, 0x83AA8342, 0x82AA8143, 0x7EAA8143, 0x85A98742, 0x89A98941, -0x8AA98941, 0x88A98641, 0x84AA8142, 0x84AA8441, 0x81AA7F42, 0x7FAB7D42, 0x7CAB7744, 0x79AB7C43, -0x82AA8641, 0x85A98542, 0x85AA8342, 0x7FAB7B42, 0x79AC7843, 0x78AB7843, 0x76AA7645, 0x77A97B45, -0x7FA98044, 0x80AA8142, 0x7EAB7D42, 0x82AB8541, 0x86AB8841, 0x88AB8641, 0x86AB8240, 0x7FAC7F41, -0x81AC8241, 0x84AB8241, 0x7FA97B44, 0x7CA98245, 0x88A88543, 0x7FAA7C43, 0x7AAB7F43, 0x77AA7645, -0x8CAA8A40, 0x7FAA8641, 0x84AA8142, 0x86A98443, 0x82AB7F42, 0x7FAB8341, 0x89AB7C41, 0x7EA98643, -0x82AA7E43, 0x77AA8044, 0x87AA8741, 0x89AA8741, 0x87AA8541, 0x85AA8541, 0x85AA8441, 0x84AA8543, -0x89AA8242, 0x7DA98643, 0x85A98543, 0x84A88544, 0x85AA8642, 0x82AA8343, 0x82AB7F43, 0x83A98244, -0x83AA8543, 0x86A98442, 0x89A98641, 0x80AA8342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -5981,10 +6882,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0096686A, 0x80A88051, 0x6DA85558, 0x61AC6753, 0x73AA6153, 0x93A68D4F, 0x8BA86C52, 0x71A87F53, +0x71AB7751, 0x66A87755, 0x7FA98E4E, 0x72AB5E54, 0x5BA96058, 0x73A78A52, 0x7CA96E53, 0x6FA95C57, +0x5FAA6557, 0x80A97651, 0x76A87454, 0x4DA96859, 0x62A96A57, 0x5BAA6B56, 0x74AA5754, 0x62AA7053, +0x80A67354, 0x62AB7751, 0x7AA97950, 0x72AB7C4F, 0x7AA78253, 0x6CA98C52, 0x78A96F54, 0x6BAA6854, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6002,16 +6909,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x81AB8342, 0x85AB8341, 0x80AB8242, 0x83AA8442, 0x81AA8143, 0x80AA7D43, 0x7DAA7D43, -0x7EAA7E43, 0x7FAA7D43, 0x7DAA7F43, 0x7EAB7E43, 0x7FAB8143, 0x81AB8242, 0x83AA8642, 0x85A98842, -0x87A98342, 0x82AB8042, 0x7BAC7842, 0x77AC7743, 0x76AA7644, 0x77AA7845, 0x7AA97C45, 0x7FA98244, -0x81AB7F42, 0x7EAC8241, 0x84AB8441, 0x81AC7E41, 0x7CAC7A42, 0x7AAB7A43, 0x7DAB7E42, 0x82AB8341, -0x8DAC8B3F, 0x88AC8740, 0x86AC8541, 0x82AA8042, 0x7DA98444, 0x87AA7E43, 0x7CAB7B43, 0x7FAB7444, -0x7DAA8E42, 0x87AA8141, 0x85AA8441, 0x81A98842, 0x84AA8142, 0x81AB8540, 0x88AC7F41, 0x7CAA8643, -0x81AA7B43, 0x78AA8643, 0x8AAA8940, 0x89AA8242, 0x81AB8442, 0x84AB8242, 0x80AA8142, 0x86AA8841, -0x87A98742, 0x84AA8042, 0x88A88343, 0x86A88843, 0x83AA8143, 0x86AA8442, 0x85AA8143, 0x83AA8343, -0x83AA8144, 0x84A98542, 0x85A98642, 0x86AB8142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6025,9 +6922,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x70AA6C50, 0x8BAB6C4F, 0x6EA97553, 0x74A77355, 0x73A96E53, 0x7BA65F58, 0x7AA98751, 0x80A88051, +0x68AA4D58, 0x59A78955, 0x85A77754, 0x7AA87853, 0x6EA97A52, 0x7CA97D52, 0x73A77F53, 0x62AB5E55, +0x68AA4C58, 0x6CAB7951, 0x7BA98050, 0x7BA87252, 0x6DA67357, 0x7BA57C56, 0x71A76A57, 0x62AD6B51, +0x6AAA8252, 0x70A86856, 0x71AA7B52, 0x93A67E51, 0x71AA7452, 0x76A77C54, 0x7EAA7751, 0x72A95458, +0x6EAA8651, 0x64AB7852, 0x72A86756, 0x7AAB5E52, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6042,16 +6946,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958A61, 0x85AA8442, 0x83AB8342, 0x87AC8540, 0x87AC8840, 0x87AC8740, 0x87AB8541, 0x86AB8641, -0x86AB8640, 0x86AC8640, 0x85AC8440, 0x82AC8341, 0x84AB8641, 0x85A98742, 0x88A88842, 0x85A98242, -0x7FAB7D42, 0x79AC7742, 0x75AC7743, 0x79AB7C44, 0x7BAA7B44, 0x7EA98044, 0x82AA8042, 0x80AC7F41, -0x81AC8241, 0x80AC7E42, 0x7BAC7B42, 0x7AAA7C45, 0x7EA98045, 0x80A88245, 0x81A97D44, 0x79AB7D44, -0x8AAB8A3F, 0x8AAA8940, 0x8BAA8A41, 0x88AB8641, 0x82AB7C43, 0x7EA98344, 0x7EAB7E43, 0x7EAB7C43, -0x72AA8643, 0x8BAB8141, 0x83AA8342, 0x80AA8B42, 0x86AA7F43, 0x81AB8342, 0x86AB7F41, 0x7BA98543, -0x81AA7A43, 0x7EAA8A42, 0x89AA8242, 0x79AC7844, 0x7BAB7C43, 0x7CAA8144, 0x84AA8143, 0x80AA8642, -0x88A98542, 0x85AA8542, 0x7FAA8443, 0x86A98642, 0x8AA98343, 0x7EAA8643, 0x87A98442, 0x7FAA8243, -0x82A98744, 0x81AA8343, 0x7FA98743, 0x87AB8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6068,10 +6962,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00966C68, 0x68AA8850, 0x84A87654, 0x64AB6E54, 0x6EA97354, 0x6EA68F52, 0x85AA794F, 0x69A86C56, +0x82AA7550, 0x7AA86355, 0x75A88851, 0x85AA6751, 0x60A86657, 0x71A68253, 0x8BA96753, 0x6DAA6256, +0x68AA5958, 0x83A97A52, 0x79AA7A52, 0x50AA6359, 0x68A77657, 0x61AA6F55, 0x67AB6854, 0x5CAC6A53, +0x7AA77C54, 0x67AC6A52, 0x73A97F51, 0x80AA7E4E, 0x74A78553, 0x6AA99451, 0x72A87055, 0x67AC6953, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6082,16 +6982,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948561, 0x83AA8543, 0x87A98443, 0x85A98643, 0x85A98941, 0x88AA8641, 0x87AA8741, 0x86AB8741, -0x86AB8741, 0x88AA8A41, 0x89A98A42, 0x88A78A43, 0x86A88243, 0x82AA8243, 0x83AA8242, 0x80AB7A43, -0x76AC7544, 0x75AB7745, 0x78AB7944, 0x79AB7A44, 0x7CAA8143, 0x83AA8242, 0x83AB8441, 0x82AB8141, -0x7EAC7D42, 0x7DAB7C42, 0x7CA97E44, 0x7FA97C44, 0x7DAA7D43, 0x7DAA7D43, 0x7FA88444, 0x85A97844, -0x86AA8A41, 0x8BAA8B40, 0x89AA8A40, 0x8AAA8941, 0x87AB8541, 0x7CAA7E44, 0x82AA7F43, 0x80AB7D42, -0x77AB7844, 0x88AB8840, 0x82AA8142, 0x83AA8A42, 0x8AAA7F42, 0x82AA8142, 0x84AB7E42, 0x78A98444, -0x82AA7644, 0x84AA8C41, 0x87AB7B42, 0x7FAC7F43, 0x83AB8243, 0x83AA7F43, 0x7DAA8343, 0x81AB8342, -0x84AA8942, 0x84AB8642, 0x84AA8042, 0x87A88943, 0x8AA88743, 0x7FAA7E44, 0x86AA8442, 0x81AA8044, -0x7FAA8443, 0x82AA8243, 0x82AA8242, 0x85AA8742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6112,9 +7002,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x73AC6E50, 0x6DAA8A4E, 0x72AA8051, 0x73A96F53, 0x6BA96356, 0x80A66A56, 0x7AA88751, 0x79A87F51, +0x66AA5358, 0x54A68A56, 0x81A77A54, 0x7FA87B53, 0x66AB6E54, 0x7BA86F55, 0x75A87B54, 0x6CAA4C57, +0x61AA5B56, 0x55AC7054, 0x87A96A50, 0x81A76E52, 0x78A96751, 0x64AC6652, 0x6EAB6F50, 0x60AC7B51, +0x7EAA6D53, 0x69A97154, 0x73A89251, 0x86A96852, 0x80AB7450, 0x73A68255, 0x7DAB7351, 0x62AB6057, +0x79AA7551, 0x65A97854, 0x69A96B55, 0x7EAB6651, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6122,16 +7019,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948861, 0x84A88444, 0x87A88444, 0x81A98144, 0x81A98244, 0x83A98344, 0x83A88344, 0x84A88344, -0x83A88444, 0x87A88744, 0x86A98743, 0x82AA7F43, 0x81AB8143, 0x81AA7E43, 0x7AAC7843, 0x75AC7744, -0x79AB7B44, 0x7AAB7A43, 0x7BAB7B43, 0x7DAB7F43, 0x81AA8242, 0x83AB8142, 0x7FAC7C42, 0x7BAB7D42, -0x7DAA7B43, 0x7AAA7A44, 0x79AA7944, 0x7CAA7D44, 0x7AAB7844, 0x78AB7D43, 0x82AA8241, 0x7EA78346, -0x8AA98842, 0x88AA8842, 0x8BAA8941, 0x89AA8B40, 0x8BAA8A41, 0x88AA8042, 0x7FA97E44, 0x82AB8042, -0x7FAB7245, 0x80AA8B41, 0x82AB8341, 0x84AA8542, 0x8BA98142, 0x83AA8241, 0x85AB8142, 0x78A98444, -0x81AA7444, 0x86AA8C40, 0x81AB7F42, 0x81AA8842, 0x8CA98F41, 0x8EA98D40, 0x8AAA8142, 0x7FAB7F43, -0x80AA8543, 0x87AA8441, 0x84AA8241, 0x84A88843, 0x8BA88A42, 0x82A97D44, 0x82A98A42, 0x85A97C44, -0x80AA8143, 0x86AA8342, 0x82A98342, 0x85AA8842, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6155,23 +7042,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00966E69, 0x6EAB8050, 0x86A77C53, 0x74A87454, 0x71AA7552, 0x68A59155, 0x74AA8250, 0x76A67655, +0x7FAA7151, 0x83A76754, 0x6DA88053, 0x82A96753, 0x5AA86658, 0x73A58B53, 0x84A67554, 0x69A96057, +0x64AA5F57, 0x7CA87A53, 0x7CAB7451, 0x59AB5658, 0x6EA67458, 0x6AA87156, 0x60AB7254, 0x5EAD7351, +0x81A67455, 0x60AD5C53, 0x70AA7E50, 0x87A9804E, 0x7DA78352, 0x76AA9A4E, 0x6AA77057, 0x6CAC6553, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948F60, 0x8FA98C41, 0x8EA98C41, 0x8BA98A42, 0x89A98842, 0x8AA98C42, 0x8AA98942, 0x88A98742, -0x86AA8542, 0x85AA8542, 0x86AA8441, 0x84AA8143, 0x7FAB7F42, 0x7AAC7B43, 0x7CAB7E44, 0x82AB8043, -0x7EAB7F42, 0x7FAB7F43, 0x7FAA8043, 0x82AA8542, 0x83AA8042, 0x7DAC7F41, 0x80AB8142, 0x7FAB7A43, -0x78AA7B44, 0x7AAA7A44, 0x77AC7544, 0x74AC7544, 0x75AB7444, 0x73AB7444, 0x77AB7D43, 0x81A98143, -0x8BAA8D41, 0x8CAA8942, 0x87AA8A42, 0x88AA8941, 0x8DAA8A40, 0x8BAA8741, 0x81AA8043, 0x7FAB8542, -0x81AA7944, 0x78AA8A43, 0x87AB8340, 0x84A98242, 0x8DA98342, 0x81AB8341, 0x86AA8242, 0x77A98744, -0x81AA7644, 0x88AA8A40, 0x80AB8242, 0x89A98941, 0x86A98542, 0x89A88C42, 0x8CA98842, 0x82AA8342, -0x7FAA7F43, 0x84AA8741, 0x84AA8342, 0x80A98543, 0x89A88C43, 0x88A98142, 0x7DAA8743, 0x87A98043, -0x7FAB8143, 0x86AA8143, 0x82AA8342, 0x7FA98543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6199,19 +7082,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967B61, 0x7CAC7B42, 0x7BAD7C41, 0x7DAC7F42, 0x7FAC8241, 0x83AC8640, 0x87AC8740, 0x89AB8A40, -0x8BAA8940, 0x83AB8242, 0x80AB8042, 0x7FAB7F43, 0x80AA8343, 0x81AA7F43, 0x7CAB7B43, 0x7FAB8241, -0x82AB8142, 0x81AA8342, 0x82AA8042, 0x7CAB7C43, 0x7FAC8042, 0x80AB7F42, 0x7CAB7A43, 0x78AA7A45, -0x7AAA7944, 0x79AB7A44, 0x79AB7944, 0x7AAA7A44, 0x7CAA7B45, 0x7CAB7B44, 0x77AB7644, 0x79AB8443, -0x8DA88B41, 0x8AA98A42, 0x88AA8943, 0x8DA98A42, 0x86AA8D41, 0x8BAA8B40, 0x89AA8342, 0x7BAA8343, -0x83AA8243, 0x74AA8944, 0x8BAC8141, 0x82AA8342, 0x8DA98441, 0x7DAB8342, 0x88AA8442, 0x78A98544, -0x7FAB7943, 0x8BAB8840, 0x7FAB8242, 0x86AA7E43, 0x7FA97F44, 0x80AA8043, 0x86A88B43, 0x8AA98043, -0x7FAA7C43, 0x7DA98843, 0x88AA8542, 0x82AA8342, 0x88A78C43, 0x8AA98443, 0x7DAA8143, 0x87A98642, -0x7CAB8243, 0x84A98442, 0x84AB8142, 0x7DAA8243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x7AAB6F51, 0x6CAA6552, 0x83AB6A51, 0x83A77753, 0x70A96756, 0x79A77E53, 0x7AA78E51, 0x71A87B53, +0x6EA95F57, 0x52A68157, 0x87A87A52, 0x7CA88252, 0x63AA7454, 0x74A86856, 0x6CA97156, 0x82AA4E55, +0x57AB5D56, 0x5FAB6156, 0x7AAB7F4E, 0x6AA98852, 0x72A86C54, 0x66A96256, 0x59AB6D54, 0x84A87C52, +0x6BAC5F54, 0x6EA96F54, 0x74A88951, 0x74AA7B51, 0x70A97952, 0x74A57E56, 0x7EA97252, 0x55AB7156, +0x80A97252, 0x6BA87654, 0x6EA87854, 0x7AA97253, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6243,15 +7123,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00968160, 0x83AB8541, 0x83AC8342, 0x84AA8542, 0x84AA8543, 0x85AA8243, 0x80AB7E43, 0x7DAB7C43, -0x7CAB7C44, 0x7FAA7F43, 0x80AB8043, 0x7EAA7D43, 0x7BAB7944, 0x7BAB7D43, 0x7EAB7D42, 0x7EAB8142, -0x85AA8742, 0x83AA7C43, 0x7CAB7F42, 0x82AC8241, 0x81AB7E42, 0x79AA7A44, 0x7CAA7B44, 0x7AAB7A44, -0x7CAB7B43, 0x7AAB7D44, 0x7CAB7B44, 0x7BAA7F42, 0x7DAB7A43, 0x77AB7A44, 0x7AAB7A44, 0x75AB7E43, -0x92A89441, 0x93A79041, 0x8DA88941, 0x85A98C43, 0x8DA98842, 0x8DAA8A40, 0x8CAA8740, 0x7DAA7D44, -0x87AA8542, 0x79A98144, 0x8BAB8341, 0x81AA8442, 0x8BA98741, 0x7BAB8142, 0x89AA8442, 0x79AA8344, -0x7DAA7A44, 0x8BAB8840, 0x80AB8343, 0x84AA7A43, 0x88A88C42, 0x85AA7E42, 0x7DAA8143, 0x8FA88542, -0x7DAB7C44, 0x7BAA8144, 0x87A98641, 0x86AA8541, 0x86A88843, 0x89A88443, 0x81AA7E42, 0x88AA8642, -0x7FAB7F43, 0x87AA8542, 0x83AB8242, 0x7DAA8043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00976369, 0x70A88452, 0x7FA67455, 0x7BA77353, 0x71AA6B53, 0x8DA37955, 0x7FA87552, 0x7DA58754, +0x7FA77A52, 0x7AA86A54, 0x74A88252, 0x72A96055, 0x60A96C56, 0x7AA58854, 0x79A66E56, 0x6CA86D56, +0x6CAA6D55, 0x73A96F53, 0x7DAA6F51, 0x5DAC5F56, 0x76A57058, 0x68A87A55, 0x60AB7354, 0x5FAD6952, +0x89A58052, 0x5FAC6153, 0x77AA7052, 0x78A87951, 0x81A78850, 0x77AB964E, 0x65A77758, 0x72AC6851, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6283,15 +7163,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957A62, 0x7BAA7C44, 0x7DAB7F43, 0x7DAA7D44, 0x7DAA7D44, 0x7CAB7C43, 0x7DAB7F43, 0x7FAB8143, -0x80AB7D43, 0x7BAB7844, 0x77AB7944, 0x7BAA7F43, 0x81AB8143, 0x7EAB7D43, 0x7FAA8442, 0x88A98541, -0x7FAB7C43, 0x7FAB8442, 0x85AB8641, 0x82AA7943, 0x76AA7C45, 0x81AA7E43, 0x7BAB8143, 0x81AB7D43, -0x78AB7D44, 0x82AA8142, 0x82AA8541, 0x87AB8840, 0x88AA8841, 0x88AB8141, 0x7CAB7944, 0x78AA7944, -0x81A98343, 0x88AA8B41, 0x8CA88B42, 0x8BA98742, 0x8CA98E42, 0x88AA8F41, 0x8BAA8B40, 0x83A97A43, -0x83AA8342, 0x80AA7B44, 0x8BAB8641, 0x82AA8542, 0x86A98A42, 0x7CAA8043, 0x86AA8342, 0x78AA8144, -0x7EAA7C44, 0x89AB8540, 0x84AB8242, 0x7FA98543, 0x8CA98542, 0x82A98143, 0x85AA7E43, 0x88A98C42, -0x81AA7C44, 0x7BAB7E43, 0x86AA8842, 0x86AA8242, 0x87A88843, 0x87A88643, 0x83AA8042, 0x87AA8441, -0x81AA7D43, 0x85AA8642, 0x82AB8342, 0x7FAA8043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x76A67058, 0x6AAC6552, 0x63A97E52, 0x6AA98353, 0x75A86D55, 0x6EA98952, 0x68A78653, 0x85A9804F, +0x76A76C56, 0x51A77359, 0x8CA67453, 0x74A87D54, 0x67A96756, 0x65A87357, 0x64A96E57, 0x83AB6352, +0x50AB6B55, 0x61AA6E55, 0x5FAB7B51, 0x7EAC6050, 0x7DA88451, 0x80A98250, 0x7FA87054, 0x74AA6F54, +0x68AA7353, 0x75AA6055, 0x8AA87951, 0x78AA7451, 0x71A86B56, 0x75A78E52, 0x7FA87153, 0x51AC7F54, +0x86A87352, 0x77A87054, 0x67A97554, 0x75A77654, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6323,15 +7203,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D61, 0x7BAA7C44, 0x7AAA7A45, 0x7BAA7B44, 0x7DAA7D44, 0x83AA8142, 0x7EAB7E42, 0x7DAB7943, -0x78AB7A45, 0x7EAA8343, 0x86AB8442, 0x7FAB7D43, 0x7DAB8043, 0x84A98842, 0x87AA8142, 0x7CAB8242, -0x89AA8941, 0x84AB8142, 0x81AA7B43, 0x7BAA8043, 0x82AB7E42, 0x7CAA7F43, 0x83AA7D43, 0x7BAB7F43, -0x85AA8442, 0x83AA8741, 0x88AA8741, 0x87AA8641, 0x85AB8741, 0x89AA8740, 0x83AA7C43, 0x77AA7845, -0x77AB7943, 0x7BA98244, 0x84A98543, 0x85A98A43, 0x85A98843, 0x8AA98C41, 0x8CAA8E40, 0x85AA7D43, -0x7EAA8443, 0x88AA7A43, 0x8CAA8840, 0x84AA8641, 0x84AA8D41, 0x7CAB8143, 0x84AA8242, 0x77AA8044, -0x80AA7F44, 0x89AB8441, 0x83AB8043, 0x80A98743, 0x8AA97C44, 0x79AA7646, 0x80AA8044, 0x7FA98F42, -0x87AA7E43, 0x7EAB7D43, 0x84A98842, 0x87AA8242, 0x87A98743, 0x88A88544, 0x82AA8142, 0x82AA8142, -0x82AA7B43, 0x85AA8342, 0x83AA8242, 0x81AA7E43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00948568, 0x7DA87353, 0x74A67C54, 0x7AA96F53, 0x6DA28159, 0x67A87F55, 0x78A78452, 0x85A58153, +0x76A78052, 0x79A86955, 0x7FA87753, 0x63AA6156, 0x69A87E53, 0x8AA47F54, 0x72A47058, 0x6CA77856, +0x6BA87756, 0x66AA7B53, 0x75AA6C53, 0x56AA7654, 0x7AA67856, 0x72A96955, 0x6AAB6954, 0x60AC6E53, +0x88A76D54, 0x67AD6651, 0x75AA814F, 0x77AA7850, 0x7DA87A51, 0x6DAC934E, 0x6AA67B57, 0x73AC6951, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6363,15 +7243,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957C62, 0x7DAB7D43, 0x78AA7944, 0x82AA8542, 0x81AB7C42, 0x76AB7345, 0x75AA7745, 0x79AB8043, -0x84AA8642, 0x85AA8342, 0x83AB8142, 0x84AA8842, 0x85A98342, 0x81AB7D42, 0x84AA8841, 0x89AA8A41, -0x88A98342, 0x7CAA7745, 0x7CAA8642, 0x84AB8242, 0x7EA97C44, 0x7FAA7E43, 0x7CAA7F42, 0x87AA8542, -0x84AA8641, 0x85AA8342, 0x7EAA8043, 0x80AB8043, 0x81AA8442, 0x82AA8841, 0x89AA8141, 0x7DAB7744, -0x87AB7F41, 0x7AAB7843, 0x7DA98843, 0x88A88843, 0x8BA98342, 0x8BA98A42, 0x8FA98B41, 0x87AA8142, -0x7BAA8743, 0x88AA7E43, 0x88AA8B41, 0x86AB8741, 0x84AA8B41, 0x7FAA8043, 0x81AA8043, 0x77AA7C45, -0x83A98043, 0x89AA8341, 0x7FAB8143, 0x82A98442, 0x88A97D43, 0x7EAA7B44, 0x7BAA8544, 0x7DA98E42, -0x8AA97F43, 0x7FAB7C43, 0x84AA8742, 0x86A98143, 0x85A98942, 0x87A88444, 0x7FAA8142, 0x81AA8243, -0x86AA7A44, 0x85AA8542, 0x82AA7F43, 0x84AA7D43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6EAA6154, 0x71A76E57, 0x6DAB6752, 0x7AA97651, 0x80A67B53, 0x73AA7852, 0x75A76D55, 0x8BA87051, +0x80A67455, 0x64A95559, 0x86A68352, 0x71A88554, 0x6EA96957, 0x63A86F57, 0x72A97154, 0x77A98B51, +0x5FAB5656, 0x6AAB6853, 0x6CAA6854, 0x80A9824E, 0x6CAD5E52, 0x69AB7753, 0x7EAB7650, 0x74AC6B51, +0x71AA7453, 0x63A97755, 0x76A88252, 0x7AAA7251, 0x74A76357, 0x6CA78D52, 0x68AB6754, 0x54AC7D55, +0x84A86D52, 0x7BA87753, 0x69AA7254, 0x7BA67555, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6403,15 +7283,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967D61, 0x7AAA8044, 0x85AB8341, 0x7FAB7842, 0x75AB7645, 0x78AB7944, 0x7EAB8342, 0x83AA8642, -0x84AA8442, 0x86AB8641, 0x8AA98841, 0x86AA8342, 0x7EAB7E42, 0x89AA8D40, 0x89AA8941, 0x87A98043, -0x7CAA7A45, 0x81AA8A41, 0x85AB8242, 0x81AA7F44, 0x80A97B44, 0x7BAA7F43, 0x86AA8442, 0x81AB8242, -0x82AA7D42, 0x7FAA8742, 0x86AA8241, 0x82AA8442, 0x86AA8342, 0x85AA8142, 0x86AA8541, 0x7DAA7645, -0x92A88D42, 0x87AB7F41, 0x7AAA7C43, 0x8AA88A42, 0x88A98742, 0x87A98B43, 0x8AAA8841, 0x88AA8442, -0x79AA8543, 0x86A98143, 0x83AA8C41, 0x87AB8841, 0x83AA8742, 0x82AA7E42, 0x7FAA7F43, 0x78AA7844, -0x85A98043, 0x87AA8341, 0x81AA8143, 0x82AA8341, 0x85AA7944, 0x76AB7F44, 0x74AA8744, 0x81AA8A42, -0x8CA97E43, 0x84AB7C42, 0x81A98542, 0x84AA7F43, 0x83A98A42, 0x85A88143, 0x82A98342, 0x82AA8342, -0x88A97C43, 0x85AA8542, 0x82AA7D43, 0x83AA7C43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00937D69, 0x7FA87252, 0x67A67458, 0x74A4605B, 0x6BA77457, 0x7DA58453, 0x81A57B54, 0x80A78750, +0x84A57854, 0x75A77D54, 0x69AA6057, 0x6BA97353, 0x84A49452, 0x84A67754, 0x78A56E57, 0x81A97252, +0x7EA86855, 0x71AB7851, 0x6DA96056, 0x6BA88454, 0x77A86C56, 0x6FA96256, 0x62AB6455, 0x65AA7E53, +0x80A86D54, 0x64AD6A51, 0x68AB6F52, 0x76AA6E52, 0x74A97C51, 0x70AC8F4D, 0x69A67958, 0x79AA7152, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6443,15 +7323,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957962, 0x84AA8542, 0x7EAB7843, 0x76AB7A44, 0x7AAB7C43, 0x82AA8542, 0x84A98442, 0x85A98642, -0x85AB8740, 0x89A98641, 0x83AA8142, 0x7DAB8042, 0x8AAA8E40, 0x89A98741, 0x87A98243, 0x77AA7745, -0x81AA8E41, 0x8AAB8640, 0x83A98144, 0x7FA97A44, 0x7EAA8343, 0x88AA8241, 0x7CAA8143, 0x83AA7D43, -0x7EA98942, 0x85AA7E42, 0x7DAA7F43, 0x80AA8242, 0x84AA8541, 0x88AA8441, 0x81AB8641, 0x7FAA7D43, -0x83A88944, 0x91A78B42, 0x84AB7B42, 0x7BA98C43, 0x8AA98842, 0x83A98C42, 0x87A98941, 0x8AAA8441, -0x7CAA8343, 0x85A98742, 0x7DAA8D42, 0x89AB8940, 0x85AA8542, 0x87AA7F42, 0x80AA7E43, 0x78AA7245, -0x84AA8442, 0x87AA8142, 0x81AA8243, 0x82AA8142, 0x82A97E44, 0x79AB7A45, 0x7CA98144, 0x83AA8642, -0x8CA97B43, 0x86AB7A42, 0x80AA8442, 0x84AA7E43, 0x84A98A42, 0x84A87F44, 0x83AA8242, 0x84AA8542, -0x86AA7B44, 0x84AA8442, 0x83AA7D42, 0x81AA7A43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x77A97E51, 0x79A96054, 0x66A96A56, 0x6BAA6953, 0x77A88452, 0x86A87652, 0x85A96754, 0x79A88252, +0x73A77057, 0x73A85E56, 0x71A78853, 0x71A78354, 0x81A96555, 0x69AA6157, 0x76A87354, 0x75A87754, +0x78AC5753, 0x5FAC6254, 0x6CAB7B51, 0x6DAA6E53, 0x84A9804F, 0x7DAC754F, 0x75AB6E52, 0x6EAA6F53, +0x6EA77855, 0x5CAA7C55, 0x69A97454, 0x79AB7450, 0x7FA66156, 0x6CA77F54, 0x67AB6E54, 0x52AB7A55, +0x7DA87852, 0x6FAA7C51, 0x7AA95F55, 0x7EA87252, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6483,15 +7363,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x87AB7D41, 0x7AAB7843, 0x79AB7C43, 0x82AA8342, 0x83AA8242, 0x84A98942, 0x85AB8840, -0x88A98741, 0x89AB8141, 0x7AAB7F42, 0x89A98941, 0x88AA8841, 0x84AA8142, 0x78AA7645, 0x7CAA8C42, -0x88AB8B40, 0x84A98143, 0x7EAA7A44, 0x7DAA8343, 0x89AA8841, 0x7DAB7A43, 0x80AA7D43, 0x7BAA8742, -0x87AA8242, 0x82AA8241, 0x81AB8042, 0x80AA8343, 0x85A98942, 0x89AA8840, 0x7FAB8242, 0x82AB7E42, -0x82AB8042, 0x82A78D44, 0x8AAA8342, 0x7BAA8143, 0x8EA88A42, 0x89AA8842, 0x8AA98A42, 0x87AA8441, -0x7BA97F44, 0x86A98A42, 0x79AA8B43, 0x8BAB8840, 0x87AA8142, 0x89AA8241, 0x82AA7C43, 0x77AA6E45, -0x84AA8342, 0x87AA8341, 0x81AA8243, 0x82AA7D43, 0x83A97B44, 0x7AAA7D45, 0x7CA98045, 0x86A98742, -0x89A97B44, 0x87AB7B42, 0x81AA8343, 0x83AA7C43, 0x87A98A41, 0x82A88044, 0x83AA7F43, 0x86AA8542, -0x84A97944, 0x84AA8341, 0x82AA8042, 0x81AA7B43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0093686D, 0x62A96959, 0x73A87854, 0x7CA67655, 0x74A67155, 0x65A96F53, 0x7DA67953, 0x73A87255, +0x78A96A55, 0x63AC6954, 0x76A87E52, 0x8DA69151, 0x8AA77954, 0x6FA47059, 0x8CA8854F, 0x75A97154, +0x66AB8352, 0x7BA97951, 0x56A97656, 0x84A58455, 0x71A76B57, 0x5DA95D59, 0x61AD6253, 0x7BA77B55, +0x6BAB6254, 0x68AB6C52, 0x7AA86A54, 0x71A98052, 0x6DA97653, 0x73AC824D, 0x78A66758, 0x7EA87952, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6523,15 +7403,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x7FAB7C42, 0x7CAB7844, 0x78AB8042, 0x83AA8541, 0x82A88943, 0x88AB8640, 0x86AA8541, -0x86AB8B41, 0x80AC8041, 0x86AA8541, 0x85AA8941, 0x89AA8442, 0x7AAA7746, 0x79AA8642, 0x85AB8940, -0x86AA8242, 0x7EA97D44, 0x76AA7F44, 0x84AA8A41, 0x84AB7643, 0x7BAB7D43, 0x7AAB7943, 0x8BA98142, -0x83AA8342, 0x7DAB8043, 0x81A88A44, 0x88A88345, 0x83A98443, 0x89AA8E40, 0x83AB8042, 0x7FAB7E43, -0x79AB7D42, 0x7DAA7F43, 0x8CA98843, 0x81AB7B42, 0x8AA98D42, 0x8CA98642, 0x8CA98C42, 0x86AA8541, -0x7CAA7C44, 0x87A98A42, 0x7AAA8843, 0x8CAB8640, 0x85AA7F42, 0x8AAA8441, 0x84AA7D43, 0x79AA6F45, -0x86AA8342, 0x86AA8441, 0x80AA8143, 0x7FAA7D43, 0x80AA7F43, 0x7AA97B46, 0x79AA8544, 0x88A98542, -0x87A97F43, 0x86AB7B42, 0x83A97F44, 0x81AA7D43, 0x86A98C42, 0x84A98043, 0x83AA8043, 0x88AA8442, -0x84A97844, 0x84AB8441, 0x81AA8143, 0x7FAA7D43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x59AD6556, 0x69AB6E53, 0x75AA6253, 0x6CAB6454, 0x60AA7453, 0x87A58353, 0x71AA8751, 0x64A87954, +0x73A76B56, 0x74A77555, 0x62A87C55, 0x82A77952, 0x81A97652, 0x61A96058, 0x6DA77C55, 0x73A87454, +0x7CAB6E50, 0x50AC5E57, 0x6BAB6353, 0x76A97B52, 0x67AB7251, 0x7EAA7F4E, 0x81AA7F4E, 0x7DAA7051, +0x77A66657, 0x69AA7554, 0x6FA97253, 0x78AA7750, 0x80A75F56, 0x65A77656, 0x6CAC7251, 0x58AA7556, +0x7FA88051, 0x65AA7C53, 0x7FA97951, 0x5EAA7155, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6563,15 +7443,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958660, 0x7BAB7F43, 0x77AB7745, 0x7FAB8442, 0x87AA8341, 0x8AA98B41, 0x86AA8941, 0x81AA8442, -0x88AC8140, 0x81AB8741, 0x84AA8A41, 0x8BA98841, 0x7FAA7945, 0x78AB7C43, 0x87AA8641, 0x86AA8341, -0x80A97B44, 0x7AAB7744, 0x84AA8442, 0x88A98142, 0x73AB7844, 0x7EAB7C43, 0x79AA8842, 0x82AA7E42, -0x83AA7F42, 0x83A98244, 0x86A98343, 0x85A98843, 0x8AA98344, 0x86A98E41, 0x89AA8041, 0x7DAB7F42, -0x87AB7F41, 0x7AAB7D42, 0x81A98A43, 0x84AB7B42, 0x85A98C41, 0x8CA98842, 0x8DA98E41, 0x88AA8442, -0x7CAA7A44, 0x89A98842, 0x7DA98543, 0x8BAB8640, 0x85AA8242, 0x8AAA8441, 0x85AA8143, 0x7AAA7045, -0x7EAA8643, 0x84AA8641, 0x7EAA7F43, 0x7FA98A43, 0x80AA8342, 0x81AA7F43, 0x83AA8542, 0x86A98942, -0x82AA8443, 0x82AB7B42, 0x85A98043, 0x7FAA7E43, 0x86A88B42, 0x82A98443, 0x7FAA8043, 0x89AA8442, -0x84AA7744, 0x83AB8541, 0x7FAA8142, 0x7AAA7C44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00937A6A, 0x74A86C55, 0x69A77155, 0x75A67754, 0x75A77155, 0x72A76957, 0x68AA6655, 0x72AA8250, +0x80A88150, 0x84A88F4F, 0x95A7944F, 0x85A57855, 0x75A68553, 0x86A97950, 0x68AA5F56, 0x6EAA7D52, +0x84A98250, 0x64A87555, 0x80A67F54, 0x7CA77456, 0x60A95F58, 0x6CAC6755, 0x67A97855, 0x6EA96356, +0x6AAA6555, 0x74AA7052, 0x7DAB7D4F, 0x7DA97B4F, 0x87A78250, 0x7DAA784F, 0x8CA75456, 0x80A67F54, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6603,15 +7483,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958760, 0x7DAB7D43, 0x76AB7C44, 0x82AB8142, 0x86AA8341, 0x92A98641, 0x87AA8742, 0x83AA8941, -0x82AB8142, 0x89AA8741, 0x88A98D41, 0x8AA98043, 0x78AA7A45, 0x7DAA8842, 0x8AAA8A41, 0x82A98143, -0x7AAA7945, 0x79AA8643, 0x86AA8741, 0x82AA7544, 0x78AB7C43, 0x7FAA7644, 0x85AA8042, 0x80AA8242, -0x7DAA8643, 0x88A98043, 0x82AB7D42, 0x7CAA7F43, 0x87AA8942, 0x81AA8A42, 0x8BAA8041, 0x7DAB8142, -0x75AA8643, 0x83AB7D42, 0x7CA98A43, 0x8AAA7F42, 0x7FAA8A42, 0x8BA88E42, 0x8BA98E41, 0x88AA8442, -0x7FAA7844, 0x8AA98742, 0x7EAA8344, 0x8AAB8940, 0x83AA8541, 0x8BAA8541, 0x84AA8143, 0x7BAA7445, -0x78AA8843, 0x84A98541, 0x7FAA8043, 0x82A98B43, 0x7DAA8042, 0x86A98A42, 0x88AA8641, 0x85A98B43, -0x7DA98643, 0x7FAB7D42, 0x88AA7F42, 0x7DAA7F43, 0x87A88C42, 0x81A98543, 0x7BAA8144, 0x8AAA8142, -0x81AA7843, 0x81AB8441, 0x7DAB8043, 0x78AB7E44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3EAB525B, 0x73A87254, 0x7AAA7A50, 0x7AA96453, 0x65AB5955, 0x74A88651, 0x84A96D53, 0x83A86F52, +0x7CA87154, 0x75A48456, 0x6AA96C54, 0x7BA58054, 0x74A88553, 0x67A86957, 0x63A87158, 0x74A96F53, +0x76A88753, 0x6DAD5253, 0x57AA7055, 0x60AC6B52, 0x7CA87054, 0x59A96957, 0x6FA87255, 0x80A67F53, +0x65A86258, 0x71A96C55, 0x6AA97154, 0x7DAA8050, 0x87A76C53, 0x5EA5705A, 0x71AA7A51, 0x5FAA5A58, +0x7BA98150, 0x78A96854, 0x75AA7C50, 0x83A96653, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6643,15 +7523,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958760, 0x7EAB7C43, 0x78AB7D43, 0x80AB8242, 0x82A98C42, 0x8FAA8940, 0x85A98642, 0x86AB8941, -0x80AB8442, 0x8AAA8841, 0x8BA98D41, 0x87A87844, 0x79AA7945, 0x85AA8D41, 0x8DAA8341, 0x80A97A45, -0x7BAA7844, 0x85A98642, 0x86A98542, 0x79AB7844, 0x7AAA8043, 0x77AA7E44, 0x82AA8041, 0x82AB7D42, -0x84A98543, 0x80AB7D43, 0x7DAB8242, 0x87A98741, 0x85A98E42, 0x7FAA8B42, 0x8AAA8041, 0x80AB8242, -0x77AC7B43, 0x88AA7F41, 0x7CAA8143, 0x8CAA8342, 0x7BAA8642, 0x87A88F42, 0x8BA98E41, 0x8AAA8541, -0x7FAA7744, 0x89A88942, 0x81AA8143, 0x89AA8940, 0x84AA8541, 0x8BA98641, 0x82AA8243, 0x7CAA7844, -0x73AB8643, 0x85AA8541, 0x82AA7F43, 0x7FA98244, 0x86AB8042, 0x82AA8342, 0x86A98742, 0x85A98443, -0x7DAA8343, 0x7EAB7F42, 0x88AA7E42, 0x7AAA8243, 0x89A88A42, 0x82A98543, 0x7BAA8144, 0x88AA8241, -0x80AA7D43, 0x7FAB8542, 0x7CAB8243, 0x78AB8243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0094776A, 0x78A97D52, 0x7CAA844F, 0x88AA884D, 0x89A98B4C, 0x8EA9944C, 0x91AA8A4C, 0x89AA864E, +0x80A78152, 0x80A58353, 0x8EA68F4F, 0x80AB7251, 0x66AA5559, 0x52A96759, 0x73A97952, 0x7BA96A53, +0x75A78C52, 0x8BA68252, 0x71A86956, 0x5DA85C5A, 0x73AB6B53, 0x71AA7055, 0x66AA6A56, 0x6AAB6B53, +0x6BAA7052, 0x84A69C4F, 0x9CA4944F, 0x8DA68151, 0x82A9894E, 0x80A87951, 0x84A97152, 0x71A48556, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6683,15 +7563,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958661, 0x7FAB7B44, 0x78AB7D44, 0x7FAB8042, 0x85A99141, 0x8BAA8A41, 0x83A98442, 0x87AB8641, -0x83AB8442, 0x88A98941, 0x8DA88C41, 0x82A97745, 0x7AAA7F43, 0x88A98F41, 0x88AA8342, 0x7BA97846, -0x7CAA7F44, 0x86AA8143, 0x89AA7E43, 0x78AB7943, 0x7DAB7F44, 0x78AA8243, 0x80AB7D42, 0x83AB8141, -0x87A98143, 0x81AB8142, 0x82AA8341, 0x80AB8541, 0x85A98A42, 0x81AA8843, 0x89AA7E42, 0x7DAB8142, -0x83AC7942, 0x81AA8742, 0x7DAA7D43, 0x8AA98442, 0x7AAA8642, 0x83A88C43, 0x89A98B42, 0x89AA8441, -0x7FAA7544, 0x89A98A42, 0x7FAA7F44, 0x87AA8741, 0x85AB8242, 0x89AA8741, 0x83A98342, 0x7CAA7944, -0x6FAB8444, 0x86AA8541, 0x84AA8042, 0x80AA7B44, 0x89A98542, 0x82AA8542, 0x85A98743, 0x8CA97F43, -0x86AA8142, 0x80AB8242, 0x86A97F43, 0x79AB8442, 0x8EA88842, 0x86A98443, 0x7BAA8543, 0x87AA8342, -0x7CAA8043, 0x7FAA8642, 0x7DAB8243, 0x76AB8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x88AA7C4E, 0x63AF4B54, 0x5BAA7754, 0x7AA87952, 0x68AA6356, 0x62A97754, 0x7CA88352, 0x76AA8150, +0x79A88151, 0x78A57256, 0x83A76354, 0x78A58054, 0x73A86D55, 0x78A96055, 0x62A85D59, 0x68A86957, +0x77A77754, 0x89AC6F50, 0x5FAA5E56, 0x6FAA5D54, 0x63AA7853, 0x7CA68053, 0x70A5685A, 0x6AA56E5A, +0x66A96A56, 0x76A96256, 0x7AA86E53, 0x7EA97F50, 0x7FA88850, 0x61A56A5A, 0x73A67356, 0x76AB5554, +0x5DAA7F53, 0x81A77752, 0x70AB6453, 0x72AC7850, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6723,15 +7603,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958661, 0x80AB7B43, 0x74AB7D44, 0x7DAC8042, 0x81A99141, 0x8BA98741, 0x82A98742, 0x87AA8641, -0x84AA8242, 0x88A98C41, 0x8FA88841, 0x7FA97A44, 0x7AAB7F43, 0x88AA8B41, 0x84AA8342, 0x7AA97945, -0x7BA98744, 0x83AA8242, 0x86AA7B44, 0x76AB7B44, 0x7FAB7B43, 0x7CAA8043, 0x81AB7742, 0x80AA8642, -0x89A97B43, 0x82AB8641, 0x80AB8B41, 0x7FAB8741, 0x85AA8741, 0x83A98743, 0x89AA7E42, 0x7EAB8242, -0x88AB7F41, 0x7BAB8642, 0x82AA7E43, 0x88A98842, 0x7CAA8442, 0x83A98843, 0x87A98842, 0x89AB8641, -0x80AA7644, 0x84A98E42, 0x81AA8043, 0x88AA8641, 0x89AA8441, 0x8AAA8841, 0x83A98443, 0x7CAA7744, -0x6DAB8044, 0x86AA8542, 0x84AA7C43, 0x7EAA8143, 0x7AA98744, 0x85A98143, 0x82A98743, 0x82AA7D44, -0x86AB7F42, 0x7FAB8542, 0x83AA7D43, 0x7BAA8642, 0x8DA88442, 0x88A97F43, 0x7DAA8543, 0x87AA8442, -0x7AAB8143, 0x82AA8142, 0x81AB7E43, 0x75AB8343, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00956969, 0x68AB6553, 0x68AA6F54, 0x71AA6C54, 0x6AAA6B55, 0x6CAA6C55, 0x6CAA6B55, 0x6BAA6656, +0x5FAB5959, 0x5DA95F5A, 0x64A96559, 0x70AA7A53, 0x76AA6C54, 0x66A86F56, 0x7DA78252, 0x87A77D53, +0x72A67258, 0x67A76358, 0x6EA97854, 0x73AB7851, 0x7DA86757, 0x5CAC5557, 0x69AB6953, 0x67AB7A51, +0x8AA58752, 0x7EA57555, 0x75A87A54, 0x74AA7651, 0x77A87D52, 0x88A97B50, 0x7DA98C4E, 0x53A5765B, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6763,15 +7643,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948761, 0x83AA7A44, 0x73AB7A44, 0x7CAB8242, 0x7EA98F42, 0x8BAA8A41, 0x80A98842, 0x88AA8442, -0x85AA8042, 0x86A98B41, 0x8FA98741, 0x7CAA7845, 0x7DAA8242, 0x88AA8941, 0x82AA8542, 0x78A97A45, -0x7BA98943, 0x84AA8242, 0x83A97C43, 0x75AA7F44, 0x7DAB7C44, 0x7FAA7F43, 0x84AB7742, 0x80AA8642, -0x89A97B43, 0x81AA8441, 0x81AB8441, 0x86AB8241, 0x85A98842, 0x81AA8942, 0x89AA8141, 0x7FAB8342, -0x85AA8441, 0x7CAB8042, 0x85AA8142, 0x85A98643, 0x7EAA8342, 0x83A98344, 0x85A98942, 0x88AA8541, -0x82AA7644, 0x81A98E42, 0x83AA8143, 0x87AA8441, 0x87AB8541, 0x88AA8B41, 0x83A98443, 0x7BAB7844, -0x6EAB7B44, 0x85AA8642, 0x85AA8142, 0x7CAA7F44, 0x7EAA7845, 0x7DAB7F43, 0x81AA7E44, 0x7DAA8743, -0x80AB8042, 0x7FAA8842, 0x81AA7B43, 0x7EAA8842, 0x8DA88242, 0x86AA7C42, 0x7EAA8643, 0x84AA8442, -0x78AB7E43, 0x8AA97E43, 0x83AA7D43, 0x78AB8442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x73AF6B4D, 0x74AA844E, 0x76AE5950, 0x63A97B53, 0x77A86D54, 0x61AB5D56, 0x6CA88353, 0x8DA97B50, +0x77A88052, 0x82A77753, 0x7BA47D56, 0x66A87D55, 0x77A76D55, 0x70A87753, 0x5AA7635A, 0x5EA87158, +0x6CA97254, 0x74A88852, 0x78AC5F52, 0x60A96B57, 0x6AAA6353, 0x57AA6E55, 0x6FA97753, 0x72A86954, +0x67AA7154, 0x71A86257, 0x7BA86F54, 0x86A67E51, 0x76A98150, 0x7CA76556, 0x65A57459, 0x75AA7752, +0x60AB5955, 0x6FAA8351, 0x7AA97752, 0x7BA97452, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6803,15 +7683,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958062, 0x85AA7D43, 0x75AB7644, 0x7BAB8042, 0x7BA98C42, 0x8DAA8D40, 0x81A98743, 0x87AA8542, -0x84AA8342, 0x81A98A42, 0x8EA98941, 0x7BAA7845, 0x7CAA8143, 0x88AA8A41, 0x81AA8343, 0x7CAA7945, -0x79AA8743, 0x86AA8542, 0x85AA7C44, 0x74AA7F44, 0x7EAB7E43, 0x7DAA8143, 0x84AB7742, 0x80AA8741, -0x88A97D43, 0x7EAA8741, 0x84AB8241, 0x81AB8441, 0x88A98841, 0x80AA8942, 0x8AAA8042, 0x7DAA8243, -0x81AA8C40, 0x7DAB7D42, 0x86A98342, 0x85A98443, 0x7FAB8242, 0x84A98044, 0x85A98942, 0x86AA8741, -0x84AA7843, 0x7DA98E43, 0x85A98044, 0x86AA8342, 0x84AA8442, 0x86AA8A42, 0x84A98543, 0x7CAB7A44, -0x72AA7745, 0x84AA8841, 0x88AA8541, 0x7FAA7E44, 0x7EAA7F44, 0x79AA7945, 0x7BAA7E44, 0x82A98243, -0x7CAB7E42, 0x84AA8842, 0x7DAA7C44, 0x81AA8E42, 0x89A98342, 0x81AB7E43, 0x81AA8742, 0x84AA8243, -0x79AC7F42, 0x8BA97F42, 0x84AA7743, 0x7DAB8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0092796B, 0x76A57358, 0x77A67557, 0x77A67256, 0x78A77256, 0x73A86E54, 0x69A95E57, 0x65A96F57, +0x74A97653, 0x7CA87652, 0x7AA77D53, 0x7FA68153, 0x7DA57856, 0x71A3715A, 0x64A75B5B, 0x61A86659, +0x70A96F54, 0x70AC7851, 0x72AB6854, 0x67A95858, 0x58AC6755, 0x64AB5A55, 0x6FA77D55, 0x82A57354, +0x73A97153, 0x76A9864F, 0x89A88250, 0x77AA7353, 0x82A98050, 0x83A9864E, 0x82AA834E, 0x7AA66458, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6843,15 +7723,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x8BAA8242, 0x7AAA7345, 0x7EAB7C42, 0x7FAA8243, 0x8EA98E40, 0x86AA8242, 0x86AA8642, -0x83AB8242, 0x7FAA8642, 0x89AA8D40, 0x80AA7744, 0x79AA7F44, 0x87A98C41, 0x83AA8242, 0x7FAA7A44, -0x77AA8444, 0x85AA8542, 0x85AA7E43, 0x74AA7D45, 0x7CAA7F44, 0x7CAB7E43, 0x84AA7742, 0x7DAA8442, -0x86A88043, 0x7DAA8641, 0x84AA8341, 0x83AB8541, 0x87A98741, 0x7FAA8B42, 0x87AA8142, 0x80AA8042, -0x7FAA8741, 0x83AB7B41, 0x84AA8242, 0x81A98343, 0x81AA8142, 0x83A97E44, 0x85AA8A42, 0x87AA8641, -0x80AA7644, 0x7BA98C43, 0x88AA8243, 0x85AA8442, 0x82AA8342, 0x83AA8B42, 0x83A98642, 0x7BAA7B44, -0x77AA7545, 0x83AA8941, 0x88AA8241, 0x80AA7D43, 0x7FAA8044, 0x7FAA7D44, 0x7FAA8143, 0x86AA7B43, -0x80AB7D42, 0x8AA98242, 0x7CAA8043, 0x88A98D42, 0x84A98542, 0x7FAB7F43, 0x87A98841, 0x84AA7E43, -0x7DAC8242, 0x87AA8242, 0x83AA7843, 0x82AB7F42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7DAB8E4F, 0x93AC814B, 0x73AB7B50, 0x70AE5552, 0x7AA88650, 0x75A86056, 0x63A86857, 0x7FA78951, +0x7BA97352, 0x86A87E51, 0x6DA58955, 0x7DA87553, 0x79A57855, 0x69A87055, 0x75A85756, 0x63A7675B, +0x79A77054, 0x7BA87D51, 0x8CAB7B4E, 0x64AB6256, 0x67A97454, 0x5FAB6F53, 0x5FAA5F56, 0x67AA6454, +0x66AA6754, 0x71A85058, 0x75A87853, 0x71A57A56, 0x7EAB6252, 0x89A87751, 0x68A86557, 0x70A67756, +0x7BA88151, 0x64AB5E54, 0x6DA97E53, 0x7DAB704F, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6883,15 +7763,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x88A98841, 0x80AA7644, 0x7BAB7E43, 0x82AA7B43, 0x8FA98D41, 0x8CAA8041, 0x82A98742, -0x82AA8442, 0x7DA98443, 0x87A98D41, 0x82AA7A43, 0x79AA7B44, 0x82A98C42, 0x86AA8043, 0x81AA7944, -0x7AAA7D44, 0x88AA8442, 0x83A98342, 0x73AA7E45, 0x7BAA7F44, 0x79AB7F44, 0x83AB7743, 0x7CAA8142, -0x88A98342, 0x7CAB8442, 0x86AA8541, 0x82AB8641, 0x85A98842, 0x7FAA8C42, 0x85AA8143, 0x7FAA7E43, -0x80AA8341, 0x86AB7D41, 0x83AA8243, 0x81A98243, 0x82AA8042, 0x85A97C44, 0x84AA8A41, 0x88AA8841, -0x80AA7544, 0x78A98C43, 0x8AA98243, 0x84A98443, 0x81AB8642, 0x84AA8942, 0x83A98942, 0x7CAB7C43, -0x7CAA7245, 0x83AA8741, 0x83AA8641, 0x85A97F42, 0x7EA98244, 0x83AA8343, 0x84A98343, 0x7FAB7D42, -0x7CAB8442, 0x88A97E43, 0x7CAA8343, 0x8EA98B41, 0x80AA8542, 0x81A98143, 0x8AAA8741, 0x86AA7844, -0x7FAB8941, 0x81AA8642, 0x83AA7B43, 0x85AB7C42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00947E6A, 0x79A87C54, 0x78A97B53, 0x77A87D54, 0x7AA87854, 0x7DA97A51, 0x79AA7D50, 0x75AB7151, +0x71AC7250, 0x70AD744E, 0x70AD744F, 0x7AAC7D4E, 0x81AB834D, 0x82AA804F, 0x7CAB7650, 0x72AA6B54, +0x68A95D57, 0x59AA5F57, 0x68AB6E51, 0x6BAD6650, 0x66A96955, 0x60A86157, 0x6CA96D55, 0x74A78B51, +0x97A7864F, 0x74AB6854, 0x69AB6855, 0x65AA6556, 0x6AA97155, 0x82A97D51, 0x85AA814F, 0x8DA86D52, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6923,15 +7803,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967E60, 0x81AA8C42, 0x85A97F43, 0x7AAB8043, 0x83AB7D43, 0x87A98F41, 0x8CAA8141, 0x7FA98343, -0x86AA8441, 0x81AA7E44, 0x87A98D41, 0x86AB7C42, 0x7AAA7C44, 0x81A98A42, 0x88AA7E42, 0x80AB7A44, -0x7CAA7A44, 0x88AA8542, 0x83A98742, 0x75AA7D44, 0x7CA98343, 0x79AB8143, 0x81AB7B43, 0x79AB8042, -0x86A98643, 0x7EAB8342, 0x88AA8840, 0x84AB8841, 0x83A98942, 0x7FAA8D42, 0x81AA8243, 0x7EAB7F42, -0x81AB8041, 0x8CAB8040, 0x81AA8342, 0x83A98343, 0x83AA8143, 0x85A97B44, 0x85AA8A41, 0x88A98841, -0x7EAB7345, 0x78A98B43, 0x89A98443, 0x86AA8442, 0x80AA8542, 0x86AA8642, 0x83A98842, 0x7CAB7A43, -0x7EAA7344, 0x80AB8541, 0x86AA8841, 0x86AA8241, 0x80A98244, 0x86A98643, 0x82A97F43, 0x7CAB7F42, -0x7FAA8842, 0x81AA7E44, 0x82AA8642, 0x8FA98741, 0x82AA8342, 0x84A98643, 0x87AA8442, 0x82AA7644, -0x81AA8A41, 0x7CAB8542, 0x82AA7D44, 0x86AB7A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x92A9864E, 0x84AA7950, 0x79AB7950, 0x79AA7A50, 0x5FAB7053, 0x90A67552, 0x67A86656, 0x6EA78454, +0x89AA7650, 0x6DA78352, 0x79A87453, 0x92A47F53, 0x77A87354, 0x7AA66557, 0x74A96B53, 0x56A66B5B, +0x67A97555, 0x79A88350, 0x78A88251, 0x7AAC6252, 0x65AA6556, 0x6FA97752, 0x60AB7453, 0x66A95558, +0x5FA85F5A, 0x71A94F58, 0x75A78053, 0x69A47F57, 0x70A86E54, 0x5FA97B53, 0x87A67B53, 0x6DA86C54, +0x7FA28057, 0x77A67855, 0x7DA96F51, 0x66A96B55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -6963,15 +7843,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958060, 0x7EAA8B41, 0x89A98343, 0x7CAB8043, 0x80AA8242, 0x81A98E42, 0x8AAA8541, 0x7FA97F44, -0x88AA8341, 0x85AA7C43, 0x83AA8B41, 0x89AA7D42, 0x7BAA7E44, 0x82A98942, 0x8CAA7E43, 0x7FAA7C44, -0x7EAA7844, 0x89AA8542, 0x85AA8541, 0x75AA7C45, 0x7EA98444, 0x7CAA8143, 0x7EAB7E43, 0x79AB7F42, -0x85A98642, 0x7EAB7F42, 0x82AA8841, 0x87AA8740, 0x83A98A42, 0x7FAA9041, 0x82AA8143, 0x7DAB7F42, -0x81AB8041, 0x87AA8641, 0x81AA8942, 0x83AA8143, 0x81AA7F43, 0x88A97C44, 0x86AA8B41, 0x88AA8841, -0x7DAA7645, 0x78A98C43, 0x88AA8642, 0x88A98642, 0x7FAA8243, 0x86AA8442, 0x82A98643, 0x7DAB7644, -0x7BAB7744, 0x78AB8542, 0x88AB8441, 0x83AA8342, 0x7FAA8043, 0x80A97F44, 0x7FAB7F42, 0x82AB7B41, -0x86AA8741, 0x7FAA8143, 0x86AA8941, 0x8DA98042, 0x86AA8241, 0x83A98843, 0x87AA8341, 0x7FAA7844, -0x83AA8742, 0x7CAB8242, 0x7EAA7D44, 0x87AB7A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00937A69, 0x79A67E53, 0x79A67653, 0x73A67055, 0x73A57756, 0x73A57956, 0x71A77256, 0x76A96D54, +0x67AC6354, 0x66AE6852, 0x67AD6652, 0x68AC6952, 0x69AB6A52, 0x65AB6554, 0x6BAC6F51, 0x6BAD6950, +0x67AC6851, 0x5FAC5A55, 0x5BA7575B, 0x4CA74B5E, 0x59A96158, 0x71A88252, 0x84A87E52, 0x78AA7352, +0x6AAA6755, 0x63AB6A53, 0x71AC7151, 0x6CAA6553, 0x5BAA5D57, 0x5DA87657, 0x71AA8451, 0x79A88B50, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7003,15 +7883,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x7FAB8941, 0x8AA98842, 0x7EAA8243, 0x81AA8343, 0x7DA88D43, 0x87AB8940, 0x80A98143, -0x88AA8241, 0x87AA7E43, 0x81A98742, 0x8AAA7E42, 0x79AA7D45, 0x84A88A43, 0x8BA98143, 0x7EAA7B44, -0x7EAA7A44, 0x87A98642, 0x86AB8441, 0x76AA7844, 0x7EA98444, 0x7CAA8043, 0x7CAB8143, 0x79AB8142, -0x86A98443, 0x7DAB7B42, 0x84AA8841, 0x88AA8841, 0x85A98842, 0x81AA9141, 0x81A98343, 0x80AB7D42, -0x83AB8041, 0x80AA8C40, 0x82AB8841, 0x82AA8142, 0x7FAA7C43, 0x88A87F43, 0x85A98A41, 0x85AA8742, -0x7DAA7644, 0x77A88C44, 0x88A98542, 0x87A98542, 0x7DAB8143, 0x86AA8143, 0x83AA8643, 0x7FAA7344, -0x7CAB7944, 0x76AB8142, 0x8BAA7F41, 0x88A98142, 0x84AA7E42, 0x7DAB7D42, 0x81AB8141, 0x7BAB8641, -0x87AA8042, 0x7EAA8243, 0x83A98F42, 0x8AAA7E42, 0x87AA8241, 0x82A98843, 0x87AB8241, 0x7CAB7B44, -0x85AB8342, 0x7DAA8442, 0x7FAA7F43, 0x87AB7D41, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x66A87E53, 0x87A88051, 0x78AA7A50, 0x7DAA7B51, 0x7AAC6750, 0x73A88E50, 0x6CA96456, 0x6FA67F55, +0x8BA59152, 0x68AA6C54, 0x7BA97053, 0x74A59354, 0x7AA87753, 0x6FA67256, 0x62A86C57, 0x62A95C57, +0x65A97056, 0x85A77652, 0x7FA87E50, 0x7EAA794F, 0x6AAA6256, 0x64A96357, 0x7BAA6453, 0x66AA6F54, +0x6CA76A57, 0x6BA84C5A, 0x6BA68054, 0x7CA56E56, 0x7CA67654, 0x6EAA6753, 0x69AC7B50, 0x84A98150, +0x7FA87253, 0x69A77257, 0x73A46A59, 0x6AA87055, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7043,15 +7923,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x80AB8841, 0x8AA98642, 0x83AA8343, 0x82AA8342, 0x7EA88E43, 0x83AB8941, 0x84A98443, -0x87AA8242, 0x89AA7E42, 0x80AA8842, 0x89AA7D42, 0x78AA7D44, 0x82A88C42, 0x89A98343, 0x7FAA7B44, -0x7DAB7A44, 0x86A98542, 0x86AB8341, 0x78AB7744, 0x81A98344, 0x7FAA8244, 0x7BAB8242, 0x7AAB8242, -0x88A88343, 0x7BAC7942, 0x81AA8741, 0x8BAA8740, 0x86A98942, 0x83AB9240, 0x7FA98144, 0x7FAB7D42, -0x84AB8041, 0x7EAA8741, 0x85AA8242, 0x88AA8342, 0x81AA7D43, 0x88A98542, 0x83AA8A42, 0x81AA8642, -0x7FAA7844, 0x76A98844, 0x89AA8642, 0x85AA8542, 0x7CAA8342, 0x85AA7E43, 0x83A98543, 0x83AA7244, -0x7AAB7944, 0x78AB7E43, 0x8AAA8540, 0x87A98242, 0x81AA8442, 0x81AA7F42, 0x80AB7943, 0x7EAA8941, -0x86AA8042, 0x7FAB8143, 0x80A98F42, 0x88AB8042, 0x85AA8442, 0x83A88643, 0x86AA8241, 0x79AB8044, -0x87AA8242, 0x7FAA8442, 0x82AA8143, 0x87AB7E42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0095586C, 0x58AA5857, 0x56AB5158, 0x4EAA465D, 0x47AB525B, 0x5AAC6456, 0x69AC6A52, 0x71AA7550, +0x6FA97152, 0x6DA97052, 0x78A86F53, 0x6AA86057, 0x59A8535B, 0x54A8525C, 0x50A84B5D, 0x4CA94E5C, +0x4AAA545B, 0x5CAA6B55, 0x75AA7451, 0x7AAA7852, 0x71A96C55, 0x68A96A56, 0x6FA87954, 0x82A97A51, +0x6DAB7152, 0x7EA8894F, 0x8CA8874F, 0x7CA97152, 0x70A97753, 0x69A86357, 0x67A96F55, 0x89A97851, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7083,15 +7963,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00968061, 0x81AA8542, 0x8DA98342, 0x85A98342, 0x81AB8142, 0x86A88D43, 0x83AA8642, 0x86A88743, -0x88AA8341, 0x87A97F42, 0x80AA8942, 0x85AA7B43, 0x78AA7E44, 0x85A88B43, 0x88A88443, 0x81AA7D44, -0x7DAB7D43, 0x85AA8242, 0x87AA8141, 0x78AB7844, 0x82A98444, 0x80AA8343, 0x7EAA8442, 0x7BAC7F42, -0x8BA98742, 0x7AAB7942, 0x82AA8542, 0x85AA8641, 0x87A98A41, 0x84AB9140, 0x7CA98145, 0x7FAB7B42, -0x85AB8141, 0x7FAA7D42, 0x89AB7F41, 0x89A98442, 0x81A97D44, 0x85A98742, 0x85A98D41, 0x82AA8642, -0x81AA7A44, 0x75A98844, 0x8BA98541, 0x86AA8842, 0x7CAB8343, 0x83AA7E43, 0x80AA8143, 0x89AA7443, -0x77AB7A44, 0x7AAB7B44, 0x85AA8740, 0x7FAA8B41, 0x82A98042, 0x7DAA7B44, 0x78AB8043, 0x89A98641, -0x7FAB7A43, 0x81AA8143, 0x83AA8B42, 0x83AA8641, 0x81AA8542, 0x83A98743, 0x87AA8242, 0x77AB8144, -0x88AA8242, 0x7FAA8443, 0x81AA8442, 0x85AA8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x77A85E55, 0x68A87755, 0x8CA87750, 0x73AB7D50, 0x79AA7651, 0x6AAC7B4F, 0x84A76954, 0x68A77655, +0x82A58653, 0x89AA5853, 0x77A77753, 0x62A77557, 0x89A77C51, 0x79A86F55, 0x71A76B56, 0x6EAA6053, +0x62A86D58, 0x7CA98B50, 0x73A67455, 0x76A97650, 0x7AAC6E50, 0x5DA96956, 0x5CAA7855, 0x76AA6654, +0x67AC6A53, 0x6AA85158, 0x64A77555, 0x78A67256, 0x6BA66D59, 0x85A57D52, 0x68A96356, 0x6CAB7351, +0x77AB7B4E, 0x87A88A4E, 0x88A87D50, 0x7CA87852, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7123,15 +8003,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967C61, 0x81A98942, 0x87A98343, 0x86AA8242, 0x82AA7F42, 0x8DA78543, 0x87A98342, 0x86A98A42, -0x87A98542, 0x85A97F42, 0x83AA8842, 0x82AA7B43, 0x7BAA7F44, 0x85A88B43, 0x85A98044, 0x80AA8043, -0x80AA8043, 0x83AA8142, 0x86AB8142, 0x7AAB7B43, 0x83A98244, 0x7EA98543, 0x7BAB8342, 0x7AAB7F42, -0x8CA88842, 0x7AAC7B42, 0x84AA8142, 0x84AA8541, 0x88A98B41, 0x84AB9140, 0x7DA98444, 0x82AB7E41, -0x87A98043, 0x7EAB7E42, 0x80AB8242, 0x80AA8542, 0x81AA8043, 0x81AA8842, 0x82A98E42, 0x85AA8842, -0x83A97C44, 0x74A98644, 0x8EA98542, 0x85A98842, 0x7EAA7F43, 0x81A98144, 0x7EAA7E44, 0x89AA7942, -0x77AB7C43, 0x7BAA7D44, 0x80AB8741, 0x7EAA8242, 0x89A98641, 0x84A98242, 0x85AA8941, 0x85A98543, -0x82AB7B42, 0x82AA7D43, 0x88AA8741, 0x83AA8642, 0x81AA8243, 0x83A98A42, 0x87AA8342, 0x76AB8543, -0x8AAA8242, 0x83AA8343, 0x7EAA8442, 0x83AA8343, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00946C6A, 0x74A87554, 0x71A96E54, 0x6DAA6D55, 0x6AA96957, 0x5DA95E59, 0x6CAA7353, 0x6DAA6255, +0x59AA575A, 0x5CAB6356, 0x67AC6353, 0x5DAD5A55, 0x5AAC5856, 0x5CAA5C57, 0x5EAA5F56, 0x5CAA5F57, +0x5DAA5D58, 0x5CA95B58, 0x64A96C56, 0x79A78552, 0x84A77E52, 0x76A87553, 0x73A97952, 0x80A88451, +0x89A58A52, 0x89A78650, 0x80AA804F, 0x86A87752, 0x73A97853, 0x70A97653, 0x6DA86158, 0x6FAB8850, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7163,15 +8043,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D61, 0x87A98942, 0x80A98543, 0x86AA8342, 0x7EA98543, 0x88A88443, 0x86A98442, 0x8AA98942, -0x88A98642, 0x86A97E43, 0x85A98942, 0x7FAA7A44, 0x7CAA8343, 0x89A88B43, 0x82A98044, 0x7FAA8143, -0x80AA8343, 0x80AA8342, 0x85AA8142, 0x7AAB7D43, 0x88A88344, 0x7FAA8343, 0x7CAA8143, 0x7BAB7F42, -0x8BA98542, 0x7DAC7E41, 0x83AB8142, 0x85AA8641, 0x89AA8741, 0x82AB9040, 0x7EA98544, 0x83AC7D42, -0x84A98144, 0x7FAB7D42, 0x7CAA8742, 0x7FAA8942, 0x84AA8043, 0x81AA8C41, 0x7EA98A43, 0x8AAA8841, -0x84A97F43, 0x75A98244, 0x8CA98342, 0x83AA8743, 0x7DAA7E44, 0x7DA98244, 0x7DAA8144, 0x89AB7C42, -0x75AB7F43, 0x7BAB8043, 0x7AAA8542, 0x87AB7B41, 0x86A98941, 0x88AA8941, 0x87A98143, 0x83AA8142, -0x7EAA8343, 0x83AA7B43, 0x8CA98542, 0x84AA8242, 0x82AA7F43, 0x83A98D42, 0x87AA8242, 0x75AB8742, -0x8AAA8242, 0x84A98143, 0x7EAA8343, 0x84A98443, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6BA88553, 0x76A85F56, 0x6FA88951, 0x72AA7052, 0x75AA7552, 0x70AD774F, 0x81A77652, 0x72A77354, +0x7DA48354, 0x92A67552, 0x62A87E55, 0x7EAA6853, 0x87A78452, 0x80A87753, 0x66A86D57, 0x70A96654, +0x52AB5758, 0x75A87B54, 0x88A77353, 0x6EAA6D51, 0x70AA7152, 0x6AAB6A54, 0x74A95956, 0x78AA7C51, +0x68AC6853, 0x6AAC6B53, 0x68A96F53, 0x73A77853, 0x77A57256, 0x78A66757, 0x71A48555, 0x88A57C53, +0x6EA86757, 0x62A96657, 0x6DAD6A51, 0x6AAD6D50, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7203,15 +8083,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958A61, 0x87A98343, 0x83A88643, 0x85AA8142, 0x80A78845, 0x7EA98743, 0x84A98A42, 0x8AA88842, -0x83A98841, 0x85A97E43, 0x87AA8542, 0x7CAA7B44, 0x7FAA8742, 0x8CA88743, 0x82A98144, 0x80A98443, -0x7FAA8443, 0x7DAA8642, 0x83AA8042, 0x77AA8443, 0x85A98543, 0x82AA7E43, 0x7FAB7E43, 0x7BAB8142, -0x8BA98043, 0x7EAB7E42, 0x84AB8841, 0x84AA8541, 0x86AA8541, 0x80AB8F40, 0x7FA98644, 0x83AB7E41, -0x7DAA8143, 0x83AA8243, 0x7EAA7E43, 0x86AA8542, 0x88AA8143, 0x80AA8A41, 0x7FA98443, 0x8CAA8441, -0x86A98343, 0x78AA7A45, 0x8BA98542, 0x82AA8743, 0x7FAA7D44, 0x7BA98244, 0x7FAA8144, 0x87AB8442, -0x75AB7D44, 0x7BAB8143, 0x7EAA8342, 0x86AB8540, 0x7AAA8243, 0x86AB8442, 0x81AA8443, 0x80AB8642, -0x7FAA8442, 0x82AA7F43, 0x8AAA8541, 0x86AA8242, 0x82A98043, 0x81A98C42, 0x82AA7F42, 0x75AB8842, -0x89AA8042, 0x86AA8143, 0x7DAA8443, 0x84A98443, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00947369, 0x69AB6653, 0x62AB5856, 0x5CA96558, 0x73A67C56, 0x77A76C56, 0x74A87554, 0x6CA95C58, +0x58A95B5A, 0x72A97B53, 0x73A96A54, 0x67AB6D54, 0x71AB7352, 0x76AA7A51, 0x7DA97B52, 0x77A77853, +0x7AA78052, 0x81A67E52, 0x81A9804F, 0x84AB894D, 0x91A8924E, 0x8BA78750, 0x83A78251, 0x7EA87C53, +0x79A87253, 0x6FA86A55, 0x63AA6156, 0x63AA6655, 0x69AA7951, 0x7AA87A53, 0x80A76B54, 0x5EAA6F56, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7243,15 +8123,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958760, 0x86A88842, 0x87AA8342, 0x81A88744, 0x80A87F45, 0x85A98442, 0x8AA88842, 0x89A98242, -0x89A98841, 0x81AA8343, 0x85A97B43, 0x7AAB7F43, 0x83A98A42, 0x8CA98443, 0x81A88344, 0x83A98343, -0x84AA8442, 0x7CAB8542, 0x81AA7D43, 0x75AA8A43, 0x83A98544, 0x80AA7D43, 0x7EAB7D43, 0x7BAB8542, -0x88AA7F43, 0x7EAB8042, 0x83AB8242, 0x85AA8441, 0x86AA8541, 0x7FAB9140, 0x7EA98644, 0x86AB8241, -0x80AA7B43, 0x81A98144, 0x80AB7E42, 0x85AA8441, 0x88A98642, 0x82AA8442, 0x83AA8043, 0x8CAA8141, -0x88A98343, 0x7CAA7745, 0x8AA98942, 0x81A98A43, 0x80AA7F43, 0x7CAA8144, 0x82AA8143, 0x84AA8C41, -0x7AAB7743, 0x7FAB7E42, 0x7FAA7E43, 0x87AA8940, 0x80AB7A41, 0x7EAB8442, 0x87AB8341, 0x83AB8041, -0x82AA8342, 0x7CAA8443, 0x84A98842, 0x85AA8242, 0x83A97C44, 0x80A98D42, 0x7EAB7E43, 0x76AB8743, -0x8AAA8042, 0x86AA8442, 0x7EAA8242, 0x85A98343, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x59AC6C55, 0x7EA97652, 0x61AA7C54, 0x81A95E53, 0x6EAB7052, 0x71AB7A50, 0x83A87950, 0x6FA87155, +0x81A58852, 0x7FA48E54, 0x65AA6156, 0x82AA6A51, 0x72A78F52, 0x7CA87754, 0x6AA77356, 0x69A86E56, +0x65AC5F53, 0x54A87659, 0x72A98750, 0x76A77354, 0x6EAA7052, 0x6CAB7452, 0x77A87554, 0x5AA97B55, +0x78A96256, 0x69AB6D53, 0x61A95D57, 0x64A97155, 0x77A87A51, 0x78A77953, 0x78A67555, 0x75A87354, +0x71A77556, 0x77A67A54, 0x79A67154, 0x74A67A53, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7283,15 +8163,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x88A98241, 0x7DA98344, 0x83A87B46, 0x80A98343, 0x86A88942, 0x88A88542, 0x88A98A41, -0x89A88443, 0x83A98743, 0x7EAA7B44, 0x7FAA8242, 0x89A89042, 0x89A98442, 0x85A88044, 0x88AA8242, -0x87AA7E43, 0x82AB8442, 0x80AA7B43, 0x7FA98943, 0x84A97F44, 0x81AA7C44, 0x7CAA7D43, 0x7DAA8742, -0x87AA8042, 0x7DAB7F41, 0x7EAB8042, 0x84AA8042, 0x83AA8641, 0x82AB8E40, 0x7EA88544, 0x85AA8241, -0x89A98641, 0x7CAA7F44, 0x81AA8043, 0x7BAA8A41, 0x85A98A42, 0x84AB8042, 0x8AAA7B43, 0x89A98342, -0x86A98243, 0x7FAA7744, 0x86A98B42, 0x81A98A43, 0x85A97E43, 0x7DAA7E44, 0x85AA8143, 0x83AA8A42, -0x7FAB7443, 0x7EAB7A43, 0x85AA8442, 0x82AA8740, 0x86AA8441, 0x7CAB7E42, 0x82AB8242, 0x82AB7D42, -0x82AA8642, 0x7AAA8543, 0x80AA8542, 0x87AB8241, 0x85A97A44, 0x80AA8A42, 0x7DAB8042, 0x76AB8643, -0x86AA8142, 0x81AA8542, 0x83AA7D43, 0x8AA98142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00947F69, 0x6CAA6155, 0x6BA87456, 0x72AA6754, 0x63AA5C55, 0x5AA86859, 0x6FA77356, 0x78A76757, +0x67AA6E54, 0x63A95759, 0x57A85F5B, 0x61A76D59, 0x7CA78551, 0x85A78052, 0x82A67C53, 0x78A67B54, +0x7EA67B53, 0x80A68652, 0x84A68452, 0x82A58153, 0x86A48553, 0x84A78051, 0x7DA97651, 0x74A66E57, +0x6FA86D56, 0x6BAB6B54, 0x68AB6354, 0x60A76658, 0x69A86556, 0x6DAA7452, 0x73A87F52, 0x6CA7585A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7323,15 +8203,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948361, 0x81A98044, 0x7CA97A45, 0x80A97F44, 0x83A98443, 0x85A88443, 0x83AA8642, 0x8CA98742, -0x7FAA8343, 0x85AA7D43, 0x7BAA8243, 0x85A98C42, 0x92A88D41, 0x86A98244, 0x84A98942, 0x85AA8542, -0x82AA7F43, 0x89AA8241, 0x81AA7843, 0x8BA98542, 0x87A98044, 0x7DAA7844, 0x7CAB7B43, 0x81AA8942, -0x84AB7F42, 0x7DAB8142, 0x80AA8542, 0x84AA8242, 0x82AA8442, 0x82AB8A40, 0x80A98144, 0x86AA8342, -0x84AA8742, 0x85AA7B43, 0x7DAA7F43, 0x80AA7F42, 0x84AA8A42, 0x8AA98442, 0x89AA7E42, 0x85AA8842, -0x83A98143, 0x82AA7A44, 0x81A98B42, 0x82A98942, 0x88AA7D43, 0x7FAA7C44, 0x83AA8343, 0x83AA8443, -0x84AB7742, 0x7BAB7C43, 0x80AB8641, 0x80AA8042, 0x89AA8740, 0x86AB8341, 0x83AB8142, 0x81AB8142, -0x81A98443, 0x79AA8643, 0x7EAA8243, 0x85AB8341, 0x88A97B43, 0x7FA98743, 0x7EAB8143, 0x75AB8643, -0x86AA8442, 0x81AB8642, 0x86AA7A43, 0x87A98241, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6AAD5C54, 0x7EA76D54, 0x63A97B54, 0x89AB5452, 0x69AB7253, 0x66AA7453, 0x7FAA7D4F, 0x5BA87357, +0x71A67B55, 0x82A58553, 0x7BA95F54, 0x77A98151, 0x65A97E54, 0x89A77352, 0x72A86E56, 0x73A76A56, +0x69AB5E54, 0x5CA86359, 0x82A97152, 0x8BA77452, 0x75AA6751, 0x69AB6554, 0x72A87354, 0x76A85955, +0x7BAA6C53, 0x66AB7152, 0x5AA97357, 0x6AAA6955, 0x6AAA6A55, 0x6DA97254, 0x6FA97354, 0x75A88452, +0x8BA78B4F, 0x8AA68C50, 0x8DA68B50, 0x87A8854F, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7363,15 +8243,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947E62, 0x7BAA7E45, 0x83AA8543, 0x86A98443, 0x83A98243, 0x7DAA8042, 0x86A98542, 0x83AA8243, -0x85AA7F43, 0x7CAB7F43, 0x84A98742, 0x8DA98E41, 0x8CA98542, 0x81A88144, 0x8CAA8A41, 0x83AA8143, -0x7DAA8942, 0x86AA8441, 0x77AA8444, 0x89A88943, 0x81A98044, 0x7AAA7A45, 0x7BAC7C42, 0x86A98643, -0x7FAB7B42, 0x7EAB8042, 0x85A97F42, 0x82AA8842, 0x80AA8342, 0x83AB8940, 0x85A97E44, 0x87AA8542, -0x7DAB8142, 0x83A98442, 0x7BAA7D43, 0x7EAB7D43, 0x85AA8542, 0x8DA98742, 0x84AA8741, 0x7FA98B42, -0x7FA98144, 0x83A97F43, 0x7DA98A43, 0x85AA8543, 0x8AAA7E43, 0x7DAA7C44, 0x83AA8343, 0x85AA8244, -0x88AB7B41, 0x76AB7D43, 0x7AAB8342, 0x85AA7B42, 0x84AA8841, 0x89AA8941, 0x84AB8241, 0x84AA8242, -0x83A97E43, 0x7CAA8542, 0x7EAB8143, 0x84AB8341, 0x88A97B43, 0x7FA98643, 0x7EAB8142, 0x76AB8743, -0x86A98842, 0x7EAA8842, 0x88AA7C42, 0x81A98742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00946F6A, 0x74A67855, 0x70A87954, 0x87AA6D52, 0x61A97256, 0x70AA6855, 0x60A85B58, 0x54A66B5A, +0x72A67C55, 0x75A96A54, 0x73AB7651, 0x63A95E59, 0x5FA76858, 0x67A66958, 0x6FA57257, 0x75A77555, +0x77A67B54, 0x7EA78352, 0x82A77853, 0x79A67A55, 0x75A87854, 0x79A97C53, 0x7CA77C53, 0x80A68952, +0x87A58B51, 0x84A57D54, 0x7EA67B56, 0x72A87B55, 0x7CA96E53, 0x63A96956, 0x6FA97951, 0x7EA76656, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7403,15 +8283,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958561, 0x85A98743, 0x85A98343, 0x81AA7E43, 0x7FA98243, 0x84A98143, 0x80AB7F43, 0x80AA8143, -0x7EAB8242, 0x85AA8541, 0x89A98E41, 0x8AA98B42, 0x86A98243, 0x84A98B42, 0x89AA8541, 0x7BAA7E44, -0x89AA8741, 0x87AA7B42, 0x80AA8743, 0x86A98743, 0x82AA7A44, 0x7BAA7C44, 0x7CAB8242, 0x85A97E43, -0x7DAB7E43, 0x7BA98543, 0x83AA8741, 0x87AA8742, 0x85AA8341, 0x83AB8640, 0x8BA97B43, 0x88A98742, -0x78AB7D43, 0x7FAB8142, 0x83AB7B42, 0x7FAB7C43, 0x7BAB8342, 0x8BA88942, 0x82AA8B41, 0x7DAA8543, -0x83A97F43, 0x83A98443, 0x7BA98643, 0x88A98542, 0x88AA8442, 0x7CA97A44, 0x80A98643, 0x83AA8343, -0x86AB8041, 0x75AB7A44, 0x80AB7C42, 0x84AA8642, 0x7EAB8242, 0x87AA8740, 0x88AA8740, 0x87AA8141, -0x84A97D44, 0x7EAA8342, 0x81AA8343, 0x84AA8441, 0x88A97B43, 0x7DA98443, 0x80AB8242, 0x77AA8443, -0x88A98841, 0x7DAA8642, 0x87AA8442, 0x7AAA8243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x73A78952, 0x73A57058, 0x85A9894E, 0x65AB5E54, 0x6BAA6F53, 0x68A96555, 0x82AA7F4E, 0x57A97656, +0x74A67F54, 0x88A38154, 0x8DA86054, 0x6FA98651, 0x69AA6A55, 0x83A97E50, 0x66A67958, 0x5FA97056, +0x71AA6853, 0x60AB5757, 0x79A87954, 0x7CA8974F, 0x78A86E53, 0x63AC5C54, 0x66AA7554, 0x6DA96756, +0x56AA7D54, 0x6AAA6C54, 0x67AA6D55, 0x75A87B54, 0x78A87254, 0x71A97553, 0x76A87454, 0x73A77D55, +0x7CA67E55, 0x7EA68354, 0x82A88452, 0x8BA88A50, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7443,15 +8323,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x83A97F43, 0x7EA98243, 0x84A98443, 0x83AA8243, 0x82AA7F43, 0x7EAA7D43, 0x82AA8841, -0x87A98841, 0x8AA98E40, 0x90A99040, 0x8AA98443, 0x83A98A42, 0x8AAA8441, 0x7EAB7A44, 0x81AA8642, -0x89AA8941, 0x7CAA8343, 0x88A98742, 0x86A98343, 0x7BAA7B45, 0x7FAB7D43, 0x7DAA8443, 0x81AA7C43, -0x7FAB7D43, 0x83AB8142, 0x87AB8741, 0x86AA8641, 0x8BA98941, 0x87AB8440, 0x8CA97644, 0x88A88842, -0x78AB7E43, 0x7FAB8042, 0x84AA8641, 0x7CAB7C43, 0x7AAA8243, 0x84A98D42, 0x82AA8742, 0x81AA8142, -0x85A98044, 0x82A98743, 0x7CAA8343, 0x87A98642, 0x87A98942, 0x7AA97B45, 0x7CAA8344, 0x81AA8243, -0x82AB8942, 0x79AB7543, 0x7CAB7A43, 0x7CAB8342, 0x87A97B43, 0x81AA8542, 0x89AB8641, 0x83AA8542, -0x83A97E44, 0x82AA8043, 0x80AA8343, 0x84AA8541, 0x89A97B43, 0x7CA98244, 0x81AB8441, 0x77AA7F44, -0x88AA8A41, 0x80AA8043, 0x86AA8A41, 0x7FAB7A43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00957068, 0x71A98253, 0x75A77953, 0x72A66F57, 0x7FA98152, 0x66AB6A54, 0x69A96E56, 0x6DA75B58, +0x4EA6605C, 0x76A57257, 0x6FA96D55, 0x6CA97853, 0x7FAC754F, 0x6FA77456, 0x71A66C57, 0x66A86756, +0x6DA87356, 0x72A76D57, 0x6AA77457, 0x7BA68454, 0x8CA29252, 0x8DA48B51, 0x83A87850, 0x6DAA6C52, +0x63AB6254, 0x63AB6753, 0x69AB6D51, 0x79A98550, 0x7BAA7B51, 0x78A87354, 0x70A86B55, 0x80A78352, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7483,15 +8363,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948361, 0x86A88943, 0x88A98742, 0x85A98143, 0x7EAA7D44, 0x7FAA8342, 0x87AA8841, 0x8CA98F40, -0x91A99240, 0x8FA98C41, 0x88A98543, 0x86A98B42, 0x8BAA8541, 0x7DAA7645, 0x78AA8244, 0x89AA8941, -0x87AA7F43, 0x89A98942, 0x8BA98243, 0x82AA7B44, 0x7BAA8044, 0x7FAB7E42, 0x82A97D44, 0x7FAB7E43, -0x7FA98343, 0x83AB8740, 0x8DA89141, 0x8BA98641, 0x88AA8941, 0x81AA8442, 0x8AAA7A43, 0x86A88A43, -0x6EAB7545, 0x83AA8343, 0x85AA8641, 0x85AA7D42, 0x7DAB7843, 0x83AA8A42, 0x89AA8042, 0x89AA8142, -0x86A98242, 0x83A88943, 0x7FAA8043, 0x86A88843, 0x83A98A42, 0x7DA97F44, 0x7CA98144, 0x83AA8143, -0x83A98A42, 0x80AC7542, 0x77AB8143, 0x7BAB7F42, 0x86A98143, 0x78AA7E44, 0x81AA8243, 0x88A98742, -0x7DAA7C44, 0x82AA7F43, 0x7FAA8243, 0x86AA8841, 0x8BA98042, 0x7AA98145, 0x82AA8642, 0x7BAA7945, -0x86AA8841, 0x84AA7E43, 0x83AB8641, 0x89AA7D42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7BAA804F, 0x86A9824F, 0x7BAD5852, 0x5BA96856, 0x6FAB6A53, 0x68A96A55, 0x7FAA764F, 0x53A97955, +0x77A77A52, 0x87A38354, 0x8BA76055, 0x6AA97F54, 0x7FA96753, 0x7CAA8151, 0x6CA76858, 0x69AA6E54, +0x6CA97953, 0x61AC6354, 0x5DA98F53, 0x79A98B50, 0x8CA67353, 0x63AC6751, 0x58AC6155, 0x75A97353, +0x62AA5F56, 0x77A96D54, 0x70A96455, 0x7EA68A52, 0x80A67A53, 0x6DA87C54, 0x94A78450, 0x7CAA7152, +0x6BAC6654, 0x65AB6B54, 0x6FAB7751, 0x7FAA7A4F, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7523,15 +8403,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958561, 0x85AA8642, 0x86AA8941, 0x8BAA8B40, 0x8BAA8C3F, 0x8DAA903F, 0x8EAA8C3F, 0x8BAA8A40, -0x88A98842, 0x87A88943, 0x8DA88E41, 0x88AA8242, 0x7DAB7645, 0x75AA7D45, 0x83AA8542, 0x86AA7F42, -0x83A98D42, 0x8CA98842, 0x81AA7F44, 0x7AA97945, 0x82AB7F42, 0x82AA8143, 0x7DAB7F44, 0x7FAB7F42, -0x7FAB8142, 0x89A89341, 0x93A89041, 0x8DA98842, 0x88AA8B40, 0x88A98541, 0x89AA8242, 0x82A88A43, -0x7EAC7342, 0x71AA7D44, 0x82AA8242, 0x83AA8342, 0x7CAB7F43, 0x7EAA8442, 0x8BAA8342, 0x88AA8241, -0x87AA8641, 0x82A88744, 0x85AA7C43, 0x86A88643, 0x81AA8543, 0x84AA7B43, 0x7BAA7B45, 0x83AA7D43, -0x85A98742, 0x8AAC7A41, 0x76AA7E43, 0x80AB7F42, 0x84AA8941, 0x87A97944, 0x7AA98444, 0x87A88343, -0x7CAA7C44, 0x82AA7F43, 0x80AA8342, 0x85AA8741, 0x8AA98641, 0x78A97F45, 0x81AA8542, 0x80AA7644, -0x83AA8A41, 0x85AA8342, 0x81AA8442, 0x89A98841, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00946F6A, 0x83A87052, 0x67AA7A53, 0x74A77454, 0x67A77159, 0x79AA7852, 0x6AA97053, 0x69A86957, +0x69A7565A, 0x53A66E5A, 0x75A66F56, 0x6CAA5C56, 0x64AA7154, 0x7AA97F51, 0x82A98150, 0x7FA97F50, +0x83A8864F, 0x84A87E4F, 0x7EAA7D4F, 0x7AAA7A50, 0x77AA6E51, 0x67AB6A53, 0x6EAD6D51, 0x6FAC7051, +0x6FAC6B53, 0x64AB5B58, 0x5DAA5B58, 0x64AE6651, 0x5CAC7751, 0x71AB7952, 0x72A87054, 0x6CAB7651, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7563,15 +8443,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958660, 0x88AB873F, 0x85AB8640, 0x86AB8640, 0x86AB8641, 0x87AA8341, 0x85A98842, 0x8BA98A42, -0x8CAA8940, 0x86AA8042, 0x7FAB7B44, 0x79AB7945, 0x7BAB7E44, 0x82AA8342, 0x82AA7D43, 0x81A98A42, -0x8CA98942, 0x84A98343, 0x7CAA7945, 0x80AA8343, 0x82AA8642, 0x7FAA7C45, 0x7CAB7E42, 0x7FAA8143, -0x85AA8B41, 0x92A88B41, 0x89A98442, 0x84AA8842, 0x88A98741, 0x89AA8641, 0x86AA8B41, 0x7CA88844, -0x8BAA8640, 0x7DAC7342, 0x79AA8442, 0x85AA8542, 0x7EAA7C44, 0x7BAA8443, 0x86A98942, 0x84AA8841, -0x85AA8841, 0x85A98243, 0x89A97C43, 0x85A88843, 0x83AA8043, 0x84AA7B43, 0x7CA97945, 0x7EA97E44, -0x84A98442, 0x8BAB8141, 0x7AAB7A44, 0x81AB7A43, 0x7BAA8443, 0x86A98843, 0x82A87E45, 0x7FA98145, -0x7DAA7F43, 0x84AA7C44, 0x85AA8142, 0x87AB8741, 0x87A98B41, 0x7BA87F45, 0x82A98343, 0x84AB7642, -0x7AAA8743, 0x88A98442, 0x81AB7D43, 0x82AB8441, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB7244, +0x5EAF5153, 0x4BAD4E57, 0x67A96D53, 0x6CAC7052, 0x67AC6353, 0x6DAA7452, 0x74AB7250, 0x4EA97B56, +0x76A68652, 0x84A38C53, 0x89A75E55, 0x6DA87154, 0x87AA6752, 0x72AB7F51, 0x88A76356, 0x77AB5E53, +0x6CA96E55, 0x67AC5F54, 0x5DAB6E55, 0x8FA97850, 0x93A58351, 0x6FAA6651, 0x68AD5454, 0x67AA7254, +0x75A95A55, 0x68A97454, 0x69AA6854, 0x6DA77456, 0x85A66E54, 0x6FAA8152, 0x70AB6653, 0x60AA6F54, +0x66AB6854, 0x75AB7B51, 0x70A96D54, 0x6FA77854, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7603,15 +8483,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x7EAB7D43, 0x7EAB8143, 0x82AA8043, 0x7FAA7F43, 0x7FAA7F44, 0x7FAA7F44, 0x7FAA7D44, -0x7AAB7844, 0x7AAA7B45, 0x7CAA7D45, 0x81AA8542, 0x83AA7F43, 0x7DAA8143, 0x86A98941, 0x8BA98742, -0x82A98244, 0x7EAA7C44, 0x81AA8443, 0x82AB8442, 0x87AA7E44, 0x79AB7644, 0x7FAB7F43, 0x7EAB8641, -0x8CA88A42, 0x86A98343, 0x83AA8542, 0x83AA8441, 0x84AA8741, 0x8BAA8641, 0x86AA8C40, 0x76A88345, -0x83AA8941, 0x88AB8140, 0x77AC7943, 0x84AA8642, 0x84AA7B43, 0x7BAA7C44, 0x85AA8C42, 0x88AA8841, -0x82A98A41, 0x86A98343, 0x89A97D44, 0x81A98743, 0x85AA7F42, 0x84AA8143, 0x79A97B45, 0x79AA8144, -0x7FA98543, 0x85AA8B41, 0x7FAB7943, 0x7EAA8143, 0x7AAB7644, 0x81AA8642, 0x86A88743, 0x87A88343, -0x7CAB8143, 0x7EAA7944, 0x85A97F43, 0x89AA8841, 0x84AA8D41, 0x80A97C44, 0x81A88544, 0x84AA7E42, -0x75AB7F44, 0x8BAA8841, 0x84AA8242, 0x7EAB7C42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00928669, 0x7CA88252, 0x6DAB7451, 0x7AA67555, 0x68A86358, 0x6CA87F55, 0x78AA6E52, 0x7BA87154, +0x63A86659, 0x61A7555A, 0x6BA57E55, 0x77A67755, 0x77A87154, 0x62AA6456, 0x69A86D55, 0x6DA76A56, +0x6AA67057, 0x72A86D56, 0x6DAB7153, 0x7CAA8052, 0x84AA8151, 0x76AB6D52, 0x66AA6854, 0x71A87254, +0x72A87155, 0x71A97454, 0x7FA77B53, 0x71A86D56, 0x61AB6355, 0x65AA6F54, 0x77A87654, 0x70A86C54, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7643,15 +8523,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948062, 0x80A97D44, 0x7FAA8044, 0x81AA7E44, 0x7EAA7C45, 0x7BAA7946, 0x78AA7946, 0x7CAA7D45, -0x7EAA7F44, 0x81AA8044, 0x83AA8243, 0x81A98443, 0x86A98742, 0x89A98C42, 0x8AA88443, 0x7FA97A45, -0x79A97C45, 0x82AA8542, 0x84AB8641, 0x84AA7F43, 0x7AAA7745, 0x7AAB7E43, 0x7EAA7C43, 0x86A88F41, -0x87A98442, 0x80AA8242, 0x85AA8641, 0x88A98542, 0x84AA8941, 0x89A98B41, 0x89AA8B40, 0x7CA88545, -0x82AC7F40, 0x83AA8940, 0x84AC7841, 0x7CAA8642, 0x84A98043, 0x7BAA7A43, 0x7FAA8942, 0x8DAA8641, -0x84AA8842, 0x88A98442, 0x86A88643, 0x7DAA8643, 0x84A98043, 0x81AA8443, 0x78AA7C45, 0x7AA98144, -0x7FAA8243, 0x83AA8B42, 0x85AB7A42, 0x7BAA7F44, 0x7FAB7C43, 0x77AA8043, 0x81AA8442, 0x82AA7F42, -0x7EAA8243, 0x81A97C44, 0x86AA8142, 0x8AA98741, 0x84AA8841, 0x86A97D44, 0x7DA88344, 0x83AA8442, -0x7BAB7843, 0x81AB8941, 0x85AA8442, 0x86AA8342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DA97145, +0x71A76756, 0x6DAD7251, 0x7AAE754E, 0x6BAC6E51, 0x65A96D54, 0x7CAA7850, 0x66AA6554, 0x5CAA7056, +0x71A77D53, 0x83A38B53, 0x89A75A55, 0x6DA86855, 0x83AA6C52, 0x64AC7553, 0x8BA96754, 0x6DAA6555, +0x69A96B55, 0x72AC5A53, 0x6DAD6053, 0x86AA7E4F, 0x7FA88D50, 0x7DA86255, 0x6EAC6352, 0x52AC7055, +0x75AB6D52, 0x58AA6A56, 0x6FA86E55, 0x6FA96D55, 0x7AA77454, 0x73A98551, 0x67AB6A53, 0x61AB6655, +0x7FA9884F, 0x76AA6453, 0x72A78053, 0x82A98050, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7683,15 +8563,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948562, 0x84A88244, 0x84A98344, 0x84A98244, 0x85A98243, 0x83AA8043, 0x7EAA7A44, 0x7DAA8143, -0x83AA8443, 0x86AA8342, 0x85A98642, 0x87A98842, 0x86A88443, 0x82A88245, 0x7CA97946, 0x7BAA7D45, -0x81AA8143, 0x81AB8442, 0x82AB7E43, 0x7EAA7745, 0x78AB7E43, 0x7CAB7843, 0x81A98743, 0x89A98342, -0x83AA8242, 0x84AA8A41, 0x8BA98941, 0x84AA8342, 0x88AA8741, 0x89AA8A40, 0x88AA8941, 0x85A97C44, -0x8DAC8A3F, 0x85AB8440, 0x88AB8241, 0x79AB8142, 0x8AA98741, 0x7BAA7B44, 0x7AAA8144, 0x8FA98841, -0x87AA8442, 0x8BA98541, 0x82A88B44, 0x81A98643, 0x85A98343, 0x80AA8442, 0x7CA97C44, 0x7FA97E45, -0x83AA8143, 0x84A98742, 0x8CAC7D41, 0x7AAA7E44, 0x7FAB7B43, 0x7DAB7A43, 0x7FAA7F42, 0x7BAB7F43, -0x80AA8142, 0x81AA7744, 0x85A98043, 0x88A88642, 0x86AA8241, 0x8BA97F42, 0x7AA97F45, 0x82A98442, -0x84AB7D42, 0x78AA8344, 0x8BAA8640, 0x82A98442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00938569, 0x87A67B53, 0x74AC7550, 0x67A87756, 0x70A86356, 0x74A67656, 0x82A97351, 0x74A78B51, +0x66A86058, 0x67A6605A, 0x5AA96857, 0x72A68553, 0x82A67D54, 0x79A77954, 0x7AA97A52, 0x7FA98052, +0x7FA98451, 0x87A97C50, 0x71AA6E52, 0x65A96B55, 0x78A77355, 0x68A76258, 0x5DA86457, 0x64A86655, +0x6AA96E54, 0x75A77254, 0x67A76F55, 0x74A77E54, 0x84A86E54, 0x62AB6754, 0x71AA7253, 0x71A77255, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7723,15 +8603,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947F62, 0x7FA97F44, 0x7FAA7F44, 0x7FA98144, 0x80A98443, 0x83A98543, 0x81A97E44, 0x7AA97D45, -0x7EA87F45, 0x7CA87D45, 0x7CA87D45, 0x7EA97F45, 0x82A88444, 0x84A88543, 0x83AA8143, 0x83AB8442, -0x86AA8441, 0x7FAA7F43, 0x7BAA7845, 0x78AB7A43, 0x7BAB7B42, 0x7FA98343, 0x82A98243, 0x82AA8143, -0x86A98E41, 0x91A98A41, 0x83AA8043, 0x81AA8144, 0x81AA8842, 0x87AA8841, 0x89AA8641, 0x8DA97A43, -0x86AB8D41, 0x8FAB883F, 0x83AA8641, 0x81AC7642, 0x86A98A41, 0x83AA7B44, 0x7CAA7E44, 0x87A98C41, -0x86AA8342, 0x8AA98741, 0x80A88B43, 0x86A98342, 0x85A98443, 0x7EAA8143, 0x83AA7744, 0x7CA97E45, -0x85A98143, 0x86AA8642, 0x8CAB8641, 0x7DAB7C44, 0x7EAA8342, 0x7AAB8142, 0x7AAA7B44, 0x7EAB7D43, -0x7DAB7E43, 0x81A97545, 0x83A98542, 0x82A88543, 0x87AB7B42, 0x8BAA8541, 0x7EAA7D44, 0x81A88543, -0x85A98841, 0x7CAB7A43, 0x80AA8742, 0x86AB8141, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DA97845, +0x6FB16C4D, 0x6DAF6F4F, 0x68AB5D54, 0x58A86358, 0x74AA7651, 0x75AC6651, 0x67A85058, 0x72AA6554, +0x82A77752, 0x84A48653, 0x8AA85D54, 0x6FA86856, 0x7FA96F52, 0x67AC6855, 0x82AA7151, 0x62A97056, +0x65AA6755, 0x6BAC5C54, 0x6DAB6F53, 0x6BAB8C4F, 0x77A88E50, 0x8AA67E53, 0x64AB7551, 0x58AD5E56, +0x75AB7350, 0x6FAA5955, 0x6BA96D55, 0x6FAA7552, 0x70A97554, 0x79A98151, 0x78AA7950, 0x54AA7356, +0x86AA774F, 0x6EA97452, 0x7CA68452, 0x89A9964E, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7763,15 +8643,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958761, 0x85AA8642, 0x84AA8542, 0x84A98743, 0x85AA8442, 0x86AA8542, 0x85AA8741, 0x83AB8142, -0x81AB8241, 0x81AC8341, 0x81AC8341, 0x85AB8640, 0x88AB8940, 0x88AA8841, 0x86AB8441, 0x82AA7F42, -0x7EAA7A44, 0x78AB7B44, 0x7EAB8042, 0x7FAC7D41, 0x7DAA7F43, 0x7BAA7B44, 0x7FAA8043, 0x83A98C41, -0x91A98A41, 0x83AB7E42, 0x7EAB7E43, 0x7DAA7D44, 0x7FAA8243, 0x89AA8641, 0x89AA8841, 0x8DAA8042, -0x8AAA8641, 0x86AB8B40, 0x86AB8440, 0x86AB7D41, 0x7AAA8C42, 0x8AA97E43, 0x7DAA7D44, 0x82A98C42, -0x88AA8142, 0x88A98741, 0x83A98543, 0x90A98342, 0x85A98443, 0x83A97D43, 0x84AA7942, 0x7AA97F45, -0x7FAA8643, 0x87AA8741, 0x85AA8B41, 0x7DAB7A43, 0x7FAA7C43, 0x84AB7D41, 0x82AA7A43, 0x79AB7744, -0x7BAA7B43, 0x80AA7345, 0x83A98342, 0x7EA88744, 0x86AA7D43, 0x82AA8A41, 0x83AA7F43, 0x7EA88344, -0x86A88942, 0x89AA8041, 0x7BAA7A44, 0x7FAA8543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00938169, 0x85A87452, 0x6BAC7451, 0x68A87156, 0x69A86C56, 0x76A67655, 0x79AA7651, 0x80A69151, +0x6EA95D58, 0x50A96458, 0x6AAA6953, 0x6CA96C53, 0x79A58054, 0x71A76B56, 0x6AA87356, 0x77A97652, +0x62AC5F54, 0x72AA8551, 0x75A5575A, 0x48AB5259, 0x62AB7A52, 0x88A59251, 0x89A68251, 0x7BA97751, +0x77AA7252, 0x6CAB6955, 0x72A87854, 0x7AA66D57, 0x73A78154, 0x78A86855, 0x73AA6D53, 0x73A87455, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7803,15 +8683,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948062, 0x83A98343, 0x83AA8143, 0x83AA8043, 0x80AA7F44, 0x80AB7F43, 0x7DAB7F43, 0x7EAA7F43, -0x7FAA8242, 0x81AB8442, 0x81AA8042, 0x82AA8442, 0x84A98342, 0x81A98243, 0x7DAA7C44, 0x7BAA7B44, -0x7BAA7D43, 0x80AB7E42, 0x7EAB7E41, 0x7FAA7C44, 0x77AA7545, 0x7AAA7D44, 0x81AA8842, 0x8CA98A41, -0x83AB7F42, 0x80AB7D43, 0x7AAB7A43, 0x7BAB7A44, 0x7DAB7944, 0x7DAB8642, 0x85AA8A41, 0x89AA8841, -0x8FAA8A40, 0x89AA8541, 0x85AB8541, 0x85AA8541, 0x7BAB8142, 0x8EA98342, 0x7DA97D44, 0x80A98943, -0x8CAA8441, 0x80AA8942, 0x85AA8342, 0x8FA88742, 0x84A98243, 0x85A97D44, 0x83AA7F43, 0x77A97F46, -0x7EAA8343, 0x85A98941, 0x85AA8941, 0x86AB7C42, 0x7DAA7D44, 0x81AA8442, 0x7BAB8242, 0x7DA97644, -0x7AA97B45, 0x81AA7445, 0x83A98842, 0x7EA88744, 0x81AA8143, 0x7BAA8542, 0x8BA98642, 0x80AA8043, -0x87A78844, 0x84A98443, 0x87AA8141, 0x7DAA7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DA87946, +0x41A94160, 0x45A9565D, 0x69A97954, 0x74AC6850, 0x70AA7153, 0x65A86756, 0x59AA7654, 0x71A97C53, +0x7DA76D54, 0x89A68B51, 0x80AA5055, 0x78A86754, 0x7FAA7351, 0x6BAD6652, 0x7FAA7451, 0x56A97657, +0x66AA6256, 0x69AC6E52, 0x5CAC7454, 0x6AAA7D52, 0x83A97951, 0x8FA68F50, 0x74A96A52, 0x73AC5455, +0x69AB7C53, 0x7EAA7550, 0x59AA6657, 0x6CA96F54, 0x79A97252, 0x73A88053, 0x7DAC6750, 0x6FA97254, +0x84AA784E, 0x60A97455, 0x71A68454, 0x90A8864F, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7843,15 +8723,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948561, 0x85A98742, 0x85A98342, 0x83A98143, 0x83A88443, 0x83A98543, 0x81A98243, 0x84AA8043, -0x7DAC7C43, 0x7DAC7E42, 0x7EAC7D42, 0x7EAB7F42, 0x7FAB7F42, 0x7DAB7D43, 0x7FAB8141, 0x7FAC7E42, -0x7EAB7E42, 0x7AAB7943, 0x79A97745, 0x73AA7347, 0x78AA7B44, 0x81A98942, 0x89A98642, 0x84AA8242, -0x7FAA7D43, 0x7CAB7F42, 0x82AB8142, 0x80AB7D42, 0x79AA7A44, 0x79AA8444, 0x82AA8942, 0x84AA8C41, -0x88AA8F40, 0x88AA8841, 0x85AB8741, 0x86AA8741, 0x82AB7C42, 0x8BA98741, 0x81AA7D43, 0x80A98843, -0x8DA98941, 0x7BAA8643, 0x86AA8142, 0x8CA88D42, 0x83AA8343, 0x82A98144, 0x7EAA8143, 0x76A97C45, -0x7EAA8144, 0x89A98541, 0x88AA8541, 0x89AB7F41, 0x7EAA7D43, 0x7CAA8343, 0x80AA7D43, 0x80AA7F43, -0x77A97B46, 0x82AA7344, 0x81A98742, 0x84A98543, 0x85AA8142, 0x7DAA7E43, 0x85A98B41, 0x86AA8142, -0x7EA98443, 0x84A87F44, 0x7FA98143, 0x86A98942, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00939467, 0x76AB6652, 0x74A96954, 0x62A96856, 0x72A86955, 0x77A86F55, 0x75AA7650, 0x84A58052, +0x6AA8535A, 0x59A96656, 0x60AA6555, 0x6DA77D53, 0x75A96654, 0x60AB6955, 0x67A96555, 0x5BAC7053, +0x7CA87253, 0x61A95957, 0x68AB7452, 0x86A78750, 0x7BAB6F50, 0x6BAD6B51, 0x65AD6D54, 0x79AB8051, +0x83AB834F, 0x80AC834F, 0x82AB814F, 0x79AA7951, 0x7BA67655, 0x76A97853, 0x65AA7B52, 0x73A97254, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7883,15 +8763,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957762, 0x77AA7A44, 0x79AA7B44, 0x7DAB7F42, 0x7EAB8042, 0x81AA8242, 0x81A98342, 0x83A98043, -0x7DAA7F44, 0x7FA97F44, 0x7EAA7D44, 0x7EAB7C43, 0x7DAB7B43, 0x7BAB7A44, 0x7AAB7A43, 0x77AB7644, -0x72AA7246, 0x72AA7347, 0x78AA7945, 0x7BAA8143, 0x87A98741, 0x86AA8243, 0x83AA8343, 0x80AA7E43, -0x83AB8542, 0x82AB7F41, 0x81AA8242, 0x82AB8541, 0x81AA7844, 0x7EA97C44, 0x84AA8242, 0x8CAA8A41, -0x7DAA8742, 0x8BAA8841, 0x84AB8641, 0x86AA8641, 0x85AB7E41, 0x82AA8D41, 0x80AA7C44, 0x81A98743, -0x8CA88F42, 0x7EAA8043, 0x86AA8142, 0x83A88F43, 0x85AA8442, 0x81A98243, 0x7CA98044, 0x7BAA7944, -0x7DAA8144, 0x8AA98442, 0x87A98741, 0x87AB8541, 0x7FAA7C43, 0x7CAA7C44, 0x86AA7C42, 0x7DAB8142, -0x7FA97F44, 0x80AA7345, 0x7FA88843, 0x86A98043, 0x86A88443, 0x81AA7D43, 0x7EAB8641, 0x89AA8841, -0x87A98242, 0x7EAA8244, 0x83A87F45, 0x7FA98143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DA97F45, +0x64AD5F53, 0x5EAC5E56, 0x65A96D56, 0x6EA96753, 0x6EA86355, 0x53AB6956, 0x75AA7553, 0x74AA7651, +0x66A77655, 0x8FA68551, 0x73AA6354, 0x7EA86554, 0x82A97251, 0x6CAE7051, 0x7CAA7651, 0x4BAA7C57, +0x67AA6A55, 0x67AB6F53, 0x57AD7853, 0x64AA7554, 0x83A97451, 0x89A88D4E, 0x95A86451, 0x71AB7251, +0x5FAA7156, 0x6FAA7752, 0x7AA96554, 0x6BA97055, 0x62A97D54, 0x76A97453, 0x6DAA7652, 0x6BA97F52, +0x72A98251, 0x7AAA5A54, 0x6BAA7553, 0x74A78653, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7923,15 +8803,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957862, 0x78AB7844, 0x77AB7544, 0x73AA7146, 0x71AB7545, 0x78AC7C43, 0x7FAB7F42, 0x82AB8341, -0x81AA8242, 0x80AA8142, 0x84AA8142, 0x7FA97B44, 0x78AA7645, 0x76A97546, 0x74A97247, 0x73AA7446, -0x72AA7646, 0x79AA7F43, 0x83AB8342, 0x85AA8542, 0x81AA7F44, 0x7EAA7F43, 0x81AA8543, 0x88AA8542, -0x80AB8242, 0x87A98B41, 0x8CA98B41, 0x86AA8242, 0x81AA8442, 0x7EAA7C44, 0x7EAA8143, 0x8BAA8541, -0x73AA7F44, 0x84AA8E41, 0x87AA8242, 0x86AB8541, 0x86AB8041, 0x80AA8A41, 0x85AA7E43, 0x7EA98743, -0x8BA88D42, 0x85AA7A43, 0x86A98142, 0x7CA98A44, 0x89AA8642, 0x7FA98144, 0x7EAA7F44, 0x7DAB7A43, -0x7BAA8443, 0x86A98A41, 0x83AA8642, 0x86AA8640, 0x80AB7E43, 0x7CAA7B44, 0x7FAA8642, 0x7EAB7F43, -0x82AA8143, 0x7DA97545, 0x7DA98743, 0x84A98443, 0x80A88744, 0x86AB7D42, 0x7DAA8143, 0x86AB8740, -0x89A98D41, 0x8BAA8341, 0x7DAA7D43, 0x82A88744, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00966768, 0x6AAB6C53, 0x65A96558, 0x6EA96655, 0x61A87057, 0x72AB7B50, 0x75A77F52, 0x6DA95A57, +0x54A86559, 0x63A96655, 0x70A87C52, 0x65AC6254, 0x6BAC6E51, 0x66AB6554, 0x64AA6855, 0x64AA7353, +0x6BA85E57, 0x5FAB6E53, 0x77A87853, 0x6FAB6552, 0x66AB6D54, 0x80A89550, 0x99A5934F, 0x8CA58251, +0x7DA87952, 0x81A68A51, 0x95A68B4E, 0x87A88750, 0x82A87D52, 0x79A97E52, 0x69AB7852, 0x7AA98551, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -7963,15 +8843,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x85AB8242, 0x80AB7C43, 0x7AAA7A44, 0x7AAA7C44, 0x7BAB7844, 0x75AB7645, 0x7AAB7C43, -0x7CAB7E43, 0x7DAC7C42, 0x7DAB7B42, 0x7EAB8042, 0x80AB8142, 0x82AA8242, 0x83AB8242, 0x83AA8442, -0x85AA8542, 0x83AB8143, 0x7EAA7E44, 0x7DAA7B44, 0x7CAA7F44, 0x86AA8B42, 0x87AA8142, 0x81AA8542, -0x88AA8A41, 0x8AA98942, 0x89A98743, 0x84AA8343, 0x86AA8142, 0x84A97E43, 0x78AA8244, 0x83AA8841, -0x84A97A43, 0x7EA98443, 0x8CAA8441, 0x83AB8641, 0x85AA8441, 0x7FAB8641, 0x89A97F43, 0x7EA98443, -0x88A98A42, 0x8CAA7842, 0x84A98442, 0x7CA98344, 0x8BA98642, 0x85A98143, 0x82A97F43, 0x80AB7B43, -0x7CAA8044, 0x86AA8C41, 0x83A98343, 0x84AA8341, 0x85AB8141, 0x7AAA7F43, 0x79AA8443, 0x84AA7D43, -0x7EAB7F42, 0x7FAA7544, 0x7CA98343, 0x85A98243, 0x7FA98044, 0x8AA88642, 0x7EAA7C43, 0x80AB8241, -0x84AB8640, 0x8BAA8C40, 0x8BA98641, 0x86AA8442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAA8044, +0x66A86B53, 0x6FA96D53, 0x6FA76156, 0x5DAA5B58, 0x67AC7151, 0x6FA77B55, 0x77A97752, 0x6CA96354, +0x69A78954, 0x86A87652, 0x66A97255, 0x6EAA6554, 0x81A96353, 0x65AE7051, 0x7BAB7451, 0x43AA7658, +0x71A97353, 0x6AAC6653, 0x61AC7453, 0x71AA6D53, 0x79AB7751, 0x7CA78C51, 0x91A68A50, 0x66AB7C50, +0x74AC6452, 0x70A96F55, 0x6BAB6E52, 0x6BA77055, 0x67AA6B55, 0x70AA7B51, 0x7EA87553, 0x60AB6C53, +0x74A97652, 0x71A77954, 0x81A97651, 0x63AA5D56, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8003,15 +8883,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x83AA8342, 0x82AA8143, 0x80AB8043, 0x7FAA7E44, 0x79AA7A45, 0x80AA8242, 0x80AB7C43, -0x78AA7745, 0x79AB7C43, 0x7DAB7C42, 0x79AC7943, 0x79AB7843, 0x79AB7944, 0x7AAA7B44, 0x79AB7A44, -0x7AAA7A44, 0x79AB7945, 0x7DAA8043, 0x85A98A42, 0x8AA98742, 0x83AA8342, 0x83AA8542, 0x88A98A41, -0x8CA98C42, 0x8CA98A41, 0x88AA8741, 0x8AAA8442, 0x83AA8442, 0x81AA8342, 0x80AA7B44, 0x81AB8B41, -0x87AA8841, 0x78AA7D44, 0x89A98941, 0x81AA8442, 0x83AA8741, 0x7FAB8441, 0x8AA98142, 0x81A98543, -0x86A88943, 0x8EAA7D42, 0x7EA98842, 0x81AA7F43, 0x8CA98841, 0x89AA8142, 0x83A97E43, 0x82AA7B43, -0x7AA97A44, 0x87AA8742, 0x8AA98143, 0x83AA8041, 0x82AB8042, 0x7EAA7D43, 0x7DAA7C44, 0x89AA8342, -0x7DAB8042, 0x80AA7944, 0x7DAA8242, 0x84A88543, 0x84A98143, 0x82A98843, 0x89A88543, 0x7EAA7E44, -0x81AA8142, 0x83AB8540, 0x87AA8740, 0x89AA8740, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00966C69, 0x67A86058, 0x6BAA6255, 0x67A96B56, 0x6EAA8450, 0x7EA88051, 0x6CA95658, 0x58AA5C57, +0x5BAA5D56, 0x56AC5856, 0x64AA6155, 0x62A86756, 0x68A96855, 0x66AA6755, 0x69AB6255, 0x62AB6555, +0x65A85C58, 0x6AAA7253, 0x7BA97451, 0x66AB6B54, 0x8DA7A34F, 0x8AA48153, 0x7FA97B50, 0x7EA97F4F, +0x81A77C51, 0x74A57956, 0x82A48054, 0x8AA78350, 0x88A8874F, 0x7DA87D52, 0x76AB7251, 0x79AA7B51, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8043,15 +8923,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957A61, 0x7AAB7E43, 0x84A98643, 0x85A98042, 0x7EAA8243, 0x85AA8543, 0x81AA7C43, 0x7AAA8144, -0x84AA8142, 0x7DAA7B44, 0x7CAB7D44, 0x7FAA8342, 0x83AB8342, 0x83AB8342, 0x81AA8242, 0x82AA8243, -0x80A98443, 0x86A98843, 0x8BA98D42, 0x8AA98941, 0x88AA8841, 0x89AA8841, 0x89A98A42, 0x8AA98A41, -0x88AA8741, 0x88AA8741, 0x84AB8242, 0x80AB8341, 0x86A98542, 0x86AA8642, 0x7EAA7545, 0x7FAB8042, -0x7FAA8A42, 0x84AA7A43, 0x81A98B42, 0x82AB8142, 0x83AB8342, 0x81AB8441, 0x88A98441, 0x83A98343, -0x86A88943, 0x8FA98342, 0x7CAA8743, 0x87AA7E42, 0x8AA98A41, 0x88AA8442, 0x7EA98044, 0x81AA7E43, -0x75AB7744, 0x83A98643, 0x8BA98342, 0x81AA8042, 0x82AB8142, 0x7FAB7F43, 0x82AA7843, 0x85AA8641, -0x7EAB7E42, 0x7FAB7F43, 0x7EAA8142, 0x82A98542, 0x84A98243, 0x85A97E44, 0x82A88A43, 0x8BA98642, -0x80A97E44, 0x7CAA7D44, 0x80AB7F41, 0x7FAC8041, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAA7844, +0x84AC804E, 0x7AAB7751, 0x74A87155, 0x73A77A55, 0x85A68952, 0x87A88250, 0x7FA95D54, 0x62A77157, +0x8CA88250, 0x6EA97453, 0x69A87855, 0x65A96756, 0x74A96D53, 0x69AE6A52, 0x78AB7052, 0x46AA7557, +0x6AAA7353, 0x69AB5F54, 0x6FAD6952, 0x84AA6353, 0x70AC804F, 0x75A68754, 0x8AA78D4F, 0x76A86C53, +0x84AA7A4E, 0x62AA6A56, 0x73AA7053, 0x65AC7751, 0x6DA67357, 0x5DAA6A56, 0x71AB7E50, 0x86A77953, +0x64AB6055, 0x69A96C56, 0x6CA96A55, 0x6EA77055, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8083,15 +8963,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958361, 0x7FAB7D43, 0x7BAB7843, 0x79AA7D45, 0x82A98643, 0x84A97F43, 0x83AA8342, 0x7FAA7944, -0x77AA7945, 0x82AA8642, 0x83AA7F43, 0x7EAB8043, 0x82AB8342, 0x84AB8542, 0x86AA8542, 0x84A98442, -0x85A98842, 0x88A98742, 0x88AA8741, 0x89AB8B40, 0x8FAA8F40, 0x8CA98B41, 0x89A98941, 0x87A98642, -0x85AA8243, 0x81AA7F43, 0x7CAA7B44, 0x7CAB7D43, 0x7FAA8541, 0x85AA8542, 0x88A97F42, 0x7AAA8143, -0x76AA8A43, 0x86AA7F43, 0x7BAA8942, 0x84AA7F42, 0x82AB8042, 0x82AB8441, 0x89A98341, 0x83AA8242, -0x89A88A42, 0x88A88A42, 0x7CAA8243, 0x88AA7E42, 0x87A98E42, 0x84AA8542, 0x7DA98343, 0x7EAA7F43, -0x78AB7843, 0x7BAA8544, 0x88A98941, 0x81AA8342, 0x82AA8242, 0x7FAB8342, 0x83AA7D43, 0x7EAB8742, -0x7EAA7D43, 0x7FAB7F43, 0x7DAB7B43, 0x7FAA8242, 0x84A88743, 0x83A98244, 0x84A98044, 0x81A88344, -0x85A98543, 0x82A97F43, 0x7EAA7A45, 0x77AA7945, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0094666C, 0x5AAB5C56, 0x69A96356, 0x7EAA804F, 0x88A87252, 0x55AB5D58, 0x69AA6A54, 0x59AE5A53, +0x67AA7252, 0x67AC6853, 0x71AB7151, 0x70A97752, 0x7EA78252, 0x80A47E55, 0x7BAA6A52, 0x66AB6B54, +0x69A85C58, 0x64AB6753, 0x81A87051, 0x6FA89053, 0x9FA38A51, 0x87A78151, 0x73A97552, 0x85A98551, +0x74AB6255, 0x64AC6E54, 0x6EA76D56, 0x7BA68053, 0x8BA97850, 0x7FA87553, 0x80AB6951, 0x78AA7951, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8123,15 +9003,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x7EAA8344, 0x81AA7E43, 0x7CAB7A44, 0x7AAA7D45, 0x80A98643, 0x88A97F43, 0x7FAA8242, -0x7EAA7944, 0x78AA7846, 0x7BAA8344, 0x86AA8442, 0x82AA8343, 0x82AB8242, 0x85AB8541, 0x86AB8841, -0x8AAB8941, 0x89AB8A41, 0x8BAA8B40, 0x8AAA8A41, 0x8BA98A41, 0x8BA88B42, 0x8CA88842, 0x83AA8142, -0x82AA8343, 0x7EAA7B44, 0x79AA7845, 0x7AAA7A44, 0x7FAA7E43, 0x84A98043, 0x86AA8342, 0x79AA7E45, -0x78AB7F44, 0x87AA8442, 0x7BAA8643, 0x88AA7A42, 0x80AB8142, 0x82AB8541, 0x89A98541, 0x81A98243, -0x88A88B42, 0x87A88D43, 0x7CAA7B44, 0x88AA7F42, 0x82A98D42, 0x86A98443, 0x7FA98243, 0x7FAA8143, -0x7DAB7A42, 0x76A98445, 0x82AA8A41, 0x83A98243, 0x80AA8142, 0x80AB8342, 0x84AA8342, 0x78AA8643, -0x85AA7B43, 0x7EAB8043, 0x7BAA7A44, 0x7DAA8243, 0x84A98641, 0x84A98542, 0x85A98343, 0x83AA8342, -0x81A98344, 0x84A98542, 0x85A98243, 0x83A98542, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB7744, +0x8EA98E4C, 0x8BA78F4F, 0x96A5964F, 0x8FA8874E, 0x82AB824D, 0x73AA6454, 0x6CA87055, 0x7FA78C51, +0x84A96953, 0x72A76656, 0x7EA87153, 0x6BA77E55, 0x65AA6B54, 0x64AE6C52, 0x7BAA7051, 0x51A97456, +0x66AA7752, 0x6DAB5A54, 0x72AE6252, 0x8AA96E51, 0x75AC6B51, 0x75A97B53, 0x88A78350, 0x8CA76B53, +0x6AAA7D51, 0x80AA6C52, 0x6BA87456, 0x63AB6855, 0x65AB7752, 0x71A77257, 0x60AB6556, 0x7AA98150, +0x84AA7D4E, 0x6BA96056, 0x59AA5958, 0x63A96B57, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8163,15 +9043,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948761, 0x7FAA7B43, 0x7FAA8343, 0x82AA7E43, 0x7CAB7943, 0x78A97E45, 0x81A98343, 0x85A97E43, -0x7DAA8143, 0x7CAA7745, 0x77A97B45, 0x7BA98044, 0x86A98A41, 0x8AA98842, 0x88A98642, 0x85A98643, -0x87A98542, 0x88A98A42, 0x89A98A42, 0x88A88842, 0x8AA88A42, 0x89A98841, 0x87AA8442, 0x83A98043, -0x81A98043, 0x7FAB7F43, 0x7EAB7C43, 0x7BA97E44, 0x7EAA7D43, 0x80AA8242, 0x82AA8742, 0x80A97745, -0x78AB7A44, 0x88AA8542, 0x7AAA8443, 0x8BAA7742, 0x7DAB8242, 0x80AA8542, 0x88AA8641, 0x7DAA8343, -0x83A98942, 0x88A88E43, 0x81AA7A43, 0x86AA8541, 0x7FAA8B42, 0x89A98242, 0x82A97F43, 0x83A98143, -0x80AB7A42, 0x77AA8345, 0x82AA8641, 0x87A98043, 0x82AA8141, 0x80AB7E43, 0x84A98542, 0x7CAA7E43, -0x88AA7C42, 0x80AB7F42, 0x7EAA8343, 0x7FAA7D43, 0x7DA98343, 0x87AA8741, 0x86AA8641, 0x86AA8442, -0x85AA8542, 0x83AA8642, 0x87AA8641, 0x84AA8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0094616C, 0x67AA7E51, 0x81A97851, 0x63A95458, 0x60A96757, 0x5EAD5C53, 0x76AA7F50, 0x86A88B4D, +0x85A67852, 0x72A87053, 0x6EAA6A51, 0x6CAA6F51, 0x76A87F52, 0x79A97052, 0x84A67E52, 0x67AB6853, +0x77AA4B58, 0x58AC6156, 0x7DA97650, 0x70A89C51, 0x9CA38951, 0x7BAA6F51, 0x7DA87E53, 0x6DA57759, +0x77A67356, 0x74A67057, 0x5CA86D59, 0x73A57956, 0x7CA97A52, 0x7FA87553, 0x7AAB6452, 0x71AB7951, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8203,15 +9083,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948761, 0x85A98742, 0x88AA7F42, 0x7DAA8443, 0x85A98342, 0x7FAA7844, 0x78A97C45, 0x81A98144, -0x81A97F43, 0x80AA8242, 0x7EAA7744, 0x78AA7C45, 0x7EA98045, 0x82A98543, 0x86A98542, 0x87A98A42, -0x8BA98A42, 0x8DA88D41, 0x8CA88B42, 0x8AA98942, 0x87A98642, 0x85A98243, 0x81A98144, 0x82AA8442, -0x83AA8342, 0x86A98842, 0x86A98643, 0x85AA8143, 0x7EA97E44, 0x7FAB8042, 0x83AA8941, 0x80A97A45, -0x7FAC7942, 0x87A98043, 0x7CAA8643, 0x8BAB7641, 0x7FAB8242, 0x7EAA8342, 0x88AA8641, 0x78AA8344, -0x82A98543, 0x88A88A42, 0x85AA7B43, 0x85AA8841, 0x7DAA8743, 0x8BA98242, 0x82A98043, 0x83AA7F43, -0x7FAB7A43, 0x79AA7C45, 0x88AA8242, 0x8CA98341, 0x84AA7E41, 0x7FAB7D43, 0x82AA8243, 0x84AA7843, -0x86AA7F42, 0x7DAB8142, 0x78AA8344, 0x7FAA7E43, 0x7FAA7F43, 0x80AA8243, 0x81AA8343, 0x83A98A42, -0x8CA98C41, 0x8BA98C41, 0x8DA88C41, 0x8AAA8941, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x88AD874C, 0x7FAC7E4F, 0x7DAA7C50, 0x73AA6753, 0x62A96855, 0x67A86F57, 0x7BA88552, 0x89A87F50, +0x68A97853, 0x6AA97653, 0x74A86555, 0x71A77F54, 0x65AC6653, 0x63AE6E52, 0x7DAA6E52, 0x57A97256, +0x5EAA7A53, 0x74AB6052, 0x6FAD6A51, 0x76AA7950, 0x77A95B55, 0x68AB8351, 0x82A78751, 0x80A88151, +0x6EAA6855, 0x7BA97C50, 0x70AA7054, 0x73A77357, 0x5CAB6756, 0x5EAB6F53, 0x79A67555, 0x6BAB6754, +0x69A96B54, 0x7FA98B4E, 0x86AC7C4D, 0x79AD794E, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8243,15 +9123,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x83A98543, 0x81A98543, 0x8BAA8042, 0x7BAA8243, 0x81AA7E43, 0x7BAA7944, 0x76A98045, -0x82A98643, 0x83AA7F42, 0x82AB8342, 0x7CAA7A45, 0x7AA97E45, 0x7EA97E44, 0x81A88244, 0x83AA8343, -0x84A98643, 0x87A98942, 0x88A98542, 0x85A98543, 0x83AA8543, 0x85AA8642, 0x86A98742, 0x87A98B42, -0x8AA98C42, 0x89A98642, 0x87A98643, 0x82A98643, 0x86AA8142, 0x7CAA7F43, 0x81AA8542, 0x87A97D43, -0x79AB8242, 0x86A98043, 0x83AA8842, 0x86AB7642, 0x7EAB8142, 0x7EAA7F43, 0x87AA8840, 0x76AA8344, -0x82A98743, 0x89A88B42, 0x8AA97B43, 0x83AA8A41, 0x7DAB8243, 0x8BA98441, 0x80A98444, 0x7EA97F43, -0x80AB7C42, 0x7BAA7545, 0x88A98043, 0x89A98941, 0x85AA7D42, 0x7EAB7C43, 0x7FAA8443, 0x84AA7943, -0x80AA8642, 0x7DAA8143, 0x7DAB8143, 0x81AA7F43, 0x81A98443, 0x86A98543, 0x85AA8443, 0x84A98743, -0x83A98144, 0x82A98244, 0x82A98144, 0x82AA8143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00957968, 0x6AAA5E56, 0x5CA95D58, 0x5FAD6752, 0x78AB7F4E, 0x8AA8854E, 0x72A97152, 0x80A9834F, +0x82A97C50, 0x78AA7B51, 0x7BAA7B50, 0x75AA7750, 0x80AA7850, 0x6CA98352, 0x82A87E50, 0x7DA96352, +0x6AAB6A53, 0x4FAB6656, 0x72AA6E52, 0x6AA99B51, 0x94A68651, 0x7AAA7951, 0x8AA67655, 0x7DA97B51, +0x7EAC714F, 0x6CAB7651, 0x79AA6754, 0x5FA57E58, 0x79A88650, 0x7CA87253, 0x81AB6252, 0x6DAB7251, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8283,15 +9163,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958761, 0x85AA8043, 0x85A98343, 0x82AA8D42, 0x87AA7A42, 0x7CAA7F43, 0x7FAA7C43, 0x79AA7845, -0x7DA98144, 0x85A98243, 0x7EAB8143, 0x83AB8141, 0x7DA97F44, 0x7FA97F44, 0x7CAA7C44, 0x7DA97D44, -0x80A98144, 0x81AA8143, 0x7FA98044, 0x83AA8343, 0x85A98642, 0x88A98A42, 0x8EA79042, 0x8EA88942, -0x86A98243, 0x82A98442, 0x84A98442, 0x84AA8143, 0x84A98643, 0x7FAA7E43, 0x7FAA8442, 0x88A98142, -0x82A98B42, 0x83A88144, 0x89AA8B40, 0x7DAB7A43, 0x7FAB8142, 0x7EAA7D43, 0x89AB8740, 0x77AA8444, -0x83A98743, 0x8BA78843, 0x8DAA7B43, 0x81AA8A41, 0x7FAB7F43, 0x89AA8741, 0x7DA98544, 0x7BAA8144, -0x82AA7E42, 0x7BAB7744, 0x85A98543, 0x86AA9141, 0x85AA8142, 0x7CAB7943, 0x7DAA8342, 0x80AA7D43, -0x77AB8643, 0x7FAA8043, 0x7DAA8043, 0x83A98642, 0x85AA8243, 0x82AA8342, 0x84AA8343, 0x83A98643, -0x86A98743, 0x87A98943, 0x88AA8942, 0x8CAA8C41, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6AA76956, 0x67A96457, 0x6BA86557, 0x62A96558, 0x6DA86F55, 0x71A88053, 0x83A88350, 0x60A97B53, +0x69A77755, 0x76A97353, 0x65A86957, 0x7FA86C54, 0x63AE6852, 0x65AD7551, 0x7EAA7251, 0x5EA97355, +0x63A97654, 0x78AA6253, 0x65AC7052, 0x75AA854F, 0x6CA86F54, 0x5FAF6E51, 0x87A77D52, 0x81A87D51, +0x7CA97053, 0x70AB7951, 0x75A97552, 0x69AB6D55, 0x7AA68255, 0x62AB6D54, 0x66AB7052, 0x7DA66E55, +0x72A86A56, 0x5EAE6053, 0x66AC6053, 0x61A96A56, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8323,15 +9203,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x82AA8842, 0x83A98543, 0x82A98144, 0x87AA8842, 0x7DAB7F43, 0x7EAA8043, 0x80A97944, -0x73A97A46, 0x83A98244, 0x81AA8043, 0x80AA8442, 0x87AB8341, 0x81A98343, 0x82A97F44, 0x7DAA7D44, -0x80AA8343, 0x82A98044, 0x7FAA8344, 0x86A98942, 0x8CA78F42, 0x8DA88C42, 0x89AA8541, 0x80AA7F42, -0x7CAB7C43, 0x7CAB7E42, 0x7EAB8042, 0x85AA8A41, 0x86AA8542, 0x85A98343, 0x81A97F43, 0x88A98842, -0x85A87D45, 0x7CA98543, 0x8AAA8741, 0x76AB7D43, 0x80AA8142, 0x7EAA7E43, 0x89AA8541, 0x77AA8543, -0x82A98642, 0x8BA88842, 0x8DA97C43, 0x7EAA8942, 0x84AA7E43, 0x86AA8741, 0x7DA98144, 0x7CAA8343, -0x82AA8242, 0x7BAB7C43, 0x7DA98C43, 0x82AA9141, 0x86A98042, 0x7BAB7C42, 0x7BAB8242, 0x82AA8343, -0x77AA8343, 0x83AA7D43, 0x7DAA7E43, 0x86A98942, 0x85A98642, 0x85A98642, 0x89A98C41, 0x8FA99041, -0x91A98C41, 0x87AA8343, 0x7FAB7F43, 0x80AA8142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0094736A, 0x6DAA6F52, 0x7AAA894E, 0x91A6874E, 0x77A87D52, 0x7BAA7451, 0x6BAC6D53, 0x75AB7C51, +0x7DAB7A51, 0x79A97852, 0x79A87553, 0x74AA7251, 0x71AD6C4F, 0x7EAA7051, 0x6FA78453, 0x7DA97B51, +0x65AC7651, 0x54AC6156, 0x66AA6C53, 0x6BA89950, 0x8AA78050, 0x74A98352, 0x76A68156, 0x89AC694E, +0x6CAD6C50, 0x6FAE6F4F, 0x76AA6D52, 0x6FA58057, 0x76A88252, 0x7CA86D54, 0x78AB5C52, 0x6BAA6F52, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8363,15 +9243,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x82AB8141, 0x85AA8243, 0x83A98143, 0x81AA8443, 0x86AB8042, 0x7CAA8243, 0x80A97F43, -0x77A97545, 0x7CA88544, 0x83A98043, 0x7CAA8043, 0x83AA8941, 0x8AAA8941, 0x89AA8441, 0x80AA8143, -0x84A98642, 0x8AA98C42, 0x8FA78F42, 0x92A89040, 0x8BAA8740, 0x84AB7F40, 0x7FAA7E42, 0x7CAB7D42, -0x7CAB7E42, 0x7DAD7E41, 0x7EAD7F3F, 0x7EAC7F41, 0x8AAA8641, 0x85AA8342, 0x81A97F43, 0x85AA8941, -0x86AA8741, 0x8AAA8940, 0x86AB7842, 0x79AA7E43, 0x81AB7F43, 0x7EAA7F43, 0x88AA8441, 0x75AA8543, -0x84A98542, 0x8AA88943, 0x8CA97B43, 0x7FAA8742, 0x87AA7E42, 0x86AB8841, 0x80A97E44, 0x7EAA8143, -0x7FAA8542, 0x7BAB7C42, 0x7AAA8D42, 0x85AA8C41, 0x8DA98342, 0x7CAB7E42, 0x78AB7C43, 0x83AA8342, -0x7BAA7B44, 0x84AA8043, 0x81AA7D43, 0x87A98C42, 0x88A98542, 0x80A98643, 0x90A98941, 0x86AB8242, -0x7FAB7D43, 0x7DAB7F43, 0x81AB8441, 0x87AA8541, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x64A75E59, 0x5CA86058, 0x6AA87055, 0x78A87D54, 0x7EA97750, 0x7BA97751, 0x66A87D55, 0x72A76058, +0x88A78051, 0x74A66D56, 0x65A67258, 0x78AA6B52, 0x67AE6753, 0x61AB7A54, 0x7EAA7051, 0x63AB7353, +0x6CA87254, 0x7BA96A52, 0x66AB7A52, 0x75AB7F4F, 0x7DA97252, 0x61AD6753, 0x72AA7F52, 0x71A97E53, +0x79AA7351, 0x6DA86E56, 0x75AA7352, 0x78AA7B50, 0x70A97F53, 0x85A58854, 0x63AB6256, 0x74AA6A52, +0x69AA7952, 0x78A76C55, 0x6AA86B56, 0x68AA6C54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8403,15 +9283,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x89AA8142, 0x7EAA8643, 0x83AA8343, 0x7EA98244, 0x85AA8442, 0x7FAA8143, 0x7EAA7F44, -0x7EA97645, 0x76A98045, 0x83A98144, 0x80AA7943, 0x7DAA8143, 0x85AA8841, 0x88AA8841, 0x87AA8741, -0x89A98A41, 0x89AA8741, 0x87AA8641, 0x85AA8541, 0x84AA8041, 0x7EAB7F42, 0x80AC8042, 0x81AB8142, -0x81AB7F43, 0x7CAB7944, 0x79AA7944, 0x7CAC7D41, 0x79AB8442, 0x82AA8542, 0x82A98143, 0x80AB8441, -0x8DA98841, 0x82AB7D41, 0x76AB7943, 0x7FAA7F43, 0x80AB7B43, 0x7FAA8142, 0x86AB8241, 0x74AA8644, -0x84A98842, 0x88A88A43, 0x8CA97B43, 0x80AA8443, 0x89AA7D42, 0x84AA8941, 0x85A97C44, 0x83AA7C43, -0x81AA8442, 0x7BAC7B42, 0x79AA8A43, 0x8AAA8841, 0x90A98642, 0x7EAB7E42, 0x7AAC7743, 0x81AA8542, -0x81AA7543, 0x83AA8143, 0x83AA7E43, 0x83AA8343, 0x88A98242, 0x7FAA8B42, 0x88AA8142, 0x7DAB7A43, -0x7FAB8242, 0x85AB8142, 0x80AB8242, 0x81AA7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00948867, 0x8AA58352, 0x83A58752, 0x73AB7151, 0x76AC7C50, 0x86A8894F, 0x85A58553, 0x84A48753, +0x8AA48A52, 0x88A58053, 0x7EA77455, 0x7AA98151, 0x7AAB784F, 0x76AB774F, 0x7AA86E54, 0x82A88651, +0x6AAD6E50, 0x6DAB6254, 0x5EAB6A53, 0x6BA89B4F, 0x80A97B50, 0x74A88453, 0x80A9844F, 0x68AE7350, +0x81AA814F, 0x7FAA7C4F, 0x78AB804F, 0x70A87154, 0x74A77955, 0x78A87B53, 0x7AAB6452, 0x67AC7450, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8443,15 +9323,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958361, 0x86A98542, 0x7EAB7F42, 0x87A98243, 0x7BA98244, 0x80AA8843, 0x82AA7D43, 0x85A98043, -0x7CA97F45, 0x76AA7B45, 0x81A88643, 0x81A98143, 0x7CAA7B44, 0x7FAB8143, 0x82AA8442, 0x82AB8142, -0x81AA8341, 0x84AA8441, 0x83A98242, 0x80AA7F43, 0x81AB8142, 0x83AB8542, 0x85AB8542, 0x81AA7F43, -0x7DAA7D44, 0x7FA98443, 0x82A98343, 0x7DAA7A45, 0x7CAC7B42, 0x84AA8042, 0x83AA8143, 0x83AA8242, -0x7AAC7542, 0x72AB7444, 0x7EAA8042, 0x80AB8142, 0x7EAB7C42, 0x80AB8342, 0x82AB8242, 0x74AA8644, -0x84A98A42, 0x89A88C43, 0x8CA97A43, 0x80AA8243, 0x8AAA7D42, 0x82AB8842, 0x8BA97C43, 0x84AB7A42, -0x7FAA8143, 0x7DAC7B43, 0x7AAA8143, 0x8DAA8441, 0x8FA98941, 0x81AB7D42, 0x7EAB7643, 0x7EAA8243, -0x83AA7943, 0x7EAA8343, 0x7EAA7E43, 0x80A98343, 0x8AA98143, 0x81AB8842, 0x82AB7D42, 0x7BAB8143, -0x7DAB7E43, 0x83AB8641, 0x81AA8043, 0x81A98543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6CA86855, 0x69A87054, 0x75A87853, 0x72A77055, 0x64A86457, 0x74A77654, 0x65A96557, 0x88A78151, +0x83AA6E50, 0x6AA66758, 0x6FA58156, 0x67AB6854, 0x6BAD6953, 0x62AB6E53, 0x7CAA6E52, 0x65AA7054, +0x6BA86756, 0x83A97551, 0x66AC7651, 0x7AAB784F, 0x89AA6A50, 0x71AA5E55, 0x69AD7A50, 0x7EA66F55, +0x7EA97553, 0x70AA6955, 0x6DA96C55, 0x70A96E55, 0x79AA7A50, 0x79A98152, 0x77A67557, 0x6DA96556, +0x6EAA7652, 0x7CA97051, 0x68AB5F53, 0x61AB6354, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8483,15 +9363,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948A61, 0x86AA8842, 0x80AB8341, 0x85A98343, 0x7EA97C44, 0x80AA8743, 0x84AA8142, 0x86A98243, -0x7CAA7D45, 0x7BA97745, 0x7FA88744, 0x84A98443, 0x84A98242, 0x7CAB7D44, 0x7FAA8043, 0x80A97F43, -0x7FA98144, 0x82AA8043, 0x80AB8243, 0x86AA8842, 0x89AB8842, 0x84AB8042, 0x7DAA7E43, 0x82AA8343, -0x82AA8143, 0x81AA8343, 0x87A98642, 0x82A98043, 0x7BAB7C43, 0x7DAB8143, 0x84AA8443, 0x81A97F43, -0x75AA7B43, 0x80A98242, 0x7DAA8043, 0x84AC7D41, 0x7FAB7C43, 0x83AA8442, 0x82AA8141, 0x73AA8344, -0x84A98A42, 0x8BA88C42, 0x8CA97843, 0x7FAA7E43, 0x8BAA7E42, 0x7FAB8642, 0x8CA97C43, 0x83AA7B43, -0x7FAA7E43, 0x80AB7942, 0x7FAB7B43, 0x8DAA8541, 0x8CA98B41, 0x84AA7C42, 0x81AB7743, 0x78AB8243, -0x83AA7C43, 0x78AA8543, 0x7DAA8343, 0x7FAA8143, 0x87A98342, 0x80AA8942, 0x7CAB7C42, 0x7EAB7C43, -0x81AB8A41, 0x86AA7F42, 0x81A98143, 0x8AA98B41, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00938168, 0x7CAA7B51, 0x7FAB874E, 0x83A87F50, 0x7CAA784F, 0x7EAA804F, 0x7FA78051, 0x7AA77D53, +0x82A77D53, 0x78A87053, 0x6AA96D54, 0x71A77D54, 0x71AA7A52, 0x77AC794F, 0x75A97B52, 0x73A87D53, +0x8EAC6B4D, 0x73AC6652, 0x62AC6E52, 0x6BAA8A50, 0x86A97D50, 0x77A78954, 0x83AD614F, 0x74AB7551, +0x78A77D52, 0x81A68852, 0x85A97F4F, 0x7DAA6D52, 0x7DA67954, 0x7EA78253, 0x75AA7051, 0x67AB7052, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8523,15 +9403,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948D61, 0x86A98642, 0x83AB8341, 0x82AA8443, 0x7FAA7B44, 0x84A98343, 0x87AA8142, 0x83A98A42, -0x7DA97B45, 0x7DA97A45, 0x79A97F44, 0x88A88842, 0x88A98543, 0x84AA8342, 0x81AB8043, 0x80AA8143, -0x81AB8442, 0x87AA8A41, 0x8AAA8841, 0x86AB8442, 0x80AB7D42, 0x7CAA8043, 0x80AA7F44, 0x7CAA7C45, -0x7BAA7C44, 0x7DA98044, 0x83A98543, 0x87A98542, 0x7FA97B44, 0x7BAB8342, 0x81AB8143, 0x7FAA8143, -0x82A97E43, 0x80AB8242, 0x86AC8340, 0x7FAB8042, 0x7DAA8043, 0x86AA8541, 0x7EAA7D43, 0x79AB8144, -0x82A98742, 0x89A88C42, 0x8CA97843, 0x80AA7E43, 0x89AB7F42, 0x7DAB8343, 0x8CAA7E42, 0x80AA7D43, -0x7EAA7F43, 0x82AB7942, 0x80AC7B42, 0x8AAA8741, 0x87A98D41, 0x87AA7C43, 0x80AB7C42, 0x75AB8143, -0x83AB8042, 0x78AA7F44, 0x81AA8143, 0x81AA8043, 0x85A98342, 0x83AA8A42, 0x7EAB7F42, 0x7BAA7D43, -0x87AA8B41, 0x84AA7C42, 0x82A98842, 0x88AA8741, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5CA96258, 0x65A86658, 0x64A86658, 0x62A86059, 0x5EA96459, 0x68A97154, 0x8EA58353, 0x7DAB7E4F, +0x6CA66F56, 0x69A67357, 0x7EA77F53, 0x5FAB6455, 0x75AD5F52, 0x6CAC6B52, 0x7CA96E52, 0x6DAA6755, +0x6BA85F57, 0x7CA88151, 0x6DAB7352, 0x7DAA8150, 0x80AB834D, 0x61A96A56, 0x5DAC6D55, 0x7EA98352, +0x71A87854, 0x7DAA7152, 0x69AA6257, 0x66A96658, 0x6FAA6F53, 0x76A97A51, 0x74A88152, 0x74A96D55, +0x78A87754, 0x6AA96855, 0x68A97154, 0x7DA77F52, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8563,19 +9443,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948A61, 0x8AA98642, 0x82AB8441, 0x7EA98443, 0x81AA7C43, 0x83A98444, 0x88AA8242, 0x82A98C42, -0x7DAA7B45, 0x7EA97B45, 0x78AA7E44, 0x83A98A42, 0x88A98643, 0x85A98543, 0x85AA8542, 0x87AA8842, -0x87AA8942, 0x8BAA8641, 0x82AB8142, 0x7DAA7F43, 0x85A98343, 0x7EA97C45, 0x7AAA7C44, 0x7CAA7D43, -0x7FAA8143, 0x83A98242, 0x7DAA8143, 0x83AA8743, 0x89AA8043, 0x7CAB7E43, 0x81AA8242, 0x82A98243, -0x81AD8140, 0x81AD7E40, 0x7DAD7D41, 0x7DAB7B42, 0x7CA98643, 0x84AB8241, 0x7BAA7544, 0x7FAA8043, -0x83A98442, 0x8AA88D42, 0x8DA97A42, 0x7FAA7D43, 0x87AA8142, 0x7DAB8143, 0x8AAA7F42, 0x7FAB7F43, -0x7CAA8143, 0x81AB7743, 0x82AB7D42, 0x84AA8A41, 0x85A98F41, 0x88A98143, 0x7FAB8042, 0x75AB7D43, -0x85AB8241, 0x7BAA7844, 0x81AA7C44, 0x84AA8142, 0x81AA8043, 0x85AA8A42, 0x82AA8241, 0x79AB8243, -0x8CAA8641, 0x82AA8042, 0x84AA8942, 0x89AA8C40, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00967E67, 0x7EAA7450, 0x78AA7750, 0x70A96554, 0x62AB5F55, 0x65AC6952, 0x71AB794E, 0x77A97850, +0x77AA7450, 0x72A97253, 0x7FA78053, 0x78A96C52, 0x6EA87954, 0x77AA7852, 0x72AC7550, 0x83A87352, +0x7EAA8A4E, 0x70AC7850, 0x6BAB6853, 0x6BAB814F, 0x8DA87E4F, 0x77A88952, 0x70AD5952, 0x78A77255, +0x77A97D52, 0x86A67A53, 0x81A88B50, 0x89AA7D4E, 0x77A77754, 0x7FA68D51, 0x83A97A50, 0x61AC6653, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8602,23 +9478,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948861, 0x8CA98342, 0x80AB8441, 0x7DA98443, 0x80A97F43, 0x82A98443, 0x86AA8641, 0x84A98C41, -0x80AA7A44, 0x78AA7B45, 0x7CAA7E43, 0x81A98642, 0x88A98542, 0x84A98543, 0x85AA8643, 0x85AA8542, -0x84AB8442, 0x80AB7B42, 0x7DAA8543, 0x84A97C44, 0x75AA7545, 0x79AA7E43, 0x81AA8343, 0x85A98742, -0x8AA98942, 0x88A98542, 0x85A98043, 0x7EA98244, 0x86A98642, 0x7DAA7E43, 0x84AA7E42, 0x82AA8543, -0x81AD8040, 0x80AC8141, 0x7EAB7943, 0x78AA7C44, 0x83AA8442, 0x84AB7D42, 0x7EAA7544, 0x82AB7D43, -0x89A98441, 0x89A88B42, 0x8CA97A42, 0x81A97E44, 0x88AA8142, 0x7EAB7E43, 0x89AA8242, 0x7CAA8144, -0x7DAA7D43, 0x7FAB7943, 0x80AB8143, 0x7FAB8D41, 0x84AA8D41, 0x8CA98742, 0x7DAB8342, 0x78AB7A43, -0x83AB8241, 0x80AA7843, 0x7FAA8043, 0x81AA8342, 0x81A98343, 0x84AA8842, 0x85AB8541, 0x76AA8243, -0x8AAA8441, 0x81AA8342, 0x86A98942, 0x8BAA9140, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x60AC5F56, 0x66AB6A55, 0x6AAB6D53, 0x73A97C52, 0x84A58C52, 0x86A77653, 0x7AAA7B50, 0x68A85E57, +0x6BA66659, 0x72A58055, 0x80A87753, 0x67AA6656, 0x75AD5D52, 0x6FAB6C53, 0x7AAA6F51, 0x6EAA5F56, +0x6CA96D54, 0x68A88353, 0x8CA87151, 0x72A97753, 0x7BAB7D4F, 0x80AB6252, 0x65A95E56, 0x6EAD7651, +0x8CA86C53, 0x64AB7354, 0x7DAA6F53, 0x5CA8645A, 0x74A86957, 0x6AA97255, 0x71AA7153, 0x6CA87853, +0x8CA58E52, 0x83A67B54, 0x77A77954, 0x71A86C56, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8642,16 +9515,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948861, 0x8AAA8342, 0x7FAB8342, 0x7EA98144, 0x7FA98043, 0x84A98443, 0x85AA8441, 0x88A98E41, -0x80AA7A44, 0x75AA7C45, 0x7FAB7F43, 0x7FAA8042, 0x85A88843, 0x81A97F44, 0x7FAA8343, 0x84AA8442, -0x7BAB7B43, 0x82AA8A41, 0x83A97745, 0x71AB7545, 0x7CAB8542, 0x8BA88F41, 0x8BA88941, 0x86AA8441, -0x84AA8242, 0x7FAB7E43, 0x82A98543, 0x85A98044, 0x83A98843, 0x85AA7E43, 0x82AA8042, 0x83A98343, -0x7EAA7A43, 0x79A97844, 0x77AA7946, 0x80A98443, 0x81AC8141, 0x82AA7D42, 0x7CAA7C44, 0x81AA8042, -0x89A98242, 0x89A98A42, 0x8BAA7743, 0x83A97E43, 0x86AA8142, 0x7DAB7D43, 0x88AA8341, 0x7AA98344, -0x7CAB7D43, 0x7FAB7D42, 0x7DAB8242, 0x7FAA8A41, 0x85AA8941, 0x8EA88B42, 0x7DAB8142, 0x80AB7743, -0x82AB8641, 0x83AA7D42, 0x77AB8044, 0x7FAA8543, 0x82AA8142, 0x85A98842, 0x86AA8141, 0x79AA8443, -0x87AA8441, 0x80AA8143, 0x84A98A42, 0x8FA98E40, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8659,10 +9522,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946D6A, 0x70A76856, 0x61AC6253, 0x67AB7451, 0x7CA68453, 0x8FA39353, 0x97A29652, 0x94A48C52, +0x89A78250, 0x7EA97B50, 0x71AA6F52, 0x71A97953, 0x80A87352, 0x6CA97654, 0x71AB7952, 0x7FA97C50, +0x6EAA8551, 0x7CAC714F, 0x72AB6E51, 0x6CAB6E51, 0x8DAA8B4D, 0x7AA88153, 0x7CAA6852, 0x76A87555, +0x6FA86D57, 0x61A76959, 0x64A66259, 0x79A97F50, 0x74A77555, 0x73A78953, 0x89A8864F, 0x69AC6052, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8682,16 +9551,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958A61, 0x8AAA7E42, 0x84AA7F42, 0x7DAA7F44, 0x81A98143, 0x82A98643, 0x81AB8641, 0x8AA88D42, -0x81AA7844, 0x74AA7E44, 0x7DAB7C43, 0x7FAA7F43, 0x87A98243, 0x81A88044, 0x83AA8143, 0x7FAB7A43, -0x81AB8741, 0x85A97F43, 0x75AA7845, 0x80AB8542, 0x8DA98D41, 0x87AA8241, 0x82AB8141, 0x80AC7F42, -0x80AB8242, 0x84AC8541, 0x83AB7F42, 0x82AA8742, 0x80A98644, 0x85AA7E43, 0x7FAB8442, 0x83A98543, -0x6EAA6E48, 0x70AA7746, 0x7EAA8543, 0x83AB7E41, 0x81AA8243, 0x7DAA7E43, 0x78AB8443, 0x81A98642, -0x86A98043, 0x8BA98C42, 0x88AA7543, 0x84AA7E43, 0x87AB8242, 0x7FAC7D42, 0x88AA8342, 0x77AA8344, -0x7DAA7C43, 0x7FAB8042, 0x79AB8343, 0x7FAB8642, 0x89A98541, 0x8EA98E41, 0x83AA7F42, 0x83AB7643, -0x7EAB8642, 0x87AB8341, 0x78AA7E44, 0x7FAA8143, 0x85AA8242, 0x83A98842, 0x87AB7E41, 0x81AA8243, -0x89AB8540, 0x7BAA8343, 0x81A98943, 0x8EA98A41, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8703,9 +9562,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6CAB7253, 0x78AA7B52, 0x78AA7252, 0x74AA7952, 0x7CAA7F50, 0x7CAB744F, 0x6BAA6953, 0x69A77256, +0x64A67658, 0x7AA58155, 0x80A97A52, 0x75A97054, 0x74AC6452, 0x59AA7256, 0x6CAA7D52, 0x76AA6A54, +0x67AB6853, 0x6DA86A56, 0x86A78A4F, 0x77AA6F52, 0x6FAA7953, 0x82AA804E, 0x66AB6554, 0x56AB5C57, +0x70AB8151, 0x85A66D55, 0x66AA7454, 0x80AA7752, 0x69A86259, 0x73A76D58, 0x64A96956, 0x78A87353, +0x6AAD6851, 0x68A96D56, 0x7FA68852, 0x85A88250, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8722,16 +9588,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00949060, 0x84AB7D42, 0x83AA7E43, 0x7CAA7E43, 0x82AA7F43, 0x84AA8143, 0x83AA8441, 0x89A88842, -0x7FAA7645, 0x78AA7E43, 0x7BAB7D43, 0x80A98642, 0x83AA7D43, 0x7BAA7E43, 0x7DAA7D43, 0x79AB8142, -0x86AA8242, 0x7BAA7844, 0x7EAB8342, 0x8AA98A41, 0x85AA8141, 0x7FAC8041, 0x7DAC8042, 0x85AB8841, -0x89AB8941, 0x88AB8941, 0x89AB8841, 0x85AB8541, 0x86A98443, 0x84AA8542, 0x7DAA8642, 0x83AA8243, -0x7FAA8042, 0x80AB8141, 0x7FAC7B41, 0x7CAB8143, 0x7FAB7C43, 0x7FA97545, 0x83AB8442, 0x84A98842, -0x80A98043, 0x8BA98D41, 0x84AA7843, 0x86AA7D43, 0x86AB8241, 0x81AC7F41, 0x88AA8441, 0x77AA8644, -0x7EAA7F43, 0x7EAB8242, 0x78AB8542, 0x7EAB8343, 0x8AA98342, 0x8DA98E40, 0x8BAA7A42, 0x85AB7C42, -0x7AAB8443, 0x87AA8641, 0x81AA7A43, 0x81AA7E43, 0x85AB8541, 0x83AA8143, 0x87AA8241, 0x83AA7F42, -0x8AAB8540, 0x7BAA7F43, 0x84A98542, 0x8BA98842, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8746,10 +9602,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00966569, 0x74A97352, 0x78A78A52, 0x8CA68551, 0x76AA6C52, 0x62AA6355, 0x69A96755, 0x6BA97054, +0x6FA87F54, 0x8CA49851, 0x8BA88050, 0x86AA7A4E, 0x74A97252, 0x77A96954, 0x71A97354, 0x7DAB804F, +0x7DA96F52, 0x80AC734F, 0x75AC7E4F, 0x74AB6C51, 0x69AD834E, 0x89A97851, 0x7AA87354, 0x6EAA8351, +0x73A76C56, 0x73A87D53, 0x74A77B54, 0x59A87357, 0x7AA96E53, 0x72A87D53, 0x8BA78950, 0x7DAA6152, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8762,16 +9626,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958960, 0x7CAB8143, 0x7DAA7D44, 0x7DAA8243, 0x7EAA7F44, 0x83AA8442, 0x84A98641, 0x8AA88243, -0x7BA97646, 0x7CAA7C43, 0x7FAA8142, 0x86A98442, 0x7DAB7D42, 0x79AB7B43, 0x7CAB7B43, 0x7BAA8343, -0x82A97B44, 0x78AA7C44, 0x81AA8842, 0x86AA8441, 0x80AB7C42, 0x7DAB7E42, 0x85AA8C41, 0x91A99141, -0x90A98F41, 0x90A98E41, 0x8CAA8A40, 0x89AA8641, 0x8CA98442, 0x83AA8842, 0x7BAA8642, 0x84AA8742, -0x7DAC7B42, 0x7AAB7A43, 0x7DAA8044, 0x81AA7E42, 0x80AA7C43, 0x75AA7F43, 0x83AA8342, 0x83AA8442, -0x7DA98443, 0x8EA98A41, 0x83AA7C43, 0x87A97D43, 0x89AA8241, 0x80AC8142, 0x86AA8342, 0x73AA8643, -0x7EAB7F43, 0x7DAB8142, 0x78AB8442, 0x7CAA8343, 0x89AA8342, 0x8BA98D40, 0x90AA7D42, 0x82AB8242, -0x7AAA8144, 0x81AB8442, 0x85AA7D43, 0x7FAA8143, 0x7CAA8742, 0x83AA8342, 0x80AA8442, 0x7FAA8842, -0x82AA8841, 0x85AA7843, 0x7FAB8342, 0x83A98A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8788,9 +9642,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4FB05153, 0x4FAF5753, 0x58AE5C53, 0x5BAE5C53, 0x61AD6551, 0x6CAC6C51, 0x6DA97953, 0x7AA56059, +0x67A77657, 0x80A67755, 0x79AA7553, 0x7AA97853, 0x6DAD7451, 0x64AC5D56, 0x70A87553, 0x76AA7B51, +0x71AC6D52, 0x6FA86954, 0x5CAB7E52, 0x8BA8824F, 0x7BAA6854, 0x78AA7C50, 0x7BAB6950, 0x6AAA6A54, +0x5DAB6956, 0x71AA7E52, 0x8FA77952, 0x68AA6E55, 0x77AA8051, 0x77A76458, 0x69A77558, 0x73A86157, +0x5FA86D57, 0x6FA77656, 0x73AB7251, 0x6AAD6852, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8802,16 +9663,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x7FAB8043, 0x7DAA7D44, 0x80AA7D43, 0x7BAA8144, 0x82AA8641, 0x83A98742, 0x80AA7844, -0x76A97D45, 0x7CAA7D43, 0x81AA8642, 0x7DAB7B43, 0x7FAB8042, 0x7DAB7D42, 0x7CAA7E43, 0x7CAA8243, -0x7FAA7A44, 0x7AAB8142, 0x84A98442, 0x81AB7D42, 0x7DAB8043, 0x87AA9041, 0x92A88F41, 0x8CA88942, -0x86AA8542, 0x88A98C41, 0x91A98C40, 0x8AAA8B41, 0x89A98742, 0x85AA8742, 0x7EAA8542, 0x85AA8A42, -0x81A97E44, 0x7DAA7D44, 0x7CAA7D42, 0x7EA98042, 0x79AA7744, 0x80AA8242, 0x85AA8142, 0x85AB7D42, -0x7CA98943, 0x8DA98442, 0x7FAA8043, 0x83AA7B43, 0x8AAA7F42, 0x7EAC8141, 0x88AB8341, 0x70AA8744, -0x7FAA8143, 0x80AB8142, 0x79AB8442, 0x7DAA8243, 0x86AB8341, 0x88A98B41, 0x91A98341, 0x80AA8641, -0x7DAB7F42, 0x83AA8143, 0x81AA8242, 0x7EAA7E44, 0x7EAA8143, 0x85AA8641, 0x83AA7D43, 0x80AB8042, -0x85A98442, 0x89AA8541, 0x7DAA7B44, 0x7FAB8142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8831,10 +9682,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956F6A, 0x79A96B53, 0x5EA96057, 0x66A66E59, 0x76A67957, 0x79A77455, 0x74A67756, 0x74A77B54, +0x79A97453, 0x71A97453, 0x6DA97F53, 0x8FA7894F, 0x84A97D50, 0x70A86356, 0x66AB5955, 0x76A77A54, +0x7DAA814F, 0x6CA97F53, 0x7DAD764E, 0x88AB784E, 0x6BAC6452, 0x78AC844D, 0x76AA7452, 0x7EA96C52, +0x6FA86E57, 0x78A76F54, 0x5EA87657, 0x76A76356, 0x7AA96E52, 0x7EA77054, 0x81A68B51, 0x8EAA6950, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8842,16 +9699,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x7EAA7D44, 0x7BAA8044, 0x7BAB7B43, 0x7FA98243, 0x87AA8541, 0x87A97E43, 0x74AA7746, -0x7AAA7844, 0x7DAA8043, 0x7AAB7943, 0x80AB7C43, 0x79AB7C44, 0x7BAB7D43, 0x7EAB7D42, 0x7AAB7F43, -0x7CAA7745, 0x7DAB8242, 0x83AA8542, 0x7BAB7C43, 0x80AA8E42, 0x94A88D41, 0x87A88442, 0x84AA8341, -0x85AA8840, 0x86A98341, 0x85A98A42, 0x8BAA8B40, 0x88AA8B41, 0x86AA8642, 0x82AB8342, 0x84AA8842, -0x7DAA7F42, 0x80AA8042, 0x81A97C43, 0x79AA7944, 0x7EAB8242, 0x81A98643, 0x85AA8442, 0x80AA7C43, -0x7FA98B43, 0x8AAA8342, 0x7DAA8243, 0x81AA7D43, 0x88AA7C42, 0x7DAC8142, 0x86AB8341, 0x6FAA8445, -0x82AA8242, 0x7FAB7D42, 0x7BAB8342, 0x82AA8043, 0x85AB8441, 0x86A98C41, 0x8FA98C41, 0x7DAB8641, -0x83AB7C42, 0x81AA8143, 0x7FAB8142, 0x7FA98143, 0x7EAB7F43, 0x81AA8641, 0x87AA8342, 0x7BAB8042, -0x83AA8442, 0x82A98543, 0x88AA8441, 0x7CAB7A43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8875,23 +9722,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0xA0A1A551, 0x9EA78D4F, 0x80A98850, 0x80A87452, 0x72A77355, 0x6DA97154, 0x80A87852, 0x6BA56C59, +0x72A67356, 0x7DA77554, 0x70A97B54, 0x75AA7D52, 0x80AB7051, 0x70AC6952, 0x60AA6C55, 0x6EAA7552, +0x81AA7C50, 0x72AB6F52, 0x78AA5D53, 0x77A98250, 0x89AA804F, 0x6FA86E55, 0x76AA7450, 0x6CAD6052, +0x64AB6655, 0x5BAA6657, 0x70AA7853, 0x8DA68351, 0x68A76759, 0x71AA7B53, 0x81A87154, 0x68A76659, +0x79A77756, 0x75A86556, 0x5BAA5E56, 0x5EA96657, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x7EAA7B44, 0x7FAA7C43, 0x7DAA7F43, 0x80AA8941, 0x87A98841, 0x7FAA7744, 0x78AB7A44, -0x79AB7A44, 0x77AB7843, 0x7CAA7B43, 0x7CAA7D44, 0x7EAA7E43, 0x7DAA7D43, 0x7EAB7C43, 0x7CAB7D44, -0x7DAA7A44, 0x7FAB8243, 0x86AA8341, 0x7DAB7F43, 0x8DA99540, 0x8CA88842, 0x87AA8541, 0x87AA8740, -0x88A98641, 0x83A88544, 0x88A88743, 0x8CAA8941, 0x8BA98A41, 0x86AA8742, 0x84AB8242, 0x85AA8642, -0x7DAA7A44, 0x78AA7944, 0x7BAC7F42, 0x80AB8242, 0x80AA8443, 0x88A98643, 0x82AA8442, 0x7BA97C44, -0x87A98941, 0x86AA8741, 0x7DAA8443, 0x7EAA7C43, 0x86AA7D42, 0x7CAC8142, 0x86AB8142, 0x71AA8244, -0x81AA8242, 0x7DAB7C42, 0x7FAB8242, 0x87AA7E42, 0x81AB8741, 0x85A98D42, 0x8CA98D41, 0x7FAA8242, -0x88AB7D41, 0x7EAA8344, 0x7EAB7D42, 0x82AA8342, 0x80AA7D44, 0x7EAB8242, 0x86AA8941, 0x86AA7E43, -0x7FAB8143, 0x83A98242, 0x80A98244, 0x84AA8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8918,20 +9762,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094626B, 0x67A6635A, 0x5CA7665B, 0x6DA56B59, 0x66A76359, 0x60AA6656, 0x62AB6255, 0x64AB6D53, +0x75A97C51, 0x7CA77953, 0x84A88251, 0x79A97453, 0x7BA97353, 0x73AB7152, 0x6EA86157, 0x5CAB5D57, +0x79A87F52, 0x80A97B50, 0x68AA7953, 0x79AE804D, 0x84AB6D50, 0x6DAE6050, 0x6DAD774E, 0x6AAB6C53, +0x78A96D53, 0x6BA67658, 0x7AA76655, 0x61A6645A, 0x73AA7252, 0x6AA86B56, 0x80A78E50, 0x88AA7F4F, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947D62, 0x7BAA7F44, 0x7AAA7B44, 0x7DAA8342, 0x87AA8941, 0x88AA7A43, 0x75AA7C44, 0x79AB7C43, -0x77AC7843, 0x7DAA8343, 0x80AA7F43, 0x7FAA8343, 0x84A98343, 0x85A98143, 0x7FAB8042, 0x7DAB7F43, -0x7DA97D44, 0x7EAA8042, 0x86AA7E42, 0x7FAA8842, 0x93A89041, 0x87A98842, 0x86AB8141, 0x81A98542, -0x86AA8742, 0x85AA8242, 0x80A98743, 0x8CA98741, 0x8DAA8740, 0x88A98642, 0x88AB8041, 0x84AA8442, -0x89AB8840, 0x85AB8442, 0x83A98143, 0x82A98543, 0x8AA98C42, 0x8BA98841, 0x88AA7A43, 0x7BA98244, -0x8DAA8941, 0x81AA8343, 0x7EAA8543, 0x7DAA7E44, 0x83AA8042, 0x7EAC7F42, 0x84AB8142, 0x71AA8344, -0x7FAA8242, 0x7EAB7B43, 0x81AB7F42, 0x89AA7B42, 0x81AB8841, 0x83A98B43, 0x8BA98D41, 0x84A97F42, -0x89AA8540, 0x7CAA7F44, 0x82AB8242, 0x7DAB8442, 0x80A98244, 0x7AAB7F44, 0x82AB8741, 0x8AA98542, -0x7CAB7B43, 0x7EAA7F44, 0x80AA7F43, 0x81A98143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -8963,18 +9803,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947E62, 0x78AB7A44, 0x7EAA7C43, 0x87AA8841, 0x8BA98242, 0x77AB7A44, 0x7EAB7F43, 0x78AC7942, -0x7EAA8242, 0x7DAB7E43, 0x82AB8241, 0x81AA8442, 0x87A98942, 0x88A88743, 0x86AA7F42, 0x7DAB7F43, -0x7EA97944, 0x7DAB7D43, 0x88AA8141, 0x81A98E42, 0x94A78C41, 0x8AA98841, 0x82AA8342, 0x8AAA8A41, -0x83AB7C43, 0x7CAB8143, 0x80A98044, 0x86A98842, 0x8CAA8441, 0x87AA8342, 0x88AB7F41, 0x84AB8542, -0x86A98342, 0x81A98543, 0x84AA8443, 0x88A98C42, 0x8CA98B41, 0x8AAA8740, 0x7EAA7D44, 0x80A98643, -0x89AA8441, 0x84AA7B43, 0x83AA8342, 0x7EAA8243, 0x81AA8042, 0x7DAC7F42, 0x87AB8341, 0x73AA8443, -0x7FAB8242, 0x80AB7A42, 0x81AC7D41, 0x8CAA7D42, 0x81AB8541, 0x83A98843, 0x8BA98A41, 0x8BA97D43, -0x82AA8A41, 0x7EAB7F43, 0x85AA7D43, 0x7FAB7E41, 0x83A98043, 0x81AA7B44, 0x7FAB8342, 0x88AA8940, -0x86A97B43, 0x76AB7944, 0x7CAA8043, 0x83AA8243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7AA78053, 0x79A97353, 0x6DA66D58, 0x76A38457, 0x8AA78C51, 0x8AAB7950, 0x6AA66858, 0x63A76259, +0x66A67457, 0x6FA96E54, 0x71A86F56, 0x76AB7850, 0x74A97A54, 0x79AA6C53, 0x6FAC6552, 0x6EAA6455, +0x6FAA7A52, 0x83AC704E, 0x7DA98050, 0x71AB6353, 0x7CA88950, 0x81AB7950, 0x69A87255, 0x7FA97851, +0x65AE6152, 0x6CAB6C53, 0x63AB5A56, 0x6DAB7253, 0x70A87B53, 0x78A76C55, 0x6CA97855, 0x84A87653, +0x7BA87454, 0x6CA86C56, 0x78AA7B52, 0x83A78452, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9002,23 +9839,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957962, 0x7CAA8043, 0x81AA8741, 0x86A98542, 0x78AB7845, 0x80AA7D43, 0x7AAC7B42, 0x81AB8442, -0x83AB8641, 0x85AA8641, 0x83A98342, 0x80AA7F42, 0x7FAB8242, 0x82A98742, 0x88AA8142, 0x7CAB8142, -0x82AA7544, 0x7BAB7C43, 0x88AA8341, 0x82A99242, 0x94A88B42, 0x89AA8241, 0x81AA8742, 0x85AA7E43, -0x7DA97F45, 0x7DA97D45, 0x7FAA7B44, 0x86A88842, 0x89A98442, 0x89AA8242, 0x87AB7F41, 0x82AB8442, -0x8DAA8D3F, 0x8CA98E41, 0x90A99141, 0x8EA98A40, 0x88AB8840, 0x82AA7C43, 0x80A98243, 0x87A98D41, -0x8AAA7E42, 0x82AA7D43, 0x87A98242, 0x7FA98743, 0x7DAA7F43, 0x7DAC8042, 0x86AA8141, 0x75AA8344, -0x7DAB8442, 0x80AB7943, 0x82AC7B42, 0x8BAA8142, 0x83AC8041, 0x84AA8642, 0x8BA98941, 0x8DA97F42, -0x7FAA8642, 0x88AB7F42, 0x7FA98343, 0x7CAB7E43, 0x7DAB8442, 0x81A98244, 0x7BAB7D44, 0x85AA8841, -0x89AB8641, 0x7FAA7B44, 0x78AB7844, 0x7CAA7F44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094666D, 0x62A6635B, 0x6AA77C55, 0x75A96654, 0x6BAB6F53, 0x6DAC6752, 0x68AB6F53, 0x74AA6F52, +0x6AAC6651, 0x63AE5F52, 0x6CAA7253, 0x75A88450, 0x8DA97750, 0x66AA6756, 0x6DA97454, 0x6EA86F55, +0x65AB6355, 0x7EA97B50, 0x85A87950, 0x64AA7354, 0x7BAD804E, 0x85AB714F, 0x77AD6551, 0x63AD7050, +0x6BAB6553, 0x69A96756, 0x68A97C55, 0x86A97B51, 0x76A97D52, 0x6BA97D53, 0x73A78F52, 0x89A9924D, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9042,16 +9875,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957B62, 0x7EAB8742, 0x88AA8441, 0x7CAA7644, 0x7BAA7D44, 0x7AAC7942, 0x84AA8741, 0x8AAA8C40, -0x89A98442, 0x83AA8142, 0x80AB7F42, 0x80AA8041, 0x84AA8841, 0x85AA8142, 0x8AA98742, 0x7EAB7E42, -0x84AA7244, 0x78AB7C43, 0x86AA8441, 0x81AA9342, 0x93A78C41, 0x86AB8141, 0x86AA8742, 0x80A88444, -0x84A98343, 0x83A98144, 0x79AA8045, 0x82A98543, 0x86AA8541, 0x87AA8342, 0x85AB7C42, 0x82AB8541, -0x96A9923F, 0x8FAA8C3F, 0x89AB8640, 0x86AB8741, 0x85AA7C42, 0x7BAA8043, 0x80A98643, 0x8BAA8941, -0x82AA8642, 0x7CAA8243, 0x88AA7F42, 0x7FA98A42, 0x7DAB8142, 0x7DAC7E42, 0x84AA8142, 0x74AA8244, -0x7BAA8642, 0x81AB7B42, 0x82AC7E41, 0x88AA8342, 0x86AB7B42, 0x82AA8842, 0x8CA98841, 0x8BA98641, -0x7DAB8242, 0x87AA8442, 0x7FAA8043, 0x84AA7943, 0x7CAB7942, 0x82A97F43, 0x84AA7C44, 0x7FAA7F43, -0x84AA8A40, 0x8BAB8541, 0x83AA8143, 0x82AA8143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9059,9 +9882,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x97A7924F, 0x7FA86855, 0x75A88352, 0x7DAA7551, 0x7AA67D55, 0x82A98450, 0x7BA97552, 0x71A97C52, +0x75A76655, 0x65A86B57, 0x75A86B54, 0x6FA86D55, 0x73AA7253, 0x71A87A55, 0x7DAA6D52, 0x68AA6055, +0x6BAA6155, 0x6CAA7B53, 0x78AE6D4E, 0x7EA8844F, 0x72AC6E51, 0x85A9844F, 0x7CAB8051, 0x71A87454, +0x70A87054, 0x63AC5D54, 0x67AB7153, 0x70AA5955, 0x5AAA6E55, 0x6DAB6753, 0x7AA97751, 0x6DA97055, +0x7DA78253, 0x7DA87454, 0x77A77655, 0x70A86C55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9082,16 +9912,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x88AB8540, 0x7FAA7744, 0x78AA7B44, 0x7AAB7D42, 0x84AA8641, 0x89A98940, 0x82AA7F42, -0x80AB8241, 0x85AA8541, 0x87AA8841, 0x87AA8640, 0x82AA8242, 0x88AA8642, 0x85A98742, 0x80AA7C42, -0x80AB7A43, 0x77AB7D43, 0x85AA8241, 0x7FAA9341, 0x91A88B41, 0x85AB8241, 0x8BA98143, 0x87A88643, -0x82AA8342, 0x83AA8342, 0x80AA8044, 0x7DA88644, 0x86AA8941, 0x85AA8242, 0x86AA7D42, 0x81AB8442, -0x8BAC8A3F, 0x88AB8741, 0x86AB8641, 0x82AB7D42, 0x7BAA7E43, 0x7EA98144, 0x85AA8A42, 0x8BA98841, -0x7FAA8542, 0x7FAA8342, 0x83A97D43, 0x82A98742, 0x7DAB7D42, 0x7CAC8042, 0x87AA8042, 0x77AA8243, -0x7AAB8543, 0x82AB7B42, 0x81AC7F42, 0x84AB8541, 0x84AA7943, 0x7FAB8941, 0x88A98B41, 0x88A98842, -0x80AA7E43, 0x86AA8641, 0x81AB8143, 0x82A98244, 0x79AB7D43, 0x7AAB8142, 0x85A98343, 0x7FAA7E43, -0x7FAA7F43, 0x87AA8C40, 0x8AAB8640, 0x85AC8541, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9102,10 +9922,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0092646E, 0x70A77F54, 0x67AA6B54, 0x6CA96955, 0x73AA7551, 0x7AA88051, 0x84A7864F, 0x85A8844E, +0x7AAA6A51, 0x5CAA5858, 0x5AAC6254, 0x5CAE5F53, 0x73AA7950, 0x86AA7C4E, 0x64AB6256, 0x6DAA7753, +0x76A85E56, 0x5DAB6755, 0x7DA86E54, 0x7FA87F50, 0x61AA6755, 0x75AC7750, 0x85AA7F4F, 0x77A97752, +0x63AD6452, 0x77AB6353, 0x61AA6E55, 0x6BA75E5A, 0x66A97356, 0x6BA97753, 0x64A79653, 0x95A98B4E, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9122,16 +9948,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958560, 0x7FAA7A44, 0x79AA7A44, 0x7AAB7E42, 0x84AB8740, 0x8CA98940, 0x82AA8142, 0x87AA8941, -0x89AA8641, 0x84AA8642, 0x86AA8641, 0x83AB8441, 0x87AA8441, 0x80AA8942, 0x88AA8741, 0x86AA7C42, -0x7FAB7F42, 0x74AB7D43, 0x82AA8042, 0x7FAA9341, 0x90A98A41, 0x85AB8542, 0x8CA98443, 0x86AA8641, -0x87AB8141, 0x80AB8442, 0x85AB7E43, 0x7AA88744, 0x85AA8B41, 0x86AA8242, 0x88AA7C42, 0x80AB8242, -0x8AA98842, 0x86A98442, 0x81AA7E43, 0x7FAA7D44, 0x7DAA7D44, 0x83AA8342, 0x89A98B41, 0x88AA7D42, -0x87AA7C42, 0x83AA8642, 0x7FA97E44, 0x86A98342, 0x7EAB8042, 0x7CAC8042, 0x86AA8042, 0x7AAA8343, -0x7CAA8443, 0x84AB7942, 0x7FAC8042, 0x84AB8940, 0x81AA7C43, 0x7CAB8641, 0x88A98C41, 0x87AA8841, -0x87AA7F42, 0x82AA8542, 0x86AA7F42, 0x81AA8243, 0x87AA7C43, 0x80AB7C42, 0x81AA8643, 0x84A98143, -0x7CAB7D43, 0x7CAA8042, 0x85AA8741, 0x88AA8A40, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9146,9 +9962,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x67AA6956, 0x73A79052, 0x96A67E51, 0x69A87D54, 0x77AA7851, 0x72AA7C52, 0x68A97855, 0x6CA76C56, +0x73A97752, 0x7BA97952, 0x77A77D54, 0x6DA78054, 0x74A87653, 0x6EA86B56, 0x6BA96A56, 0x76AA7253, +0x65AA6256, 0x67AC5F53, 0x6CAA7C53, 0x7AAF744B, 0x84A9834E, 0x78AC774F, 0x7BA97951, 0x74AC7752, +0x6BAA7054, 0x72A76F55, 0x67A85A57, 0x61AB6B54, 0x6BA96E55, 0x63AA5D57, 0x61AC5F55, 0x5EAA6D55, +0x78A96F52, 0x6FAA7B53, 0x7FA77E52, 0x78A87E53, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9162,16 +9985,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x7CAA7E44, 0x7BAB7E42, 0x86AA8D40, 0x8EA98840, 0x83A98741, 0x89AA8641, 0x83AA8142, -0x7FAB7E43, 0x7DAB7C43, 0x7FAA8442, 0x84AB8341, 0x80AB8741, 0x85AB8042, 0x8AA98642, 0x88AA8042, -0x7DAB8242, 0x75AB7C43, 0x80AA7F42, 0x7FAA9342, 0x8EA98841, 0x83AA8542, 0x85A88544, 0x89AA8840, -0x7EAC7B42, 0x7EAC8440, 0x87AA7D42, 0x7BA88844, 0x85A98B41, 0x87AA8142, 0x87AB7942, 0x80AB8142, -0x7FAA7E44, 0x7DAA7D44, 0x7FA97D44, 0x7CAA7D44, 0x80AA8143, 0x82AA8842, 0x89A98941, 0x7BAA8642, -0x7FA98443, 0x83AA8342, 0x7DAA7F44, 0x87AA8042, 0x7CAC7E42, 0x7DAB8342, 0x87AA8241, 0x7AAA8343, -0x7CAA8343, 0x84AB7B42, 0x7DAB8142, 0x83AB8940, 0x80AA8143, 0x7AAC8141, 0x8AA98642, 0x88AA8642, -0x86AA8143, 0x81AB8542, 0x83AA8342, 0x7EAB8043, 0x85A88943, 0x7CAB8043, 0x7DAB8142, 0x86A98143, -0x82A97F44, 0x7AAC7B42, 0x7DAB7B42, 0x7BAA7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9189,10 +10002,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00948069, 0x67A97155, 0x72A97D51, 0x86A67B52, 0x67A86358, 0x6EAA7253, 0x77AD784E, 0x75AE6D4F, +0x6BAA6455, 0x64A57059, 0x7DA87952, 0x61AA5A57, 0x69AA6A54, 0x73AA7D50, 0x81AB7E4E, 0x6CAD6054, +0x67A97754, 0x76A86455, 0x56AA6358, 0x88A76A54, 0x6EAA8750, 0x78A96854, 0x67AC6D53, 0x6CAA7752, +0x6BAA7653, 0x7AAB6353, 0x73AB7351, 0x5AAB6256, 0x68AA6054, 0x5EA97155, 0x5EA89053, 0x95A98B4E, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9202,16 +10021,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958361, 0x80AA8142, 0x85AA8B40, 0x8FA98A41, 0x84AA8741, 0x86AA8341, 0x7FAB8043, 0x83AB8642, -0x86AB8542, 0x85AA8442, 0x84AA8342, 0x82AA8242, 0x82AC7F41, 0x87AA8141, 0x81A98942, 0x87AA8641, -0x7DAB8442, 0x76AB7B43, 0x7DAB8042, 0x7FAA9242, 0x8CA98741, 0x82AA8842, 0x84A98843, 0x8BAB7F40, -0x7FAC7F42, 0x81AC8141, 0x84AB8042, 0x81A88844, 0x84AA8942, 0x86AA8043, 0x84AB7942, 0x7FAA8142, -0x7FA97F44, 0x7FAA7F44, 0x80AA8242, 0x82AA8042, 0x80AA8543, 0x86AA8641, 0x88AA7E42, 0x85A98143, -0x7EA98543, 0x87A97F43, 0x7DA97F44, 0x87AA7E42, 0x7CAC7E42, 0x7BAB8642, 0x87AA8341, 0x7CAB8142, -0x7EAA8342, 0x84AA7E42, 0x7CAB8242, 0x81AB8741, 0x81A98243, 0x79AC7F42, 0x88AA8542, 0x86A98841, -0x84AA8542, 0x83AA8342, 0x82AA8242, 0x83AB8042, 0x84A98743, 0x8AAA7F43, 0x7FAB8142, 0x80AA8442, -0x84A98143, 0x83A98143, 0x7FAB7D42, 0x7CAB7D43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9233,8 +10042,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAC9041, +0x5EAC6254, 0x65AB6B55, 0x77A98F50, 0x8DA66155, 0x7AA97152, 0x67AA7353, 0x72AA6B55, 0x67AB6856, +0x6DA97653, 0x70A87154, 0x68AA6855, 0x78A88652, 0x82A88650, 0x86A68552, 0x74A87354, 0x6CA96D56, +0x75A87B53, 0x69A86157, 0x67AB6453, 0x6FA97853, 0x70AF784C, 0x83AA8A4C, 0x7EAC7B4D, 0x7FA87B52, +0x70AB7353, 0x71A97454, 0x70AA7153, 0x67A75A5A, 0x51AB5857, 0x6BA96857, 0x68AA6A56, 0x5FAA6156, +0x5EAC5956, 0x6FAA7E51, 0x71AA6D53, 0x7CA87A53, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9242,16 +10059,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958360, 0x87AA8A40, 0x8BA98A41, 0x89A98841, 0x84AA8242, 0x83AB8641, 0x8AAB8C40, 0x8CAA8A40, -0x85AA8443, 0x84AA8343, 0x84AA8642, 0x86AB8341, 0x80AB8441, 0x81AA8641, 0x80A98842, 0x86A98A41, -0x7BAB8241, 0x7AAB7A43, 0x7BAB8143, 0x7FAA9241, 0x89A98741, 0x82AA8943, 0x86A98B42, 0x80AC7E41, -0x81AC8640, 0x85AB8341, 0x83AB8940, 0x82A98743, 0x82AA8642, 0x86AA8442, 0x86AA7A42, 0x7DAB8342, -0x7DA97A44, 0x7AAA7B44, 0x7FA98144, 0x85AA8642, 0x87AA8441, 0x86AA8441, 0x7DA98643, 0x82A97B44, -0x8BA98841, 0x83A98043, 0x7DA98244, 0x84AB7F42, 0x7EAC7E42, 0x7CAA8542, 0x87AA8142, 0x7CAA8343, -0x80AA8243, 0x86AA7F42, 0x7DAA8542, 0x83AB8741, 0x87AA8241, 0x7BAB7E43, 0x82AA8742, 0x82AA8742, -0x85AA8242, 0x80AA8044, 0x83AB8242, 0x84AA8641, 0x81AA8742, 0x8AA88B43, 0x7CAA7C43, 0x83AB7F42, -0x7FAA8542, 0x84A98043, 0x7FA97F44, 0x7EAA8043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9275,23 +10082,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0095666B, 0x72A87653, 0x90A77E50, 0x5AAA6A57, 0x8CAA7C4F, 0x65AF6351, 0x63AB5E55, 0x5FA96059, +0x5EA96258, 0x67AC7552, 0x7BAF794D, 0x6DA77356, 0x81A86D54, 0x5DA96857, 0x6EA97953, 0x78AB774F, +0x72AB6153, 0x63AB6455, 0x7FA87653, 0x59AA4C5A, 0x6CA97754, 0x6EAB7951, 0x89A87F50, 0x63AB6355, +0x6CAB7253, 0x75AA6B53, 0x78A87A54, 0x62AB6C53, 0x7AAA844E, 0x7EAA6B51, 0x79A59851, 0x8DA8934E, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958B60, 0x8CA88842, 0x89A88A42, 0x82AB8142, 0x84AB8641, 0x8AAA8C40, 0x8AA88A42, 0x89A88B42, -0x8CA88C42, 0x8BA88843, 0x87A98343, 0x85AA8841, 0x85AB8541, 0x84AB8441, 0x85A98043, 0x88AA8A41, -0x7FAC8041, 0x80AB7B43, 0x7AAB7F42, 0x7FA99241, 0x88AA8641, 0x83A98A43, 0x88AA8A40, 0x7FAC8241, -0x88AA8841, 0x87AA8641, 0x84AB8741, 0x81AA8143, 0x83A98543, 0x84AA8642, 0x85AA7D42, 0x7EAB8341, -0x82A98144, 0x81AA8143, 0x81AB8143, 0x82AA8242, 0x84AA8342, 0x7DAA8043, 0x87A97D44, 0x7DA98C43, -0x89AA8841, 0x83A97B44, 0x7FA88444, 0x81AB7F42, 0x7FAC7D42, 0x7AAB8443, 0x86AA7F42, 0x7BAB8143, -0x80AA8043, 0x88AA8241, 0x7EAA8342, 0x85AA8541, 0x89AA7F42, 0x80AB7B43, 0x80AB8841, 0x80AA8543, -0x8AAA8142, 0x81AA8143, 0x81AA8343, 0x80AA8342, 0x86AA8641, 0x88A98743, 0x87A98143, 0x7CAA8143, -0x7FAB7D43, 0x7DAB7E43, 0x80AA8242, 0x81AA8342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9319,19 +10122,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948961, 0x88A88A42, 0x89AA8441, 0x86AB8841, 0x8AA98A41, 0x86A98741, 0x86AA8540, 0x83AB8241, -0x81AA7F42, 0x7FA98243, 0x84A98543, 0x87A98542, 0x87AB8541, 0x85AB8241, 0x89A97E42, 0x88A98542, -0x87AB7F41, 0x84AB7C42, 0x79AB7F42, 0x7FAA9041, 0x8AAA8641, 0x84A98942, 0x8AAA8140, 0x80AB8341, -0x85AA8242, 0x86A98A41, 0x88AA8441, 0x83AA7E43, 0x85A98543, 0x85A98742, 0x82AB7E42, 0x7EAB8242, -0x80AA7E43, 0x7FAA8243, 0x83AA8442, 0x82A98143, 0x7DAA7C44, 0x83A98443, 0x7DAA7C44, 0x8BA98842, -0x89AA8141, 0x7EA97E44, 0x81A98843, 0x7EAB7E43, 0x7FAC7E42, 0x7CAB8143, 0x86AA8042, 0x7DAA8143, -0x7FAA7E44, 0x89AA8341, 0x7DAB8441, 0x85AB8541, 0x8BAA7F41, 0x81AA7A43, 0x7FAC8541, 0x87A98143, -0x86AA8342, 0x81AA7E43, 0x80A97F44, 0x81AA8143, 0x85AA8641, 0x85AA8842, 0x84A98344, 0x80AA7D44, -0x80AA8441, 0x86AA8142, 0x7FAB7A42, 0x7BAB7C43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x84A56D56, 0x5AAD6053, 0x63AC6E55, 0x8DA68451, 0x75A86F55, 0x68AA7254, 0x73AB5B56, 0x70AA7252, +0x64AA5F57, 0x5CAA5B58, 0x54AA565A, 0x57AA585A, 0x5CA9615A, 0x60AA7954, 0x8AA78E4F, 0x83A77554, +0x6EA87156, 0x7EA78153, 0x71A96D54, 0x64AC6C51, 0x66A87955, 0x6DAD7D4E, 0x84A9934C, 0x85AB764D, +0x77AB6E52, 0x6BAD6C52, 0x74AB7952, 0x7AAC7A4F, 0x7CA86B54, 0x60A65B5A, 0x64A97455, 0x72A86B56, +0x65A86456, 0x65AC5D54, 0x65AA8152, 0x7AA86E54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9363,19 +10163,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958861, 0x86AA8641, 0x88AB8A40, 0x89A98841, 0x86AA8541, 0x87AA8740, 0x88A98841, 0x85A98642, -0x88A98642, 0x84A98142, 0x7FAA8043, 0x82A98643, 0x81AA8542, 0x84AB8541, 0x83AA8642, 0x83AA8642, -0x8DAB7F40, 0x82AB7D42, 0x7CAB8042, 0x7FAA8C41, 0x8BAA8741, 0x84A98B43, 0x89AB7B41, 0x83AB8341, -0x84A98642, 0x88A98B42, 0x8AAA8741, 0x87AA8042, 0x87A98543, 0x86A98842, 0x83AB8142, 0x7EAB8142, -0x86A98342, 0x80AA7D43, 0x7DAA7D44, 0x7DAA7D44, 0x83A98243, 0x7EAA7C45, 0x7FA98B42, 0x86AB8841, -0x86AA8042, 0x7CA98044, 0x86A98943, 0x7CAB7E43, 0x82AC7E42, 0x7EAB7F42, 0x85AA8241, 0x7FAA8143, -0x81AA7B44, 0x89AA8441, 0x7DAB8441, 0x86AB8441, 0x89AB8541, 0x7FAA7B43, 0x7CAC8342, 0x8BA98043, -0x83AA8642, 0x81AB7F43, 0x7EAA8044, 0x7EAA8143, 0x80AA8442, 0x84AA8241, 0x88A98143, 0x7FAA8343, -0x80AB7F43, 0x81AA8442, 0x87A98941, 0x88A98841, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0093766B, 0x78A88F4F, 0x8AA75E55, 0x7BAA854F, 0x6CA98052, 0x75A56658, 0x6FA77954, 0x7CA57C54, +0x7DA67753, 0x71A76953, 0x60A76559, 0x5EA7615A, 0x6DAD7251, 0x6FA67857, 0x6CA95956, 0x6BA87954, +0x7DAA7950, 0x85AA7151, 0x5FAC5857, 0x65A67E57, 0x71A7505A, 0x4EAA6C57, 0x74AA6953, 0x76A98C4F, +0x7AAA6953, 0x68AB7352, 0x79A97C53, 0x6CA97E54, 0x86A78852, 0x83A68653, 0x99A5994F, 0x87AB8E4E, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9402,23 +10198,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x86AB8941, 0x88AA8540, 0x87AB8740, 0x87A98641, 0x83AA8242, 0x81AA8143, 0x7EAA7F44, -0x83A98842, 0x8AA98C42, 0x89A98242, 0x7FAA8042, 0x84A98443, 0x86AB8441, 0x83AB8741, 0x82A98A41, -0x8BAB8540, 0x82AB8342, 0x7FAB7E42, 0x80AA8A41, 0x8DAA8641, 0x82A98C42, 0x85AC7941, 0x83AA8243, -0x86AA8642, 0x8EAA8E40, 0x8FA88A41, 0x86AB8342, 0x85A98543, 0x88A98D41, 0x84AA8341, 0x7CAB8242, -0x79AA7C44, 0x7DAA7D45, 0x7DAA7E44, 0x7CAA7A45, 0x7AAA7C45, 0x7EAA8243, 0x8DA88942, 0x86AA8741, -0x80A98143, 0x7FA98244, 0x87A98842, 0x7BAB7C43, 0x83AB7B42, 0x80AB7F42, 0x86AA8142, 0x80AB7D43, -0x7FAA7A44, 0x86AA8841, 0x80AB8242, 0x86AA8841, 0x88AB8940, 0x7BAA7F43, 0x7AAB8043, 0x87AA8842, -0x82AA8442, 0x86AA8242, 0x7FAA7C44, 0x7DAA7D44, 0x81AB8143, 0x84AA8641, 0x83AA8842, 0x83AA7F43, -0x85AA8442, 0x7FAA7E43, 0x7EAA8243, 0x86A98742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x73A97B52, 0x77A75957, 0x58AD6354, 0x6DAA8E51, 0x74A67256, 0x5CAC6E54, 0x5AAA6D56, 0x73AA5B55, +0x5AA96258, 0x66AC6854, 0x75AB7C50, 0x7EAA7950, 0x75AA7A51, 0x73AC6252, 0x57A94F5D, 0x4BA8715A, +0x7EA67D53, 0x79A57F56, 0x72A67F56, 0x74A87054, 0x66AD6A51, 0x66A87554, 0x70AB7751, 0x7BA9854E, +0x92A9874C, 0x81AA7D50, 0x6DAC6254, 0x66AE7151, 0x76AB7851, 0x75AB7E51, 0x76A66758, 0x66A76458, +0x74A67E55, 0x6EA97253, 0x77AB6652, 0x61AC7D51, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9442,16 +10235,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958760, 0x87AB8341, 0x84AA8441, 0x81AA7D42, 0x7CAB7B44, 0x7DAB7E42, 0x82AB8540, 0x84AA8541, -0x84AB8341, 0x82AA8242, 0x87A98842, 0x84AA8042, 0x81A98543, 0x84AA8442, 0x82AB8341, 0x89AA8342, -0x87AA8C40, 0x81AB8441, 0x7FAB7E43, 0x7FAB8841, 0x8DAA8740, 0x84A98C42, 0x81AB7842, 0x85A98243, -0x84AA8642, 0x8AA98542, 0x88A98C41, 0x8BAB8740, 0x85A98443, 0x87A88D41, 0x89AA8541, 0x7BAB7E42, -0x71AA7347, 0x74AA7347, 0x72AA7347, 0x76AB7A44, 0x7DAA8143, 0x87A88D42, 0x87AA8442, 0x86AA8042, -0x81A97C45, 0x83A88544, 0x88A98542, 0x7AAB7D44, 0x83AB7942, 0x80AB7F42, 0x87AA8342, 0x80AA7A44, -0x81AA7D43, 0x83AA8A41, 0x86AB8242, 0x82AA8A41, 0x86AB8A40, 0x81AB7D43, 0x7CAB7D43, 0x83AB8C41, -0x85AA7E43, 0x84AA8642, 0x81AA7D43, 0x7CAA7F44, 0x7CAA8144, 0x82AA8342, 0x82AB8242, 0x88A98A42, -0x86AA8643, 0x88A98742, 0x83AA7E43, 0x7EAA7E44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9459,10 +10242,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00938369, 0x7AA7904F, 0x6EA97253, 0x8BAA7250, 0x80A85E55, 0x75A78B51, 0x83A67754, 0x6AAA6454, +0x66AB6853, 0x6BAB6C52, 0x66AA6055, 0x59A75E5A, 0x60A76558, 0x66A76359, 0x6DAB6A55, 0x71A66B58, +0x5BA86659, 0x7AA87E52, 0x77AB7351, 0x66AD5756, 0x56AA6957, 0x7EA77C53, 0x52AB4B59, 0x61AB7054, +0x6FAB7E50, 0x83AA7051, 0x64AC6D53, 0x7DA67754, 0x7AAA8051, 0x72AB7252, 0x7FAC814F, 0x80AC7E4F, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9482,16 +10271,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958160, 0x81AA8342, 0x7FA97B44, 0x7BAB7C43, 0x7DAB8142, 0x82AA8542, 0x87A98841, 0x87AA8641, -0x87AA8741, 0x84AA8142, 0x7FAB8143, 0x83A98643, 0x82AB8142, 0x85A98543, 0x82AB8541, 0x89A98242, -0x88AA8B40, 0x83AB8241, 0x81AB8042, 0x7EAB8542, 0x8CAA8940, 0x85A98C42, 0x80AB7C42, 0x86A98342, -0x84AA8143, 0x7FAA7D44, 0x7EAA8243, 0x8AAA8540, 0x82A98243, 0x85A98D42, 0x8BAA8841, 0x7DAB7D42, -0x7BAC7A44, 0x7EAB7F43, 0x7FAB8043, 0x82AA8642, 0x89A88D42, 0x8AA98443, 0x85AA8641, 0x7EAA7A44, -0x7FA97D44, 0x82A98843, 0x88A98442, 0x7EAA7D44, 0x83AB7A42, 0x81AB7F42, 0x85AB8142, 0x80AB7A44, -0x80AA8042, 0x7EAA8942, 0x8CAA8241, 0x82AA8542, 0x86AB8640, 0x88AB7C42, 0x7DAA7A43, 0x81AB8441, -0x8DA97F42, 0x7CAA8343, 0x86AA8142, 0x79AA7C45, 0x83A97E44, 0x7FAA8243, 0x82AA8242, 0x80AA8442, -0x8CA88D42, 0x89A98642, 0x84AA8543, 0x82AA7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9503,9 +10282,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x61AB6B54, 0x70A67F54, 0x67AB6155, 0x6BAB8252, 0x81A47F55, 0x64AB7154, 0x4EAB6A57, 0x5FA9515B, +0x6BAB7852, 0x73AB6A52, 0x6BAC6B52, 0x6EAD7651, 0x75AA6E53, 0x61AB5F56, 0x66A96E55, 0x70AC6A51, +0x5BA8535D, 0x67A87956, 0x77A58656, 0x81A57F54, 0x79A86E54, 0x68AC6453, 0x65A86956, 0x6FAA7253, +0x7AAA7350, 0x8EA7964D, 0x82AA804F, 0x7DA97352, 0x68AD6B53, 0x73AC7850, 0x79AB6E50, 0x7DA77754, +0x66A75F59, 0x6EA77457, 0x75A77D53, 0x78AB6453, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9522,16 +10308,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x81A97E44, 0x7BAB7C42, 0x7EAB8342, 0x86A88942, 0x8EA88F42, 0x91A79042, 0x8FA88C42, -0x8BA98841, 0x87AA8641, 0x82AA8142, 0x82AA8542, 0x88AA8242, 0x80AA8442, 0x82AB8542, 0x87AA8641, -0x81AA8942, 0x86AB8141, 0x82AB8042, 0x80AB8042, 0x8DAA8C3F, 0x85A98842, 0x86AA7E42, 0x84A98343, -0x81A98043, 0x7BA97F44, 0x7CA97C45, 0x85AA8741, 0x83A98343, 0x83A98B42, 0x8CA98A40, 0x7FAB7B42, -0x8AA88C43, 0x8CA88C43, 0x8AA98742, 0x87A98743, 0x85AA8343, 0x85AB8642, 0x87AA8041, 0x7DAA7F44, -0x7BA98245, 0x86A88843, 0x89A98442, 0x80AA7F43, 0x83AB7A42, 0x7EAB7F43, 0x83AA8342, 0x83AA7E43, -0x7EAA8143, 0x7FAA8543, 0x8DAA8840, 0x84AA7E43, 0x86AA8441, 0x8AAA8141, 0x7DAA7A44, 0x7AAB8242, -0x88AA8D41, 0x7EAA7E44, 0x82AB8542, 0x80AA7E44, 0x7EA98144, 0x7FAA7C44, 0x7FAA7F43, 0x80AB7B42, -0x7EAA8543, 0x8BA88C42, 0x8AA98A41, 0x8AA98B42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9546,10 +10322,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00927F6A, 0x79A88951, 0x6EAA8352, 0x76AB854F, 0x58A97D55, 0x84A96851, 0x6AA97453, 0x72A86855, +0x6DAA6F52, 0x77AA7750, 0x72A97153, 0x70A86A55, 0x62A87056, 0x71A66658, 0x61A76958, 0x69AA5E58, +0x65A67959, 0x77A86D55, 0x6DA97C53, 0x7EAC704F, 0x6AAC6454, 0x69AE5F53, 0x67A77855, 0x7DA75E55, +0x52AB5F57, 0x65AA6F54, 0x7FA98350, 0x6EAB7252, 0x6BAA8251, 0x82A68054, 0x7CA97A53, 0x7FAA8550, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9562,16 +10344,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958062, 0x7BAB7E42, 0x81AB8242, 0x88A89141, 0x91A88F41, 0x8DA88E42, 0x8BA98A42, 0x8CA88F42, -0x92A79341, 0x8CA98741, 0x87AA8741, 0x84AB8141, 0x86A98642, 0x81AB8042, 0x83AA8542, 0x87AA8940, -0x82AA8442, 0x88AB8041, 0x86AB8341, 0x80AB7C42, 0x87AB8E3F, 0x86AA8542, 0x8AAA7B42, 0x7FAA8942, -0x7FAA8044, 0x81A98243, 0x80A97B45, 0x7FAA8742, 0x86AA8442, 0x81A98A43, 0x8BA98B41, 0x82AB7B42, -0x80AB8342, 0x84AA8642, 0x84AB8342, 0x83AB8542, 0x86AA8741, 0x86AB8341, 0x7FAA7F42, 0x7EA98244, -0x7CA98444, 0x85A88843, 0x88AA8542, 0x83AA8243, 0x83AB7C42, 0x78AA8243, 0x80AA8742, 0x83AA7F42, -0x7DAB7E42, 0x80AA7F43, 0x8AA98B41, 0x84AB8142, 0x81AA8542, 0x88AB8840, 0x7DAB7D43, 0x77AB7A44, -0x81AB8841, 0x8AA98043, 0x7DAB8243, 0x88AA8442, 0x7FAA7C45, 0x83A98044, 0x7DAA7E44, 0x85AA8242, -0x7FAB7F41, 0x7EAA8043, 0x87A98B41, 0x8AA98941, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9590,9 +10362,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x77A86456, 0x63AA6C54, 0x7DA76F54, 0x63AE6C51, 0x83A57356, 0x69A97A54, 0x61A96757, 0x4FAA6A59, +0x82A97751, 0x76AB6E51, 0x6DAC6453, 0x5CAB5A57, 0x5DA96557, 0x6CA96C55, 0x6EA97055, 0x6EAB6E54, +0x6FA87C54, 0x79A96055, 0x50A86B5B, 0x7AA77B55, 0x78A67A54, 0x7CA87053, 0x6CAB6853, 0x6EA96C55, +0x73AA6953, 0x7BA97051, 0x76A88B50, 0x8EAA824C, 0x80AB774E, 0x75A96F53, 0x6FAD7550, 0x72AA6D53, +0x6DA98451, 0x7CA86C55, 0x76A67E55, 0x7CA87D52, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9602,16 +10381,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D61, 0x83AA8342, 0x85A98B42, 0x8CA98A41, 0x84AA7F42, 0x7CAB7C43, 0x7FAA7D43, 0x7FAA8143, -0x81AA8742, 0x8DA89142, 0x8CA98741, 0x8AAB8640, 0x83AA8242, 0x84AA7F42, 0x82AA8342, 0x86AB8841, -0x87AA8142, 0x88AB8241, 0x83AB8741, 0x83AB8041, 0x7FAB8940, 0x8BA98441, 0x85A98342, 0x80AB8942, -0x82A98044, 0x82A98642, 0x83A98542, 0x78AA8344, 0x86AA8142, 0x82AA8642, 0x8CA98B41, 0x87AA7B42, -0x85AA8442, 0x82AA8442, 0x86AA8641, 0x84AA8641, 0x85AA8241, 0x7EAA7E42, 0x7FAA7E43, 0x85A97C44, -0x7CA98444, 0x89A98543, 0x85AA8442, 0x85AA8242, 0x82AC8141, 0x76AB8143, 0x7DAA8742, 0x85AB8142, -0x80AB7E42, 0x83AA7B43, 0x84AA8941, 0x8AAA8542, 0x7FAA8543, 0x85AB8940, 0x82AB7D42, 0x80AA7844, -0x7BAB7F43, 0x87AA8A42, 0x7EAA7D44, 0x84AA8841, 0x86AA8243, 0x7CA97E45, 0x84A98144, 0x7DAA8243, -0x82AA8142, 0x82AB8042, 0x7EAC7C42, 0x7EAA7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9633,25 +10402,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0093796A, 0x80A88052, 0x70AA8851, 0x81A97750, 0x6BA98251, 0x6DAB7751, 0x76A87C51, 0x7AAA5F54, +0x59AB6956, 0x78A98551, 0x83A97351, 0x68A95F57, 0x61AA6A56, 0x77AB7052, 0x62A86D57, 0x81A66756, +0x63A87456, 0x65A86358, 0x79A58356, 0x72A87154, 0x7FAA7E4F, 0x73AB6852, 0x6FAC7651, 0x64AB5556, +0x62A76E57, 0x57AA4F59, 0x5BAC6D53, 0x7DA87B52, 0x83AA7851, 0x7BAC784E, 0x7AAB844E, 0x8BA88E4D, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958561, 0x83A98542, 0x86A98242, 0x7DAA7943, 0x7CAA7F44, 0x7FAA8043, 0x80AA8043, 0x81AA8342, -0x83AB8142, 0x81AA8243, 0x8DA88F42, 0x8AAA8941, 0x86AB7F41, 0x80A98044, 0x79AB8342, 0x84AA8642, -0x88AA8241, 0x83AA8841, 0x80AC8941, 0x88AB8341, 0x7CAB8341, 0x8BAA8641, 0x84A98642, 0x82AA7D43, -0x86AA7E43, 0x82AA8443, 0x80A98A42, 0x7DA97C44, 0x84AA7E43, 0x86A98442, 0x89A98C41, 0x8BAA7B42, -0x74AD7542, 0x74AC7742, 0x77AC7942, 0x79AC7942, 0x7BAC7D42, 0x7FAB8042, 0x80AA8542, 0x86A97B44, -0x7EA98444, 0x88A98443, 0x85AA8342, 0x85AA8442, 0x81AB8341, 0x7CAB7A43, 0x81AA8342, 0x84AA8641, -0x82AB8042, 0x80AA7E43, 0x79AB8742, 0x8CA98941, 0x85AA7D43, 0x84AA8641, 0x86AB7F41, 0x7FAA7F43, -0x7AAA7E43, 0x82AB8742, 0x8DA98542, 0x7EAA8143, 0x84AA8842, 0x84A97C44, 0x7EA98344, 0x83A97B44, -0x7AA98044, 0x81A98443, 0x82AA8242, 0x7FAC7E42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9677,21 +10442,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x70AC7452, 0x5FAA5C58, 0x6AA87C54, 0x64AC6854, 0x7DA67156, 0x65A97157, 0x65AA5C57, 0x60AB7653, +0x79AA6E53, 0x6EAB6055, 0x69A58558, 0x88A88850, 0x8BA9874E, 0x84AA7F4E, 0x7DA98051, 0x78A97852, +0x74A87654, 0x7EA97C52, 0x82A87C51, 0x5CA85B5A, 0x71A87B54, 0x76A77B53, 0x83A77253, 0x6CAC6953, +0x7EA87653, 0x7BA77154, 0x6FA87C53, 0x6EA86E53, 0x88A58A50, 0x82AC7E4D, 0x7DAA804F, 0x74AD6851, +0x6CAA6D54, 0x63AA8053, 0x7FA87653, 0x7BA77F54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x85A97F42, 0x7AAA7B44, 0x7EA98144, 0x83A98544, 0x85AA8343, 0x83A98443, 0x83A98542, -0x85AA8343, 0x82AA8342, 0x80AA8742, 0x8DA98B41, 0x89AA8641, 0x81AA7C43, 0x7DAB7843, 0x84A98542, -0x86AA8840, 0x7FAA8743, 0x86AC8440, 0x8BAB8540, 0x80AB7D42, 0x85AB8940, 0x83AA8342, 0x87AA8042, -0x81A98144, 0x85AA8143, 0x7AA98444, 0x83A97C44, 0x85AA8042, 0x87A98143, 0x88A98D41, 0x8DAB7F41, -0x87AA8141, 0x80AB7B42, 0x79AC7843, 0x7AAB7943, 0x79AA7B44, 0x7DAA7E43, 0x86AA8941, 0x86A97C44, -0x85A98143, 0x87A98343, 0x83AA8442, 0x81AA8542, 0x86AB8141, 0x81AC7843, 0x7FAA7D43, 0x86AA8441, -0x88AB8041, 0x81A98342, 0x7AAB7F43, 0x88AA8F40, 0x87AA8342, 0x7EAA8442, 0x85AB8041, 0x7CAB8042, -0x7DAA7844, 0x7CAA8143, 0x85A98F42, 0x86A97F44, 0x7EAA8343, 0x89A98442, 0x7DAA7E44, 0x82AA8244, -0x7FAA7B44, 0x7AAA7A44, 0x7CA98144, 0x82AA8542, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9720,20 +10482,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0093706B, 0x80A77D52, 0x70AB8750, 0x88AA6D50, 0x88A87C50, 0x76A97E50, 0x79AA6353, 0x6DAA8251, +0x78A96C52, 0x6AA86656, 0x64A76858, 0x5FA96658, 0x6FA67755, 0x7AA77255, 0x67A95E58, 0x64AC6355, +0x62A97656, 0x71A86257, 0x6FA76657, 0x5AA6695C, 0x77A77056, 0x6EAB7451, 0x7EAA7A4F, 0x71AA6D54, +0x76AC5B53, 0x47A95D5B, 0x6BA95357, 0x4BAB5C58, 0x6FAB8250, 0x7BA78353, 0x76AB6D52, 0x71AB7552, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x7CAA7A44, 0x7AA97A46, 0x7EA98145, 0x7FA97F44, 0x7FA98044, 0x82A98643, 0x86A98643, -0x86A98742, 0x87A98842, 0x85AA8242, 0x84AA8B41, 0x87AA8642, 0x83AA8042, 0x7CAA7C44, 0x79AA8643, -0x86AB8941, 0x88AA7E43, 0x86AB8741, 0x86AB8940, 0x82AB8142, 0x7CAC8241, 0x86AB8141, 0x83AA8542, -0x80AA8043, 0x80A98943, 0x7DA97C44, 0x80A97944, 0x84AA8341, 0x83A97F44, 0x88A98D41, 0x8BAA8241, -0x95A69741, 0x94A98D41, 0x88AA8B41, 0x88AA8342, 0x82A98343, 0x80AA8243, 0x88AA8542, 0x80A98045, -0x82A98343, 0x86A98343, 0x81AA8642, 0x83AB8742, 0x88AA8241, 0x81AB7F42, 0x7BAA8043, 0x80AA8342, -0x88AA8641, 0x82AA8142, 0x84AB7A42, 0x84AA8941, 0x8BAB8840, 0x81AA8143, 0x84AA8341, 0x7FAC7B42, -0x7CAB7D43, 0x78AA7D44, 0x81AA8442, 0x8DA88941, 0x7EA97E45, 0x82AA8642, 0x88A98242, 0x7EA97D45, -0x85A98443, 0x83A97C44, 0x79AB7A44, 0x7AAA7D44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9762,21 +10520,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957C62, 0x7EA97C45, 0x79A97D46, 0x80A88045, 0x7DA97C45, 0x7BAB7D43, 0x7CAB7B43, 0x7CAB8043, -0x83AA8642, 0x86A98542, 0x8AA98841, 0x85AA8343, 0x85AA8342, 0x82AA8242, 0x81A97B44, 0x79AB7A44, -0x85A98742, 0x87AA8641, 0x7EAA8542, 0x85AC8740, 0x89AB8041, 0x80AC7B42, 0x80AB8440, 0x7FAB8042, -0x84AA8042, 0x7FA98444, 0x85A97D43, 0x7BA97D45, 0x83AA8242, 0x7FA97F44, 0x88A98D41, 0x8BAA8741, -0x7EAA8043, 0x83A78844, 0x8CA88D42, 0x90A98B42, 0x87AA8442, 0x82AA8642, 0x88A98043, 0x7FA97E45, -0x80A98243, 0x81AA8543, 0x80AA8343, 0x86AB8441, 0x86AA8542, 0x82AB8142, 0x7FAB7F42, 0x7EAA8143, -0x81AA8741, 0x86AB8241, 0x84A98142, 0x7DAB8542, 0x8AAA8841, 0x87AA7D43, 0x82AA8642, 0x87AA7F41, -0x7AAB7C42, 0x7DAA7744, 0x7DAB8243, 0x82AA8642, 0x89A98242, 0x7DAA8144, 0x85AA8742, 0x85AA8543, -0x7CAA7E45, 0x85AA8643, 0x86AA8142, 0x7BAB7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x71AB6855, 0x70A96157, 0x5EA97754, 0x6BAA5D55, 0x6DA97955, 0x6AA87F55, 0x6FA95E57, 0x75AA7951, +0x79AC6E50, 0x62A97056, 0x85A8844F, 0x71A96855, 0x6CAA7652, 0x74AD6F4F, 0x6AAD6552, 0x6CA97953, +0x8DA88D4C, 0x80A87553, 0x6CA97A54, 0x7BA77555, 0x65A94D5A, 0x63A87557, 0x7EA97E51, 0x81A97651, +0x6BAB7353, 0x7CA87D52, 0x76A76E56, 0x65A86A56, 0x73A76C55, 0x70A48754, 0x7DA97951, 0x7EAC7D4E, +0x7EAC6D50, 0x73AB6054, 0x6EAA7D53, 0x75A87E54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9802,25 +10557,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947C62, 0x7DA97D45, 0x7DA87D45, 0x80A98343, 0x83AA8142, 0x81AA8042, 0x81AA8042, 0x80AB7F42, -0x7CAC7B42, 0x80AA8342, 0x83A98941, 0x8AAA8A41, 0x80AA7F43, 0x7DAA8143, 0x82A98242, 0x7EAA7B44, -0x7BAA8543, 0x86AA8A40, 0x83AA7E42, 0x84AB8641, 0x87AB8B40, 0x82AB8142, 0x7BAC7E41, 0x82AB8041, -0x7EAB8142, 0x82AA8343, 0x87A98742, 0x7FA98443, 0x82AB8741, 0x7FAA8343, 0x83AA8C42, 0x8CAA8C40, -0x85A98842, 0x85AA8343, 0x80A98044, 0x84A88944, 0x8CA98D41, 0x8CAB8541, 0x7FA97E44, 0x7CA97C45, -0x7DA98344, 0x81AA8143, 0x82A98143, 0x83AB8441, 0x83AA8643, 0x85AA8042, 0x81AB7D42, 0x81AA7C43, -0x81AB8542, 0x89AB8140, 0x87AA8841, 0x81AB7C42, 0x86A98B41, 0x88AB8541, 0x7EAA8243, 0x87AA8441, -0x7DAC7B42, 0x80AB8042, 0x7CAB7843, 0x80AB8243, 0x81AA8643, 0x84A98043, 0x80AA8443, 0x89AA8442, -0x85AA8342, 0x80A97F44, 0x85AA8542, 0x89A98A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0095696A, 0x73A78054, 0x7CAC834E, 0x95A96F4F, 0x90A97A4E, 0x7BA97451, 0x63AB6954, 0x6CA95E56, +0x6AAA6754, 0x6AAC6D51, 0x6FAA7352, 0x78A97752, 0x71AA6255, 0x57AC4859, 0x48AC5559, 0x75A98553, +0x71AB5E55, 0x61AB6355, 0x71A77E55, 0x6EA86A56, 0x63A7575B, 0x5DA67658, 0x70AA7053, 0x7BAA814E, +0x7EAA7650, 0x7DAA7452, 0x55A94D5A, 0x67A96755, 0x56AB5758, 0x66AD7750, 0x7FA67355, 0x6DA67A56, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9842,16 +10593,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947D62, 0x7BA87C45, 0x7FA98643, 0x84AA7D43, 0x7FAB8142, 0x80AB7E42, 0x7EAB8143, 0x83AB8142, -0x7EAB7D42, 0x7DAC7A41, 0x80AA8242, 0x83AA8941, 0x8DAA8441, 0x7EAA7E44, 0x80AA8343, 0x81A98143, -0x7DAB7C43, 0x87AA8641, 0x89AA8541, 0x7DAB8243, 0x86AB8840, 0x89AB8240, 0x84AB7D41, 0x7DAB8241, -0x7FAB7D43, 0x7FAA7E43, 0x7EAA8643, 0x8AAA8641, 0x84AA8642, 0x7FAA8642, 0x83A98D42, 0x8BAA8F40, -0x84AA8043, 0x86A98A42, 0x87AA8442, 0x82A98343, 0x86A88943, 0x8AAA8B40, 0x84AA8142, 0x76A97945, -0x7BA97C45, 0x85A98143, 0x7EAA8243, 0x7FAA8343, 0x84AB8242, 0x85AA8542, 0x80AB8042, 0x7CAB8043, -0x7BAA7E43, 0x81AA8641, 0x83AC8840, 0x8AAA8041, 0x7FAA8942, 0x8CAA8740, 0x88AA8242, 0x84AA8442, -0x83AA7D43, 0x7CAB7F42, 0x81AA7D43, 0x78AA7F43, 0x83AB7E42, 0x82AA8642, 0x82A98143, 0x85A98742, -0x85AA8442, 0x85A98443, 0x81AA7F43, 0x83AA8342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9861,9 +10602,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x78A97851, 0x64AA7955, 0x64A95F57, 0x6EA95B57, 0x64AB7D53, 0x6DA77955, 0x69A96757, 0x7AAA7752, +0x76AA6E53, 0x6EA88054, 0x7DA96E52, 0x74AC6751, 0x5BAC5957, 0x55AC5259, 0x52AB5059, 0x4FAC5158, +0x67AE6B4F, 0x6AAA8251, 0x87A97F4F, 0x72A96C54, 0x84A67A53, 0x6BA95357, 0x5BA97956, 0x7CAA894F, +0x89AA7250, 0x62AA7354, 0x7CAA7A51, 0x77A76358, 0x64A96656, 0x67A86A56, 0x6FA87455, 0x84A96E52, +0x7CAC7F4E, 0x7DAC724F, 0x72A96B54, 0x7FA97553, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9882,16 +10630,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957A62, 0x7FA98044, 0x89A97F42, 0x7CAB8242, 0x81AA7F42, 0x7DAA7C43, 0x7DAB7D43, 0x7EAB7D42, -0x7BAA7C44, 0x7BAA7C43, 0x7BAC7942, 0x80AB8342, 0x88AA8B40, 0x85AA7B43, 0x7DAA7E44, 0x82AA8542, -0x7EAA7A44, 0x7CAA8842, 0x82AA8A41, 0x84A97C43, 0x7FAB8342, 0x86AA8E40, 0x85AB8541, 0x83AB7B41, -0x7EAB8342, 0x7FAB7E43, 0x80AA7B45, 0x7EAB8342, 0x83AA8342, 0x7EAA8942, 0x7FA98F42, 0x8DAA9040, -0x91A98F40, 0x87A97E43, 0x83AA8941, 0x87AA8341, 0x86A98743, 0x88AA8941, 0x86AA8342, 0x82AA8642, -0x83A97D43, 0x7DA97F44, 0x83AA7F43, 0x81AA8043, 0x83AA8242, 0x81AA8543, 0x86AA8042, 0x7EAB7B43, -0x7FAA7B43, 0x7FAA8642, 0x85AC8040, 0x87AA8A41, 0x82AB8142, 0x8AAA8941, 0x86AA8841, 0x82AA8343, -0x81AA8143, 0x7CAB7A42, 0x7EAA8242, 0x81AB7843, 0x79AB8143, 0x80AB7E43, 0x85AA8442, 0x80AA8143, -0x87A98842, 0x87A98343, 0x85A98443, 0x81AA7F44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9904,10 +10642,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956D69, 0x6BA68356, 0x82AC7E4E, 0x98A8754F, 0x8DA8854E, 0x7FA97251, 0x6DA96854, 0x5DAB6256, +0x79A97C51, 0x7BA86E53, 0x75A97553, 0x71A86F57, 0x71A76D58, 0x66A76059, 0x65A87255, 0x7DA96D54, +0x5EAC6755, 0x85A97E50, 0x68AB6354, 0x5EA97256, 0x85A67854, 0x71AA6154, 0x53A75C5C, 0x6CA87255, +0x69AB7052, 0x76AA6952, 0x6BAB7F51, 0x75A96155, 0x5EA86C56, 0x60AA5558, 0x58AE5E54, 0x71AB7D4F, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9922,16 +10666,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947C63, 0x81A98743, 0x7DAA7F43, 0x7FAA7F43, 0x82AB8342, 0x86AA8841, 0x8AA98A41, 0x8AAA8940, -0x85AA7F42, 0x79AA7744, 0x79AB7C43, 0x79AC7B42, 0x82AA8541, 0x8AAB8641, 0x7CAB7C43, 0x80AA8442, -0x84A97B44, 0x7AAB7E43, 0x86AA8143, 0x87A98841, 0x7BAB7D43, 0x83AB8441, 0x89AA8841, 0x84AA8442, -0x7CAC7D42, 0x84AB7C42, 0x7CAA8143, 0x7FA97B45, 0x7EAA8343, 0x7FAA8442, 0x7DA99042, 0x90AA8C40, -0x7FA98943, 0x94A99141, 0x86A98343, 0x88A98642, 0x84AA8542, 0x84AA8742, 0x83AA8242, 0x83AA8342, -0x81AA7F43, 0x81AA8143, 0x7FA98243, 0x83AA7F42, 0x80A97E44, 0x84AB7F42, 0x82A98743, 0x81AB7D42, -0x7CAB7F43, 0x7AAB8143, 0x86AB8640, 0x83AC883F, 0x8AAA8241, 0x80AA8741, 0x87AB8541, 0x87AB8142, -0x81AA8343, 0x82AA7D43, 0x79AB7C43, 0x81AB8143, 0x7EAA7844, 0x7CAB8042, 0x7CAA8143, 0x85AA8441, -0x7DAA8443, 0x88A98942, 0x86A98542, 0x88A98842, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9948,9 +10682,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x87A8804F, 0x78AB6654, 0x72A86157, 0x5CA87257, 0x61AD7253, 0x72A67456, 0x6AA86857, 0x7DAA7351, +0x70A96D54, 0x81A78051, 0x77AB7051, 0x5FAB5E56, 0x76A68552, 0x88A78650, 0x88A48954, 0x8DA58652, +0x77A86D53, 0x61AC6A53, 0x73AC744F, 0x81AA7B4F, 0x6AAA6755, 0x84A77553, 0x75AA5C54, 0x5DA97A56, +0x7BAA8B4F, 0x83AB714F, 0x58A86958, 0x7AAB7D50, 0x81A67854, 0x6BA85D58, 0x64AA6654, 0x6EA87254, +0x7EAA6D52, 0x77AB7F50, 0x75A88152, 0x72A87E53, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9962,16 +10703,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E62, 0x85AA7B43, 0x81A98242, 0x83AA8741, 0x89A98642, 0x82A88144, 0x80A87E45, 0x7EA78345, -0x87A78643, 0x86AA8142, 0x7AAB7644, 0x7BAB7E42, 0x7CAB8342, 0x84AB8840, 0x84AB7E41, 0x7CAA7F44, -0x85A98543, 0x79A97745, 0x7FAA8942, 0x7FAB8342, 0x89AA7F42, 0x7CAB8142, 0x83AB8442, 0x84AB8242, -0x86AB8242, 0x7AAB8442, 0x7EAB7A43, 0x7DAA8143, 0x83AA7F43, 0x7BAB8243, 0x7CA98F42, 0x8FAA8B40, -0x7EAA7E44, 0x82A98E42, 0x91A98642, 0x7FAA8643, 0x84AB8442, 0x82AA8642, 0x7EAA8543, 0x80A97F44, -0x82AA8442, 0x86AA8442, 0x85A98643, 0x80A98842, 0x83AA8443, 0x81AA7F43, 0x7FAA7F43, 0x84AA8242, -0x7DAB7C43, 0x7EAB7A42, 0x7FAA8643, 0x85AC833F, 0x89AA8940, 0x84AB8440, 0x86AA8441, 0x83AB8442, -0x7FAA8142, 0x82AA8143, 0x7EA97944, 0x7BAB7F43, 0x7FAA8043, 0x7CAA7A44, 0x7BAB7A43, 0x7AAB8043, -0x84AA8142, 0x81AA8542, 0x87A98742, 0x85AA8742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -9991,10 +10722,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957768, 0x6FA77556, 0x7BAB7B50, 0x9CA67D4E, 0x8BA87E4F, 0x75AA6F51, 0x71AA6153, 0x66A97B52, +0x80A97750, 0x91A58553, 0x85A48B53, 0x83A57B54, 0x70A86F55, 0x72A86B55, 0x6BA86C56, 0x66A85E59, +0x5CA66B5A, 0x76AA6A55, 0x61AC7953, 0x7FAA6852, 0x5CAB5957, 0x70A78154, 0x7AA96C54, 0x67A86058, +0x64A86759, 0x6AA97554, 0x7FAA7050, 0x6EAB7052, 0x77A86E54, 0x62A85D57, 0x68A96156, 0x57AC6157, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10002,16 +10739,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958861, 0x7DAA8243, 0x82AA8641, 0x8AA98542, 0x7EA97C45, 0x81AA8242, 0x84AB8540, 0x84AC8041, -0x7FAB7D43, 0x7CA98144, 0x86A98542, 0x7BAA7844, 0x7FAA7F43, 0x83AA8641, 0x88AB8740, 0x80AB7B43, -0x7EAA8443, 0x84AA7C43, 0x77AB7C44, 0x8BA97F43, 0x80AA8A41, 0x84AA7E42, 0x7EAB8043, 0x80AB8442, -0x7FAA8342, 0x85AA7C42, 0x82AB8242, 0x78AB7C44, 0x7EAA7B43, 0x7AAA8243, 0x7AAA8E43, 0x90AA8C40, -0x7BAC7A43, 0x7EAA8143, 0x8FA89141, 0x81A98044, 0x86AB8441, 0x81AA8442, 0x7FAB8442, 0x7FAB7E43, -0x80AA8443, 0x85AA8642, 0x88AA8542, 0x8AA98941, 0x86A98842, 0x81AA8043, 0x80AA8043, 0x83A98542, -0x84AA7F43, 0x7DAA7F43, 0x7AAB8243, 0x87AC8240, 0x85AB8740, 0x8DAB8740, 0x84AA8641, 0x86AA8442, -0x84AA8242, 0x83AA8342, 0x82A97E44, 0x79AA7745, 0x7BAB7D43, 0x7FAA7D44, 0x79AA7744, 0x7BAB7943, -0x77AA8143, 0x85AA8042, 0x81AA8642, 0x88A98642, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10035,23 +10762,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x88A58852, 0x78A97651, 0x6BAA7654, 0x55AB6257, 0x77AA6E53, 0x78A67256, 0x74A96556, 0x75AB7651, +0x76A97253, 0x87A87950, 0x71AC6353, 0x6BA87C54, 0x86A66B55, 0x6DA76757, 0x5AAB5657, 0x56AB5458, +0x5BAA6756, 0x74A77855, 0x73AB6A52, 0x73AC6E50, 0x81AA824E, 0x67AA5C57, 0x89A67652, 0x7AAA6452, +0x5BAA7E55, 0x77AB814F, 0x80A9814F, 0x6FA96955, 0x77A98152, 0x80A87D51, 0x7EA57257, 0x66A96756, +0x64A87955, 0x65AC7253, 0x84AB7C4F, 0x81A67C53, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x7DAA8342, 0x88AA8A40, 0x83A97A44, 0x7FAA8742, 0x8BAB8740, 0x83AC8142, 0x82AB8741, -0x89AB8840, 0x89AC8140, 0x80A98343, 0x89A98342, 0x78AA7B44, 0x82AA8243, 0x88AA8940, 0x86AB8041, -0x79AB7B44, 0x80AA8642, 0x7EAA7545, 0x79AB8842, 0x83AA7F43, 0x89AA8941, 0x81AA7C43, 0x80AA7D43, -0x81AA8242, 0x7FAA8642, 0x7EAB7E42, 0x85AB8041, 0x7CAB7D43, 0x81AA8342, 0x7EA99142, 0x8DAA8E40, -0x7AAB7C42, 0x7DAB7F43, 0x84AA8D41, 0x8CA97B43, 0x85AA8142, 0x7DAB8243, 0x82AA7F43, 0x7EAB7E44, -0x80AA8342, 0x81AA8243, 0x7EAA7E43, 0x84AA8A42, 0x89AA8A41, 0x8AA98A42, 0x83AA8243, 0x7FAA8044, -0x84AA8642, 0x7EAA7C44, 0x7EAB7C43, 0x81AA8442, 0x82AC8440, 0x89AA8C40, 0x87AB8640, 0x87A98542, -0x81AB8342, 0x81AA8343, 0x82AA8242, 0x7EA97945, 0x75AB7844, 0x7FAA7E44, 0x7EAA7F43, 0x7AAA7B44, -0x7AAB7843, 0x81AA8741, 0x82AA8042, 0x86AA8642, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10078,20 +10802,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956C6A, 0x70A86E55, 0x79AB7052, 0x92A77A50, 0x83A8834F, 0x71AA6E53, 0x65AA7153, 0x78A87852, +0x7AA78952, 0x88A67453, 0x78A97754, 0x6AA86857, 0x67A66A58, 0x65A95F57, 0x5AAA5D58, 0x65A96C57, +0x6BA97355, 0x70A86656, 0x65A87257, 0x6FAA7555, 0x83AA7851, 0x5EAB4F58, 0x58AA6E55, 0x6CA96955, +0x6BA86D55, 0x63A86858, 0x6FA87954, 0x8DA87F50, 0x79AA7451, 0x7AA87054, 0x6AA86157, 0x61AB5C56, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x83AA8442, 0x8FA98741, 0x78AA7F44, 0x8CAA8641, 0x7DAC7C42, 0x7CAB7A43, 0x7AAA7B45, -0x7AAA7C44, 0x7EAB8342, 0x86AD8540, 0x80AA8243, 0x88A98042, 0x7AAA7E44, 0x80AA8542, 0x85AB8441, -0x82AB7B42, 0x7CAB7D43, 0x87AA8442, 0x78AA7345, 0x80AA8443, 0x80AB8541, 0x8BA98741, 0x7CAB7C43, -0x80AA8242, 0x83AA7F42, 0x85A98643, 0x7BAB8042, 0x85AA8940, 0x87AA7F42, 0x85A99142, 0x8DAA9040, -0x7CAA7B44, 0x7AAC7C42, 0x80AB8742, 0x90A98142, 0x86AA8242, 0x7FAB8343, 0x83AA7C42, 0x7FAB8143, -0x85AA8342, 0x7DAA7A44, 0x79AA7B45, 0x7CAA7B44, 0x7DAA8942, 0x8CA98C40, 0x8AA98742, 0x83A98144, -0x80AA8642, 0x85A98043, 0x7EAA7F43, 0x7FAB8142, 0x87AA7F41, 0x83AB8940, 0x8FAA8940, 0x84AB8541, -0x82AB8042, 0x82AB8342, 0x85AB8341, 0x84AA8143, 0x7EA97845, 0x78AA7E43, 0x82AA8143, 0x83AA7D43, -0x7EAA7F43, 0x7BAB7F43, 0x88A98442, 0x7EAA8543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10123,18 +10843,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F62, 0x84AA8741, 0x8DA97F43, 0x7BAA8C42, 0x87AB7D41, 0x84AA8243, 0x7DA97D45, 0x7EA97F44, -0x7EA97E44, 0x7FA97E44, 0x7DAA7C44, 0x7FAC8241, 0x82A98643, 0x84A97A43, 0x79AA8044, 0x84AB8441, -0x84AB8541, 0x7FAB7C42, 0x7BAA8343, 0x86A97B44, 0x70AB7945, 0x83AA8343, 0x82AB8841, 0x8AAA7F42, -0x7BAB8043, 0x84A98642, 0x83AA8342, 0x87A98143, 0x7DAB7D42, 0x81AA8542, 0x8AA89142, 0x8DAA8E40, -0x89A88044, 0x78AB7B42, 0x7CAB8143, 0x8DA98941, 0x83AA8143, 0x7EAA8243, 0x83AB7843, 0x81AA8242, -0x7CAA7A44, 0x79AB7944, 0x76AA7745, 0x77AA7845, 0x79AA7B45, 0x7BAA8443, 0x8BA98D41, 0x89A98343, -0x81A98144, 0x87A98842, 0x82AA8043, 0x7DAB8042, 0x7DAA8543, 0x80AB8740, 0x89AA8F40, 0x8AAA8440, -0x84AB8142, 0x7FAC8042, 0x83AA8442, 0x86AB8541, 0x86AA8043, 0x7BA97945, 0x7CAA8343, 0x82A97F44, -0x7DAA7D43, 0x7DAB7A43, 0x7DAA8842, 0x85AA8042, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7CA48655, 0x8BA9774E, 0x72AB6A53, 0x76AA5556, 0x6FA96D53, 0x6EA77856, 0x6CA86857, 0x71A97653, +0x76AA7652, 0x8CA87750, 0x70AB6754, 0x75A88052, 0x6CA76758, 0x66AC7D50, 0x7BA9874F, 0x81AA7E4F, +0x81A97651, 0x5BAC5457, 0x6AA96E55, 0x6AAC6553, 0x70AD6D4F, 0x7FAB824F, 0x69AA6954, 0x91A86A51, +0x6CAC6053, 0x65AA7B54, 0x7AAB7A51, 0x83A87E51, 0x79AA6951, 0x75A68653, 0x87A77F51, 0x85A66B56, +0x63A96956, 0x75A96B54, 0x75AA8051, 0x7BA88551, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10162,23 +10879,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948461, 0x85A98E40, 0x8CA97A43, 0x86AA8A41, 0x80AA8742, 0x83A87E44, 0x81A98543, 0x86A88643, -0x86A98442, 0x81A97F42, 0x7BA97D45, 0x7AAA7B45, 0x80AC8242, 0x81A88544, 0x80AA7844, 0x7FA98543, -0x87AA8541, 0x89AA8241, 0x7BAB7743, 0x7DA98743, 0x82A97545, 0x74AA8044, 0x83AA7F42, 0x84AA8D40, -0x85AA7F42, 0x7EAB8242, 0x85AA8642, 0x80AA8743, 0x8AA98B42, 0x89A98A42, 0x92A99241, 0x8BAB8D40, -0x88A88A43, 0x7BAA7844, 0x79AC7E43, 0x86A98D41, 0x81A98144, 0x7CAA8343, 0x7EAA7B44, 0x84AA7C42, -0x7CAA7944, 0x78AA7A45, 0x7DAA8043, 0x81AB7E42, 0x7BAB7843, 0x77AA7746, 0x77AA8044, 0x89A98741, -0x82A98244, 0x84A98243, 0x87A98343, 0x82AA7D42, 0x80AB8142, 0x87AA8442, 0x85AB8740, 0x8EAA8F40, -0x87AB8540, 0x83AB8142, 0x7FAB8242, 0x84AB8741, 0x85AB8640, 0x85A97C44, 0x7AA97A45, 0x80AA8543, -0x82AA7E43, 0x7DAA8143, 0x7CAB7D42, 0x86AA8741, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956A6A, 0x75A96A54, 0x73AA6655, 0x88A87D50, 0x84A87B4F, 0x74AA6754, 0x6AA97D52, 0x7DAA7C50, +0x88A67155, 0x78A77A54, 0x7FA67B54, 0x6BAB5B54, 0x55AC5257, 0x55AC5757, 0x56AC4E58, 0x4EAB4F5B, +0x54AB525A, 0x51AB6758, 0x6DAB6855, 0x68A96B56, 0x6EA87155, 0x81A88852, 0x69AC5D55, 0x5CAB6755, +0x71AA6653, 0x64A96756, 0x62A86158, 0x6AA87755, 0x89A58951, 0x7BAA7351, 0x71A86C56, 0x6FA86356, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10202,16 +10915,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948761, 0x86A98F41, 0x85AA7B43, 0x8DAB8241, 0x87A98342, 0x7CA98443, 0x8AA88842, 0x83A98144, -0x7EAA7E45, 0x7CAA7C44, 0x7FA98043, 0x7DAA7944, 0x7BA97A45, 0x7FAB8142, 0x81A88544, 0x7AAA7A45, -0x84AA8642, 0x85AA8641, 0x81AB7C43, 0x76AB7744, 0x86A88943, 0x7DAA7144, 0x78AA8243, 0x7FAB8242, -0x8DA98940, 0x7FAB7D42, 0x84AA8143, 0x84AA8342, 0x83AA8941, 0x8AAA8C41, 0x8CAB8840, 0x8AAB8D40, -0x82AA8642, 0x84A97844, 0x78AB7C43, 0x80AA8D42, 0x83A98244, 0x7AAB8143, 0x78AB8043, 0x82AA7843, -0x78AA7C44, 0x7DAB7E43, 0x83AB8641, 0x87AA8541, 0x83AA8541, 0x82AB7B42, 0x77AA7446, 0x72AA8245, -0x87A98642, 0x85A88743, 0x82A98743, 0x83AA8143, 0x7DAB7F42, 0x7DAA8343, 0x81AB8442, 0x86AA8A40, -0x8FAA8B3F, 0x88AA8641, 0x80AB7C43, 0x7DAC8241, 0x84AB8441, 0x83AB8742, 0x83A97E44, 0x7EA97D44, -0x83A98743, 0x81AA8242, 0x84AB7D42, 0x7BAB8741, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10219,9 +10922,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7CA68054, 0x86A78950, 0x7AAB6C51, 0x69AA6E54, 0x58A97655, 0x71A97355, 0x75A77157, 0x75A87B53, +0x7FA97452, 0x88A87251, 0x7AAA6E53, 0x80A77B53, 0x69AA6854, 0x81A87A52, 0x6FA86D55, 0x6AA86D57, +0x79A77E53, 0x83A77F51, 0x7DA95556, 0x60AB6855, 0x67AC6553, 0x6AAC6F51, 0x7CAA834F, 0x68A97A54, +0x8AAA6251, 0x6EAD6E50, 0x61AB7953, 0x7DAA7652, 0x81A68452, 0x80AA7550, 0x6CA78C52, 0x8FA67C51, +0x7BA66159, 0x6AA87655, 0x72A97255, 0x82A98150, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10242,16 +10952,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948961, 0x85A98E41, 0x80AA8242, 0x8CAA8241, 0x88AA7A43, 0x83A98C42, 0x89A98442, 0x7FAA7D43, -0x7DAB7E42, 0x80AB8042, 0x7DAB7B43, 0x78A97A45, 0x7BAA7D45, 0x7DA97C45, 0x80AA7F43, 0x82A97F44, -0x79A97E45, 0x85AA8742, 0x84AB8241, 0x7DAC7743, 0x77AA7E44, 0x86A98642, 0x75AA7345, 0x7CAA8143, -0x81AB8741, 0x89AA8141, 0x7DAB8142, 0x86A98443, 0x85AA8841, 0x82AB8242, 0x88AB8841, 0x88AB8741, -0x80AB8142, 0x87A97F43, 0x7AAB7B43, 0x80AA8D42, 0x86A88544, 0x7CAB8143, 0x74AB8043, 0x7EAA7644, -0x7DAB7E43, 0x83AB8441, 0x81AB7D42, 0x7BAB7A42, 0x7DAA7F43, 0x83AA8542, 0x82AB7C41, 0x77AA7146, -0x75AA8244, 0x87A98543, 0x89A98643, 0x89A98642, 0x81AA7F43, 0x80AB7D42, 0x82A98243, 0x81AA8641, -0x87AA8F40, 0x8EAA8840, 0x87AA8442, 0x7DAC7E42, 0x80AB8142, 0x86AA8442, 0x85AA8741, 0x7FA97A45, -0x7AA98144, 0x85A98043, 0x84AA8641, 0x7EAB8042, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10262,10 +10962,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0095646B, 0x7AA96F52, 0x6AAB6156, 0x7CA87D51, 0x86A87B51, 0x77AB6252, 0x76AA7A50, 0x7EA88F51, +0x6EA77955, 0x76A68753, 0x71AA5855, 0x4AAB575A, 0x60AC6054, 0x65AA6954, 0x6DA97253, 0x6AAA6155, +0x62AB5F56, 0x54AA4F5B, 0x5BAC5458, 0x62AB6756, 0x60AA7254, 0x6FA97454, 0x83A98552, 0x75AB5F53, +0x5DA96B55, 0x77AB6C51, 0x5DA86F57, 0x62A86F57, 0x71A87B53, 0x91A48B52, 0x76A96B53, 0x6CA77356, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10282,16 +10988,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948A61, 0x85A98E41, 0x7FAA8642, 0x85AA8741, 0x7EAA7D43, 0x8CA98641, 0x81AB7C43, 0x7FAA8243, -0x81AA7E43, 0x7DAA7C44, 0x7AAB7944, 0x7AAB7E43, 0x7FA97B44, 0x7CAA7D45, 0x7EAA7B44, 0x7EAA8144, -0x84A97E44, 0x7EAA8043, 0x86AA8541, 0x80AB7C42, 0x7BAC7943, 0x79AA8244, 0x87A97F42, 0x74AB7744, -0x7FAB7E43, 0x84AA8941, 0x86AB7F41, 0x7FAA8442, 0x88A98543, 0x86AA8942, 0x88AA8342, 0x84AA8A41, -0x7BAB7F43, 0x81A98743, 0x7EAB7B43, 0x7FAB8842, 0x88A88743, 0x7CAB8243, 0x74AB7F44, 0x7AAA7545, -0x7FAB8542, 0x82AB7F42, 0x7FAC7F42, 0x81AB8342, 0x84AB8142, 0x7BAA7B44, 0x7DAA8143, 0x81AB7F42, -0x79AA7646, 0x7DA98543, 0x84A88A43, 0x88A88743, 0x85AA8143, 0x7EAB7D42, 0x7DAA7F44, 0x81AA8242, -0x86AB8241, 0x8DA99040, 0x88AA8840, 0x86AA8342, 0x7EAB7F42, 0x82AB8442, 0x85AB8041, 0x86A98442, -0x7EA97A44, 0x80A98343, 0x83A98642, 0x84AB7C42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10306,9 +11002,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x59A97B54, 0x7CA58D54, 0x8DA97C4F, 0x69AA6F54, 0x6CAA6C54, 0x80A87852, 0x7BA66758, 0x7DA78053, +0x7BA97D51, 0x90A8804F, 0x78AA7852, 0x84A77154, 0x6EA97853, 0x7BA76956, 0x5DA85D5A, 0x68A76B59, +0x64A7615A, 0x62A76C58, 0x79A67B54, 0x77AA5357, 0x59AC6756, 0x6AAC6A52, 0x70AB7551, 0x84A97B50, +0x62A97356, 0x7CAB5953, 0x68AE714F, 0x69AA7654, 0x80AC7450, 0x76A67956, 0x6FAA6D52, 0x72A59852, +0x79A87253, 0x5FA86859, 0x7CA76D55, 0x7BA97D52, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10322,16 +11025,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948761, 0x85A98C41, 0x80AA8942, 0x84AB8A41, 0x78AA8743, 0x8AAA7E41, 0x7FAA8342, 0x82A97E43, -0x80AA8142, 0x84AA8442, 0x82AA8242, 0x81AA7F43, 0x7CAA8143, 0x81A97D44, 0x7BA97F45, 0x7FAA7A44, -0x7DA88545, 0x84A98043, 0x80AA8642, 0x87AB8140, 0x7FAB7D43, 0x7FAC7A42, 0x7DA98543, 0x87A97A44, -0x75AB7B44, 0x7DAB8143, 0x87AA8941, 0x81AB8242, 0x80AA8941, 0x88A98843, 0x86AA8542, 0x87AA8941, -0x7CAA7B44, 0x7BAA8643, 0x84AA7D43, 0x7DAC8442, 0x89A98643, 0x7CAA8443, 0x79AB8043, 0x78AA7B45, -0x84AA8741, 0x81AB8042, 0x81AC8141, 0x81AB8041, 0x80AB8242, 0x84AA8342, 0x7DAB7C43, 0x7DAA8343, -0x86AA8242, 0x77A97746, 0x84A98343, 0x88A98543, 0x89AA8842, 0x7FAA7F43, 0x7EAB7F42, 0x81A98343, -0x7EAB8542, 0x81A98A41, 0x91AA8B40, 0x86AA8841, 0x84AB8042, 0x7FAB8242, 0x85AA8441, 0x81AA8442, -0x88A98142, 0x7FA98044, 0x86A98642, 0x88AA8142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10349,10 +11042,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0095686A, 0x77AA6553, 0x73AA6756, 0x80A88251, 0x8AA77F51, 0x75AA7352, 0x80A97950, 0x82A77D53, +0x79A78153, 0x7EAA6553, 0x54AA6258, 0x79A87653, 0x71A96C55, 0x6DA97154, 0x7AA67C53, 0x79A88052, +0x85A9834F, 0x77A96953, 0x5FAB5957, 0x59AB6457, 0x5EAB6D56, 0x5FAB6C54, 0x71A86F55, 0x81A88252, +0x73AA6252, 0x5EA97355, 0x7BAB6F51, 0x61A97754, 0x6FAA7253, 0x73A88251, 0x92A57D52, 0x6FA96D53, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10362,16 +11061,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948561, 0x84AA8842, 0x80AA8A42, 0x86AA8741, 0x78AA8B42, 0x82AB7E42, 0x83A98142, 0x84AA8741, -0x82AA7F43, 0x7DAA7D44, 0x7DAA7D44, 0x80AA8442, 0x85AA8142, 0x7EA98244, 0x85A88144, 0x7CAA7E44, -0x7DAA7C44, 0x82A88A44, 0x85A98242, 0x86AA8A41, 0x84AB7F42, 0x7FAC8142, 0x80AB7A42, 0x7EA98343, -0x7EAA7444, 0x77AB7C43, 0x7FAA8343, 0x88AA8741, 0x84AB8441, 0x84AA8A40, 0x88AA8841, 0x88A98C41, -0x84AA7D43, 0x7CAA8043, 0x86A98143, 0x7CAC8041, 0x88A98243, 0x7FAA8543, 0x7CAA7D44, 0x74AB7F44, -0x89AA8441, 0x84AB8042, 0x80AC7C42, 0x79AB7844, 0x7AAA7D44, 0x7FAA7F44, 0x80AA8143, 0x81AB8143, -0x81AA8642, 0x85AA7B43, 0x75A97F45, 0x85A98643, 0x84A98542, 0x86AA8143, 0x7FAB7E42, 0x81AA8043, -0x83AA7F42, 0x86AA8141, 0x84A98C41, 0x8DAA8940, 0x87AB8440, 0x83AA8142, 0x81AC8341, 0x82AA8042, -0x80AA8A41, 0x86AA8043, 0x84A98743, 0x86A98642, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10393,25 +11082,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x52A94A5C, 0x7FA77D52, 0x8BA78A50, 0x67AB6754, 0x77AB6652, 0x71A87354, 0x6FA76E57, 0x6BA88853, +0x79AA7950, 0x8EA87F4F, 0x7EAA7B51, 0x78A86C55, 0x63A97953, 0x74A96155, 0x5CA77959, 0x69AA5E56, +0x5BAA6656, 0x6DA77256, 0x6AA76A58, 0x7EA77953, 0x6EAB5056, 0x6EAB7152, 0x73AA6A53, 0x6FAA6D53, +0x81AA7051, 0x65A87D53, 0x7EAB6051, 0x6CAE714F, 0x6EAA7653, 0x81AA7551, 0x73A57E57, 0x79A86954, +0x92A67752, 0x69A85D59, 0x6DA87A55, 0x76A88653, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948561, 0x88A98842, 0x81AA8B41, 0x88AA8441, 0x7FAA8842, 0x80AB8442, 0x84A98642, 0x85AB7A43, -0x78AB7F43, 0x84AA8941, 0x89AA8241, 0x7EAA7A44, 0x7BAB7F44, 0x84AB8242, 0x7CA98044, 0x88A87E44, -0x7CAA8344, 0x7DAA7C44, 0x85A88843, 0x82AA8243, 0x88AA8740, 0x82AB7E42, 0x81AB8441, 0x7CAB7744, -0x7CA98044, 0x77AA7445, 0x79AB8043, 0x87AA8642, 0x89AA8441, 0x86AB8440, 0x85AB8940, 0x8CAA8D40, -0x86AA8043, 0x79AB7B44, 0x85A98443, 0x7DAB8042, 0x87A98143, 0x7DAA8344, 0x7BAA7C44, 0x75AB8143, -0x87AA8342, 0x7FAB7F43, 0x7AAA7C44, 0x81A98843, 0x8AA88942, 0x87A98343, 0x81AA8043, 0x83AA8343, -0x84AA8542, 0x82AA8842, 0x81AA7645, 0x7CAA8344, 0x85AA8543, 0x83AA8842, 0x85A98243, 0x81AB8441, -0x80A98543, 0x80AA8641, 0x86AA7E41, 0x87A98D41, 0x89AA8740, 0x86AA8641, 0x83AB7F42, 0x7FAB8241, -0x81AB7F42, 0x8AA98642, 0x83A98343, 0x87A98942, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10436,22 +11122,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946E6A, 0x76AA6A53, 0x75AA6A55, 0x7FA78C50, 0x82A88050, 0x77A97E51, 0x7EA97C50, 0x8AA96A53, +0x7AA78851, 0x6FAB5C54, 0x75A77854, 0x6FA96F55, 0x77A96F53, 0x63AB5A56, 0x61AA6A54, 0x74A67A55, +0x79A47D57, 0x84A77A52, 0x7AA87353, 0x66AB6555, 0x5EA97056, 0x6DAB7054, 0x5EA97155, 0x75A86955, +0x7CA77A54, 0x6AAA5B55, 0x65A97953, 0x75AB6B52, 0x72A97B51, 0x77AA7352, 0x7FA78451, 0x8CA67153, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948561, 0x89AA8741, 0x81AA8A41, 0x89AB8141, 0x86AA8441, 0x83AA8841, 0x84AA8242, 0x78AB7F43, -0x89AA8940, 0x88A98842, 0x86A98842, 0x8BA98A42, 0x88A98242, 0x7CAA7845, 0x7DAB7F43, 0x7CAA8243, -0x86A97D43, 0x7EAA7F44, 0x7AA97E45, 0x85A98343, 0x80AA8242, 0x86AB8641, 0x82AB8142, 0x83AB8042, -0x75AA7445, 0x80AA7943, 0x72AB7744, 0x7DAB8641, 0x87A98642, 0x8AAA8341, 0x85AB8441, 0x84AB8341, -0x82AB8342, 0x7AAA7A44, 0x7FAA8642, 0x7CAB7E43, 0x86A98244, 0x7DAA8244, 0x7DAA7944, 0x7BAB8442, -0x85AA8142, 0x81AA7B43, 0x7FA88A44, 0x8BA98B41, 0x8CAA8A40, 0x89AA8740, 0x86AA8841, 0x84AA8442, -0x83AA8342, 0x87A98742, 0x89AA8641, 0x79AA7945, 0x82AA8542, 0x84A98542, 0x89A98242, 0x7FAB7F42, -0x87A98442, 0x86A98243, 0x81AA8642, 0x81AA8042, 0x8BA88C41, 0x88AB8740, 0x87AA8741, 0x83AB7E41, -0x80AA8042, 0x7CAA8842, 0x87AA8442, 0x86A98742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10480,18 +11162,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948162, 0x88A98742, 0x81AB8A41, 0x8BAB8041, 0x8BA98641, 0x84AA8741, 0x85AA7C42, 0x80AA8842, -0x84AA8042, 0x7FA97E43, 0x7DAA7E44, 0x7AAA7D44, 0x81A98443, 0x85A98243, 0x7EAA7A45, 0x7CAB7C43, -0x7CAA8443, 0x81A97C44, 0x81AA7D44, 0x78A97E46, 0x84A98144, 0x80AB8341, 0x87AB8541, 0x82AB8043, -0x84AB7942, 0x71AA7A45, 0x7FAA7544, 0x72AB7944, 0x81AB8841, 0x86A98942, 0x83AA8042, 0x82AA8342, -0x80AB8542, 0x82AA7844, 0x7BAA8743, 0x7DAB7B43, 0x83A98443, 0x7DAA8743, 0x80AA7A44, 0x7FAB8742, -0x83AB7F42, 0x7EAA7D44, 0x89A98B42, 0x8CA98A40, 0x84A98143, 0x81A98143, 0x81AA8741, 0x8DAA8A40, -0x86AA8642, 0x85AA8343, 0x86A98742, 0x85AA7C43, 0x74AA7E45, 0x86A98642, 0x87A98A41, 0x83A98243, -0x80AB8741, 0x87A98243, 0x81AA7F42, 0x83A98543, 0x7EA98542, 0x8CA98841, 0x89AC8840, 0x86AB8640, -0x7FAB8142, 0x7FAA7C43, 0x88AA8941, 0x81A98643, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x75A65A58, 0x4DA97C56, 0x82A78951, 0x7DAA6453, 0x62AC7952, 0x62AA6956, 0x6CA87256, 0x5DA97856, +0x7CAB6E50, 0x7CA97E50, 0x75AA7652, 0x7CA96F53, 0x6DAA7453, 0x70AA5657, 0x60A87B55, 0x69AD6C51, +0x67AB6155, 0x63AA6555, 0x68A97253, 0x64A67957, 0x7BA77A52, 0x6BAA5D56, 0x6CAC7053, 0x70A87054, +0x6CA96E55, 0x88A97650, 0x76A58455, 0x7EAB6551, 0x6EAC794E, 0x73AA7C52, 0x85AA6F52, 0x7BA57656, +0x70A79152, 0x7BA76E54, 0x65A96B57, 0x76A67855, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10523,19 +11203,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x85A98742, 0x85AA8B40, 0x8EAA8040, 0x8DAA8541, 0x86AA8541, 0x81AB7A43, 0x85AA8142, -0x7DAA7F43, 0x7DAA7B44, 0x79AB7843, 0x78AB7743, 0x74AC7344, 0x75AB7A45, 0x83A98543, 0x82AA7D43, -0x7EAB7C43, 0x7EA98544, 0x80AA7C44, 0x7FA97945, 0x79A88345, 0x83AA8043, 0x7FAB8541, 0x85AB8441, -0x84AB8941, 0x7FAB7344, 0x77AA8144, 0x7CAA7544, 0x76AB7E43, 0x86A98841, 0x83A98743, 0x83AA8142, -0x82AB7E43, 0x81AA7B44, 0x7AAA8543, 0x7FAA7A43, 0x80AA8543, 0x7FA98743, 0x81AA7A43, 0x83AA8541, -0x85AB8041, 0x7CA98144, 0x8AAA8940, 0x82AA7E43, 0x80AB8442, 0x83AC8141, 0x7FAC7D42, 0x7FAA8542, -0x8DAA8D40, 0x88AA8342, 0x7FAA8543, 0x86A98342, 0x7DAA7445, 0x7CAA8344, 0x87AA8741, 0x88AA8442, -0x7FAB8242, 0x86AA8742, 0x83A98143, 0x7DA97F44, 0x83A98043, 0x81A88B43, 0x87AA8542, 0x87AB8640, -0x87AB8041, 0x83AB7B42, 0x81AA8642, 0x83AA8743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00946F6B, 0x6DAA6F54, 0x6EA96756, 0x7FA78D50, 0x7AA78451, 0x7AA68A52, 0x7BA98151, 0x7AA87753, +0x76AA7052, 0x5EA97E54, 0x72A96555, 0x72A76457, 0x5BAC5E56, 0x63A96F54, 0x75A76D56, 0x6CA87056, +0x74AA7252, 0x66A77957, 0x88A58A52, 0x7DA86F52, 0x6AA96856, 0x64A88055, 0x73AB6955, 0x60A96F56, +0x65A96356, 0x78A86857, 0x64AA5958, 0x70AA7153, 0x6CA86E55, 0x84AA784F, 0x82A97851, 0x83A59C51, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10562,23 +11238,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x83A98842, 0x86AB8940, 0x90AA8141, 0x8EAA8640, 0x86AA8341, 0x7CAA7F43, 0x80AA7A43, -0x7FAB7D43, 0x7FAB8042, 0x81AA8242, 0x84AA8442, 0x82AA7C43, 0x77AB7145, 0x71AB7745, 0x83AA8A42, -0x81AB7A43, 0x7BAB7C43, 0x81A98743, 0x80AA7F44, 0x7CA97746, 0x7AA98444, 0x81AA8142, 0x85AA8840, -0x87AB8441, 0x86AB8342, 0x77AA7345, 0x7DAA7D43, 0x77AB7744, 0x7DAB8441, 0x87A98243, 0x80A98543, -0x81AA7F43, 0x80AA8143, 0x79AA7F44, 0x82AA7844, 0x7EAA8543, 0x7EAA8543, 0x7FA97D44, 0x87AA8741, -0x85AB8042, 0x7DAA8543, 0x89AA8041, 0x7CAC8142, 0x80AB7A42, 0x78AB7943, 0x79AC7C41, 0x7CAC7E40, -0x7DAB8342, 0x8DAA8A3F, 0x85AA8142, 0x83A98542, 0x84AA7D42, 0x71AA7B46, 0x83AB8542, 0x87AA8841, -0x84AA7D43, 0x81AB8441, 0x85A98343, 0x80A97D44, 0x7CAA8244, 0x83A98343, 0x87A88643, 0x81AB8642, -0x86AB8840, 0x81AB8441, 0x7AAA8743, 0x86AA8542, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x69A87653, 0x69A94F59, 0x74A88053, 0x82A98050, 0x6EA96E55, 0x72AA6454, 0x70A87155, 0x71A95B57, +0x89A97150, 0x74AA8A4F, 0x73A97553, 0x79A97352, 0x78A97052, 0x6CAC5456, 0x58AB6F55, 0x5CAB5157, +0x55A96157, 0x67A86D54, 0x6EAA5F53, 0x5BAA6B56, 0x76A58853, 0x78A87C52, 0x60AB7155, 0x6FAA7353, +0x6BA96D54, 0x6BA77855, 0x84AA7850, 0x7BA68153, 0x78AA6752, 0x70AB6F51, 0x70AA8651, 0x81A87454, +0x78A87553, 0x8DA67152, 0x6DA86956, 0x6DA77755, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10602,16 +11275,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x80A98743, 0x87AB8841, 0x90AA8040, 0x8CAA8740, 0x87AA8242, 0x7CAA7D43, 0x7BAB7C44, -0x7FAB8342, 0x85AA8441, 0x80AA8242, 0x82AA8342, 0x83A98442, 0x83AA8342, 0x82AB7843, 0x75AB7B44, -0x86AA8941, 0x7FAB7B43, 0x7DAA7E44, 0x89A88843, 0x83AA8143, 0x77A97746, 0x7FAA8343, 0x82AA8342, -0x85AA8740, 0x82AB8042, 0x84AA7C43, 0x74AA7845, 0x80AA7844, 0x76AB7B43, 0x7EAB8441, 0x87A88043, -0x84AA8542, 0x7DAA8543, 0x7CAA7A44, 0x80AA7844, 0x7CAA8742, 0x80A98543, 0x7EAA7E44, 0x85AA8442, -0x83AA8142, 0x81AA8843, 0x87AA8141, 0x83AB7E41, 0x79AB7844, 0x76AB7644, 0x75AB7544, 0x74AB7544, -0x7EAC7F40, 0x7FAA8842, 0x8BAA8741, 0x82AA8043, 0x89A98542, 0x7FAA7644, 0x79AA8544, 0x86AA8B41, -0x8BAA8241, 0x7CAA8243, 0x86AA8541, 0x84A97C44, 0x7DAA7D43, 0x7DAA7F43, 0x81A98343, 0x8AAA8142, -0x86AB8740, 0x86AB8241, 0x82AA7F42, 0x87AA8342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10619,10 +11282,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094696A, 0x5CAA7056, 0x63A96857, 0x84A68251, 0x7BA77C52, 0x87A58D52, 0x7AA98351, 0x6AA97654, +0x72AC6252, 0x72A77654, 0x69A96F55, 0x56AD5A56, 0x6BAC7151, 0x6FAA7452, 0x72AA6C52, 0x67AC6F51, +0x72AA6E53, 0x72A97154, 0x65A97256, 0x89A58B52, 0x7DA77C52, 0x70A86557, 0x78A97B54, 0x69AA5E56, +0x68A96A55, 0x5EA97356, 0x78A76157, 0x59AA6758, 0x77AA6853, 0x5EA87C54, 0x72AC814F, 0x7DA98950, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10642,16 +11311,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x7FA98943, 0x88AB8740, 0x91A98341, 0x8DAA8940, 0x88AA8241, 0x80AA7E43, 0x7AAB7C43, -0x85AA8641, 0x86A98042, 0x83AA8342, 0x82AA8144, 0x82AA8044, 0x7DA97B45, 0x7DAA8343, 0x87AA8043, -0x7AAC7D43, 0x89AA8741, 0x7EAB7C43, 0x7AAA8243, 0x8AA98543, 0x82AA7B43, 0x75A97946, 0x80AA8243, -0x7FAB8142, 0x84AA7F42, 0x7FAB8741, 0x83AA7B44, 0x7AAA8044, 0x7BAB7744, 0x78AB7A43, 0x82AB8741, -0x8BAA8740, 0x80AB7E43, 0x82AA7944, 0x7CA97E44, 0x7BAB8442, 0x80A98343, 0x7DAA7C44, 0x87AA8241, -0x82AA8042, 0x84AA8942, 0x85AA8242, 0x7EAB7A42, 0x7DAA7F43, 0x84A98642, 0x86AA8541, 0x81AA7D43, -0x77AB7A44, 0x81AC8041, 0x84AA8D40, 0x88AB8042, 0x7EA98843, 0x83AA8142, 0x77AA7946, 0x85AA8342, -0x8CAA8B40, 0x81AA7B43, 0x81AA8642, 0x84AA8742, 0x82A97C44, 0x79AA7B44, 0x7BAA7D43, 0x80A98842, -0x7FAC8341, 0x86AB8341, 0x85A97F43, 0x87A98442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10663,9 +11322,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x62A87156, 0x7FA76B53, 0x49AA6659, 0x6CA77C55, 0x79A86D55, 0x76AB6D51, 0x6CA87254, 0x73A86357, +0x68A88253, 0x6CAA8551, 0x81A97A51, 0x76AA7B51, 0x76A97C51, 0x6CAB5556, 0x5DAC7253, 0x5AAB5B56, +0x72A88452, 0x89A77453, 0x6AAA6C54, 0x6FAB6052, 0x61AA6856, 0x7DA67F52, 0x81A97052, 0x63AA7955, +0x79A87B53, 0x69A86B56, 0x77A88852, 0x84AA834F, 0x7FA78052, 0x75AB6B51, 0x6DAA6C53, 0x7DA88E51, +0x6AA76B58, 0x6FA78B52, 0x6CA87155, 0x6DA87156, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10682,16 +11348,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958460, 0x7FA98743, 0x88AB8740, 0x91A98540, 0x8DA98841, 0x86AA8242, 0x82AA7F42, 0x7AAB8243, -0x86AA8341, 0x85AA8B41, 0x88A98343, 0x83A98543, 0x85A98343, 0x83A98243, 0x7FAA7C45, 0x7CA98044, -0x87AA8242, 0x7CAB8042, 0x89AB8241, 0x7DAC7942, 0x7DAA8742, 0x87A98342, 0x80A97944, 0x79AA8045, -0x80AA7D43, 0x83AA8641, 0x7EAB8042, 0x84AB8642, 0x7EAA7744, 0x7BAB7B43, 0x78AA7A44, 0x78AC7F42, -0x8AAA8741, 0x85AB7D43, 0x82A97B44, 0x79AA8244, 0x7BAC8242, 0x82A98344, 0x7FAA7E44, 0x86AB8242, -0x82AA8042, 0x88A98841, 0x84AB8142, 0x7AAB7A44, 0x84A98A41, 0x8BA98A41, 0x8BA88B43, 0x8DA98A42, -0x84AA8042, 0x7BAB7F42, 0x82AB8341, 0x88AA8641, 0x7FAA7D43, 0x89A98342, 0x83AA7943, 0x79AA8543, -0x86AA8C40, 0x89AB8240, 0x78AA7F44, 0x85AB8741, 0x88A98543, 0x7FA97A45, 0x7CAB7D43, 0x81AA8243, -0x87AA8042, 0x84AB8741, 0x83AA8842, 0x83AA8742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10706,9 +11362,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956E6A, 0x61AA7056, 0x5EAA6956, 0x81A67953, 0x86A88051, 0x94A58251, 0x78AA6B54, 0x78A87C52, +0x6AAB6953, 0x7AA96853, 0x6CAB5455, 0x52AD6F53, 0x81A97551, 0x66AC7252, 0x73AB6B53, 0x63AB6C54, +0x74AB7B4F, 0x71AA7253, 0x69A87455, 0x5FA86F57, 0x8DA77F50, 0x84A77453, 0x6CA86857, 0x8BA97451, +0x62AA5E57, 0x6CA86157, 0x5CA97357, 0x6DAA6655, 0x59AA7256, 0x72AC5F53, 0x76A97251, 0x81AC7E4E, +0x50AA8D49, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10722,16 +11385,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958460, 0x81A98344, 0x86AB8641, 0x93A98640, 0x8CA98741, 0x83AB8142, 0x82AB7B42, 0x7DAA8642, -0x88AA8441, 0x8FA88A42, 0x8AA88C42, 0x89A88643, 0x81AA8143, 0x82AA7F43, 0x7FAA7F44, 0x7EAA7A44, -0x79A98045, 0x84AA7F43, 0x7CAB8542, 0x87AB7E42, 0x79AB7844, 0x81A98842, 0x85A97F43, 0x7EA97B44, -0x7CAA7E45, 0x7FAA8342, 0x87AB8141, 0x81AB8142, 0x84AA8043, 0x7CAA7944, 0x7EAA7B44, 0x77AB7B43, -0x8BA98C41, 0x84AA8142, 0x81AA7F43, 0x77AA8044, 0x7FAB8242, 0x83A98444, 0x81AA7C44, 0x84AA8342, -0x83AA8143, 0x8BA98741, 0x83AB7E42, 0x7AAA8244, 0x8BA98841, 0x7FA98044, 0x81A97F44, 0x80AA8443, -0x88A98742, 0x81AA8042, 0x7DAB8241, 0x81AB8741, 0x87AA8342, 0x7BA98843, 0x82AA8442, 0x7CAA7B44, -0x86AB8442, 0x8BAA8B40, 0x85AA7C42, 0x80A98743, 0x89AB8741, 0x86A88543, 0x80AA7D44, 0x7DAA7E44, -0x80AA8143, 0x81AB8441, 0x89AA8741, 0x83A98A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10749,9 +11402,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x52AA5E59, 0x77A78452, 0x6AA94C5A, 0x65A97654, 0x7DA97352, 0x69A97E53, 0x6AAA7952, 0x76A77754, +0x58A97E55, 0x6DAB7052, 0x8FA87651, 0x77AA7152, 0x73A97752, 0x6DAA5756, 0x60AC7052, 0x5EAA6056, +0x7DA67555, 0x7BA68A53, 0x90A58D51, 0x7AA96D54, 0x7EAB6750, 0x67AA6555, 0x7CA97C51, 0x76AA5E54, +0x71AA6E54, 0x84A77653, 0x6CA77055, 0x78A78552, 0x83A98F4E, 0x8AA77C52, 0x6FAB7251, 0x67AB6B54, +0x86A86754, 0x6AA86756, 0x7EA66F55, 0x6CAA6755, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10762,16 +11422,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x83A98243, 0x85AB8341, 0x91A98441, 0x89AA8740, 0x81AA8042, 0x7FAB7D43, 0x83AA8442, -0x82AA8B41, 0x8EA88A42, 0x86A98443, 0x85A98143, 0x80AA7E45, 0x7BAA7C45, 0x7FAA8243, 0x81A97E44, -0x7EAA7E44, 0x7EA98144, 0x86AA7F43, 0x83AA8B42, 0x81AA7843, 0x77AB7B44, 0x82AA8343, 0x81AA8043, -0x7EA97E44, 0x7FA98044, 0x86A98B41, 0x84AB8241, 0x84AA8742, 0x83A97D43, 0x7AAA8143, 0x7DAA7B44, -0x8BA88B42, 0x84AA8442, 0x7FAA8443, 0x77AB7C44, 0x84AA8142, 0x85A98243, 0x83AA7D43, 0x83AB8342, -0x84AA8242, 0x8AAA8541, 0x82AB7C42, 0x7FA98642, 0x8AA87F43, 0x80A97D44, 0x78AB7744, 0x77AB7644, -0x79AA7D44, 0x83AA8543, 0x82AB7F42, 0x83AB8041, 0x88AA8840, 0x7EAB7944, 0x8BA98342, 0x86AA7C42, -0x79AB8743, 0x84AB8841, 0x88AA8840, 0x81AA7F43, 0x84AA8841, 0x87A98742, 0x87A88244, 0x7DAA7D44, -0x7CAA8543, 0x7DAB8242, 0x8AAB8641, 0x88A98642, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10792,9 +11442,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00966469, 0x73A96456, 0x58A97556, 0x89A67053, 0x87A77F51, 0x95A8774F, 0x76AB5E55, 0x78AA7E50, +0x68A87C54, 0x67AA6556, 0x58AD5A55, 0x6EAB824F, 0x71AA7E52, 0x7DA97151, 0x76AA7750, 0x75A87E50, +0x77A95C54, 0x5CAB7054, 0x75AA6952, 0x70A87254, 0x5AA67959, 0x87A87E50, 0x82A66C55, 0x74A88952, +0x7EAA6B53, 0x5CA96E57, 0x6EA96156, 0x72A97253, 0x70A95D56, 0x6BAB7852, 0x63A97953, 0x75AD784F, +0x6BAA8D45, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10802,16 +11459,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x81A98143, 0x85AB8242, 0x8FA98541, 0x89A98940, 0x81AA8142, 0x7DAB8242, 0x84AA8442, -0x85A98B42, 0x8BA98342, 0x85AA8443, 0x7FAA7E44, 0x7EA97F44, 0x7DAA7A44, 0x78AA7A44, 0x7DAA7F44, -0x7FAA8343, 0x81AA7E43, 0x7DA98244, 0x81AA8343, 0x89AA8441, 0x7AAB7444, 0x78AA8143, 0x80AA7E43, -0x7FAA8043, 0x7CAA7E45, 0x81A98542, 0x8DA98841, 0x85AB8342, 0x85A98143, 0x7FA97B44, 0x7BAA7944, -0x8AA88943, 0x8BAA8141, 0x7FAB8442, 0x7CAA7844, 0x85AA8042, 0x82A98244, 0x82AA7D44, 0x81AB8342, -0x84AA8342, 0x8DA98441, 0x82AB7D43, 0x80AA8842, 0x81A97D44, 0x7BAB7B42, 0x80AB8242, 0x81AB7F42, -0x78AB7644, 0x7AAA8143, 0x83AA8143, 0x7CAB8142, 0x81AB8641, 0x89AA7E42, 0x7BA98F42, 0x82AA8141, -0x7EAB7B43, 0x86AB8342, 0x85AA8841, 0x86AA8341, 0x7CA98343, 0x8AAA8941, 0x86A88A42, 0x83AA7A44, -0x7DAA8043, 0x86AA7F42, 0x85AA8941, 0x8AA98342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10835,23 +11482,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x82A85655, 0x5EA97555, 0x7FA77252, 0x57AA6057, 0x79A96D52, 0x6AA87355, 0x7CAC6E4F, 0x7AA77A53, +0x68A86956, 0x7CAB6751, 0x7DAA7851, 0x7DAA7152, 0x70A77A54, 0x76A96354, 0x60AB7152, 0x55AA7855, +0x7FA58953, 0x95A78B4E, 0x90A69050, 0x94A48A51, 0x6BA96955, 0x72AB6951, 0x61AA7154, 0x7DA97851, +0x79AB5B54, 0x74AB7452, 0x8DA67752, 0x6EA67755, 0x7BA77C53, 0x7DA98E50, 0x7DA86654, 0x6CAA7153, +0x5FA98254, 0x65A86358, 0x76A57855, 0x72AA7153, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x82AA7F43, 0x84AA8142, 0x8DA98541, 0x89A98641, 0x81AB7F42, 0x7EAB8342, 0x86AA8341, -0x8BA98843, 0x85A98542, 0x83AA8242, 0x82AA8143, 0x7CAA7844, 0x78AA7744, 0x79AA7B44, 0x7AAA7745, -0x77AB7B44, 0x83AA8143, 0x7DAA7A44, 0x80AA8143, 0x81AB8643, 0x87AB7C42, 0x76AB7944, 0x7FAA8342, -0x80AA7F43, 0x80AA7C43, 0x7EA98044, 0x84A98A42, 0x88AA8541, 0x82AA8542, 0x83A98143, 0x78AA7B44, -0x86A88A43, 0x8CAA8440, 0x82AA7F43, 0x84AB7643, 0x81AA8042, 0x81A98543, 0x80AA7E44, 0x82AA8342, -0x84AA8442, 0x8DAA8441, 0x81AB7E43, 0x84AA8842, 0x80A97D44, 0x7DAB8741, 0x86AA8A40, 0x88AB8740, -0x88AA8342, 0x79AB7643, 0x7FAA8043, 0x7FAB7D42, 0x81AC8041, 0x87AA8940, 0x7FAA7E43, 0x8EAA7F41, -0x80AB7B42, 0x7DAA8642, 0x85AB8541, 0x89AA8741, 0x85AB7F41, 0x84A98A42, 0x8BA98741, 0x89A98043, -0x7CAA7E44, 0x83AA7F42, 0x83AA8841, 0x86A98A41, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10878,20 +11522,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00966869, 0x77AA5757, 0x5CAA7A55, 0x7AA77953, 0x82A58E53, 0x88A87451, 0x72AA6D53, 0x7BAA7251, +0x75A77854, 0x64AB5756, 0x64AD6B51, 0x7EA97951, 0x79A96E52, 0x69A87355, 0x8BA48E51, 0x82A67D52, +0x7CA77E52, 0x7AA96F52, 0x61AB6C53, 0x72A96854, 0x73AA5C55, 0x6DA57958, 0x79A67D52, 0x6EA76F56, +0x78A98650, 0x72A96255, 0x6DA86B56, 0x5DAB6955, 0x65AA7053, 0x5CAA6457, 0x7BAB6A52, 0x78A87352, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x83AA7F42, 0x82AB7D43, 0x8BAA8641, 0x89AA8641, 0x83AA7D42, 0x7FAA8742, 0x87AB8641, -0x8BA88243, 0x85A98542, 0x87A98642, 0x7FAB7943, 0x76AC7544, 0x76AC7744, 0x77AB7444, 0x74AB7445, -0x76AB7545, 0x75AB7E44, 0x80AB7E43, 0x7EAA7F43, 0x81AA8143, 0x88AA8B42, 0x7FAB7A43, 0x79AA7E43, -0x81AA7D42, 0x7CAA7D44, 0x7CA97B44, 0x7FA98443, 0x8BA88B42, 0x86AA8241, 0x82AA8043, 0x81A97C43, -0x86A88943, 0x8BA98A40, 0x82AB7D42, 0x84AA7943, 0x7DAA8243, 0x81AA8542, 0x82A98143, 0x82AA8542, -0x85AA8342, 0x8AAA8342, 0x82AA7E43, 0x86A98842, 0x7FAA7C44, 0x87AA8841, 0x87AA8741, 0x89AA8941, -0x85A98642, 0x88AA8342, 0x75AB7E43, 0x80AB7D43, 0x7DAB7F42, 0x80AB8541, 0x89AA7D42, 0x83A98F42, -0x7FAB7F41, 0x80AA7B43, 0x86AB8841, 0x85A98842, 0x88AA8741, 0x83AA8342, 0x8CA88F41, 0x89A88843, -0x7CAA7C45, 0x7EAA8643, 0x80AB8442, 0x85AA8C41, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10923,18 +11563,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957C61, 0x85AA8142, 0x81AA7D43, 0x88A98541, 0x8BA98741, 0x83AA7C43, 0x83AA8841, 0x86AA8C41, -0x84A97F44, 0x86A98842, 0x88AA7F42, 0x78AB7643, 0x75AB7644, 0x76AB7844, 0x7AAB7B43, 0x7AAB7643, -0x75AB7345, 0x75AB7744, 0x78AB7E44, 0x80AA7D43, 0x81AA7F43, 0x81AA8B42, 0x8CAA8342, 0x7BAB7A43, -0x7FAA8442, 0x7FAA7C44, 0x82AA7D43, 0x7FA98343, 0x86A98E42, 0x8DA98441, 0x81AA8142, 0x80A98543, -0x86A98842, 0x8AA98B41, 0x85AB8041, 0x7FAB8043, 0x78AA8443, 0x82AA8243, 0x83A98243, 0x83A98642, -0x88AA8342, 0x8BAA8241, 0x86AA8042, 0x88A98642, 0x7FAA7E43, 0x88AA8542, 0x81AA8043, 0x7FAA8044, -0x85AA8742, 0x89A98742, 0x86AA7643, 0x7BAA7D43, 0x7EAB7D42, 0x7FAB8141, 0x86AA8941, 0x7EAA8643, -0x8CAA7C41, 0x80AB8141, 0x7CAB8543, 0x86AA8342, 0x88A98942, 0x88AA8441, 0x80A98C42, 0x8EA98641, -0x86A87C45, 0x7FAA8443, 0x82AA8243, 0x89AA8841, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CA48252, 0x59AA5E57, 0x77A97853, 0x73AA5B55, 0x65AB6E54, 0x6EAA6955, 0x77AB6A52, 0x6DA87953, +0x76A85A57, 0x80AA6A51, 0x6BA97B53, 0x6DAA7453, 0x6FA97354, 0x76AA6C53, 0x5DAC6F53, 0x5DAA8453, +0x76A68E52, 0x7FA88751, 0x80A98051, 0x77A98251, 0x94A78151, 0x65AB6753, 0x75AB6B51, 0x5CA97C55, +0x7AA97A51, 0x6EAA6655, 0x78AB7B50, 0x94A68150, 0x76A77D53, 0x82A77F52, 0x78A98951, 0x6BA95F56, +0x6FA95E56, 0x82A75C57, 0x64A77E56, 0x6EAA7253, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -10962,23 +11599,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957C62, 0x85AA8142, 0x7FAB7B43, 0x86AA8741, 0x8AA98642, 0x84AB7C42, 0x84AA8541, 0x86A98E41, -0x81A98543, 0x84A98B42, 0x82AA7843, 0x72AB7745, 0x7BAB7B43, 0x7DAA7F43, 0x80AA8242, 0x7FAA7C43, -0x7CAB7A44, 0x76AA7446, 0x79AB7644, 0x7CAB7D43, 0x7BAA8242, 0x81AA8343, 0x89AA8942, 0x83AB7A42, -0x7AAA7F43, 0x84AB8042, 0x7AAA8144, 0x7BA98144, 0x82AA8642, 0x8EA88C42, 0x84AA8042, 0x7FA98244, -0x85A98642, 0x8AA88A42, 0x8BAA8241, 0x7CAA8642, 0x79AA8343, 0x86AA8442, 0x84A98144, 0x85A98842, -0x88AA8542, 0x8FA98641, 0x85AA8242, 0x89A98342, 0x80AA8342, 0x86AA7F43, 0x7AA97B45, 0x79AA7A45, -0x7CAA7C45, 0x81AA8942, 0x8AA98742, 0x77AB7844, 0x7EAB7D42, 0x7DAB8042, 0x83AB8641, 0x88AA7A42, -0x84A98B42, 0x7BAC7E42, 0x80AB7D43, 0x83AA8941, 0x85AA8742, 0x8AA98642, 0x81AA8142, 0x8FA88C41, -0x84A98044, 0x7BAA7E44, 0x86AA8043, 0x87AA8442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956F69, 0x6BAA5E57, 0x6AA98852, 0x74A78F52, 0x84A49353, 0x8BA87350, 0x64A97654, 0x7BAA6753, +0x78A76D55, 0x58AC6056, 0x60AC6E52, 0x71A77256, 0x6EA88252, 0x77A77E53, 0x79A76E54, 0x74A87B53, +0x7DA77A54, 0x78A68054, 0x72A95F54, 0x6AAA6754, 0x64A97056, 0x61A86D57, 0x72A77554, 0x7CA66A56, +0x67AA7C52, 0x85A97750, 0x68A97954, 0x71A95F56, 0x66AC6653, 0x73AA5855, 0x68AB7A53, 0x6AA97953, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11002,16 +11635,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x84AB7E42, 0x80AB7D43, 0x86AA8641, 0x8AA98741, 0x84AA7F42, 0x86AA8441, 0x86A98A42, -0x81A98942, 0x88A98542, 0x7BAB7344, 0x7BAA7F43, 0x82AB8242, 0x83AA8342, 0x82AB8242, 0x87AA8841, -0x84AA7F42, 0x7DAA7C44, 0x75AB7845, 0x77AB7844, 0x7FAB7C43, 0x81AA8043, 0x82AA8B42, 0x89AA8242, -0x7DAA7B43, 0x81AA8342, 0x7FAA7C43, 0x81AA7F43, 0x82AA8343, 0x86A88F42, 0x89A98242, 0x7FAA7F43, -0x78AA8643, 0x86A98D42, 0x8DAA8640, 0x7FAB8143, 0x7FAA8043, 0x88A98442, 0x85A97E44, 0x87A98842, -0x86AA8642, 0x8EAA8841, 0x85AA8442, 0x89A98243, 0x81AA8442, 0x86A97F43, 0x7AA97A45, 0x7EAA7F45, -0x7CA97B45, 0x7CA98044, 0x85A98643, 0x84AA7644, 0x78AB7E43, 0x7FAB7F42, 0x81AA8342, 0x89AA8641, -0x7CAA8243, 0x86AB7842, 0x7EAC8240, 0x7EAA8343, 0x88AB8341, 0x84A98544, 0x81AA8042, 0x82A99142, -0x85AA8242, 0x7BAA7E45, 0x86A98043, 0x86AA8642, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11019,9 +11642,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x81A28557, 0x82A85B54, 0x56AA7156, 0x7BA87B51, 0x5EAB6755, 0x69AB6653, 0x6EA77E56, 0x6CAA7352, +0x7AA86F54, 0x64A97755, 0x64AA7254, 0x62AB8052, 0x72AA7C51, 0x72A86755, 0x65AC6F52, 0x5DA87157, +0x7FA68452, 0x7DA77F53, 0x5FA76459, 0x78A78452, 0x77AA6B53, 0x8BA98350, 0x5EAB7354, 0x74AA6553, +0x62A97555, 0x76AA7F4F, 0x67AB6F54, 0x7AA97652, 0x8BA67952, 0x76A87A53, 0x82A87652, 0x81A87852, +0x5DA86C57, 0x5EA87856, 0x60A87656, 0x73A76F55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11042,16 +11672,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x84AB7D42, 0x83AA7E43, 0x88AA8941, 0x8BA98741, 0x83AA8242, 0x88AA8541, 0x89A98642, -0x85AA8842, 0x87AA7D42, 0x76AA7B44, 0x84AA8442, 0x81AA7F43, 0x80AA8243, 0x85A98642, 0x85AA8842, -0x89AA8941, 0x84AA7E42, 0x7BAB7844, 0x78AB7D44, 0x7AAB8044, 0x7AAB8043, 0x82A98143, 0x88A98842, -0x82AB7B42, 0x7AAA8243, 0x86AB8141, 0x7CAA8443, 0x81AA8242, 0x83AA8942, 0x8FA88642, 0x81AA8042, -0x6EAA8244, 0x85A88C42, 0x8BA98A41, 0x7EAA7F43, 0x85AA7B43, 0x86A98242, 0x83A98144, 0x82A98942, -0x83AA8542, 0x8EA98A40, 0x85AA8542, 0x87A98143, 0x7DAA8443, 0x84AA7C43, 0x78A98145, 0x85A88144, -0x82A98144, 0x7EA97C45, 0x7DAA8843, 0x85A98342, 0x76AB7A44, 0x81AB8241, 0x80AB8142, 0x83AA8841, -0x84AB7943, 0x86A98942, 0x7AAC7E41, 0x80AA7D43, 0x83AB8541, 0x82AA8343, 0x85A98443, 0x7FAA8643, -0x8FA98042, 0x80AA7945, 0x7FA98543, 0x85AA8B42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11062,9 +11682,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00947A69, 0x68AB6F53, 0x76A78952, 0x75A88F51, 0x81A29754, 0x7EAB6E50, 0x64AB7453, 0x7AAA6F52, +0x6EA86455, 0x5BAC6C54, 0x60AC7852, 0x76A87854, 0x7EA87252, 0x7EA77053, 0x70AC7F50, 0x6BAD6E53, +0x7DAB804E, 0x6BA66E59, 0x7CA86354, 0x61AB6354, 0x64A96D55, 0x65AA6855, 0x66A86957, 0x77A77054, +0x6AA96C54, 0x8AAA814E, 0x6AA96C56, 0x7CA86955, 0x61AA6E55, 0x6EAA7353, 0x55AA7D55, 0x6CA87456, +0x84A68D48, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11082,16 +11709,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x85AA7F42, 0x84AA7E43, 0x88A98B41, 0x8AA98741, 0x83AA8642, 0x89A98541, 0x8CAA8142, -0x88A98B41, 0x82AB7A42, 0x79A98643, 0x86A98343, 0x83AA8343, 0x85AA8842, 0x84A98343, 0x86A98743, -0x89A98842, 0x85AA8841, 0x82AA7B43, 0x79AB7945, 0x80AB7E43, 0x83AB7B43, 0x82AA8343, 0x81A98643, -0x85AA7F43, 0x7AAA7C44, 0x85AA8442, 0x7FAA7E43, 0x84AB8142, 0x83A98442, 0x8AA88E41, 0x88A97F42, -0x76AA7246, 0x88A98642, 0x8CA98B41, 0x7DAB7E43, 0x84AB7D42, 0x82AA8343, 0x81A98144, 0x7FA98B42, -0x85AA8541, 0x8DA98741, 0x86AA8641, 0x84A98043, 0x7CAA8543, 0x83AA7B43, 0x79A98545, 0x7EAA7A43, -0x79AA7D44, 0x80A98243, 0x7FA97F44, 0x87A98542, 0x81AB7443, 0x81AB8142, 0x82AB7F42, 0x81AB8042, -0x88AA8142, 0x7DAA8743, 0x87AB7B41, 0x80AC8240, 0x81AA8342, 0x88AB8342, 0x82A88744, 0x85AA7F43, -0x8FA88442, 0x7FAA7A45, 0x80AA8543, 0x84AA8A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11105,9 +11722,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x81A27D58, 0x88A37C55, 0x5AAA5758, 0x75A87753, 0x7BA95D55, 0x64AC5E54, 0x5EA77258, 0x7CAB6A51, +0x7CA87752, 0x65A96D56, 0x66AC5C56, 0x74AA6654, 0x73A97552, 0x72AA6C53, 0x6DAA6F53, 0x6DA96155, +0x78A68154, 0x81A66C56, 0x59AA6557, 0x64A95D59, 0x5DAB6755, 0x73AB6A53, 0x81AA7451, 0x62AC7852, +0x77AB5B54, 0x6FA86E54, 0x7BAB814D, 0x66AB7553, 0x78A96E52, 0x83A67452, 0x76A98451, 0x71A87D53, +0x78A76056, 0x6AA86F56, 0x78A77555, 0x83A66D55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11122,16 +11746,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x84AA7F42, 0x83AA7F43, 0x87A98D41, 0x89A98841, 0x84AA8741, 0x87AA8641, 0x8CAA7F42, -0x85A98B41, 0x81AB7943, 0x83A98543, 0x81AA8143, 0x84AA8142, 0x7CAB7843, 0x7BAA7F43, 0x83A98543, -0x85A88744, 0x89A98542, 0x85AA8342, 0x7DAB7D43, 0x7AAB8144, 0x80AB8143, 0x7AAA8243, 0x84A97E43, -0x87A98543, 0x7FAB7943, 0x7DAA8542, 0x83AB7F42, 0x83AA8542, 0x84AA8342, 0x88A98A41, 0x8CA98242, -0x7EAA7045, 0x7EAA8842, 0x8BA98B41, 0x84AB7A42, 0x7FAB8342, 0x7EAA8143, 0x81A98244, 0x7CAA8A43, -0x83AA8441, 0x89AA8641, 0x83AA8541, 0x86A98143, 0x7CAA8542, 0x81AB7843, 0x7CA98444, 0x7DAC7B42, -0x7FAB7D43, 0x7EAA7E43, 0x86A97F43, 0x83A98742, 0x85A97F43, 0x77AB8044, 0x80AB8042, 0x80AB7F43, -0x80AA8842, 0x84AA8142, 0x8BA98842, 0x7DAC8040, 0x81AB8342, 0x84AA8B41, 0x83A98443, 0x85A98543, -0x84A88E42, 0x7FAA7E44, 0x7EAA8143, 0x84A98743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11148,10 +11762,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957369, 0x74AB7451, 0x8AA67554, 0x86A68751, 0x88A38B53, 0x71AB7352, 0x70AB7352, 0x76AA7952, +0x76A86155, 0x71AB6453, 0x6BAC7451, 0x7EA77354, 0x6FA96756, 0x72A97C52, 0x74AA6F53, 0x70AC7053, +0x7AA97E51, 0x75A77256, 0x75A85456, 0x64AB6654, 0x65AB6156, 0x64AB6554, 0x6EA76B56, 0x67A77B55, +0x62A86957, 0x82AB774F, 0x6FA95F57, 0x6EA87D54, 0x58AB7255, 0x73A87B53, 0x67AA6755, 0x73A96455, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11162,16 +11782,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947F62, 0x82AA8043, 0x81AA7F44, 0x89A98F41, 0x89A98A41, 0x83A98A42, 0x85AA8841, 0x8AA98142, -0x83AA8741, 0x7EAB7C43, 0x86AA7F43, 0x7EAA8243, 0x7DAA7844, 0x76AB7744, 0x79AB7C43, 0x7DAB7F42, -0x80AA8243, 0x86A88A43, 0x87AA8741, 0x85AA7E43, 0x7DAA7844, 0x86AA7F43, 0x7FAB7C43, 0x82AA8042, -0x7DA98344, 0x82AA7C44, 0x79AA8043, 0x84AA7F42, 0x7FA98942, 0x84AB8641, 0x83A98641, 0x8DA88A42, -0x83A97945, 0x73AA8643, 0x88A98B41, 0x86AA7D43, 0x7CAB8542, 0x7CAA7E43, 0x7FA98244, 0x79AA8443, -0x86AB8141, 0x86AA8741, 0x83AA8442, 0x86AA8142, 0x80AA8342, 0x81AB7744, 0x7BAA8643, 0x7FAB8041, -0x7DAB7B43, 0x7CAB7D43, 0x7FAA8342, 0x7CA98544, 0x85A98542, 0x7FAB7A43, 0x7FAB8242, 0x81AA8143, -0x80AA8143, 0x8BAA8341, 0x84A98943, 0x87AB7D41, 0x81AB8541, 0x83AA8642, 0x89AA8142, 0x85A88443, -0x81A98F42, 0x85A98043, 0x7DAA7F44, 0x84A98543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11192,9 +11802,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x85A87C51, 0x82A18A56, 0x76A75B57, 0x58AA7556, 0x71AA7A51, 0x6BAA6455, 0x54AA5659, 0x78A87C52, +0x65A87854, 0x79A96254, 0x70AA6055, 0x64AA6C55, 0x69A97653, 0x74A97353, 0x6EAA6B53, 0x6FAA5F54, +0x6AA67656, 0x8AA76F53, 0x5EA95A59, 0x59A9465C, 0x58A8555C, 0x5DAC7553, 0x66AA7F53, 0x73AC6153, +0x71AD764F, 0x5FAB6155, 0x76AA7351, 0x80AD654E, 0x69AA6D54, 0x78A87B52, 0x79A97052, 0x78A87153, +0x74A96254, 0x62A86658, 0x71A86B56, 0x7EA67854, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11202,16 +11819,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x80AA8142, 0x80AA7D44, 0x88A98D41, 0x85A98941, 0x85A98C41, 0x86AA8841, 0x86A98442, -0x84AB8142, 0x7AAA8742, 0x83AA7D43, 0x82AA7C44, 0x79AB7A43, 0x7CAA8143, 0x83A98043, 0x80AA8143, -0x83AA8242, 0x7DA98544, 0x8BA88C42, 0x86A98142, 0x7FAA7E44, 0x7CAA8743, 0x82AB7E43, 0x7BAA8144, -0x7DAA7C44, 0x85A97E44, 0x7CAA7844, 0x81AA8242, 0x80AA8043, 0x89AA8541, 0x89AA8441, 0x89A89341, -0x83A98043, 0x75AB7D44, 0x86A98A42, 0x8BAA8342, 0x7DAA8243, 0x7FAA7D43, 0x7FA98144, 0x7FAA7D44, -0x8CAB7F41, 0x86AA8841, 0x83AA8042, 0x86AA8142, 0x83AA8242, 0x80AB7744, 0x7AAA8243, 0x7DAB7C42, -0x75AA7D44, 0x81AA7F42, 0x7BAB7D43, 0x81A98143, 0x8AA98641, 0x84AA7D43, 0x7DAA8043, 0x84AA8142, -0x80AA8043, 0x83AA8941, 0x84AA8442, 0x88A98642, 0x7FAB8241, 0x82AB8142, 0x85AA8842, 0x82A98443, -0x84AA8642, 0x8DA98042, 0x7FAA7E44, 0x83A98443, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11235,23 +11842,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00966D69, 0x72A97D52, 0x78A96F53, 0x81A77754, 0x8DA58252, 0x70AA7652, 0x6AAC7852, 0x75AA6C53, +0x70A95C55, 0x7FAB5E52, 0x71AB7351, 0x7BA88152, 0x62AA6756, 0x6DA97054, 0x7EA77754, 0x73A87554, +0x7AA87A53, 0x64A87356, 0x54AA5559, 0x6FAB6454, 0x59AB6457, 0x64AA6855, 0x71A86455, 0x72A57157, +0x6EA86D55, 0x7CAD6C4F, 0x62A96558, 0x77A97A53, 0x5CAB7753, 0x80AA7A51, 0x71AA6853, 0x70AB6255, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x7DAA7F43, 0x7DAB7C44, 0x86A98B42, 0x85A98842, 0x89A98B41, 0x86AA8A41, 0x80AA8543, -0x84AB7E41, 0x7BA98843, 0x80AA8143, 0x7DAB7844, 0x7AAB8142, 0x82AB8242, 0x82AA8242, 0x7EAA7C43, -0x7CAA8244, 0x83AB7C43, 0x80A88B44, 0x8FA98741, 0x84A97E43, 0x7FAA8144, 0x89AA8243, 0x7AAA7D44, -0x81AA7C43, 0x7FA98244, 0x7FAA7944, 0x79AA8344, 0x83AB7C43, 0x83A98742, 0x86AA8641, 0x89A99141, -0x7FA98442, 0x7FAA7444, 0x83A98842, 0x89AA8841, 0x81AA8143, 0x82AA7C43, 0x81A98144, 0x81AA7944, -0x8BAA8141, 0x83AB8B40, 0x82AA8342, 0x85AA8342, 0x84AA8142, 0x7FAB7643, 0x78AB8143, 0x79AB7544, -0x76AA7B44, 0x7EAA8042, 0x80AA7A42, 0x79AB7F43, 0x84A88B42, 0x84A98642, 0x7BAA8143, 0x81AA8242, -0x7FAA8043, 0x7FA98543, 0x89AA8441, 0x86A98842, 0x84AB7E42, 0x81AB8142, 0x82AA8A42, 0x88A98343, -0x84A98442, 0x8DA98242, 0x80AA7F43, 0x80A98443, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11279,19 +11882,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x7AAB8143, 0x7CAA7E44, 0x8AA98941, 0x85A98642, 0x8BA88D41, 0x85AA8941, 0x7EAA8443, -0x82AB7B42, 0x82A98342, 0x7FAA8143, 0x77AC7843, 0x7FAB8142, 0x81AB8342, 0x82AA8042, 0x7EAB8042, -0x82AA8042, 0x82AA8243, 0x7DAA8243, 0x8BA88C42, 0x86A98642, 0x81A97D44, 0x85AA8643, 0x7EAB7A44, -0x7EAA7F43, 0x7AAA8343, 0x85A97C44, 0x78AA7D44, 0x84AA7E42, 0x7AAA8643, 0x82AB8841, 0x86AA8B41, -0x7FA98443, 0x83A97744, 0x78AA8343, 0x85AA8742, 0x86A98442, 0x83AB7D42, 0x81AA8043, 0x83AA7944, -0x86AA8442, 0x82AA8B41, 0x84AA8642, 0x82AA8342, 0x83AA8342, 0x7FAB7743, 0x77AB8043, 0x79AB7344, -0x7DAA8343, 0x7EA97D44, 0x7EAA8142, 0x7AAB7C43, 0x7EA98943, 0x87A98842, 0x84AA7A44, 0x84AA8242, -0x83A97F43, 0x7FA98143, 0x87AA8842, 0x89AA8741, 0x84A98142, 0x80AB8042, 0x80AB8342, 0x8DAA8441, -0x81A98443, 0x86A98842, 0x7FAA8043, 0x81A98443, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x68AC844C, 0x77A57857, 0x89A57354, 0x50A96359, 0x84A97650, 0x70A96A55, 0x5DAD5156, 0x5EA78055, +0x79AA6D52, 0x76A97B52, 0x67A96E55, 0x5DA97157, 0x6BA97A53, 0x72AA7751, 0x70A97553, 0x63AB6753, +0x60A86958, 0x81A78252, 0x69A96357, 0x5FAA5159, 0x55A9595B, 0x54AC5957, 0x6EAB6A54, 0x7FAB7950, +0x67AB7A51, 0x77AC5F53, 0x5AAA7953, 0x75AB7B50, 0x68AC5F52, 0x6CAA7452, 0x81A77653, 0x6DAB7B51, +0x68A87154, 0x57A96258, 0x61AA6556, 0x67A77E55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11323,19 +11923,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x7AAA8144, 0x7BAA7F44, 0x86A98842, 0x88AA8642, 0x8EA88C41, 0x85AA8442, 0x82AA8442, -0x81AB7B42, 0x85A98042, 0x80AA7A43, 0x76AC7D42, 0x82AA8642, 0x84AA8042, 0x7FAB8441, 0x87AB8440, -0x81AB8242, 0x80AA8143, 0x83AA7C43, 0x81A78F43, 0x8BA98741, 0x86A97F43, 0x7CAA8A43, 0x83AB7F43, -0x78AA8044, 0x7CAA7844, 0x84A98143, 0x7CAA7A44, 0x7FAA8343, 0x79AB8343, 0x86AB8440, 0x8CAA8940, -0x7CAA8244, 0x88A97F42, 0x72AA7D44, 0x80A98643, 0x84AA8043, 0x84AA8041, 0x80AA8243, 0x82AA7C44, -0x7EAA8942, 0x80AA8942, 0x88AA8542, 0x84AA8641, 0x84AA8642, 0x80AB7643, 0x7AAB8242, 0x79AB7943, -0x82A98942, 0x8CA98342, 0x7FAA8042, 0x81AB7B42, 0x7CAA7E44, 0x86A98842, 0x88AA8142, 0x7CAB8543, -0x85AA8642, 0x7EA97F44, 0x84AA8B42, 0x89AA8940, 0x87A98842, 0x83AB7F42, 0x80AB8042, 0x86A98D41, -0x7FAA7F44, 0x81A98C42, 0x80AA8143, 0x80A98144, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x00966E69, 0x7EA87353, 0x6FA88053, 0x73A67E55, 0x79A86F54, 0x68AA7054, 0x6EA97953, 0x76A86A54, +0x7CA76455, 0x75AB7251, 0x61AC7950, 0x71A97853, 0x80A86954, 0x5EAB5C57, 0x5EAB6356, 0x66AA6756, +0x6FA77355, 0x64A96156, 0x76AA6C53, 0x60A86159, 0x66AC6751, 0x5FA86958, 0x63A77457, 0x70A66B58, +0x6DAB6D52, 0x6BAC6652, 0x60A87457, 0x78AA6F53, 0x67AC8251, 0x78A77E54, 0x6EAC6853, 0x6AAA6955, +0x61AD8D43, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11362,23 +11958,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x7CAA8144, 0x7AAA7E44, 0x88A98542, 0x8BA98841, 0x8FA98941, 0x84AA7F43, 0x84AA8642, -0x7FAA7F42, 0x85AA7E42, 0x7FAB7643, 0x75AB8042, 0x88AA8341, 0x7DAB8242, 0x83AB7F42, 0x7CAB8042, -0x83AB8641, 0x82AA8242, 0x7FAA8343, 0x7AA98144, 0x8DA98741, 0x8AA98342, 0x80A97E44, 0x8CAA8342, -0x7CAA7A44, 0x80AA7B44, 0x7AAA8244, 0x80AA7D43, 0x78AA8243, 0x82AB7A42, 0x84AA8241, 0x88AB8740, -0x75AA8045, 0x85A98442, 0x78AA7446, 0x80AA8643, 0x86A98143, 0x82AB8342, 0x7FAA8443, 0x83AA8043, -0x7AAA8A43, 0x7FAA8742, 0x8CA98641, 0x84AA8341, 0x82AA8642, 0x80AB7643, 0x7AAB8243, 0x7BAB7B44, -0x85A98A42, 0x85AA8842, 0x88AA8442, 0x7EAB8641, 0x7CAB7D43, 0x7DA98643, 0x86AA8441, 0x7CAA7F44, -0x85AA8741, 0x86A97F43, 0x82A98543, 0x8AAA8841, 0x8AAA8A41, 0x83A98142, 0x81AB8042, 0x7FAA8B42, -0x85A97D44, 0x80AA8543, 0x84A98043, 0x7FAA8044, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5FAC6B51, 0x86A87751, 0x7DA28856, 0x7BA85256, 0x68A98353, 0x72A96654, 0x64AC5B55, 0x4EAB6457, +0x7DAA7451, 0x79A97452, 0x7BA97551, 0x69A96556, 0x72AB7452, 0x80A97352, 0x76A96E53, 0x76AA5B54, +0x66AA5C56, 0x61A97555, 0x7AA86A54, 0x5DA97356, 0x72A86E55, 0x65A95C58, 0x68AB6D54, 0x78AC7151, +0x75A96C53, 0x7CAB7151, 0x60AA6C55, 0x7DAB7351, 0x75AE614E, 0x6DAA6853, 0x78A78252, 0x6EAB7352, +0x73AA6A52, 0x67A95F57, 0x5FAA6D55, 0x5CA97B55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11402,16 +11995,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x7EAA8044, 0x79AA8043, 0x8BA88343, 0x8BA98841, 0x90A98741, 0x82AB7C43, 0x84AA8542, -0x7EAB8342, 0x80AA7D43, 0x7BAB7943, 0x79AB8741, 0x85AB8241, 0x88AA8642, 0x82A97F43, 0x80A97C44, -0x77AB7A44, 0x84AB8241, 0x82A98143, 0x84AA7B43, 0x82A88C43, 0x89AA8841, 0x7EA98344, 0x84AA8B41, -0x82AA7844, 0x7FAA8243, 0x7CAA7E44, 0x7FAA8143, 0x7EAA7C44, 0x86AB7D42, 0x7FAA8642, 0x80AC8940, -0x75AA7A44, 0x84A98942, 0x7FA97345, 0x7DAA8443, 0x86AA8342, 0x7FAA8742, 0x7FAA8542, 0x84A98443, -0x77AA8743, 0x81AA8142, 0x8EAA8441, 0x84AA8142, 0x83AA8442, 0x80AB7743, 0x7BAB8142, 0x7AAB7B44, -0x86A98343, 0x86A98C42, 0x8EA88D41, 0x86AA8043, 0x87AB7E41, 0x7DAA7D43, 0x86A98641, 0x83AA7A42, -0x81AA8143, 0x8AA98442, 0x80A98143, 0x85A98A42, 0x89AA8D40, 0x8CA98641, 0x81AB8242, 0x7DAB7F43, -0x8AAA7E43, 0x7FAA7D44, 0x87A98143, 0x7FAA7E43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11419,10 +12002,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00928869, 0x71A97852, 0x79A87253, 0x6DA67957, 0x7BA97351, 0x65AA7654, 0x71A98B51, 0x77A96754, +0x7DA87452, 0x55AA7E54, 0x72AB6B51, 0x7AAA7252, 0x69A96E56, 0x72AB6D53, 0x6AAB6655, 0x67AA6756, +0x72A97652, 0x71A96956, 0x6AA96C55, 0x6CAA6754, 0x67A76358, 0x6FA67356, 0x6DA56059, 0x69A96555, +0x65AD7251, 0x66A96B57, 0x7FA87B53, 0x72AB7151, 0x80AB7C4F, 0x7CA77755, 0x6EAD7150, 0x69A96A56, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11442,16 +12031,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D61, 0x83AA7C43, 0x77AA8443, 0x8BA88143, 0x8AA98741, 0x90A98441, 0x84AB7A43, 0x84AA8741, -0x7EAA8642, 0x7DAA7D44, 0x78AB7943, 0x80AB8841, 0x82AA8742, 0x87AA8241, 0x84AA8441, 0x84AA8741, -0x84AA7A43, 0x79AB8143, 0x83AB7E42, 0x81AA8243, 0x78A88545, 0x8BA98741, 0x88A88043, 0x83AA8B42, -0x87AA7F42, 0x79AA8044, 0x81AA7C44, 0x82AA8242, 0x81AA7A43, 0x7FAB8442, 0x7CAA8542, 0x83AB8541, -0x7FAB7544, 0x7FAA8443, 0x86A97B43, 0x76AA8044, 0x84AA8242, 0x7FA98842, 0x82AB8341, 0x86A98442, -0x7AAA8443, 0x84AB7F42, 0x8AAA8341, 0x85AA8142, 0x83AA8542, 0x83AB7843, 0x7BAC8042, 0x76AA8044, -0x87A98842, 0x8FA98F41, 0x8DA88E41, 0x8DA98442, 0x7FAB8541, 0x7CAB7D43, 0x7EAA8643, 0x87AA8641, -0x7BAA8044, 0x83AA8D41, 0x85A97F43, 0x83A98443, 0x87A98941, 0x8AAA8942, 0x81AA8042, 0x82AA7D43, -0x82AA8443, 0x7CAA7C45, 0x89A88343, 0x80AB8043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11463,9 +12042,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x46AB6059, 0x6AAB844D, 0x82A48554, 0x91A47A53, 0x52AB7755, 0x7EAA6752, 0x60AA6F55, 0x5EAD5A54, +0x62A98154, 0x7DA97C51, 0x7DA98350, 0x82A76E53, 0x68AA7154, 0x72AA7652, 0x7CA86C53, 0x64A97555, +0x61AC6353, 0x63A85C58, 0x67A97455, 0x70A87754, 0x67AA5F57, 0x63AB6055, 0x68AB6E54, 0x83AB6651, +0x6DA97253, 0x80AA6A52, 0x66A97154, 0x79A97751, 0x7DAC6050, 0x66AB6D52, 0x77A87452, 0x7CA96953, +0x71A96755, 0x68A95A56, 0x66AA6854, 0x60A97156, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11482,16 +12068,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967D61, 0x85AA7944, 0x78AA8443, 0x88A98142, 0x89A98942, 0x90A98441, 0x82AB7D43, 0x86AA8641, -0x80A98643, 0x7CAA7B44, 0x7AAC7C42, 0x86AB8441, 0x86AA8342, 0x7FAB7F42, 0x7CAA8143, 0x83AA8242, -0x86AA8242, 0x7FAA7C43, 0x81AB8142, 0x7DAA8343, 0x7EAA7C43, 0x87A98842, 0x88A98342, 0x82A97F44, -0x8CA98242, 0x7AAA7C44, 0x85A97C44, 0x7FAB7F43, 0x81AA7F43, 0x7BAB8443, 0x7FAB8142, 0x87AB7F41, -0x88A97743, 0x7AAA8343, 0x87A98242, 0x77AA7B44, 0x85AA8042, 0x7FAA8343, 0x86AB8141, 0x85A98542, -0x7EA97F44, 0x86AB7D42, 0x87AA8441, 0x86AA8242, 0x81A98542, 0x83AA7C42, 0x7BAB8242, 0x76AB8443, -0x87A88B42, 0x90A98C41, 0x8EA98E41, 0x90A88C42, 0x7FAA7F43, 0x82AB7F41, 0x7CAA8143, 0x86AA8541, -0x85AB7943, 0x83AB8342, 0x8DA98441, 0x81A98443, 0x85A98642, 0x87AA8E41, 0x86AA7D43, 0x80AA8243, -0x7BAA8843, 0x7DAA7C44, 0x84A98443, 0x82AA8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11506,10 +12082,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00947F68, 0x83A87853, 0x74A96F54, 0x75A66D57, 0x74A96F52, 0x71A87354, 0x74A89450, 0x86A86E53, +0x6FA88252, 0x6DA95258, 0x66AA7753, 0x7FAA7C4F, 0x7DA97952, 0x75A97154, 0x69AB6455, 0x63AC6752, +0x66AC6952, 0x6CA96B54, 0x67A86256, 0x65A66B58, 0x7BA67955, 0x66A86357, 0x65AA6754, 0x68AB6F52, +0x69A77157, 0x7DA78353, 0x79AB7250, 0x82AB844F, 0x83A87C52, 0x73A97452, 0x77AB6E51, 0x72A95957, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11522,16 +12104,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x84AA7744, 0x79AA8543, 0x85A98542, 0x88A88E42, 0x8BAA8342, 0x82AB8043, 0x86AA8242, -0x84A98543, 0x7CAB7743, 0x7DAB7F41, 0x87AA8542, 0x85AA8142, 0x7EAA8343, 0x8CA88D42, 0x88A98642, -0x86A98742, 0x85AA8142, 0x7BAA8042, 0x82AA7E43, 0x83AA7A43, 0x80A88544, 0x85A98642, 0x81A98143, -0x84AA8A41, 0x82AA7C43, 0x80A97F43, 0x7AAB7E43, 0x7DAA8142, 0x79AA7C44, 0x86AB7F42, 0x84A98242, -0x8CA98142, 0x75AB7F43, 0x83AA8542, 0x7DAA7944, 0x81AA8142, 0x7FAA8044, 0x86AB7F40, 0x82A98543, -0x82AA7944, 0x88AB7D42, 0x83AB8542, 0x85AA8242, 0x82AA8443, 0x83AA7E42, 0x7AAB7F42, 0x77AA8743, -0x83A88F42, 0x89AA8741, 0x8CA98D41, 0x8DA99141, 0x8DA98142, 0x7EAB8441, 0x81AB7B43, 0x82AA8542, -0x83AA8242, 0x7DAA8343, 0x85A98D41, 0x85A98242, 0x85A98642, 0x89A98741, 0x8AAA8242, 0x79AA7F44, -0x7CAA8344, 0x82AA7944, 0x7FA98743, 0x83AA8342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11550,9 +12122,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5DA8595A, 0x67AD724F, 0x86A8904E, 0x8EA38B53, 0x75AA5456, 0x7AAA7D51, 0x57AA6658, 0x71AD5D51, +0x5DAB6255, 0x8BA9834F, 0x7DA88450, 0x82A88550, 0x72AA6C54, 0x67AB6B53, 0x75A77654, 0x6AAB6056, +0x69AA6E54, 0x5CAC5D54, 0x60A66E59, 0x6CA77156, 0x69AC6553, 0x62AB6454, 0x64AB6554, 0x6DA96D54, +0x73A97A53, 0x6BAA6755, 0x65A96D55, 0x76A98451, 0x74AB5454, 0x6CAB7A4F, 0x68A86C56, 0x81A96D51, +0x6BA95B56, 0x6DAA5955, 0x63AB5F56, 0x65A97355, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11562,16 +12141,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x80AA7944, 0x7CAA8742, 0x83A98B42, 0x89A89142, 0x8BA98242, 0x7FAA8243, 0x86AA7F42, -0x85AA8143, 0x7AAB7644, 0x7EAB7E42, 0x87A98343, 0x82AA8242, 0x87A88443, 0x88A88942, 0x87A88643, -0x86A88343, 0x8CA88542, 0x7FAB7E42, 0x81AB7E42, 0x83AA7E43, 0x7AA98044, 0x82A98842, 0x83A97E44, -0x82AA8B41, 0x87AA7F42, 0x7FA98343, 0x7CAB7C43, 0x7AAB8142, 0x7CAB7844, 0x83AB8242, 0x83AA8542, -0x8CA88842, 0x78AB7A44, 0x84AA8442, 0x82AA7943, 0x7DAB8042, 0x80AB7E43, 0x84AB7F41, 0x80AA8542, -0x84AA7843, 0x88AA7F42, 0x7FAA8642, 0x80AA8342, 0x81AA8343, 0x84AA7F42, 0x7AAB8042, 0x7AAA8A42, -0x84A98D42, 0x87A98B41, 0x88AA8841, 0x84AA8842, 0x90A98841, 0x7DAB7E43, 0x83AB7F41, 0x79AA8643, -0x85A98641, 0x81AA7D43, 0x84AB8641, 0x90A98841, 0x83A98642, 0x88A98742, 0x84AA8C41, 0x7FAA7A44, -0x81AA7A44, 0x89A97944, 0x7CA98744, 0x81AA8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11593,25 +12162,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0093736B, 0x6CA96257, 0x63AA7355, 0x65A76D58, 0x74A96F52, 0x80A97452, 0x74A88851, 0x8CA77B51, +0x68A96557, 0x6CA97954, 0x76A86455, 0x56A85859, 0x60A66859, 0x6AA76E56, 0x6DA66C56, 0x6AA86E56, +0x6CA86E56, 0x67A76658, 0x67A85E58, 0x5CA96458, 0x67AB6554, 0x6BAA7752, 0x75A76D55, 0x70A67956, +0x82A78051, 0x72AC7751, 0x81AA8350, 0x7CAA7E52, 0x7BA97952, 0x72AC6C51, 0x76A77355, 0x5CA97756, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x7FAA7A44, 0x7FAA8B42, 0x83A98D42, 0x89A88F42, 0x8CA98241, 0x7DAA8443, 0x86AA7E42, -0x85A98043, 0x78AB7B43, 0x7BAB8142, 0x81A98243, 0x80A98842, 0x84A98742, 0x85A98143, 0x83AA8542, -0x86A98543, 0x84A98842, 0x83AA7A43, 0x7FAB7D43, 0x7DAA8143, 0x7CAA8044, 0x82A98343, 0x86A97F43, -0x7DAA8642, 0x89AA8441, 0x7EAA8443, 0x81AA7B44, 0x7DAB7E42, 0x82AA7743, 0x7EAB8542, 0x7FA98542, -0x8AA88C43, 0x81AA7444, 0x7FAA8342, 0x85AA7F42, 0x78AB8143, 0x80AA7E43, 0x81AA8443, 0x7FAA8542, -0x86AA7B43, 0x83AA8243, 0x7DAA8543, 0x7CAA8742, 0x81AA8343, 0x84AA7D43, 0x7AAB8042, 0x7AAA8643, -0x84A98B42, 0x86AA8742, 0x84A98543, 0x87AA8242, 0x84AA8B41, 0x88AA7D43, 0x81AB8241, 0x7DAB7A44, -0x84A98342, 0x86AB7F41, 0x81AB8343, 0x86A98F41, 0x86A98242, 0x85A98842, 0x85AA8542, 0x87A97A43, -0x7EAA7A44, 0x82A98043, 0x7CAA8443, 0x80AA8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11637,21 +12202,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x70A95557, 0x61AA6855, 0x6CAA844E, 0x89A58652, 0x8DA86553, 0x55AA7C56, 0x74AA5A55, 0x63AB7252, +0x61AC6852, 0x60A98A52, 0x88A88250, 0x80A9864F, 0x7EA97253, 0x6DAA6A54, 0x73AA6953, 0x71A67656, +0x5DAC5F55, 0x74A87753, 0x65AB5D54, 0x66A86158, 0x68A86E57, 0x70A57656, 0x78A57855, 0x76A97154, +0x69AB6354, 0x5DA96C56, 0x73A97A52, 0x87AC704D, 0x5CAB6554, 0x71A87255, 0x72A77954, 0x77A87353, +0x5CAB6754, 0x65AA5E55, 0x6BAA6A53, 0x69A87E54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958661, 0x7EAA7D43, 0x81AA8C42, 0x81AA8C42, 0x89A88F42, 0x8BAA8341, 0x7BAB8443, 0x86AB7E42, -0x83AA7C43, 0x78AB7E43, 0x7AAB8542, 0x80A98243, 0x87A98642, 0x83A98542, 0x80AB8442, 0x86AB8142, -0x87AA8641, 0x80A98644, 0x83AA7C43, 0x7EAB7C43, 0x7CAA8243, 0x7DAA7E43, 0x81A98143, 0x87A98043, -0x7DAA8243, 0x8CAA8641, 0x7FAA8343, 0x88A97743, 0x7FAB7E43, 0x81AB7F43, 0x79AA8942, 0x7DA98643, -0x88A78A44, 0x89A97942, 0x77AA8244, 0x86AA8642, 0x7AAB7E43, 0x7FAB7D43, 0x80A98743, 0x80AB8242, -0x85AA8142, 0x7CAA8443, 0x7DAA8243, 0x7BAB8842, 0x82AA8642, 0x82AA7E43, 0x7DAB8142, 0x7AAA8244, -0x87A98A42, 0x86A98842, 0x7AA97C45, 0x84A98942, 0x84AB7F42, 0x8CAA8941, 0x7AAB8243, 0x83AB7D42, -0x7BAA8343, 0x84AA8741, 0x7EAA8143, 0x85AA8342, 0x8CA98542, 0x83A98542, 0x88A98342, 0x88AA8542, -0x7AAA8044, 0x7AAA8544, 0x7BAA8444, 0x82A98143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11680,20 +12242,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0096646A, 0x62AC7053, 0x64A76259, 0x6CA96A56, 0x76A86D53, 0x78A97353, 0x6FA97C53, 0x8AA67F52, +0x7BAA6C52, 0x60AB5A57, 0x58AA5D57, 0x61AA6456, 0x65AA6155, 0x5EAA5D56, 0x5EAA5C57, 0x5DAA6156, +0x64AA6454, 0x61AB5F55, 0x68AB6E53, 0x6DA97454, 0x74A66F57, 0x6CA57558, 0x85A78A50, 0x7EAA7951, +0x7BA98152, 0x7FAA7B52, 0x81A88751, 0x85A97F50, 0x72AA6654, 0x6EA87256, 0x6DA86E55, 0x76A48E54, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958561, 0x7EAB8142, 0x84A98B42, 0x83A98D41, 0x89A79143, 0x87AB8141, 0x7DAB8343, 0x85AA8142, -0x81A97C43, 0x79AB8042, 0x7BAB8442, 0x83AA8443, 0x87AA8242, 0x87A98142, 0x81AB8741, 0x7FAB8142, -0x87AB8840, 0x7FA98044, 0x86A97C43, 0x7CAB7C43, 0x7DAA8043, 0x7DAA7E43, 0x7DA97F44, 0x84A98143, -0x7FAA8043, 0x8CAA8840, 0x7FAA8043, 0x86A97F43, 0x7BAA8143, 0x80AA8342, 0x76AA8643, 0x7FAA8343, -0x89A68944, 0x88A97F43, 0x73AB7F44, 0x83AA8941, 0x82AB7B43, 0x7EAB7B43, 0x7FA88544, 0x85AB8042, -0x86AA8542, 0x79AA8543, 0x7BAB7F43, 0x7FAA8242, 0x82AA8642, 0x81AA7F43, 0x7FAB8142, 0x7DA97E44, -0x86A88942, 0x88A98243, 0x7BAA7C44, 0x82AB8042, 0x84AA8342, 0x81AA8A41, 0x86AA7A42, 0x85AB8441, -0x7BAB7D43, 0x82AA8742, 0x88AB7C41, 0x85A98342, 0x81A98B42, 0x82AA8342, 0x85A98842, 0x82A98D41, -0x7BAA7F44, 0x7CA98544, 0x7DA98443, 0x88A97D44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11722,21 +12280,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x83AB8242, 0x86A88942, 0x83A98D41, 0x89A88D43, 0x82AB8242, 0x81AB8342, 0x84AA8442, -0x83AA7C43, 0x7CAB7F42, 0x7DAB8441, 0x86A98342, 0x83AA7D43, 0x86AA8342, 0x80AC8B41, 0x83AB8341, -0x85AB8541, 0x81AA8044, 0x86A97943, 0x7DAA7C43, 0x7FAA7D43, 0x7DAB7C43, 0x7EA98044, 0x80A98343, -0x7FAA7F43, 0x89AA8740, 0x7FAA7C44, 0x84A98543, 0x7AAA8343, 0x82AA8442, 0x78AB8243, 0x82AA8043, -0x88A78644, 0x8BA88642, 0x78AB7744, 0x83AA8442, 0x86AA7943, 0x7DAB7A43, 0x7AA98244, 0x86AB7F42, -0x86AA8442, 0x7DAA8043, 0x7DAB7943, 0x83AA7D43, 0x82AA8342, 0x82AA8043, 0x80AA8142, 0x80AA7B43, -0x85A98842, 0x88A98043, 0x78AB7D44, 0x7CAA7945, 0x7AAB7E43, 0x82AB7F42, 0x88AA8241, 0x7BAB8442, -0x84AB7943, 0x81AA8043, 0x86AB8840, 0x7DAB8342, 0x84AA8142, 0x89A98342, 0x83AA8941, 0x82AA8642, -0x85A97B43, 0x7FAA8143, 0x85A98343, 0x88A98043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5DA86D57, 0x55AA6757, 0x69AC7750, 0x8CA7884F, 0x84A48154, 0x67AB5D56, 0x80A96953, 0x61AA6556, +0x7AAB6251, 0x71AA6353, 0x80A9904F, 0x89A87D50, 0x7FA98350, 0x7BA97952, 0x6FAA6B54, 0x69A86E55, +0x78A67D55, 0x5AAC5D55, 0x63AA6B54, 0x6CAD6052, 0x63A96555, 0x5EAA5856, 0x51AC5557, 0x5CAC6354, +0x6DA96F54, 0x7EA9864F, 0x7FAD674F, 0x5FAB6154, 0x6AA76B58, 0x74A86E55, 0x7EA77953, 0x60A86159, +0x65AB6C52, 0x6DAB5C54, 0x69AB7152, 0x71A88353, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11762,25 +12317,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958361, 0x83AB8242, 0x8BA98343, 0x8AA98B42, 0x8BA88C42, 0x82AA8342, 0x82AB8342, 0x84AA8442, -0x84A97B43, 0x82AA7D42, 0x7FAB8241, 0x87A98242, 0x81AA7E43, 0x82AA8642, 0x83AB8143, 0x81AC8142, -0x85AA8742, 0x83A98243, 0x83AA7643, 0x7CAB7D43, 0x7DAB7B44, 0x7DAB7D43, 0x81A97F44, 0x7DA98643, -0x7BA97F44, 0x88AA8441, 0x81AA7A44, 0x80AA8642, 0x78AB8243, 0x83AA8642, 0x7EAB7D43, 0x82AA7C43, -0x85A88B43, 0x89A78843, 0x7FAA7244, 0x7FAA7F43, 0x85AA8042, 0x7CAB7D43, 0x76AA7C45, 0x86AB8242, -0x82AA8242, 0x83AA7C43, 0x7DAB7843, 0x80AB7D43, 0x84AA8042, 0x83AA8142, 0x81AA7F43, 0x81AA7843, -0x83A98343, 0x8AA98143, 0x7AAA7D44, 0x79AA7846, 0x76AA7B45, 0x83AA7D42, 0x83AA8642, 0x7EAB8142, -0x83AB7F42, 0x76AB8343, 0x82AA8841, 0x83AB7E41, 0x83AB8342, 0x85A98842, 0x82AA8542, 0x88AA7F42, -0x87AA7843, 0x7DAA7C44, 0x85A98143, 0x88A88343, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094766A, 0x62A96257, 0x66A96157, 0x6BA87155, 0x6EA96E53, 0x6BAA7054, 0x70A87A54, 0x82A97E50, +0x77A97852, 0x7DA77D52, 0x79A77E53, 0x7FA87852, 0x77AA7A51, 0x7DAA8050, 0x83AA7E4F, 0x7CAA824F, +0x80A67A53, 0x71A46C58, 0x76A57F54, 0x80A68551, 0x88A88750, 0x7DAA7452, 0x6DAD6B54, 0x69AC6B55, +0x77A98252, 0x7FAC7650, 0x67AD6253, 0x6EAA7653, 0x7CA68354, 0x85A77F51, 0x7AA58A53, 0x94A27D54, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11802,16 +12353,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x84AA8341, 0x8AA98142, 0x8BA88842, 0x8DA88B42, 0x80AA8342, 0x7FAB8442, 0x84AB8142, -0x82AA7B43, 0x87AB7C41, 0x80AB8341, 0x86A98343, 0x7FAA7D43, 0x84A98642, 0x82AA8442, 0x83AA8442, -0x87AA8842, 0x87A98043, 0x80AA7245, 0x7CAB7D43, 0x7CAA7B44, 0x7AAB7F43, 0x80A97F43, 0x7EA98943, -0x7CAA7F44, 0x88AB8241, 0x7DAA7C44, 0x82AA8842, 0x78AB8143, 0x86AA8642, 0x80AA7D43, 0x82AA7C43, -0x8AAA8641, 0x89A78C43, 0x84A97844, 0x78AA8343, 0x82AA8542, 0x7FAA7C43, 0x76AA7745, 0x85AA8642, -0x7DAA8442, 0x85AA7B43, 0x81AA7B43, 0x7CAA8043, 0x7EAA8442, 0x83AA8342, 0x80AA7F42, 0x81AB7A43, -0x7FA98443, 0x8CA98142, 0x7AAA7845, 0x78AA7146, 0x78AA7646, 0x7AAB8342, 0x7DAA8842, 0x82AB7B42, -0x82AB8441, 0x7AAB7B43, 0x83AA8242, 0x88AB7D40, 0x7EAB8043, 0x84AA8642, 0x85AA8142, 0x84AA8242, -0x82AA7B43, 0x7CA97E44, 0x82AA7F43, 0x87A98542, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11821,9 +12362,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x56A86D58, 0x53AA6A58, 0x68AA7252, 0x76A88B50, 0x7BA87A53, 0x80A96353, 0x64A88454, 0x69AA6055, +0x72AA7A53, 0x63AB7353, 0x63AA7F52, 0x8FA9854F, 0x81A67A53, 0x84A98050, 0x7BA87C52, 0x6AAB7C52, +0x72A76E56, 0x71A47A57, 0x68A95B57, 0x67AC6453, 0x5FAA7053, 0x75A87953, 0x77AB7B50, 0x7BAB7D4F, +0x76AB6952, 0x65AB6954, 0x69A86D57, 0x73A87D54, 0x78A88252, 0x85A77B52, 0x5CA95B59, 0x66AA6853, +0x72AA7151, 0x67AC5F53, 0x6DAA7552, 0x73A77B55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11842,16 +12390,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x82AA8642, 0x84AA8142, 0x88A98443, 0x8DA98942, 0x81AA8342, 0x7FAB8442, 0x83AA8042, -0x81AA7943, 0x88AA7A42, 0x82AA8342, 0x85A98842, 0x7CAA7D43, 0x80AA8142, 0x87AA8443, 0x83AA8343, -0x85AA8542, 0x7CAA8344, 0x76AA7645, 0x81AB7D43, 0x78AA7D44, 0x7DAA7E43, 0x82AA7C43, 0x82A88244, -0x81A98043, 0x86AB8041, 0x7CAA7D44, 0x84AA8542, 0x79AB8442, 0x88AA8541, 0x82AA7E42, 0x81AA7C43, -0x81AB8841, 0x86A78744, 0x8AA97D43, 0x73AA8544, 0x82AA8541, 0x7FAA7F43, 0x79AB7444, 0x80A98943, -0x81AA8642, 0x84AA8142, 0x81AA7E44, 0x7AAA8243, 0x7DAA8742, 0x82AA8542, 0x7EAA8142, 0x7EAB7F42, -0x7BA98344, 0x8BA98642, 0x7CAA7945, 0x7BAA7744, 0x74AA7646, 0x78AB8043, 0x7EAA8143, 0x88AB8142, -0x80AB8441, 0x81AB7942, 0x81AB8042, 0x85AB8540, 0x79AB8142, 0x7EAA8542, 0x89AA7F42, 0x84AA8542, -0x7FAA8042, 0x79AA7E45, 0x7DAA7D44, 0x82A98742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11864,10 +12402,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094656B, 0x67A76D58, 0x75A67756, 0x6DA97553, 0x6AA96E53, 0x6CAA6E55, 0x77AA7C51, 0x7DA97951, +0x75A97153, 0x6BAA6855, 0x6BAA6B55, 0x69A96956, 0x6CA96F55, 0x74A97453, 0x6FAA6A53, 0x70A97951, +0x7DA98050, 0x7DAB7951, 0x77AC7652, 0x71AD6D52, 0x6AAC6654, 0x6CAB7353, 0x76AC7450, 0x75AC7A4F, +0x81A88950, 0x91A79151, 0x8BAA884E, 0x82AA7C50, 0x7DA78351, 0x83A48253, 0x77A86754, 0x6CAE764D, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11882,16 +12426,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x81AA8A42, 0x7EAA8543, 0x85A98343, 0x8AA98443, 0x7FAB8243, 0x7EAA8343, 0x84AA8043, -0x82AA7A44, 0x88AA7E42, 0x7FAB8441, 0x83AA8A42, 0x81AB7643, 0x80A98143, 0x83AA8742, 0x89AA8642, -0x83AA8043, 0x83AA7F43, 0x77AA7F44, 0x7DAA7B44, 0x7AAB7A43, 0x7FAA7D44, 0x7FAA7A43, 0x88A87B44, -0x85AA8043, 0x82AB8041, 0x7AAA7F44, 0x83AA8442, 0x7BAB8642, 0x85AA8842, 0x81AB7D42, 0x80AA7D43, -0x7FAB8A3F, 0x84A88443, 0x8BA88343, 0x75AA7C45, 0x8AAA8441, 0x81AA7F43, 0x7AAC7443, 0x7AA98843, -0x85AA8042, 0x83AA8642, 0x7DAA8143, 0x79AA8244, 0x7FAA8542, 0x82AA8442, 0x81AA8342, 0x7CAB7E42, -0x7BAA7E44, 0x88A98842, 0x7FAA7C44, 0x7AAB7545, 0x77AA7845, 0x76AB7844, 0x81AB7F42, 0x87AB8541, -0x7DAB8542, 0x84AB7B42, 0x78AB8542, 0x83AB8641, 0x7EAB7A42, 0x80AA8342, 0x88A98342, 0x80AB8642, -0x7EAA8242, 0x77AA7C44, 0x7BAA7D43, 0x7DA98743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11908,9 +12442,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5DA97656, 0x5CAA6458, 0x6CAA6F52, 0x78A97352, 0x8FA97052, 0x7EA78651, 0x6EAA6654, 0x80A86753, +0x5BAB6C56, 0x75A96854, 0x7DAC6450, 0x6AAA7752, 0x86A78253, 0x6DA67D56, 0x78AA7C51, 0x7CA97B51, +0x77AA7A51, 0x6DA97054, 0x79A77156, 0x6FA86F56, 0x6DA96E55, 0x6BA86C58, 0x67A86659, 0x6AA86D58, +0x6FA96F55, 0x71AA6F54, 0x79A88553, 0x82A67F53, 0x6FA86557, 0x6DA97354, 0x66AB6553, 0x6EAA6A52, +0x72AC6851, 0x62AB6954, 0x74A96455, 0x79A76D55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11922,16 +12463,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x87A98242, 0x81AA8842, 0x82A98743, 0x85A98143, 0x7EAB8143, 0x81AA8542, 0x84AA7F43, -0x86A97D43, 0x83AA8241, 0x7BAC8541, 0x82AA8442, 0x88AA7E42, 0x7AAB7944, 0x7AAB7C44, 0x7DAA7D44, -0x81A98343, 0x7CAA7B44, 0x83AA8042, 0x7BA97B45, 0x7DAB7E42, 0x7BA97E44, 0x7CA98344, 0x81A88044, -0x80AB8042, 0x7FAB7D42, 0x7BAA8344, 0x85AA8142, 0x7DAB8942, 0x85A98742, 0x80AB7E42, 0x7FAA7F43, -0x7BAC8440, 0x8BA88742, 0x88A78943, 0x7CAA7444, 0x8AAA8442, 0x83AA7E43, 0x7BAB7643, 0x78AA8343, -0x89AA7E42, 0x85AA8342, 0x81AA8342, 0x7CAA7D44, 0x84AA8242, 0x86AA8142, 0x85AA8242, 0x81AB7A43, -0x7FAA7844, 0x81A98A42, 0x85A97A43, 0x7EAA7C44, 0x75AA7746, 0x79AB7844, 0x7EAB7D43, 0x86AB8242, -0x85AA8242, 0x85AA7D42, 0x7AAB8143, 0x83AB8441, 0x82AC7C40, 0x81AA7E42, 0x86A88842, 0x7EAB8442, -0x81AA8142, 0x7AAA7D44, 0x7AAA7F43, 0x7BA98743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11951,10 +12482,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00947D69, 0x79AA7251, 0x72A97052, 0x6DA96A54, 0x60AA6F53, 0x6DAA6E51, 0x76AB7551, 0x73AB7051, +0x66AC6752, 0x6AAD6B50, 0x6BAE6C51, 0x6EAD7650, 0x7FAB834E, 0x84AC824E, 0x7CAD7151, 0x66AD5C56, +0x58AC5E57, 0x70AC7F4F, 0x84AD874B, 0x82AC7E4D, 0x78AA7951, 0x7EA98551, 0x81A87852, 0x73A87153, +0x73A97353, 0x79A87751, 0x74A97053, 0x6EAD6C51, 0x6EAD7051, 0x71A97653, 0x76A57C55, 0x79A86C53, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11962,16 +12499,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948062, 0x89A98042, 0x85AA8542, 0x81A98643, 0x86AA8242, 0x7DAB8242, 0x81AA8B41, 0x82AA7E43, -0x87A97F43, 0x7DAA8942, 0x7CAB8342, 0x83AB8142, 0x84AA8642, 0x85A98643, 0x85A98244, 0x80A98144, -0x7DAB7D44, 0x84AA8542, 0x80AA7A44, 0x7DAA7D43, 0x7FAA7D43, 0x7DA97F44, 0x80A88444, 0x7AA97E44, -0x7DAB7F42, 0x81AB7943, 0x81AA8642, 0x83AA8042, 0x82AB8841, 0x86A98443, 0x82AB7F42, 0x7FAA7D43, -0x7AAB7F41, 0x8AAA8541, 0x87A78A44, 0x86AA7543, 0x7EAA8942, 0x82AA7D43, 0x7CAB7943, 0x74AA7D44, -0x86AB8342, 0x85AA8242, 0x85AA8341, 0x7EAA7D43, 0x82AB8242, 0x88A98242, 0x83AA8142, 0x83AA7942, -0x7EAA7943, 0x7BAA8343, 0x85AA7F43, 0x7AAA8343, 0x82AA8143, 0x7DAA7944, 0x7EAB8043, 0x84AB8242, -0x83AA7F42, 0x86AB8241, 0x7BAA7F43, 0x87AB8241, 0x83AC7B40, 0x80AA7E42, 0x85A98842, 0x80AA8242, -0x83AA7F42, 0x7DAA7A44, 0x7BAA8043, 0x7AAA8543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -11995,23 +12522,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6CAA6357, 0x65A96459, 0x6DA97153, 0x74AA7052, 0x7BA78A52, 0x6FA88253, 0x7DAB7550, 0x71A78753, +0x74AB5D53, 0x63AB7053, 0x69AA7B52, 0x7CAC6C4E, 0x6BA77E55, 0x7DA77E54, 0x75A58256, 0x77A97553, +0x7CA97551, 0x79A96954, 0x5FAA5F56, 0x63A86B57, 0x77A87A54, 0x77A87C53, 0x79A67956, 0x7CA67F54, +0x80A68154, 0x7AA87153, 0x6DAA6854, 0x65AA6555, 0x69AA7C52, 0x7DAA804F, 0x77AB794F, 0x75AD6C4F, +0x66AB6055, 0x6CAA6B54, 0x62A97A56, 0x6BA96755, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948B61, 0x82AA8442, 0x85AA8242, 0x80A98543, 0x86AA8242, 0x7DAA8343, 0x82AA8C41, 0x84AA7D43, -0x86AA8342, 0x76AA8743, 0x82AB7F42, 0x85AB8242, 0x7EAA8044, 0x82AB8043, 0x7FAA7D43, 0x7DAA7E44, -0x82AA8342, 0x81AA7F43, 0x7FAA7F43, 0x80AA7D43, 0x7EA97C44, 0x81A98343, 0x80A97B45, 0x7EAA7D43, -0x7DAB8241, 0x7DAA8044, 0x87A98542, 0x82AB8242, 0x88AB8641, 0x86A98443, 0x81AB8241, 0x7EAA7F43, -0x78AA7E43, 0x82AA8B40, 0x88A88943, 0x8BA97C43, 0x75AA8B43, 0x81AB7F42, 0x7BAB7D42, 0x76AB7A43, -0x81AA8942, 0x81AA8642, 0x88AA8441, 0x84A97D43, 0x7FAB8442, 0x83AA8542, 0x84AA8042, 0x7FAA7D43, -0x7AAB7C43, 0x78AA7B45, 0x84AB8342, 0x7FAA7744, 0x7BAA7F44, 0x7DAA7E43, 0x7FAB8042, 0x85AB8241, -0x80AB8042, 0x87AB8341, 0x7DAA8143, 0x86AA8341, 0x85AC7A41, 0x7FAA8242, 0x83A98642, 0x84AA8042, -0x81AB7F42, 0x7FAA7944, 0x7DAA7F43, 0x7BAA8243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12038,20 +12562,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0095606B, 0x63A7655A, 0x68A86B58, 0x67AB6454, 0x64AC6653, 0x62AE6651, 0x69AD6F4F, 0x78AD7750, +0x78AD764F, 0x79AD7A4F, 0x74AC6C52, 0x6EAA6D55, 0x68AB6756, 0x69AB7B53, 0x83AA844F, 0x78AB6751, +0x62AB6654, 0x67A96857, 0x6CAA7752, 0x7BA97D50, 0x7DAB7950, 0x71AA7253, 0x70A97056, 0x73A87C54, +0x84A68751, 0x85A78250, 0x87A7884F, 0x87A88450, 0x7FAB7D4F, 0x75AC6F51, 0x6FAD6C52, 0x66AD6054, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958560, 0x86AA8641, 0x83AA8143, 0x83A98044, 0x84AA8242, 0x7EAA8443, 0x83AA8E41, 0x86AA7F43, -0x83AA8642, 0x78AA7D44, 0x85AB8240, 0x83AA8343, 0x82AB7F42, 0x7DAB7C43, 0x7CAB7E43, 0x81AB8143, -0x80AA7E44, 0x7FAA7E42, 0x7EAB8042, 0x7CAA7C44, 0x81A88143, 0x86A97E44, 0x7EA97D44, 0x7AAB7D42, -0x82AA7F43, 0x7EAA8544, 0x88AA8341, 0x83AB8741, 0x86AB8841, 0x83A98443, 0x80AB8241, 0x81A97B45, -0x70AB7B44, 0x7FAB8940, 0x88A88A43, 0x8FA88542, 0x76AB8443, 0x87AA7E42, 0x7BAA8143, 0x7AAB7943, -0x7BAA8843, 0x86AA8641, 0x87AA8940, 0x88A98142, 0x7DAA8243, 0x82AA8342, 0x86AA8042, 0x7CAA8343, -0x7CAB7C43, 0x7CAA7945, 0x7EAA8243, 0x81AA8443, 0x7EAA7A44, 0x7CAB7B43, 0x7EAB8143, 0x89AB7D41, -0x80AA8242, 0x88AA7F42, 0x7EAA8243, 0x85AA8441, 0x86AB7B41, 0x7DAB8042, 0x84AA8342, 0x86AA7F42, -0x82AA7D43, 0x7EAA7844, 0x7DAB7E43, 0x7BAA8243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12083,18 +12603,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958860, 0x89AA8542, 0x83AA8143, 0x83A98044, 0x83AA8142, 0x82AA8242, 0x83A98F42, 0x8AAA8042, -0x81A98842, 0x80AA7544, 0x7DAA8443, 0x87AA8641, 0x86AA8542, 0x83AA8243, 0x7EAB7C43, 0x7CAB7E42, -0x7EAB7F42, 0x7FAA7F42, 0x7DAA7C44, 0x7DA97F44, 0x86A98543, 0x7DAA7C44, 0x7DAA7E42, 0x7EAB8142, -0x7EA98244, 0x87A98942, 0x85AB8241, 0x88AB8941, 0x89AA8642, 0x82AA8342, 0x84AB8142, 0x82AA7844, -0x73AA7B45, 0x80AB8240, 0x8DA88B42, 0x8CA78D42, 0x7CAB7744, 0x8DAA7F41, 0x7CAA7F43, 0x7FAC7A42, -0x7CAA8343, 0x8AAA8441, 0x88AA8A41, 0x88A98641, 0x81AA7D43, 0x82AA8042, 0x85A98342, 0x7CAB7D43, -0x82AA7B43, 0x7BAA7B44, 0x7CA98044, 0x83AB8142, 0x81AA8243, 0x81AA8243, 0x83AB8741, 0x81AB7D42, -0x7EAB8343, 0x83AB7D42, 0x7EAA8143, 0x82AA8741, 0x88AB7A41, 0x7DAB8141, 0x81AA8142, 0x88AA7E42, -0x83AA7B43, 0x7FAA7843, 0x7CAB7C43, 0x7CAA8243, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6EA85C59, 0x62A77556, 0x72A77255, 0x74A87F52, 0x7EA68A52, 0x8DA87451, 0x83A87851, 0x7AAB6F50, +0x7BA97451, 0x62AA6456, 0x6EAB7252, 0x6EA98A52, 0x81AB6D4F, 0x6EA57957, 0x7EA87A52, 0x77A58555, +0x83A76E53, 0x6AA87B56, 0x7DA67D54, 0x7BA57356, 0x6DA66758, 0x67A76759, 0x65A7605A, 0x63A76A59, +0x6EA66D57, 0x70A77256, 0x78A67A54, 0x7FA77F52, 0x7DAA7252, 0x73AB7452, 0x73A86A56, 0x69AA7553, +0x78AA6754, 0x5FA97256, 0x6CA96555, 0x6CA57E56, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12122,22 +12640,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958A60, 0x86A98143, 0x80AA8143, 0x7FA98044, 0x82AA8142, 0x85AA8442, 0x84AA8E42, 0x8EAA8242, -0x81A98443, 0x87A97F43, 0x75AA7845, 0x7FA98443, 0x87AA8541, 0x83AA8442, 0x84AB8342, 0x84A98342, -0x83A97E44, 0x7DAA7C44, 0x7FA98044, 0x83A98044, 0x7DAA7D44, 0x7BAB7C43, 0x7EAB8242, 0x7FAA8143, -0x83A98943, 0x87AA8341, 0x83AB8841, 0x88AA8A41, 0x85A98643, 0x83AB8341, 0x82AA8143, 0x7BAA7D44, -0x7AAA7845, 0x7DAC8241, 0x8AA98E40, 0x8DA88C42, 0x83AA7643, 0x85AA8741, 0x77AA7D44, 0x82AB7A41, -0x79AB7B43, 0x8CAA8940, 0x86A98941, 0x89A98A41, 0x82AA7F42, 0x7DAB7F43, 0x83A98442, 0x7FAB7B43, -0x7FAA8142, 0x79AC7943, 0x7BA98045, 0x80A98244, 0x7FAB7D43, 0x7BAB7C43, 0x7CAB7D43, 0x80AA8043, -0x83AA8542, 0x7FAA7D43, 0x7DAA8043, 0x84AA8941, 0x83AB7643, 0x80AB8541, 0x7EA97F43, 0x88AA8041, -0x7FAA7944, 0x80AA7843, 0x7CAB7B44, 0x7DAA8343, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957969, 0x77A97654, 0x76A76757, 0x68AB6255, 0x67AC6252, 0x62AD7150, 0x71AB7752, 0x7EAA8150, +0x73AC6952, 0x6EA96656, 0x6EA87856, 0x74A97B54, 0x74AB6652, 0x65AB6555, 0x68AB6D53, 0x76A87A52, +0x72AA6055, 0x63AB6755, 0x6AAC7151, 0x78AA7551, 0x71AA7253, 0x6FA96B55, 0x6CA96C56, 0x6FAA6B56, +0x71A97156, 0x7AA87C54, 0x7FA88353, 0x81A98052, 0x82A88852, 0x85A88851, 0x80A98450, 0x7EAA7850, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12162,25 +12676,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948362, 0x80AA7C44, 0x7CAA8243, 0x7DA98044, 0x83AA8142, 0x88AA8342, 0x83AA8B42, 0x8CA98642, -0x7EAA7C44, 0x80AA8543, 0x84A97C43, 0x77AA7745, 0x7BA97E44, 0x7FA98143, 0x80A97F44, 0x7FAA8143, -0x7FAA8143, 0x7EA97E44, 0x7EA97A45, 0x79AA7C44, 0x7EAB7D43, 0x7FAB8442, 0x84AA8043, 0x81A98543, -0x88A98741, 0x82AB8442, 0x88AA8941, 0x86AB8742, 0x85AA8541, 0x82AB8042, 0x84A98343, 0x79AA8443, -0x81AA7644, 0x7CAB8042, 0x84AA9040, 0x8AA88E42, 0x89AB7A42, 0x7CAA8B42, 0x7AAA7B44, 0x82AB7D41, -0x79AB7A43, 0x85AA8D41, 0x84AA8942, 0x8CAA8441, 0x87AA8142, 0x7DAB7E43, 0x7DAA8343, 0x84AA7A44, -0x7BAB8142, 0x82AA7E42, 0x79AA7D44, 0x81A98344, 0x83A98044, 0x81AA7F44, 0x7FAA8044, 0x81AA8343, -0x82AA8042, 0x7FAA7944, 0x80AA7E43, 0x86AB8841, 0x79AB7C43, 0x7FAA8541, 0x7EA98143, 0x88AA8142, -0x7BAA7B44, 0x7DAA7944, 0x7DAA7D43, 0x7DAA8643, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6DA86B54, 0x67A76D58, 0x65AA7454, 0x77A98650, 0x77A77055, 0x88A68352, 0x6FAA8451, 0x76AA7251, +0x71AA7851, 0x83A86B52, 0x67AB6C54, 0x73AA7454, 0x73A89051, 0x86AA794E, 0x6BA56C59, 0x80A77F52, +0x71A77057, 0x79A47A57, 0x6CA85C58, 0x55AA5C59, 0x60A86A58, 0x6FA56D58, 0x70A47158, 0x73A67257, +0x73A77756, 0x76A77057, 0x6FA76F58, 0x6DA76758, 0x6DA76D55, 0x77A97F51, 0x7DAA7351, 0x68AA5F56, +0x5FAB6356, 0x60AB6755, 0x6CA57E55, 0x80A75F55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12202,16 +12713,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x7DAB7C43, 0x81AA7C44, 0x7EAA7F44, 0x83AA7F42, 0x87AA8342, 0x82AA8A42, 0x89A98C41, -0x7FAA7B43, 0x7AAA7944, 0x7CAA8243, 0x85A98842, 0x8AA98B42, 0x8CA98A42, 0x88A98642, 0x83A97F43, -0x7BAA7A45, 0x7AAA7845, 0x7BAB7C43, 0x7CAB7D43, 0x7FAB8342, 0x83A98043, 0x80A88344, 0x88A98942, -0x85AB8541, 0x88AA8A41, 0x86AB8642, 0x89AA8842, 0x85AB8441, 0x7EAA8043, 0x83A97D44, 0x7FA98643, -0x81AA7744, 0x7CAA7E43, 0x80AB8941, 0x8CA88A42, 0x8DA97D42, 0x77AA8643, 0x83AB7843, 0x7CAB8242, -0x7BAB7E42, 0x7BAA8B42, 0x8BA98941, 0x88AA8A40, 0x87A98242, 0x80AA7F43, 0x82AA7F42, 0x82A98443, -0x7AAB7A43, 0x83AA8442, 0x7DAB7943, 0x7DAA7B44, 0x7EA98044, 0x81A98443, 0x85A98543, 0x84AA8142, -0x7EAB7C43, 0x7AAA8044, 0x83AA8542, 0x8AAC8140, 0x7AAB7D43, 0x82AA8243, 0x82A98543, 0x84AA8342, -0x7AAB7E43, 0x7DAA7A43, 0x7FAB7F43, 0x7FAA8743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12221,10 +12722,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094736A, 0x6AAC6A53, 0x6EA87355, 0x65AB5D55, 0x64AD5C53, 0x70AB7652, 0x82A98650, 0x6EA96D55, +0x65A76C58, 0x71A77158, 0x6DA96C54, 0x67AB5F55, 0x64AA6B54, 0x74A76C56, 0x6BAA6E55, 0x68AC6153, +0x6BA77A53, 0x7DA87554, 0x6EAA6D53, 0x66AC6253, 0x5CAD5755, 0x53AD5156, 0x50AF5355, 0x56AF5954, +0x5FAD5D53, 0x5BAE5D54, 0x65AD6751, 0x69AD6B51, 0x68AB6453, 0x68AA7752, 0x7BA98451, 0x7FA88C52, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12242,16 +12749,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967C61, 0x7CAB8142, 0x7CA97C45, 0x7FAA7F44, 0x83AA8042, 0x84AA8342, 0x81AA8642, 0x8CA98741, -0x86AA8042, 0x7BAB7844, 0x78AA7A44, 0x7BAA7C44, 0x7DAB7C43, 0x7AAA7A44, 0x7AAA7944, 0x7AAA7B44, -0x7CAB7D43, 0x7CAB7B44, 0x7EAB8142, 0x80AA8343, 0x83A98143, 0x80A88344, 0x8AA98C41, 0x87AB8542, -0x85AA8842, 0x87AA8542, 0x88AA8B41, 0x8AAA8841, 0x82AA7D42, 0x80A98244, 0x80AA8143, 0x84A88D42, -0x7CAA7B44, 0x7AAA7D44, 0x80AB8441, 0x8EA98742, 0x8CA98642, 0x78AA7C44, 0x8BAA7942, 0x7AAA8043, -0x7FAC7D42, 0x7CAB8242, 0x8DAA8940, 0x88AA8841, 0x88AA8642, 0x83AA8443, 0x81AB8042, 0x7EA98044, -0x84AB7743, 0x7AAB7E43, 0x83AA7D43, 0x7BAB7E43, 0x79AB7744, 0x79AC7B42, 0x80AB8042, 0x7FAC7B41, -0x78AB7C44, 0x7FAA8043, 0x87AB8B40, 0x86AB7842, 0x7BAA7C43, 0x85A98343, 0x81A98843, 0x81A97C44, -0x7AAB7D43, 0x7FAB7A43, 0x80AB8142, 0x80A98A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12265,9 +12762,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x89A7864F, 0x8BA78850, 0x88AA824E, 0x7CAA7E4F, 0x6FA68154, 0x81A57E54, 0x76A86C56, 0x7FAA6D50, +0x6FAC7750, 0x72A87C52, 0x79A96D54, 0x6BAC6E52, 0x70A97653, 0x71A78D53, 0x91A98E4C, 0x7EA65758, +0x57A86959, 0x70AA6F54, 0x6BAA6A55, 0x6AA56F5A, 0x7CA47C56, 0x7AA57855, 0x73A67656, 0x79A77854, +0x78A77B53, 0x81A78151, 0x7EA97352, 0x74AA7153, 0x60AB5557, 0x50AC4C59, 0x4BAD4D58, 0x52AD5F54, +0x6AA97652, 0x7DA38455, 0x78A85356, 0x5CA97855, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12282,16 +12786,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967E61, 0x83AA7D43, 0x7AAA7D44, 0x7DAA8243, 0x81AA7E42, 0x81AA8243, 0x7EAA8543, 0x88A98A42, -0x87A98842, 0x87AA8241, 0x7FAB7F43, 0x7EAB7D43, 0x7CAB7C43, 0x7FAB7F43, 0x7DAB7D43, 0x7DAB7E43, -0x7EAB8142, 0x82AA8342, 0x83A98243, 0x84A88543, 0x88A88942, 0x8CA98D41, 0x89AA8642, 0x83AB8243, -0x81AB8343, 0x84AA8842, 0x8AAA8841, 0x81AB7B43, 0x7EAA8243, 0x81AA8543, 0x85A98543, 0x87A79043, -0x7AAA8044, 0x77AB7E44, 0x7EAB8441, 0x8DAA8B40, 0x89A88843, 0x7DAB7944, 0x87AA7F42, 0x7BAA7D44, -0x85AB7C41, 0x81AA7C42, 0x88AA8E40, 0x8BA98641, 0x87AA8941, 0x86AA8542, 0x81AA7F43, 0x7EAA8143, -0x84A98643, 0x78AB7943, 0x7CAB7F43, 0x80AB7B42, 0x7CAA7D43, 0x7AAA7844, 0x75AB7644, 0x79AB7C43, -0x80AA8143, 0x87AA8A41, 0x87AC7E41, 0x7AAB7B42, 0x7FA97F44, 0x83AA8043, 0x87A98542, 0x7BAA7C45, -0x7DAB8042, 0x80AB7943, 0x7FAB8242, 0x82AA8942, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12308,10 +12802,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00947F69, 0x82A76D54, 0x61AA6A57, 0x68AB6455, 0x62AC7153, 0x77A98851, 0x86A97751, 0x67A66C58, +0x6CA87857, 0x72A97952, 0x70AB6752, 0x6CA67557, 0x72A97553, 0x6CAA7053, 0x7BA67753, 0x69AA5B54, +0x53AB5456, 0x5AAB6255, 0x5CAC6156, 0x5FAC6454, 0x65AA6455, 0x68AA7153, 0x6FAB6E52, 0x67AC6253, +0x63AC6154, 0x5EAC5E56, 0x5AAC5856, 0x53A95C5A, 0x66AA7055, 0x71AA7852, 0x7CA87E52, 0x78AA6852, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12322,16 +12822,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x7CAA7C44, 0x7DAA7B44, 0x7FAA8243, 0x80AA8142, 0x7FAB8143, 0x81AA8542, 0x89AA8741, -0x84AA8442, 0x86A98642, 0x85A98742, 0x87A98442, 0x84AB8542, 0x87AA8841, 0x89AA8741, 0x86AA8841, -0x88A98542, 0x82A88045, 0x84A88743, 0x88A98A41, 0x8BA98B41, 0x86AA8342, 0x80AC7F43, 0x7EAB8043, -0x84AA8842, 0x87AB8441, 0x7EAC7B42, 0x81AA8442, 0x86A98843, 0x8AA98742, 0x85A88C42, 0x90A78643, -0x79A98444, 0x76AA7F44, 0x7FAA8342, 0x87AA8E41, 0x83A98A43, 0x84AA7A42, 0x82A98642, 0x79AA7F44, -0x83AA8042, 0x7EAB7D42, 0x84AA8C41, 0x8EAA8B40, 0x85A98941, 0x89AA8342, 0x89AA7E42, 0x82AA8142, -0x80A98144, 0x87A97A44, 0x7CAB7D42, 0x7EAA8142, 0x7FAB7C42, 0x7DAB8042, 0x7FA97F43, 0x81AA8342, -0x88AB8940, 0x89AB8241, 0x7BAB7E42, 0x80A98143, 0x83A98443, 0x85A98842, 0x87A97D43, 0x79AA7E44, -0x7FAB8142, 0x7EAB7A43, 0x7EAB8242, 0x85AA8742, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12352,9 +12842,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x98A7924D, 0x7DA87553, 0x76A87A53, 0x81A48B52, 0x75A58A54, 0x62A68857, 0x75A87354, 0x67AB8052, +0x72A97553, 0x77AC734F, 0x73A68353, 0x7CA97252, 0x7DAB7051, 0x73AA7C52, 0x76A97254, 0x8AA69550, +0x8DA9874D, 0x78A46258, 0x5CA6655A, 0x6BA76D57, 0x6BAA6C53, 0x69AD6553, 0x67AD6453, 0x63AD6254, +0x64AE6453, 0x5EAE5B54, 0x60AD6553, 0x62AD6452, 0x63AD6351, 0x67AB6A52, 0x75A77D53, 0x7AA47957, +0x7AA66855, 0x56AA6257, 0x79A77B53, 0x64A85758, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12362,16 +12859,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957762, 0x7BAA7C44, 0x7EA98144, 0x82AA8343, 0x7EAA7E43, 0x81AB8142, 0x82AA8342, 0x87AA8842, -0x8BA98B41, 0x8BAA8A41, 0x8AAA8941, 0x87AA8441, 0x83AA8442, 0x83AA8143, 0x83A98442, 0x84A98443, -0x83A98343, 0x86A98941, 0x87AA8841, 0x87AA8542, 0x83AC8241, 0x7FAC7C42, 0x7DAA8243, 0x83AA8342, -0x82AB8042, 0x7FAB8342, 0x87A98842, 0x87A98942, 0x8BAA8941, 0x84A98742, 0x8DA88A42, 0x86AA7F41, -0x77AA8044, 0x76AA7F44, 0x7EAB8242, 0x84A98C41, 0x86AA8542, 0x88AA7C42, 0x7DA98943, 0x7EAA7B43, -0x82AA8542, 0x7CAB8342, 0x7CAA8842, 0x8DAA8A41, 0x88A98542, 0x89A98841, 0x86A98642, 0x7FAB8642, -0x82A98043, 0x82A88644, 0x7EAA7944, 0x7DAB7D43, 0x7AAB8142, 0x84A98442, 0x84AB8641, 0x86AB8741, -0x84AB7F41, 0x7DAB7F43, 0x7EAA8044, 0x82AA8643, 0x84A98842, 0x8AA98642, 0x79AA7845, 0x7DAA7E42, -0x82AA8241, 0x7EAB7B42, 0x80AA8342, 0x83A98643, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12395,23 +12882,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00947F69, 0x86A77653, 0x60AA6457, 0x66AC6954, 0x6BA97954, 0x8AAA7E4F, 0x79A76755, 0x6CA77058, +0x6EAA7753, 0x76AA6952, 0x6EA76B57, 0x72AA6E52, 0x71A97A52, 0x67A95857, 0x56AB6156, 0x5CAB5659, +0x57A7655A, 0x6EA66C57, 0x68A76F57, 0x6DA86F55, 0x75A77255, 0x6FA77357, 0x73A76E56, 0x73A87655, +0x72A97053, 0x6AAC6F52, 0x72AB7651, 0x78AC774F, 0x70AC6751, 0x66AB6954, 0x6FAA7C51, 0x79A98050, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x7EAA8044, 0x83A98443, 0x80AA8342, 0x7FAA8143, 0x7FAA8143, 0x84AB8642, 0x86AA8442, -0x83AA8242, 0x7FAB7E43, 0x7FAA7F43, 0x7EAA7F44, 0x7FAA8143, 0x83AA8343, 0x81AA7F43, 0x81AA8541, -0x86AA8841, 0x86AB8442, 0x84AB8442, 0x82AB8042, 0x7FAB7D42, 0x80AB8242, 0x84AB8341, 0x83AB8541, -0x88A98B41, 0x8FA98F41, 0x8CAA8B40, 0x89AA8641, 0x87A98941, 0x89A88843, 0x84AA7E42, 0x80AC8440, -0x76AA8144, 0x78AA7F44, 0x80AA8241, 0x82AA8642, 0x89AA8142, 0x8AA98142, 0x7DAA8343, 0x88AA7842, -0x7EAA8343, 0x83AA8042, 0x81AB7E42, 0x86AA8A41, 0x88A98343, 0x87A98942, 0x85AA8442, 0x87AA8142, -0x85AB8142, 0x81A98343, 0x86A98543, 0x7DAA7944, 0x7BAB7844, 0x78AB7643, 0x77AB7943, 0x79AB7A43, -0x7AAA7B43, 0x81A98244, 0x85AA8242, 0x83AA8842, 0x87A98842, 0x80AA7B44, 0x7DAA7E43, 0x7AAB8142, -0x84AB8141, 0x7CAB7C43, 0x80AA8342, 0x81A98543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12439,19 +12922,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x85A98543, 0x85AA8343, 0x82AA8142, 0x83AA8342, 0x82AA8043, 0x80AA8143, 0x83AA8243, -0x81AA8143, 0x82AA8242, 0x82AA8142, 0x84AA8341, 0x80AB8042, 0x83AA8641, 0x8AAA8B40, 0x89AA8741, -0x86AB8442, 0x80AC7E42, 0x7DAB7F43, 0x83AA8741, 0x87AB8641, 0x87AB8740, 0x89AA8941, 0x8AAA8941, -0x8AAA8941, 0x88AA8841, 0x89AA8841, 0x87A98A41, 0x89A98242, 0x7EAB7D42, 0x7DAC8041, 0x87A98A41, -0x7AAA8443, 0x79AA7C44, 0x80AA8142, 0x85AA8342, 0x8DAA8142, 0x87A98A42, 0x81AA7D43, 0x88AA7E42, -0x79AB8043, 0x84AA7E43, 0x87AB7D41, 0x7FAA8442, 0x8AA98842, 0x80A98643, 0x84AA8642, 0x86AA8641, -0x84AB8542, 0x80AA8143, 0x85A98243, 0x81AA8143, 0x80AA8043, 0x80A98044, 0x7EAA7D45, 0x7FAA8044, -0x81AA8143, 0x82AA8143, 0x85A98A42, 0x89A98742, 0x81AA7D43, 0x80AA8242, 0x7DAB7D43, 0x81AB7F42, -0x82AB7E41, 0x7CAB7F43, 0x83AA7C43, 0x85A98043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x86A37156, 0x6EA57E57, 0x99A6864F, 0x81A88450, 0x7FA77D53, 0x6AA66858, 0x7CA87454, 0x79A67356, +0x73AD7A4F, 0x6BA87854, 0x76AD6850, 0x6CA78353, 0x8DA88450, 0x76A97453, 0x65AD6352, 0x75A97C52, +0x7AA77F53, 0x84A67F52, 0x82A88950, 0x8DA58052, 0x7EA38056, 0x80A57E55, 0x7DA77554, 0x7AA77854, +0x7FA78352, 0x80A68652, 0x7DA77B52, 0x72A86756, 0x6AA86657, 0x60A95C59, 0x5CAA5B57, 0x60A96A56, +0x77A77C54, 0x75A86855, 0x5BAB5457, 0x63AC7251, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12483,19 +12963,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958661, 0x85AA8241, 0x82AA8142, 0x80AA7F42, 0x7BAB8143, 0x80AB8042, 0x84AB8341, 0x82AB8142, -0x7DAB7E42, 0x7FAC7F41, 0x80AC8041, 0x81AB8441, 0x87AB8940, 0x89AB8940, 0x86AB8241, 0x7DAC7943, -0x78AB7A44, 0x81AB8741, 0x89AB8B3F, 0x89AB8740, 0x84AA8542, 0x87AA8A41, 0x88AA8542, 0x83AA8243, -0x82AA8242, 0x85AA8442, 0x82AA8142, 0x80AB8041, 0x81AB8241, 0x81AA8442, 0x84A88643, 0x85A98042, -0x82AA8143, 0x7CAA7D44, 0x7FAB8042, 0x85AA8341, 0x8CA98741, 0x83A98A42, 0x82AA8142, 0x83A98842, -0x79AB7C44, 0x82AA8242, 0x80AB8841, 0x7FAB7E42, 0x87AA8842, 0x84A98243, 0x88A98442, 0x83AA8742, -0x85AA8441, 0x81AB7F43, 0x7EAA8343, 0x83AA7F44, 0x82A98044, 0x81AA8244, 0x80AA7D44, 0x7EAA8144, -0x82A98344, 0x88A98A43, 0x88A98543, 0x80AA7F43, 0x80AB7D43, 0x7DAB8042, 0x84AB8241, 0x82AB8541, -0x80AC7A42, 0x7AAB8042, 0x7DAA7E43, 0x86A97C43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00937D69, 0x8DA77D52, 0x65AB6255, 0x66AA6955, 0x75A87B53, 0x81A87253, 0x69A77457, 0x7CA97A52, +0x73AA7451, 0x72A77455, 0x71A96C53, 0x75A87652, 0x64A85E59, 0x65AA6057, 0x5EA86E57, 0x80A78351, +0x7AA87454, 0x7BA39155, 0x97A29152, 0x86A48653, 0x83A58853, 0x87A48353, 0x86A48C52, 0x8BA38852, +0x84A27F56, 0x72A56D58, 0x65A86E57, 0x7CA78651, 0x8AA97E4F, 0x74AE6F4F, 0x6BAB6555, 0x79AA7D51, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12522,23 +12998,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x82AA8143, 0x7FAA7F43, 0x7DAB7D43, 0x80AB7E42, 0x7FAC7F41, 0x7EAB7F42, 0x7FAC8141, -0x81AB8242, 0x7FAC8041, 0x82AB8641, 0x87AB8641, 0x82AB8542, 0x82AB7E42, 0x78AB7844, 0x7EAB8442, -0x88AB8B3F, 0x88AB8340, 0x7FAB7D43, 0x7EAA8043, 0x7FAB8042, 0x82AB8341, 0x80AA8142, 0x82AB8142, -0x81AB8042, 0x82AA8142, 0x83A98742, 0x8AA88943, 0x88A88743, 0x83A97F44, 0x7FAB8342, 0x86AB8541, -0x80AB7C44, 0x7DAA7C44, 0x80AA8142, 0x83AA8141, 0x86A98C42, 0x81A98842, 0x86AA8441, 0x82A98A42, -0x83AB7A42, 0x7CAB8142, 0x7EAB8642, 0x86AB8041, 0x7FA98743, 0x87A98743, 0x83A98843, 0x84AA8342, -0x86AA8342, 0x85AA7E43, 0x7BAB7A44, 0x7CAA7F44, 0x84AA8542, 0x84A98642, 0x85A98543, 0x86A98743, -0x88A98842, 0x85AA8242, 0x80AB7E43, 0x7DAB7D43, 0x7FAA8642, 0x87AA8741, 0x84AB8541, 0x84AB8041, -0x7DAB7B43, 0x80AA7F43, 0x7CAA8543, 0x7FAA7E43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x77A66756, 0x6FA77C53, 0x6BA56E59, 0x6DA76F58, 0x7FA68152, 0x75A67955, 0x6DA77B55, 0x6CAA6956, +0x79A67955, 0x78AC7850, 0x6FA87455, 0x7BAA7751, 0x62AB6B54, 0x82A79050, 0x8BA68052, 0x79AA7451, +0x67AC6652, 0x6AAA7053, 0x75A77854, 0x74A77255, 0x74A77255, 0x77A57B55, 0x77A67256, 0x6CA76C57, +0x6FA86B56, 0x69A96457, 0x61A96557, 0x63A86258, 0x66AB6655, 0x64AD6853, 0x6BAA6454, 0x61AA6656, +0x66AB6255, 0x62AD6C51, 0x76AB784F, 0x77A67B54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12562,16 +13035,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957B62, 0x7CA97D45, 0x7EA97F44, 0x7EAB7C43, 0x7CAB7D42, 0x7CAC7D41, 0x7EAC8141, 0x84AB8441, -0x84AB8441, 0x85AC8541, 0x83AB7F42, 0x80AB8043, 0x7EAB7E44, 0x7EAB8642, 0x89AA8941, 0x84AB7E42, -0x7BAB7D43, 0x7DAA7E44, 0x80AA8442, 0x86AA8741, 0x87AB8541, 0x82AB8242, 0x81AA8144, 0x83A98642, -0x8AA98A41, 0x8AA98941, 0x8BA98B41, 0x8BA98941, 0x87AA8641, 0x83AB8142, 0x81AC8042, 0x7DAC7B43, -0x7FAA7E44, 0x7BAA8044, 0x82AA8142, 0x84AA8342, 0x81A98C42, 0x87AA8542, 0x88AA8341, 0x82AB8442, -0x86AA7C42, 0x7BAB7B43, 0x83AA8043, 0x88AB8740, 0x81AA7E43, 0x87A98643, 0x86A88443, 0x86A98542, -0x81AA8443, 0x84A98642, 0x85A98043, 0x7BAA7845, 0x77AA7C44, 0x7FAA8243, 0x83AA8343, 0x83AA8242, -0x81AB7F43, 0x7CAA7C44, 0x7BAA7A45, 0x82AA8442, 0x89AA8941, 0x87AA8741, 0x86AB8141, 0x7FAA7F43, -0x7EAB8042, 0x7FAA7A44, 0x82AA8042, 0x7BAA8043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12579,10 +13042,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00948369, 0x85A97751, 0x69AB5C56, 0x73A96656, 0x72A98353, 0x73A96255, 0x79A87B54, 0x73AA7C51, +0x6EA87054, 0x6AA96C54, 0x6FA87254, 0x62A75B5A, 0x69A95F58, 0x61A86B56, 0x7FA76F55, 0x73A48955, +0x7CA66955, 0x67AA6753, 0x5FAB5E56, 0x61AA5F56, 0x61AA6556, 0x66AA6755, 0x68AB5E55, 0x6BA87955, +0x74A66C56, 0x6BA57D56, 0x87A37C55, 0x69A46E5A, 0x6FA98251, 0x7DAC704F, 0x74AC6552, 0x6EAA7653, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12602,16 +13071,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947F62, 0x81A98244, 0x7EAA7E44, 0x7FAA7D43, 0x7DAB7A43, 0x7CAC7C41, 0x82AB8242, 0x83AB8641, -0x87AB8641, 0x81AB8042, 0x82AA8043, 0x80AA8144, 0x83AA8742, 0x89AA8241, 0x7CAB7A43, 0x79AA7A44, -0x7DAA8243, 0x83AA8342, 0x82AA8043, 0x82AA8442, 0x86AA8442, 0x86AA8442, 0x85AA8641, 0x87AA8641, -0x82AB8342, 0x82AB8242, 0x82AB7F42, 0x7CAC7A42, 0x79AD7A42, 0x78AD7842, 0x77AD7842, 0x77AD7842, -0x80AA7945, 0x7CA98343, 0x82A98243, 0x83AA8741, 0x87A88C42, 0x8DAA8341, 0x89AA8441, 0x85AB8141, -0x86AA8342, 0x7BAA7C44, 0x81AB8242, 0x81AA8C42, 0x88AB8041, 0x80A88544, 0x87A98542, 0x84A88A43, -0x89A98043, 0x7FAA8643, 0x86A98642, 0x86A98243, 0x80A97E45, 0x7EA97E45, 0x7DA97B45, 0x7CA97F45, -0x81A98044, 0x81A98243, 0x84A98643, 0x87A98742, 0x86AA8242, 0x83AB8342, 0x83AA7F43, 0x7EAA8342, -0x84AA7D43, 0x7AAA8244, 0x7FAA7D43, 0x80A98743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12623,9 +13082,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x72A88555, 0x81A77353, 0x6BA68554, 0x74A57756, 0x71A67557, 0x6EA86757, 0x79A76F55, 0x70A77B55, +0x7BA86B55, 0x77A68054, 0x73A97A52, 0x7EA97152, 0x78A77355, 0x6CAB6A53, 0x67AB7852, 0x8DA69050, +0x8DA68751, 0x7AA77B53, 0x77A97153, 0x6DAA6A54, 0x64AA6355, 0x61AB5D55, 0x5AAC5955, 0x5BAC6054, +0x63AD6552, 0x63AE5C53, 0x58AB5E57, 0x63A96457, 0x5EA95C58, 0x5BAA5759, 0x5BAC6354, 0x6EAD714F, +0x6FAD6F4F, 0x78A58054, 0x82A38156, 0x7DA76E56, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12642,16 +13108,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958561, 0x84AA8443, 0x84A97E43, 0x7EAB7B43, 0x7EAB7C42, 0x7CAB8241, 0x82AB8442, 0x87AA8841, -0x82AB7E42, 0x81AA7E43, 0x80A98444, 0x83AA8642, 0x82AB7D42, 0x7DAB7D43, 0x7EAA8042, 0x83A98542, -0x82AA7B43, 0x7CAB7D43, 0x7FAB8241, 0x84AB8342, 0x81AA8242, 0x81AA7F43, 0x7FAA7F44, 0x80AA7F44, -0x81AA8144, 0x85AA8643, 0x87A98942, 0x88AA8742, 0x88AA8B41, 0x8AAA8B41, 0x88AA8941, 0x87AB8441, -0x7DA97F44, 0x81A97E43, 0x84A98342, 0x85AA8741, 0x85A98742, 0x8BA98642, 0x88AA8341, 0x84AB8441, -0x82AA8742, 0x81AB7B43, 0x7FAB8242, 0x83A98142, 0x8BAA8A40, 0x83AA7E43, 0x83A98643, 0x87A88343, -0x86A88B43, 0x86A97A44, 0x7CAA8144, 0x81A98044, 0x83A88744, 0x88A88543, 0x83A98143, 0x83A98243, -0x83A98543, 0x84A98643, 0x85A98643, 0x86AA8342, 0x82AA7F43, 0x7EAA7F44, 0x82AA8542, 0x85AB8142, -0x7DAA7B44, 0x7FAB7F43, 0x7DAA8043, 0x83A88743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12666,10 +13122,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00948169, 0x6DAA6854, 0x6AAA5E57, 0x68A77656, 0x7AA97B52, 0x68A77556, 0x76AA7353, 0x77AA6D52, +0x67A96A56, 0x68A97A53, 0x6DA85B57, 0x5CA97157, 0x60A76059, 0x7FA77A53, 0x76A57556, 0x70A96553, +0x5DAA6856, 0x6CAA6755, 0x67AB6A54, 0x6DAC6551, 0x65AC6752, 0x6CAB6B52, 0x73AA7752, 0x6DA96A55, +0x66AC5D55, 0x66AA8153, 0x75A77355, 0x82A56656, 0x6CA87655, 0x7DAA7C50, 0x68AD6951, 0x77AA7553, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12682,16 +13144,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x7EAB8142, 0x84AA7E44, 0x7DAB7B43, 0x7CAC7942, 0x80AB8242, 0x84AA8642, 0x88AA7F42, -0x82AA7F43, 0x7EA98144, 0x82AA8543, 0x80AB7A43, 0x7CAB7F43, 0x7FAB8142, 0x81A97F43, 0x7DAB7E43, -0x7FAC7E42, 0x7EAB7F42, 0x81AA8143, 0x81AA8343, 0x82AA8343, 0x81AB8043, 0x81AB8242, 0x84AC8541, -0x88AB8841, 0x87AA8941, 0x87AA8941, 0x89AA8941, 0x88AA8A41, 0x8AAA8B42, 0x8CA98D41, 0x8EA89041, -0x80AA7F42, 0x7EA98044, 0x7DAB8243, 0x84AA8A41, 0x84A98143, 0x8BA98941, 0x81AA8942, 0x84AB8242, -0x82AA8441, 0x89AA7F42, 0x7EAB8043, 0x82AA8342, 0x83AA8E41, 0x8AAB8540, 0x7FA98044, 0x87A98742, -0x82A98143, 0x85A88544, 0x80AA7944, 0x76AA7945, 0x7BAA7F45, 0x81A98044, 0x82A88245, 0x82A98244, -0x82A98443, 0x83A98244, 0x81A98144, 0x80AA7E44, 0x80AA8043, 0x84AA8741, 0x86AB8342, 0x7EAB7B43, -0x7BAB7C44, 0x7BAB7E43, 0x80A88743, 0x88A97B43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12710,9 +13162,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8BA78152, 0x72AA8C52, 0x84A66C55, 0x81A68552, 0x74A76E57, 0x6BA77257, 0x72A97255, 0x6AA96C56, +0x7BA68554, 0x7FA78253, 0x69A85C59, 0x6CA76B57, 0x6EAA7A50, 0x7AA87653, 0x72A77156, 0x79AA7853, +0x6DAA6455, 0x6DA67756, 0x80A78252, 0x7AA97A52, 0x7AA87753, 0x72A77056, 0x6FA77056, 0x6CA86957, +0x65A96657, 0x66AA6656, 0x64AC6254, 0x69AD6952, 0x70AC7251, 0x74AB7152, 0x76A77953, 0x7AA57854, +0x79A58154, 0x7FA67155, 0x6AA77657, 0x70AB6D54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12722,16 +13181,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958361, 0x7FAB7F42, 0x81A98343, 0x7DAB7A43, 0x7CAC7942, 0x82AB8442, 0x88AA8A41, 0x81AA8043, -0x7DA98044, 0x82A98144, 0x80AA8043, 0x7DAB7B43, 0x7CAB7F43, 0x83A98043, 0x7FAA8143, 0x7EAB7B42, -0x7FA98542, 0x87A98343, 0x81AA8142, 0x7DAB7C42, 0x79AC7743, 0x76AC7543, 0x74AC7643, 0x77AD7843, -0x7AAC7A42, 0x79AC7A42, 0x7DAC7E42, 0x7FAC7F41, 0x7EAB7C42, 0x7FAA8442, 0x86AA8942, 0x87A98D41, -0x76AB7644, 0x79AC7C43, 0x81AB8442, 0x84AA8641, 0x81A98143, 0x8CA98942, 0x80AA8843, 0x84AB8042, -0x84AB8041, 0x87A98741, 0x81AA8043, 0x7EAB8142, 0x83A98243, 0x8DA98C40, 0x86A97F42, 0x79A98344, -0x84AA8342, 0x81A98144, 0x82A88445, 0x83A97C44, 0x79AA7A44, 0x78A97A45, 0x7CA97F45, 0x82A98344, -0x82A98044, 0x7EA97D45, 0x7EA97F44, 0x81AA8642, 0x87AA8841, 0x87AA8141, 0x7CAB7644, 0x75AB7544, -0x79AC7B43, 0x7EAA8342, 0x88A78843, 0x76AA7A44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12753,25 +13202,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094776A, 0x71A97154, 0x60A97157, 0x6AA67E55, 0x7EA77B52, 0x64A87855, 0x7AAA7551, 0x77AA6653, +0x62AA5D56, 0x72A77C54, 0x63A85D5A, 0x78A75C57, 0x63A87955, 0x79A67355, 0x6AAA6952, 0x66AA6C54, +0x63AB6A54, 0x78A96E52, 0x73A97354, 0x7AAB7550, 0x74AB7450, 0x74A96A54, 0x71AA7652, 0x72AC6750, +0x76AA6353, 0x66AD5E55, 0x74A77F53, 0x75A68154, 0x69A67258, 0x7DA88250, 0x6BAC6A52, 0x88A97D50, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958561, 0x80AA7E44, 0x7CAA8143, 0x7CAB7C43, 0x7BAC7F42, 0x83AA8642, 0x8DAB8441, 0x81A97C44, -0x80A98045, 0x84AA7F43, 0x81AB7F43, 0x7CAA7C44, 0x7FAA8144, 0x84AA8243, 0x81AA8142, 0x84A98543, -0x81AA7D43, 0x7AAB7643, 0x74AB7644, 0x76AB7644, 0x76AB7444, 0x77AB7944, 0x78AB7B44, 0x7BAA7B44, -0x7CAA7C44, 0x80AA7F43, 0x80AB8143, 0x82AA8442, 0x84AA8442, 0x85AA8342, 0x82AB8042, 0x7EAA8643, -0x8BA98A41, 0x8CA98B41, 0x8BAA8940, 0x86AA8741, 0x81A98842, 0x88A88742, 0x84A97F43, 0x87AB8041, -0x81AB8441, 0x82A98642, 0x85AA8042, 0x7FAB8142, 0x82AA8442, 0x81A98D42, 0x8FAA8D3F, 0x87A97744, -0x77AA7E45, 0x81AB8143, 0x7FAA7F43, 0x7FA88145, 0x86A88643, 0x86A98443, 0x83A98443, 0x85A98543, -0x85A98542, 0x88AA8842, 0x87AA8342, 0x83AA8243, 0x7BAB7644, 0x74AC7344, 0x73AC7444, 0x75AC7A43, -0x7FAA8442, 0x87A88943, 0x84A97543, 0x79AA8443, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12797,21 +13242,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5EA98754, 0x7BA67057, 0x84A97F4F, 0x68A67956, 0x75A67357, 0x6BA87B54, 0x79AA7552, 0x7AAB7552, +0x77AC7253, 0x6EAD6453, 0x6EA87455, 0x7CA77953, 0x72A66E58, 0x71A77A54, 0x77AA7551, 0x79A97752, +0x70A87255, 0x70A97255, 0x7BA98652, 0x84A98151, 0x7EA87853, 0x77A87755, 0x77A87A55, 0x77A87654, +0x78A87A54, 0x7BA87D53, 0x84A88A51, 0x87A88450, 0x82A78251, 0x7EA67754, 0x6FA86856, 0x5EAB6555, +0x6CA97154, 0x6FAA6D54, 0x72A97753, 0x6BA87955, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958761, 0x88A98042, 0x7CAA7F44, 0x7EAB7C43, 0x7CAB8242, 0x84AA8B41, 0x8AAA8441, 0x7EA98044, -0x80A98544, 0x82AA8542, 0x81AB7E42, 0x80A98344, 0x82AA8342, 0x80AA8142, 0x86A98442, 0x7FAA7943, -0x76AB7643, 0x79AB7C44, 0x79AB7B43, 0x7AAB7C43, 0x7DAB7D43, 0x7EAB8242, 0x81AB8142, 0x7EAB7B43, -0x7CAB7B43, 0x7AAB7A43, 0x79AB7843, 0x76AA7945, 0x7DAA8143, 0x82AA8442, 0x86A98741, 0x85AA7E42, -0x7FAB8442, 0x86AA8741, 0x87AA8641, 0x87AA8941, 0x81A88943, 0x80A98944, 0x85AA7B43, 0x84AB8641, -0x82AA8442, 0x84AB8341, 0x88A98642, 0x7EAB8542, 0x81AB8341, 0x86A98442, 0x8AA99041, 0x8DAA8B40, -0x81A87545, 0x79A97C45, 0x7EAA7E43, 0x7FAA7E43, 0x7CAA7D45, 0x7EAA7F45, 0x80A98243, 0x80AA7E44, -0x80AA8243, 0x81AA7F43, 0x7CAB7943, 0x78AC7644, 0x76AB7644, 0x79AC7843, 0x79AC7C42, 0x7FAA8042, -0x84A88944, 0x89A97E42, 0x76AA7D44, 0x84A98143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12840,20 +13282,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957269, 0x70A97054, 0x63A96658, 0x71A78653, 0x75A86A54, 0x69A98154, 0x77AA7751, 0x6EAB6953, +0x60AA7154, 0x80A66955, 0x53A97958, 0x5AA75E5B, 0x74A87A53, 0x76A76E54, 0x5DAB6454, 0x77A95C55, +0x74AA7652, 0x69A96D55, 0x5FA95159, 0x59A95959, 0x58AA6156, 0x6DAB7052, 0x6BA96D54, 0x74AB7350, +0x60AA7353, 0x5EAA6356, 0x63AA8353, 0x76A67156, 0x72A66F57, 0x81A97950, 0x69AB7153, 0x79AB6C51, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958661, 0x8BA98242, 0x7DAA7E44, 0x7DAB7E43, 0x7CAA8543, 0x85AA8C41, 0x86A97F42, 0x80A97D45, -0x80AA8143, 0x83AB8042, 0x7EAA7E43, 0x7FAA8144, 0x82AB8042, 0x85A98342, 0x7AAA7544, 0x78AB7A44, -0x7BAB7944, 0x79AA7C44, 0x81A98243, 0x85A98543, 0x84A98443, 0x85A98443, 0x84A98342, 0x83A98542, -0x82AA8042, 0x7FAB8142, 0x82AB8142, 0x7BAC7942, 0x79AB7C44, 0x7DAB8242, 0x86AA8741, 0x86AA8241, -0x91A98F40, 0x86AA8342, 0x84AA8542, 0x88A98C42, 0x83A88C43, 0x7CA98B44, 0x83A98243, 0x7EAB8742, -0x82AA8342, 0x84AB8341, 0x83A98942, 0x86AA8242, 0x86AB8142, 0x82AA8642, 0x84AA8243, 0x8CA99041, -0x8DAA8B40, 0x85A87C44, 0x79A97D45, 0x7FA98043, 0x7FAB8042, 0x7FAB7D42, 0x7EAC7D42, 0x7CAC7C42, -0x7CAC7C42, 0x7AAC7942, 0x7BAC7D42, 0x7CAC7D42, 0x7CAC7C42, 0x7EAB7F42, 0x83A98642, 0x85A88544, -0x85A97E43, 0x77AA7B44, 0x85A98642, 0x7CAA7745, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12882,21 +13320,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958761, 0x8AAA8442, 0x7BAB7C44, 0x7DAB7F43, 0x7FAA8543, 0x8BAA8741, 0x85A97D43, 0x80A98144, -0x81AA8442, 0x84AA7F42, 0x80A98044, 0x82AA8042, 0x81AA8542, 0x7DAA7844, 0x77AB7C44, 0x79AB7744, -0x77A97D45, 0x80A98044, 0x7EA98144, 0x80AA8143, 0x83A98243, 0x81A98244, 0x82A98044, 0x83AA8443, -0x82AA8142, 0x7FAB8142, 0x82AB8441, 0x84AB8441, 0x81AB7E42, 0x7DAB7F43, 0x81AB8642, 0x85AA8841, -0x8AA88C42, 0x92A98C40, 0x89A98941, 0x88A88642, 0x87A98B42, 0x7DA98844, 0x83AA8443, 0x80AA8144, -0x87AB8141, 0x83AA8242, 0x80AB8142, 0x89A98941, 0x86AA8542, 0x83AC8041, 0x83AA8443, 0x82AA8642, -0x8CA98D41, 0x8DAA8C40, 0x88A98043, 0x7FA88144, 0x81A97F44, 0x7FAA7D43, 0x7DAB7A43, 0x7AAB7A43, -0x7BAB7B43, 0x7BAB7E42, 0x82AA8541, 0x84AA8442, 0x84AA8442, 0x85A98343, 0x85A98143, 0x7FA97C44, -0x78AA7D43, 0x86AA8742, 0x84A97C43, 0x75AB7B43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x64A96456, 0x85A67954, 0x79AA8351, 0x74A95D54, 0x7BA77355, 0x6BAA7653, 0x67AB6A55, 0x7AAD7D4F, +0x81AD804F, 0x79AE6C50, 0x66AD6053, 0x62AE6253, 0x62AC6554, 0x77A78553, 0x89A48653, 0x79A57357, +0x6DA86E55, 0x72A87953, 0x81A88051, 0x7EA98051, 0x78A97452, 0x70A97054, 0x74A97254, 0x72A97453, +0x72A87754, 0x78A77E54, 0x7CA87553, 0x72AA7651, 0x76AB7A50, 0x7AA77B54, 0x7DA87255, 0x6DAB7054, +0x71A87154, 0x75A87454, 0x78A88C52, 0x92A58352, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12922,25 +13357,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958661, 0x8BA98641, 0x7BAB7B43, 0x7DAB7D43, 0x82AA8542, 0x8CAA8341, 0x7FA98344, 0x83A98343, -0x84AA8441, 0x80AA8342, 0x83A98343, 0x7FAA8142, 0x81AA7B43, 0x77AA7B44, 0x7CAB7844, 0x7AA97F44, -0x85A98542, 0x86AA8043, 0x82A98044, 0x83A88744, 0x88A78744, 0x86A88344, 0x81A88045, 0x7FA88045, -0x7FAA8043, 0x82AA8543, 0x86A98A41, 0x87AA8842, 0x85AB8141, 0x81AC7B42, 0x7CAB8243, 0x84AB8741, -0x8AA88244, 0x81A88744, 0x92A88A41, 0x88A98A41, 0x87A98742, 0x7FA97E45, 0x87AA8343, 0x85A98243, -0x82AC8541, 0x7FAA8543, 0x84AB7F41, 0x80A98942, 0x8DAA8A40, 0x84AA8342, 0x7DAC7C42, 0x83AA8642, -0x86A98742, 0x89A98742, 0x89A98B41, 0x8DA88842, 0x87A88844, 0x88A88643, 0x86A98342, 0x86A98543, -0x87A98942, 0x88A98A42, 0x86A98542, 0x82AA7D43, 0x7FAA7E44, 0x7BAA7945, 0x79AA7944, 0x7BAA7F43, -0x84A98642, 0x84AA7E43, 0x79AB7644, 0x7CAB8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957968, 0x73AA6355, 0x67A76958, 0x80A87A52, 0x6DAA6555, 0x71A88053, 0x79AB7B4E, 0x6AAC6253, +0x5CAB7553, 0x77A65459, 0x61A96A57, 0x56A66C59, 0x79A86C54, 0x6EAA6A52, 0x5EAA6F55, 0x5CA96257, +0x83AC5D52, 0x69AA5F55, 0x62A85E59, 0x67A7575B, 0x60AA5A57, 0x6CA96C54, 0x67AB6B52, 0x76A96952, +0x6AA96C54, 0x64AC6054, 0x75A77A54, 0x71A76957, 0x6BA57458, 0x77AB804F, 0x61A98A53, 0x6EAB7652, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12962,16 +13393,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x8DA98641, 0x7DAB7C43, 0x7DAA7E43, 0x83AA8642, 0x88AA8242, 0x7EA98344, 0x86AA8542, -0x82AA8342, 0x82AA8343, 0x82AA7F42, 0x83AA8342, 0x7DA97A44, 0x7DAA7B44, 0x7AA98044, 0x88A98941, -0x85AA8342, 0x86A88E43, 0x91A78E42, 0x8AA88A43, 0x89A88B43, 0x8AA88943, 0x8AA88C42, 0x8CA88B42, -0x89A78743, 0x82A88045, 0x7DAA8044, 0x86AA8A42, 0x8CAA8741, 0x83AC8141, 0x7FAB7D43, 0x85AA8741, -0x80A98843, 0x87A87F44, 0x81A98544, 0x88A98842, 0x86A98742, 0x82A97E44, 0x88A98743, 0x80A98543, -0x81AA8642, 0x84AB7F42, 0x84AA8442, 0x82AB7D42, 0x86A98F41, 0x8DA98842, 0x85AA8042, 0x7BAB7E42, -0x82AA8441, 0x83A98243, 0x82A98643, 0x86A98842, 0x8AA98941, 0x8AA98842, 0x86A98543, 0x83A98143, -0x80AA7D44, 0x7CAB7A44, 0x7AAA7A45, 0x7BAA7C45, 0x7CAA7C44, 0x7BAA7C44, 0x7EAA8143, 0x84AA8242, -0x80AA7D43, 0x7CAB7A43, 0x7CAC8041, 0x82AA7F42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -12981,9 +13402,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x77A76655, 0x7BA68454, 0x78A88C52, 0x88A86153, 0x77A67356, 0x75A97153, 0x64AB7E53, 0x7CA77954, +0x70A66F57, 0x78A87355, 0x77A77655, 0x74A57159, 0x6CA57459, 0x79A87753, 0x6DAC6852, 0x60AC6154, +0x64A96A56, 0x78A78354, 0x85A48255, 0x7AA57157, 0x6EA67357, 0x6FA67256, 0x72A66C55, 0x69A86C55, +0x6CA96856, 0x6FA77D56, 0x78A77857, 0x73A86D56, 0x69AB6B54, 0x6FA97253, 0x7CA77C54, 0x7BA77B55, +0x7AA98B50, 0x94A88D4E, 0x73A96554, 0x7DA68552, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13002,16 +13430,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958861, 0x8CA98642, 0x7EAB7B43, 0x81AA7E43, 0x83AA8842, 0x84AA7E43, 0x83A98243, 0x87AA8441, -0x82AA8142, 0x84A98143, 0x7EAA8243, 0x81A97C44, 0x7AAA7E44, 0x7BAA7D44, 0x82A98942, 0x85A98243, -0x8BA79342, 0x8DA88342, 0x82AA8142, 0x81AB8042, 0x7FAB7D43, 0x80AA8342, 0x85A98542, 0x84A88343, -0x85A88B42, 0x8DA78A43, 0x83A87B45, 0x7EA98443, 0x89AA8941, 0x84AC8240, 0x81AB7C43, 0x82AB8542, -0x84A97E43, 0x81AA8642, 0x7FA88044, 0x80A98144, 0x87A98842, 0x83A98543, 0x80A98643, 0x7FAA7E44, -0x85A98543, 0x84AB8541, 0x81AA8343, 0x86AA8442, 0x7BAB7F43, 0x89A98E41, 0x8CA98842, 0x84AB8242, -0x7EAB7D42, 0x7FAA8142, 0x83A98542, 0x83A98243, 0x83A98243, 0x84A98643, 0x84A98243, 0x80A98044, -0x81A97F44, 0x7EAA7C44, 0x7BAA7D44, 0x7CAA7C44, 0x7DAA7D43, 0x7DAC7E42, 0x7FAA7C43, 0x7BAA7D43, -0x7DAB7C43, 0x7CAB7F42, 0x84AB8541, 0x84A88643, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13024,10 +13442,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094726A, 0x69A76258, 0x69A97C53, 0x7FA96F52, 0x5FAA6356, 0x7CA97652, 0x7BAB804E, 0x68AC5C53, +0x5CAA7954, 0x6CA6495C, 0x6DA86A56, 0x5DA67957, 0x79A96F53, 0x67AA6554, 0x63A97355, 0x5DA95F59, +0x7DAC6651, 0x68AB6354, 0x6BA96156, 0x5FA96258, 0x5FAA7652, 0x65AB5656, 0x72AA7851, 0x77A77353, +0x74A97253, 0x65AB7B52, 0x74A56C57, 0x70A77555, 0x65A67258, 0x7DAB6951, 0x81AC7850, 0x65A88354, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13042,16 +13466,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958961, 0x8AAA8442, 0x7EAB7944, 0x83AA7D43, 0x82AA8942, 0x83AA7B43, 0x85A98643, 0x83AB8641, -0x80A98143, 0x7FAA8043, 0x81AA8243, 0x7CA97945, 0x7FAA7A44, 0x7CAA7F44, 0x87A98143, 0x83A88C43, -0x86A97F43, 0x7EAB7E42, 0x7BAB7A44, 0x7BAA7B44, 0x7CAB7D43, 0x7DAA7D43, 0x7EAB7A43, 0x7FAA8543, -0x83A98043, 0x7FA88643, 0x8AA88643, 0x7EA88045, 0x81AA8941, 0x87AB8141, 0x83AB7D42, 0x80AA8442, -0x8BAB8740, 0x80A98344, 0x8BA88542, 0x83A98444, 0x83A98643, 0x86A98143, 0x84A88044, 0x85AA8143, -0x7FAA8643, 0x86AA8442, 0x86AA8242, 0x84A98742, 0x83AB7D42, 0x7DAA8442, 0x8EA99040, 0x8AA98842, -0x86AA8342, 0x81AB8142, 0x7CAB7C43, 0x7EAB8042, 0x82AB8142, 0x82AA8243, 0x81AA7F43, 0x7CAA7C45, -0x7EAA7F44, 0x7CAA7A44, 0x7CAB7A43, 0x7AAB7B42, 0x7CAC7B42, 0x78AB7943, 0x7AAA7D44, 0x7DAB7B43, -0x7DAC8041, 0x85AB8340, 0x87A98742, 0x87A88543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13068,9 +13482,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x83A67153, 0x7DA77D54, 0x6DA88355, 0x82A86E51, 0x6FA66D57, 0x74AA5D54, 0x6FAA7A54, 0x75A66F57, +0x6BAA7054, 0x79AA7951, 0x81A88450, 0x80A88350, 0x75A97352, 0x6FA97353, 0x6FA97253, 0x6DA96A56, +0x68A96958, 0x6CA96E56, 0x73A87255, 0x76A77356, 0x78A87653, 0x78A97652, 0x75A97353, 0x70AA6B53, +0x69AC6951, 0x69AC6F51, 0x73AA7352, 0x71AA7354, 0x73AB7A53, 0x79AA7851, 0x81A9904F, 0x95A7854F, +0x78A96055, 0x6BA78453, 0x86A68552, 0x77A77153, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13082,16 +13503,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958761, 0x85AA8142, 0x7EAA7944, 0x7FAA8044, 0x83AA8642, 0x82A98043, 0x83AA8543, 0x81AA8442, -0x7EAA8243, 0x7EAA7F43, 0x83A97E43, 0x79AA7E45, 0x7EA97944, 0x7FAA8543, 0x85A98743, 0x88A97F43, -0x7CAA7E42, 0x7DAA7E44, 0x7DAA7A43, 0x78AB7D43, 0x7EAB7E43, 0x7DAB7C43, 0x7AAB7E44, 0x7FAB7A43, -0x7AAA8543, 0x86A98642, 0x81A98743, 0x87A87C45, 0x82AA8642, 0x88AA8441, 0x80AB7F42, 0x80AB8342, -0x82A98A43, 0x88A98342, 0x7FA98A42, 0x83A88444, 0x82A98344, 0x81AA7E44, 0x85A98143, 0x81A98543, -0x86A97F43, 0x84A98843, 0x83AA8542, 0x87AA8242, 0x85A98343, 0x7FAB7F42, 0x7EAB8442, 0x8DA98E41, -0x8DA98A41, 0x85A98642, 0x84AA8242, 0x80AB7F43, 0x7DAB7C43, 0x7BAB7A43, 0x78AB7843, 0x79AB7B42, -0x7CAC7D42, 0x7CAC7A42, 0x78AB7A44, 0x7CAA7C44, 0x7AAA7945, 0x79AB7744, 0x79AB7C43, 0x81AC8241, -0x81AC8141, 0x84A98843, 0x89A78843, 0x87A98143, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13111,10 +13522,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946F6A, 0x61A76859, 0x7CA78651, 0x68AA6A54, 0x63AA6057, 0x7AAA6B52, 0x83AB7350, 0x66AC5355, +0x5CA98354, 0x71A75259, 0x6BA86E55, 0x62A77357, 0x7BAA6D51, 0x61A86A56, 0x5CAA7654, 0x68A96756, +0x6AA97853, 0x6CAC6952, 0x67AE6451, 0x66AC6753, 0x58AB6356, 0x79A97951, 0x75A77C53, 0x7DA87A51, +0x71AC7450, 0x7FA86156, 0x6CA87C55, 0x78A55E59, 0x6FA98352, 0x69AA7C53, 0x7BAC6851, 0x83A76554, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13122,16 +13539,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958861, 0x80AB7E43, 0x7FAB7A44, 0x7EA98344, 0x85AA8642, 0x7EA98343, 0x83AB8242, 0x84AB8042, -0x7DAA7F43, 0x7EAA8542, 0x80A97944, 0x79AA8144, 0x7BAA7B45, 0x87A98542, 0x83A88343, 0x81AA7D42, -0x7AAA7E44, 0x80AA7D43, 0x7EAB7F43, 0x80AB7D42, 0x7DAB7E42, 0x80AB8042, 0x82AA8442, 0x80AA7F43, -0x7DAB7A43, 0x7DAA8842, 0x84A98343, 0x88A97D43, 0x80A98343, 0x86AA8641, 0x7EAC7F41, 0x84AA8342, -0x89A88044, 0x88AA8B41, 0x81A88443, 0x8DA88342, 0x82A98144, 0x7FA98144, 0x82AA8144, 0x88A98642, -0x87A98A42, 0x82AA7D43, 0x83A98244, 0x82AA8641, 0x84AA8143, 0x85A98243, 0x82AB7E43, 0x7DAB8242, -0x8AA98D42, 0x8EA98B41, 0x8CA98941, 0x89A98842, 0x87A98243, 0x82A98045, 0x80A98144, 0x7FAA8243, -0x84AA8543, 0x84A98143, 0x7FA97C45, 0x7CAA7C44, 0x7AAB7A43, 0x7FAB8341, 0x82AB8441, 0x80AB8142, -0x84A88343, 0x82A88744, 0x88A98243, 0x83A98443, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13155,23 +13562,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8CA47953, 0x75A77D53, 0x6FA77A55, 0x7EA97151, 0x6EA76D57, 0x75AB6154, 0x79A86955, 0x6BA96D55, +0x7FA88850, 0x89A67F52, 0x74A86857, 0x60AB5B58, 0x5CAB6157, 0x5CAB5D58, 0x5DAB5C58, 0x58AB5658, +0x5BA95A59, 0x5EA96457, 0x62AB6455, 0x6CAC6E51, 0x66AD6653, 0x6AAC7052, 0x70AC7352, 0x6FAA7254, +0x70A97954, 0x7BA97B52, 0x76AB7B50, 0x82A9934E, 0x99A6914E, 0x84A77353, 0x62A95358, 0x62A97E54, +0x86A58352, 0x83A77A53, 0x6BAB6D52, 0x67AC5F53, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958861, 0x80AA8143, 0x7CAA7F44, 0x7EA98543, 0x87A98842, 0x7BA98244, 0x86AA8142, 0x85AB7E42, -0x7DAA7B43, 0x7FAA8742, 0x7EA97845, 0x81AA7E44, 0x7BAA7F44, 0x88A98443, 0x82A97F43, 0x7EAB7A42, -0x7FAB7E43, 0x7DAB8342, 0x83AA8542, 0x85A98443, 0x84A98143, 0x7EAB8143, 0x82AB8541, 0x80AB8242, -0x7DAB7C43, 0x7BAC7E43, 0x86A98643, 0x86A98443, 0x7EA98344, 0x84AA8941, 0x7FAC7F42, 0x87AA8642, -0x8CA98841, 0x82AA8C42, 0x89A97F43, 0x88A98A42, 0x83A98144, 0x7FA98244, 0x82AA8243, 0x7FAA7F44, -0x86A98943, 0x87A98842, 0x7FAA7944, 0x80A97F44, 0x81AA8541, 0x85AA8442, 0x82A98144, 0x85AA8442, -0x80AA7D43, 0x80A98443, 0x87A98842, 0x85AA8542, 0x85A98542, 0x82A98143, 0x81A98144, 0x80AA7E44, -0x7DAA7D44, 0x7DAA7D44, 0x7DAB7B43, 0x7EAC7F41, 0x81AB8242, 0x83AB8242, 0x83AA8542, 0x85A98443, -0x85A88843, 0x87A98143, 0x7FA98443, 0x81AB8043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13198,20 +13602,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00945C6D, 0x69A77556, 0x7CA97252, 0x62AB7353, 0x65A97355, 0x71AA7552, 0x84AA6B51, 0x67AB5156, +0x58A88C55, 0x74A85558, 0x65A87355, 0x62A76D58, 0x7DAA7151, 0x62A86E56, 0x64AB6654, 0x7CA77154, +0x75A67555, 0x74A76F54, 0x6AA97154, 0x77A96F52, 0x6EA87353, 0x6AA67956, 0x74A97752, 0x6DAD7850, +0x78A76A55, 0x6DA97E54, 0x78A66757, 0x69A97155, 0x82AA5C53, 0x78AB7951, 0x68A97B54, 0x5BA95E57, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x82AA8243, 0x7BAA8244, 0x7FA98743, 0x87A98542, 0x7CA98543, 0x85AA8342, 0x84AA7D42, -0x7CAB7A44, 0x82A98642, 0x7CA97945, 0x85A97944, 0x7CA98543, 0x85A98243, 0x7FAA7E42, 0x7DAA8043, -0x7CAB7F43, 0x84AA8142, 0x83AA8343, 0x85AB8341, 0x83AB8341, 0x83AA7F43, 0x82AA8442, 0x82AB7E41, -0x84AA7C42, 0x7DAB7A43, 0x83AA8743, 0x83A98843, 0x7EA98244, 0x86A98841, 0x7FAB7F42, 0x8BAA8741, -0x89A98C41, 0x7FAA8743, 0x89A98642, 0x81A98B42, 0x84A98144, 0x7FAA8543, 0x85AA8941, 0x88AB8541, -0x7FAB7C44, 0x86A98743, 0x8AA98942, 0x7EAA7A44, 0x7CAA7F44, 0x83AA8641, 0x86AA8642, 0x84AA8543, -0x86AA8542, 0x84AB8142, 0x7FAA7C44, 0x7EAA7F44, 0x7FAA7F43, 0x82AA8143, 0x7FAB7E43, 0x7FAB8043, -0x7EAB7F43, 0x80AB8243, 0x81AB8043, 0x83AA8543, 0x85A98642, 0x86AA8642, 0x86A98642, 0x85A98543, -0x83AA8143, 0x80AA7F43, 0x82AA8342, 0x81AA8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13243,18 +13643,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x83AA8343, 0x79AA8044, 0x81A98A43, 0x84A98342, 0x7CAA8743, 0x85AA8541, 0x81AA7D43, -0x7BAB7B43, 0x86A98043, 0x79AA8144, 0x80A97845, 0x7FAA8743, 0x85A98143, 0x7CAB7D42, 0x81AA7E43, -0x7FAB8342, 0x82AA7E43, 0x83AA7F43, 0x7DAA7C43, 0x7EAA8343, 0x81AB8142, 0x81A98143, 0x85AB8041, -0x7DAB8342, 0x7DAB7C43, 0x7CAA8A42, 0x81A88643, 0x7EA98344, 0x88AA8741, 0x80AB8142, 0x88AB8541, -0x7AAA8B43, 0x85A88244, 0x89AA8840, 0x7EA98544, 0x83A98343, 0x7FAA8543, 0x85AA8342, 0x85AB8342, -0x84AB8242, 0x81AB7C43, 0x80AA8343, 0x86A98542, 0x82A98044, 0x82A98542, 0x84AB8342, 0x85AA8442, -0x81AA8243, 0x81AA8243, 0x85AA8A42, 0x89AA8842, 0x87AA8543, 0x84AA8443, 0x84AA8543, 0x84AA8443, -0x85AA8643, 0x86AA8642, 0x89A98C41, 0x8BA98941, 0x89A98941, 0x87A98442, 0x81AA7E43, 0x7AAB7D43, -0x80AA8243, 0x81AA8043, 0x82AA8442, 0x7FAA8543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8BA67C52, 0x75A78053, 0x78A78653, 0x7FA87D51, 0x7CA76D54, 0x65AA7454, 0x6EA76C56, 0x72AB7D51, +0x83A78951, 0x7FA77E53, 0x79A87454, 0x83A88351, 0x7EA87453, 0x73A86D55, 0x6EA87455, 0x79A77E54, +0x83A68253, 0x7BA87953, 0x78A77A54, 0x7CA87854, 0x79A97F52, 0x7BA97E51, 0x83A97F50, 0x7CA9844F, +0x8DA6974E, 0x98A5934D, 0x8CA78150, 0x79A77254, 0x64AA6855, 0x79A78653, 0x82A68053, 0x7EA67954, +0x69A96555, 0x63AE6251, 0x56AA5C59, 0x6DA66E58, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13282,22 +13680,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x81AA8143, 0x7CAA7D45, 0x82A98A42, 0x83A97F42, 0x7EAA8843, 0x85AA8442, 0x81AB7F42, -0x7BAA8142, 0x88A97F43, 0x75AA8544, 0x79A97A45, 0x83A98542, 0x84A98042, 0x7AAA7C43, 0x84AA7943, -0x83AA8342, 0x7EAA8043, 0x7AAA7545, 0x78AA7844, 0x78AA7B44, 0x80AB8142, 0x7FAA8043, 0x83AB8241, -0x7BAB8242, 0x7AAB7C44, 0x7CAA8942, 0x84A98144, 0x82A98144, 0x88AA8541, 0x7EAB8242, 0x85AB8042, -0x75AA8343, 0x88A98243, 0x88AA8841, 0x81AA7E43, 0x84A98443, 0x7FAA8543, 0x81AB8142, 0x80AB8242, -0x81AB7E42, 0x7FAB8042, 0x7FAC7D42, 0x7CAA7F43, 0x84A98A42, 0x88A98642, 0x84A98243, 0x82AA8242, -0x85AA8442, 0x83AA7F43, 0x80AA8443, 0x85AA8542, 0x85AA8542, 0x85AB8941, 0x8BAB8B40, 0x89AB8740, -0x86AB8841, 0x84AA8542, 0x89A98A41, 0x8AA98942, 0x88A98342, 0x82AB8342, 0x82AA8342, 0x85AA8543, -0x7EAA7F43, 0x80AA8242, 0x83AA8343, 0x89A89042, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0093666C, 0x7AA87852, 0x7CAA6652, 0x70AA7352, 0x67A87C54, 0x61AA7953, 0x78AB6851, 0x5FAB4A58, +0x5CA88855, 0x7EA95755, 0x65A97654, 0x70A76259, 0x7FA77D52, 0x6AA95A57, 0x6DAA6254, 0x61A97C54, +0x86A77C51, 0x78A67456, 0x75A47956, 0x7DA57C54, 0x7EAA7B4F, 0x7DA96E53, 0x67AC6953, 0x71A96955, +0x79A88353, 0x74A66259, 0x5DA96D58, 0x86A97451, 0x5FAB8A52, 0x7AAB6E50, 0x71A85958, 0x69AA5C54, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13322,25 +13716,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958561, 0x7FAA7F43, 0x80A97C44, 0x84A98842, 0x83AA7C43, 0x7FAA8B42, 0x84AA8641, 0x81AB7D42, -0x7CAA8243, 0x89A97A44, 0x77AA8344, 0x76A97D45, 0x84AA8342, 0x84AA7F42, 0x7BAB7F43, 0x7DAA7B44, -0x85AB8142, 0x80AA7D43, 0x78AA7D44, 0x7CAA7C45, 0x75AA7A44, 0x7CAA8243, 0x7FAA7F42, 0x84AA8241, -0x7BAA8043, 0x7AAB7A44, 0x7FA98942, 0x82A97F44, 0x83A98144, 0x85AA8641, 0x7DAA8742, 0x83AB7C42, -0x7CAA7D44, 0x8AA98542, 0x85AB8942, 0x83AA7A43, 0x86A98243, 0x7FAA8342, 0x7EAB7F43, 0x85AC8641, -0x88AB8841, 0x85AC8041, 0x7DAC7B42, 0x7CAC7B42, 0x7CAB7D43, 0x85A98A42, 0x8BA88A43, 0x85A88244, -0x80AA8143, 0x82AA8442, 0x88AA8841, 0x87AA8841, 0x84AA8342, 0x81AB8143, 0x83AA8243, 0x82AA8343, -0x82A98443, 0x85A98743, 0x86A98342, 0x82AB8441, 0x84AA8541, 0x85A98642, 0x87A98243, 0x80AB8143, -0x81AA8242, 0x83AA8343, 0x85A98D42, 0x8FA88942, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x92A77950, 0x77A88651, 0x77A78554, 0x75A87D52, 0x75A87653, 0x73A87555, 0x64AA7B53, 0x7AAA7D51, +0x88A88250, 0x7AA87B53, 0x8DAA814E, 0x77A97851, 0x7EA87E52, 0x77A96E54, 0x6DA86857, 0x6BA76F57, +0x78A68054, 0x80A58553, 0x90A48C51, 0x8DA59150, 0x93A59450, 0x91A58A51, 0x88A68652, 0x85A78A51, +0x88A77F51, 0x74AB7252, 0x76AB7D51, 0x74AB6A54, 0x6AA97255, 0x6CA86257, 0x61AA6856, 0x70AD6D4F, +0x64AD5C54, 0x65A77158, 0x71A86B55, 0x73AB6A54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13362,16 +13753,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958560, 0x83AA7C43, 0x7EA97E44, 0x88AA8541, 0x80AA7D43, 0x81AA8843, 0x85AB8641, 0x7FAB7C43, -0x79AB8342, 0x84A97644, 0x7CAA7F44, 0x77A98045, 0x85AA8043, 0x81AA7F42, 0x7AAA8143, 0x79AA7B44, -0x89AB7A41, 0x7EAA7A43, 0x7CAA7A45, 0x7EA97746, 0x7BAA7844, 0x7FAA7F43, 0x7EAA7F42, 0x84AA7F42, -0x7FAA7F43, 0x7DAB7B43, 0x83A98543, 0x81A97E44, 0x7FA88344, 0x84AB8741, 0x7BAA8B42, 0x81AB8442, -0x82A97E43, 0x88A88842, 0x85AA8B42, 0x88AA7A42, 0x86A98143, 0x81AA8442, 0x7DAB8342, 0x87AB8641, -0x83AA8443, 0x85A98544, 0x86A98443, 0x84AA8342, 0x80AB8241, 0x80AC7D41, 0x7BAB7F43, 0x82A98643, -0x88A88843, 0x83A87E44, 0x7AAA7B45, 0x7CAA8044, 0x85AA8A41, 0x88AA8642, 0x86AA8543, 0x83AA8143, -0x80AA8243, 0x81AA8143, 0x82AA8442, 0x85A98443, 0x84A98144, 0x7EAA7D43, 0x80AA8242, 0x84A98243, -0x82A98343, 0x85AA8B42, 0x8EA98A41, 0x80AA7D43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13381,10 +13762,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00937C6A, 0x77A98251, 0x70AA6C52, 0x74AA6E53, 0x69A86956, 0x6FAA7F52, 0x76AC6951, 0x64AA5158, +0x57A98755, 0x78AA6354, 0x66AA7054, 0x75A85458, 0x70A68F52, 0x78AA6953, 0x63A87856, 0x70AB5E54, +0x5BAC6455, 0x70AA7953, 0x76A96D55, 0x72A86E56, 0x6BAB7353, 0x73A97054, 0x6FA97255, 0x7BA88453, +0x6BA5645A, 0x6AAA6F55, 0x82A98450, 0x60AC6C53, 0x8CAC6A4F, 0x72A76756, 0x58A97555, 0x63A96E55, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13402,16 +13789,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x82AA7D43, 0x7CAA8144, 0x8AAA8241, 0x7CAA7D43, 0x83AA8642, 0x84AB8641, 0x7EAB7A42, -0x79AB8442, 0x82A97345, 0x7DAA8143, 0x78A98244, 0x86AA8143, 0x7EAB7B43, 0x7CAA8243, 0x77AA7D44, -0x88AB7C41, 0x7CAA7D43, 0x76AA7446, 0x77AB7A44, 0x76AB7B44, 0x87AA7B42, 0x7EAB8342, 0x85AA8042, -0x82AA8143, 0x7FAB7E42, 0x87A98143, 0x7FA98543, 0x7CA98144, 0x84AB8541, 0x82AB8841, 0x7FAA8C42, -0x84A97D44, 0x85A98A43, 0x84AA8C42, 0x8BA97B42, 0x84A98343, 0x83AA8142, 0x7CAB8742, 0x86AA8543, -0x81A98143, 0x85AA8243, 0x84A98443, 0x83A88244, 0x80A88344, 0x85AA8442, 0x80AB7E42, 0x7BAB7B42, -0x7CAA7F43, 0x85A98942, 0x8AA88943, 0x85A88244, 0x80A98244, 0x81A98243, 0x82A97F43, 0x7EAA8043, -0x7FAA7E44, 0x81A98743, 0x84A98444, 0x82AA8043, 0x7EAB7F43, 0x81AA8243, 0x86A98642, 0x86A98643, -0x85AA8C41, 0x90A98D40, 0x83AA7D43, 0x87A98A41, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13425,9 +13802,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8AA77451, 0x7BA88551, 0x72A68155, 0x76A77B55, 0x7FA97052, 0x79A86855, 0x6DAC7B50, 0x72A88153, +0x7CAA6F52, 0x7FAC7C4E, 0x73AA7750, 0x6BAC5655, 0x56A96258, 0x79A58D53, 0x97A7964E, 0x8DA9834F, +0x7BA97D51, 0x82A78851, 0x8CA78D51, 0x90A7934E, 0x95A68D4F, 0x87A68051, 0x82A78451, 0x7FA87953, +0x6DA86C57, 0x69A96B56, 0x68AB5E55, 0x5CAB6057, 0x6AA96A55, 0x6AAB7251, 0x70AA6953, 0x72A87755, +0x72A86157, 0x62AE6C52, 0x6CAB7B53, 0x8AA8904F, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13442,16 +13826,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958261, 0x7EA97C44, 0x7FAA8642, 0x87AA8142, 0x7AAA7C43, 0x86AA8442, 0x86AB8841, 0x7EAB7942, -0x7AAA8543, 0x80A97246, 0x80A97F43, 0x7AA98544, 0x85AA8142, 0x7EAB7C43, 0x7CAA8343, 0x79AA7B44, -0x87AB7D41, 0x7EAB7C43, 0x7FAA7B43, 0x7AAA7C44, 0x7AAA8342, 0x7DAB7743, 0x82AA8541, 0x84A98342, -0x83AA8242, 0x7DAB8642, 0x83A88044, 0x81A98443, 0x7CA98244, 0x87AB7F41, 0x88AB8441, 0x7DA98943, -0x87A98043, 0x85A98A43, 0x81AA8B42, 0x89AA7D42, 0x81A98243, 0x83AA7D43, 0x7EAB8542, 0x86A88243, -0x81A98243, 0x83AA8342, 0x85AA8642, 0x86AA8642, 0x84AA8442, 0x82A98143, 0x7EA97F46, 0x81A98444, -0x83AA7E43, 0x7BAB7B43, 0x7EAB7F43, 0x83AA8343, 0x85AA8542, 0x86A98942, 0x89AA8542, 0x84AA8043, -0x80AA7F44, 0x7FA97F44, 0x80AB8242, 0x83AB8042, 0x7EAA8044, 0x85AA8543, 0x85AA8343, 0x86AA8B41, -0x8FA98C40, 0x85A97A43, 0x83A98B41, 0x88A88543, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13468,10 +13842,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00968366, 0x88AA744F, 0x69AB7652, 0x69AA5F56, 0x79A76555, 0x75AA7E51, 0x7BAB7150, 0x60AA5956, +0x5EA97F54, 0x7BAB7151, 0x6AAA7152, 0x6EA76F56, 0x5CA67F57, 0x86A77A53, 0x6EAA6954, 0x63A86F57, +0x79A87953, 0x73A97353, 0x7CA77953, 0x72A96E54, 0x73A97254, 0x78A97255, 0x72A77A54, 0x69A6595B, +0x6DAB7053, 0x7DAA8450, 0x66AE6752, 0x7DAA824F, 0x63AB7253, 0x5BA95859, 0x79A96553, 0x76A87853, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13482,16 +13862,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958661, 0x7CA97B45, 0x83AA8842, 0x83AA8042, 0x7CAB7A44, 0x87AA8142, 0x87AA8741, 0x7DAC7842, -0x7BAA8742, 0x81A97346, 0x81AA7E43, 0x7DA98344, 0x86A98142, 0x7CAA7D43, 0x7CAA8342, 0x7DAA7B44, -0x82AA7F42, 0x7DAC7E41, 0x7DAB8042, 0x83AB8041, 0x80AB7A43, 0x7BAA8142, 0x84AA8442, 0x81A98443, -0x85AA8241, 0x83AA8742, 0x7EA98044, 0x87A97C43, 0x80AA8543, 0x86AB7E42, 0x8AAB7F41, 0x86A98343, -0x89A98243, 0x86A98742, 0x80AA8943, 0x88AA8142, 0x81A98044, 0x83AA7A43, 0x81AA8543, 0x83A88144, -0x7FAA8143, 0x85AA8542, 0x88A98941, 0x88AA8941, 0x83AA8242, 0x81AA8343, 0x81AA8242, 0x80AA7F43, -0x7EAA7E45, 0x7FAA8044, 0x83AA8243, 0x83A98343, 0x85AA8342, 0x84AA8342, 0x83AA8242, 0x81AA7F42, -0x7FAB7E42, 0x7EAB8141, 0x82AB8342, 0x82AA8243, 0x83AA8542, 0x85AB8441, 0x88AA8E40, 0x91A98A40, -0x85AA7B43, 0x7FA98A42, 0x8AA98A42, 0x84A98142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13512,9 +13882,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x89A86F52, 0x74A98550, 0x6DA78354, 0x76A77654, 0x70A86E53, 0x7EA86455, 0x79AA7950, 0x7EA77C54, +0x71AC8650, 0x74AB6D51, 0x58AB5158, 0x6DA78553, 0x88AA7950, 0x78A87353, 0x73A87654, 0x80A48355, +0x84A37E55, 0x7BA47A56, 0x79A57355, 0x69A86555, 0x60AA6157, 0x64A96A55, 0x6AAA6A52, 0x63AA5D55, +0x5CA96358, 0x6CA87154, 0x6DA86B55, 0x6EAB7252, 0x6EAC6F51, 0x77A87852, 0x70A96955, 0x6DAC7152, +0x6DAD6853, 0x84A88C51, 0x92A77551, 0x75A78653, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13522,16 +13899,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x7BA97E45, 0x86A98A41, 0x7EAB7F43, 0x7CAB7B43, 0x85AA7F42, 0x89AA8241, 0x7DAC7543, -0x79AA8942, 0x82A97545, 0x7FAA8043, 0x7CA98344, 0x86AA8041, 0x7BAA7F43, 0x7AAA8343, 0x7EAA7D44, -0x7FAA8442, 0x80AB7F41, 0x7EAC7D41, 0x7DAC7D42, 0x78AB7C43, 0x85AA8541, 0x83A98642, 0x87A98542, -0x82AB8341, 0x87A97B43, 0x80AA8643, 0x85A97A44, 0x81AA8942, 0x7EAB8642, 0x86AB7E42, 0x89A97D43, -0x8AA98342, 0x84A98642, 0x81AA8743, 0x87A98341, 0x7EA98044, 0x84AB7B42, 0x86AA8442, 0x7DA98144, -0x82AA8841, 0x8CA98B41, 0x8BA98641, 0x81A98044, 0x7FA98144, 0x81A98144, 0x80A98044, 0x83AA8442, -0x84AB8241, 0x80AB7F42, 0x7EAB7C43, 0x7CAB7C43, 0x7CAB7A43, 0x78AC7A43, 0x79AC7C42, 0x7FAB8142, -0x80AB8142, 0x84AA8542, 0x86AB8342, 0x84AB8442, 0x87AB8B40, 0x8FA9913F, 0x8CAA8541, 0x7DAA7844, -0x7DAA8943, 0x8BA88942, 0x89A98242, 0x80AB8341, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13555,23 +13922,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957E67, 0x6EAD6452, 0x70AB7151, 0x62A87455, 0x75A86E54, 0x7FA97E51, 0x6FAB7651, 0x61AA5D56, +0x5CA97B55, 0x7EAA7451, 0x6BAB7451, 0x6DA87355, 0x5BA96359, 0x75A78353, 0x81A48B53, 0x7AAA7451, +0x71AA6B54, 0x6BAA7355, 0x7AA97E53, 0x81A97E52, 0x7BA67755, 0x72A5655A, 0x58AA5859, 0x68AB7553, +0x85AC764E, 0x65AE6052, 0x6DAB7A51, 0x5BAC7054, 0x68A85D58, 0x62AA7A52, 0x66A97155, 0x71AA6A53, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957962, 0x7BA98045, 0x85A98742, 0x7DAA8143, 0x7DAA7D44, 0x84AA8042, 0x88AA7F42, 0x7FAB7643, -0x79AA8B42, 0x82AA7644, 0x7DAA8144, 0x7AA98144, 0x84AB8142, 0x79AA8144, 0x79AA8443, 0x80A98243, -0x7EAA8143, 0x7DAA8043, 0x81AA7F42, 0x7BAB7E43, 0x84AA8442, 0x82A98243, 0x84A98642, 0x86AB8141, -0x81AB8442, 0x7DAA8043, 0x88A98842, 0x7BA98045, 0x84AA8742, 0x7CAA8942, 0x7FAB8741, 0x7FA97B44, -0x8CA88542, 0x83AA8642, 0x81A98643, 0x87AA8241, 0x80A98044, 0x83AB7B43, 0x85AA7F43, 0x7FAA8043, -0x87A98B41, 0x8CA98742, 0x83A97E44, 0x7BAB7944, 0x79AB7B44, 0x79AB7A44, 0x7AAB7944, 0x78AB7744, -0x79AA7845, 0x7AAA7D44, 0x7CAB7C43, 0x80AB8042, 0x7DAC7D42, 0x7FAC8142, 0x82AB8342, 0x81AB8243, -0x81AA8543, 0x85AA8642, 0x84AB8641, 0x88AA8F40, 0x92A98E40, 0x8AA98342, 0x7CAA7644, 0x7CAA8743, -0x8AA98942, 0x89A98642, 0x7FAB8042, 0x7EAB7B43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13599,19 +13962,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947962, 0x7FA98343, 0x86AA8242, 0x7CAB8342, 0x7DAA8343, 0x82AA8342, 0x89AA7F42, 0x7EAB7543, -0x77A98D43, 0x83AA7744, 0x7DAA8343, 0x7CA98044, 0x87AA8242, 0x7CAA8144, 0x7DAB7D43, 0x86A98243, -0x83A98343, 0x83A98143, 0x7FAA8142, 0x84AA8142, 0x81A98343, 0x7EA98543, 0x83AA8442, 0x80AB8541, -0x85AA7F43, 0x80AA8743, 0x85A97E44, 0x7EAA8243, 0x89AA7A42, 0x84AB8541, 0x7EAA8643, 0x79AA7A44, -0x8DA88642, 0x84A98842, 0x83A98A42, 0x88AA8442, 0x85A98143, 0x80AB7E42, 0x82A97F44, 0x81AA8741, -0x8BA98C41, 0x87A98543, 0x83AA8143, 0x80AA8143, 0x83AA8343, 0x84AA8443, 0x83AA8243, 0x81AA7F43, -0x81AA7E43, 0x7DAA7A44, 0x77AA7645, 0x77AB7744, 0x76AB7844, 0x78AB7B44, 0x7FAA8043, 0x83AA8642, -0x89AA8741, 0x87AA8940, 0x8EA99141, 0x8FA88C41, 0x86A98342, 0x7CAA7A44, 0x7FAA8942, 0x8BA98742, -0x89A88243, 0x7CAB7D43, 0x81AC7942, 0x76A97C45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x89A87B4F, 0x77A88950, 0x71A78254, 0x73A77B54, 0x6EA87853, 0x75A95F55, 0x72A97952, 0x7CA87654, +0x7FAB7150, 0x6AAC5355, 0x74A78952, 0x89AA7051, 0x6FA66957, 0x7FA48254, 0x81A47856, 0x68A96455, +0x66AC6E52, 0x71AB7451, 0x7AAB7650, 0x73A87454, 0x78A77953, 0x77A87952, 0x7BA67C54, 0x81A48454, +0x84A78252, 0x82AA8350, 0x81A88152, 0x78AA7052, 0x6EA97155, 0x70AC7050, 0x73AE6551, 0x6CA98354, +0x83A58A52, 0x80A77653, 0x7CA87553, 0x6BAA7052, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13643,19 +14003,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957B62, 0x83AA8343, 0x88AA8042, 0x7EAB8442, 0x7DAA8642, 0x7FAA8442, 0x87AB7F42, 0x7AAB7144, -0x78A98D43, 0x84AA7844, 0x7EAA8343, 0x7FA97E45, 0x87AA8441, 0x7EAA7844, 0x80AA7743, 0x85A98942, -0x83A98743, 0x88A88443, 0x83AA8143, 0x82A98443, 0x81A88243, 0x88AA8641, 0x84AB7F42, 0x83AB8242, -0x7FA98243, 0x88A98742, 0x7DA87B46, 0x82AB8A41, 0x7FAB7D43, 0x8AAB7C42, 0x83A97C44, 0x79AA7943, -0x8CA98642, 0x83A98842, 0x85A98A42, 0x87A98641, 0x86A98043, 0x7DAB8343, 0x80A98043, 0x82AA8642, -0x89A98C41, 0x87A98742, 0x85AA8343, 0x89AA8941, 0x87AA8342, 0x83AA8043, 0x80AA8343, 0x85A98743, -0x89A88842, 0x86AA8542, 0x85A98542, 0x87A98543, 0x84AA8742, 0x86AA8742, 0x89AA8741, 0x86AA8941, -0x8DA99140, 0x91A89040, 0x8CA98842, 0x85AA8243, 0x7CAA7E43, 0x85A98A42, 0x88A98842, 0x87A98543, -0x7EAA7D43, 0x7DAC7C41, 0x76AA7944, 0x80A98144, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00975A6A, 0x69AB7751, 0x74AB6752, 0x6DA77A54, 0x65AA7D53, 0x78A97453, 0x75AA7551, 0x66A86258, +0x61A87855, 0x7DAA7551, 0x69AA6B54, 0x6AAA6B54, 0x77A76A57, 0x59A96B56, 0x76A77F52, 0x75A77155, +0x7DA38356, 0x7FA37658, 0x73A47858, 0x7BA47059, 0x64AA6754, 0x72AC7450, 0x72AC7951, 0x74AE6E50, +0x6AAD6752, 0x76AA7C51, 0x64AC6354, 0x75A86B54, 0x65AB6354, 0x78AA6B52, 0x71A76D55, 0x6BAD7051, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13682,23 +14038,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957D62, 0x85AA8442, 0x86AA7D42, 0x81AB8242, 0x7DAA8643, 0x7BAA8542, 0x85AB7E41, 0x7AAB7244, -0x79AA8B43, 0x87AA7843, 0x7DAA8443, 0x82A97B44, 0x88A98742, 0x7FAA7944, 0x80AA7C43, 0x7CAA8643, -0x8AA98642, 0x85A88343, 0x83A88544, 0x86A88642, 0x87AA8541, 0x86AA8042, 0x7EAB7E42, 0x81AA7E44, -0x85A98942, 0x83A97C44, 0x7AAA8044, 0x8AAA8341, 0x7BAB8C42, 0x86AB8141, 0x82A97844, 0x7FAA7943, -0x8DA98641, 0x84A98A42, 0x85A98B42, 0x87AA8841, 0x83A98343, 0x81AA8543, 0x7EAA8443, 0x84AB8541, -0x8CA98C41, 0x87AA8742, 0x86A98D42, 0x8BAA8541, 0x81AA7F43, 0x83A98543, 0x87AA8542, 0x87AA8841, -0x86AA8841, 0x88AA8541, 0x84AA8342, 0x84A98542, 0x88A98A41, 0x8BA88D41, 0x91A79441, 0x94A79241, -0x90A88B41, 0x86A98642, 0x85AA8143, 0x7EAB8143, 0x86AA8642, 0x85A98743, 0x86A98143, 0x7EAA7E42, -0x81AC7C41, 0x7AAC7844, 0x7EA98344, 0x7FAA8043, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DA7834F, 0x7EA8914F, 0x78A78253, 0x7EA67454, 0x67A98053, 0x73A86855, 0x75A88352, 0x77A97853, +0x67AC6453, 0x5BA97855, 0x8FA86C52, 0x6AA66C57, 0x7DA67655, 0x6FAA7052, 0x78AB6C52, 0x6EA87854, +0x7BA67C55, 0x7DA88450, 0x8BA68650, 0x79A67256, 0x71A87055, 0x72AA7752, 0x7AA78053, 0x7FA67E53, +0x7CA97A52, 0x76A97353, 0x72A87454, 0x70AA7551, 0x7BAB6A51, 0x6BAB8052, 0x80A77D52, 0x84A67554, +0x71A78255, 0x86A96F51, 0x66A96F54, 0x6CA96256, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13722,16 +14075,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948362, 0x82AA8942, 0x83AA7D43, 0x83AB8242, 0x7EA98343, 0x7CAA8843, 0x83AB7E42, 0x7CAB7544, -0x77A98A43, 0x85AA7843, 0x7DAA8243, 0x82A97645, 0x85A98A42, 0x83AA7F43, 0x7DAA8343, 0x7CAB7A43, -0x80AA8742, 0x8BAA8A40, 0x88AA8A41, 0x87AA8741, 0x86AA8142, 0x7FAB7F42, 0x7DAA8044, 0x7EAA8443, -0x88A98442, 0x7EA87B46, 0x7FAB8842, 0x88AB7943, 0x84AB8941, 0x7DAB8542, 0x7CA97D44, 0x7FAA7E43, -0x8FA98541, 0x84A98A42, 0x84A98A43, 0x83A98642, 0x83AA8442, 0x83A98343, 0x7DAA8642, 0x85AA8641, -0x8BAA8941, 0x85AA8542, 0x8DAA8840, 0x84AA8442, 0x87AA8742, 0x84AA8042, 0x80AA7E44, 0x80A98144, -0x85A88843, 0x88A88A42, 0x8EA88C42, 0x8DA88E41, 0x8FA88F41, 0x8EA98C42, 0x8BA98A42, 0x8AA98C42, -0x8BA98742, 0x83AB8242, 0x84AB8642, 0x83AB7F43, 0x7EAA8243, 0x7FAA7C44, 0x7BAB7E43, 0x81AB8040, -0x7DAB7942, 0x7DA98244, 0x81AA7F43, 0x82AB7F42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13739,10 +14082,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957C67, 0x81A97351, 0x6DA86D54, 0x71AA5E54, 0x6FA87C54, 0x81A86554, 0x73AA7752, 0x6AA85F57, +0x5EAA6D55, 0x74AA7F51, 0x7CAA6552, 0x62AA6155, 0x68A97754, 0x84A77D52, 0x62AC5E54, 0x66AA6C52, +0x6BAB6C52, 0x6EAC6A51, 0x65AB6353, 0x63AB6853, 0x6DAB7A51, 0x7BAE7A4D, 0x71AD6E51, 0x6FAA6D54, +0x76A96D53, 0x65A97754, 0x73A95C56, 0x63AA5F57, 0x66AA7752, 0x6DA97653, 0x65AA6F55, 0x6DAC8350, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13762,16 +14111,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948661, 0x84AA8941, 0x81AB8042, 0x83AB8142, 0x7EAA7E44, 0x81AA8742, 0x84AB7F41, 0x7DAB7544, -0x77AA8B43, 0x84AA7C43, 0x7DAA8143, 0x83AA7644, 0x81A98E42, 0x85AA7F42, 0x7CA98443, 0x81AB7A43, -0x79AC7C43, 0x81AA8543, 0x84AA8043, 0x82A98044, 0x7FAB8342, 0x82AA8142, 0x81AA8243, 0x86AA8942, -0x7FA97C45, 0x7FAA8143, 0x89AA8A41, 0x7BAB8042, 0x8DAB7F41, 0x82A97E43, 0x78AA8343, 0x7CAA8143, -0x8DA98442, 0x84A98A41, 0x82A98A43, 0x86A98742, 0x86A98442, 0x83A98043, 0x7DAB8542, 0x82A98842, -0x87AA8642, 0x83AA8B41, 0x89AA8440, 0x87AA8541, 0x7EAB7A44, 0x7BA98044, 0x86A88A43, 0x8EA89141, -0x92A99341, 0x90A98F40, 0x8DAA8A40, 0x8BAA8C40, 0x8BAA8B40, 0x8AAA8941, 0x89AA8B41, 0x89A98941, -0x87AA8441, 0x84AB8442, 0x80AA7F43, 0x7FAB8143, 0x7BAB7A44, 0x7BAB7D43, 0x81AB8241, 0x7FAB7A43, -0x7FA98244, 0x82A97F43, 0x7FAB7E42, 0x7EAB8743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13783,9 +14122,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DA78350, 0x80A8974D, 0x7BA68353, 0x7FA77552, 0x71A88751, 0x76AA6754, 0x75A77F53, 0x71AA6953, +0x64AB6454, 0x78AA8A50, 0x70A76056, 0x81A68552, 0x73A97353, 0x64A86956, 0x6AA77A55, 0x88A9814E, +0x78A76A55, 0x62A86159, 0x6AA77A55, 0x80A78252, 0x82A77A53, 0x73A97355, 0x7AA77F54, 0x85A68A51, +0x88A68452, 0x85A78A4F, 0x7FAA7251, 0x72AA7B52, 0x79A87F52, 0x80A77B52, 0x75A86A56, 0x87A77953, +0x7FA87951, 0x71A87E52, 0x6DA76D56, 0x65AA7352, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13802,16 +14148,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x8AAA8641, 0x7FAB8242, 0x82AA7C43, 0x82A97D43, 0x80AA8542, 0x85AB7F42, 0x7CAB7544, -0x7BAA8942, 0x87AA8042, 0x7CAA8142, 0x81A97C44, 0x7EA98B43, 0x88A98142, 0x7DAA7D44, 0x84AA8442, -0x7DAB7943, 0x78AB7A44, 0x7BAB7E44, 0x81AA8343, 0x82AA8343, 0x83AA7F43, 0x82AA8443, 0x87A98043, -0x79AA7C45, 0x81AB8841, 0x8BAA7D42, 0x7DAB8A42, 0x84AB7F42, 0x7EAA7745, 0x7EAA8042, 0x7DAA8543, -0x8CA98341, 0x86A98A41, 0x82A98843, 0x84A98643, 0x87AA8142, 0x84A97E43, 0x80AB8641, 0x82A98842, -0x86AA8142, 0x88AB8640, 0x82AB8442, 0x7FAB7743, 0x76AA7C45, 0x85A98D42, 0x91A99140, 0x8DAA8940, -0x86AA8642, 0x88A98B42, 0x8DA98D41, 0x8EA98F40, 0x90A98D41, 0x8AA98842, 0x89A98A41, 0x87AA8542, -0x80AA8044, 0x7FAA7F43, 0x7EAB7A43, 0x79AB7B44, 0x7FAA7F43, 0x7FAB8242, 0x81AB7E42, 0x82AA8443, -0x82AA7B44, 0x7CAC8041, 0x80AA8542, 0x8CAA8E40, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13826,10 +14162,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00957569, 0x76AA6753, 0x74A87152, 0x64A97255, 0x7EA67354, 0x73A96954, 0x74AA7751, 0x63A76259, +0x57A96658, 0x60AC7553, 0x7AA97B52, 0x75AA6E52, 0x66AA6C55, 0x6CAA6D54, 0x76A78254, 0x85A88950, +0x8BA9874E, 0x82AB7D4E, 0x7DAB7A4F, 0x78AC7850, 0x73AA7153, 0x70A87055, 0x6EA96F54, 0x6CA77155, +0x78A87253, 0x5CAA5159, 0x5AAB5E57, 0x59AB7F53, 0x78A96D54, 0x6DA86057, 0x76AC7050, 0x6BA88854, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13842,16 +14184,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958960, 0x8BAA8340, 0x7FAA8442, 0x7FAA7A43, 0x84A97D43, 0x83AA8742, 0x86AA8241, 0x7BAB7843, -0x7AAA8743, 0x86AB8241, 0x7FAA8142, 0x80AA8144, 0x79A98744, 0x8AAA8542, 0x80AA7E42, 0x7CAA8144, -0x85AA8442, 0x83AA8343, 0x86A98542, 0x82AA8143, 0x83AA8243, 0x84AA8243, 0x82A98543, 0x7FA97845, -0x80AB8142, 0x86AA8A41, 0x7DAC7E42, 0x87AA8841, 0x7CAB8242, 0x79AA7845, 0x85AA7D42, 0x84AA8442, -0x8CAA8141, 0x84A98A41, 0x7FA98A43, 0x84A98343, 0x84A97F42, 0x87AA7D43, 0x82AB8641, 0x85A98643, -0x84AB8242, 0x88AB8141, 0x82AA7743, 0x76AA7C44, 0x81AA8B42, 0x8DAB8640, 0x83AA8642, 0x86AA8842, -0x86AA8642, 0x89A88C42, 0x8CA88C42, 0x8DA88941, 0x88A98542, 0x80A97F43, 0x80AA7F44, 0x7FAA7F44, -0x7EAB7B43, 0x78AB7645, 0x77AA7D44, 0x7CAA7C43, 0x7EAB8242, 0x82AB8141, 0x82AA8742, 0x85A98043, -0x7DAC8042, 0x7FAB8342, 0x8BAA8E40, 0x89AA7F42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13870,9 +14202,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x90A77851, 0x7DA98E4D, 0x81A77654, 0x76A87353, 0x6DA88951, 0x6BAB6953, 0x7FA57854, 0x76AB5F52, +0x64AA7E53, 0x84A86854, 0x68A78354, 0x7EA88251, 0x67A96057, 0x71A88152, 0x7DA86254, 0x5BA96458, +0x76A78652, 0x86A97F50, 0x7BA97D52, 0x82A68053, 0x7CA57D55, 0x83A48B54, 0x8FA48D51, 0x83A77852, +0x6BAB6A52, 0x73AA7D51, 0x7FA78152, 0x7FA87453, 0x73A96554, 0x61A96A58, 0x73A76D58, 0x77A97253, +0x7CAA7E50, 0x78A66F55, 0x6DA95F57, 0x61AA6755, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13882,16 +14221,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958D5F, 0x86AB7D41, 0x7FAA8442, 0x7CAA7E44, 0x84A97D43, 0x88AA8841, 0x84AB8141, 0x7CAB7A43, -0x7AAA8643, 0x85AA7F42, 0x7EAB8142, 0x7FAA8443, 0x78AA8044, 0x8BA98841, 0x88AA8042, 0x81AA7F43, -0x7DAA7F44, 0x82AA8243, 0x7FAA7D44, 0x81AA8643, 0x88AA8742, 0x83A98443, 0x83A87845, 0x76AB7D44, -0x82AB8841, 0x87AB7D41, 0x7CAB8242, 0x88AB7B41, 0x82A97A43, 0x78AB7E44, 0x80AA7E43, 0x82AA8042, -0x8BAA8142, 0x83AA8A41, 0x80A98943, 0x83A98442, 0x82AA8143, 0x87A97D43, 0x85AA8541, 0x87A98642, -0x82AB8A41, 0x83AA8041, 0x78AB7544, 0x80A98A42, 0x8BAA8541, 0x84AA8342, 0x83AA8443, 0x87A88943, -0x89A88743, 0x86A88544, 0x85A98243, 0x7FAA7D43, 0x7BAA7B44, 0x7CAA7F43, 0x7FAB7F42, 0x7CAA7A43, -0x79AA7C44, 0x80AA8243, 0x80AA7F43, 0x81AB8242, 0x80AB8142, 0x84AA8442, 0x81AA7E43, 0x80AB8242, -0x80AB7E42, 0x89A98D41, 0x8FA98342, 0x83A98A42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13913,25 +14242,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946E6A, 0x75A87852, 0x62A95F56, 0x76A77F53, 0x79A77F52, 0x60A86758, 0x7DA97351, 0x67A67357, +0x5FAA6457, 0x65A96356, 0x75AA7A51, 0x78A87654, 0x7DA88151, 0x78A67955, 0x73A96F54, 0x6AAB6455, +0x64AA6656, 0x6BAA6E55, 0x6EA86857, 0x60A86659, 0x6BA57158, 0x7EA48454, 0x82A77552, 0x68AA5E56, +0x69A77255, 0x64AA5F57, 0x67AA8053, 0x88A87352, 0x7AA76B55, 0x60A97E54, 0x75AC6E50, 0x8AA77752, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958760, 0x80AB7C42, 0x81AB8242, 0x7CAA8343, 0x83A98143, 0x88AA8741, 0x81AB8442, 0x7BAA7A44, -0x79AA8643, 0x87AA8342, 0x7FAB8342, 0x80AA8343, 0x79AA7C45, 0x83A98942, 0x88A88C42, 0x85AA8341, -0x82AA7F43, 0x7FAA8243, 0x85AA8742, 0x88AA8742, 0x86A98443, 0x82A87C45, 0x78AA7844, 0x7EAA8342, -0x8AAB8441, 0x7DAC7B42, 0x80AB8542, 0x79AB8142, 0x7EAA7944, 0x7CAA8542, 0x7DAA8243, 0x82AA7F43, -0x8AA98441, 0x85A98B41, 0x81A98843, 0x83A98743, 0x81AA8343, 0x86A97B43, 0x84AA8541, 0x88A98543, -0x84AB8841, 0x7FAB7C42, 0x76AA7F44, 0x8DA98B41, 0x81AA8343, 0x7EA98144, 0x87A88B43, 0x89A78544, -0x80A97F44, 0x80AA7E43, 0x7FAB7F43, 0x7EAC7E41, 0x7EAB7F42, 0x80AB8142, 0x80AA8143, 0x84AA8642, -0x86A98442, 0x85A98642, 0x86AB8541, 0x83AA8442, 0x88AA8741, 0x83AA8043, 0x80AB8241, 0x80AC7C42, -0x83AA8942, 0x8DA98C42, 0x84AA8442, 0x87AA8441, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -13957,21 +14282,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x82A97C52, 0x7AA98A4E, 0x84A77253, 0x70A77C53, 0x72A88E51, 0x66AC5F54, 0x86A57654, 0x6EAA6054, +0x7EA97D50, 0x67A86756, 0x7BA77954, 0x78A86056, 0x66A97F52, 0x74A96155, 0x61A87656, 0x7AA97152, +0x7EA78B52, 0x84A78353, 0x91A59650, 0x92A68052, 0x6BAA6155, 0x5BAA5C56, 0x62A96756, 0x6EA87255, +0x76A87954, 0x72A96F54, 0x6DA87554, 0x71A85D58, 0x5AAA6059, 0x63A76D5A, 0x65AA7854, 0x7FA67954, +0x79A57C54, 0x81A58453, 0x84A47F55, 0x80A57C54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x79AC7E42, 0x86AA8041, 0x7CAA8843, 0x7FAA8242, 0x84AA8542, 0x81AA8542, 0x7CAA7A44, -0x79AA8544, 0x87AA8541, 0x7EAA8142, 0x80AB7F43, 0x81A97745, 0x7FA98643, 0x88A98542, 0x89A88C43, -0x88AA8442, 0x84AB8241, 0x82AA8343, 0x84A88344, 0x83A87F44, 0x7AAB7B44, 0x80AB8042, 0x83AB8741, -0x82AC7F41, 0x7FAB8341, 0x89AA7A42, 0x7FAA8242, 0x80AA7A43, 0x7FAA8242, 0x81A98243, 0x80AB8142, -0x8CA98541, 0x84AA8C41, 0x82A98943, 0x82A98643, 0x80AA8442, 0x83AA7B43, 0x82AA8542, 0x86A98442, -0x88AB8241, 0x7FAB7543, 0x83A98B42, 0x8BAA8141, 0x81A97E43, 0x87A88843, 0x89A88544, 0x7EAA7C43, -0x7DAC8042, 0x82AB8341, 0x85AA8441, 0x83AA8343, 0x85A98542, 0x84A98542, 0x85A98642, 0x88A88943, -0x89A98941, 0x89AB8941, 0x88AA8842, 0x84AA8142, 0x81AA8143, 0x81AB8141, 0x82AC7D41, 0x7FAA8943, -0x89A98C42, 0x88A98443, 0x86AA8342, 0x80AA8142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14000,20 +14322,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00947869, 0x66A96655, 0x6AA86C56, 0x75A87952, 0x74A97452, 0x61A76859, 0x79AA6652, 0x6BA58357, +0x6AA96E55, 0x6DAA6755, 0x6FAA6554, 0x69A97055, 0x70A96C54, 0x6BA97055, 0x74A77555, 0x7AA57B54, +0x7BA58353, 0x89A58352, 0x7FA57E54, 0x75A66B55, 0x64AB6354, 0x66AB6C53, 0x78A77B54, 0x77A87055, +0x67AA6556, 0x73AA8351, 0x7CA87154, 0x73A67656, 0x67A96057, 0x7BAA7251, 0x6EA98352, 0x7DA97D52, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967961, 0x7FAB8441, 0x83AB7E42, 0x80A98542, 0x7DAB8642, 0x85AA8342, 0x83AA8341, 0x7DAA7C44, -0x7BAA8443, 0x86AA8441, 0x7FAA7F43, 0x7FAB7F43, 0x84A97F43, 0x78AA7F44, 0x84A98742, 0x83A98243, -0x87A78944, 0x87A88444, 0x82A88444, 0x86A88145, 0x7DAA7E43, 0x82AB8341, 0x82AB8541, 0x83AC8141, -0x7FAB7E42, 0x83AA8641, 0x7CAB7C43, 0x83A97F43, 0x7DAB7C43, 0x84AA7F42, 0x82A98043, 0x7FAB8142, -0x8CAA8640, 0x85A98D41, 0x82A98842, 0x83A98643, 0x7EAA8442, 0x81AA7C44, 0x82AA8642, 0x83AA8342, -0x83AB7E42, 0x7AAA7F43, 0x8AA98B41, 0x83A98143, 0x80A98543, 0x87A88443, 0x7FAB7E42, 0x80AA8142, -0x84AA8442, 0x84A98143, 0x82A98543, 0x87AA8842, 0x86A98542, 0x85A98743, 0x88A88942, 0x8AA98941, -0x88AA8842, 0x8BA98A41, 0x86AA7F42, 0x7DAA8343, 0x83AB8242, 0x82AC7F41, 0x82AA8B42, 0x8AA98A42, -0x8BA88143, 0x89A98941, 0x80AB7D43, 0x82A97E43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14042,21 +14360,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x82AA8541, 0x82AA7E42, 0x83A98042, 0x80AA8842, 0x86AA7F42, 0x84AA8242, 0x7EAA7B44, -0x79AA8143, 0x85AB8342, 0x81AA7F42, 0x7CAB7D43, 0x80A98943, 0x81AA7A43, 0x7CAA8143, 0x84A98442, -0x84A88443, 0x83A98243, 0x82A98243, 0x7FAB7E41, 0x81AB8242, 0x82AB8641, 0x87AC8140, 0x80AB8142, -0x7FAA8442, 0x84AA7C42, 0x80AA8242, 0x7DAA7E44, 0x7CAA8142, 0x84AA8341, 0x7FAA7D44, 0x81AC8241, -0x8DA98940, 0x87AA8E41, 0x85A98942, 0x87A98342, 0x7EA98842, 0x82AA7E43, 0x83A98942, 0x84AA8442, -0x7EAB7C42, 0x79AA8543, 0x8DA97F42, 0x7EA97F44, 0x86A98443, 0x81AA8142, 0x84AB8042, 0x81A98543, -0x86A98642, 0x87AA8941, 0x8CA98A41, 0x85A98243, 0x81A98143, 0x82AA8442, 0x85A98842, 0x87A98742, -0x86AA8542, 0x83AA8342, 0x83AA8343, 0x81AA8441, 0x86AB7F42, 0x7FAB8842, 0x88A98642, 0x89A98343, -0x82A98843, 0x8AAA8142, 0x7DAA8143, 0x80AA7C43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x7CA87C53, 0x77AA824F, 0x8CA67652, 0x6DA77E53, 0x7CA88E50, 0x6DAC6353, 0x71A67B55, 0x5EAB7153, +0x7AA86E54, 0x72A78252, 0x79A76E55, 0x5BA97755, 0x7BA76854, 0x6EA87D53, 0x7EA97B52, 0x7EA87054, +0x82A68353, 0x74AA6E52, 0x66AC6453, 0x6BA87255, 0x71A86E55, 0x6AAA6556, 0x65AB6654, 0x63AD6952, +0x64AD6252, 0x64AA6355, 0x68A86458, 0x58A94C5C, 0x55A95C5A, 0x69A96857, 0x66A97256, 0x75AA7652, +0x7CAA7D4F, 0x7BA97751, 0x7DAA7D50, 0x76A97753, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14082,25 +14397,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958660, 0x88AA8241, 0x80AA8043, 0x82AA7A43, 0x81A98642, 0x88AA7D43, 0x82AA8442, 0x7FAA7A44, -0x7AAA8043, 0x82AB8841, 0x86AA7D42, 0x7CAB7C44, 0x7EAA8543, 0x89A98741, 0x7BAB7A43, 0x7DAA7F42, -0x7FAA8042, 0x80AB7F42, 0x7DAB7C43, 0x7CAB7E43, 0x81AB8541, 0x86AC8640, 0x82AB8141, 0x81AA8043, -0x83AA8042, 0x7DAA8442, 0x83AA7944, 0x7CAA7B44, 0x7DAA8442, 0x80AA8442, 0x7DAA8143, 0x80AB8941, -0x8DA98B41, 0x89AA9140, 0x85A98942, 0x87A98442, 0x7FA98A42, 0x83AA7D43, 0x82A98942, 0x84AA8442, -0x7CAB7A43, 0x80AA8B42, 0x84A97F43, 0x7DA98843, 0x88AA7F42, 0x80AA8143, 0x7EA97F43, 0x82A98843, -0x8CAA8A40, 0x8AA98642, 0x83A97D44, 0x7CAA7D44, 0x81AA8442, 0x86A98742, 0x85AA8342, 0x83AA8442, -0x87A98842, 0x89A98542, 0x83AA8541, 0x87AA8142, 0x7FAA8442, 0x84AA8542, 0x88A98A42, 0x7BAA8743, -0x86A98B41, 0x83AB8242, 0x84A97E43, 0x7DAB7F42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00946D6B, 0x69A96957, 0x6EA97653, 0x71A97752, 0x87A96652, 0x68A76F57, 0x7DA86B53, 0x56A97557, +0x7DA77A53, 0x75A98252, 0x7EAC7250, 0x6BA96E55, 0x72A96C55, 0x60AB5F56, 0x5BAA6658, 0x6DA77157, +0x72A66D58, 0x66A76B59, 0x6EA77257, 0x72A87755, 0x75A87155, 0x6DA86E54, 0x6EAB6A52, 0x6EAB7652, +0x6EAA6A54, 0x67A96C56, 0x6EA76E57, 0x6AA95558, 0x62A97A54, 0x74AB6F52, 0x7CA78753, 0x7EAC6752, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14122,16 +14433,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958660, 0x82AA8342, 0x7BAA8443, 0x7EAA8142, 0x83A98443, 0x87AA7D42, 0x83AB8542, 0x7EAA7A44, -0x79AA7D44, 0x80AB8642, 0x87AB8042, 0x80AA7B43, 0x7DAA8243, 0x84A98843, 0x8AA98941, 0x81AB7A43, -0x78AB7743, 0x77AC7942, 0x7BAB8042, 0x83AC8541, 0x86AB8540, 0x82AB8442, 0x81AA7F43, 0x81AA8043, -0x7FAA8343, 0x87AA7F43, 0x77AA7B44, 0x7AAB7B43, 0x87AA8042, 0x80AA7E43, 0x80AB8042, 0x7DAB8C42, -0x8DA98941, 0x87AA9040, 0x86A98942, 0x87A98442, 0x81A98B41, 0x84AA7E42, 0x83A98742, 0x82AA7F42, -0x7CAB7C43, 0x84AA8B41, 0x81A97B44, 0x88A88A42, 0x82AA8342, 0x7CAA7E44, 0x7FA98543, 0x8BAA8840, -0x85A97F43, 0x7CA97B45, 0x7FA98543, 0x88A98942, 0x88A98642, 0x82AA8343, 0x85A98742, 0x8AA98C41, -0x8BA98A42, 0x8AA98B41, 0x87AA8241, 0x83AA8642, 0x85A98742, 0x88A98542, 0x83AA7F43, 0x8AA98542, -0x87A98541, 0x81A98742, 0x80A98043, 0x7DAB8242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14141,9 +14442,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x70A87954, 0x6EAA7A51, 0x92A67452, 0x65A97155, 0x86A8914F, 0x6CAB6B53, 0x6CA76F57, 0x64AA7E53, +0x6CA86755, 0x81A67F53, 0x68A96756, 0x74A86F54, 0x71A87C54, 0x83A88751, 0x75A96C55, 0x77A96B54, +0x5FAC5C54, 0x6FA96F55, 0x69A86F56, 0x76A67455, 0x76A67D53, 0x75A67A54, 0x7DA58054, 0x84A68951, +0x82A77B54, 0x7EA68654, 0x7EA67755, 0x70A76C57, 0x71A76258, 0x64A77458, 0x74A67057, 0x70A76C58, +0x70A76E57, 0x71A77357, 0x6FA77756, 0x76A87454, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14162,16 +14470,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958361, 0x84AA7D43, 0x83AA8242, 0x7CAA8243, 0x87A98342, 0x82AA7F43, 0x83AA8442, 0x7CAA7C45, -0x77AA7D44, 0x7BAB8342, 0x85AA8642, 0x83AA8042, 0x7DAA7F43, 0x80AA8043, 0x84A98842, 0x8AA98B41, -0x8CAA8A40, 0x89AB8741, 0x87AB8541, 0x84AB8441, 0x82AA8242, 0x81AA8144, 0x81AA8143, 0x7FA98243, -0x84AA8242, 0x79AB7545, 0x78AB7A44, 0x78AA8742, 0x84AA8042, 0x80A97B44, 0x83AB8141, 0x7FA98B43, -0x8CA98642, 0x87AA8F40, 0x87A88642, 0x87A98442, 0x81A98B41, 0x82AB7F42, 0x86A88742, 0x81AB7A42, -0x7CAA8343, 0x88AA8441, 0x7DA98243, 0x89A98741, 0x87AA7E42, 0x7CA98144, 0x89A98B40, 0x82AA7D43, -0x79AA7A45, 0x84A98B41, 0x8BAA8841, 0x86AA8542, 0x87A98842, 0x88A98742, 0x87A88742, 0x8AA88E42, -0x8FA88C41, 0x86AB8441, 0x85AA8641, 0x85AA8842, 0x89AA8342, 0x83AA7B43, 0x82A98843, 0x7FAA8842, -0x86AA8142, 0x87A97E43, 0x85AA7C43, 0x7FAA8142, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14184,10 +14482,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0095676A, 0x60AC5F54, 0x67AB6D53, 0x6AAA7652, 0x77AA6B53, 0x68A76059, 0x6FA57E56, 0x75A75F58, +0x4FAA6458, 0x7CA58653, 0x84A78351, 0x85A88251, 0x87A88452, 0x84AA8051, 0x7BAA8051, 0x81A97C52, +0x79AA7D52, 0x7DAA7B51, 0x78AA7852, 0x7BA87E52, 0x78A87953, 0x76A67554, 0x74A77255, 0x6FA76757, +0x63A85D58, 0x5AA95C5A, 0x5EA9585A, 0x65A87655, 0x75AB7450, 0x70AA7353, 0x8EA77A51, 0x7BAB5553, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14202,16 +14506,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x81AA8142, 0x84AA7A43, 0x81A98543, 0x84A98642, 0x80AA7E44, 0x85AB8241, 0x7CA97F44, -0x78AA7F44, 0x7AAB7F43, 0x85AA8642, 0x86AA8641, 0x84AA7F43, 0x80AB8242, 0x81AA8343, 0x81AA8144, -0x80AA7F44, 0x7FAA8043, 0x81AB8243, 0x83AA8143, 0x81A98144, 0x81AA8043, 0x83A88643, 0x89A98342, -0x7BAA7944, 0x7AAA7945, 0x78AB7944, 0x85AA8941, 0x82A98243, 0x7BAA8044, 0x82AB8042, 0x87A98A42, -0x8EA98441, 0x86AA8E40, 0x88A98442, 0x84A98342, 0x80A98B41, 0x7FAB7F42, 0x87A98542, 0x84AB7A42, -0x7CAA8742, 0x89A97E42, 0x7EA98943, 0x87AA8941, 0x7DAA7B44, 0x82A98841, 0x87AA7C42, 0x78AA7D44, -0x84A98A42, 0x8AAA8741, 0x86AA8642, 0x88A98742, 0x86A98743, 0x88A88C43, 0x8EA88D42, 0x89A98442, -0x7FAB7F42, 0x82AA8642, 0x87A98842, 0x87AA8342, 0x83AA7D43, 0x7BAA7E44, 0x82A98044, 0x84AA8242, -0x86AA8741, 0x84A88143, 0x80AA7A44, 0x7BAA7E43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14228,9 +14522,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x76A87F53, 0x66AA7053, 0x86A47E54, 0x6BA87A53, 0x87A87D51, 0x60A86C56, 0x72A86156, 0x7FA86D54, +0x63A77655, 0x7CA66656, 0x63AA6B53, 0x78A77454, 0x80A88151, 0x78A96C53, 0x6FAA6653, 0x5AAC6854, +0x6DA87555, 0x7BA67953, 0x73A67955, 0x6CA86057, 0x5AAB5F57, 0x62A96356, 0x6CA96E55, 0x8EA58D50, +0x88A68C52, 0x7CAA7154, 0x73AB7154, 0x75A97755, 0x73AA7253, 0x72AA7552, 0x78AA7751, 0x7CA97B51, +0x73A96E53, 0x64AB6554, 0x63AA6455, 0x68AA6A54, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14242,16 +14543,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x83A98442, 0x7BAA7B44, 0x84A98742, 0x85A98842, 0x7BA97E44, 0x87AA8241, 0x7EA98344, -0x7BAA7D44, 0x7DAA7C43, 0x83AA8542, 0x85AA8443, 0x87AA8841, 0x84A98543, 0x83AA8143, 0x7FAB7D43, -0x7DAA7D44, 0x7FAB8043, 0x80AA7E44, 0x7AAA7D45, 0x7FA88144, 0x87A88943, 0x89A98341, 0x7EAB7A43, -0x7EAA8243, 0x7CAA7B44, 0x7DAA8742, 0x8BA98342, 0x85A97F43, 0x7BAA8742, 0x84AB8142, 0x8CA98442, -0x8EA98541, 0x86AA8D40, 0x86A98143, 0x83AA8542, 0x80AA8C41, 0x7DAB7E42, 0x89A88443, 0x85AB7A42, -0x82AA8841, 0x81A97E43, 0x86A98742, 0x86AA8242, 0x7BA97F44, 0x89AA8441, 0x7AAA7A44, 0x80A98643, -0x89AA8641, 0x89AA8941, 0x86A98842, 0x8AA88F42, 0x8FA88D42, 0x8AA98342, 0x7DAB7C43, 0x7AAB7943, -0x7CAA8143, 0x87A98A42, 0x89AA8342, 0x83AA8343, 0x78AA7C45, 0x80A98144, 0x7FAA8144, 0x81AA8942, -0x85A98A41, 0x84A98842, 0x81A97E44, 0x7FA97B44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14271,10 +14562,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956D69, 0x68AC6852, 0x6AAE6E50, 0x6DA98052, 0x7BAA7351, 0x67AB5D55, 0x5BA75B5B, 0x5BA76358, +0x63A76C57, 0x6EA66F57, 0x6EA56759, 0x60A85D59, 0x63A76A58, 0x6DA67257, 0x72A67856, 0x7AA77B53, +0x75A97553, 0x6EA87055, 0x67A96456, 0x63A96657, 0x6DA96C56, 0x6BA87056, 0x79A87A53, 0x7CA67C54, +0x79A67257, 0x76A77556, 0x6FA96953, 0x66AC6E52, 0x7AA96E53, 0x71A88552, 0x7BA88651, 0x74AB4F55, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14282,16 +14579,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00948561, 0x88A98042, 0x7CAA8044, 0x83AA8343, 0x82AA8942, 0x7AAA7E45, 0x86AA7F41, 0x80A98544, -0x7EAA7E43, 0x7DAA7D44, 0x7FAA8343, 0x84AA8443, 0x81A98343, 0x86A98942, 0x88A88A43, 0x8AA88643, -0x85A88545, 0x85A78544, 0x83A88344, 0x87A88A43, 0x8AA88642, 0x82AA7D43, 0x7CAB7D43, 0x82A98443, -0x84A98242, 0x7DAA8043, 0x88AA8841, 0x84A98243, 0x86A97C44, 0x81AA8642, 0x84AB8442, 0x8BA98442, -0x88AA8642, 0x85AA8C40, 0x89A98242, 0x81A98642, 0x82A98D41, 0x7DAB7A43, 0x8AA88443, 0x80AA7B43, -0x87AA8641, 0x7EAA7D44, 0x86A98543, 0x85A97B43, 0x7DAA8742, 0x83AA7B43, 0x7BAA8343, 0x86AA8242, -0x87A98C42, 0x8AA98942, 0x8EA99042, 0x8FA88841, 0x7FAB7B43, 0x79AB7944, 0x7BAA7D44, 0x80AA8243, -0x84AA8543, 0x82AA8143, 0x80A98443, 0x82AA7A44, 0x78AA7A45, 0x7CA98045, 0x7DAA8443, 0x87A98542, -0x85A98642, 0x88A88942, 0x89A88743, 0x88A88643, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14315,23 +14602,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x70A77D55, 0x65AA7153, 0x86A47D54, 0x69A97254, 0x8DA77552, 0x6BA76B57, 0x6DA66F55, 0x78A66856, +0x73A67555, 0x6EA86556, 0x6EA97652, 0x74A97552, 0x7DA96A53, 0x6CAA6B54, 0x64AA7153, 0x73A67754, +0x6DA76D57, 0x6CA77356, 0x73A67D54, 0x7CA57355, 0x72A65859, 0x60A76859, 0x59A96857, 0x84A78E51, +0x83A87554, 0x6CA96B55, 0x74A67755, 0x73A67357, 0x6FA66B56, 0x6AA76B56, 0x6CA76956, 0x6DA67356, +0x7DA58354, 0x80A77553, 0x6AAA5C57, 0x5CA86A58, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958461, 0x7DAA7D43, 0x7FAA7F44, 0x83A98542, 0x83AA8242, 0x7BA97E45, 0x85AA7D42, 0x7FA98843, -0x7FA98143, 0x80AA7D43, 0x81AA7D43, 0x7EAA8143, 0x81AA7F43, 0x7FAA8143, 0x83A98343, 0x85A98543, -0x86A88943, 0x8CA88942, 0x87A88643, 0x83A97F43, 0x7CAB7C43, 0x7DAB8042, 0x85A98643, 0x84AA8143, -0x7DAA7D44, 0x82AA8941, 0x86AA8242, 0x83A98443, 0x7DAA7B44, 0x86AB8241, 0x81AA8942, 0x86AA8642, -0x86AA8642, 0x85AA8B40, 0x8DA98442, 0x81A98642, 0x84AA8C41, 0x7FAB7A43, 0x87A98543, 0x7DAB7C43, -0x8AA98341, 0x7EA98643, 0x83A98842, 0x7BAA7A45, 0x85AA8341, 0x7DA98044, 0x86AA8641, 0x82AA8742, -0x86A98743, 0x8CA98D41, 0x88AA8341, 0x7DAB7A43, 0x7BAA7D44, 0x80A98343, 0x85A98442, 0x82AA8143, -0x7DAA7C44, 0x7FAA7F43, 0x81A98143, 0x7AAA7B45, 0x75AA7A45, 0x7BAA7A46, 0x7EAB8342, 0x86AA8541, -0x84A88444, 0x82A88644, 0x85A78444, 0x81A87D44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14358,20 +14642,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00976068, 0x66AE6650, 0x72AC6451, 0x68A97454, 0x77A87353, 0x6FA97652, 0x74A87B51, 0x78A97450, +0x6EAA6D52, 0x6CAC6A52, 0x62AD6852, 0x62AC6A52, 0x6FAD6A50, 0x66AC6D51, 0x6BAB6952, 0x6AAA6F53, +0x70AA7352, 0x6BA86D55, 0x6AA86C57, 0x67A86758, 0x65A86457, 0x5DAA5F57, 0x5DAA6256, 0x64AA6B56, +0x67AA6356, 0x65A96757, 0x6EA77455, 0x7CA67754, 0x6FA77F55, 0x8AA78550, 0x6FA67954, 0x6DAC4856, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x7EAA7E43, 0x7FAA8343, 0x83AA8342, 0x86AA7F42, 0x7DA98044, 0x85AA7B43, 0x7DA98543, -0x85AA8243, 0x85AB8342, 0x80AA8143, 0x80AB7C42, 0x7CAA8143, 0x83AA8342, 0x81AA8143, 0x81AA8143, -0x7FAA8044, 0x7FAA8043, 0x7DAA7B44, 0x7BAA7B44, 0x7FAA8443, 0x85A98543, 0x85A97F43, 0x7CAB7C43, -0x81AB8542, 0x83AA8043, 0x80A98243, 0x81AA7E43, 0x78AA8044, 0x81AB8341, 0x81AA8B42, 0x88AA8541, -0x86AA8642, 0x84AB8841, 0x8CA98342, 0x80A98742, 0x86A98D41, 0x80AB7C42, 0x82A98643, 0x7AAB8142, -0x85A98043, 0x82A98842, 0x85A98143, 0x78AA8443, 0x86A97E43, 0x80A98642, 0x87AA8642, 0x87AA8142, -0x89A98942, 0x83AB8042, 0x7DAB7C42, 0x7FAA8243, 0x82AA8143, 0x7FAA7D43, 0x7DAB7D43, 0x7CAC7E42, -0x7DAB7C42, 0x7CAA7C43, 0x7EA97D44, 0x78AA7346, 0x77AA7945, 0x7FAA7E44, 0x7DAA8244, 0x83AA8441, -0x86AA8641, 0x86AA8441, 0x87AB8641, 0x83AA8442, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14403,18 +14683,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x7EAA7E44, 0x81AA8342, 0x82AA8442, 0x8AAA7D42, 0x7EA98144, 0x86AA7F42, 0x77AA8344, -0x86A98542, 0x83AA8941, 0x87AB8241, 0x7FAA8043, 0x82AA7F43, 0x7BAB7A44, 0x79AB7D44, 0x80A98244, -0x82A98044, 0x7DA98044, 0x81A98244, 0x82AA8443, 0x83AA8143, 0x80AA8143, 0x81AB7F42, 0x81AA8342, -0x81AA7F43, 0x7DAA8044, 0x81A98144, 0x7FAA7644, 0x7CAA8642, 0x83AB8142, 0x87A98A42, 0x87AB7E42, -0x83AA8643, 0x85AA8741, 0x8EA98442, 0x7FAA8443, 0x87A98F41, 0x80AB7D43, 0x80A98544, 0x7AAB8542, -0x83A97C44, 0x89A98542, 0x88A97B44, 0x80AA8742, 0x80A98143, 0x86AA8841, 0x86AA8542, 0x81AA8842, -0x82AA7E43, 0x7AAB7B42, 0x7FAA8243, 0x81AB7D43, 0x7DAB8042, 0x81AA8242, 0x81A98443, 0x81A98243, -0x82AA7F43, 0x7FAA7D44, 0x7AAA7745, 0x72AB7445, 0x72AB7446, 0x77AB7D44, 0x7CAB8143, 0x80AB7D43, -0x80AA8044, 0x82AB8043, 0x7FAA8044, 0x81AA8144, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6EA67357, 0x64A87054, 0x88A47F53, 0x6CA77355, 0x89A86853, 0x6EA56958, 0x63A67856, 0x66A86A56, +0x72A47A57, 0x5AAA6B54, 0x7FA76F52, 0x7BA97D51, 0x65A96856, 0x68AB6F52, 0x73A57257, 0x63A76258, +0x7AA58D53, 0x98A49550, 0x87A58C53, 0x8EA48653, 0x86A76A54, 0x78A56957, 0x6AA68154, 0x78A76A56, +0x65A67357, 0x73A66C56, 0x67A96254, 0x63A86B55, 0x73A67B53, 0x7DA87A51, 0x7AAA7C51, 0x77A97852, +0x7BA87852, 0x7AA77853, 0x74A87453, 0x6DA86C55, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14442,22 +14720,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E62, 0x7DAA7D43, 0x80AA8143, 0x7FAA8542, 0x86AA7E42, 0x7EA97E45, 0x85A98442, 0x79AA7844, -0x87A88C42, 0x89A98841, 0x87AA8741, 0x87AB8641, 0x87AB8641, 0x83AA8342, 0x82AA8342, 0x84AA8342, -0x83AA8641, 0x88AA8841, 0x88AA8841, 0x85AA8342, 0x81AA8242, 0x83AA8242, 0x82AA8143, 0x81AA7F43, -0x7DAA7F44, 0x80A97C44, 0x7DAA7D44, 0x7AAA7945, 0x83AB8042, 0x84AB7D42, 0x8BA98742, 0x89AB7A42, -0x81AA8543, 0x81AA8541, 0x8FA98342, 0x7DAA8243, 0x8AAA8F40, 0x80AA7F42, 0x80A98143, 0x7CAA8742, -0x7FAA7E43, 0x88A98742, 0x7EAA7D44, 0x83A98142, 0x81A98643, 0x89AA8B41, 0x83AA7F43, 0x84AA7F43, -0x7BAB7943, 0x81AA8143, 0x7EAA8143, 0x84A98343, 0x84A98642, 0x84A98543, 0x86A88843, 0x8AA98C41, -0x88A98642, 0x87A98A42, 0x87A98443, 0x81A98044, 0x82A97B44, 0x7CA98344, 0x83A98144, 0x81A98044, -0x81A98144, 0x82A98344, 0x81A98443, 0x84AA8343, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00956D69, 0x6FAD794E, 0x74A86E53, 0x70A77655, 0x75A87754, 0x7AA88552, 0x8AA68F51, 0x89A58653, +0x8AA58852, 0x87A58853, 0x87A48354, 0x7FA58054, 0x7DA67C54, 0x75A67556, 0x75A66C57, 0x68A66258, +0x5EA95957, 0x57AB5E56, 0x5DAB5B56, 0x60AB6255, 0x61AA6956, 0x6AA96755, 0x66A96957, 0x6AA77456, +0x72A76F57, 0x78A67455, 0x74A67056, 0x75A77854, 0x7FA88950, 0x85A86F51, 0x83A67A53, 0x6BAD4D55, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14482,25 +14756,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x7BAB7A42, 0x7EAB8042, 0x7FAA8342, 0x84AA7F43, 0x7EA97B45, 0x81A88743, 0x83A97A44, -0x74AA7C44, 0x86A88A43, 0x89A98942, 0x8AAA8841, 0x8AA98942, 0x89AA8841, 0x86AA8841, 0x88AA8642, -0x85AB8642, 0x86AA8642, 0x84AA8442, 0x86AA8742, 0x84A98542, 0x84A98343, 0x83A98243, 0x81A97E44, -0x7CAA7A45, 0x79AA7945, 0x7AAA7845, 0x7DAA8343, 0x83AB8341, 0x81AA8343, 0x8DA98541, 0x86AB7742, -0x84A98643, 0x7DAB8442, 0x8DA88642, 0x7EA98342, 0x8BA98940, 0x7CAA7F43, 0x82A97D44, 0x81AA8542, -0x7FA98143, 0x85A88A42, 0x78AB8143, 0x83A98343, 0x85A98941, 0x88AA8741, 0x81AA8044, 0x7FAB7842, -0x7CAA8343, 0x80AA8443, 0x88A98742, 0x84A98243, 0x7EA98344, 0x84A98443, 0x82A98443, 0x8AA98E42, -0x88A88A42, 0x8AAA8642, 0x82AA8044, 0x81AA8044, 0x81AB8044, 0x7FAB8044, 0x80AA8044, 0x82AB8243, -0x81AB8143, 0x80AB8342, 0x83AA8442, 0x83AA8342, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x69A57657, 0x64A87854, 0x84A37954, 0x6AA67A56, 0x79A86953, 0x65A4695A, 0x71A66757, 0x6FA56A57, +0x7EA75D55, 0x6BA67C53, 0x72A77C53, 0x6EA95556, 0x68AA7451, 0x73A77E53, 0x5BA86457, 0x8DA38F53, +0x81A69051, 0x79A87652, 0x6DA77555, 0x90A67E51, 0x76A67653, 0x64A67756, 0x7DA66656, 0x5FA77956, +0x6AA96155, 0x61A86456, 0x62A96855, 0x6BAA6E54, 0x67A96453, 0x6AA97253, 0x7BA68153, 0x7EA67A54, +0x73A77055, 0x6FA67157, 0x76A37F57, 0x79A46D58, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14522,16 +14793,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967B61, 0x7AAB7E42, 0x7EAC7D42, 0x81AB8841, 0x87AA8042, 0x7EA97B45, 0x7CA98244, 0x83A88543, -0x82A87D45, 0x77AA7845, 0x7CA98443, 0x88A98B42, 0x8DA88D41, 0x8FA99040, 0x8FA98E40, 0x8DA98B40, -0x8AA98A40, 0x88A98941, 0x8AAA8641, 0x86A98542, 0x85A98443, 0x80A97F45, 0x80AA7C44, 0x7BAB7A44, -0x7AAA7C44, 0x7CAA7B45, 0x7BAA7F44, 0x83AB8042, 0x81AB8641, 0x7CAA8543, 0x8BA98541, 0x85AC7442, -0x84A98742, 0x7DAA8143, 0x8AA88643, 0x7FAA8542, 0x8BAA8641, 0x7BAA8043, 0x82AA7B43, 0x87AA8042, -0x7CAA8443, 0x86A87D43, 0x7CAA7F43, 0x84A98342, 0x88AA8841, 0x84AA7F43, 0x81AA7D43, 0x78AB7F42, -0x80A98342, 0x86A98542, 0x83A98543, 0x7FAA7B44, 0x78AB7A44, 0x7CAA7C44, 0x80AA8043, 0x8DA88D41, -0x8BA98D42, 0x86AA8243, 0x83AB8142, 0x83AA8443, 0x83AA8242, 0x82AA8342, 0x84AB8442, 0x86AA8642, -0x82AA8142, 0x7CAB7D43, 0x7CAA7C43, 0x7EAB7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14541,10 +14802,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00966869, 0x72A87753, 0x78A57756, 0x80A78652, 0x78AA6F52, 0x73A87C53, 0x81A67954, 0x6EA76358, +0x67A86956, 0x66A86B56, 0x6CA86D55, 0x6BA76D55, 0x6DA76D56, 0x66A86856, 0x65A76757, 0x66A86C56, +0x6CA76A57, 0x6AA76257, 0x66A86057, 0x67A76F56, 0x74A77A53, 0x84A68A50, 0x8AA8894D, 0x85A8884E, +0x81A97E4F, 0x7FAA7F4F, 0x7DAA7E4F, 0x80A9804F, 0x7DA97850, 0x75A58453, 0x76A47157, 0x6FAC5255, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14562,16 +14829,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x7EAB7E42, 0x7FAC8141, 0x80AA8742, 0x86AA8242, 0x7EAA7A44, 0x79A97946, 0x79A97C44, -0x7CA97F44, 0x80A88144, 0x80A97E44, 0x7BAA7945, 0x7CA97F44, 0x80A98244, 0x82A98543, 0x86A98542, -0x83AA8342, 0x81AA8143, 0x7DAA7D44, 0x7CAA7D44, 0x80AA7F43, 0x7FA98144, 0x84AA8542, 0x86A98642, -0x85A98243, 0x84A98343, 0x81AA7F42, 0x7DAB8142, 0x85AA8042, 0x82AA8942, 0x86A98A41, 0x83AB7443, -0x85A98642, 0x7CAA8043, 0x88A88943, 0x81A98443, 0x8AA98442, 0x7CA98144, 0x82A97B43, 0x89A97D43, -0x81A98543, 0x89A97744, 0x80AA8242, 0x84A98442, 0x87AA8541, 0x7EAA8243, 0x7EAB7842, 0x81AA8143, -0x86A98142, 0x84A88243, 0x7CAA7D44, 0x7BA97A44, 0x75AA7746, 0x7BAA7D44, 0x7DAA7E43, 0x8CA98C41, -0x8EA98642, 0x84AA8143, 0x7FAA8043, 0x83A98743, 0x87A98642, 0x83A98443, 0x82A97F43, 0x7DAA7D44, -0x7CAA7C44, 0x7BAA8143, 0x86A98842, 0x89A98743, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14585,9 +14842,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x6FA56958, 0x61A57457, 0x72A46E57, 0x70A67755, 0x69A86256, 0x6DA46858, 0x71A56857, 0x65A47858, +0x68A86556, 0x7CA67A52, 0x77A86952, 0x4EA86D59, 0x7AA87052, 0x6FA75E56, 0x80A38256, 0x83A76953, +0x71A77C53, 0x85A87053, 0x7CA87453, 0x86A68551, 0x74A66057, 0x79A67653, 0x5FA67058, 0x64A95C57, +0x57A85B59, 0x63AA6955, 0x69A86C55, 0x78A76F54, 0x68A86357, 0x65A6625A, 0x5DA76958, 0x73A48555, +0x8BA18B55, 0x7EA56D56, 0x64A76857, 0x7AA58055, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14602,16 +14866,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967F60, 0x7EAC8141, 0x80AB8342, 0x83AA8942, 0x89AA8641, 0x82AB7F42, 0x7CAC7C42, 0x7BAB7C44, -0x7AAA7C45, 0x7DA97F44, 0x80AA8143, 0x80A97F43, 0x7EAA7F43, 0x7EAA8043, 0x81A98244, 0x83A98543, -0x84AA8442, 0x81AA8543, 0x87A98842, 0x88A98742, 0x86A88743, 0x85A88544, 0x83A88344, 0x84A88544, -0x81A98243, 0x81AA7E42, 0x7BAB7B43, 0x80AA8442, 0x83A97F44, 0x8AA98D40, 0x82A98A42, 0x81AB7143, -0x81A98643, 0x7DAA8243, 0x8AA88642, 0x7FAA8243, 0x8DA88341, 0x7FA97F44, 0x80A98143, 0x85A97E43, -0x83A88343, 0x80A97D43, 0x80AA8342, 0x83AA8342, 0x87AA7F42, 0x7FAA8043, 0x7CAA8243, 0x83A98443, -0x80A98044, 0x80A98343, 0x83A98642, 0x86A98342, 0x82A87845, 0x7BA97E45, 0x78AA7E44, 0x8AA98E41, -0x89A98343, 0x7FAA7F43, 0x83A98443, 0x82A98244, 0x81A97F44, 0x7FA97F43, 0x80A97E43, 0x80A98343, -0x86A88943, 0x88A98442, 0x7EAA7944, 0x79AA7F44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14628,10 +14882,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0094696A, 0x72A37658, 0x78A76B55, 0x63A86C55, 0x6AA86257, 0x5BAA6257, 0x67AB6853, 0x68AA6456, +0x63A96157, 0x66AA6B53, 0x6FA97253, 0x72A97553, 0x71AA7253, 0x73A97453, 0x7AA87854, 0x76A77D54, +0x80A77E53, 0x77A67656, 0x76A47658, 0x75A36D59, 0x63A55E5C, 0x5EA6635B, 0x6CA67057, 0x70A76A56, +0x61A86657, 0x6DA77056, 0x70A57156, 0x7BA28554, 0x8BA18D53, 0x89A27655, 0x72A77F53, 0x74AB6852, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14642,16 +14902,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00967B60, 0x7DAC7D41, 0x82AB7C42, 0x7EAA8343, 0x84A98342, 0x81AA8442, 0x83AA8641, 0x85AA8341, -0x80AB8042, 0x80AB7F42, 0x7CAB7E42, 0x7CAB7F42, 0x81AC7F41, 0x7DAB8042, 0x7FAB7F42, 0x7FAB8143, -0x81AA8242, 0x7FAA8043, 0x7FAA7F44, 0x7EAA7E44, 0x7DAA7C44, 0x7AAA7B44, 0x7AAB7C44, 0x7CAA7F43, -0x7DAA7C44, 0x7DAA7E44, 0x80AA8343, 0x86A98443, 0x81A98743, 0x8CA98941, 0x81A98543, 0x80AB7143, -0x80A98443, 0x7DAA8142, 0x88A88842, 0x80AA8243, 0x8EA98142, 0x80A98144, 0x7EA98543, 0x7EA97F43, -0x81A98644, 0x77AB7F44, 0x81A98542, 0x84AA8641, 0x82AA7C43, 0x7FAB7B42, 0x80A98643, 0x84A97D44, -0x7BA98443, 0x86A88C43, 0x8DA78D42, 0x8EA88B41, 0x8BA97E43, 0x80A98044, 0x7BA98643, 0x86A98543, -0x84A97E43, 0x7FA88444, 0x84A98143, 0x7FAA7D43, 0x7BAA7C43, 0x7FA98643, 0x8BA88C42, 0x8AA98742, -0x84AA7F43, 0x7CAA7D44, 0x7FAA8343, 0x86A98642, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14672,9 +14922,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x69A65A59, 0x6BA36E58, 0x6FA66E56, 0x73A57056, 0x62A65F59, 0x6FA37057, 0x5DA66559, 0x64A56C59, +0x65A77954, 0x7CA77851, 0x66A94F58, 0x6CA67055, 0x78A66855, 0x6BA47F56, 0x7FA66856, 0x6AA56858, +0x6BA47057, 0x7CA57554, 0x6FA76D55, 0x79A66F54, 0x62A47F55, 0x75A66B56, 0x6CA75B57, 0x5AA96057, +0x6AA86854, 0x6DA77553, 0x6BA76357, 0x63A46A5B, 0x71A57A55, 0x85A18E55, 0x8DA38554, 0x76A76755, +0x5FA57159, 0x7DA37457, 0x65A75F56, 0x6BA87254, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14682,16 +14939,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958260, 0x80AC7F41, 0x81AA8442, 0x82AA8242, 0x82AA8043, 0x82A98443, 0x83A98643, 0x85A88343, -0x84A78544, 0x82A88444, 0x88A88644, 0x83A88045, 0x80A78046, 0x7EA87F46, 0x7FA88046, 0x81A88145, -0x80A87F45, 0x7BA87C46, 0x7DA97B45, 0x7BA97C45, 0x7CAA7A45, 0x7EA98044, 0x82AA8442, 0x85A98642, -0x88A98542, 0x84A98343, 0x84A98543, 0x84A98244, 0x86A98A42, 0x8FA98441, 0x84A98542, 0x7EAB7144, -0x80A88343, 0x7CAA8143, 0x8BA88842, 0x80A98343, 0x8BA97E42, 0x81A87E44, 0x7CA88544, 0x7DAA7F43, -0x82A88544, 0x79AA7F43, 0x87A98142, 0x86AA8741, 0x7DAA7E43, 0x7EAB8142, 0x83A88244, 0x7CA97C45, -0x86A88D42, 0x91A89041, 0x8AA88D42, 0x8DA88A42, 0x8AA97F43, 0x85A87E44, 0x7FA98843, 0x85AA7F43, -0x7DA98343, 0x83A88043, 0x7EAA7C43, 0x7CAA7F43, 0x82A98642, 0x87AA8541, 0x85AA8642, 0x84AA8442, -0x86A98442, 0x85A98542, 0x83AA8343, 0x80AA7F43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14715,23 +14962,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0092696D, 0x6DA66357, 0x5DA75C5A, 0x56A84E5B, 0x5FA96657, 0x5CA95958, 0x64A86B55, 0x74A87152, +0x6BAA6A53, 0x69A86954, 0x6BA96853, 0x67A76756, 0x6CA47357, 0x75A27258, 0x75A17958, 0x7CA07C58, +0x7BA08259, 0x80A18257, 0x79A57456, 0x6FA86E54, 0x6BA86454, 0x5DA86056, 0x64A66F57, 0x72A27A59, +0x75A36D59, 0x76A37758, 0x70A56A57, 0x66A66858, 0x62A76058, 0x60A76957, 0x69A67856, 0x79AA7251, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958061, 0x81AC8540, 0x82AA8142, 0x82A98443, 0x83AA8543, 0x85A98A42, 0x8CA98E41, 0x8BA98A42, -0x8CA98B42, 0x8AA88B42, 0x8AA88943, 0x87A88843, 0x86A98642, 0x83A98344, 0x83A98044, 0x7EA97C44, -0x7AAA7844, 0x77AB7A44, 0x7AAB7943, 0x7BAB7C43, 0x7BAA7E43, 0x7FAA7D43, 0x7DAA7E44, 0x7FA98343, -0x82A98144, 0x85A98343, 0x83A98143, 0x83AA8543, 0x88A98B41, 0x8AA98142, 0x89A88643, 0x80AB7343, -0x7FA88344, 0x7DA98442, 0x8CA88542, 0x81A88343, 0x87AA7D42, 0x7FA87F44, 0x7FA98243, 0x7FA97F44, -0x83A97F44, 0x7EAA8342, 0x85A98242, 0x86AA7E42, 0x7DAB7E43, 0x80AA8342, 0x85A97B44, 0x7DA98C43, -0x91A78B42, 0x8AA88E42, 0x8CA98C42, 0x90A88742, 0x84A98143, 0x82A87B44, 0x8AA98542, 0x7FA97C44, -0x84A98243, 0x7DAB7B43, 0x7BA97D44, 0x81A98242, 0x82AA8143, 0x80AA7F42, 0x83AA8542, 0x88A98841, -0x86A98542, 0x84A98343, 0x80A97F43, 0x80A88244, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14759,19 +15002,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x81AB8741, 0x82A98343, 0x85A98743, 0x8AAA8941, 0x8AAA8A41, 0x89A98C41, 0x8DA88A42, -0x8CA88A42, 0x88A98842, 0x86A98443, 0x83A98043, 0x80A98144, 0x84A98443, 0x86A88443, 0x83A98343, -0x81A98043, 0x81A98243, 0x84A98142, 0x82A98342, 0x82AA8441, 0x85AA8541, 0x86AA8641, 0x85AB8441, -0x83AB8241, 0x82AB8441, 0x85AB8641, 0x87AA8841, 0x87AA8441, 0x83A98342, 0x86A88243, 0x82AB7542, -0x7EA88344, 0x7CA98443, 0x89A88543, 0x7FA88544, 0x85AA7F43, 0x7DA87E44, 0x82A97E44, 0x81A87F44, -0x87A97A44, 0x7FA98642, 0x82A98642, 0x80AA7744, 0x7EAA8341, 0x82A98742, 0x79AA7D44, 0x8DA78E42, -0x88A98E41, 0x85AA8442, 0x80AA8343, 0x8EA88741, 0x84A98442, 0x7CA98443, 0x86A97D44, 0x7BA98543, -0x7FAA7B43, 0x7BA97D44, 0x7BAA7E43, 0x7FAA8143, 0x7EAA7D43, 0x7FAA8242, 0x86A98842, 0x86A98543, -0x83A98143, 0x81A98144, 0x84A78744, 0x85A88044, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x66A56559, 0x66A2695B, 0x67A66F57, 0x76A56857, 0x55A56C59, 0x6CA36359, 0x64A6575A, 0x6FA56557, +0x6EA57E53, 0x73A96E51, 0x55A66859, 0x71A57056, 0x62A57457, 0x6DA56F58, 0x5FA5525B, 0x68A46258, +0x5BA75B59, 0x78A56F55, 0x64A57757, 0x76A46556, 0x83A37155, 0x75A75758, 0x5DA75959, 0x61A76D55, +0x7AA66A55, 0x66A66759, 0x72A48355, 0x8AA28254, 0x79A36E57, 0x60A75B59, 0x64A37A58, 0x7EA56B54, +0x5AA85F56, 0x5FA96355, 0x6BA86D53, 0x6FA76356, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14803,19 +15043,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957E61, 0x82AA8442, 0x85A88443, 0x88A98A42, 0x84AB8142, 0x83A98642, 0x88A98542, 0x81A97C44, -0x7EAA7E44, 0x7DAA7F44, 0x7FAA8043, 0x7FAA8043, 0x80AA8043, 0x7DA97E44, 0x7DA97E44, 0x7DA97F44, -0x7FA97F44, 0x7FA97C44, 0x7DA97B44, 0x7EA98143, 0x83A98542, 0x89A98C41, 0x8CA98B40, 0x89AA8B40, -0x88A98741, 0x87AA8741, 0x86AA8741, 0x87AA8741, 0x86AA8441, 0x83A88A42, 0x83A88144, 0x81AB7543, -0x82A88144, 0x7CA98343, 0x86A88144, 0x7EA98543, 0x83AA7D42, 0x7EA87C44, 0x82A97D44, 0x80A88244, -0x85AA7B43, 0x80A88A42, 0x82AA8541, 0x79AA7944, 0x81AA8341, 0x85A87E44, 0x7BA98A43, 0x8AA98A42, -0x8BAA7E42, 0x82AA8242, 0x84A98542, 0x8BA88841, 0x81A97F43, 0x7BA88644, 0x7FA97A44, 0x7FA97D44, -0x7AAA7944, 0x7BA97944, 0x7CAA7E43, 0x7EA97E43, 0x80A98242, 0x83A98343, 0x80A97E45, 0x7EAA7F43, -0x84A88643, 0x88A78944, 0x87A88343, 0x7EA97C44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x0093626B, 0x5CA6525B, 0x47A9535A, 0x6AA86356, 0x62A77653, 0x76A86C53, 0x5CA85859, 0x5FA76857, +0x6AA56657, 0x63A36659, 0x65A26F59, 0x77A27756, 0x77A36F57, 0x6BA37058, 0x72A37657, 0x72A37756, +0x78A27A56, 0x7AA27857, 0x7AA18057, 0x75A17359, 0x79A37956, 0x83A38355, 0x82A47955, 0x76A56E55, +0x66A76655, 0x6FA27558, 0x70A26A5A, 0x71A37B57, 0x6DA56258, 0x62A5645A, 0x5CA56D59, 0x77A76D52, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14842,23 +15078,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00958161, 0x82A88743, 0x85A88743, 0x84AA8042, 0x80AA8043, 0x80A97F43, 0x7EAA7D43, 0x7EAB7F43, -0x81AB7F43, 0x7DAA7E43, 0x7DAA7C44, 0x7BAA7D44, 0x7CAA7A44, 0x7AAB7D43, 0x7EAA7D43, 0x7DAA7E44, -0x7EAA7D44, 0x7CAA7D45, 0x7EA98044, 0x7FA97F45, 0x7FA97F44, 0x81A98343, 0x81AA7F42, 0x81A98543, -0x87A88942, 0x8BA88A42, 0x8AA98A42, 0x88A98A41, 0x88A88942, 0x8BA78B42, 0x81A88344, 0x81AB7743, -0x81A87E44, 0x7BA88344, 0x82A88144, 0x81A98443, 0x7EA97C44, 0x80A87E44, 0x81A87E44, 0x7DA88444, -0x7EA97D43, 0x86A98542, 0x84AA7F42, 0x73AA8045, 0x85AA8142, 0x81A97943, 0x88A88944, 0x89A97E42, -0x82A98642, 0x8AAA8142, 0x86AA8342, 0x8AA88942, 0x83A97B44, 0x85A98342, 0x7BA98144, 0x7CAA7A44, -0x77A97944, 0x7CAB7E43, 0x7FA98043, 0x84A98143, 0x7EAA7C44, 0x7DA97B45, 0x79A97F44, 0x83A88A43, -0x8CA78C43, 0x87A88044, 0x7CA97E44, 0x85A88843, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5DA46859, 0x66A26F5A, 0x6DA57257, 0x6FA56057, 0x60A56359, 0x65A36659, 0x5AA4705A, 0x62A66956, +0x76A56C54, 0x66A84E58, 0x68A47157, 0x6AA56058, 0x75A46B57, 0x60A64E59, 0x58A75659, 0x69A37158, +0x68A45A5A, 0x7AA47055, 0x6DA67755, 0x65A37856, 0x63A4655A, 0x5AA65E59, 0x60A76856, 0x7CA56D55, +0x66A46C5A, 0x76A48B54, 0x87A27455, 0x67A75359, 0x5EA36F5A, 0x6EA55F58, 0x5BA76456, 0x69A66A56, +0x68A86555, 0x67A76056, 0x4DA54E5D, 0x61A36C5A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14882,16 +15115,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x82A88444, 0x85A97F43, 0x7CAA8043, 0x7FAA7C44, 0x79AB7C44, 0x7EAB7E43, 0x7EAA7C43, -0x7CAA7B44, 0x7DAA7F42, 0x81AA8242, 0x82AA8342, 0x82AA8243, 0x83AA8343, 0x85AA8542, 0x84A98743, -0x87A98742, 0x84A98344, 0x83A88444, 0x84A88045, 0x7CA87A46, 0x7AA97C45, 0x7FA98144, 0x81AA7F43, -0x7CA97D44, 0x80A98143, 0x81A98243, 0x86A78A43, 0x8CA78D42, 0x8BA78443, 0x82A98742, 0x83AB7E42, -0x7EA87C45, 0x7DA88344, 0x81A87F44, 0x82A98343, 0x7CA97B44, 0x81A87F44, 0x7FA87E44, 0x7BA88344, -0x7AAA7F43, 0x89A98242, 0x83AA7643, 0x77AA8144, 0x83A98443, 0x79A98443, 0x89A88743, 0x7EA98144, -0x83A98942, 0x89A98642, 0x82AA7F43, 0x87A88643, 0x81A88243, 0x86A87E44, 0x80A97C44, 0x79A97A44, -0x7AAA7F43, 0x80AA7F43, 0x82A98343, 0x80A97D44, 0x7BA97B45, 0x7FA98343, 0x88A78C44, 0x8CA88A43, -0x87A88044, 0x7EA98244, 0x88A78644, 0x80A97E43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14899,10 +15122,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00944D6D, 0x48A85E59, 0x64A75B57, 0x73A67C52, 0x6AA75758, 0x60A66558, 0x70A47055, 0x62A46858, +0x72A37A56, 0x6EA46558, 0x61A3605B, 0x60A56459, 0x6AA56857, 0x65A46758, 0x66A46358, 0x66A56259, +0x5DA66259, 0x6BA66D57, 0x69A36C58, 0x67A1695A, 0x72A17159, 0x6CA27158, 0x70A27657, 0x7EA38254, +0x7BA37656, 0x72A66756, 0x61A66D57, 0x81A17A56, 0x6AA37A57, 0x74A56456, 0x58A4575D, 0x54A45E5D, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14922,16 +15151,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947F62, 0x81A88144, 0x7DA97D43, 0x7CA97A44, 0x78AA7845, 0x7BAA7B44, 0x79AA7945, 0x7BAA7F43, -0x81AA8142, 0x83AA8342, 0x83AA8242, 0x82AA8142, 0x80AB7E42, 0x7BAB7B43, 0x7CAB7D43, 0x7BAB7C42, -0x7CAB7D42, 0x7DAB7D42, 0x7CAA7D42, 0x7EAA7F43, 0x82A98143, 0x82A88445, 0x84A88244, 0x81A88245, -0x82A88244, 0x82A97F43, 0x7CA97C44, 0x81A98143, 0x82A98243, 0x81A98143, 0x7FA98543, 0x83AB7C42, -0x7EA97845, 0x7FA88145, 0x81A98143, 0x83A98143, 0x7CA97A45, 0x81A88144, 0x7AA97D45, 0x7CA97F45, -0x7DA98543, 0x86A98541, 0x7DAA7445, 0x80A88143, 0x84A97E43, 0x7FA88744, 0x87A97E43, 0x7FA87E44, -0x7FA88144, 0x86A88343, 0x81A98043, 0x85A98142, 0x7BA88743, 0x83A97F44, 0x80A97944, 0x78AA7A44, -0x7FAA7E43, 0x80A98342, 0x7FA97C44, 0x7CA87F45, 0x82A88543, 0x8AA78D43, 0x8DA78A43, 0x84A97D43, -0x7AA88245, 0x87A88344, 0x7DA97A44, 0x7FA98242, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14943,9 +15162,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x62A2605B, 0x6FA26A59, 0x6EA36F58, 0x61A55959, 0x61A46859, 0x58A45E5B, 0x69A4685A, 0x6EA37655, +0x70A56B55, 0x57A55B5B, 0x6BA46558, 0x62A37A58, 0x69A5505A, 0x4DA5595B, 0x5FA46659, 0x74A56857, +0x68A4525B, 0x78A55E56, 0x77A37255, 0x74A16059, 0x5EA5535D, 0x5DA66558, 0x72A47456, 0x69A36E59, +0x7EA48854, 0x79A26E58, 0x51A5565C, 0x6DA46158, 0x55A66457, 0x5FA65E58, 0x67A76656, 0x65A76A55, +0x5AA75359, 0x53A3645C, 0x6FA0655C, 0x67A1715A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14962,16 +15188,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947F62, 0x80A97C44, 0x7AA97945, 0x77AA7446, 0x7BA97D44, 0x7AAA7844, 0x7CA97F43, 0x83AA8142, -0x7FAA7F42, 0x7FAA7F43, 0x7FAA7E42, 0x7EA97E43, 0x80A78344, 0x83A78245, 0x83A78544, 0x86A78645, -0x86A68944, 0x88A78844, 0x85A98343, 0x81AA8143, 0x7FAA7C42, 0x79A97B44, 0x7DA88144, 0x82A78545, -0x84A88045, 0x84A88444, 0x81A87F44, 0x7DA97E44, 0x7CA97B44, 0x7BA97F44, 0x7FA98443, 0x85AA8241, -0x7DA97845, 0x80A87E45, 0x7FA98144, 0x82A98043, 0x78A97E45, 0x81A87E44, 0x7BA97944, 0x80A87D44, -0x80A98842, 0x84AA8541, 0x79A97944, 0x80A98043, 0x83A87C44, 0x87A88144, 0x7EA97C44, 0x78A87A45, -0x78A87B44, 0x84A88144, 0x7FA88443, 0x87A88143, 0x82A88643, 0x80A98044, 0x79A97B45, 0x79AA7F43, -0x7FA98442, 0x82A97E43, 0x7AA98045, 0x83A88643, 0x8AA78943, 0x88A78343, 0x80A97D43, 0x7EA88244, -0x84A87E44, 0x79AA7A44, 0x7DAA7D43, 0x7EAA7E42, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -14986,10 +15202,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00936B6A, 0x5DA65B57, 0x78A56B54, 0x58A5595B, 0x61A46D59, 0x65A25D5B, 0x6FA37A55, 0x6EA35F59, +0x62A35E5B, 0x61A75D56, 0x5FA45D5A, 0x5BA2575D, 0x59A3575D, 0x58A3595D, 0x5CA25F5D, 0x64A1695B, +0x76A07C57, 0x7DA17555, 0x70A46656, 0x67A46B57, 0x71A37556, 0x69A1685A, 0x77A07458, 0x75A26659, +0x6CA47556, 0x74A27A57, 0x6FA46A58, 0x64A76656, 0x7BA36E56, 0x75A37755, 0x63A5535B, 0x59A54A5C, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15002,16 +15224,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947C62, 0x7BA97C44, 0x7AA97445, 0x74A97D44, 0x7FAA7943, 0x7DAA8242, 0x84AA8142, 0x7CAA7B43, -0x7CA97C44, 0x7EA97E44, 0x7FA87F44, 0x7EA87E44, 0x7FA87F44, 0x80A88344, 0x81A88044, 0x7EA88044, -0x7FA78144, 0x81A78245, 0x86A78A43, 0x89A78944, 0x87A88744, 0x85A88144, 0x7EA97D43, 0x7DA97E43, -0x7FA88344, 0x84A87F45, 0x81A78745, 0x84A87D44, 0x7CA97945, 0x78AA7A45, 0x79A98243, 0x83AA8042, -0x7DA87D44, 0x7DA77E45, 0x7EA88144, 0x84A87E44, 0x76A98045, 0x80A87C44, 0x7DA97745, 0x81A97D44, -0x80A98742, 0x83AA8041, 0x77A97E45, 0x82A88143, 0x7CA98344, 0x80A88144, 0x7AA87546, 0x7EA87C44, -0x79A97945, 0x84A88143, 0x7DA88443, 0x84A87D44, 0x89A78243, 0x83A97744, 0x7AA97845, 0x7BA98043, -0x85A97F43, 0x7EA97E44, 0x82A88943, 0x8BA78843, 0x85A78144, 0x7BA97945, 0x7DA88544, 0x87A88043, -0x78AA7B44, 0x7BAA7C43, 0x7FA98042, 0x81A97C43, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15030,9 +15242,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x62A0675E, 0x6DA46858, 0x65A45A5B, 0x5AA45D5A, 0x69A25B5B, 0x63A45B59, 0x6BA36959, 0x7BA27654, +0x70A55A58, 0x53A36F5B, 0x69A45959, 0x6DA35D59, 0x4DA55F5B, 0x6EA27756, 0x71A26859, 0x66A37258, +0x65A35F5B, 0x6EA46C56, 0x75A17956, 0x67A4585B, 0x4DA4605B, 0x60A47857, 0x68A36C5A, 0x77A38056, +0x6FA26A58, 0x53A4635B, 0x61A5545A, 0x6AA26A58, 0x63A66257, 0x68A86654, 0x69A65D58, 0x5AA55C58, +0x64A1685A, 0x67A0705A, 0x71A16C5B, 0x60A2565E, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15042,16 +15261,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947C61, 0x79A97545, 0x71AA7645, 0x7FA97C43, 0x7CA98442, 0x84AA8042, 0x79A97845, 0x7BA97E44, -0x7FA87D44, 0x7CA77D45, 0x7DA78145, 0x84A78544, 0x84A88143, 0x7FA88144, 0x82A88444, 0x82A88544, -0x85A78544, 0x85A78544, 0x85A68844, 0x83A78344, 0x85A88544, 0x89A78943, 0x88A88543, 0x84A88143, -0x7DAA7D43, 0x81A78344, 0x81A77F45, 0x82A88644, 0x80A87C44, 0x7CA97C45, 0x79A88044, 0x84A98042, -0x7CA87F44, 0x7BA77F46, 0x80A88144, 0x83A97D43, 0x79A87E45, 0x7DA87B45, 0x7BA87C45, 0x7EA97D44, -0x83A88142, 0x81AA7943, 0x7AA88344, 0x81A88044, 0x7CA88544, 0x80A87C44, 0x73A97944, 0x7AA87C45, -0x7BA87645, 0x85A88343, 0x7DA98343, 0x7FA88043, 0x83A77F44, 0x7AA97C45, 0x7AA97A44, 0x7FA98642, -0x7FA97F44, 0x81A88344, 0x8CA88D42, 0x85A78044, 0x7AA97545, 0x7BA88145, 0x83A87E43, 0x7BA97A43, -0x7BAA7B43, 0x7EAA8042, 0x7FA97B44, 0x74A87346, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15073,25 +15282,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0090756C, 0x6EA55358, 0x48A5575D, 0x61A26C5A, 0x5EA45F5A, 0x72A27157, 0x6AA3605A, 0x57A55A5A, +0x5CA25B5D, 0x62A4645A, 0x6CA57355, 0x74A46E55, 0x69A46557, 0x64A46658, 0x65A46759, 0x6DA36957, +0x5FA56357, 0x63A46458, 0x58A35B5B, 0x70A17856, 0x71A37155, 0x69A46A57, 0x6BA2645A, 0x61A1685B, +0x68A2715A, 0x71A17557, 0x6DA37358, 0x68A36359, 0x59A57756, 0x76A17C57, 0x76A45C58, 0x5AA5435C, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947962, 0x76AA7146, 0x77A97D44, 0x7CA98043, 0x84A98242, 0x7BA97844, 0x7AA97D44, 0x80A87C43, -0x77A87A45, 0x7EA88344, 0x82A87F44, 0x7CA97745, 0x78A87746, 0x77A97746, 0x75A97746, 0x78A97846, -0x79A87C45, 0x7FA77F44, 0x82A88444, 0x85A78644, 0x84A78044, 0x7FA88444, 0x8AA78943, 0x85A88643, -0x83A88243, 0x7FA97E43, 0x82A68744, 0x85A78044, 0x83A88243, 0x7DA87945, 0x78A87946, 0x7AA87E46, -0x7AA87E45, 0x7DA78145, 0x80A88244, 0x81A97B44, 0x7BA87C45, 0x7DA87D45, 0x78A88245, 0x7CA97F43, -0x84A88043, 0x7DAA7444, 0x7EA88244, 0x7FA87B44, 0x83A87F44, 0x7BA97445, 0x78A97745, 0x7EA88244, -0x7EA87845, 0x85A88143, 0x80A88443, 0x7DA88443, 0x7CA87D45, 0x78A97A45, 0x7BA97E44, 0x86A88043, -0x7DA88045, 0x84A88C43, 0x8BA78343, 0x7EA97645, 0x7AA78145, 0x80A87B44, 0x79A97D43, 0x7EA97F43, -0x7EAA7D43, 0x7EA97B43, 0x73A97446, 0x7BA88045, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15117,21 +15322,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5DA0675D, 0x63A3595C, 0x59A45C5B, 0x5EA45C5A, 0x60A15E5C, 0x5EA36C5A, 0x6CA27456, 0x78A27056, +0x62A5535B, 0x6FA27058, 0x63A2685A, 0x56A44C5D, 0x5CA36F58, 0x70A16359, 0x64A1655B, 0x6DA27358, +0x5FA3665A, 0x66A56D56, 0x799F6C59, 0x5BA5495D, 0x61A4575A, 0x77A36858, 0x6EA17759, 0x7BA35F58, +0x5EA55D59, 0x5BA3595B, 0x70A26658, 0x5AA56159, 0x62A86655, 0x5FA3585B, 0x54A3655A, 0x67A16159, +0x6A9E715B, 0x6EA2625A, 0x55A2545E, 0x60A15E5D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957363, 0x71AA7A45, 0x7DA97944, 0x82A98642, 0x7FA97744, 0x7BA97D44, 0x81A88243, 0x7CA87E45, -0x82A88543, 0x81A87D44, 0x7BA87B45, 0x7BA87C44, 0x7FA87E44, 0x7DA87D44, 0x7DA87C44, 0x7DA87C44, -0x7AA97C45, 0x7FA98044, 0x7EA88044, 0x7EA77E45, 0x82A78245, 0x80A78245, 0x81A78444, 0x87A88843, -0x86A88444, 0x82A97E43, 0x7BA88044, 0x88A78543, 0x7FA88544, 0x83A87C43, 0x78A87746, 0x76A87A46, -0x78A87D45, 0x80A78045, 0x81A88244, 0x7EA97844, 0x7BA87D44, 0x7AA87C45, 0x7AA88145, 0x7CA88244, -0x84A88143, 0x7BA97345, 0x81A87E44, 0x7DA87D44, 0x81A87C45, 0x74A97745, 0x79A97D45, 0x7DA97F44, -0x7FA87645, 0x84A87F43, 0x81A88443, 0x80A78144, 0x7CA87545, 0x7AA97945, 0x7CA88344, 0x81A88044, -0x81A88644, 0x8BA88743, 0x81A87944, 0x75A88046, 0x82A87A44, 0x77A97B44, 0x7CA97D44, 0x7DA97C44, -0x7DA97C44, 0x77A97445, 0x78A78145, 0x84A67F45, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15160,20 +15362,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00924F6F, 0x55A3665B, 0x67A06F5A, 0x60A46B57, 0x6DA26A58, 0x5BA4555B, 0x5CA35A5C, 0x5AA4645A, +0x6DA46C57, 0x5AA4445D, 0x44A5515D, 0x5FA46658, 0x67A56756, 0x64A66456, 0x64A66856, 0x69A66B54, +0x6EA56954, 0x67A45C5A, 0x57A45A5B, 0x5FA4595A, 0x56A1685C, 0x6BA46257, 0x60A36659, 0x70A26959, +0x5DA25B5D, 0x60A26A5A, 0x70A17558, 0x6DA36859, 0x64A35F59, 0x7AA27556, 0x7DA26757, 0x59A5475D, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957662, 0x7DA97A44, 0x77A88743, 0x84A97A43, 0x77A97A45, 0x7FA87F44, 0x7CA87C45, 0x83A88543, -0x7FA87A45, 0x7BA87E45, 0x7FA87E43, 0x7EA87F43, 0x7FA87F44, 0x81A78244, 0x84A78543, 0x85A78443, -0x81A87F43, 0x7CA97C43, 0x7CA87F44, 0x83A78443, 0x7EA77C46, 0x7FA78145, 0x81A78445, 0x82A78444, -0x85A88544, 0x86A78044, 0x7DA97D43, 0x80A88743, 0x84A88144, 0x85A87F43, 0x7AA87646, 0x78A87746, -0x7CA77B46, 0x81A77F45, 0x80A88144, 0x7CA97845, 0x7CA87E45, 0x78A87A45, 0x7FA87E45, 0x81A78443, -0x81A98043, 0x77A97945, 0x7FA87D44, 0x7CA88544, 0x7EA97445, 0x73A87845, 0x7AA87D44, 0x83A87E44, -0x7EA87646, 0x84A97A44, 0x84A78243, 0x82A77B45, 0x7AA87646, 0x7AA97D44, 0x82A88343, 0x7FA88145, -0x87A78B43, 0x85A78144, 0x75A97746, 0x80A87B44, 0x77A97C44, 0x7BA97A44, 0x7DA97D44, 0x7DA97F43, -0x79A97644, 0x76A87C46, 0x81A67D46, 0x7EA78145, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15202,21 +15400,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957F61, 0x79A97944, 0x85A87F42, 0x78A87845, 0x7CA88045, 0x7DA77A45, 0x81A88543, 0x81A77A45, -0x7CA77A45, 0x7BA97944, 0x7AA87A45, 0x79A87846, 0x78A77846, 0x78A87946, 0x7AA87A46, 0x7CA77F46, -0x84A78644, 0x86A78343, 0x81A87D43, 0x7DA87F44, 0x82A78344, 0x7FA67E45, 0x84A78345, 0x83A77D45, -0x80A88344, 0x83A78644, 0x81A77F44, 0x7CA97D44, 0x86A78044, 0x83A88443, 0x7CA87645, 0x78A87246, -0x7DA77C46, 0x81A87F44, 0x7FA87C45, 0x78A87A45, 0x7CA77D45, 0x7AA87745, 0x81A77E45, 0x84A78643, -0x80A97C43, 0x72A88046, 0x7FA87B44, 0x7CA88344, 0x7AA87146, 0x78A97B45, 0x7FA87E45, 0x7FA88143, -0x7CA87646, 0x7EA87B44, 0x85A78343, 0x81A77A45, 0x72A87C46, 0x7AA87F44, 0x84A87E44, 0x7FA78545, -0x8AA78143, 0x7FA87745, 0x7AA87E45, 0x76A97844, 0x7EA87B44, 0x7DA97E43, 0x7DAA7E43, 0x7CA97644, -0x76A87945, 0x7EA77D46, 0x7BA77E46, 0x80A68046, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5EA3645A, 0x53A3565E, 0x50A25F5C, 0x5EA26759, 0x51A2655C, 0x63A1705A, 0x66A07359, 0x6DA36559, +0x57A3685C, 0x6EA26258, 0x65A2555B, 0x4BA35C5C, 0x73A36957, 0x69A1695A, 0x649F695B, 0x63A1665B, +0x5CA36B59, 0x61A36659, 0x74A15E5A, 0x4DA3635C, 0x56A3695A, 0x6FA26A59, 0x71A37357, 0x64A45A59, +0x6BA2555A, 0x61A26959, 0x5AA2645B, 0x5FA76356, 0x57A34E5D, 0x56A36659, 0x62A3505A, 0x639F705C, +0x6FA2665A, 0x5DA1575D, 0x5EA46359, 0x66A18157, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15242,25 +15437,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00957762, 0x7EA88244, 0x7AA87345, 0x77A87B45, 0x80A77A45, 0x7AA88444, 0x84A87F43, 0x7DA77A45, -0x79A97944, 0x78A77946, 0x7CA77B45, 0x7CA97D45, 0x80A88144, 0x81A88043, 0x7FA88043, 0x7EA87C44, -0x78A87746, 0x78A77D46, 0x83A78544, 0x80A88243, 0x80A87E44, 0x81A78144, 0x7AA78046, 0x83A77F45, -0x80A88144, 0x84A78244, 0x84A87F44, 0x7CA97A44, 0x7CA88643, 0x80A78744, 0x7FA87545, 0x7AA87046, -0x7CA67E47, 0x80A87E44, 0x7DA87845, 0x78A87A45, 0x7EA77946, 0x7CA87944, 0x7FA77F44, 0x86A78443, -0x82A87844, 0x76A88145, 0x7EA87845, 0x80A87A45, 0x73A87A45, 0x81A78443, 0x81A77E45, 0x7DA88244, -0x7DA77B45, 0x81A88043, 0x84A78544, 0x7EA87746, 0x73A87B45, 0x7BA88544, 0x7EA78045, 0x84A78843, -0x81A77F44, 0x76A87C45, 0x7CA87645, 0x7FA77F44, 0x7CA97C44, 0x7FA97D43, 0x7EA97A44, 0x78A87A44, -0x7DA77E45, 0x7DA78145, 0x81A78045, 0x7BA77747, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0092676B, 0x639F6B5C, 0x68A46D56, 0x69A25F59, 0x56A44C5D, 0x56A2565E, 0x6BA57256, 0x69A24F5C, +0x4CA35C5D, 0x61A46458, 0x5FA65B58, 0x65A36B57, 0x6BA17057, 0x6DA16E59, 0x65A2635A, 0x62A25F5A, +0x5FA3555A, 0x59A56557, 0x6DA36857, 0x63A0615C, 0x5EA3575B, 0x5CA25E5B, 0x63A36059, 0x60A4615A, +0x69A26559, 0x5EA0575E, 0x67A16B59, 0x73A06C59, 0x64A35A5A, 0x5FA37357, 0x6DA17C57, 0x58A3525D, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15282,16 +15473,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00938462, 0x81A87544, 0x71A87746, 0x7CA78045, 0x7AA87A44, 0x82A78244, 0x7FA87B45, 0x77A87845, -0x79A77946, 0x7CA87C44, 0x80A98243, 0x83A88144, 0x7FA87D44, 0x7CA87D44, 0x7DA87E45, 0x80A87E44, -0x7AA97C44, 0x7CA87D44, 0x78A77945, 0x81A78544, 0x82A88243, 0x7EA87F44, 0x7FA77D45, 0x7BA77E45, -0x7EA78245, 0x82A78344, 0x80A88344, 0x7EA87C45, 0x78A98444, 0x84A78644, 0x84A87944, 0x79A87046, -0x7AA67E47, 0x7FA77A45, 0x7AA87945, 0x79A87944, 0x7FA77646, 0x7CA87C45, 0x7FA78144, 0x84A78243, -0x7FA87545, 0x7DA78145, 0x7EA87A45, 0x7DA77646, 0x76A87B44, 0x83A77F44, 0x7FA78045, 0x7DA88344, -0x7CA77B45, 0x80A88044, 0x83A68344, 0x7BA87346, 0x7AA87845, 0x81A78544, 0x7EA68346, 0x87A78343, -0x7CA87845, 0x78A87A45, 0x77A78144, 0x7DA87845, 0x7AA97C44, 0x7DA97E44, 0x79A87745, 0x7CA78044, -0x7CA77C45, 0x83A68145, 0x7FA77946, 0x75A67847, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15301,9 +15482,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x5EA35B5B, 0x52A3475E, 0x52A2665B, 0x5FA1535C, 0x66A25D5B, 0x66A0615B, 0x6CA16958, 0x64A3555A, +0x56A26D5B, 0x62A0635B, 0x55A2475D, 0x59A26959, 0x5BA0635C, 0x65A26759, 0x64A25B5B, 0x5CA15D5C, +0x5AA17459, 0x59A2695B, 0x6FA05B5B, 0x53A2615B, 0x55A16B5B, 0x68A16F5B, 0x6FA46658, 0x5AA26559, +0x51A1665B, 0x64A14E5D, 0x61A46558, 0x64A24E5C, 0x5CA26D59, 0x63A34859, 0x599F6F5C, 0x6FA26659, +0x65A15E5B, 0x61A45C58, 0x699F7759, 0x6AA15F5B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15322,16 +15510,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947C62, 0x73A87746, 0x7BA87E45, 0x81A67B45, 0x7CA88144, 0x7EA77B45, 0x79A87845, 0x79A77846, -0x79A87E45, 0x81A78244, 0x7CA87546, 0x73A97346, 0x76A97645, 0x79A97C44, 0x7CA97B44, 0x7BA87C45, -0x7DA87A45, 0x78A87844, 0x7DA87A44, 0x76A77C46, 0x82A78044, 0x7EA87C45, 0x7EA78144, 0x7DA77945, -0x7CA77C46, 0x80A78145, 0x81A78044, 0x80A87E45, 0x7BA97C44, 0x8AA68344, 0x88A77C44, 0x7BA87245, -0x7AA77E46, 0x7CA87846, 0x78A87945, 0x7AA87A45, 0x7BA77A45, 0x7AA88045, 0x80A88344, 0x84A78244, -0x7CA87645, 0x81A78144, 0x7CA77E46, 0x77A87346, 0x7AA88144, 0x81A77C45, 0x7DA77D46, 0x80A78344, -0x7AA87D45, 0x7DA88044, 0x85A68045, 0x79A87146, 0x7CA87745, 0x84A77E44, 0x81A78445, 0x86A77B45, -0x7AA97A45, 0x79A87845, 0x81A77D44, 0x78A97B45, 0x7CA97D43, 0x7AA87845, 0x76A87D45, 0x7DA77B45, -0x7EA68146, 0x80A77C45, 0x77A77646, 0x7BA77A46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15344,10 +15522,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0090676C, 0x6AA36557, 0x66A1595A, 0x45A34A60, 0x56A0515F, 0x63A36A58, 0x55A2445E, 0x51A2545D, +0x58A55C58, 0x61A46257, 0x5EA35F5A, 0x68A16B58, 0x719F6E59, 0x6CA07258, 0x75A07457, 0x729F7059, +0x69A05E5C, 0x5EA25F5B, 0x58A4535A, 0x61A26C58, 0x66A1575D, 0x5AA4585B, 0x54A1575D, 0x5BA36359, +0x5FA2635A, 0x64A1595C, 0x59A1525F, 0x67A17058, 0x6AA0655B, 0x5FA4565A, 0x7AA06F57, 0x73A1545A, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15362,16 +15546,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947463, 0x77A87D45, 0x7DA68145, 0x7BA87F44, 0x80A77F44, 0x79A87645, 0x7AA77946, 0x78A87C45, -0x80A78044, 0x78A87047, 0x6FA97446, 0x7AA87D44, 0x7EA97E43, 0x7DA97D43, 0x7DA97E43, 0x7FA97F42, -0x80A97F42, 0x7EA87945, 0x77A87945, 0x7BA87845, 0x77A77E46, 0x7FA87C44, 0x7BA87D44, 0x81A77F45, -0x7AA77946, 0x7BA77F45, 0x81A78344, 0x80A87E45, 0x7DA87A44, 0x85A78344, 0x86A77E44, 0x79A87146, -0x7AA77B46, 0x78A77846, 0x76A87945, 0x7BA77D45, 0x74A77D46, 0x79A78145, 0x7EA68444, 0x82A78044, -0x78A87946, 0x83A77D45, 0x7DA77C45, 0x74A87446, 0x80A78244, 0x7EA77F45, 0x81A67C46, 0x7EA78045, -0x7AA87E45, 0x7DA87F44, 0x85A67D45, 0x76A87646, 0x78A77B45, 0x83A77D45, 0x81A78344, 0x7FA87B45, -0x78A87C45, 0x75A78045, 0x7EA77845, 0x7BA97A43, 0x7CA87945, 0x76A87745, 0x7CA77D44, 0x78A77C46, -0x81A68245, 0x7CA77846, 0x78A67947, 0x7BA87B44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15388,9 +15562,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x58A1555E, 0x41A3525F, 0x68A15E5A, 0x52A05C5D, 0x66A0585C, 0x65A0605A, 0x63A25F59, 0x54A34B5E, +0x61A1635B, 0x5FA1585C, 0x4DA1545E, 0x68A1635A, 0x63A1615B, 0x64A36058, 0x5EA3575B, 0x5BA1595C, +0x5CA16D59, 0x52A06C5C, 0x68A05C5B, 0x60A2525B, 0x5AA0625C, 0x67A2685A, 0x6DA16759, 0x5DA3505B, +0x5EA16559, 0x4BA2595E, 0x5CA35B5B, 0x48A35C5C, 0x63A25658, 0x48A05E5F, 0x76A16459, 0x62A35C5A, +0x56A1625B, 0x4FA0785B, 0x6AA05A5C, 0x67A1545C, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15402,16 +15583,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947A62, 0x7FA77E45, 0x7EA67B46, 0x80A87E44, 0x7DA77A45, 0x75A87945, 0x79A87C45, 0x80A88343, -0x7AA87146, 0x73A87946, 0x7BA87D44, 0x7CA87C43, 0x79A97944, 0x79A87944, 0x7AA87A44, 0x76A97445, -0x78A97F43, 0x7FA97F43, 0x7EA77B46, 0x79A87A45, 0x78A87846, 0x7CA77C45, 0x7AA87C45, 0x7EA78144, -0x7DA77946, 0x78A77B47, 0x80A78444, 0x81A77E45, 0x7BA77B45, 0x7EA78744, 0x81A78344, 0x78A77247, -0x7AA87C45, 0x75A87747, 0x75A87A46, 0x7AA87E45, 0x75A77D46, 0x7CA78145, 0x7DA68345, 0x80A87D45, -0x77A87E46, 0x81A77C44, 0x7DA77646, 0x72A87946, 0x82A87E44, 0x7FA77F45, 0x7DA67F46, 0x7CA77D45, -0x79A87F45, 0x7BA77D44, 0x83A77A45, 0x73A77C46, 0x77A77E45, 0x81A77F45, 0x81A88344, 0x7CA87945, -0x7FA77645, 0x7BA77F44, 0x78A87D45, 0x7BA97C43, 0x78A87446, 0x77A77D44, 0x7BA77445, 0x7CA68146, -0x81A77E45, 0x7AA77746, 0x7AA87C44, 0x7DA78844, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15431,10 +15602,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00915E6C, 0x5FA1515D, 0x44A14C61, 0x599F5B60, 0x63A2655A, 0x57A14B5E, 0x52A2595C, 0x54A55E57, +0x63A05C5B, 0x5EA15F5B, 0x64A06B5A, 0x6D9F695A, 0x65A05F5B, 0x61A1655A, 0x66A16459, 0x5CA1595C, +0x60A06E5A, 0x6D9F5C5C, 0x4DA25A5E, 0x53A3515B, 0x5BA26359, 0x5FA0505F, 0x5BA2575C, 0x58A2585D, +0x5BA35F5A, 0x5BA1625B, 0x5EA05A5E, 0x4FA1605E, 0x6B9F6A5A, 0x5CA2575D, 0x51A27F59, 0x6DA06A59, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15442,16 +15619,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947E62, 0x7CA67F46, 0x7EA88043, 0x7FA77A45, 0x77A87246, 0x77A77747, 0x7FA88243, 0x7EA77446, -0x73A77946, 0x7BA87C44, 0x7AA97944, 0x7DA87F44, 0x7FA78144, 0x80A78045, 0x7DA77C46, 0x7CA87B45, -0x7BA87645, 0x78A87D44, 0x80A87E44, 0x7CA77C46, 0x7AA77745, 0x7AA77A45, 0x7CA87B45, 0x7BA87B44, -0x7FA77D44, 0x7AA77747, 0x7EA77F45, 0x83A68045, 0x7DA87845, 0x7AA88344, 0x80A78644, 0x78A87546, -0x79A87C45, 0x75A87346, 0x73A77D46, 0x7AA77A45, 0x7AA77B46, 0x7EA78045, 0x7EA78145, 0x7DA87845, -0x77A78146, 0x7DA77C45, 0x7CA77446, 0x75A77E46, 0x7FA78244, 0x7CA67A46, 0x7BA77C45, 0x79A77D46, -0x78A88245, 0x7AA77D45, 0x81A77845, 0x75A87C45, 0x77A78145, 0x80A78245, 0x81A77F44, 0x7AA87B45, -0x7DA77646, 0x80A77845, 0x78A87B45, 0x7DA87845, 0x73A87946, 0x7DA87A44, 0x73A77A46, 0x80A67F45, -0x7CA87B45, 0x7AA67C46, 0x7BA77F44, 0x84A77F44, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15475,23 +15642,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4EA14561, 0x50A05F5D, 0x5EA1575C, 0x53A06B5C, 0x4FA0605E, 0x5AA0595B, 0x64A15B5B, 0x51A1545F, +0x669F585C, 0x55A1505D, 0x4CA06B5C, 0x6CA0615A, 0x63A1685A, 0x5FA0685C, 0x64A15B5B, 0x4FA1565D, +0x5CA06A5A, 0x4BA0635E, 0x5AA05D5C, 0x62A1475D, 0x61A05B5D, 0x5EA2625B, 0x64A25B5A, 0x56A1515C, +0x65A0515B, 0x5AA35E5A, 0x5CA24A5E, 0x56A26859, 0x5AA24E5B, 0x5D9F6B5C, 0x54A25B5D, 0x639F5A5D, +0x5EA0515D, 0x759E685A, 0x609F5A5E, 0x53A05A5D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937A63, 0x7DA77F45, 0x7FA87D44, 0x7AA77646, 0x75A87846, 0x76A87D46, 0x82A87845, 0x71A77647, -0x77A87945, 0x79A97844, 0x7BA87F44, 0x7BA87A45, 0x7BA87C45, 0x7FA78045, 0x81A77F45, 0x7DA77C46, -0x7BA87C45, 0x7AA87945, 0x7AA87D44, 0x7EA77C46, 0x79A77946, 0x79A87845, 0x7BA77B45, 0x7BA87E45, -0x7DA77C45, 0x7BA77A46, 0x77A77D46, 0x7FA68245, 0x7DA77B45, 0x79A87C44, 0x85A68544, 0x7EA77346, -0x7AA87846, 0x76A87146, 0x75A77D46, 0x7BA77646, 0x7DA77A45, 0x7EA67B45, 0x80A67F44, 0x7DA87645, -0x77A78046, 0x7BA77C45, 0x76A77146, 0x78A77F45, 0x79A77C46, 0x7DA77E45, 0x7DA77945, 0x79A77A46, -0x78A78344, 0x78A77F46, 0x81A77945, 0x76A77B46, 0x77A67F46, 0x7EA78145, 0x81A87D44, 0x79A77D45, -0x75A77D46, 0x7CA77446, 0x7CA87D44, 0x7CA87446, 0x79A78045, 0x7CA77145, 0x78A68146, 0x81A77E44, -0x7DA77A45, 0x7BA87944, 0x7FA68444, 0x7FA77A46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15518,20 +15682,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x0090526F, 0x43A14662, 0x539E5662, 0x57A25E5B, 0x56A0505D, 0x51A2595D, 0x56A35C58, 0x539F5F5D, +0x5CA0645A, 0x62A15B5A, 0x60A1635A, 0x63A0625A, 0x60A26259, 0x66A16159, 0x5BA05A5E, 0x539F5160, +0x5CA1625A, 0x4FA0595E, 0x6D9E5A5C, 0x50A0575F, 0x57A2525B, 0x57A2625A, 0x559F585F, 0x58A15A5D, +0x55A2525D, 0x58A15F5C, 0x5AA0575C, 0x58A04D60, 0x58A1605C, 0x619F575E, 0x56A34C5C, 0x759F7B57, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937D62, 0x7FA87D44, 0x7DA77845, 0x70A87247, 0x77A67547, 0x7CA77F44, 0x76A87047, 0x75A77646, -0x78A97944, 0x7BA87C44, 0x7AA87B45, 0x7EA77F45, 0x82A68145, 0x80A68344, 0x83A78344, 0x82A68145, -0x7FA67A46, 0x7AA77B45, 0x78A87645, 0x7CA78044, 0x7EA77746, 0x78A87845, 0x76A77746, 0x79A87C45, -0x7BA77C45, 0x7DA67846, 0x79A67547, 0x7DA78145, 0x7EA77D45, 0x7AA87745, 0x85A78144, 0x82A77645, -0x7BA77846, 0x73A77347, 0x7AA77C45, 0x79A77446, 0x80A77945, 0x7DA67B46, 0x7EA77D44, 0x7AA87546, -0x79A77E46, 0x7BA67B46, 0x73A77347, 0x7CA77A46, 0x7EA77D45, 0x7EA87D45, 0x7DA87745, 0x78A77846, -0x79A78145, 0x77A78045, 0x7FA67B46, 0x79A77945, 0x77A77E46, 0x7DA77E45, 0x81A77D44, 0x79A77A45, -0x76A78045, 0x76A77746, 0x79A87D45, 0x77A87646, 0x7DA77E44, 0x71A77546, 0x7FA68145, 0x7EA87C44, -0x79A67B46, 0x79A87A45, 0x84A67E45, 0x7BA77B46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15563,18 +15723,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947F62, 0x79A77945, 0x77A77147, 0x73A77947, 0x77A77C45, 0x7CA77645, 0x70A77347, 0x79A87645, -0x7AA87D43, 0x7AA77846, 0x7BA77D46, 0x7CA77A46, 0x78A77946, 0x7AA87845, 0x78A87846, 0x7DA68145, -0x84A68144, 0x7AA67746, 0x7AA77745, 0x76A77B45, 0x7FA77A45, 0x75A77847, 0x74A77846, 0x77A87845, -0x7AA77B45, 0x7CA77A45, 0x78A77647, 0x79A77E45, 0x81A67E45, 0x7BA87546, 0x7CA78744, 0x83A67C44, -0x77A77747, 0x6EA77547, 0x7EA77A45, 0x75A67946, 0x7DA77846, 0x7DA67B45, 0x7CA77B45, 0x77A87347, -0x7BA77C46, 0x7AA77846, 0x73A77646, 0x7EA77C45, 0x7CA77B45, 0x7CA87B45, 0x7AA87845, 0x79A77846, -0x79A78045, 0x75A77F46, 0x7EA67946, 0x7BA77546, 0x78A77C46, 0x7EA77E45, 0x80A77D45, 0x7AA77446, -0x7AA77D45, 0x72A77847, 0x79A87945, 0x71A77946, 0x7CA77745, 0x71A67A47, 0x84A67D45, 0x7CA77945, -0x77A77B46, 0x74A68545, 0x7FA67946, 0x7EA77646, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x41A24360, 0x5DA05A5D, 0x5C9F4B5F, 0x709F595B, 0x5A9F5F5D, 0x549F5A5D, 0x5CA1555D, 0x4C9F6C5D, +0x5A9F565E, 0x4CA14D5E, 0x669D6D5B, 0x62A1655A, 0x5F9F5E5F, 0x649E685D, 0x63A0515D, 0x47A1535E, +0x5AA0615B, 0x4BA05C5E, 0x529F5A5E, 0x5EA1425E, 0x619F5E5C, 0x58A15E5C, 0x62A1575A, 0x4CA0555D, +0x61A0535D, 0x5FA2625A, 0x4EA1535E, 0x66A16457, 0x50A0525E, 0x67A04D5C, 0x5CA1645B, 0x589F5E5D, +0x499F675E, 0x659F5B5D, 0x549F565F, 0x59A0595D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15602,22 +15760,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00947A62, 0x7BA77546, 0x70A77347, 0x78A67947, 0x7CA77D45, 0x77A77247, 0x75A77846, 0x76A97A44, -0x7CA77946, 0x7AA77B46, 0x7CA67F45, 0x80A67F45, 0x7DA67B46, 0x7BA77D45, 0x7DA77D45, 0x79A77846, -0x7BA68145, 0x80A67946, 0x74A77847, 0x76A77545, 0x79A77C45, 0x7AA77447, 0x79A77746, 0x77A77846, -0x79A77B45, 0x79A67C46, 0x7AA67946, 0x74A77B47, 0x7FA67F45, 0x79A77846, 0x74A78745, 0x80A67F45, -0x75A77547, 0x6FA77A46, 0x7DA77B45, 0x74A77D46, 0x79A67946, 0x7BA67A45, 0x7BA77A45, 0x76A77347, -0x7EA67946, 0x7AA77546, 0x74A77A46, 0x7BA67A46, 0x7BA77B45, 0x7FA77D45, 0x79A87845, 0x79A77647, -0x79A77F45, 0x75A67F46, 0x7CA67946, 0x7CA77246, 0x7AA67847, 0x7DA77D45, 0x7EA77B45, 0x79A77446, -0x7DA77845, 0x75A77946, 0x7AA77346, 0x74A77A46, 0x7CA77344, 0x75A68147, 0x7BA77945, 0x7BA67A46, -0x7BA77446, 0x7FA68245, 0x7DA67B46, 0x75A77747, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00905070, 0x569E4D61, 0x51A15B5E, 0x52A1505D, 0x4BA1535F, 0x52A3555A, 0x4DA15B5D, 0x4DA05B5D, +0x58A15C5B, 0x6AA05E5A, 0x54A2545D, 0x51A34F5C, 0x4CA3485D, 0x47A24B5E, 0x4DA1575E, 0x59A3555B, +0x579F5360, 0x4CA05B5E, 0x509F5C5F, 0x639E575E, 0x51A1545E, 0x55A2485C, 0x54A2575C, 0x50A05B5F, +0x5A9F5C5E, 0x53A24C5E, 0x619F575D, 0x589F5A5E, 0x4EA14E5F, 0x579F605C, 0x539F5360, 0x40A1625E, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15642,25 +15796,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937B63, 0x75A76D48, 0x71A67948, 0x76A77C46, 0x7DA77846, 0x72A77547, 0x79A87745, 0x7AA77845, -0x7AA77A46, 0x7CA67F45, 0x7CA77945, 0x76A77746, 0x79A77946, 0x79A77847, 0x76A67947, 0x7AA77C45, -0x7BA77646, 0x7AA67E45, 0x77A67547, 0x76A77646, 0x77A77A45, 0x7DA77846, 0x74A77946, 0x78A67946, -0x76A87845, 0x7CA77946, 0x7AA67846, 0x78A67547, 0x7BA67F45, 0x78A67A46, 0x74A77B46, 0x88A68444, -0x74A77048, 0x74A77A47, 0x7AA77746, 0x76A67F46, 0x74A67B47, 0x79A77846, 0x7CA77945, 0x75A77647, -0x7DA67746, 0x76A77546, 0x73A67F46, 0x7FA77C45, 0x7CA77E45, 0x7AA67E46, 0x7DA67946, 0x74A77647, -0x79A67F45, 0x73A77C47, 0x79A67A46, 0x7BA77146, 0x7BA67946, 0x7AA77C45, 0x7DA77945, 0x77A77546, -0x7DA77545, 0x78A87A45, 0x79A77247, 0x77A77E44, 0x79A77445, 0x7AA67F46, 0x76A77946, 0x7CA67846, -0x7AA77546, 0x83A57E45, 0x7AA67847, 0x76A77946, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3AA05561, 0x619F5A5D, 0x469D675F, 0x679E4B5E, 0x629F555C, 0x519F5B5E, 0x5BA04E5F, 0x609F5A5C, +0x589F4C5F, 0x4D9F5A5E, 0x6C9E605C, 0x6A9F5E5B, 0x5D9E5E5E, 0x5F9E5D5D, 0x619D5D5E, 0x49A14E5F, +0x55A0625C, 0x4DA0545F, 0x499F585F, 0x59A04160, 0x5E9F545E, 0x53A05A5D, 0x5DA1565B, 0x47A05A5D, +0x599F525E, 0x5EA0575D, 0x54A15E5C, 0x64A05A58, 0x479E635F, 0x58A14C5D, 0x60A15F5B, 0x5F9F555D, +0x4C9E655D, 0x5C9E515F, 0x559E585F, 0x4DA05F5D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15682,16 +15833,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937563, 0x70A77148, 0x75A67748, 0x77A77A46, 0x77A67546, 0x75A77846, 0x77A87944, 0x76A77A47, -0x7AA77C45, 0x7CA77945, 0x7BA77C45, 0x7CA77B45, 0x7BA77C45, 0x7DA77B45, 0x79A67946, 0x76A67548, -0x79A77C45, 0x74A77847, 0x80A67846, 0x74A77747, 0x77A77545, 0x78A87C45, 0x77A67847, 0x77A77847, -0x77A77546, 0x78A67B46, 0x78A77746, 0x77A77347, 0x78A77B46, 0x7CA67846, 0x77A77346, 0x83A68644, -0x72A76D48, 0x77A67B46, 0x79A77146, 0x7DA67D46, 0x75A67C46, 0x78A67946, 0x7BA77845, 0x73A67C47, -0x7BA67646, 0x74A77446, 0x77A68046, 0x7BA67B46, 0x7DA67B46, 0x7BA67D46, 0x7DA77646, 0x71A77647, -0x7AA67D45, 0x72A67A47, 0x77A67A46, 0x7CA76F47, 0x7CA67A46, 0x79A77C45, 0x7CA77745, 0x74A77546, -0x7CA67646, 0x7AA77A45, 0x76A77447, 0x7AA77E44, 0x76A77347, 0x7DA67846, 0x75A77A46, 0x7AA67A46, -0x75A67947, 0x81A67B45, 0x77A67647, 0x79A67746, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15701,10 +15842,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008F4871, 0x4AA0515F, 0x4CA05E5D, 0x459F4862, 0x53A2525A, 0x50A0575D, 0x51A0565E, 0x4DA0525E, +0x5CA04A5D, 0x4FA1575D, 0x5FA0665A, 0x61A05C5B, 0x5F9F5D5C, 0x619E625C, 0x5BA1575A, 0x55A1575C, +0x53A14F5F, 0x4F9E4E61, 0x4A9F575F, 0x459E5E5F, 0x579E5260, 0x53A0515D, 0x50A1525C, 0x5C9F595D, +0x569F585F, 0x569E5060, 0x4AA0545E, 0x5E9E585E, 0x539F4760, 0x3FA1525E, 0x5C9D5A5E, 0x50A04960, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15722,16 +15869,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937164, 0x72A67548, 0x73A77947, 0x78A77846, 0x74A67348, 0x76A87645, 0x78A77745, 0x78A77646, -0x7CA67A46, 0x78A67E46, 0x7FA67A45, 0x78A87846, 0x7AA77A46, 0x7AA77B45, 0x7AA77646, 0x77A67847, -0x74A67347, 0x7BA67547, 0x78A67D46, 0x77A67648, 0x76A77746, 0x73A87845, 0x77A77547, 0x79A67647, -0x7AA67747, 0x73A77946, 0x7AA67646, 0x77A77847, 0x73A77847, 0x7BA57846, 0x77A77047, 0x77A78644, -0x6FA76F47, 0x7AA67846, 0x7AA67347, 0x82A67846, 0x78A57B46, 0x76A77846, 0x79A77747, 0x73A77F46, -0x78A67747, 0x73A77347, 0x7DA58045, 0x7BA77D45, 0x7AA67A47, 0x7CA57E46, 0x7CA67546, 0x71A67647, -0x78A67B45, 0x73A67947, 0x75A67847, 0x7AA76F47, 0x7BA67A46, 0x78A77A46, 0x7BA77845, 0x73A77746, -0x7BA67646, 0x7BA77C45, 0x74A77647, 0x7DA77D44, 0x74A67547, 0x7DA67346, 0x79A77D46, 0x77A67A46, -0x72A67E47, 0x7DA67846, 0x77A67747, 0x78A77846, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15745,9 +15882,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4F9E5E5F, 0x5A9E505F, 0x4F9C6B5E, 0x479E5D5F, 0x559F505D, 0x559E5E5D, 0x599E505F, 0x639F4F5E, +0x4D9F525F, 0x509E6A5D, 0x659E6D5A, 0x5D9E5F5D, 0x619C5D5D, 0x599C615E, 0x5B9C5D5E, 0x47A0465F, +0x469F5C5E, 0x499E5560, 0x4F9E5B5E, 0x55A03961, 0x569E545F, 0x52A0535E, 0x58A0585B, 0x4A9F5A5D, +0x529E4F60, 0x579F555F, 0x559E605D, 0x649F565A, 0x429D5C60, 0x47A1505E, 0x659F5D5C, 0x5D9E4E5D, +0x4C9E5F5E, 0x519E4D60, 0x569E5360, 0x519D645E, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15762,16 +15906,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937563, 0x77A67348, 0x75A77847, 0x75A77446, 0x73A67647, 0x75A87745, 0x73A77946, 0x73A67946, -0x78A77A46, 0x7FA67A45, 0x76A77646, 0x75A87446, 0x73A87146, 0x71A77347, 0x73A77747, 0x78A87645, -0x77A67648, 0x73A67947, 0x75A67947, 0x7CA67747, 0x75A77646, 0x76A77146, 0x76A77746, 0x74A67947, -0x78A67947, 0x75A77347, 0x7BA67746, 0x77A67847, 0x74A67447, 0x78A67B46, 0x76A67647, 0x6EA77C47, -0x6BA67547, 0x7AA67846, 0x77A57847, 0x82A57346, 0x7CA67746, 0x75A67946, 0x79A67547, 0x76A67E46, -0x77A67547, 0x73A67447, 0x81A57E45, 0x7EA67B45, 0x7AA57E46, 0x7FA67A46, 0x7BA67646, 0x71A77347, -0x77A67B45, 0x73A67747, 0x73A67A47, 0x7AA76F47, 0x7BA67846, 0x76A77A46, 0x7BA77846, 0x71A67846, -0x79A67646, 0x79A77A45, 0x74A67847, 0x7EA77B44, 0x73A67947, 0x7AA67246, 0x7BA77C45, 0x7AA67846, -0x73A67D46, 0x7BA67646, 0x77A57847, 0x75A67B46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15788,10 +15922,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008F4C70, 0x4D9F5360, 0x519F4461, 0x52A1545B, 0x549F515E, 0x579E475F, 0x4CA04E5E, 0x58A04C5E, +0x4E9F645C, 0x669E605B, 0x5F9C5B5F, 0x4F9F4B5F, 0x4E9F585D, 0x5E9E5F5C, 0x5F9E5C5B, 0x5AA0505C, +0x53A0525D, 0x529F4B61, 0x489D4363, 0x559E4B60, 0x4F9E565F, 0x529D5361, 0x519E585E, 0x4BA1525E, +0x539E595F, 0x5D9E515F, 0x4F9F4760, 0x4A9F5C5E, 0x5C9C5860, 0x51A13E60, 0x50A0555D, 0x519C5361, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15802,16 +15942,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937364, 0x71A67548, 0x75A77647, 0x76A67047, 0x74A77546, 0x77A67546, 0x76A77547, 0x77A67547, -0x78A67C46, 0x74A77446, 0x76A77646, 0x78A77846, 0x78A77946, 0x79A77945, 0x78A77546, 0x76A67747, -0x75A77647, 0x73A67348, 0x79A67347, 0x79A67947, 0x75A67547, 0x78A67546, 0x72A77945, 0x77A67846, -0x78A67847, 0x78A67447, 0x75A67C47, 0x78A67747, 0x75A66F48, 0x74A67846, 0x79A57747, 0x73A77047, -0x6CA67647, 0x7CA67946, 0x70A57D47, 0x7DA67347, 0x7BA67646, 0x75A67946, 0x79A67347, 0x7BA67846, -0x77A67347, 0x73A67847, 0x7FA57B46, 0x7FA67A46, 0x7AA67A47, 0x7AA67A46, 0x7BA67A47, 0x72A67447, -0x76A67B46, 0x73A67647, 0x72A67847, 0x78A76E47, 0x7AA67647, 0x76A77847, 0x7AA77746, 0x71A77846, -0x78A67547, 0x7AA67747, 0x76A77A46, 0x7DA67944, 0x71A57C47, 0x78A67346, 0x7BA77B46, 0x7AA67646, -0x73A67D46, 0x7AA67547, 0x76A67847, 0x73A67A47, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15832,9 +15962,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x589D5560, 0x559C4B60, 0x679B555F, 0x499E595E, 0x4C9E4E5E, 0x54A05C5D, 0x549D645E, 0x4C9E4D60, +0x499F4760, 0x5D9B695D, 0x669D575D, 0x5B9D4F60, 0x4A9D4762, 0x529C5361, 0x5B9C5B5F, 0x539E4660, +0x499E595E, 0x449E4C62, 0x4A9E585F, 0x529F3C61, 0x579E525F, 0x4B9E5060, 0x5A9F555D, 0x4F9E545E, +0x4A9D4F61, 0x549E5060, 0x529E625E, 0x629D515D, 0x449D5960, 0x459F505F, 0x669E585D, 0x619E4C5D, +0x4F9E555F, 0x4B9E4760, 0x499D5561, 0x539C5C60, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15842,16 +15979,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937164, 0x72A77547, 0x73A77A47, 0x70A67148, 0x76A77645, 0x74A77747, 0x75A67746, 0x73A77547, -0x79A67247, 0x74A77746, 0x7BA67D45, 0x7BA67A45, 0x7AA67A46, 0x7BA67B46, 0x79A77745, 0x76A77746, -0x76A77447, 0x74A67348, 0x72A67747, 0x70A67A47, 0x77A67547, 0x75A67547, 0x74A77546, 0x7AA67846, -0x77A67847, 0x77A67548, 0x72A77647, 0x7AA67747, 0x76A67148, 0x6DA77547, 0x7AA57846, 0x75A67248, -0x6FA67748, 0x7AA67846, 0x70A58047, 0x76A57647, 0x78A67746, 0x76A67947, 0x79A67248, 0x7EA67547, -0x76A67547, 0x72A57D47, 0x80A57D46, 0x79A57C46, 0x7BA67B46, 0x7CA57947, 0x7AA57847, 0x71A67347, -0x73A67A47, 0x75A57847, 0x74A67847, 0x77A66D48, 0x79A57747, 0x76A77846, 0x79A77845, 0x72A67846, -0x76A67447, 0x78A67747, 0x77A67A46, 0x7DA77845, 0x71A57C47, 0x74A77446, 0x7CA67A46, 0x7AA67547, -0x74A67B46, 0x77A67347, 0x77A67647, 0x73A67D46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15875,23 +16002,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E4971, 0x4D9E4462, 0x499E555E, 0x539F505E, 0x559E4A5F, 0x449F4661, 0x549E4D5F, 0x489F5B5E, +0x659B5D5F, 0x5A9C5260, 0x559E5E5E, 0x5E9D5A5E, 0x5B9D5B5F, 0x599D5260, 0x4E9E555F, 0x5D9D595D, +0x549F475F, 0x4F9F4E5F, 0x469F3F63, 0x429D4D63, 0x4E9E4961, 0x509D4B61, 0x539D4E61, 0x5A9E515D, +0x4BA0495F, 0x559B6160, 0x589D5260, 0x50A04A5F, 0x599E595D, 0x4F9C4C62, 0x48A04560, 0x4CA0485E, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937364, 0x74A67447, 0x77A67347, 0x6FA67647, 0x77A77645, 0x75A67647, 0x74A67347, 0x76A67746, -0x72A77347, 0x79A67E45, 0x7EA67A45, 0x7AA67C46, 0x7BA67C45, 0x7BA67946, 0x7AA67946, 0x76A77845, -0x76A67647, 0x72A67248, 0x70A67448, 0x76A67248, 0x79A67647, 0x76A67547, 0x77A67446, 0x76A67746, -0x76A67A47, 0x75A57748, 0x73A67147, 0x76A67A47, 0x78A57547, 0x6FA77147, 0x78A67946, 0x75A67348, -0x74A67A47, 0x79A57447, 0x74A58047, 0x71A57A47, 0x76A67446, 0x76A67A46, 0x78A67447, 0x7CA67447, -0x73A67547, 0x74A57F46, 0x7DA68045, 0x7AA57B46, 0x7CA57A46, 0x78A47C46, 0x79A57A47, 0x71A67147, -0x71A67946, 0x71A67748, 0x75A57947, 0x76A76B48, 0x77A67647, 0x75A77547, 0x78A67846, 0x72A67946, -0x75A67448, 0x77A67747, 0x76A67B47, 0x7DA67745, 0x6FA57948, 0x71A77447, 0x7DA67A46, 0x7AA67446, -0x73A57B47, 0x75A67348, 0x77A67647, 0x75A57D46, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15919,19 +16042,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937364, 0x73A67547, 0x75A67048, 0x75A77646, 0x76A67547, 0x77A67147, 0x73A67347, 0x78A67346, -0x74A67C46, 0x7DA67B45, 0x7AA57947, 0x74A67347, 0x74A67846, 0x7AA67A46, 0x7AA67946, 0x78A77446, -0x76A67546, 0x75A67348, 0x71A57049, 0x76A67247, 0x74A67747, 0x75A57648, 0x74A67846, 0x72A77547, -0x75A57847, 0x7AA67547, 0x74A67148, 0x72A67947, 0x79A57847, 0x75A76D47, 0x74A67746, 0x75A57548, -0x77A67947, 0x76A57048, 0x7AA57C47, 0x6FA67B47, 0x75A67347, 0x76A67947, 0x77A67947, 0x77A67347, -0x72A67547, 0x76A57F46, 0x7DA67B46, 0x79A57947, 0x79A57747, 0x73A57948, 0x7AA57A47, 0x74A67147, -0x72A67847, 0x71A57548, 0x73A57847, 0x78A76D47, 0x78A67647, 0x73A67547, 0x78A67846, 0x74A67747, -0x74A67448, 0x76A57448, 0x75A67B46, 0x7CA67645, 0x6FA57948, 0x70A67547, 0x7CA67946, 0x7CA67346, -0x74A67747, 0x73A67248, 0x75A57647, 0x76A57B47, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x599D535F, 0x4D9B5960, 0x6A9C4560, 0x519E4B5F, 0x439D4761, 0x5C9E595E, 0x519D5661, 0x4E9E4B60, +0x489F4B60, 0x679B5B5E, 0x5C9C5160, 0x539D4B61, 0x539C595E, 0x4D9D4D60, 0x539B5960, 0x529D4062, +0x479D5E5E, 0x419D4464, 0x4E9C5B5F, 0x4F9E3D63, 0x509D4E61, 0x479E4F61, 0x599D585D, 0x509D515F, +0x459C4F62, 0x539D5061, 0x549D5F5E, 0x5B9D515E, 0x479D5461, 0x489E4E60, 0x5E9C515F, 0x619D455F, +0x4E9E5160, 0x519D4061, 0x449D5661, 0x589B5C5F, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -15963,19 +16083,15 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927464, 0x72A67647, 0x6FA67548, 0x75A77645, 0x76A57847, 0x6FA67048, 0x72A57747, 0x73A67247, -0x7BA57E45, 0x7BA57948, 0x74A67347, 0x76A67847, 0x78A67646, 0x75A67846, 0x7AA57B46, 0x79A67946, -0x72A77347, 0x75A67547, 0x72A66E49, 0x70A67848, 0x70A67547, 0x72A57748, 0x75A67747, 0x79A67346, -0x75A67447, 0x7BA67847, 0x76A57547, 0x73A67547, 0x7CA57647, 0x74A67248, 0x6FA77447, 0x72A67347, -0x78A57647, 0x77A57348, 0x7EA57646, 0x72A67847, 0x73A67347, 0x76A67947, 0x76A57C47, 0x73A67348, -0x72A67148, 0x7AA57F46, 0x7DA57746, 0x79A57447, 0x72A57148, 0x76A57648, 0x79A57947, 0x76A57148, -0x72A57847, 0x70A57348, 0x72A57847, 0x75A66C48, 0x77A67547, 0x73A67447, 0x78A67746, 0x74A57646, -0x72A67448, 0x76A57448, 0x75A67C47, 0x7BA57446, 0x6FA57848, 0x70A67447, 0x7DA57846, 0x7BA57346, -0x74A67647, 0x73A57148, 0x72A57748, 0x76A57948, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x008F4771, 0x4E9C5A60, 0x549F505D, 0x4D9D5260, 0x479E4860, 0x4C9E4E60, 0x489E5160, 0x5E9A5561, +0x549C4A61, 0x519C5461, 0x569E4E5F, 0x4C9E4D5F, 0x4C9D4F61, 0x529C5361, 0x519D5560, 0x539D5260, +0x589C535E, 0x4F9E4061, 0x489D4562, 0x439D3F65, 0x4A9C4F62, 0x489C4D62, 0x489C5362, 0x4B9D4E61, +0x5D9E495D, 0x479F4860, 0x4A9C5B62, 0x4F9E4E60, 0x509E535E, 0x5F9B4F5F, 0x4D9D4662, 0x42A1475F, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16002,23 +16118,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937264, 0x73A57048, 0x72A67747, 0x76A67547, 0x76A57247, 0x6FA67148, 0x76A57347, 0x71A67947, -0x7DA47947, 0x79A47547, 0x76A57A47, 0x7AA57847, 0x79A57947, 0x78A57547, 0x74A67647, 0x7AA57846, -0x76A67147, 0x74A67447, 0x71A66E49, 0x6FA57349, 0x73A67148, 0x75A57248, 0x75A57448, 0x79A57546, -0x72A67247, 0x77A57B47, 0x78A57547, 0x75A67347, 0x78A57846, 0x74A57348, 0x71A77048, 0x72A67247, -0x78A57647, 0x75A47647, 0x7FA47347, 0x75A67446, 0x71A57348, 0x77A67947, 0x77A57947, 0x73A67348, -0x72A67148, 0x7CA57B47, 0x7BA57647, 0x77A57348, 0x73A67647, 0x74A67348, 0x7AA47947, 0x75A66F48, -0x73A57A46, 0x6FA57149, 0x73A57847, 0x75A66D49, 0x75A57647, 0x73A67447, 0x78A57746, 0x74A57646, -0x71A57648, 0x77A67347, 0x76A57B46, 0x7AA57446, 0x6FA57848, 0x70A67447, 0x7BA67647, 0x7BA57246, -0x74A67647, 0x74A67048, 0x71A57748, 0x76A47947, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x579C5560, 0x479B5C61, 0x5A9C3E62, 0x4D9C4761, 0x419D4B61, 0x5C9D4A61, 0x499D4A62, 0x4B9D4760, +0x449D4D61, 0x669B4C60, 0x5E9B4C61, 0x529B5361, 0x529E555F, 0x5D9C4160, 0x4E9A5861, 0x519D3863, +0x489D5560, 0x3C9C3E65, 0x4C9B5961, 0x4B9D3C64, 0x4C9C5062, 0x469D4863, 0x549C545F, 0x4C9C4961, +0x439C4A63, 0x559C5061, 0x579C5D5F, 0x579C555F, 0x459D4862, 0x419D4B63, 0x5C9C4D60, 0x619C4160, +0x4B9C4D61, 0x4F9D4462, 0x469C4A63, 0x599A5760, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16042,16 +16155,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937364, 0x70A57249, 0x77A67646, 0x74A57548, 0x75A67047, 0x71A57447, 0x75A67147, 0x76A57C47, -0x7AA47747, 0x74A57747, 0x77A57847, 0x76A57447, 0x75A57647, 0x77A57847, 0x77A57447, 0x74A67747, -0x76A57547, 0x71A67348, 0x71A66F49, 0x6DA66F4A, 0x74A57448, 0x71A67048, 0x72A57548, 0x74A57A47, -0x74A67246, 0x70A57448, 0x7AA47647, 0x76A57447, 0x73A57A46, 0x76A57248, 0x71A67147, 0x72A67247, -0x78A57547, 0x73A47848, 0x7FA57047, 0x74A57247, 0x6FA67148, 0x79A57847, 0x75A57748, 0x74A67247, -0x71A67348, 0x7DA47946, 0x79A57547, 0x76A57348, 0x76A57847, 0x73A57347, 0x76A47847, 0x75A66E48, -0x71A57A47, 0x6EA57049, 0x74A57947, 0x74A56D49, 0x74A57348, 0x71A67448, 0x78A57846, 0x75A57547, -0x70A57448, 0x76A57448, 0x76A67A47, 0x78A57547, 0x70A57648, 0x71A67448, 0x7AA57547, 0x7CA57047, -0x74A67548, 0x75A56E48, 0x70A57748, 0x78A47947, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16059,10 +16162,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008D586F, 0x569D505D, 0x4C9C5960, 0x479E4162, 0x4B9D4562, 0x489D4A61, 0x4E994F64, 0x4B9B4564, +0x529B4F61, 0x449D4961, 0x4F9B5061, 0x519C4E61, 0x4C9D4A62, 0x4A9D4C61, 0x529D4B60, 0x489C4862, +0x4C9D4F5F, 0x5A9C515F, 0x519B4262, 0x4E9C4A62, 0x439C3F65, 0x4C9B4F63, 0x469B4C63, 0x489B5662, +0x449B4C63, 0x569E495E, 0x479C4A62, 0x4C9B4F62, 0x489E4961, 0x4C9C525F, 0x579A4862, 0x4B9D3D63, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16082,16 +16191,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00937164, 0x73A57947, 0x76A67446, 0x73A57548, 0x71A67148, 0x73A67448, 0x71A57548, 0x7AA47747, -0x76A57248, 0x75A57648, 0x76A67347, 0x72A57347, 0x73A57448, 0x75A57648, 0x75A57647, 0x76A57547, -0x78A57647, 0x74A66E48, 0x71A57048, 0x70A56E49, 0x72A57448, 0x72A57348, 0x71A57648, 0x72A57448, -0x7AA67146, 0x71A67147, 0x72A57948, 0x74A57347, 0x74A67647, 0x7AA47447, 0x73A57048, 0x6FA77147, -0x78A57647, 0x71A57A47, 0x7BA56F48, 0x75A57248, 0x6EA67248, 0x7BA57547, 0x75A57548, 0x73A57148, -0x71A57348, 0x7EA47647, 0x79A57547, 0x73A57248, 0x75A47948, 0x77A57148, 0x74A47748, 0x76A56D48, -0x72A57847, 0x6CA56E49, 0x74A47847, 0x74A56C49, 0x73A57348, 0x70A57448, 0x76A57947, 0x75A57347, -0x6FA57449, 0x76A57647, 0x76A57A47, 0x79A57646, 0x70A57448, 0x6FA57348, 0x7AA57547, 0x7CA56E47, -0x73A57548, 0x75A56F48, 0x6FA57448, 0x78A47947, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16103,9 +16202,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x519B5260, 0x3E9A5963, 0x599C3B62, 0x489B5361, 0x409C4F62, 0x559B4862, 0x449C4963, 0x489D4461, +0x3D9E4862, 0x5C9A4562, 0x599B5960, 0x48994F64, 0x479B4464, 0x3E9B4664, 0x5C9A5561, 0x409D3764, +0x4F9C4761, 0x3D9B4265, 0x4F9B5061, 0x449B3D65, 0x4C9A5063, 0x479B4663, 0x4D9B5060, 0x4C9C4762, +0x419B4864, 0x509B5261, 0x549C595F, 0x569B5061, 0x459B4C62, 0x469B4962, 0x569B4B61, 0x5D9A4661, +0x4A9B4B62, 0x4B9B4962, 0x439C4064, 0x569A5061, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16122,16 +16228,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927264, 0x79A57746, 0x76A57447, 0x75A67047, 0x70A67248, 0x72A67148, 0x75A47748, 0x75A47449, -0x70A57548, 0x76A57447, 0x72A57447, 0x75A57547, 0x76A57647, 0x75A57448, 0x72A57348, 0x74A67647, -0x74A57847, 0x74A57447, 0x6FA57248, 0x71A57149, 0x6EA57349, 0x75A57248, 0x74A57048, 0x75A47049, -0x74A57847, 0x70A67247, 0x70A57548, 0x75A57148, 0x73A57447, 0x74A57A47, 0x73A47049, 0x6FA66D48, -0x77A47647, 0x71A57947, 0x78A56D48, 0x73A57148, 0x6EA57348, 0x79A57248, 0x72A57248, 0x73A57148, -0x70A57348, 0x7EA57347, 0x7AA47348, 0x75A47648, 0x75A57647, 0x7AA56E47, 0x74A47748, 0x75A56B49, -0x71A57647, 0x6DA56D49, 0x73A47847, 0x72A56C49, 0x73A57548, 0x70A57148, 0x76A47647, 0x73A57248, -0x70A57248, 0x76A57547, 0x77A57A47, 0x78A47647, 0x70A57148, 0x6EA57348, 0x79A57347, 0x7BA46E47, -0x73A57348, 0x74A57048, 0x70A47249, 0x78A47747, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16146,10 +16242,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008E4F6F, 0x499A5B61, 0x489D3C63, 0x4A9B4662, 0x419D4363, 0x439A4C65, 0x469B4763, 0x529B4462, +0x4A9B5062, 0x539B5961, 0x599B565F, 0x529B5061, 0x4E9B4F60, 0x529C555F, 0x549D4F60, 0x479C4B63, +0x4F9C4363, 0x459D4A61, 0x579B5560, 0x519A4562, 0x509B5161, 0x469C4064, 0x4B9B4963, 0x499A4A63, +0x469A5863, 0x429B4E63, 0x589D445F, 0x429B4E63, 0x4D9B4762, 0x489D4C60, 0x4B9C5061, 0x5D984463, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16162,16 +16264,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927863, 0x77A57446, 0x73A57847, 0x71A56E48, 0x73A57048, 0x71A67248, 0x73A47449, 0x72A47049, -0x75A57448, 0x70A57248, 0x75A57548, 0x75A57448, 0x73A57248, 0x72A57348, 0x75A57347, 0x71A57148, -0x72A57447, 0x78A57547, 0x75A56F48, 0x74A57248, 0x70A56E49, 0x73A47449, 0x70A47348, 0x71A47748, -0x70A57348, 0x77A57247, 0x71A57248, 0x73A47448, 0x71A67248, 0x73A57547, 0x77A47148, 0x72A56D49, -0x77A47647, 0x70A47948, 0x78A66C48, 0x73A47348, 0x6FA57448, 0x77A57248, 0x71A57148, 0x71A66F48, -0x6FA67448, 0x7BA47048, 0x7AA47348, 0x73A47249, 0x74A57947, 0x76A57048, 0x77A47748, 0x73A56949, -0x73A57347, 0x6EA56E49, 0x73A47748, 0x71A56E49, 0x73A47448, 0x72A47149, 0x75A47547, 0x74A57048, -0x6EA47349, 0x76A57548, 0x77A47947, 0x76A57548, 0x71A47348, 0x70A57049, 0x78A57548, 0x7BA47048, -0x71A57149, 0x74A57148, 0x70A47049, 0x78A47647, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16190,9 +16282,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x4A9B5062, 0x49994764, 0x5F9A4262, 0x439A5462, 0x4D994A63, 0x519A5362, 0x459B4664, 0x489C4562, +0x3E9D3664, 0x52985362, 0x459B5163, 0x5B9A5760, 0x569A5360, 0x56995561, 0x489B3665, 0x399B4A63, +0x4A9B4662, 0x389A4E64, 0x4E9A4C63, 0x3B9B3B66, 0x4E994B64, 0x439A4465, 0x469B5361, 0x499B4363, +0x439B3E64, 0x4B9A4763, 0x4A9B4E62, 0x519A5062, 0x439A4863, 0x3F9A4965, 0x50994A63, 0x58995162, +0x469C4163, 0x499B4A62, 0x409B4264, 0x3E9A4D64, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16202,16 +16301,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927563, 0x74A57347, 0x79A47347, 0x6EA57348, 0x70A56F48, 0x70A47149, 0x72A47049, 0x72A47548, -0x73A56F48, 0x73A57548, 0x78A57847, 0x77A57547, 0x74A57447, 0x74A57347, 0x70A57149, 0x74A57148, -0x71A57148, 0x72A57847, 0x76A47447, 0x6FA57548, 0x73A56F49, 0x6EA57249, 0x73A47149, 0x71A57049, -0x78A47048, 0x74A57847, 0x6EA66F48, 0x71A47649, 0x71A47348, 0x73A57347, 0x73A47947, 0x71A4704A, -0x75A47548, 0x6DA47848, 0x78A56C48, 0x71A47648, 0x6EA57448, 0x77A57248, 0x70A57149, 0x71A56F48, -0x6DA57148, 0x79A47048, 0x78A47847, 0x71A47449, 0x71A47049, 0x6DA47148, 0x79A47648, 0x6EA56B49, -0x74A47147, 0x6DA56F49, 0x74A47548, 0x70A56D49, 0x73A47548, 0x71A47049, 0x74A47448, 0x73A57148, -0x6FA47149, 0x75A57648, 0x76A47847, 0x77A47547, 0x70A57348, 0x71A57248, 0x77A57348, 0x7AA47148, -0x72A57348, 0x73A47148, 0x6FA56E49, 0x77A47448, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16233,25 +16322,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008C5371, 0x4D9B3963, 0x459B4663, 0x429B4563, 0x3B9A4366, 0x489A4764, 0x4D9B4062, 0x46994C64, +0x5C995C61, 0x4F984A64, 0x50995462, 0x559A5261, 0x4F9B4E60, 0x4D9A5261, 0x56995660, 0x51994D63, +0x4D9B4562, 0x4D9C4762, 0x419C4563, 0x4D9A5362, 0x53984364, 0x4B9A4F62, 0x499B4264, 0x4B9B4763, +0x4B9A4563, 0x3F9A5163, 0x469A4764, 0x549C4660, 0x419A4A64, 0x479B4663, 0x419D4362, 0x4D9B4761, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927463, 0x72A47947, 0x71A56D48, 0x72A57048, 0x6EA56F49, 0x70A47349, 0x70A47149, 0x75A46F48, -0x72A47449, 0x76A47847, 0x78A57747, 0x75A47448, 0x74A57447, 0x76A57647, 0x76A57447, 0x71A57348, -0x74A57048, 0x70A57247, 0x77A47647, 0x75A47048, 0x75A57548, 0x71A56E49, 0x72A57249, 0x71A47248, -0x70A47848, 0x6FA47448, 0x78A57047, 0x6FA47349, 0x73A47148, 0x71A57348, 0x72A57448, 0x7AA37049, -0x73A57548, 0x6EA47649, 0x78A46D48, 0x70A47548, 0x71A57348, 0x76A57348, 0x70A57149, 0x71A56F48, -0x6BA56E49, 0x7AA37049, 0x74A47B47, 0x76A37248, 0x71A47249, 0x73A47748, 0x78A47148, 0x6AA56E49, -0x75A46E48, 0x6EA47149, 0x75A47348, 0x6EA56C4A, 0x74A47349, 0x70A57049, 0x71A47448, 0x73A57048, -0x70A47049, 0x73A47348, 0x74A47647, 0x77A37448, 0x70A47348, 0x70A47249, 0x75A47348, 0x79A47347, -0x72A57048, 0x72A47448, 0x6FA56E49, 0x70A47749, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16277,21 +16362,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x429A4463, 0x4D984265, 0x4E995063, 0x389A4865, 0x52974D63, 0x49974F65, 0x53994D63, 0x489B4462, +0x439C4462, 0x369B4065, 0x4C974C65, 0x42993F66, 0x409A3C65, 0x3F9A3C65, 0x3C9A4464, 0x47994264, +0x459A3765, 0x49994B64, 0x4E9A4563, 0x3C9A3F66, 0x50974465, 0x3E9A4465, 0x48994E63, 0x48993D65, +0x40993F65, 0x4D9A4463, 0x4E994B63, 0x4B994F63, 0x409B4264, 0x40994B65, 0x4F984D63, 0x50985962, +0x449B3E64, 0x4E9A4B62, 0x499B4063, 0x429B3865, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927264, 0x78A47347, 0x6BA47149, 0x73A56F48, 0x70A46E49, 0x73A47249, 0x70A47448, 0x6FA57149, -0x72A47748, 0x78A47647, 0x74A47248, 0x73A47349, 0x75A47548, 0x77A47548, 0x73A47348, 0x76A57148, -0x72A47448, 0x71A56F48, 0x71A47548, 0x76A47548, 0x6EA57349, 0x73A47049, 0x6FA57349, 0x70A47349, -0x72A46F49, 0x77A47048, 0x74A47647, 0x6FA57048, 0x72A47349, 0x70A46F48, 0x71A57348, 0x73A47947, -0x72A47548, 0x71A47149, 0x7AA46F48, 0x6FA47749, 0x73A47248, 0x75A47648, 0x70A57149, 0x71A57048, -0x6DA56A49, 0x75A37648, 0x70A57549, 0x79A47747, 0x77A47547, 0x77A47648, 0x71A46A49, 0x6CA47248, -0x72A57148, 0x6BA47449, 0x73A47348, 0x6CA46C4A, 0x73A47249, 0x70A47049, 0x71A47548, 0x72A46F48, -0x6FA46E49, 0x72A47149, 0x72A47448, 0x75A47448, 0x70A47149, 0x6EA47149, 0x74A37249, 0x77A47548, -0x70A56E49, 0x71A47248, 0x6EA56F49, 0x6EA47349, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16320,20 +16402,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008D3C73, 0x409A4963, 0x43994764, 0x3A9A3A67, 0x47984565, 0x4C9B4062, 0x41994B65, 0x57984663, +0x4A994D62, 0x51994D61, 0x4A984A64, 0x4E9A4E61, 0x4F9A5062, 0x4E984C64, 0x4A974B65, 0x50985062, +0x55975861, 0x4C993F64, 0x419B4A63, 0x4A9A4364, 0x47994964, 0x49994365, 0x449A5063, 0x51994863, +0x449B4364, 0x3F994565, 0x3A994C64, 0x4A993F64, 0x519A4063, 0x3D984467, 0x4A9A4364, 0x399D4262, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927664, 0x73A56B49, 0x70A47049, 0x6FA47049, 0x6CA4704A, 0x71A47148, 0x73A56E48, 0x70A47349, -0x79A47948, 0x74A37249, 0x75A37648, 0x76A47548, 0x74A47447, 0x73A47548, 0x77A47747, 0x75A47348, -0x73A57049, 0x73A57148, 0x6FA57048, 0x73A47648, 0x76A46F48, 0x73A47448, 0x71A46F49, 0x72A47149, -0x72A47049, 0x6EA47548, 0x70A47149, 0x76A47147, 0x6FA47249, 0x71A47149, 0x6EA56F48, 0x73A47148, -0x71A47248, 0x75A36D49, 0x7AA37048, 0x6EA47549, 0x75A37348, 0x73A47548, 0x73A47049, 0x71A47049, -0x6EA56B49, 0x6DA47749, 0x73A37049, 0x73A57548, 0x75A47648, 0x74A46F48, 0x6BA46B4A, 0x70A47149, -0x70A46E49, 0x6CA47449, 0x72A47149, 0x6DA56E4A, 0x74A37149, 0x6EA47049, 0x71A47648, 0x71A46F49, -0x6FA46E49, 0x71A47049, 0x72A47349, 0x73A47548, 0x6FA46F49, 0x6DA47149, 0x75A37249, 0x76A47648, -0x70A46F49, 0x73A57348, 0x70A57049, 0x6CA46F4A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16362,21 +16440,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00927464, 0x6BA46E4A, 0x70A46E49, 0x70A46C49, 0x6EA3714A, 0x71A47448, 0x6EA46F49, 0x72A47848, -0x76A47148, 0x74A37348, 0x74A47547, 0x73A37449, 0x73A37349, 0x73A37349, 0x74A47548, 0x76A37948, -0x75A37249, 0x70A56F49, 0x71A47049, 0x70A47348, 0x72A37249, 0x6DA47049, 0x73A47148, 0x6FA47249, -0x70A47049, 0x71A46E49, 0x75A47148, 0x6FA47549, 0x70A46E49, 0x71A47049, 0x71A56C48, 0x6DA57548, -0x6FA47049, 0x73A46F49, 0x73A47548, 0x6BA47149, 0x75A37349, 0x72A37449, 0x76A47348, 0x71A57049, -0x6FA46F49, 0x6AA56E4A, 0x73A37349, 0x6FA36E4A, 0x6EA46D4A, 0x6EA46D4A, 0x6DA46F49, 0x71A36F49, -0x70A46A4A, 0x72A47349, 0x74A47048, 0x6DA46E4A, 0x75A37049, 0x6DA4704A, 0x71A37449, 0x71A46C4A, -0x6EA46E4A, 0x73A47049, 0x74A37348, 0x73A37448, 0x6EA46F49, 0x6EA37349, 0x74A37449, 0x75A37848, -0x6FA46E49, 0x74A47348, 0x72A56E49, 0x6FA46B49, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x47993F64, 0x3F994365, 0x47974066, 0x4D9A3B65, 0x43984F64, 0x51964764, 0x49985064, 0x4E984864, +0x3F9B4363, 0x4A9A4962, 0x409C3D63, 0x3F9A4563, 0x45994264, 0x41993D65, 0x3F9B4564, 0x48993E64, +0x3A994F64, 0x48984D65, 0x499A4064, 0x3A994866, 0x45973D67, 0x3C994266, 0x52974C64, 0x47983D67, +0x42983D67, 0x4C9A4163, 0x4F984864, 0x46994964, 0x409A3F64, 0x44984C64, 0x46984C64, 0x3D985164, +0x4A994263, 0x399A4A64, 0x469A4264, 0x409A4464, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16402,25 +16477,21 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00926C65, 0x6EA47249, 0x6FA47149, 0x6BA36C4A, 0x71A37049, 0x73A46E48, 0x6FA47249, 0x77A47149, -0x72A37348, 0x74A47448, 0x72A37249, 0x74A47448, 0x74A47548, 0x74A37348, 0x72A3734A, 0x75A37548, -0x76A37848, 0x73A46E49, 0x6FA47249, 0x72A46F49, 0x71A47249, 0x71A47049, 0x70A47548, 0x75A37149, -0x70A46F49, 0x6EA37049, 0x6CA47349, 0x72A36E49, 0x75A46E48, 0x6DA3704A, 0x72A46F49, 0x6CA56F48, -0x71A46E48, 0x6EA37249, 0x6DA37549, 0x6FA46E49, 0x73A37449, 0x72A3734A, 0x75A37448, 0x71A46F49, -0x71A47248, 0x6FA56C49, 0x6CA47149, 0x72A37049, 0x6EA46D49, 0x6DA46D49, 0x6EA46D49, 0x6EA47049, -0x6DA46D49, 0x74A37349, 0x71A47049, 0x6BA46E4A, 0x73A36D4A, 0x6CA36F49, 0x74A37349, 0x73A36D4A, -0x6FA46F49, 0x72A47049, 0x75A37248, 0x71A47349, 0x6EA46D49, 0x6FA47549, 0x72A37449, 0x71A37848, -0x71A46E49, 0x6FA47349, 0x70A46E49, 0x70A46E49, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008B4C72, 0x46994664, 0x42993667, 0x44974067, 0x47994164, 0x36994866, 0x54974664, 0x4A984B63, +0x45994363, 0x4F9B4B61, 0x49994E63, 0x52975263, 0x4F974E65, 0x4C974D64, 0x50985262, 0x59955D62, +0x53974C64, 0x4F965463, 0x53974564, 0x3C9A4465, 0x49984066, 0x46994764, 0x47984466, 0x41994D64, +0x55985063, 0x42994465, 0x3E994566, 0x37994566, 0x45973F65, 0x4E993D64, 0x3A983E68, 0x4C994364, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16442,16 +16513,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00926F65, 0x73A46F49, 0x70A46C49, 0x6BA3714B, 0x6EA47349, 0x6DA46D49, 0x72A37849, 0x71A37349, -0x72A47248, 0x70A47349, 0x74A47547, 0x75A47648, 0x77A47748, 0x79A37948, 0x79A27848, 0x75A27349, -0x73A37549, 0x77A37548, 0x70A46E49, 0x71A37149, 0x6EA46F49, 0x71A37149, 0x70A36E49, 0x73A37649, -0x72A46F49, 0x6FA46E49, 0x71A46C4A, 0x72A37149, 0x6EA47549, 0x6FA46B4A, 0x71A3714A, 0x71A46C48, -0x71A36D49, 0x6DA37049, 0x71A36E4A, 0x73A46C49, 0x6FA37449, 0x75A37149, 0x72A37549, 0x74A37149, -0x6EA46F49, 0x72A47248, 0x6EA56D49, 0x6EA47049, 0x70A46F49, 0x6FA46D4A, 0x6EA47049, 0x71A46D49, -0x6CA37549, 0x71A37349, 0x72A46E49, 0x6BA3714A, 0x70A36D4A, 0x6CA36F4A, 0x76A27349, 0x71A36D4A, -0x6FA36D4A, 0x73A36E49, 0x74A37149, 0x71A37148, 0x6EA46E49, 0x6FA37349, 0x71A37349, 0x6DA47549, -0x72A36F49, 0x6CA47249, 0x71A36F49, 0x6EA46F49, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16461,9 +16522,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x52944A65, 0x3F983C66, 0x3A974767, 0x3B984466, 0x45993E64, 0x47965165, 0x50964B65, 0x48974C64, +0x4D974566, 0x429A3F64, 0x3E994265, 0x42984466, 0x43984565, 0x41983E65, 0x3B993967, 0x46974C64, +0x48984965, 0x4F984764, 0x3A993467, 0x48954867, 0x35973869, 0x3F974E65, 0x52964665, 0x39974269, +0x40973F67, 0x43984365, 0x46974465, 0x44984564, 0x40993C65, 0x46974764, 0x42974666, 0x40984665, +0x4F974065, 0x49993965, 0x4C984A63, 0x40983967, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16482,16 +16550,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00917364, 0x70A47049, 0x6FA36A4A, 0x70A36E4A, 0x71A46E49, 0x6AA47149, 0x77A37149, 0x72A37348, -0x70A46F49, 0x74A47348, 0x72A47448, 0x75A37549, 0x74A3734A, 0x73A37349, 0x75A47548, 0x78A27A49, -0x76A37349, 0x74A37649, 0x76A37049, 0x6DA46F49, 0x72A46E4A, 0x71A37148, 0x71A3704A, 0x6FA47349, -0x77A37548, 0x6FA46F49, 0x6DA4704A, 0x6AA47049, 0x70A36E49, 0x74A46D49, 0x6BA36D4B, 0x73A36F49, -0x76A36E49, 0x6CA36E49, 0x70A26F4A, 0x6FA37049, 0x6CA37049, 0x74A27549, 0x72A37149, 0x73A37349, -0x6FA46E49, 0x6DA47049, 0x70A47049, 0x6FA56E48, 0x6DA56C49, 0x6DA46F49, 0x71A37049, 0x6CA36C4A, -0x74A36F49, 0x71A37349, 0x70A46B49, 0x6CA2744A, 0x6CA36C4A, 0x6DA3704A, 0x77A27249, 0x6EA36E4A, -0x6DA36D4A, 0x72A36F49, 0x72A37149, 0x6FA37149, 0x6DA36C49, 0x70A37249, 0x70A37149, 0x6CA37449, -0x73A36D49, 0x6EA47049, 0x73A46F49, 0x6EA46E49, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16504,10 +16562,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008B4373, 0x47983B66, 0x3397406A, 0x37984567, 0x3A993467, 0x4E964D65, 0x40974466, 0x42994463, +0x4E994962, 0x4C974B64, 0x43983F66, 0x3E993D66, 0x3E984066, 0x40984066, 0x40984166, 0x44964466, +0x46964D65, 0x53955064, 0x4C964D64, 0x52974763, 0x3A9A3F65, 0x4F964765, 0x48974664, 0x49984765, +0x45974766, 0x4E974C64, 0x43993966, 0x36984667, 0x3E984265, 0x40983B66, 0x48993B65, 0x3C973E69, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16522,16 +16586,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00917164, 0x70A3704A, 0x6AA36D4B, 0x6EA36D4A, 0x71A36A49, 0x70A37649, 0x70A3724A, 0x72A37148, -0x71A47448, 0x71A47348, 0x74A37149, 0x6DA36D4A, 0x6EA36E4A, 0x71A3734A, 0x73A3734A, 0x72A37549, -0x78A27849, 0x74A27349, 0x75A27849, 0x72A36C49, 0x6FA37349, 0x71A37149, 0x70A3714A, 0x71A3704A, -0x72A37449, 0x72A36F49, 0x6EA36C4A, 0x71A36B4A, 0x6FA36F49, 0x6DA47249, 0x6EA36C4A, 0x70A3704A, -0x75A17249, 0x6EA36D4A, 0x6CA2714A, 0x6CA3704A, 0x70A36D49, 0x71A27549, 0x75A27249, 0x71A37349, -0x73A3704A, 0x6FA46D49, 0x6DA36F49, 0x6FA4704A, 0x6FA37049, 0x6FA36E4A, 0x6CA36B4A, 0x70A37349, -0x71A37149, 0x74A37149, 0x6CA3694A, 0x72A2714A, 0x6AA36B4B, 0x6EA27449, 0x75A2714A, 0x6CA36F4A, -0x6EA36E4A, 0x6FA36F49, 0x71A3704A, 0x6FA37049, 0x6EA36D49, 0x71A37149, 0x6FA2714A, 0x6EA37049, -0x74A36E4A, 0x72A46B49, 0x73A37249, 0x6EA36B4A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16548,9 +16602,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x50984A62, 0x4B944A67, 0x43963A67, 0x37964368, 0x41974665, 0x47973A66, 0x43964F65, 0x50954C65, +0x4E954766, 0x47964C65, 0x48974565, 0x43984365, 0x42984665, 0x4B965064, 0x4E954B65, 0x46974B65, +0x4B964466, 0x3A983368, 0x3F954E67, 0x41953769, 0x3B963B69, 0x4C944F65, 0x42973B68, 0x44963967, +0x3C974466, 0x3D964267, 0x44964266, 0x3F973E66, 0x3B983C66, 0x49974166, 0x47953D67, 0x46983067, +0x42964965, 0x3F974267, 0x42974265, 0x4B965265, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16562,16 +16623,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916F65, 0x71A36C4A, 0x69A36E4B, 0x6AA3704A, 0x6CA3694A, 0x73A27349, 0x6EA3704A, 0x6FA47049, -0x74A37248, 0x73A37249, 0x6FA36E49, 0x6EA46D4A, 0x6EA36E4A, 0x6EA36E4A, 0x6EA36F4A, 0x6FA2704A, -0x70A3734A, 0x76A27549, 0x73A2734A, 0x75A37149, 0x6CA46D49, 0x74A3714A, 0x71A37149, 0x71A37149, -0x70A37149, 0x74A37349, 0x6FA46B4A, 0x6AA3714A, 0x6EA36F49, 0x6EA36C4A, 0x71A36C49, 0x6DA36D4B, -0x73A27249, 0x72A26E4A, 0x6AA36B4A, 0x6EA26E4A, 0x6EA37049, 0x6DA36F49, 0x74A2754A, 0x73A3714A, -0x71A3734A, 0x73A37049, 0x6FA46D49, 0x6DA46D49, 0x6DA36C4A, 0x6DA46D49, 0x71A37249, 0x71A3714A, -0x72A37449, 0x71A36C4A, 0x69A36E4A, 0x73A26C4B, 0x6AA36C4B, 0x6EA2754A, 0x72A36C4A, 0x6DA36C4B, -0x6DA36F4A, 0x6FA36E49, 0x70A36F4A, 0x6FA36F4A, 0x6CA36E49, 0x71A36F49, 0x71A26E4A, 0x70A36B49, -0x72A3714A, 0x6EA36F4A, 0x6EA37449, 0x73A37049, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16591,10 +16642,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008B4073, 0x3C973369, 0x3596356A, 0x40983866, 0x32964669, 0x45953F67, 0x3D983C65, 0x49984963, +0x4B964565, 0x41984664, 0x51955865, 0x4E944666, 0x44954467, 0x4B954E65, 0x4D964B64, 0x47964667, +0x3F973867, 0x3D954567, 0x51935365, 0x4C964965, 0x4B964864, 0x35983A67, 0x49964766, 0x4A954966, +0x45964066, 0x46964866, 0x4E964864, 0x42973368, 0x31974767, 0x3C974665, 0x3F973767, 0x42973C66, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16602,16 +16659,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00917065, 0x6FA3694A, 0x6AA26C4B, 0x6AA46F4A, 0x67A36E4B, 0x75A26E4A, 0x6FA36F49, 0x6DA47448, -0x71A37349, 0x72A36F49, 0x70A36F49, 0x73A27649, 0x77A27649, 0x74A37149, 0x71A3704A, 0x6EA36E4A, -0x6EA26F4A, 0x72A2764A, 0x76A27249, 0x73A27449, 0x70A36B49, 0x6DA37449, 0x72A2734A, 0x71A3714A, -0x6FA2704A, 0x6FA37349, 0x72A36F49, 0x6BA46A4B, 0x71A36D4A, 0x70A36E4A, 0x6BA37049, 0x6CA36E4A, -0x75A37249, 0x72A2724A, 0x6FA36C4A, 0x6AA2704B, 0x6EA3714A, 0x71A36C4A, 0x6FA2744A, 0x75A27349, -0x73A2714A, 0x71A3734A, 0x71A3704A, 0x6FA36F49, 0x6FA37049, 0x73A27549, 0x73A2734A, 0x71A3724A, -0x72A3704A, 0x6CA3694A, 0x6EA2734A, 0x6EA26A4B, 0x6CA26C4B, 0x73A2744A, 0x6FA36C4A, 0x70A26B4B, -0x6CA3704A, 0x6DA26F4A, 0x70A26F4A, 0x6EA36E4A, 0x6CA36D4A, 0x72A36F49, 0x71A26D4B, 0x71A3684A, -0x6FA37149, 0x6EA26F4A, 0x6FA36F49, 0x72A27649, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16635,23 +16682,20 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3C974566, 0x4D974763, 0x42944867, 0x41963767, 0x36963A68, 0x42944268, 0x42963C67, 0x3A963C68, +0x46944C66, 0x4A944D65, 0x4C944B66, 0x4C954F65, 0x4F964E64, 0x4C974A64, 0x4A974564, 0x3E973667, +0x2E97306A, 0x3E944369, 0x3C95336A, 0x3C953B69, 0x39954767, 0x48953D67, 0x40964367, 0x38963868, +0x3F963C67, 0x39953D69, 0x42964067, 0x3D973B67, 0x38973568, 0x45963C68, 0x47943F67, 0x3E954068, +0x34963E68, 0x42943E68, 0x3B953D69, 0x3D963F67, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916E65, 0x6DA3694B, 0x6AA26A4B, 0x6EA46B4A, 0x69A3704B, 0x70A26E4B, 0x6DA36C49, 0x72A37149, -0x72A37049, 0x6EA37149, 0x75A17749, 0x73A2704A, 0x70A2704B, 0x72A27449, 0x73A27349, 0x71A3704A, -0x6EA36B4A, 0x6DA2704B, 0x75A1764A, 0x73A27249, 0x73A27149, 0x6AA36C4A, 0x71A2714A, 0x72A2724A, -0x70A36F4A, 0x70A2714A, 0x74A27149, 0x6FA3694A, 0x69A3714A, 0x6DA37149, 0x6EA26A4A, 0x6FA36C4A, -0x71A37548, 0x70A27149, 0x71A26E4A, 0x6DA36B4A, 0x6EA26F4B, 0x70A36F4A, 0x6CA36D4A, 0x71A1744A, -0x71A2724A, 0x73A1724A, 0x71A3714A, 0x73A2734A, 0x72A2724A, 0x72A2724A, 0x72A2734A, 0x73A3714A, -0x6EA26A4B, 0x68A26C4C, 0x72A26C4B, 0x6AA26C4C, 0x6CA26E4B, 0x74A1724A, 0x6CA2704B, 0x6BA36D4A, -0x6CA36F4A, 0x6BA2704B, 0x6EA2704A, 0x6EA26C4A, 0x6BA36A4A, 0x71A36D4A, 0x71A26D4A, 0x6FA26B4A, -0x6CA2704A, 0x6FA26B4B, 0x6EA36F4A, 0x6FA2704A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16678,20 +16722,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008B3B73, 0x3895346A, 0x3A963269, 0x3B973169, 0x39954669, 0x3E963A67, 0x3B984B64, 0x46954666, +0x41974265, 0x48953C69, 0x35953A6A, 0x3D953F68, 0x3E954068, 0x45944667, 0x42943A68, 0x3B963B66, +0x40954766, 0x42953A69, 0x38953A69, 0x4C935267, 0x49954B65, 0x47954565, 0x32973A68, 0x40954568, +0x4C944767, 0x3E973B67, 0x46954766, 0x48964165, 0x3A972B69, 0x3B974066, 0x3B964566, 0x34964367, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916E65, 0x6CA2684B, 0x6BA2694B, 0x6EA3694A, 0x6AA2734B, 0x6EA26E4B, 0x6BA46E49, 0x71A27349, -0x71A36D49, 0x6FA2734A, 0x71A26B4B, 0x6AA36A4B, 0x6BA36D4B, 0x6DA26B4B, 0x6BA26F4A, 0x6FA3704A, -0x70A26D4B, 0x6CA26C4B, 0x6DA2734A, 0x75A27449, 0x73A3734A, 0x72A26A4A, 0x6BA36F4A, 0x71A2714A, -0x71A26E4A, 0x6FA2714A, 0x71A27449, 0x70A36D4A, 0x67A3694B, 0x70A36C4A, 0x71A36B4A, 0x6CA36D4A, -0x6CA3704A, 0x74A37148, 0x6FA2714A, 0x6FA26B4A, 0x6AA26C4A, 0x6FA26F4A, 0x6FA26D4A, 0x6CA26D4A, -0x71A2734A, 0x72A2734A, 0x73A2724A, 0x73A2744A, 0x74A27449, 0x73A37249, 0x72A37049, 0x6DA36A4A, -0x67A3684B, 0x6DA2704B, 0x6CA2694C, 0x6CA26C4B, 0x6BA2714A, 0x71A26D4A, 0x6EA26F4A, 0x6BA36B4B, -0x6EA26D4A, 0x6BA26D4B, 0x6FA26F4A, 0x6DA36C4A, 0x6BA3694A, 0x70A26C4A, 0x71A26E4A, 0x6DA26E4B, -0x69A26E4B, 0x6FA26E4B, 0x6CA26D4B, 0x6DA26E4B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16723,18 +16763,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916C65, 0x6BA2694B, 0x6BA2694B, 0x6CA3684B, 0x6BA2714B, 0x6EA26C4A, 0x6CA37349, 0x70A2704A, -0x6FA36F49, 0x72A26C4B, 0x69A26B4B, 0x6DA26E4B, 0x6DA26E4B, 0x70A2714A, 0x6FA26C4B, 0x6CA36C4A, -0x6EA2714A, 0x6FA26C4B, 0x6BA26B4B, 0x73A2754A, 0x72A2734A, 0x71A2704A, 0x69A36C4A, 0x6EA2704A, -0x73A2714A, 0x6EA26C4A, 0x70A2714A, 0x71A26F4A, 0x6CA3664B, 0x6CA36E4A, 0x6CA3704A, 0x69A36F4A, -0x6CA26C4B, 0x6EA37249, 0x71A36F49, 0x70A16E4B, 0x6CA2694B, 0x69A16B4C, 0x6DA26E4B, 0x6BA3694B, -0x6AA26C4B, 0x6FA1704A, 0x71A2714A, 0x72A2714A, 0x70A36F4A, 0x6FA26E4A, 0x6DA36B4A, 0x69A36A4B, -0x6CA26C4C, 0x6BA16A4C, 0x69A36A4B, 0x6BA26B4B, 0x6EA1714B, 0x6CA26C4B, 0x70A36A4A, 0x6CA26D4B, -0x6EA26C4A, 0x6CA26C4B, 0x6FA36D4A, 0x6DA36C4A, 0x6BA26A4B, 0x71A26E4A, 0x71A26D4A, 0x6AA26E4B, -0x6AA26A4B, 0x6DA26D4B, 0x6CA26C4B, 0x6CA26D4B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3B93396B, 0x38963B68, 0x3F974765, 0x41964166, 0x3B943969, 0x37963069, 0x3093386C, 0x3B943E69, +0x3495306A, 0x35953969, 0x39963A68, 0x3A973A68, 0x3B973967, 0x38973867, 0x36963869, 0x3E943F69, +0x3A94316B, 0x3195366A, 0x3595306B, 0x39944269, 0x45943B68, 0x3C954868, 0x3A953A69, 0x3E954168, +0x38943B69, 0x3394406A, 0x3E963C67, 0x3B983767, 0x38953968, 0x47944267, 0x4C943D68, 0x37943E6A, +0x3F953168, 0x37943C6A, 0x3B94386A, 0x37943969, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16762,22 +16800,18 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916C65, 0x6CA2694B, 0x6BA2694B, 0x6BA2674B, 0x6BA26F4B, 0x6FA26B4A, 0x6EA37149, 0x71A26E4A, -0x6FA2714A, 0x6CA2694C, 0x6BA26C4C, 0x6EA26F4B, 0x71A2714A, 0x70A26F4B, 0x6EA26D4B, 0x6BA16A4B, -0x6CA36E4A, 0x71A16F4A, 0x6BA26A4B, 0x6BA2724B, 0x72A1714B, 0x71A26F4A, 0x71A2694B, 0x6EA26F4B, -0x6FA1724A, 0x6FA16C4B, 0x6BA2714A, 0x6FA2704A, 0x6EA2684B, 0x67A36E4B, 0x6AA36D4A, 0x6EA26C4A, -0x6CA16B4C, 0x6AA36C4A, 0x6EA37149, 0x6FA26F4A, 0x6CA26B4B, 0x6AA2684B, 0x68A16A4C, 0x6CA26D4B, -0x69A2684C, 0x6AA26B4B, 0x6BA26C4B, 0x6CA36C4A, 0x6CA36C4A, 0x6BA36B4A, 0x6AA26B4B, 0x6DA16E4B, -0x6BA1684C, 0x68A26A4C, 0x6AA2684C, 0x6BA26F4B, 0x70A16C4B, 0x6CA2714A, 0x6CA26C4B, 0x6DA26E4A, -0x6BA26C4B, 0x69A26E4C, 0x6DA26D4A, 0x6CA36B4A, 0x6BA26B4B, 0x71A26F4A, 0x73A26D4A, 0x6AA16E4B, -0x6DA2684B, 0x6AA26C4C, 0x6CA26B4C, 0x6AA26C4B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008B3A74, 0x3894336B, 0x3695346A, 0x3895306A, 0x37944268, 0x43953A66, 0x43954566, 0x45953D67, +0x43944168, 0x3394376B, 0x3893416A, 0x43943F68, 0x3F943C69, 0x3A943D69, 0x3D944168, 0x3C933A69, +0x36953A69, 0x42944767, 0x3F94376A, 0x35953C69, 0x44944668, 0x41944A66, 0x46944067, 0x32963E68, +0x41944668, 0x48933B69, 0x37963967, 0x48944367, 0x40963967, 0x2996336B, 0x3A963368, 0x3E953369, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16802,25 +16836,22 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916C65, 0x6BA2694C, 0x6AA2694B, 0x6BA2684B, 0x6AA26F4B, 0x6FA26B4A, 0x6FA2704A, 0x70A26D4A, -0x70A26E4B, 0x69A26A4C, 0x6BA16F4B, 0x6FA16E4B, 0x6EA16C4B, 0x6CA26D4B, 0x6DA16E4B, 0x6CA16C4C, -0x6AA26C4B, 0x6FA2714A, 0x6EA26A4B, 0x6AA26C4B, 0x70A1704B, 0x6FA2724A, 0x71A26E4B, 0x68A36D4A, -0x6FA1704B, 0x71A16C4B, 0x6BA26C4A, 0x72A16F4B, 0x6EA36B4A, 0x65A2694B, 0x6CA2694B, 0x6EA2694B, -0x6AA1694C, 0x6AA16B4C, 0x6BA26C4A, 0x70A36F4A, 0x6CA26A4B, 0x6CA26B4B, 0x69A2674C, 0x67A16A4C, -0x6CA26D4B, 0x69A2674C, 0x68A26A4C, 0x6BA16B4C, 0x6BA26B4C, 0x6BA16B4C, 0x6AA2694C, 0x67A2654C, -0x67A2684B, 0x69A2674C, 0x67A26B4B, 0x6EA16F4B, 0x6CA26D4B, 0x6FA26A4B, 0x6BA26C4C, 0x6FA26B4B, -0x6BA16A4C, 0x6DA26D4B, 0x6CA26C4B, 0x6BA36C4A, 0x69A26B4B, 0x6FA1704B, 0x73A16B4B, 0x6CA16C4C, -0x6EA26D4B, 0x6AA16A4C, 0x6DA26D4B, 0x6CA26C4B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x3294346B, 0x3394356B, 0x3793366C, 0x38953E68, 0x42963965, 0x35953869, 0x3B93356A, 0x32942F6C, +0x2D93306D, 0x3494386A, 0x36953669, 0x37943369, 0x3294346B, 0x3294336B, 0x30942F6B, 0x2D952C6C, +0x2D95306B, 0x3394386A, 0x3C93406A, 0x41943C68, 0x3D953C6A, 0x38943469, 0x3B944168, 0x3D93376A, +0x2F933B6C, 0x3A963B68, 0x3B953768, 0x37953468, 0x35943A6A, 0x41934769, 0x49933B69, 0x3C93346A, +0x3E944167, 0x40933F69, 0x3D92396C, 0x3692356C, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16842,16 +16873,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916C65, 0x6BA2684C, 0x6AA2694B, 0x6CA2684B, 0x6BA16F4B, 0x6FA16C4B, 0x70A26F4A, 0x6EA26B4A, -0x6FA16C4B, 0x68A26A4C, 0x6DA26E4B, 0x6BA16C4C, 0x6FA1704A, 0x6FA16D4A, 0x6DA26D4B, 0x6EA26D4B, -0x6AA26A4C, 0x6AA26F4B, 0x72A16D4A, 0x67A26B4B, 0x6EA1704B, 0x6EA26F4B, 0x70A16F4A, 0x6CA2684B, -0x6CA26D4B, 0x70A1704B, 0x6BA2694B, 0x6FA1704B, 0x6FA26E4A, 0x67A2644C, 0x6CA2684B, 0x6BA26D4B, -0x68A1694C, 0x69A1694C, 0x6BA16A4C, 0x6BA26D4A, 0x6FA36B49, 0x6AA26B4B, 0x6CA16A4C, 0x69A2674C, -0x66A1674C, 0x69A16B4B, 0x6AA26A4B, 0x6AA2694C, 0x69A1694C, 0x69A2694C, 0x68A2674C, 0x67A2664C, -0x67A2684C, 0x68A26B4B, 0x6CA16E4C, 0x6EA16C4B, 0x6DA26C4B, 0x6BA2694B, 0x6CA16E4B, 0x6DA16B4C, -0x67A26C4C, 0x6CA26C4B, 0x6CA26B4B, 0x6BA2694B, 0x6AA16B4B, 0x6EA1714B, 0x71A16C4B, 0x6CA1694C, -0x6EA26F4B, 0x6EA16E4B, 0x6DA06B4C, 0x6AA16A4C, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16861,10 +16882,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008A3C74, 0x37942F6A, 0x3595316A, 0x3995336A, 0x34944069, 0x42943967, 0x45944067, 0x3A953768, +0x4293356B, 0x3194396B, 0x3C94366A, 0x3D934868, 0x43944166, 0x40944168, 0x44934569, 0x3F943D68, +0x38943869, 0x3694376A, 0x42934567, 0x3395306A, 0x3B943D69, 0x3E943E69, 0x46944367, 0x3A94326A, +0x32953B69, 0x42924869, 0x3E943469, 0x33954668, 0x40944268, 0x3695256B, 0x30953A6A, 0x36943C69, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16882,16 +16909,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916D65, 0x6AA2674C, 0x6AA2684C, 0x6BA2694C, 0x69A26E4B, 0x6FA16B4A, 0x70A26E4A, 0x6CA26B4B, -0x6FA16A4C, 0x68A26B4C, 0x6CA26A4C, 0x6DA1714A, 0x6FA26F4A, 0x6EA16E4B, 0x6FA1704B, 0x6EA26D4B, -0x6BA26B4B, 0x6AA26A4C, 0x6FA1704A, 0x69A2684B, 0x6CA26D4B, 0x6EA16D4B, 0x71A16F4A, 0x6CA2684B, -0x68A26C4B, 0x6FA1714B, 0x6DA2694B, 0x69A2704B, 0x6EA16F4B, 0x6AA2634C, 0x68A26C4B, 0x6AA26C4B, -0x68A3664B, 0x68A1684C, 0x68A16A4C, 0x6BA16B4C, 0x6DA26D4B, 0x6CA2694A, 0x67A26A4B, 0x6CA1694C, -0x67A1664C, 0x65A1654D, 0x67A1674D, 0x68A26A4C, 0x6AA1694C, 0x68A1674D, 0x65A2654D, 0x66A1674C, -0x69A16B4C, 0x6DA16D4C, 0x6DA16C4B, 0x6EA26D4B, 0x6BA2694B, 0x69A16D4B, 0x6EA16C4B, 0x67A1674D, -0x6AA26A4B, 0x6CA26B4B, 0x6DA26C4B, 0x68A2684B, 0x6AA16D4C, 0x6FA16F4B, 0x6FA16D4B, 0x6BA16A4C, -0x6CA16F4B, 0x6FA16F4B, 0x6FA16E4B, 0x6FA16F4B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16905,9 +16922,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x35963568, 0x2F952C6A, 0x3392346B, 0x3292376D, 0x3B92396A, 0x36953768, 0x36963467, 0x2F95326B, +0x3693336B, 0x3194306C, 0x2F94316C, 0x31942F6B, 0x2D942F6C, 0x2F942F6C, 0x3093336C, 0x3392366C, +0x3A913C6B, 0x38933A69, 0x3B953E69, 0x3A953769, 0x34943969, 0x42923B6A, 0x32902670, 0x2E94346C, +0x39943A69, 0x3B953968, 0x3294316A, 0x3193366C, 0x3D934069, 0x40934069, 0x3E93376A, 0x3892346B, +0x39923A6B, 0x41924369, 0x42924269, 0x43914469, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16922,16 +16946,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916C65, 0x6BA2674C, 0x69A2684C, 0x6AA2684B, 0x68A26D4B, 0x70A16A4B, 0x70A26D4B, 0x6BA26B4B, -0x6DA1684C, 0x69A16B4C, 0x69A1694C, 0x6FA16F4A, 0x6CA16B4C, 0x69A2674C, 0x66A26A4C, 0x6DA16F4B, -0x6CA26A4B, 0x69A1684C, 0x6CA1714B, 0x6CA2674C, 0x68A26A4C, 0x6BA26C4B, 0x6EA1704A, 0x6CA26A4B, -0x67A26C4B, 0x6DA16F4B, 0x6FA1694B, 0x66A26D4B, 0x6EA16D4B, 0x6CA2664C, 0x65A26B4B, 0x6AA16D4B, -0x6AA26A4B, 0x67A2664B, 0x68A1694C, 0x69A16B4D, 0x6CA16B4C, 0x6AA26B4B, 0x6AA3694A, 0x68A2694C, -0x6AA1694C, 0x68A1684C, 0x67A1684C, 0x68A1674C, 0x67A1674C, 0x67A1674C, 0x67A1694C, 0x69A16B4D, -0x6BA16C4C, 0x6BA26C4B, 0x6CA26D4B, 0x6CA26A4B, 0x69A26B4B, 0x6FA16C4B, 0x68A0644E, 0x67A1694C, -0x6BA26C4B, 0x6CA26C4B, 0x68A2684C, 0x68A16A4C, 0x6DA16E4B, 0x6EA16E4B, 0x6DA16A4B, 0x6BA16A4C, -0x6BA16C4C, 0x6EA16F4B, 0x6FA16F4B, 0x6FA1704B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16948,10 +16962,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x008A3575, 0x3C943269, 0x3194316B, 0x3395306A, 0x30943B69, 0x43933669, 0x3D943E68, 0x36933869, +0x3E92326C, 0x3192396B, 0x3093346C, 0x46933F68, 0x3492306C, 0x3194346B, 0x31942F6C, 0x2C944069, +0x3A943F68, 0x3592356B, 0x3193426A, 0x43932F6A, 0x2C94346B, 0x3793366B, 0x3A934268, 0x3C943569, +0x3293396A, 0x3D923A6A, 0x3E93366A, 0x2F94356A, 0x4193386A, 0x3B932F6B, 0x2794376C, 0x34943A6A, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16962,16 +16982,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916A65, 0x6CA2694B, 0x68A1684C, 0x69A2684B, 0x68A26C4B, 0x6FA16A4B, 0x6DA16E4B, 0x6AA16B4B, -0x6DA1694C, 0x68A16B4C, 0x68A1694C, 0x70A16E4A, 0x69A1674C, 0x68A2694C, 0x68A2684C, 0x66A26E4B, -0x6CA16D4B, 0x6AA1694C, 0x68A16F4B, 0x6FA1674C, 0x66A1694C, 0x6AA16A4C, 0x6CA16F4A, 0x6DA16A4B, -0x68A16B4B, 0x6DA16B4B, 0x6EA16A4B, 0x68A26A4C, 0x6EA16B4C, 0x6CA2674C, 0x64A26A4C, 0x69A16C4B, -0x6AA3674A, 0x6AA2694C, 0x65A1694C, 0x69A1694C, 0x69A1694D, 0x69A1694C, 0x6AA26B4B, 0x6AA2694B, -0x67A2674C, 0x68A1694C, 0x69A1694C, 0x68A1684C, 0x68A1694C, 0x6AA16A4D, 0x6AA16A4C, 0x6AA16B4C, -0x6BA26C4B, 0x6CA16D4B, 0x6CA26B4B, 0x69A26A4C, 0x6FA16E4B, 0x6BA0654D, 0x65A1684D, 0x68A2694C, -0x6BA26C4B, 0x69A2694C, 0x6AA16D4B, 0x6EA16D4B, 0x6DA16D4B, 0x6DA16C4C, 0x6BA16C4B, 0x6CA06A4C, -0x6BA06E4C, 0x6EA16E4C, 0x6AA16D4B, 0x6EA16E4B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -16992,9 +17002,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x33953869, 0x30952D6A, 0x35942F6A, 0x2D93306C, 0x30922D6D, 0x2C92326D, 0x3592376B, 0x3992386A, +0x35953669, 0x37943469, 0x3493326B, 0x3293316C, 0x2F932E6C, 0x2E932F6B, 0x3095336B, 0x35943769, +0x39943969, 0x35943269, 0x3293376B, 0x3E913B6A, 0x3191286F, 0x28922C6F, 0x3093356B, 0x3594346A, +0x3294356A, 0x3F933B69, 0x3A923F6A, 0x3E92386A, 0x3293326B, 0x3292356C, 0x3392356C, 0x3391306D, +0x2F92386C, 0x3C913D6A, 0x3D923D6A, 0x3E924269, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -17002,16 +17019,6 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00916A66, 0x6AA26A4B, 0x67A1674D, 0x68A26A4B, 0x66A26A4C, 0x6DA16B4C, 0x6AA16E4B, 0x69A1694C, -0x6DA16A4C, 0x68A16A4C, 0x67A16A4C, 0x6FA16C4B, 0x69A1664D, 0x69A1684C, 0x6BA1664C, 0x67A1684C, -0x6FA16E4B, 0x6CA06B4B, 0x68A16B4C, 0x6FA0694B, 0x66A1674C, 0x6AA1694C, 0x69A16E4B, 0x6EA1694B, -0x6AA16A4C, 0x6DA1694B, 0x6EA16A4B, 0x69A1694C, 0x6EA1694C, 0x6CA1674C, 0x63A1694D, 0x69A26B4C, -0x69A26B4B, 0x68A2674B, 0x69A1674C, 0x67A1684C, 0x68A1674D, 0x66A1694D, 0x69A16A4C, 0x6BA16B4B, -0x6AA26A4B, 0x6BA2694B, 0x69A1684C, 0x68A1684C, 0x67A2674D, 0x67A1674C, 0x68A2694C, 0x6AA26B4B, -0x6CA26B4B, 0x6AA2684B, 0x68A16A4C, 0x6EA16C4B, 0x68A1654D, 0x64A1664D, 0x67A1694C, 0x69A1694C, -0x68A16A4B, 0x6EA16C4B, 0x6CA16E4B, 0x6EA16A4B, 0x68A1684C, 0x68A1694C, 0x69A16A4D, 0x69A1684D, -0x67A06B4C, 0x6CA16D4C, 0x6DA16D4C, 0x6DA16F4B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -17035,23 +17042,19 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00894075, 0x3394356A, 0x2F922F6C, 0x2B94366A, 0x2F942F6C, 0x37923A6B, 0x2F933C6A, 0x3593336B, +0x3991356C, 0x3291356D, 0x3392356C, 0x3F913C6A, 0x2D92316D, 0x37933B6A, 0x3692366B, 0x2A932E6C, +0x34924069, 0x3E91366B, 0x3493306B, 0x3F92366A, 0x2893276D, 0x3592366B, 0x3293396A, 0x40933569, +0x3293346B, 0x3D92306B, 0x3E91396B, 0x3293356B, 0x3D92316B, 0x3592336C, 0x2594336C, 0x3392376A, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906E66, 0x69A26A4B, 0x67A1684C, 0x65A16A4B, 0x67A1674C, 0x6AA16C4C, 0x67A16C4C, 0x6AA1684C, -0x6BA06A4C, 0x69A16A4D, 0x69A1694C, 0x6EA16D4B, 0x67A1684C, 0x6AA16C4C, 0x6AA16A4C, 0x65A2674C, -0x69A16E4B, 0x6EA06A4B, 0x69A1684C, 0x6EA06A4C, 0x65A1644D, 0x6AA16A4C, 0x69A16B4C, 0x6EA1694B, -0x68A1694C, 0x6DA1684C, 0x6DA16B4C, 0x68A1694C, 0x6CA1684C, 0x69A1694C, 0x63A2694C, 0x69A16A4C, -0x67A0684D, 0x6AA26B4B, 0x67A1684C, 0x6AA1674C, 0x66A1664C, 0x65A1654D, 0x66A0694D, 0x6AA16A4C, -0x6AA16A4C, 0x6AA1694C, 0x69A2694B, 0x69A2694C, 0x68A2684C, 0x68A2694C, 0x68A16A4B, 0x6AA26A4C, -0x68A1684C, 0x69A16B4C, 0x6CA06A4C, 0x65A0644E, 0x64A1664D, 0x67A1694D, 0x69A1684C, 0x67A16B4C, -0x6CA16B4B, 0x6CA1694C, 0x68A1684C, 0x67A1654D, 0x68A1684D, 0x68A1694C, 0x69A1694C, 0x6AA1694C, -0x67A1694D, 0x6CA06C4C, 0x6CA16D4B, 0x6CA16A4C, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, @@ -17079,19 +17082,16 @@ const unsigned long bg[480*640]={ 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, -0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906F65, 0x6EA1684C, 0x68A1674C, 0x66A1674C, 0x68A1664C, 0x6AA16B4B, 0x68A16B4C, 0x68A1694C, -0x6BA1694C, 0x67A16B4D, 0x6AA1694C, 0x6CA06C4C, 0x67A1664C, 0x68A06A4C, 0x67A16A4C, 0x65A1684D, -0x66A16E4C, 0x6FA0694C, 0x68A1674C, 0x6DA0694C, 0x65A1634D, 0x69A16A4C, 0x68A1694C, 0x6CA1684B, -0x67A1694C, 0x6DA1674B, 0x6CA06A4C, 0x66A1694C, 0x6BA1674C, 0x68A1694D, 0x64A1674C, 0x69A1684C, -0x66A0664D, 0x67A1684C, 0x6BA16A4B, 0x68A1684C, 0x69A1664C, 0x65A1654D, 0x65A1664D, 0x66A1674D, -0x67A1694D, 0x6AA06A4C, 0x69A0694C, 0x6AA06C4C, 0x6CA16A4C, 0x6AA16A4C, 0x69A1684C, 0x69A1684C, -0x69A16A4C, 0x6AA0674D, 0x65A0654E, 0x67A1684C, 0x69A1694D, 0x68A1684C, 0x6AA16C4B, 0x6BA1694C, -0x67A1674D, 0x69A1684D, 0x69A06A4D, 0x69A0684C, 0x67A1684C, 0x69A16A4C, 0x69A06B4C, 0x6BA1694D, -0x69A1674D, 0x6BA06D4C, 0x6CA06D4C, 0x6AA1694C, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x2B902D6F, 0x2D92316D, 0x3892366A, 0x3293316B, 0x34932C6B, 0x29922A6E, 0x2A922B6D, 0x2B912D6D, +0x2F91326C, 0x3791366C, 0x3490356C, 0x37913A6B, 0x3A91376B, 0x3692356B, 0x3392326C, 0x3292316C, +0x3591376C, 0x35912D6D, 0x29912A6F, 0x2E92316C, 0x3292336C, 0x3192326B, 0x36933A6A, 0x3892356B, +0x2F922D6D, 0x3291316D, 0x3391356D, 0x3491316C, 0x2F93326C, 0x3392366B, 0x3592386C, 0x3791326D, +0x33912D6E, 0x38903D6B, 0x3A913D6A, 0x3792346B, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, @@ -17123,15 +17123,15 @@ const unsigned long bg[480*640]={ 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906F65, 0x6EA1694B, 0x69A1674C, 0x66A1654D, 0x68A1664C, 0x68A16B4C, 0x69A1684C, 0x69A0684D, -0x6BA0694C, 0x67A0684D, 0x6BA1674D, 0x6BA06B4C, 0x67A1664D, 0x64A1664D, 0x67A1684C, 0x65A0694D, -0x66A16D4B, 0x6DA0684C, 0x68A1664D, 0x6BA0674C, 0x66A1634D, 0x67A1684D, 0x67A1684C, 0x69A1684C, -0x66A16A4C, 0x6EA0694B, 0x6CA0684C, 0x66A1694D, 0x69A1674C, 0x67A0694D, 0x65A1684C, 0x69A1684C, -0x6BA0684C, 0x66A0654E, 0x66A1674D, 0x6AA1684C, 0x67A1694D, 0x68A1664C, 0x64A0664D, 0x68A0674D, -0x67A1674D, 0x67A0684D, 0x68A0674D, 0x67A1684D, 0x68A0674C, 0x67A1674C, 0x67A1674D, 0x67A0674D, -0x67A0664D, 0x65A0654E, 0x67A1694D, 0x69A1694C, 0x6AA16A4C, 0x6BA16A4C, 0x69A1684D, 0x67A1674D, -0x67A1664D, 0x65A1654D, 0x65A0664D, 0x66A1664D, 0x68A0684D, 0x68A1694D, 0x69A1674D, 0x67A1694D, -0x67A1674D, 0x69A06C4C, 0x6CA06A4C, 0x68A1684C, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00884274, 0x4092356A, 0x3393306B, 0x2C92286D, 0x31922B6C, 0x3092396A, 0x3392326B, 0x3291306D, +0x3891326C, 0x2F90316D, 0x38912F6C, 0x388F3A6C, 0x2E932B6D, 0x27922C6E, 0x3093326B, 0x2991346D, +0x2D913D6B, 0x3D91306C, 0x30922C6D, 0x38912F6C, 0x2B92246D, 0x2F92316D, 0x2F92326C, 0x3492326B, +0x2C92356C, 0x3E91346B, 0x3C91326B, 0x2B92326C, 0x35922D6C, 0x2E91326D, 0x2A93326C, 0x3491306C, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, @@ -17163,15 +17163,15 @@ const unsigned long bg[480*640]={ 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906C66, 0x6FA06D4B, 0x68A1694C, 0x67A0664D, 0x65A1674C, 0x66A16A4C, 0x6AA0664C, 0x6AA0674C, -0x6AA1694C, 0x67A0684D, 0x6AA0694D, 0x6A9F6D4C, 0x69A1674C, 0x65A1644D, 0x67A1664D, 0x66A0694C, -0x68A06D4C, 0x6AA0674D, 0x68A0684D, 0x68A1674C, 0x65A1644D, 0x67A0694C, 0x67A1684C, 0x68A1684C, -0x66A16B4C, 0x6CA0694C, 0x6BA0664C, 0x65A1694D, 0x68A1674C, 0x67A1674D, 0x66A1674C, 0x6AA0694C, -0x63A1694D, 0x69A0674C, 0x65A0654E, 0x66A1674D, 0x68A1684C, 0x68A0694D, 0x67A1654D, 0x65A0654D, -0x65A0654D, 0x67A0684D, 0x69A0694C, 0x69A0694D, 0x68A0674D, 0x67A0664D, 0x66A0654D, 0x65A0664E, -0x67A0674D, 0x68A0694D, 0x69A16B4C, 0x6CA16B4C, 0x69A1684C, 0x67A1664D, 0x66A1654D, 0x64A1644D, -0x65A0644D, 0x64A0654E, 0x66A0664D, 0x65A0644E, 0x64A1654D, 0x67A0694D, 0x69A06A4C, 0x69A0674C, -0x69A0694D, 0x68A06B4C, 0x6BA0694C, 0x68A0674D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x2591356D, 0x348F2D6E, 0x29902970, 0x2B922E6D, 0x3292306C, 0x3091316D, 0x2E91296D, 0x2991286E, +0x2990286F, 0x2D91306D, 0x3290356C, 0x3390336C, 0x2F912E6D, 0x2D902B6E, 0x2B902A6F, 0x2B902C6F, +0x2D912D6E, 0x2F91336C, 0x3393396A, 0x3B92396A, 0x3392316C, 0x2F912C6D, 0x2B92296D, 0x2892286E, +0x2991286E, 0x2890296F, 0x2B902C6E, 0x2B91286F, 0x2792296E, 0x2E91316D, 0x3290366C, 0x33922D6C, +0x3290336D, 0x3090396D, 0x3890336C, 0x30902D6E, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, @@ -17203,15 +17203,15 @@ const unsigned long bg[480*640]={ 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906866, 0x6BA06F4B, 0x6CA1674C, 0x68A1654C, 0x65A1664C, 0x66A1664C, 0x6AA0684C, 0x67A0684D, -0x67A06A4C, 0x66A0664D, 0x68A06A4C, 0x68A06B4C, 0x6A9F684D, 0x67A0684C, 0x67A0654D, 0x67A0684D, -0x68A06B4C, 0x68A0674D, 0x67A0684D, 0x67A1664C, 0x65A1654D, 0x67A06A4D, 0x67A1674C, 0x67A1674D, -0x65A06B4C, 0x6AA06A4C, 0x69A0654C, 0x65A0684D, 0x68A1654D, 0x68A0634D, 0x67A1684C, 0x699F674D, -0x69A0654C, 0x67A06A4D, 0x679F674D, 0x65A0644E, 0x65A1674D, 0x68A0674C, 0x67A0654D, 0x65A1664D, -0x66A1654D, 0x65A1654D, 0x66A0664D, 0x65A0654E, 0x65A0644E, 0x65A0654E, 0x64A0644D, 0x66A1674D, -0x68A1694C, 0x6BA16B4C, 0x6BA1694C, 0x67A1654D, 0x64A1654D, 0x65A1654D, 0x65A0674D, 0x68A06A4D, -0x6AA06B4C, 0x6C9F6D4C, 0x6CA06B4C, 0x6AA0694D, 0x68A0654D, 0x65A0654E, 0x67A0674D, 0x6AA06A4C, -0x67A0694D, 0x67A06A4D, 0x69A0684D, 0x67A0674D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00893076, 0x3990426A, 0x3B912D6C, 0x30912A6C, 0x28922D6D, 0x2C922C6D, 0x3591306C, 0x2D90316D, +0x2F90366D, 0x2C902C6F, 0x3090366D, 0x3090396C, 0x378F306E, 0x2F91336C, 0x2E912B6E, 0x2F8F336D, +0x3290396B, 0x32902E6E, 0x2E90306E, 0x2F912C6C, 0x28912A6D, 0x2D90346D, 0x2F922F6C, 0x2F912E6D, +0x2A91396C, 0x3690356C, 0x3490296D, 0x2990306F, 0x30912A6D, 0x3190266E, 0x2F92306C, 0x348F2E6E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958C5C, 0x8CAB8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAB8C38, 0x8CAA8C38, 0x8CAA8C38, @@ -17243,15 +17243,15 @@ const unsigned long bg[480*640]={ 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x88A9883A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906566, 0x67A06B4C, 0x6CA06A4C, 0x67A0664C, 0x65A1634D, 0x67A1644D, 0x68A0684C, 0x66A0684D, -0x66A0694D, 0x67A0654D, 0x66A0664D, 0x68A0674D, 0x699F6A4C, 0x68A0674D, 0x67A0694D, 0x699F6A4D, -0x6AA0684C, 0x68A0654D, 0x66A0684D, 0x66A1664D, 0x63A0664D, 0x67A0684D, 0x67A1664C, 0x69A0644D, -0x69A06B4C, 0x69A06A4C, 0x67A0634D, 0x66A0694D, 0x68A0654D, 0x66A0654D, 0x67A0694D, 0x69A0694D, -0x6F9F6A4C, 0x68A0634D, 0x69A0674D, 0x67A0664D, 0x64A0634E, 0x63A0654D, 0x67A0684D, 0x67A0654D, -0x64A0654D, 0x65A0674D, 0x67A1674D, 0x67A0674C, 0x68A0684C, 0x68A0694C, 0x68A0684C, 0x67A1674C, -0x68A0674C, 0x67A1664D, 0x65A1654D, 0x67A1674D, 0x68A0684C, 0x69A0694C, 0x69A0694D, 0x68A0674D, -0x67A0684D, 0x68A0694C, 0x69A06A4C, 0x6AA06A4D, 0x69A0694D, 0x69A0684D, 0x64A0654E, 0x66A0684D, -0x68A0664D, 0x679F684D, 0x66A0674E, 0x67A0664D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x428F356B, 0x3190266E, 0x32902F6E, 0x2D8E2D6F, 0x27902470, 0x24912A6F, 0x2F90316E, 0x2F902A6E, +0x2890296F, 0x2A912D6E, 0x2E912E6D, 0x2D91306C, 0x3090316D, 0x3290336C, 0x3291326C, 0x3091306C, +0x31912F6D, 0x2E912C6D, 0x2A912A6D, 0x2E912D6D, 0x3090316D, 0x3490336D, 0x3390326D, 0x30902E6E, +0x2D91306D, 0x3291336C, 0x3390366C, 0x378F386D, 0x358F346D, 0x338F306D, 0x2890296F, 0x2B8F326E, +0x32902C6E, 0x2E8F326E, 0x2C8F2F6F, 0x2D902C6E, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958B5C, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, 0x8CAA8B38, 0x8CAA8C38, 0x8BAA8B38, 0x8BAA8B38, 0x8BAA8B38, @@ -17283,15 +17283,15 @@ const unsigned long bg[480*640]={ 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x87A9873A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906566, 0x64A0654E, 0x6AA06C4C, 0x69A0674C, 0x66A0644D, 0x65A0644D, 0x65A0694D, 0x67A0654D, -0x67A0644E, 0x68A0644D, 0x64A0674D, 0x679F684D, 0x68A0684D, 0x6A9F6D4C, 0x6CA06B4C, 0x69A0694C, -0x66A0674D, 0x66A0644D, 0x68A0674D, 0x65A1654D, 0x63A0644D, 0x66A0674D, 0x66A1664D, 0x68A0654D, -0x6AA0694C, 0x68A0684D, 0x64A0644D, 0x68A0694D, 0x67A0664D, 0x64A0674D, 0x67A0684D, 0x66A0694D, -0x679F6F4C, 0x6AA0684C, 0x65A0664D, 0x689F674D, 0x67A0644D, 0x64A0634E, 0x63A0644E, 0x67A0684D, -0x689F674D, 0x66A0654E, 0x65A0654E, 0x66A0674D, 0x66A0664D, 0x66A0674D, 0x68A0684D, 0x68A0684C, -0x68A0684C, 0x69A0684D, 0x68A0684D, 0x67A0654D, 0x65A1644D, 0x63A0634E, 0x62A0634E, 0x64A0634D, -0x63A0644E, 0x65A0654D, 0x66A0674D, 0x67A0674C, 0x67A0684D, 0x69A06A4D, 0x699F674C, 0x65A0664D, -0x68A0664D, 0x669F644E, 0x67A0674D, 0x67A0664D, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, +0x00882977, 0x28902A6F, 0x358F3A6B, 0x32912F6D, 0x2B90276E, 0x2891286E, 0x2891326D, 0x2D902A6E, +0x2F8F286F, 0x328F266F, 0x28902D6F, 0x2F8F326E, 0x2F902F6D, 0x368E3E6C, 0x3A8F386C, 0x3390346D, +0x2C902F6E, 0x2B8F286F, 0x30902D6D, 0x2991296E, 0x2691276F, 0x2C902D6E, 0x2B912C6D, 0x3290286E, +0x3790346C, 0x308F326D, 0x2790276E, 0x318F326E, 0x2E902C6E, 0x28902E6E, 0x2D90326D, 0x2B8F336E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00958A5C, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, 0x8AAA8A38, @@ -17323,15 +17323,15 @@ const unsigned long bg[480*640]={ 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x00800080, 0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, -0x00906666, 0x65A0644E, 0x64A06A4D, 0x6CA0674C, 0x68A0664C, 0x63A0654D, 0x63A0664D, 0x689F654D, -0x669F654D, 0x65A0674D, 0x64A0654D, 0x67A0664E, 0x68A0684D, 0x67A0664D, 0x67A0664D, 0x67A0654D, -0x67A0674D, 0x63A0674D, 0x68A0654D, 0x65A0634D, 0x63A0634E, 0x65A0674D, 0x65A0684D, 0x65A0694C, -0x6AA0674C, 0x68A0654D, 0x639F654E, 0x69A0684D, 0x66A0674D, 0x66A0674D, 0x66A0684D, 0x68A0644D, -0x63A0634D, 0x6A9F694C, 0x69A0664D, 0x64A0674D, 0x679F674D, 0x67A0654D, 0x64A0634E, 0x64A0654E, -0x65A0654E, 0x669F674D, 0x67A0664D, 0x65A0664D, 0x66A0674D, 0x67A0684D, 0x68A0684D, 0x68A0674D, -0x67A0664D, 0x65A0654D, 0x64A0624D, 0x61A0614E, 0x61A0624E, 0x62A0624E, 0x63A0634D, 0x64A0654D, -0x65A0654D, 0x64A0634D, 0x63A0634E, 0x63A0654E, 0x66A0664D, 0x67A0684D, 0x69A0684D, 0x68A0654D, -0x65A0664D, 0x659F654D, 0x699F664D, 0x659F654D, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x2590256F, 0x378E346D, 0x328F2D6D, 0x28902E6F, 0x2E8E2E6F, 0x2D8E2B6F, 0x288F2570, 0x268F2970, +0x2B8F2B70, 0x2C8E2E6F, 0x2F8F2B6E, 0x2A8F2C6E, 0x2C8F2E6E, 0x2E90306D, 0x318F316D, 0x328F2E6E, +0x2D8F2B6F, 0x2990286F, 0x2691226E, 0x1E911F6F, 0x2091226F, 0x2290236F, 0x2491256F, 0x2790286E, +0x2990286E, 0x2690256F, 0x24902370, 0x248F2970, 0x2C902C6E, 0x2E8F306E, 0x338E326E, 0x338F2A6E, +0x2A8E2C6F, 0x288F2A6F, 0x338E2C6F, 0x298F286F, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00958A5C, 0x8AAA8A39, 0x8AAA8A38, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, 0x8AAA8A39, @@ -17363,15 +17363,15 @@ const unsigned long bg[480*640]={ 0x85A8853B, 0x86A8853B, 0x86A8853B, 0x85A8853B, 0x85A8853B, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00906666, 0x65A0654D, 0x639F654E, 0x6B9F6A4C, 0x66A0674D, 0x65A0634D, 0x65A0634D, 0x67A0674D, -0x669F664D, 0x639F654E, 0x65A0624E, 0x65A0674D, 0x679F674D, 0x679F674E, 0x67A0684D, 0x679F694D, -0x679F644E, 0x64A0684D, 0x65A0654D, 0x64A0634D, 0x64A0644E, 0x66A0664D, 0x66A0674D, 0x67A06A4C, -0x689F684D, 0x66A0634D, 0x63A0684D, 0x68A0674D, 0x67A0644D, 0x66A0664D, 0x67A0674D, 0x68A0604E, -0x639F644E, 0x62A0674D, 0x6A9F674D, 0x67A0644D, 0x64A0674D, 0x669F664E, 0x669F664D, 0x659F644E, -0x659F654E, 0x659F654E, 0x669F664E, 0x679F674D, 0x689F684D, 0x67A0674D, 0x66A0644D, 0x63A0634E, -0x62A0624E, 0x62A0634E, 0x63A0624D, 0x62A0614D, 0x629F634E, 0x639F644E, 0x649F654E, 0x649F654E, -0x659F654E, 0x649F654E, 0x65A0644D, 0x64A0634E, 0x63A0644E, 0x66A0674D, 0x67A0674D, 0x67A0694D, -0x66A0644D, 0x679F664D, 0x669F654E, 0x64A0634E, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00882D77, 0x28902A6F, 0x248F2A70, 0x388E366C, 0x2D902E6D, 0x2A90246E, 0x2990266E, 0x2D902E6E, +0x2B8E2B6F, 0x248F2A70, 0x2A8F2370, 0x298F2D6E, 0x2D8E2D6F, 0x2E8E2F6F, 0x2E8F306E, 0x2F8E326F, +0x2E8E276F, 0x288F306F, 0x2A90296F, 0x2790246F, 0x268F2770, 0x2C902B6E, 0x2C8F2E6F, 0x2D90366D, +0x318F316D, 0x2B8F256F, 0x268F306F, 0x328E2E6E, 0x2E8F286F, 0x2C902B6E, 0x2E8E2D6F, 0x308F1C70, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0095895C, 0x88A98939, 0x89AA8939, 0x88A9883A, 0x89A98839, 0x89AA8939, 0x88A9883A, 0x89A98839, 0x88A98939, @@ -17403,15 +17403,15 @@ const unsigned long bg[480*640]={ 0x84A8843B, 0x85A8843B, 0x84A8843B, 0x84A8843B, 0x84A8843B, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00906267, 0x66A0644D, 0x64A0624E, 0x669F6A4D, 0x68A0674D, 0x66A0634D, 0x62A0654D, 0x64A0664D, -0x679F654E, 0x659F634E, 0x66A0654D, 0x62A0634E, 0x65A0664D, 0x679F674E, 0x689F684D, 0x679F654E, -0x65A0674D, 0x679F654D, 0x65A0634D, 0x61A0644E, 0x649F644E, 0x65A0634D, 0x679F654E, 0x699F6A4C, -0x679F664D, 0x65A0634D, 0x659F684D, 0x66A0664D, 0x659F664D, 0x66A0664D, 0x669F684D, 0x62A0624E, -0x659F624E, 0x639F624E, 0x659F6A4E, 0x679F664D, 0x669F634D, 0x659F664E, 0x649F654E, 0x649F654E, -0x669F664D, 0x669F674D, 0x659F654E, 0x659F654E, 0x64A0624E, 0x63A0624E, 0x62A0624E, 0x629F644E, -0x63A0644D, 0x63A0634E, 0x649F644E, 0x649F644F, 0x649F634E, 0x629F624E, 0x619F624E, 0x629F634E, -0x639F644E, 0x639F634E, 0x639F634E, 0x64A0644E, 0x639F634E, 0x659F654E, 0x66A0664D, 0x659F674E, -0x6A9F664E, 0x659F654E, 0x649F654E, 0x649F634E, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x298D2172, 0x258F2370, 0x2A8D356E, 0x2D8E2C6E, 0x2B8E2570, 0x298E2C70, 0x288D2971, 0x288D2A70, +0x2B8E2B6F, 0x2B8E2D6F, 0x2A8E2A70, 0x2B8F2970, 0x288F2370, 0x23902270, 0x218F2271, 0x238F2770, +0x268F266F, 0x248F2570, 0x268D2870, 0x268C2672, 0x278D2571, 0x238E2271, 0x208E2172, 0x228E2471, +0x258D2671, 0x268D2471, 0x268E2670, 0x288F276F, 0x248F2670, 0x298F2970, 0x2C8F2C6E, 0x2A8E2F6F, +0x348D2C6F, 0x2A8E2970, 0x278D2A71, 0x288E2471, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0094875D, 0x88A9883A, 0x87A9883A, 0x88A9873A, 0x88A9873A, 0x88A9883A, 0x87A9873A, 0x87A9873A, 0x87A9883A, @@ -17443,15 +17443,15 @@ const unsigned long bg[480*640]={ 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00906566, 0x629F654E, 0x65A0634D, 0x629F654E, 0x699F684D, 0x66A0654D, 0x62A0634E, 0x63A0644D, -0x679F674D, 0x659F634E, 0x629F644E, 0x66A0624D, 0x62A0634E, 0x63A0644E, 0x649F634E, 0x649F654E, -0x669F654D, 0x639F634E, 0x64A0614D, 0x639F634E, 0x639F654E, 0x629F664E, 0x639F684D, 0x699F674D, -0x669F644D, 0x639F644E, 0x679F654E, 0x669F654D, 0x66A0654D, 0x659F654D, 0x679F644E, 0x619F644E, -0x689F644D, 0x619F644E, 0x639F644E, 0x689F674D, 0x659F654E, 0x649F634E, 0x639F654E, 0x649F654E, -0x649F644E, 0x649F634E, 0x639F634E, 0x639F634E, 0x639F634E, 0x649F634E, 0x649F634E, 0x63A0634E, -0x649F644E, 0x649F654E, 0x659F644E, 0x659F654E, 0x639F634E, 0x639F634E, 0x649F634E, 0x639F634E, -0x629F644E, 0x639F634E, 0x639F634E, 0x639F634E, 0x639F644E, 0x649F654E, 0x659F664D, 0x65A0654D, -0x679F684D, 0x649F664E, 0x659F674E, 0x669F634E, 0x00800080, 0x00800080, 0x00800080, 0x00800080, +0x00872877, 0x238E2A70, 0x288F266F, 0x238E2A70, 0x348E306E, 0x2D8F286E, 0x238F2470, 0x268F266F, +0x2D8E2F6F, 0x2A8D2670, 0x208E2771, 0x2B8E2470, 0x23902470, 0x258F276F, 0x278E266F, 0x278F2A6F, +0x2B8E286F, 0x248E2570, 0x26901F6F, 0x258E2671, 0x258E2970, 0x228E2C70, 0x258F316F, 0x348E2E6E, +0x2C8E266E, 0x268E2770, 0x2F8E296F, 0x2C8E2A6F, 0x2B8F2A6F, 0x288F2A6F, 0x2F8E276F, 0x208E2871, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0094865D, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, 0x86A9863A, @@ -17483,17 +17483,17 @@ const unsigned long bg[480*640]={ 0x82A7823D, 0x82A7813D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00906466, 0x639F624E, 0x66A0634D, 0x629F634E, 0x659F694D, 0x689F664D, 0x64A0624D, 0x63A0634E, -0x649F674D, 0x659F644E, 0x649F624E, 0x639F664E, 0x649F624E, 0x62A0624E, 0x649F654E, 0x64A0624E, -0x629F624E, 0x63A0624D, 0x609F634E, 0x649F624E, 0x649F614E, 0x669F634E, 0x679F684D, 0x679F664D, -0x639F634E, 0x649F694E, 0x669F654E, 0x669F664E, 0x649F644E, 0x659F654E, 0x63A0604E, 0x639F654E, -0x649F694E, 0x639F604F, 0x649F634E, 0x649F664E, 0x669F654E, 0x649F644E, 0x649F634E, 0x639F634E, -0x649F654E, 0x659F664E, 0x659F654E, 0x649F644E, 0x639F634E, 0x639F634E, 0x639F644E, 0x669F664E, -0x679E664E, 0x669F654D, 0x649F634E, 0x649F654E, 0x659E674E, 0x679E684E, 0x689E674E, 0x669E674E, -0x659F644E, 0x649F624E, 0x629F624E, 0x639F644E, 0x639F644E, 0x649F654E, 0x649F654E, 0x669F644D, -0x649F674E, 0x669F644E, 0x659F644E, 0x669F644E, 0x649F644E, 0x679F654E, 0x659E644E, 0x689F664D, -0x619F614E, 0x5F9E674E, 0x699E654E, 0x649F624E, 0x649F644E, 0x669F664D, 0x669F614E, 0x609F624E, -0x649F634E, 0x629F634E, 0x639F634E, 0x639F624E, 0x629F634E, 0x649F654E, 0x00800080, 0x0094865D, +0x00958D5B, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x258C3170, 0x268D1D72, 0x278D2471, 0x268D2C70, 0x2C8D2870, 0x278E276F, 0x288E2570, 0x248E2471, +0x268D2971, 0x2A8D2C71, 0x2A8D2971, 0x288D2871, 0x268D2670, 0x248E2570, 0x248D2771, 0x2B8D2C71, +0x2D8C2C70, 0x2B8D296F, 0x278D2570, 0x278D2871, 0x2A8C2D70, 0x2E8C3070, 0x308B2F70, 0x2C8C2D71, +0x298D2871, 0x268D2371, 0x238D2271, 0x268D2771, 0x258D2771, 0x278D2870, 0x288D2870, 0x2B8D276F, +0x288E2D70, 0x2B8D2871, 0x298C2871, 0x2C8C2871, 0x288D2770, 0x2D8E296F, 0x298C2871, 0x318E2B6F, +0x1F8D1F71, 0x1B8D2F71, 0x328C2A70, 0x278D2271, 0x288E2770, 0x2B8E2C6E, 0x2C8E1F70, 0x1D8E2371, +0x288E2670, 0x238E2670, 0x268D2570, 0x258D2371, 0x228D2472, 0x288C2971, 0x00800080, 0x0094865D, 0x86A9863B, 0x86A9863B, 0x86A9863B, 0x86A9863B, 0x85A8863B, 0x86A9863B, 0x85A8863B, 0x85A8853B, 0x86A9863B, 0x86A8853B, 0x85A8863B, 0x85A8853B, 0x86A8853B, 0x85A8853B, 0x85A8853B, 0x85A8863B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x86A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, @@ -17520,20 +17520,20 @@ const unsigned long bg[480*640]={ 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813E, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813E, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7803E, 0x81A7803E, -0x81A7813E, 0x81A7813E, 0x81A7813E, 0x80A7803E, 0x81A7803E, 0x00800080, 0x008F6567, 0x659F654E, -0x659F654E, 0x659F654E, 0x659F644E, 0x649F654E, 0x649F654E, 0x649F654E, 0x669F674E, 0x689F684D, -0x689F664D, 0x659F634E, 0x649F654E, 0x649F654E, 0x659F654E, 0x649F634E, 0x649F634E, 0x659F664E, -0x629F604E, 0x629F624E, 0x629F654E, 0x639F624E, 0x629F664D, 0x689F664D, 0x65A0624D, 0x619F634E, -0x649F634D, 0x659F654E, 0x639F634E, 0x619F624E, 0x649F654E, 0x639F624E, 0x609F5F4F, 0x609F624F, -0x639F624E, 0x61A0604E, 0x629F644E, 0x639F634E, 0x619F644E, 0x639F674D, 0x679F674D, 0x669F644D, -0x629F634E, 0x679F664E, 0x659F664D, 0x659F644E, 0x649F664E, 0x659F634E, 0x5F9F624E, 0x639F664D, -0x639F644E, 0x679F634E, 0x5F9F644F, 0x639F634E, 0x659E674E, 0x649F634E, 0x659F664E, 0x669F644D, -0x639F634E, 0x659F654E, 0x649F634E, 0x639F634E, 0x639F644E, 0x649E654E, 0x659E664E, 0x659F644E, -0x649F634E, 0x639F634E, 0x639F634E, 0x639F634E, 0x629F624E, 0x629F624E, 0x629F624E, 0x629F624F, -0x639E634F, 0x649E654F, 0x649F634F, 0x629E634F, 0x659E654E, 0x669F654E, 0x649F634E, 0x649F664D, -0x639F654E, 0x679E634E, 0x659F644E, 0x659F654E, 0x639F634E, 0x669F644E, 0x649F634E, 0x679F654D, -0x619F5F4E, 0x5F9E694E, 0x669E644E, 0x639F634E, 0x649F654E, 0x659F664D, 0x649F604E, 0x609F624F, -0x649F634E, 0x629F634E, 0x639F634E, 0x639F634E, 0x639F634E, 0x649F644E, 0x00800080, 0x0094855D, +0x81A7813E, 0x81A7813E, 0x81A7813E, 0x80A7803E, 0x81A7803E, 0x00800080, 0x00872977, 0x298E296F, +0x288D2970, 0x298D2971, 0x298C2871, 0x288D2971, 0x278D2870, 0x278D2970, 0x2C8D2D6F, 0x318D316F, +0x2F8E2B6F, 0x298E266F, 0x288E2970, 0x288F2970, 0x2A8D2970, 0x288E2670, 0x288E2670, 0x298D2C70, +0x228E1C71, 0x228E2370, 0x228E2970, 0x268E2270, 0x238D2B70, 0x318D2B6E, 0x288F236F, 0x1F8E2670, +0x268E266F, 0x2A8D2970, 0x248D2671, 0x1F8D2372, 0x278D2A70, 0x248E2071, 0x1C8E1B73, 0x1D8E2172, +0x248F226F, 0x208F1E70, 0x238D2771, 0x248D2670, 0x1F8E2871, 0x258D2E70, 0x2F8E2E6F, 0x2B8E266F, +0x238D2471, 0x2F8C2C70, 0x2A8C2B70, 0x298E2870, 0x278E2B70, 0x2A8D2671, 0x1B8E2372, 0x258D2B70, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x0094855D, 0x85A8853B, 0x85A8853B, 0x85A8843B, 0x85A8853B, 0x84A8853B, 0x85A8853B, 0x85A8853B, 0x85A8853B, 0x84A8853B, 0x84A8853B, 0x85A8853B, 0x84A8853B, 0x84A8843B, 0x84A8843B, 0x85A8853B, 0x84A8843B, 0x85A8843B, 0x84A8843B, 0x84A8843B, 0x84A8843B, 0x84A8843B, 0x84A8843B, 0x84A8843B, 0x84A8843B, @@ -17560,20 +17560,20 @@ const unsigned long bg[480*640]={ 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA7803E, 0x80A77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA7803E, 0x7FA77F3E, 0x80A7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, -0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x00800080, 0x008F6467, 0x639F644E, -0x639F614F, 0x619E614F, 0x619E624F, 0x629F624E, 0x629F624F, 0x619F604F, 0x609F624F, 0x639F654E, -0x679F684D, 0x689F664E, 0x639F634E, 0x649F654E, 0x649F644E, 0x659F654E, 0x649F634E, 0x649F634E, -0x639F634E, 0x609F614E, 0x619F624E, 0x659F624E, 0x629F624E, 0x659F674E, 0x669F634D, 0x619F604E, -0x629F644E, 0x639F644E, 0x649F624E, 0x639F634E, 0x629F634E, 0x649F654E, 0x649F634E, 0x639F624E, -0x609F614E, 0x629F644F, 0x649F634E, 0x639F614E, 0x649F634E, 0x689F684D, 0x679F664D, 0x639F624E, -0x639F664E, 0x669E644E, 0x659F654E, 0x639F644E, 0x679F654D, 0x649F5F4E, 0x629F634E, 0x639E634E, -0x649F634E, 0x639E664E, 0x629F624F, 0x649F634E, 0x639F634E, 0x669E654E, 0x649F644F, 0x649F644E, -0x639F644E, 0x639F634E, 0x639F644E, 0x649F654F, 0x659E664F, 0x669E654E, 0x649F634E, 0x629F634E, -0x649F624E, 0x629F624F, 0x629F624E, 0x639F634E, 0x649E654E, 0x659F654E, 0x659F644E, 0x639F634E, -0x629E614F, 0x629E634F, 0x639E644F, 0x649F634E, 0x629F644E, 0x649E664E, 0x659E634E, 0x629E654E, -0x659F634E, 0x649E664E, 0x639F644E, 0x649E654F, 0x639F634E, 0x659E634E, 0x649F624F, 0x669F654E, -0x609F5E4F, 0x609E694E, 0x659E644F, 0x639F634E, 0x639F644E, 0x659F664D, 0x639F604E, 0x609F624F, -0x639F624E, 0x619F624F, 0x629F624E, 0x639E624E, 0x629F624E, 0x629F614E, 0x00800080, 0x0094835E, +0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x288D2472, 0x248C2C71, 0x208C2073, 0x268C2572, 0x258D2471, 0x2B8C2971, 0x268C2672, 0x278D2770, +0x258E2770, 0x268D2470, 0x248C2672, 0x268C2872, 0x2A8B2B71, 0x2C8C2A70, 0x278D2470, 0x238D2570, +0x268C2372, 0x218D2171, 0x228D2371, 0x258D2571, 0x288C2971, 0x2A8C2A71, 0x2A8C2871, 0x258C2372, +0x228C1F73, 0x208C2374, 0x258B2872, 0x288C2372, 0x228C2872, 0x288C2C71, 0x298D2670, 0x238D2971, +0x298D2670, 0x278C2B71, 0x248C2872, 0x268C2972, 0x248C2671, 0x298D2570, 0x268C2272, 0x2C8D2870, +0x1E8D1973, 0x1D8C3271, 0x298C2672, 0x258B2372, 0x268D2771, 0x288D2B6F, 0x258D1B72, 0x1C8D2072, +0x248D2371, 0x1F8D2172, 0x228C2272, 0x248C2372, 0x238D2171, 0x218D2171, 0x00800080, 0x0094835E, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, 0x83A8833C, @@ -17600,20 +17600,20 @@ const unsigned long bg[480*640]={ 0x228A226E, 0x228A226E, 0x228A226E, 0x54A07F49, 0x7FA67F3F, 0x7FA67F3E, 0x7FA67F3F, 0x54922261, 0x228A226E, 0x228A226E, 0x228A226E, 0x228A216E, 0x2A945E5C, 0x5E942A5C, 0x228A216E, 0x228A216E, 0x218A226E, 0x228B2A6C, 0x5DA17F47, 0x7FA05449, 0x228A226E, 0x228A216E, 0x218A216F, 0x218A216F, -0x2A945D5D, 0x7EA67E3F, 0x7FA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x00800080, 0x008F6267, 0x629F634F, -0x639F624E, 0x639F624E, 0x629F624E, 0x629E634E, 0x639E634F, 0x639F624F, 0x629F614F, 0x609F604F, -0x609F634E, 0x659F674E, 0x689E654E, 0x639F624E, 0x639F654E, 0x659F644E, 0x649F644E, 0x629F634E, -0x639F634E, 0x639F604E, 0x609F624E, 0x639F644E, 0x639F624E, 0x619E654E, 0x679E664D, 0x639F604E, -0x609F624E, 0x639F624E, 0x629F624E, 0x629F624E, 0x639E614F, 0x629F624E, 0x639F624E, 0x629F624F, -0x629E644E, 0x649E644F, 0x629F614E, 0x609F634E, 0x639F674E, 0x679F664E, 0x659E644E, 0x639E634F, -0x679E654E, 0x649E654E, 0x649F634E, 0x639F664E, 0x649F634F, 0x5E9F624F, 0x639F634E, 0x629E664F, -0x609F634F, 0x639E644F, 0x649E5F4F, 0x629E634E, 0x629F634E, 0x639E644E, 0x659E634F, 0x629E634F, -0x629F634F, 0x639F634F, 0x639E654F, 0x659E654F, 0x679E654E, 0x629F624E, 0x629E634E, 0x629F614E, -0x619F624E, 0x639F634E, 0x639F634E, 0x629F614F, 0x619E624F, 0x629F624F, 0x629E614F, 0x629F624F, -0x639E634F, 0x629E624F, 0x629E6250, 0x639E634F, 0x639F624E, 0x639E644F, 0x659E664E, 0x639F624E, -0x639F644E, 0x639F644E, 0x639E644F, 0x639E644F, 0x649F624E, 0x649F624E, 0x639F624F, 0x669F654D, -0x609E5F4F, 0x5F9E684E, 0x649E634F, 0x639E634F, 0x649F644E, 0x649E654E, 0x639F604F, 0x619F624F, -0x629F634E, 0x619F624F, 0x619F624F, 0x629F604F, 0x609F614F, 0x619E614F, 0x00800080, 0x0094825E, +0x2A945D5D, 0x7EA67E3F, 0x7FA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x00800080, 0x00862279, 0x218C2373, +0x238D2372, 0x238D2272, 0x218D2272, 0x228C2472, 0x248C2372, 0x238C2272, 0x218D1E72, 0x1C8D1C73, +0x1D8D2471, 0x2A8D2F6F, 0x308C2970, 0x248E2271, 0x268D2970, 0x2A8E2870, 0x278D2772, 0x228D2372, +0x238D2472, 0x248D1C72, 0x1E8D2172, 0x238C2671, 0x268D2271, 0x208D2971, 0x2E8C2B70, 0x238E1D71, +0x1D8D2272, 0x248D2171, 0x228D2271, 0x218C2272, 0x258C2073, 0x208C2272, 0x238D2271, 0x218D2072, +0x238C2771, 0x278C2671, 0x238D1F71, 0x1D8D2571, 0x258D2E70, 0x2F8C2C70, 0x298C2670, 0x248C2472, +0x2D8C2970, 0x278C2A71, 0x278C2472, 0x268D2C70, 0x268D2372, 0x198D2073, 0x258D2472, 0x218B2B72, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x0094825E, 0x82A7823C, 0x82A8823C, 0x82A7823C, 0x82A7823C, 0x82A8823C, 0x82A8823C, 0x82A7823C, 0x82A7823C, 0x82A7823C, 0x82A8823C, 0x82A7823C, 0x82A7823C, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7823D, 0x82A7813D, 0x82A7823D, 0x82A7823D, 0x81A7823D, 0x82A7823D, @@ -17640,20 +17640,20 @@ const unsigned long bg[480*640]={ 0x783D78A9, 0x783D78A9, 0x783D78A9, 0x367C4D75, 0x7DA67D3F, 0x7DA67D40, 0x7D9A3352, 0x364F789D, 0x783D78A9, 0x783D78A9, 0x783D78A9, 0x783D78A9, 0x6E672987, 0x20586E98, 0x783D78A9, 0x783D78A9, 0x783D78A9, 0x78406EA7, 0x2085636B, 0x3C793679, 0x783D78A9, 0x783D78A9, 0x783D78A9, 0x783D78A9, -0x6E582098, 0x63A27D45, 0x7DA67C3F, 0x7CA67D3F, 0x7CA67C40, 0x00800080, 0x008F6367, 0x639E634F, -0x639E634E, 0x639F634F, 0x639E624F, 0x629E624F, 0x639E634F, 0x649E644F, 0x649F634E, 0x639F624F, -0x619E604F, 0x629F624E, 0x639E664E, 0x679E654E, 0x619F614E, 0x639F644E, 0x649F634E, 0x649F634E, -0x639F624E, 0x639E634F, 0x609F604F, 0x619E634E, 0x639E634E, 0x629F614E, 0x659E664E, 0x659E614E, -0x609F604F, 0x639F624F, 0x629F614E, 0x629F624F, 0x629E624F, 0x629F624F, 0x629E624F, 0x639F634F, -0x639E634F, 0x629F624E, 0x609F604F, 0x629F634E, 0x669F664E, 0x669E644E, 0x639E634E, 0x639E674E, -0x649E634F, 0x649E644E, 0x639F644E, 0x669F644E, 0x629F5F4F, 0x619F624E, 0x629F624E, 0x659E664F, -0x5F9F624F, 0x629E624F, 0x649E634F, 0x5F9E624F, 0x639F624E, 0x629E644F, 0x639E634F, 0x639E634F, -0x639E634F, 0x629E624F, 0x639E654F, 0x659E614E, 0x609F624F, 0x619E614F, 0x629F614E, 0x619F624F, -0x629F624E, 0x629F614F, 0x609E604F, 0x619E624F, 0x639E634F, 0x639E634F, 0x649F644F, 0x639F624F, -0x619E624F, 0x629F624E, 0x629E614F, 0x619E604F, 0x629E634F, 0x629E614F, 0x639E654F, 0x659E624E, -0x629E634F, 0x639F624E, 0x659E624F, 0x639E634F, 0x649E624F, 0x629F634E, 0x639E604F, 0x659E664D, -0x609F5E4F, 0x5E9E664F, 0x639E634F, 0x629E634F, 0x639F634E, 0x629E654E, 0x629F604F, 0x619F614E, -0x629F634E, 0x629F604F, 0x609E604F, 0x609E604F, 0x619E604F, 0x639E614F, 0x00800080, 0x0093815F, +0x6E582098, 0x63A27D45, 0x7DA67C3F, 0x7CA67D3F, 0x7CA67C40, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x1A8C2273, 0x218C2272, 0x278B2372, 0x1A8B2174, 0x238C2272, 0x208C2772, 0x238B2672, 0x258B2472, +0x248B2373, 0x228B2373, 0x268B2971, 0x298C2071, 0x1C8D2172, 0x1F8C1F73, 0x218C1F72, 0x1F8D2072, +0x238D2272, 0x208C1E73, 0x1D8B1C74, 0x208B2273, 0x238B2472, 0x258B2472, 0x268C2672, 0x238C2172, +0x208C2173, 0x228C2272, 0x218B1E73, 0x1F8B1E74, 0x228B2473, 0x228C1E73, 0x248B2972, 0x2A8B2371, +0x218C2472, 0x238C2272, 0x2A8A2372, 0x268B2473, 0x278B2172, 0x218C2472, 0x238B1D73, 0x298C2B70, +0x1C8C1874, 0x178B2B73, 0x258B2672, 0x228B2472, 0x258C2472, 0x238B2871, 0x218C1B73, 0x1F8C1E72, +0x228D2372, 0x208C1E73, 0x1D8C1C74, 0x1C8B1C75, 0x1E8C1C73, 0x238C1F72, 0x00800080, 0x0093815F, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813D, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813D, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7813E, 0x81A7803E, 0x81A7813E, 0x80A7803E, 0x81A7813E, 0x81A7813E, @@ -17680,20 +17680,20 @@ const unsigned long bg[480*640]={ 0x2C672C8E, 0x2C643690, 0xA425A4B8, 0x845F188F, 0x7BA57B40, 0x7BA57C40, 0x3B793679, 0xA425A4B8, 0x4D5E2C94, 0x2C672C8E, 0x2C672C8E, 0x2C672C8E, 0x16731687, 0x9A28A4B6, 0x6E552C99, 0x2C672C8E, 0x2C5E4D94, 0xA425A4B8, 0x57703980, 0x164F9A9D, 0xA43763AC, 0x36469AA3, 0xA43D4DA9, 0x4D3DA4A9, -0xA43A57AB, 0x399B7B51, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x00800080, 0x008F6167, 0x619E614F, -0x609E604F, 0x629F634F, 0x639E644F, 0x649E644F, 0x639E634F, 0x629E634F, 0x639E634F, 0x639E644F, -0x639E624F, 0x619E614F, 0x619E624F, 0x629E654E, 0x659E634F, 0x609F604F, 0x629F644E, 0x639E634F, -0x629F624F, 0x619E624F, 0x639E604F, 0x609F614F, 0x639F634E, 0x629F614E, 0x619E644F, 0x659E634E, -0x619F604F, 0x609E614F, 0x629F624F, 0x619F624E, 0x629E614F, 0x619E614F, 0x629E634F, 0x639E634F, -0x639E624E, 0x619F5F4F, 0x609F614E, 0x639E654E, 0x659E654E, 0x639E644F, 0x629E634F, 0x679E644E, -0x639E644F, 0x649F624F, 0x639F654E, 0x639F614F, 0x609E614F, 0x629F634E, 0x619E634F, 0x659E654F, -0x619F604F, 0x629E614F, 0x629E634F, 0x5F9E6050, 0x629F634F, 0x639E634F, 0x639E634F, 0x619E614F, -0x619E624F, 0x639E644F, 0x639F614E, 0x619E614F, 0x609E604F, 0x619F604F, 0x609F604F, 0x619F614F, -0x619E614F, 0x619E624F, 0x629E634F, 0x629E614F, 0x619E614F, 0x619E614F, 0x629E624F, 0x629F624F, -0x619E614F, 0x619E614F, 0x619E614F, 0x619E614F, 0x609E614F, 0x629E614F, 0x609E624F, 0x659E644F, -0x619F624F, 0x639F624F, 0x639E634F, 0x639E624F, 0x639E624F, 0x619F624E, 0x629E604F, 0x639E654E, -0x609E5D4F, 0x5D9E634F, 0x629E634F, 0x619E624F, 0x639F624F, 0x629E644E, 0x629E5F4F, 0x609F604F, -0x619E634F, 0x629E614F, 0x609E604F, 0x609F614F, 0x629E624F, 0x619E614F, 0x00800080, 0x0093805F, +0xA43A57AB, 0x399B7B51, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x00800080, 0x00862079, 0x208B1F73, +0x1C8C1D73, 0x208C2372, 0x248C2672, 0x278C2771, 0x258C2373, 0x228C2373, 0x248B2473, 0x268B2772, +0x248B2373, 0x1F8C1E73, 0x1F8C2072, 0x238C2970, 0x2A8B2372, 0x1B8D1C73, 0x218C2872, 0x238C2472, +0x228C2172, 0x1F8C2273, 0x248C1C72, 0x1B8D1E73, 0x238C2572, 0x228C1F72, 0x1F8C2772, 0x298C2571, +0x1E8D1D72, 0x1C8C2073, 0x208C2172, 0x1F8D2072, 0x228C1F73, 0x1F8B2173, 0x228B2473, 0x248B2672, +0x258B2371, 0x1F8C1B73, 0x1D8D1F72, 0x268C2A70, 0x2A8C2870, 0x258B2771, 0x218C2472, 0x2D8B2770, +0x248B2671, 0x268C2172, 0x248C2A71, 0x238C1F72, 0x1C8C1E73, 0x228C2572, 0x208B2572, 0x298B2A71, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x0093805F, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x80A77F3E, 0x7FA7803E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, 0x7FA77F3E, @@ -17720,20 +17720,20 @@ const unsigned long bg[480*640]={ 0x5A9B5A51, 0x32724D7F, 0xA425A4B8, 0x20814B72, 0x7BA57B41, 0x7A9F524B, 0x0A529A9B, 0xA43763AC, 0x31955A5B, 0x5A9B5951, 0x599B5952, 0x5A9B5A51, 0x2063788C, 0xA42E84B2, 0x0A8A596A, 0x599B5952, 0x2063788C, 0xA42B8EB4, 0x0A812079, 0x7831A4B0, 0x84580A97, 0x6337A4AC, 0x6E66208A, 0x7831A4B0, -0x8E550A99, 0x6BA27A45, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x00800080, 0x008F5F67, 0x609F614F, -0x629E634E, 0x639F634E, 0x649E654E, 0x659E654F, 0x659E654E, 0x649E644F, 0x639E634F, 0x639E624F, -0x629E634F, 0x639E624F, 0x629E624F, 0x619E614F, 0x629E654E, 0x649E624F, 0x5F9E604F, 0x629F624E, -0x629E614F, 0x619E614F, 0x629E614F, 0x5F9E604F, 0x629F624F, 0x629E624F, 0x609E614F, 0x649E654E, -0x629F604F, 0x5F9F604F, 0x619E614E, 0x619E624F, 0x629F614F, 0x619E614F, 0x619E624F, 0x619E624F, -0x609F604F, 0x609F604F, 0x629E654E, 0x639E644E, 0x649E634E, 0x629E614F, 0x629E654E, 0x639E624F, -0x639E624F, 0x629F634F, 0x639E634F, 0x619F614F, 0x619E614F, 0x629E614F, 0x639E634F, 0x649E654E, -0x619E5F4F, 0x619E614F, 0x619E634F, 0x609E5E4F, 0x609E614F, 0x629E614F, 0x629F634F, 0x639E624F, -0x639E644F, 0x629E614E, 0x609E614F, 0x5F9E604F, 0x619E5E50, 0x5F9E604F, 0x619F604F, 0x609E6150, -0x619E614F, 0x619E614F, 0x609E614F, 0x629E634F, 0x649E634F, 0x639E634F, 0x629E624F, 0x629E624F, -0x619E604F, 0x609E614F, 0x619E604F, 0x609E614F, 0x619E604F, 0x609E6250, 0x619E5F4F, 0x619E634F, -0x639E614F, 0x629E624F, 0x629E634F, 0x629E634F, 0x629E6350, 0x609E614F, 0x629E604F, 0x619E654F, -0x619E5D50, 0x5D9E624F, 0x629E634F, 0x619E614F, 0x629F624F, 0x619E644F, 0x619E5E4F, 0x619E604F, -0x619E614F, 0x629F604F, 0x619E614F, 0x629E614F, 0x609E6150, 0x619E614F, 0x00800080, 0x00937F5F, +0x8E550A99, 0x6BA27A45, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x1E8C1A73, 0x218B1F73, 0x1F8A2672, 0x1E8A1974, 0x1C8B2174, 0x238B2073, 0x218B2373, 0x238B2373, +0x248B2772, 0x238B1F72, 0x1D8C1E73, 0x1A8B1C75, 0x1E8B1974, 0x1A8C1C74, 0x1E8C1C73, 0x1B8B1E74, +0x218B2073, 0x208B2172, 0x1D8B1F73, 0x238A2572, 0x278A2672, 0x248B2472, 0x228B2273, 0x228B2372, +0x218A1D73, 0x1E8B1E73, 0x1F8B1D74, 0x1B8C1F73, 0x1E8B1D74, 0x1D8A2274, 0x1E8B1B74, 0x218A2673, +0x248B1E73, 0x228B2273, 0x218A2673, 0x238A2572, 0x208A2473, 0x1E8B2073, 0x218A1D74, 0x218B2972, +0x1E8B1575, 0x158A2374, 0x218A2473, 0x1E8B2173, 0x218B2073, 0x208B2772, 0x218B1974, 0x1E8B1B73, +0x1F8B2073, 0x218B1D73, 0x1F8C2073, 0x228B1F73, 0x1D8B1E74, 0x1F8B2173, 0x00800080, 0x00937F5F, 0x7FA67F3E, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7FA67F3F, 0x7EA67F3F, 0x7EA67F3F, 0x7FA67E3F, 0x7FA67F3F, 0x7EA67F3F, 0x7EA67F3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67F3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7FA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, 0x7EA67E3F, @@ -17760,20 +17760,20 @@ const unsigned long bg[480*640]={ 0x799C424F, 0x2C46A4A3, 0xA43D4DA9, 0x318C206A, 0x208E4066, 0x73962059, 0x7831A4B0, 0x8E550A99, 0x589B5852, 0x589B5852, 0x589B5852, 0x799A3153, 0x4D3DA4A9, 0xA44920A1, 0x4A985855, 0x5895315C, 0x4D3DA4A9, 0xA4462CA3, 0x31724D80, 0xA425A4B8, 0x2067368E, 0xA4289AB6, 0x0A674D8E, 0xA425A4B8, -0x2C7D4176, 0x78A47842, 0x79A47841, 0x78A47842, 0x78A47842, 0x00800080, 0x008F6167, 0x629F624F, -0x639E634F, 0x619E624F, 0x629E624F, 0x629E624F, 0x629E624F, 0x629E624F, 0x639E644F, 0x639E644F, -0x639E624F, 0x629E624F, 0x629E624F, 0x619E614F, 0x619E614F, 0x629E654F, 0x649E5F4F, 0x5E9E614F, -0x619E614F, 0x609E604F, 0x609E614F, 0x609E5F4F, 0x609E614F, 0x619E624F, 0x619E5E4F, 0x619E624F, -0x649E614E, 0x619F5F4F, 0x5F9E604F, 0x619E604F, 0x619E614F, 0x619E604F, 0x609F614F, 0x609F614F, -0x619F614F, 0x619E634F, 0x639E624E, 0x639E624E, 0x619E624F, 0x619E634F, 0x669E634E, 0x629E634F, -0x629E614F, 0x639E624F, 0x619E604F, 0x609E614F, 0x619E614F, 0x619E624F, 0x629E634F, 0x649E654E, -0x619E5D4F, 0x619E604F, 0x609D6350, 0x619E5E4F, 0x5E9E6050, 0x629E614F, 0x619E614F, 0x629E634F, -0x629E614F, 0x619E6150, 0x5F9E5E4F, 0x609E5F4F, 0x5E9E5F4F, 0x609E604F, 0x609E604F, 0x619E624F, -0x629E614F, 0x609E614F, 0x639E624F, 0x629E624F, 0x629E614F, 0x619E614F, 0x619E604F, 0x609E614F, -0x619E614F, 0x619E604F, 0x609E6050, 0x609E604F, 0x609E6050, 0x619E6050, 0x619E6150, 0x5F9E614F, -0x639E624F, 0x619E634F, 0x619E624F, 0x639E634F, 0x619D6450, 0x619E6050, 0x619D614F, 0x609E654F, -0x619E5C4F, 0x5D9E6050, 0x619E624F, 0x619E614F, 0x629E614F, 0x619E634F, 0x619E5E50, 0x609E604F, -0x619E614F, 0x629E624F, 0x629E614F, 0x619E6150, 0x609E6150, 0x609E6150, 0x00800080, 0x00937D60, +0x2C7D4176, 0x78A47842, 0x79A47841, 0x78A47842, 0x78A47842, 0x00800080, 0x00851F79, 0x208C2072, +0x248B2372, 0x218B2273, 0x228B2373, 0x238B2373, 0x228A2373, 0x238B2373, 0x258B2671, 0x268B2772, +0x268B2272, 0x238A2273, 0x238A2373, 0x218B2173, 0x218B1F73, 0x228B2A71, 0x288B1A73, 0x198C2073, +0x208C1F73, 0x1D8B1C74, 0x1D8B1F74, 0x1C8B1A74, 0x1C8B2173, 0x208B2173, 0x1F8B1873, 0x1F8B2373, +0x288C1F72, 0x1F8C1972, 0x1B8B1D74, 0x208B1C73, 0x1E8B1F73, 0x208C1D73, 0x1D8C1E73, 0x1D8C1E73, +0x1E8B1E73, 0x1F8B2572, 0x268B2272, 0x248C2372, 0x218A2273, 0x218B2472, 0x2B8B2571, 0x228B2472, +0x218B1E74, 0x238B2273, 0x1E8C1C73, 0x1D8B2073, 0x208B2073, 0x1E8B2373, 0x238A2572, 0x268B2870, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00937D60, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D40, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67D3F, 0x7DA67C3F, 0x7DA67D3F, 0x7DA67D3F, 0x7CA67C40, 0x7CA67C40, 0x7CA67C40, @@ -17800,20 +17800,20 @@ const unsigned long bg[480*640]={ 0x618B0A68, 0x8E2BA4B4, 0x78631F8C, 0x2055789A, 0x78494DA1, 0x40744D7C, 0xA425A4B8, 0x4D5E2C94, 0x2C672C8E, 0x2C672C8E, 0x2C672C8E, 0x5884206E, 0xA425A4B8, 0x6E552C99, 0x2C672C8E, 0x2C5E4D94, 0xA425A4B8, 0x4D723180, 0x2049A4A1, 0xA43D4DA9, 0x164F9A9D, 0xA44336A5, 0x2049A4A1, 0xA43D4DA9, -0x31997754, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47743, 0x00800080, 0x008F6067, 0x619E624F, -0x629E634F, 0x629E624F, 0x629E624F, 0x629E624F, 0x629E624F, 0x629E6150, 0x609E614F, 0x629E624F, -0x629E624F, 0x639E624F, 0x619E6150, 0x629E624F, 0x629E614F, 0x619E614F, 0x639E654F, 0x619E5E50, -0x609E614F, 0x619E604F, 0x5F9E6050, 0x619E5E50, 0x5E9E614F, 0x629F614F, 0x619E6050, 0x5E9E614F, -0x639E634F, 0x609F614F, 0x5F9F604F, 0x609E6150, 0x619E604F, 0x619E6050, 0x609E6050, 0x5F9E604F, -0x629E634F, 0x639E624F, 0x619E624F, 0x619E614F, 0x629E614F, 0x639E644F, 0x619E614F, 0x629E614F, -0x609E624F, 0x619E614F, 0x609E614F, 0x619E604F, 0x619E614F, 0x629E624F, 0x639E644F, 0x639E634F, -0x5F9E5D4F, 0x619E604F, 0x609D6350, 0x619E5E50, 0x5E9E6050, 0x619E6150, 0x629E614F, 0x629E624F, -0x619E604F, 0x619E5F4F, 0x5D9D6050, 0x609E5D50, 0x5E9E5E50, 0x5F9E604F, 0x609E6150, 0x619D614F, -0x609E614F, 0x639E614F, 0x609E614F, 0x619E614F, 0x609E6050, 0x609E6050, 0x5F9E5F4F, 0x5F9E5E50, -0x5F9E604F, 0x619E614F, 0x5F9E5F50, 0x5E9E6050, 0x619E6050, 0x609E6150, 0x619D6150, 0x609E5F50, -0x629D634F, 0x619E624F, 0x619E614F, 0x639D6250, 0x629D624F, 0x639D5F50, 0x619E6150, 0x5F9D634F, -0x629E5C4F, 0x5C9E5E50, 0x609E6150, 0x609E6150, 0x619E604F, 0x609E624F, 0x619E5E50, 0x5F9E5F4F, -0x609E6050, 0x619E614F, 0x619E6150, 0x629E6050, 0x5F9E6050, 0x619D6250, 0x00800080, 0x00927B60, +0x31997754, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47743, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x1C8B1674, 0x208A1C74, 0x1C892374, 0x1E8A1975, 0x188A1C75, 0x1F8A1E74, 0x228A1F73, 0x238B2272, +0x218B1D73, 0x1E8B1A74, 0x168A1B75, 0x1C8A1675, 0x188B1974, 0x198B1B74, 0x1C8A1F74, 0x208A1E74, +0x1C8A2173, 0x248A2073, 0x1D8A2074, 0x218A2073, 0x1C8A1C74, 0x1B8A1B74, 0x1A8B1A74, 0x198B1974, +0x1A8B1D73, 0x1F8B1E73, 0x1B8A1B75, 0x198A1B74, 0x1E8B1C74, 0x1D8A1E74, 0x1E8A1E74, 0x1B8B1A74, +0x208A2673, 0x208B2273, 0x218A2073, 0x248A2274, 0x22892274, 0x238A1B74, 0x1E8A1E74, 0x1A892474, +0x238A1474, 0x148A1876, 0x1E8A1F74, 0x1D8A1F74, 0x208B1D74, 0x1E8A2273, 0x1F8A1874, 0x198B1B74, +0x1D8A1D74, 0x208A1F73, 0x1F8A1E74, 0x218A1D74, 0x1A8A1E75, 0x1E8A2274, 0x00800080, 0x00927B60, 0x7BA57C40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, 0x7BA57B40, @@ -17840,20 +17840,20 @@ const unsigned long bg[480*640]={ 0x2F6B6384, 0xA4289AB6, 0x16760A85, 0x842EA4B2, 0x8E550A99, 0x3E744D7C, 0x9A28A4B6, 0xA425A4B8, 0xA425A4B8, 0xA425A4B8, 0xA4346EAE, 0x2776367E, 0x8E2BA4B4, 0xA425A4B8, 0xA425A4B8, 0xA425A4B8, 0x84464DA3, 0x30830A75, 0x8E2BA4B4, 0x6E661F8A, 0x7831A4B0, 0x57640A90, 0x842EA4B2, 0x845E1790, -0x6FA37644, 0x76A37543, 0x76A47643, 0x75A37543, 0x75A37643, 0x00800080, 0x008F6168, 0x619E624F, -0x629E614F, 0x609E614F, 0x619E614F, 0x619E614F, 0x619E624F, 0x629E614F, 0x619D6150, 0x609E6050, -0x619E624F, 0x619E614F, 0x619E614F, 0x609E6050, 0x629E624F, 0x619D614F, 0x619D614F, 0x659D624F, -0x5E9E604F, 0x619E6150, 0x5F9E6050, 0x609E6050, 0x5E9E5E50, 0x619E614F, 0x619E604F, 0x5E9E5F50, -0x619E624F, 0x629E5F4F, 0x609E5E4F, 0x5F9E5E4F, 0x609E6050, 0x619E614F, 0x619D6150, 0x629D634F, -0x629E614F, 0x619E604F, 0x619E614F, 0x609D6250, 0x619E634F, 0x649E614F, 0x619E624F, 0x609E6050, -0x609E604F, 0x5F9E5F4F, 0x619E614F, 0x609E6150, 0x619E624F, 0x619E624F, 0x639E634E, 0x629E5E4F, -0x5F9E5E50, 0x619D5F50, 0x609D6150, 0x609D5D50, 0x5E9E6050, 0x609D6150, 0x629D624F, 0x609E614F, -0x619D6050, 0x609E5E50, 0x5E9D6050, 0x5E9E5E50, 0x5E9E5E50, 0x5E9E5F50, 0x619D6150, 0x609E6050, -0x619E624F, 0x609E6050, 0x619D6050, 0x609D5F50, 0x609D6050, 0x609E614F, 0x609E6050, 0x609D5F50, -0x5F9E5F50, 0x609E6050, 0x609D6050, 0x5E9E5D50, 0x5F9D6150, 0x609E6050, 0x619E604F, 0x609D6050, -0x5F9E614F, 0x629E6150, 0x629E604F, 0x629D6350, 0x639D614F, 0x639D604F, 0x5F9E6050, 0x5F9D6150, -0x639E5E4F, 0x5C9E5C51, 0x619D6050, 0x619D6050, 0x619E6050, 0x609E624F, 0x619D5E50, 0x5E9E5F50, -0x609E6050, 0x619D6050, 0x609E614F, 0x619D5F50, 0x5F9E6050, 0x629D6050, 0x00800080, 0x00927A60, +0x6FA37644, 0x76A37543, 0x76A47643, 0x75A37543, 0x75A37643, 0x00800080, 0x00851F79, 0x208A2273, +0x238B2172, 0x1E8B1F73, 0x1F8B1F73, 0x1F8A2173, 0x218A2273, 0x218A2073, 0x1F891F74, 0x1C8A1C75, +0x1F8A2373, 0x218B1E73, 0x218B1E73, 0x1B8A1D74, 0x22892373, 0x218A1E73, 0x1E8A2173, 0x29892173, +0x188B1D74, 0x1E8A1F74, 0x1A8A1D74, 0x1C8A1C74, 0x188B1975, 0x1F8B1E74, 0x208A1D73, 0x198B1A75, +0x218A2273, 0x228B1B73, 0x1D8B1873, 0x198B1974, 0x1C8A1D74, 0x1F8A2073, 0x1E891F74, 0x22892473, +0x228A2173, 0x208B1E73, 0x1F8B1F73, 0x1D8A2174, 0x1F8A2673, 0x27892073, 0x208A2173, 0x1E8A1D75, +0x1D8B1C74, 0x1B8B1C73, 0x208A1F73, 0x1C8A1F73, 0x208A2273, 0x218A2173, 0x248A2371, 0x238A1874, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00927A60, 0x7AA57B41, 0x7AA57A41, 0x7AA57B41, 0x7AA57A41, 0x7AA57A41, 0x7AA57B41, 0x7BA57A41, 0x7AA57B41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, 0x7AA57A41, @@ -17880,20 +17880,20 @@ const unsigned long bg[480*640]={ 0x5F952E5B, 0x0081077D, 0x3793475F, 0x1783007A, 0x0F8B406B, 0x6E993755, 0x0781007D, 0x00800080, 0x00800080, 0x00800080, 0x00852676, 0x57963F59, 0x0F82007B, 0x00800080, 0x00800080, 0x00800080, 0x178D3E6A, 0x6E9A3F53, 0x0F82007B, 0x26914F61, 0x1F840078, 0x30914761, 0x1783007A, 0x178E4767, -0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x00800080, 0x008F6267, 0x639E614F, -0x609E5F50, 0x5E9E5F50, 0x609E6050, 0x609E6050, 0x609E5F50, 0x5F9D5F50, 0x609E6050, 0x619D6050, -0x5F9D5E50, 0x609D6150, 0x609E6050, 0x609E5F50, 0x5E9D6150, 0x639D6150, 0x609D6150, 0x619D644F, -0x609E5E50, 0x609E5F50, 0x619D5E50, 0x5F9E6050, 0x5F9E5D50, 0x5F9E6150, 0x609E6050, 0x609E5D50, -0x609D6250, 0x639E614F, 0x5F9E604F, 0x5E9E5E4F, 0x5E9E5E50, 0x5F9D6150, 0x619E6150, 0x619E6150, -0x609E6150, 0x619E6050, 0x609E6050, 0x619E6150, 0x639D634F, 0x619D6150, 0x629D6050, 0x5F9E6050, -0x609E6050, 0x609E6050, 0x5F9E6050, 0x619D6250, 0x629D6250, 0x629D624F, 0x639E624F, 0x5F9D5E50, -0x5C9D6050, 0x609D5E50, 0x619D5F50, 0x5E9E5E50, 0x609D5F50, 0x609D6150, 0x609D6150, 0x619E614F, -0x619D5F50, 0x5F9D5D50, 0x5E9D6050, 0x5E9E5E50, 0x5E9E5E50, 0x5E9D5F50, 0x609D6150, 0x609D6150, -0x619D604F, 0x5F9D5F50, 0x5E9D6050, 0x609D5F50, 0x5E9E5E50, 0x5F9D5F50, 0x609E6050, 0x609D6050, -0x5F9E5E50, 0x5E9D6050, 0x5F9E5F4F, 0x609D5E50, 0x5E9E5E50, 0x609D5E50, 0x609E6150, 0x609D6050, -0x5F9E5F50, 0x629D614F, 0x619E6150, 0x609D6150, 0x619D6150, 0x619D6150, 0x5E9E5F50, 0x609D6050, -0x639E5F4F, 0x5C9E5C51, 0x609D5F50, 0x619D6050, 0x619D6050, 0x609D6250, 0x609D5F50, 0x5E9E5F50, -0x5F9D6050, 0x609E6050, 0x619D6150, 0x609D5F50, 0x5E9E6050, 0x629D6050, 0x00800080, 0x00927960, +0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x148A1B75, 0x1B8A1875, 0x1F891B75, 0x198A1775, 0x1D891B75, 0x1C8A1E75, 0x1D891E74, 0x208A1F73, +0x1E8A1B74, 0x198A1675, 0x18891C75, 0x178A1874, 0x198A1775, 0x188A1975, 0x1C891E75, 0x1B891F74, +0x20891D74, 0x198A1A75, 0x19891C75, 0x1B891A75, 0x198A1975, 0x198A1A75, 0x1B8A1D74, 0x1D8A1C74, +0x1A8A1774, 0x18891C75, 0x1B8B1B74, 0x1B891975, 0x178A1875, 0x1B8A1975, 0x1C8A1F74, 0x1C891D75, +0x1A8A1B75, 0x22891E74, 0x1E8A1F74, 0x1C892075, 0x1F882075, 0x1F891E75, 0x188A1A75, 0x1B891D75, +0x258A1B74, 0x128A1476, 0x1D891A75, 0x1F891C75, 0x1F891B74, 0x1D8A2174, 0x1D891A75, 0x188A1B75, +0x1A8A1B75, 0x1D891D74, 0x1E891E74, 0x1C891B75, 0x19891D74, 0x22891B74, 0x00800080, 0x00927960, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A57941, 0x79A47841, 0x78A47941, 0x79A57941, 0x78A47842, 0x78A47842, 0x79A47841, 0x78A47842, 0x78A47842, 0x78A47842, 0x79A57941, 0x79A47841, 0x78A47842, 0x78A47842, 0x78A47842, @@ -17920,20 +17920,20 @@ const unsigned long bg[480*640]={ 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37345, 0x73A37344, 0x73A37345, 0x73A37345, 0x73A37345, 0x73A37345, 0x73A37345, 0x73A37345, 0x73A37345, 0x73A37245, 0x73A37345, 0x73A37345, 0x72A37345, 0x72A37345, 0x73A37245, -0x72A37345, 0x72A37245, 0x73A37345, 0x72A37245, 0x72A37245, 0x00800080, 0x008E6168, 0x5F9E5F50, -0x609E6050, 0x5F9E5E50, 0x5E9E5E50, 0x5E9E5D50, 0x5D9E5D50, 0x5E9E5F50, 0x609D6150, 0x609D5E50, -0x5F9D6050, 0x5D9E5E50, 0x609E6050, 0x609E6050, 0x5F9E5D50, 0x5F9D614F, 0x609E5F50, 0x619D6150, -0x639D5F4F, 0x5E9E6050, 0x5F9E6050, 0x5F9D5E50, 0x609D5E50, 0x5D9E6050, 0x609E5F50, 0x609E6050, -0x5E9E6050, 0x619E624F, 0x619E5E50, 0x609E5F50, 0x5D9E5D50, 0x5E9E5E50, 0x5E9E5E50, 0x5E9E5F50, -0x609D6050, 0x5F9D6050, 0x619D6150, 0x619D634F, 0x629D6050, 0x619D6150, 0x5E9E5E51, 0x5F9E6050, -0x609D5F50, 0x609E5F50, 0x609D6150, 0x619D6150, 0x619D6150, 0x619E624F, 0x619D5E50, 0x609D6150, -0x5C9D6050, 0x5E9D5F50, 0x609D5E50, 0x5D9D5F50, 0x5F9D5F50, 0x619D6050, 0x5F9E5F4F, 0x5F9E6050, -0x619D5E50, 0x5E9D5C50, 0x5E9D5F50, 0x5E9E5E50, 0x5E9E5D50, 0x5E9D5F50, 0x5F9D5F50, 0x609D6150, -0x609D5E50, 0x5E9D5F50, 0x5F9D5F50, 0x5E9D5F50, 0x609D6050, 0x619D6250, 0x619D6050, 0x609D6050, -0x609D5F50, 0x5E9D5D50, 0x5E9E5F50, 0x5F9D6050, 0x5E9D5D50, 0x5E9E5F50, 0x5E9E5F50, 0x609D5F50, -0x5F9D5E50, 0x609D6150, 0x609D614F, 0x5F9D6050, 0x619D6150, 0x609D6250, 0x5F9D5E50, 0x5F9D5F50, -0x639D6050, 0x5C9D5C51, 0x5F9D5E50, 0x609D5F50, 0x609D5F50, 0x609D6150, 0x609D5F50, 0x5D9E5F50, -0x5F9D5E50, 0x609D6050, 0x609D6050, 0x5F9D6050, 0x5E9D6050, 0x629D6050, 0x00800080, 0x00927861, +0x72A37345, 0x72A37245, 0x73A37345, 0x72A37245, 0x72A37245, 0x00800080, 0x00851E79, 0x1A8A1974, +0x1D8A1C74, 0x1A8A1974, 0x188A1775, 0x178A1675, 0x158A1675, 0x188A1A75, 0x1D891E74, 0x1C891875, +0x1B891C75, 0x168A1875, 0x1D891C74, 0x1C8A1C74, 0x1A8A1675, 0x198A2074, 0x1C8A1A74, 0x20891F74, +0x24891B74, 0x178A1C74, 0x1B891E75, 0x1A891975, 0x1C891775, 0x168A1C75, 0x1D8A1A74, 0x1D891C74, +0x178A1C75, 0x208A2173, 0x1F8A1874, 0x1B8A1974, 0x158A1675, 0x178A1776, 0x198A1975, 0x198A1A75, +0x1B8A1B74, 0x1A891B75, 0x1F8A1F74, 0x1E892573, 0x21891B75, 0x1E891F75, 0x19891976, 0x1A8A1C75, +0x1B8A1A74, 0x1D8A1A74, 0x1B8A1E74, 0x1F891F74, 0x1F891F74, 0x1F8A2372, 0x1F891875, 0x1B891F74, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00927861, 0x77A47842, 0x77A47742, 0x78A47742, 0x77A47742, 0x78A47742, 0x78A57842, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47742, 0x77A47743, 0x77A47742, 0x77A47742, 0x77A47743, 0x77A47742, @@ -17960,20 +17960,20 @@ const unsigned long bg[480*640]={ 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x71A27245, 0x72A27245, 0x72A27245, 0x72A27245, 0x71A27245, 0x72A27145, 0x72A27245, 0x72A27145, 0x71A27145, 0x72A27245, 0x71A27245, 0x72A27245, 0x71A27145, 0x72A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x71A27045, -0x70A27145, 0x71A27045, 0x70A27145, 0x70A27046, 0x70A27046, 0x00800080, 0x008F5F68, 0x609D6050, -0x5E9D5E50, 0x5D9E5E50, 0x5E9D6050, 0x609E6050, 0x609D5F50, 0x5F9D5E50, 0x5D9E5D50, 0x5F9D6050, -0x5F9D5E50, 0x5E9D5F50, 0x5D9D5E50, 0x5F9E5F50, 0x5F9D5F50, 0x5D9E5D50, 0x609E6050, 0x5F9D6150, -0x619D6150, 0x5E9E5E50, 0x609D6050, 0x5E9D5E50, 0x5E9E5E51, 0x5D9D5D50, 0x609D5F50, 0x609D6050, -0x5F9D5E50, 0x5F9D6150, 0x619D6050, 0x5E9E5F50, 0x609E5D50, 0x5D9E5D50, 0x5D9E5E50, 0x5E9D5F50, -0x5E9D5F50, 0x609D6150, 0x609D6250, 0x639D6050, 0x5F9D6050, 0x609D5E50, 0x5E9E5E50, 0x609D5F50, -0x5E9D5F50, 0x5E9D5F50, 0x619D6150, 0x619D6150, 0x619D6150, 0x619E604F, 0x5D9D6050, 0x609D5E50, -0x5E9D5F50, 0x5D9D6050, 0x5E9D5D50, 0x5E9D5E50, 0x5F9D5F50, 0x5F9D5F50, 0x5E9E5E50, 0x5D9E5E50, -0x5E9D5E50, 0x5C9E5C51, 0x5D9D5F50, 0x5E9D5E50, 0x5D9E5C50, 0x5D9D5E50, 0x5E9D5E50, 0x609D6050, -0x5E9D5E50, 0x5E9D5E51, 0x5E9D5E50, 0x5F9D6050, 0x5F9D5E50, 0x5E9D5E51, 0x5F9D6050, 0x609D6050, -0x5F9D5E50, 0x5E9D5E50, 0x5D9D5D50, 0x5F9D5E50, 0x5F9D5D50, 0x5E9D5E50, 0x5E9D5D50, 0x5F9D6050, -0x5F9D5F50, 0x5E9D6150, 0x619D6050, 0x619D5F4F, 0x609D6050, 0x609D6150, 0x609D5D50, 0x5E9D5F50, -0x619D6150, 0x5C9D5D51, 0x5D9D5E51, 0x5E9D5F50, 0x609D5E50, 0x5F9D6050, 0x609D5E50, 0x5D9D5F50, -0x5E9D5E50, 0x5F9D6050, 0x5F9D5F50, 0x609D5F50, 0x5E9D5E51, 0x619D6050, 0x00800080, 0x00927661, +0x70A27145, 0x71A27045, 0x70A27145, 0x70A27046, 0x70A27046, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x18891A76, 0x16881D75, 0x17891676, 0x17891976, 0x1A891B75, 0x198A1A74, 0x188A1774, 0x158A1775, +0x19891875, 0x14891476, 0x16881A76, 0x16891875, 0x16891476, 0x16881876, 0x18891876, 0x1C881B76, +0x18881776, 0x18881877, 0x18891975, 0x1B881D76, 0x1A881976, 0x19881876, 0x1A881C76, 0x1E881D75, +0x1B881975, 0x19891775, 0x15891576, 0x19891775, 0x1A891676, 0x17891776, 0x18891676, 0x1A891B75, +0x1A881A76, 0x17881F75, 0x1E891D75, 0x20891A75, 0x1D881D76, 0x1B881E76, 0x1C891675, 0x17891A76, +0x1E891E75, 0x12891577, 0x17881976, 0x19881A76, 0x1C881976, 0x1A891B74, 0x1D871976, 0x16891976, +0x17891776, 0x19891C75, 0x19891B75, 0x1D881A75, 0x18891976, 0x1F881B75, 0x00800080, 0x00927661, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A47643, 0x76A37543, 0x76A37543, 0x76A47643, 0x76A47643, 0x76A37543, 0x76A47643, @@ -18000,20 +18000,20 @@ const unsigned long bg[480*640]={ 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A26F46, 0x70A27046, -0x70A27046, 0x70A27046, 0x70A26F46, 0x70A26F46, 0x70A27046, 0x00800080, 0x008E5F68, 0x5E9D5D50, -0x5E9D6050, 0x619D6050, 0x609D5F50, 0x5F9D5F50, 0x5F9D5F50, 0x609D6050, 0x609D6050, 0x5E9D5E50, -0x5E9D5F50, 0x5F9D5D51, 0x5E9D5E51, 0x5E9D5E50, 0x5F9E5E50, 0x5E9D5E50, 0x5D9D5F50, 0x5F9D5F50, -0x619D6050, 0x609D5C50, 0x5E9D5F50, 0x5E9D5E50, 0x5E9D5E50, 0x5D9D5D51, 0x5D9D5F50, 0x5F9D5F50, -0x609D5E50, 0x5F9D5E50, 0x619D6050, 0x5F9D5E50, 0x5E9D6050, 0x609D5E50, 0x5E9D5E50, 0x5F9D6050, -0x619D6150, 0x609D6050, 0x619D6150, 0x5F9D5F50, 0x609D6050, 0x5D9D5D51, 0x5E9D5F50, 0x5E9E5E50, -0x5F9D5E50, 0x5E9D6050, 0x609D6050, 0x619D6050, 0x609D614F, 0x5F9D5D51, 0x5E9D6050, 0x5D9D5F50, -0x5F9D5D50, 0x5E9D5F50, 0x5D9D5C51, 0x5E9D5E50, 0x5E9D5E50, 0x5D9E5C50, 0x5C9D5C51, 0x5D9D5C50, -0x5C9D5E50, 0x5C9D5D51, 0x5C9D5F50, 0x5D9D5E50, 0x5D9D5C50, 0x5D9D5E50, 0x5D9D5E50, 0x5F9D5F51, -0x5D9D5E51, 0x5D9D5D51, 0x5D9D5E51, 0x5E9D5D51, 0x5E9D5E50, 0x5C9E5C51, 0x5D9D5D50, 0x5D9D5E50, -0x609D6050, 0x5F9D5E50, 0x5E9D5D50, 0x5C9D5E50, 0x5D9E5E50, 0x5D9D5D51, 0x5D9D5D50, 0x5D9D5F50, -0x5F9D5F50, 0x5E9D5E51, 0x609D5F50, 0x619D5F50, 0x5F9D6050, 0x609D5F50, 0x609D5D50, 0x5C9D5F51, -0x5F9D6050, 0x5D9D5C51, 0x5D9D5E51, 0x5D9D5F51, 0x5F9D5F50, 0x5E9D5F50, 0x609D5E50, 0x5D9D5E50, -0x5E9D5D50, 0x5E9D5F50, 0x5E9D5E50, 0x5F9D6050, 0x5F9D5D50, 0x5F9D6150, 0x00800080, 0x00917462, +0x70A27046, 0x70A27046, 0x70A26F46, 0x70A26F46, 0x70A27046, 0x00800080, 0x0084197A, 0x17891575, +0x18891D75, 0x1F891D75, 0x1C881B75, 0x19891A75, 0x19891B75, 0x1C891D75, 0x1D891B75, 0x18891776, +0x18891975, 0x1A881677, 0x19881876, 0x17891876, 0x1A8A1875, 0x17891776, 0x15891A75, 0x1B891975, +0x1F881E75, 0x1D881476, 0x17891A75, 0x19891776, 0x17881876, 0x16891576, 0x168A1A75, 0x19891A75, +0x1C891775, 0x1B891875, 0x1F891D74, 0x1A891875, 0x19891C75, 0x1C891875, 0x17891776, 0x1A891B75, +0x1E891E75, 0x1C891B75, 0x21882075, 0x1A881A76, 0x1D881D76, 0x15881577, 0x17891976, 0x188A1775, +0x1A891775, 0x18891C75, 0x1D881D75, 0x1F881D75, 0x1C892074, 0x1B891576, 0x19891C75, 0x17881A76, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00917462, 0x74A37543, 0x74A37444, 0x75A37443, 0x74A37543, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, 0x74A37444, @@ -18040,20 +18040,20 @@ const unsigned long bg[480*640]={ 0x6EA16E46, 0x6EA16F46, 0x6EA16E46, 0x6EA16E46, 0x6EA16F46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E47, 0x6EA16E47, 0x6EA16E47, 0x6EA16E47, -0x6EA16D47, 0x6EA16E47, 0x6EA16E47, 0x6EA16E47, 0x6DA16E47, 0x00800080, 0x008E5D68, 0x5D9D5F50, -0x609D6050, 0x5E9D5D50, 0x5C9D5D50, 0x5D9E5D50, 0x5E9D5E50, 0x5E9D5E50, 0x5F9D5F50, 0x5F9D5F50, -0x5E9D5E50, 0x5E9D5F50, 0x5E9D5D51, 0x5E9D5C51, 0x5D9D5E50, 0x5D9D5D51, 0x5D9D5E50, 0x5F9D5E50, -0x5F9D6050, 0x609D5E50, 0x5C9D5E50, 0x5D9D5D51, 0x5E9D5D50, 0x5E9D5C51, 0x5D9D5E50, 0x5E9D5F50, -0x5F9D5F50, 0x5C9D5E51, 0x5F9D6050, 0x609D5F50, 0x5E9D5E50, 0x5F9D5F50, 0x5F9D5F50, 0x609D6050, -0x5F9D5F50, 0x609D6150, 0x609D5E50, 0x5E9D5F51, 0x5F9D5D51, 0x5C9D5E50, 0x5F9D5E50, 0x5D9D5E51, -0x5D9D5E50, 0x609D6050, 0x609D6150, 0x609D6050, 0x619D5F50, 0x5D9D5E51, 0x5E9D5D51, 0x5F9C6250, -0x5E9D5C50, 0x609D5D50, 0x5C9D5D51, 0x5E9D5E50, 0x5D9E5C50, 0x5C9D5C51, 0x5C9D5C51, 0x5D9D5D51, -0x5C9D5C50, 0x5D9D5C51, 0x5C9D5D51, 0x5D9D5D50, 0x5D9D5C50, 0x5D9D5D51, 0x5C9D5E51, 0x5F9D5E51, -0x5D9D5D51, 0x5D9D5D51, 0x5D9D5E51, 0x5E9D5E50, 0x5C9D5D51, 0x5E9D5E50, 0x5E9D5D50, 0x5E9D5D50, -0x5D9D5E50, 0x5F9D5E50, 0x5D9D5D50, 0x5D9D5C51, 0x5D9D5D51, 0x5E9D5C50, 0x5D9D5C51, 0x5D9D5D51, -0x5F9D5E50, 0x5F9D5E50, 0x5F9D5F50, 0x5F9D6050, 0x5E9D5E51, 0x5F9D5F51, 0x609D5E50, 0x5C9D5E51, -0x5E9D6050, 0x5F9D5C51, 0x5E9D5E50, 0x5C9D5E51, 0x5E9D5E51, 0x5E9D5E50, 0x5F9D5E50, 0x5C9D5E50, -0x5E9D5D50, 0x5E9D5E50, 0x5E9D5E50, 0x5E9D5E50, 0x5E9D5E51, 0x5E9D6050, 0x00800080, 0x00917362, +0x6EA16D47, 0x6EA16E47, 0x6EA16E47, 0x6EA16E47, 0x6DA16E47, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x17881376, 0x1C881676, 0x12881677, 0x18881876, 0x16891375, 0x13881477, 0x15881477, 0x15881576, +0x12891476, 0x16881377, 0x13881577, 0x15891576, 0x15881476, 0x15881677, 0x14881876, 0x1B871876, +0x15871777, 0x15881576, 0x17881777, 0x17881776, 0x13881577, 0x17891875, 0x17891675, 0x17891576, +0x15891776, 0x1A881876, 0x16881576, 0x16881277, 0x16881676, 0x17881376, 0x14891377, 0x15891576, +0x19891876, 0x1A881876, 0x1B871A76, 0x1A881E75, 0x18881877, 0x1B871B76, 0x1D871776, 0x12881976, +0x19881B76, 0x1A881278, 0x17881776, 0x14881877, 0x17871877, 0x18881775, 0x1A881777, 0x14881777, +0x17881576, 0x18881976, 0x18881776, 0x17881976, 0x19871876, 0x18881C76, 0x00800080, 0x00917362, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37345, 0x73A37344, 0x73A37345, 0x73A37345, 0x73A37345, 0x72A37345, 0x72A37345, 0x73A37345, 0x73A37345, 0x72A37345, 0x72A37245, 0x72A37345, 0x73A37245, 0x73A37345, 0x73A37245, 0x72A37345, 0x72A37245, 0x72A37245, @@ -18080,20 +18080,20 @@ const unsigned long bg[480*640]={ 0x6DA16D47, 0x6DA16D48, 0x6DA16D47, 0x6DA16D48, 0x6DA16D48, 0x6DA16D47, 0x6DA16D47, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6CA16C48, 0x6CA16C48, 0x6CA16D48, 0x6CA16D48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6DA16C48, 0x6CA16D48, -0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x00800080, 0x008E5E68, 0x5F9D5F50, -0x5E9D5D51, 0x5D9D5E50, 0x5E9D6050, 0x609D6050, 0x609D6050, 0x5F9D5E50, 0x5D9D5E50, 0x5E9D5F50, -0x5E9D5E50, 0x5E9D5D50, 0x5E9D5F50, 0x5E9D5D50, 0x5C9D5C51, 0x5D9D5D51, 0x5E9D5E50, 0x5D9D5E50, -0x5D9D5F50, 0x5E9D6050, 0x5D9D5D51, 0x5D9D5D51, 0x5D9D5E50, 0x5D9D5C51, 0x5D9D5C51, 0x5E9D5E50, -0x5E9D5F50, 0x5E9D5D51, 0x5E9D5E50, 0x5F9D5F50, 0x609D5F50, 0x5E9D5E50, 0x5E9D5E50, 0x5E9D5F50, -0x609D6150, 0x609D5F50, 0x5D9D5E51, 0x5F9D5E51, 0x5C9D5C51, 0x5E9D5F50, 0x5E9D5E50, 0x5E9D5D50, -0x5E9D5F50, 0x5E9D5E50, 0x5F9D5E51, 0x5E9D6050, 0x5E9D5C51, 0x5D9D5E50, 0x5D9D6050, 0x619C6150, -0x5C9D5E51, 0x5D9D5C51, 0x5D9D5D51, 0x5D9D5C51, 0x5C9D5D51, 0x5D9D5D51, 0x5D9D5C51, 0x5C9D5D51, -0x5C9D5B51, 0x5D9C5C51, 0x5B9D5C51, 0x5D9D5C51, 0x5C9D5C51, 0x5D9D5D51, 0x5C9D5E51, 0x5F9D5D51, -0x5D9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5C9D5C51, 0x5C9D5C51, 0x5B9D5B51, 0x5C9D5C51, 0x5C9D5D51, -0x5D9D5D51, 0x5D9D5E50, 0x5E9D5D51, 0x5D9D5C51, 0x5B9D5E50, 0x5E9D5D50, 0x5B9D5C51, 0x5C9D5C51, -0x5D9D5E50, 0x5E9D5E50, 0x5E9D5E51, 0x5E9D6050, 0x5E9D5E51, 0x5D9D5F51, 0x5E9C5F51, 0x5C9D5C51, -0x5F9C5F50, 0x5F9C5C51, 0x5D9D5E51, 0x5C9D5C51, 0x5D9D5E51, 0x5D9D5E50, 0x5E9D5D51, 0x5C9D5D51, -0x5C9D5C51, 0x5D9D5D51, 0x5D9D5D51, 0x5C9D5C51, 0x5E9D5E50, 0x5D9D5E50, 0x00800080, 0x00917262, +0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x00800080, 0x0084187B, 0x1A881B76, +0x18881577, 0x16881776, 0x19881B76, 0x1C881C76, 0x1D881C76, 0x1A891876, 0x15891875, 0x18891975, +0x19881876, 0x18881576, 0x17881A77, 0x17881677, 0x14881377, 0x15891576, 0x17881776, 0x15881776, +0x16881976, 0x18871C76, 0x16881576, 0x16881577, 0x14881777, 0x16871478, 0x14891476, 0x18881876, +0x19881976, 0x19881576, 0x17881877, 0x1A881A75, 0x1C871976, 0x17881777, 0x18881876, 0x18881976, +0x1C881F75, 0x1D881A76, 0x16881877, 0x1B871876, 0x14881277, 0x17881A76, 0x17891775, 0x17881577, +0x17881A76, 0x18881976, 0x1B881976, 0x19881D75, 0x18881377, 0x16881777, 0x16871C77, 0x1E872075, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00917262, 0x72A27245, 0x71A27145, 0x71A27245, 0x71A27145, 0x71A27145, 0x72A27145, 0x71A27245, 0x71A27145, 0x71A27145, 0x71A27145, 0x72A27145, 0x71A27145, 0x71A27145, 0x71A27145, 0x70A27145, 0x70A27145, 0x71A27045, 0x71A27045, 0x71A27145, 0x70A27145, 0x71A27145, 0x71A27045, 0x71A27145, 0x71A27045, @@ -18120,20 +18120,20 @@ const unsigned long bg[480*640]={ 0x6CA16B48, 0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA06B48, 0x6BA16B48, 0x6BA16B48, 0x6BA06B48, 0x6BA16B48, 0x6BA16B48, 0x6BA06B49, 0x6BA06B48, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, -0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x00800080, 0x008E5F68, 0x5E9D5D51, -0x5D9D5D51, 0x5D9D5E50, 0x5E9D5E50, 0x5E9D5E50, 0x5D9D5D51, 0x5E9D5F50, 0x5F9D5F50, 0x5E9D5E50, -0x5E9D5E50, 0x5D9D5D51, 0x5C9D5D51, 0x5F9D5D50, 0x5C9C5C51, 0x5B9D5C51, 0x5D9D5D51, 0x5D9D5D50, -0x5D9D5E50, 0x5E9D5E51, 0x5F9D5C51, 0x5C9D5D51, 0x5D9D5D51, 0x5C9C5D51, 0x5B9D5C51, 0x5D9D5E50, -0x5E9D5E50, 0x5E9D5D51, 0x5D9D5C51, 0x5D9D5E50, 0x5E9D6050, 0x609D5F50, 0x5E9D5E51, 0x609D6050, -0x609D5E50, 0x5D9D5D51, 0x5E9D5F51, 0x5D9D5B51, 0x5B9D5E51, 0x5F9D5D50, 0x5D9D5D51, 0x5C9D5D51, -0x5E9D5E50, 0x5E9D6050, 0x5E9D5E51, 0x5F9D5D51, 0x5C9D5C51, 0x5C9D5D51, 0x609D6050, 0x609D5E50, -0x5D9D5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5D9D5C51, 0x5C9D5D51, 0x5D9C5C51, 0x5C9D5C51, -0x5D9D5C51, 0x5B9D5C51, 0x5B9C5B51, 0x5D9D5C51, 0x5C9D5C51, 0x5C9D5C51, 0x5C9C5F51, 0x5E9D5C51, -0x5D9C5C51, 0x5C9D5E51, 0x5D9D5D51, 0x5B9D5B51, 0x5B9D5C51, 0x5C9D5D51, 0x5D9D5E51, 0x5E9D5E50, -0x5D9D5D51, 0x5D9D5C51, 0x5D9D5E50, 0x5D9D5C51, 0x5C9D5C51, 0x5E9D5D50, 0x5C9D5B51, 0x5A9D5C51, -0x5C9D5D51, 0x5E9D5E50, 0x5D9D5D51, 0x5D9D5E50, 0x5E9D5E50, 0x5C9C5E51, 0x5E9C5F50, 0x5C9D5A51, -0x5E9D5E51, 0x5E9C5C51, 0x5C9D5E51, 0x5C9C5B51, 0x5C9C5D51, 0x5C9D5C51, 0x5E9C5C50, 0x5C9D5D51, -0x5C9D5C51, 0x5C9D5D51, 0x5C9D5D51, 0x5F9D5D50, 0x5B9D5D51, 0x5E9D5D50, 0x00800080, 0x00800080, +0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x6BA06B49, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x15881477, 0x13871577, 0x15881477, 0x12881377, 0x16871577, 0x15871677, 0x15871477, 0x13881378, +0x15881377, 0x11871378, 0x11871079, 0x16881277, 0x14871377, 0x14881477, 0x15871A77, 0x19871577, +0x16871378, 0x13871777, 0x16871577, 0x11881178, 0x10871378, 0x14881677, 0x16881777, 0x17881777, +0x15881677, 0x16881476, 0x16881777, 0x16871477, 0x13881377, 0x17871577, 0x14871078, 0x10881378, +0x14881577, 0x18871776, 0x16871577, 0x15871777, 0x19871776, 0x15861778, 0x17871A77, 0x15870F78, +0x19871977, 0x19871477, 0x15871777, 0x14871278, 0x14871677, 0x14881477, 0x17871477, 0x15871577, +0x13881477, 0x14871677, 0x14881677, 0x1A871676, 0x12881577, 0x17881577, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, @@ -18160,20 +18160,20 @@ const unsigned long bg[480*640]={ 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x008E5D68, 0x5D9D5D51, -0x5C9D5D51, 0x5E9D5D50, 0x5C9C5C51, 0x5C9C5C51, 0x5C9D5D51, 0x5D9D5D51, 0x5E9D5E50, 0x5F9D5E51, -0x5D9D5D51, 0x5D9D5C51, 0x5C9D5D51, 0x5C9D5E50, 0x5D9D5B51, 0x5B9D5B51, 0x5C9D5C51, 0x5D9D5D51, -0x5C9D5E50, 0x5E9D5D51, 0x5F9C5E51, 0x5C9D5C51, 0x5C9D5C51, 0x5D9C5C51, 0x5C9C5C51, 0x5C9D5E50, -0x5D9D5D51, 0x5E9D5E50, 0x5C9C5D51, 0x5C9D5D51, 0x5E9D5E51, 0x5E9D5E51, 0x5E9D5E51, 0x5E9D5D51, -0x5D9D5D51, 0x5E9D5E51, 0x5E9C5C51, 0x5A9D5B51, 0x5D9C5E51, 0x5C9D5D51, 0x5C9D5B51, 0x5D9D5E51, -0x5E9D5E50, 0x5F9D5E51, 0x5D9D5F51, 0x5D9C5C51, 0x5C9D5C51, 0x5D9C5F51, 0x609C5F50, 0x5B9D5A51, -0x5D9D5C51, 0x5B9C5C51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5A51, 0x5B9D5B51, -0x5B9D5D51, 0x5A9D5C51, 0x5B9C5B52, 0x5C9D5B51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5E51, 0x5E9C5C51, -0x5C9C5B51, 0x5C9C5D51, 0x5C9C5A51, 0x5B9D5B52, 0x5B9D5B51, 0x5B9D5B51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9C5D51, 0x5D9D5D51, 0x5D9D5C51, 0x5D9C5D51, 0x5C9D5B51, 0x5B9D5D51, 0x5C9D5B51, 0x5A9C5A51, -0x5B9D5C51, 0x5D9D5D51, 0x5E9C5C50, 0x5C9C5C51, 0x5E9D5D51, 0x5C9C5D51, 0x5D9C5E51, 0x5E9C5A51, -0x5C9C5E51, 0x5E9C5E51, 0x5C9C5D51, 0x5C9C5B51, 0x5C9C5D51, 0x5C9C5C51, 0x5D9C5C51, 0x5C9C5D51, -0x5B9D5C51, 0x5C9D5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5D9D5C51, 0x5C9C5D51, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0083167C, 0x15871577, +0x14881677, 0x17871677, 0x14871378, 0x13871378, 0x15871678, 0x16881677, 0x17871777, 0x1B871976, +0x16881677, 0x16871477, 0x15871577, 0x14871777, 0x16871278, 0x12871178, 0x13881477, 0x15881577, +0x13871776, 0x17871677, 0x1A861776, 0x13881477, 0x14881477, 0x15871378, 0x13871478, 0x12881876, +0x15881677, 0x17871976, 0x13871678, 0x13871577, 0x18871877, 0x18871977, 0x18871877, 0x17871677, +0x16871577, 0x18871777, 0x17871477, 0x0F871078, 0x16871977, 0x14881577, 0x14881277, 0x15871877, +0x17871776, 0x1A871776, 0x16871A77, 0x16871477, 0x14871577, 0x15871A76, 0x1B871A76, 0x12880D78, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, @@ -18200,20 +18200,20 @@ const unsigned long bg[480*640]={ 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x008E5C68, 0x5B9C5C51, -0x5D9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5D51, 0x5C9C5D51, 0x5C9D5D51, 0x5C9C5E51, -0x5F9D5E51, 0x5C9D5D51, 0x5C9C5C51, 0x5D9C5C51, 0x5D9C5C51, 0x5B9D5B51, 0x5B9D5C51, 0x5C9C5C51, -0x5C9D5C51, 0x5D9C5D51, 0x5E9C5E51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5B51, 0x5C9C5C52, 0x5C9D5C51, -0x5C9D5D51, 0x5D9D5E51, 0x5E9C5B50, 0x5C9C5B51, 0x5C9C5D51, 0x5D9D5D51, 0x5D9D5D51, 0x5D9C5E51, -0x5E9D5D51, 0x5C9C5C51, 0x5B9C5A51, 0x5B9C5D51, 0x5E9D5C51, 0x5C9C5C51, 0x5C9D5D51, 0x5E9C5D51, -0x5E9C5F50, 0x5D9C5D51, 0x5E9C5C51, 0x5C9C5C51, 0x5C9D5C51, 0x5E9D5E51, 0x5E9D5A51, 0x599D5952, -0x5C9C5B51, 0x5B9C5C51, 0x5A9D5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5A51, 0x5A9C5B51, -0x5C9C5B51, 0x5C9C5A51, 0x5B9C5A51, 0x5B9C5B51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5D51, 0x5D9C5C51, -0x5B9C5B51, 0x5C9C5C51, 0x5B9C5A51, 0x5B9D5B52, 0x5B9C5A51, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5B51, -0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5A51, 0x5D9C5C51, 0x5C9C5A51, -0x5B9D5B51, 0x5C9D5D51, 0x5D9C5C51, 0x5C9C5B51, 0x5C9C5D51, 0x5C9C5C51, 0x5D9C5C51, 0x5D9C5B51, -0x5A9C5D51, 0x5D9C5D51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5C52, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5A9D5C51, 0x5C9C5D51, 0x5B9C5B51, 0x5B9D5C51, 0x5C9C5C51, 0x5B9D5B51, 0x00800080, 0x00800080, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00958D5B, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x14871078, 0x12871477, 0x10871278, 0x13861478, 0x12871179, 0x11871179, 0x10860E79, 0x0E871079, +0x13871178, 0x13871078, 0x10860E79, 0x11871178, 0x12871178, 0x14861378, 0x13861578, 0x15861378, +0x11871278, 0x14861478, 0x11870F79, 0x10871079, 0x10870F79, 0x0F871178, 0x12871278, 0x11871278, +0x13871478, 0x12871378, 0x14871477, 0x13871477, 0x14861378, 0x11870F78, 0x15861378, 0x13870E78, +0x10871278, 0x13871677, 0x16861477, 0x14861278, 0x14871677, 0x14861478, 0x16861578, 0x16861278, +0x10871678, 0x16861677, 0x10861478, 0x15861078, 0x10871279, 0x13861378, 0x14861477, 0x14861378, +0x10881277, 0x12861578, 0x11871278, 0x11871377, 0x13871477, 0x12871278, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, @@ -18240,973 +18240,973 @@ const unsigned long bg[480*640]={ 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, -0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x008E5B68, 0x5C9C5B51, -0x5B9C5B51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5D9C5E51, 0x5E9C5D51, 0x5C9C5D51, 0x5C9C5D51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5A51, 0x5C9C5C51, -0x5C9C5A51, 0x5C9C5C51, 0x5C9C5D51, 0x5D9D5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5B9C5B51, 0x5C9C5B51, -0x5D9D5C51, 0x5D9D5D51, 0x5E9C5D51, 0x5B9C5C51, 0x5C9D5C51, 0x5C9C5C51, 0x5D9C5D51, 0x5D9C5D51, -0x5C9C5C51, 0x5B9C5A51, 0x5A9C5B52, 0x5D9C5E51, 0x5C9D5B51, 0x5C9C5B51, 0x5C9C5D51, 0x5D9C5D51, -0x5E9C5D51, 0x5D9C5E51, 0x5C9C5B51, 0x5B9C5B51, 0x5C9C5E51, 0x5D9C5C51, 0x5B9C5A52, 0x5A9D5B52, -0x5A9C5A51, 0x5C9C5A51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5B52, 0x5B9C5B51, 0x5C9C5C52, 0x5B9C5A51, -0x5B9C5B52, 0x5C9C5B51, 0x5B9C5A51, 0x5B9C5B51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5A9C5B51, 0x5C9C5C51, 0x5A9C5A51, 0x5B9C5B52, 0x5A9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5A51, -0x5B9C5B52, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5A51, 0x5A9C5C51, 0x5C9C5B51, -0x5A9C5B51, 0x5A9D5C51, 0x5D9C5C51, 0x5C9C5C51, 0x5B9C5D51, 0x5C9C5C51, 0x5D9C5B51, 0x5C9C5C51, -0x5A9C5C51, 0x5C9C5D51, 0x5C9C5C52, 0x5C9C5B51, 0x5B9C5C52, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5B51, -0x5A9C5A51, 0x5C9C5C51, 0x5A9C5A51, 0x5A9C5A51, 0x5B9D5B51, 0x5C9C5A51, 0x5B9C5B51, 0x5B9C5B51, -0x5C9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C52, 0x5C9C5C51, 0x5C9C5C51, 0x5D9C5D51, 0x5B9C5B51, -0x5C9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5E9C5E51, 0x5C9C5B51, 0x5C9C5C51, -0x5C9C5B51, 0x5C9C5C51, 0x5D9C5D51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5C9C5A51, 0x5A9C5B51, 0x5C9C5D51, 0x5C9C5B51, 0x5C9C5C51, -0x5B9C5B52, 0x5B9C5A51, 0x5A9C5B52, 0x5C9C5C51, 0x5C9C5C51, 0x5D9C5E51, 0x5C9C5B51, 0x5B9C5C51, -0x5C9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5C9C5C51, 0x5B9C5B51, -0x5A9C5B51, 0x5C9C5B51, 0x5C9B5E51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5C51, 0x5D9C5C51, -0x5C9C5D51, 0x5C9C5B51, 0x5B9C5C52, 0x5D9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5B9C5A51, 0x5A9C5A52, -0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5A9C5A52, 0x5B9C5D51, 0x5D9C5B51, 0x5C9C5C51, 0x5B9C5B52, -0x5C9C5C51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5C9C5B51, 0x5A9C5C51, 0x5B9C5C51, -0x5C9C5D51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5D51, -0x5D9C5C51, 0x5C9C5C52, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5A51, 0x5A9C5A51, -0x5A9C5C51, 0x5E9C5D51, 0x5C9C5A51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5B51, -0x5C9C5B51, 0x5C9C5B51, 0x5A9D5951, 0x5A9C5B51, 0x5B9C5C51, 0x5B9C5A51, 0x5A9C5A51, 0x5A9C5A51, -0x5A9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5D9C5E51, 0x5E9C5D51, 0x5C9C5B51, 0x5B9C5C51, 0x5B9C5A51, -0x5B9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5D51, 0x5B9C5A51, 0x5A9C5B51, 0x5C9C5C51, 0x5B9C5C52, -0x5B9C5C51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B51, 0x5C9C5B52, 0x5B9C5B52, 0x5C9C5E51, 0x5B9C5B51, -0x5B9C5A51, 0x5B9C5A51, 0x5C9C5D51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5C52, 0x5A9C5B52, 0x5B9C5A51, -0x5C9C5C51, 0x5C9C5C51, 0x5A9C5A51, 0x5C9C5B51, 0x5D9C5C51, 0x5C9C5C51, 0x5D9C5C51, 0x5A9C5C51, -0x5C9C5B51, 0x5B9C5C51, 0x5C9C5A51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5B9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5A51, 0x5C9C5A51, 0x5D9C5C51, 0x5D9C5C51, -0x5B9C5A51, 0x5B9C5A51, 0x5A9C5C51, 0x5D9C5C51, 0x5C9C5C51, 0x5C9C5C52, 0x5C9C5C51, 0x5C9C5A51, -0x5B9C5B51, 0x5C9C5C52, 0x5C9C5B51, 0x5A9C5A51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5D51, 0x5D9C5C51, -0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5D9C5D51, 0x5D9D5E51, 0x5E9C5E51, 0x5C9C5B51, -0x5A9C5A51, 0x5A9C5C51, 0x5C9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5A51, 0x5B9C5B51, 0x5C9C5C51, -0x5B9C5A51, 0x5A9C5B52, 0x5B9C5C51, 0x5C9C5D51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B51, -0x5B9C5C52, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5C9C5D51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B52, -0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5B51, -0x5C9C5D51, 0x5D9C5E51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5D51, 0x5B9C5A51, 0x5A9C5C51, -0x5C9C5B51, 0x5A9C5C51, 0x5B9C5C51, 0x5D9C5B51, 0x5B9C5A51, 0x5B9C5C51, 0x5B9C5C52, 0x5B9C5C51, -0x5C9D5C51, 0x5C9C5C51, 0x5D9C5E51, 0x5D9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B51, -0x5B9C5B51, 0x5A9D5A52, 0x5C9C5D51, 0x5D9C5C51, 0x5A9C5B51, 0x5B9C5B51, 0x5C9C5D51, 0x5D9C5D51, -0x5C9C5C51, 0x5D9C5C51, 0x5B9C5A51, 0x5B9C5C51, 0x5D9C5D51, 0x5B9C5A51, 0x5A9C5B51, 0x5C9C5C51, -0x5A9C5C51, 0x5A9C5A51, 0x5C9C5C51, 0x5B9C5A51, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5C52, 0x5A9C5A51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C52, 0x5C9C5C52, -0x5A9C5B52, 0x5C9C5B52, 0x5A9C5A51, 0x5B9C5A52, 0x5A9C5B52, 0x5A9C5B51, 0x5A9C5952, 0x5A9C5A52, -0x5A9C5A51, 0x5A9C5B51, 0x5A9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5A9C5A51, 0x5C9C5C52, -0x5A9C5A51, 0x5B9C5A51, 0x5C9C5C51, 0x5C9C5C51, 0x5A9C5C51, 0x5C9C5C51, 0x5C9C5C52, 0x5C9C5C52, -0x5A9C5B51, 0x5C9C5C51, 0x5C9C5B52, 0x5C9C5B51, 0x5A9C5B52, 0x5C9C5B52, 0x5B9C5C51, 0x5C9C5B52, -0x5A9C5A51, 0x5C9C5A51, 0x5A9C5A51, 0x5A9C5B51, 0x5A9C5B51, 0x5C9C5B51, 0x5A9C5B51, 0x5B9C5B51, -0x5C9C5A51, 0x5B9C5B51, 0x5A9C5A52, 0x5C9C5B51, 0x5C9C5C51, 0x5B9C5C51, 0x5D9C5C51, 0x5B9C5B51, -0x5C9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5B52, 0x5C9C5D51, 0x5C9C5C51, 0x5B9C5C52, -0x5C9C5C51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5B51, -0x5B9C5C51, 0x5C9C5B51, 0x5C9C5C52, 0x5A9C5A51, 0x5B9C5C52, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5A51, -0x5A9C5B51, 0x5A9C5A51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5C51, 0x5E9C5C51, 0x5C9C5B52, 0x5B9C5C51, -0x5B9C5A51, 0x5B9C5C51, 0x5C9C5B51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B51, 0x5A9C5A51, -0x5B9C5B51, 0x5B9C5B51, 0x5D9B5C51, 0x5C9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5C51, 0x5B9C5C51, -0x5C9C5C51, 0x5B9C5B51, 0x5C9C5D51, 0x5C9C5C51, 0x5B9C5C51, 0x5C9C5A51, 0x5A9C5A51, 0x5C9C5D51, -0x5D9C5D51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9C5A51, 0x5A9C5C52, 0x5D9C5C51, 0x5C9C5C51, 0x5C9C5A51, -0x5C9C5C51, 0x5B9C5B51, 0x5B9C5C52, 0x5B9C5C51, 0x5C9C5B51, 0x5C9C5B51, 0x5A9C5B52, 0x5B9C5C52, -0x5C9C5B51, 0x5B9C5C52, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5C9C5B51, -0x5C9C5C51, 0x5D9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5B9C5A51, 0x5A9C5A51, 0x5A9C5A51, -0x5B9C5D51, 0x5D9C5C51, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5A9C5C51, -0x5B9C5B51, 0x5A9D5952, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5A51, 0x5A9C5A51, 0x5B9C5B51, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5E51, 0x5D9C5C51, 0x5C9C5B52, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5C51, 0x5B9C5A51, 0x5B9C5C51, 0x5C9C5B52, 0x5A9C5B52, 0x5B9C5C52, 0x5B9C5B51, -0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B51, 0x5C9C5B52, 0x5B9C5B52, 0x5B9C5E51, 0x5B9C5B52, -0x5B9C5A51, 0x5A9C5B51, 0x5A9C5C51, 0x5C9C5B51, 0x5A9C5B51, 0x5A9C5C52, 0x5A9C5A51, 0x5A9C5A51, -0x5C9C5C52, 0x5C9C5B51, 0x5A9C5A51, 0x5C9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5D9C5C51, 0x5A9C5B52, -0x5B9C5B51, 0x5B9C5C51, 0x5B9C5A51, 0x5B9C5C52, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5C52, 0x5C9C5C51, -0x5B9C5C51, 0x5B9C5B52, 0x5B9C5C52, 0x5C9C5C51, 0x5B9C5A51, 0x5B9C5A51, 0x5C9C5C51, 0x5C9C5C51, -0x5A9C5A51, 0x5B9C5A51, 0x5A9C5C51, 0x5C9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5C9C5C52, 0x5B9C5A52, -0x5A9C5B51, 0x5B9C5C51, 0x5B9C5B52, 0x5A9C5A51, 0x5B9C5C51, 0x5C9C5C51, 0x5D9C5C51, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5D51, 0x5E9C5D51, -0x5C9C5A51, 0x5A9C5A51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5A51, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5C51, -0x5C9C5C51, 0x5B9C5A51, 0x5A9C5A52, 0x5A9C5A51, 0x5B9C5B51, 0x5B9C5A51, 0x5B9C5B51, 0x5B9C5C52, -0x5B9C5B51, 0x5C9C5C52, 0x5C9C5C52, 0x5A9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5B52, 0x5B9C5B52, -0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5C51, 0x5C9C5B51, -0x5B9C5C51, 0x5C9C5C51, 0x5D9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5B9C5C51, 0x5C9C5B51, 0x5A9C5B52, -0x5B9C5C51, 0x5A9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5A9C5B51, 0x5A9C5B51, 0x5C9C5B52, 0x5A9C5C51, -0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5D9C5C51, 0x5C9C5C51, 0x5C9C5B52, 0x5B9C5B51, 0x5B9C5A51, -0x5A9C5A52, 0x5B9C5C51, 0x5E9C5D51, 0x5B9C5A51, 0x5B9C5A51, 0x5B9C5C51, 0x5C9C5D51, 0x5D9C5C51, -0x5C9B5C51, 0x5C9C5B52, 0x5A9C5A51, 0x5C9C5C51, 0x5C9C5B51, 0x5A9C5A51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9C5A51, 0x5B9C5C52, 0x5B9C5B52, 0x5A9C5B51, 0x5B9C5C51, 0x5C9C5C52, 0x5B9C5B52, 0x5C9C5B52, -0x5B9C5B52, 0x5B9C5C52, 0x5A9C5B51, 0x5A9C5B52, 0x5B9C5A51, 0x5B9C5C52, 0x5C9C5B51, 0x5B9C5B52, -0x5A9C5B52, 0x5B9C5A52, 0x5A9C5A52, 0x5A9C5A51, 0x5A9C5951, 0x5A9C5A52, 0x5B9C5B51, 0x5B9C5B52, -0x5A9C5A52, 0x5A9C5B52, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5A52, 0x5A9C5B52, -0x5B9C5952, 0x5A9C5A51, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5A51, 0x5C9C5B51, 0x5C9C5B52, 0x5B9C5B52, -0x5B9C5A52, 0x5C9C5C51, 0x5C9C5B51, 0x5C9C5B52, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B51, 0x5C9C5B52, -0x5A9C5A51, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5A51, 0x5A9C5B52, 0x5B9C5A51, 0x5A9C5A51, 0x5A9C5B51, -0x5B9C5B51, 0x5B9C5A51, 0x5A9C5A52, 0x5A9C5A52, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5B51, 0x5A9C5B51, -0x5C9C5C52, 0x5B9C5B52, 0x5C9C5C51, 0x5C9C5B52, 0x5B9C5B52, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, -0x5B9C5C51, 0x5B9C5B51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5B52, 0x5B9C5B51, 0x5C9C5B51, -0x5C9C5C51, 0x5C9B5C51, 0x5B9C5A51, 0x5A9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5B52, 0x599C5952, -0x5A9C5A51, 0x5A9C5B51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5D51, 0x5B9C5B51, 0x5B9C5C52, 0x5C9C5B52, -0x5A9C5B51, 0x5B9C5C51, 0x5B9C5C52, 0x5B9C5A51, 0x5A9C5A51, 0x5B9C5C51, 0x5A9C5B51, 0x5B9C5B51, -0x5C9C5B51, 0x5B9C5C51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5B51, 0x5C9C5B51, 0x5B9C5C51, -0x5C9C5B52, 0x5A9C5C52, 0x5D9C5B52, 0x5B9C5B51, 0x5C9B5B51, 0x5A9C5A51, 0x5B9C5C51, 0x5C9C5C51, -0x5B9C5B51, 0x5B9C5C51, 0x5B9C5B51, 0x5B9C5B51, 0x5A9C5B51, 0x5C9C5C52, 0x5B9C5B51, 0x5C9C5A51, -0x5B9C5B51, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B52, 0x5B9C5A51, 0x5B9C5A52, 0x5B9C5C51, -0x5A9C5B51, 0x5C9C5B51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5B52, 0x5C9C5C52, 0x5C9C5B51, 0x5B9C5B52, 0x5A9C5A51, 0x5B9C5A52, 0x5A9C5B51, -0x5C9C5C51, 0x5C9C5A51, 0x5B9C5B51, 0x5A9C5A51, 0x5C9C5C51, 0x5B9C5C51, 0x5B9C5A51, 0x5A9C5B51, -0x5B9C5952, 0x599C5A51, 0x5B9C5B51, 0x5A9C5A51, 0x5A9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5C9C5C51, -0x5C9C5C51, 0x5C9C5B51, 0x5C9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9B5C51, 0x5B9C5B52, -0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5A9C5B52, 0x5C9C5B52, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B51, -0x5C9C5A51, 0x5B9C5A51, 0x5B9C5C52, 0x5B9C5B51, 0x5B9C5B52, 0x5A9C5B52, 0x5B9C5D51, 0x5B9C5B52, -0x5A9C5A51, 0x5A9C5A51, 0x5A9C5B51, 0x5C9C5B52, 0x5A9C5B52, 0x5A9C5B52, 0x5B9C5A52, 0x5A9C5A51, -0x5B9C5C52, 0x5B9C5B51, 0x5A9C5A51, 0x5C9C5B52, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5C51, 0x5A9C5A51, -0x5B9C5B51, 0x5B9C5C52, 0x5C9C5A51, 0x5B9C5C52, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B51, -0x5B9C5B51, 0x5A9C5B51, 0x5B9C5C52, 0x5C9C5B51, 0x5B9C5A51, 0x5C9C5A51, 0x5C9C5B51, 0x5C9C5C51, -0x5A9C5A51, 0x5B9C5952, 0x5B9C5C51, 0x5C9C5B51, 0x5C9C5B51, 0x5B9C5C52, 0x5B9C5B51, 0x5A9C5A52, -0x5A9C5B51, 0x5B9C5B51, 0x5A9C5A51, 0x599C5B52, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B51, 0x5B9C5B51, -0x5A9C5B52, 0x5B9C5A51, 0x5A9C5A51, 0x5A9C5A52, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5C51, -0x5D9C5C51, 0x5B9C5A51, 0x5A9C5A52, 0x5B9C5C52, 0x5B9C5B51, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5B52, -0x5B9C5B51, 0x5B9C5B52, 0x5B9C5C51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C51, 0x5B9C5B52, 0x5C9C5B52, -0x5B9C5C52, 0x5C9C5B52, 0x5C9C5A51, 0x5B9C5C51, 0x5C9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5B51, -0x5C9B5C51, 0x5C9C5B51, 0x5B9C5B52, 0x5A9C5A52, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5A51, 0x5A9C5C51, -0x5B9C5B51, 0x5B9C5C51, 0x5C9C5C51, 0x5B9C5B51, 0x5C9C5B51, 0x5C9C5B51, 0x5B9C5B51, 0x5A9C5A51, -0x5B9C5B51, 0x5B9C5A51, 0x5B9C5B51, 0x5B9C5C51, 0x5A9C5A51, 0x5A9C5B51, 0x5C9C5B52, 0x5B9C5A52, -0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5C9B5C51, 0x5C9C5C52, 0x5B9C5C51, -0x5C9B5D51, 0x5D9C5D51, 0x5C9C5B51, 0x5A9C5A51, 0x5A9C5B51, 0x5C9C5C51, 0x5C9C5C51, 0x5B9C5C52, -0x5C9C5B51, 0x5A9C5A51, 0x5A9C5B51, 0x5C9C5B51, 0x5A9C5A52, 0x5B9B5C51, 0x5C9B5C51, 0x5C9C5C52, -0x5A9C5A51, 0x5C9C5B52, 0x5A9C5B52, 0x5B9C5B52, 0x5A9C5A51, 0x5A9C5B52, 0x5A9C5B51, 0x5B9C5B52, -0x5B9C5B52, 0x5B9C5A51, 0x5B9C5A52, 0x599C5A52, 0x5B9C5A52, 0x5B9C5C52, 0x5B9C5C52, 0x5B9C5B52, -0x599C5B52, 0x5A9C5952, 0x5A9C5B52, 0x599C5A51, 0x5A9C5952, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5A51, -0x5B9C5B52, 0x5A9C5A52, 0x5B9C5B52, 0x5B9C5B51, 0x5C9C5B51, 0x5B9B5C51, 0x5C9C5B52, 0x5A9C5A52, -0x5A9C5A52, 0x5A9C5A52, 0x5A9C5B51, 0x5C9B5C51, 0x5C9C5A52, 0x5C9C5B51, 0x5B9C5B52, 0x5B9C5A52, -0x5B9C5952, 0x5C9C5B52, 0x5C9B5B51, 0x5B9C5B52, 0x5A9C5A52, 0x5A9C5B52, 0x5A9C5B51, 0x5C9C5B52, -0x5A9C5A52, 0x5A9C5C52, 0x5B9C5A52, 0x5B9C5B52, 0x5B9C5C51, 0x5B9C5A52, 0x5A9C5A51, 0x5A9C5B51, -0x5A9C5A51, 0x5A9C5952, 0x5A9C5A52, 0x5A9C5952, 0x5B9C5B51, 0x5C9C5B52, 0x5C9B5C51, 0x5A9C5A51, -0x5C9C5C52, 0x5B9C5B52, 0x5C9C5C51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B51, 0x5D9C5C52, 0x5C9C5B51, -0x5A9C5B51, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B51, 0x5C9C5B51, 0x5B9C5C51, 0x5B9C5C51, 0x5C9C5C52, -0x5C9C5C52, 0x5C9C5B52, 0x5A9C5A52, 0x5A9C5B51, 0x5C9C5B52, 0x5B9C5B52, 0x5B9C5952, 0x599C5A51, -0x5A9C5A52, 0x5B9C5C52, 0x5C9C5B51, 0x5B9B5C51, 0x5C9C5B51, 0x5A9C5B51, 0x5C9C5C52, 0x5B9C5A52, -0x5B9C5B52, 0x5B9C5B52, 0x5C9C5B52, 0x5A9C5B51, 0x5A9C5B51, 0x5B9C5A51, 0x5A9C5B51, 0x5B9C5C52, -0x5B9C5B51, 0x5C9B5B51, 0x5B9C5B52, 0x5C9C5C52, 0x5B9C5B52, 0x5B9C5C52, 0x5C9C5B52, 0x5B9C5C51, -0x5A9C5951, 0x5B9C5C52, 0x5B9C5B52, 0x5A9C5C51, 0x5B9C5A51, 0x5A9C5B52, 0x5C9B5C51, 0x5B9C5B51, -0x5B9C5B52, 0x5B9C5B52, 0x5B9C5C52, 0x5C9C5B52, 0x5B9C5A51, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5A52, -0x5A9C5A51, 0x5A9C5B52, 0x5B9C5B52, 0x5B9C5C51, 0x5B9C5B51, 0x5B9C5A52, 0x5A9C5B52, 0x5C9C5A51, -0x5B9C5B52, 0x5A9C5A51, 0x5A9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5C52, 0x5C9C5B52, -0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5A51, 0x5A9C5A51, 0x5B9C5B52, 0x5A9C5A51, 0x5A9C5C51, -0x5C9C5B51, 0x5A9C5B51, 0x5B9C5B52, 0x5A9C5B51, 0x5C9C5C52, 0x5B9C5B52, 0x5A9C5A51, 0x5B9C5B52, -0x599C5952, 0x5A9C5B52, 0x5A9C5A51, 0x5A9C5B51, 0x5C9C5C52, 0x5C9C5C52, 0x5C9C5C52, 0x5C9C5C52, -0x5C9C5C51, 0x5C9C5C51, 0x5C9B5C51, 0x5C9C5C52, 0x5C9C5B51, 0x5B9C5B52, 0x5C9B5C51, 0x5C9C5B52, -0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5952, 0x5B9C5952, 0x5B9C5B52, -0x5B9C5B52, 0x5B9C5A51, 0x5A9C5B51, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5B52, 0x5A9C5C51, 0x5A9C5A51, -0x5A9C5A51, 0x5B9C5A52, 0x5A9C5A52, 0x5C9C5B52, 0x599C5A51, 0x5A9C5952, 0x5B9C5A52, 0x5A9C5A51, -0x5A9C5B51, 0x5B9C5B51, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5C52, 0x5B9C5B51, 0x5B9C5C51, 0x599C5A52, -0x5A9C5B51, 0x5A9C5C51, 0x5B9C5B51, 0x5A9C5B52, 0x5B9C5B52, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B52, -0x5A9C5B52, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5A52, 0x5B9C5A52, 0x5C9B5B51, 0x5C9B5C51, -0x5A9C5A51, 0x5B9C5952, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x599C5A51, -0x5A9C5B51, 0x5B9C5B52, 0x5A9C5952, 0x599C5B52, 0x5B9C5B51, 0x5B9C5C52, 0x5B9C5B52, 0x5A9C5B52, -0x5A9C5A52, 0x5A9C5B51, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5A51, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A51, -0x5B9C5C52, 0x5C9C5C51, 0x5B9C5A51, 0x599C5952, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5B52, -0x5B9C5B52, 0x5B9C5B52, 0x5A9C5B52, 0x5B9C5B52, 0x5C9C5B52, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5A52, -0x5C9C5C52, 0x5A9C5C52, 0x5A9C5B52, 0x5B9C5B52, 0x5B9C5A52, 0x5B9B5A52, 0x5B9C5A52, 0x5B9B5C51, -0x5C9B5C51, 0x5B9C5B52, 0x5A9C5952, 0x5A9C5A52, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5B52, 0x5B9C5A52, -0x5A9C5B51, 0x5A9C5B51, 0x5C9C5B51, 0x5B9C5A51, 0x5B9C5C52, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5952, -0x5A9C5B51, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5C52, 0x5B9C5A51, 0x5A9C5A51, 0x5B9C5B52, 0x5B9C5A52, -0x5A9C5A51, 0x5B9C5B52, 0x5B9C5B51, 0x5B9C5B52, 0x5C9C5C51, 0x5C9B5C51, 0x5D9B5D51, 0x5C9C5C51, -0x5C9C5C51, 0x5C9B5B51, 0x5A9C5A51, 0x5A9C5A51, 0x5B9C5B51, 0x5B9C5C51, 0x5C9C5B52, 0x5B9C5B51, -0x5B9C5A51, 0x5A9C5B52, 0x5B9C5B51, 0x5B9C5952, 0x599C5B52, 0x5C9C5C52, 0x5B9C5B52, 0x5B9C5B51, -0x5A9C5B52, 0x5A9C5A52, 0x5B9C5A52, 0x5A9C5952, 0x5A9C5A52, 0x5A9C5A51, 0x5A9C5A51, 0x5B9C5A51, -0x5A9B5A51, 0x5A9C5A52, 0x5B9C5A52, 0x5A9C5A52, 0x5B9C5A51, 0x5B9C5C52, 0x5B9C5B52, 0x5A9B5B52, -0x5A9C5B52, 0x5A9C5952, 0x5A9C5A52, 0x599C5A51, 0x599C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9B5A52, -0x5A9C5B52, 0x5B9C5B52, 0x5A9C5B52, 0x5B9C5B52, 0x5B9C5C52, 0x5B9C5B52, 0x5C9C5B52, 0x5A9C5951, -0x5A9C5A52, 0x599C5A51, 0x5A9C5B52, 0x5B9C5C51, 0x5C9C5A52, 0x5A9C5C52, 0x5B9C5B52, 0x5B9C5A52, -0x5A9C5A52, 0x5B9C5B52, 0x5C9C5B52, 0x5A9C5B52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A51, 0x5B9C5B52, -0x599C5A52, 0x599C5A52, 0x5A9C5B51, 0x5B9C5B52, 0x5B9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A51, -0x5A9C5952, 0x599C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5B9C5B52, 0x5B9C5C52, 0x5B9C5A52, -0x5B9C5C52, 0x5A9C5B52, 0x5C9C5C52, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5A52, 0x5C9C5C52, 0x5C9C5C52, -0x5A9C5A51, 0x5A9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5C9C5C52, 0x5C9C5C52, -0x5B9B5A52, 0x5A9C5A52, 0x5A9C5B52, 0x5C9C5C52, 0x5B9C5B52, 0x5B9C5A52, 0x599C5952, 0x5A9C5952, -0x5A9C5B52, 0x5B9B5A52, 0x5B9C5B52, 0x5C9B5C51, 0x5B9C5A52, 0x5A9C5C52, 0x5B9C5B52, 0x5A9C5A52, -0x5A9C5952, 0x599C5B52, 0x5B9C5B52, 0x5A9C5A51, 0x5B9C5B52, 0x5A9C5A51, 0x5A9C5B52, 0x5C9C5B52, -0x5B9C5C52, 0x5B9C5B52, 0x5B9C5C52, 0x5B9C5A52, 0x5A9C5A52, 0x5B9C5C52, 0x5A9C5B51, 0x5B9C5B52, -0x599C5952, 0x5B9B5B52, 0x5A9C5A52, 0x5B9C5C51, 0x5A9C5A52, 0x5B9C5B51, 0x5B9C5B52, 0x5B9C5C51, -0x5C9C5B52, 0x5B9C5B52, 0x5A9C5B52, 0x5C9B5B51, 0x5A9B5A52, 0x5A9C5B52, 0x5B9C5B52, 0x5A9B5A52, -0x5A9C5A51, 0x5A9C5A52, 0x5B9C5A51, 0x5B9C5B51, 0x5A9B5B52, 0x599C5A52, 0x5B9C5C52, 0x5A9C5B52, -0x5B9C5A52, 0x5A9C5A51, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5B51, -0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5952, 0x5A9C5B52, 0x5C9C5B51, -0x5B9C5A51, 0x5B9C5B52, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A52, 0x5B9C5A51, 0x5A9C5951, -0x599C5A52, 0x5A9B5A51, 0x5B9C5B51, 0x5C9C5B52, 0x5B9C5B52, 0x5A9C5952, 0x599C5952, 0x5A9C5A52, -0x5A9B5A52, 0x5B9C5B52, 0x5C9B5C51, 0x5C9B5C51, 0x5C9C5C52, 0x5C9C5B52, 0x5B9C5B52, 0x5C9B5B52, -0x5A9B5A52, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5A52, 0x5A9C5B52, 0x5B9B5A51, 0x5A9C5952, 0x5A9B5A52, -0x5A9B5B52, 0x5A9C5A51, 0x5A9C5B52, 0x5B9C5A51, 0x5A9C5B51, 0x5A9C5A52, 0x5A9C5C52, 0x5A9C5A52, -0x5A9B5A51, 0x5B9C5A51, 0x5A9C5A52, 0x5B9C5B52, 0x5A9C5952, 0x5A9C5952, 0x5A9B5A52, 0x599B5A51, -0x5A9B5A52, 0x5B9C5B52, 0x5B9C5952, 0x5B9C5B52, 0x5B9C5C52, 0x5B9C5A52, 0x5B9B5C51, 0x5A9C5952, -0x5A9C5A51, 0x5A9B5B51, 0x5B9C5B52, 0x5A9C5B52, 0x5A9B5B51, 0x5A9C5A51, 0x5A9B5A52, 0x5B9C5B52, -0x5A9C5B52, 0x5A9C5A51, 0x5A9B5A52, 0x5B9C5B52, 0x5B9C5A52, 0x5B9C5A52, 0x5B9C5B52, 0x5C9C5C52, -0x5A9C5A52, 0x5A9C5952, 0x5B9C5B51, 0x5A9B5B52, 0x5B9C5A52, 0x5B9B5A52, 0x5B9C5B52, 0x599C5A52, -0x5B9C5B52, 0x5B9C5952, 0x599C5952, 0x5A9C5B51, 0x5B9C5B51, 0x5C9C5B52, 0x5B9C5B52, 0x5A9B5A52, -0x5B9C5A51, 0x5A9B5A52, 0x5B9C5B52, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9C5A52, 0x599C5952, -0x5A9C5A51, 0x5B9C5C52, 0x5C9B5C51, 0x5B9C5A52, 0x599C5952, 0x5A9C5B52, 0x5B9C5B52, 0x5A9C5A51, -0x5A9C5A52, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5B9C5C52, -0x5A9B5952, 0x5B9B5A52, 0x5B9C5B52, 0x5A9B5B52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A51, 0x5C9B5C51, -0x5B9C5B51, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x599C5A52, 0x5B9C5A52, -0x599C5A52, 0x5B9C5A51, 0x5B9C5C52, 0x5B9C5B52, 0x5A9C5B52, 0x5B9C5C51, 0x5B9C5A51, 0x5B9C5A52, -0x5A9C5B52, 0x5B9C5B51, 0x5A9C5B51, 0x5A9C5B52, 0x5B9C5A51, 0x5A9C5B52, 0x5A9C5B51, 0x5A9C5B52, -0x599B5A52, 0x5A9B5B51, 0x5B9C5A51, 0x5B9C5B52, 0x5B9C5B52, 0x5C9C5C52, 0x5C9C5C52, 0x5C9C5C52, -0x5C9C5B52, 0x5A9C5A52, 0x599C5A52, 0x5A9C5B51, 0x5B9C5B51, 0x5C9C5B52, 0x5A9B5B52, 0x5B9C5B52, -0x5A9C5B52, 0x5B9C5B52, 0x5A9C5A52, 0x599C5A52, 0x5B9C5C52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9C5A52, -0x5A9C5A52, 0x5B9C5A52, 0x599C5952, 0x5A9B5A52, 0x5B9C5B52, 0x5B9B5A52, 0x5A9B5A52, 0x5A9B5A52, -0x599C5A52, 0x5A9C5A52, 0x5A9B5A52, 0x599C5952, 0x5A9B5A51, 0x5A9C5B52, 0x5A9B5B52, 0x5A9B5A52, -0x5A9C5A52, 0x599C5952, 0x5A9C5A52, 0x599C5952, 0x599C5B52, 0x5A9C5952, 0x599C5952, 0x599C5952, -0x5A9C5A52, 0x5A9C5A52, 0x5B9C5A52, 0x5A9C5A52, 0x5B9C5B52, 0x5C9C5B52, 0x5A9C5B52, 0x5B9C5A52, -0x599C5952, 0x5A9C5952, 0x5A9C5A52, 0x5B9C5B52, 0x5B9C5B52, 0x599C5B52, 0x5A9B5A51, 0x5A9B5A52, -0x599C5A52, 0x5A9C5B52, 0x5B9C5B52, 0x599B5A52, 0x5A9B5A52, 0x599C5952, 0x5A9C5A52, 0x5A9C5B52, -0x5A9C5952, 0x599C5952, 0x599C5952, 0x599C5952, 0x599C5952, 0x599C5952, 0x5A9C5A52, 0x599C5952, -0x589C5952, 0x599C5952, 0x5A9C5A52, 0x5A9C5952, 0x599C5952, 0x599C5A52, 0x5A9C5B52, 0x5B9C5A52, -0x5A9B5B52, 0x5A9B5A52, 0x5B9B5B52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5B52, 0x5B9B5A52, -0x5B9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, -0x599C5952, 0x599C5A52, 0x5B9C5B52, 0x5B9B5A52, 0x5A9B5A52, 0x599C5852, 0x599C5A52, 0x599C5952, -0x5A9C5A52, 0x5A9C5A52, 0x5A9B5B51, 0x5B9B5A52, 0x599C5A52, 0x5A9B5B52, 0x5A9C5A52, 0x5A9C5A52, -0x599C5952, 0x5B9C5B52, 0x5B9B5A52, 0x5A9B5A52, 0x5B9C5A52, 0x5B9C5A52, 0x5A9B5B52, 0x5B9B5A51, -0x5B9B5B52, 0x5A9C5B52, 0x5B9C5B52, 0x599C5A52, 0x599B5A52, 0x5C9C5A52, 0x5B9C5A52, 0x5B9C5952, -0x599B5A52, 0x5A9B5A52, 0x5A9B5A51, 0x5C9B5A52, 0x5A9B5A51, 0x5B9C5B52, 0x5B9C5B52, 0x5B9B5B52, -0x5A9B5B51, 0x5A9B5A52, 0x5A9C5952, 0x5B9C5B52, 0x5A9C5A52, 0x5A9C5B52, 0x5A9B5A52, 0x599C5A52, -0x5A9C5952, 0x5A9C5A52, 0x5A9B5A51, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5A52, -0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x599C5952, 0x599C5A52, 0x5A9B5B52, 0x5B9C5A52, -0x5A9B5B51, 0x5B9C5B52, 0x5B9B5A52, 0x5A9B5A52, 0x599C5952, 0x5A9C5A52, 0x5A9B5B52, 0x5B9C5B52, -0x5A9B5A51, 0x5A9C5B52, 0x5A9B5A51, 0x5B9C5B52, 0x5A9C5A52, 0x5A9C5B52, 0x5B9C5A52, 0x599C5952, -0x5A9C5A52, 0x5A9B5A52, 0x5B9C5B52, 0x5A9C5A52, 0x599C5952, 0x599C5952, 0x599C5952, 0x599C5952, -0x599C5952, 0x599C5952, 0x5A9C5A52, 0x5A9B5B52, 0x5C9C5C52, 0x5B9B5B52, 0x5B9C5A52, 0x5A9B5B52, -0x5B9B5A52, 0x5A9C5A52, 0x5B9B5A51, 0x5A9B5A52, 0x599C5952, 0x5A9B5A51, 0x599C5A52, 0x599B5A52, -0x5A9B5A52, 0x5A9C5A52, 0x599C5952, 0x5A9B5A52, 0x5A9B5A52, 0x599C5A52, 0x5A9C5C52, 0x599C5A52, -0x5B9C5B52, 0x5B9C5B52, 0x5A9C5952, 0x5A9B5A52, 0x5A9C5952, 0x5A9C5952, 0x599B5952, 0x599C5A52, -0x5A9C5A52, 0x5A9C5B52, 0x5B9C5952, 0x5A9C5B52, 0x5A9B5C52, 0x5B9B5A52, 0x5A9B5C52, 0x5A9C5952, -0x5A9C5A52, 0x5A9B5A52, 0x5B9B5A52, 0x599B5A52, 0x5A9B5A52, 0x5A9B5A51, 0x5A9B5952, 0x5A9B5A52, -0x599B5A52, 0x5A9B5A52, 0x599C5A52, 0x5B9B5A52, 0x5B9C5952, 0x5A9C5A52, 0x5A9B5B52, 0x5B9B5B52, -0x5B9C5A52, 0x5A9C5952, 0x599B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5B9C5A52, 0x599C5A52, -0x5A9C5A52, 0x5A9B5951, 0x599C5952, 0x5B9C5B52, 0x5A9B5B52, 0x5B9C5B52, 0x5A9B5A52, 0x5A9B5A52, -0x599C5A52, 0x5B9C5B52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5B9C5B52, 0x5B9B5A52, -0x5A9C5952, 0x5A9C5A52, 0x5A9B5B52, 0x5C9B5C51, 0x5B9C5A52, 0x599C5952, 0x5A9B5B52, 0x5B9C5B52, -0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x599C5952, 0x5A9B5A52, 0x5B9B5A52, -0x599B5B52, 0x5A9B5A52, 0x5B9B5A52, 0x5A9B5A52, 0x5A9C5952, 0x5A9C5952, 0x5A9B5A52, 0x5C9B5B51, -0x5B9B5952, 0x5A9B5A52, 0x5A9C5A52, 0x599C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x599C5952, 0x5A9C5A52, -0x599C5852, 0x5B9C5952, 0x5A9B5B52, 0x5B9B5A52, 0x5A9C5952, 0x5B9C5B52, 0x5B9C5A52, 0x5B9C5A52, -0x599B5A51, 0x5B9C5B52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5B52, 0x5A9C5A52, 0x599C5B52, 0x5A9B5A52, -0x5A9C5952, 0x5A9C5A52, 0x5B9C5A51, 0x5A9C5B51, 0x5B9B5A52, 0x5B9C5B52, 0x5B9C5B52, 0x5A9B5A52, -0x5A9C5952, 0x599C5952, 0x5A9B5A52, 0x5A9B5A52, 0x5B9B5B52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, -0x5A9B5A52, 0x5A9B5951, 0x5A9C5952, 0x5A9C5B52, 0x5B9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5B52, -0x5A9B5A52, 0x599B5952, 0x599B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5A52, -0x599C5952, 0x599C5952, 0x599C5A52, 0x599C5952, 0x599C5952, 0x599C5A52, 0x5A9B5A52, 0x5A9C5A52, -0x599C5952, 0x599B5952, 0x5A9C5952, 0x599C5952, 0x599B5A52, 0x599C5952, 0x599B5952, 0x599C5952, -0x599C5A52, 0x5A9B5952, 0x5A9C5A52, 0x5A9C5952, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5952, 0x5A9B5A51, -0x589B5952, 0x599C5952, 0x5A9C5952, 0x5A9B5A52, 0x5A9B5B52, 0x5A9B5A52, 0x5A9B5A51, 0x5A9C5A52, -0x599B5A52, 0x599C5A52, 0x5A9B5A52, 0x599B5952, 0x5A9B5A52, 0x599C5952, 0x599B5952, 0x5A9C5A52, -0x5A9C5A52, 0x599C5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x599C5952, 0x599B5852, 0x589B5952, -0x599B5952, 0x599C5A52, 0x5A9C5A52, 0x5A9C5952, 0x599C5952, 0x599C5952, 0x599C5A52, 0x5A9B5A52, -0x599C5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5952, 0x599B5952, 0x5A9C5A52, 0x5A9B5B52, -0x5A9C5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5952, 0x599C5952, 0x599C5952, 0x5A9C5952, 0x599C5952, -0x599C5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9C5852, 0x599B5952, 0x599C5952, 0x599B5952, -0x599B5952, 0x5A9C5A52, 0x5A9B5A52, 0x599B5952, 0x599C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x599B5952, -0x599B5A52, 0x5A9C5A52, 0x5A9C5952, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5952, 0x5A9B5A52, 0x5A9B5B52, -0x5A9B5A52, 0x5A9B5A52, 0x5B9B5952, 0x599C5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x599C5952, -0x599B5B52, 0x5A9C5952, 0x5A9B5A52, 0x5B9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5952, -0x599C5B52, 0x5A9B5A51, 0x599B5952, 0x5A9B5A52, 0x5A9C5952, 0x5A9B5A52, 0x5A9C5A52, 0x599C5952, -0x599C5952, 0x5A9B5A52, 0x599C5A52, 0x599B5A52, 0x5A9C5952, 0x599C5A52, 0x599B5A52, 0x599C5A52, -0x599C5A52, 0x5A9B5A51, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5952, 0x599C5952, 0x599C5952, 0x5A9B5A52, -0x5A9B5A52, 0x599C5952, 0x599C5952, 0x599C5952, 0x599B5A52, 0x5A9B5A52, 0x5B9B5A52, 0x5A9B5A51, -0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A51, 0x5A9C5952, 0x599C5A52, -0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x599C5952, 0x599B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5952, -0x599C5952, 0x599C5952, 0x599B5952, 0x599C5952, 0x5A9B5B52, 0x5B9B5A52, 0x5B9B5B52, 0x5A9B5A52, -0x5B9C5B52, 0x5A9B5952, 0x5A9C5A52, 0x5A9C5A52, 0x599C5952, 0x5A9C5A52, 0x599B5952, 0x599B5A52, -0x5A9C5A52, 0x5A9C5952, 0x599B5952, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5B52, 0x599C5952, -0x5A9B5A52, 0x5A9B5A52, 0x5B9C5952, 0x599C5A52, 0x5A9C5952, 0x599C5952, 0x589B5A52, 0x599C5952, -0x599C5952, 0x599C5A52, 0x5A9B5A52, 0x599B5A52, 0x5A9C5B52, 0x5B9C5A52, 0x5A9C5B52, 0x5A9C5952, -0x599C5952, 0x5A9C5A52, 0x5A9B5A52, 0x599C5A52, 0x599B5A52, 0x5A9C5A52, 0x5A9C5952, 0x599B5A52, -0x599C5A52, 0x5A9B5952, 0x599C5952, 0x5A9B5A52, 0x5A9B5A52, 0x599C5A52, 0x5A9C5B52, 0x5A9B5A52, -0x5B9C5952, 0x5A9C5952, 0x599C5952, 0x5A9C5A52, 0x5A9B5952, 0x5A9C5A52, 0x5A9C5952, 0x599B5A52, -0x599C5A52, 0x5A9C5952, 0x599C5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9C5952, -0x5A9B5A52, 0x5A9C5952, 0x599C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5A52, -0x5B9B5A52, 0x5A9C5952, 0x599C5952, 0x5A9B5B52, 0x5C9C5B52, 0x5A9C5952, 0x599C5952, 0x5A9B5A52, -0x5A9B5A52, 0x5A9B5A52, 0x599C5952, 0x599B5952, 0x599B5952, 0x599C5A52, 0x5B9B5A52, 0x599B5952, -0x5A9B5952, 0x5A9B5B52, 0x5A9B5A52, 0x5A9C5A52, 0x599C5952, 0x599C5A52, 0x5A9B5B52, 0x5B9C5A52, -0x5A9B5A52, 0x599C5952, 0x599B5952, 0x5A9C5952, 0x599C5952, 0x599C5A52, 0x599B5952, 0x599B5A52, -0x599C5952, 0x599C5A52, 0x599B5A52, 0x5A9B5A52, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x5A9C5A52, -0x599C5952, 0x5A9B5B52, 0x5A9C5952, 0x5A9C5952, 0x599B5A52, 0x5A9C5952, 0x599C5A52, 0x5A9B5A52, -0x5A9C5952, 0x599C5A52, 0x5A9C5B52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5A51, 0x5A9C5A52, 0x5A9C5952, -0x599C5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5B52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x599C5A52, -0x5A9C5A52, 0x599C5952, 0x599B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5952, 0x5A9C5A52, 0x5A9B5B52, -0x599B5952, 0x599C5A52, 0x5A9B5A52, 0x599C5952, 0x599C5952, 0x599C5952, 0x599B5952, 0x5A9B5A52, -0x5A9C5A52, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x599C5952, 0x599C5A52, 0x5A9B5A52, -0x599B5952, 0x599B5852, 0x599C5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599C5952, -0x599B5952, 0x599C5A52, 0x599B5952, 0x5A9C5952, 0x599B5952, 0x599B5A52, 0x5A9B5A52, 0x5A9B5A52, -0x599C5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x5A9B5952, 0x599B5952, -0x599C5952, 0x599B5952, 0x599C5A52, 0x5A9B5952, 0x599B5A52, 0x599C5952, 0x599B5952, 0x599C5952, -0x599C5952, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5853, 0x589B5853, 0x599B5952, -0x599B5952, 0x599B5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x599B5A52, -0x599B5952, 0x5A9B5A52, 0x599C5952, 0x5A9B5A52, 0x5A9C5A52, 0x599C5952, 0x599C5952, 0x599B5952, -0x5A9B5A52, 0x599C5952, 0x599B5952, 0x5A9C5A52, 0x5A9B5952, 0x599C5952, 0x599B5952, 0x599C5952, -0x5A9B5A52, 0x5A9B5A52, 0x599B5952, 0x5A9C5952, 0x589B5952, 0x599C5952, 0x599C5952, 0x599B5952, -0x599B5952, 0x599B5A52, 0x5A9B5952, 0x599B5952, 0x5A9B5A52, 0x599C5952, 0x599B5952, 0x599B5952, -0x5A9C5A52, 0x5A9C5952, 0x599C5952, 0x5A9C5952, 0x5A9C5A52, 0x599C5A52, 0x5A9C5952, 0x5A9B5A52, -0x599B5A52, 0x599B5B52, 0x5A9B5952, 0x599C5952, 0x599B5A52, 0x599C5A52, 0x599B5952, 0x599C5952, -0x599B5A52, 0x599C5952, 0x5A9B5A52, 0x5A9C5A52, 0x599B5A52, 0x599B5952, 0x5A9B5952, 0x599B5A52, -0x599B5A52, 0x5A9B5A52, 0x599B5952, 0x599B5A52, 0x599C5952, 0x5A9B5A52, 0x599C5952, 0x599B5952, -0x589B5952, 0x599C5952, 0x599C5952, 0x599B5A52, 0x589B5952, 0x599C5952, 0x599B5952, 0x599C5952, -0x5A9C5A52, 0x599C5952, 0x599B5952, 0x599B5952, 0x599C5A52, 0x5A9C5952, 0x599B5952, 0x599B5952, -0x599B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x599C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x599B5952, -0x599B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x599B5952, 0x599C5A52, 0x5A9B5952, 0x589B5952, 0x5A9C5952, -0x599C5A52, 0x599B5952, 0x599C5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x599B5A52, 0x5A9B5952, -0x599C5952, 0x599C5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x5A9B5A52, 0x5A9B5B52, 0x5B9B5A52, -0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x599B5A52, 0x599B5A52, 0x599B5952, -0x5A9C5A52, 0x5A9B5A52, 0x5A9C5A52, 0x599B5852, 0x599B5952, 0x589B5952, 0x599B5A52, 0x599B5952, -0x599C5952, 0x599C5952, 0x5A9B5952, 0x599C5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5A52, 0x5A9B5952, -0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5A52, 0x599B5952, 0x5A9C5952, 0x599C5952, 0x599B5A52, -0x599B5952, 0x5A9B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x599B5A52, 0x5A9B5A52, -0x5A9B5A52, 0x599C5952, 0x599B5952, 0x599B5A52, 0x599B5952, 0x599B5A52, 0x599C5952, 0x589B5952, -0x599C5952, 0x599C5952, 0x599C5952, 0x599C5A52, 0x5A9B5952, 0x5A9C5952, 0x5A9B5952, 0x599C5952, -0x5A9B5952, 0x599B5952, 0x5A9B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5952, 0x599B5952, 0x5A9C5A52, -0x5A9C5A52, 0x5A9B5A52, 0x599C5952, 0x599B5952, 0x599B5B52, 0x5B9B5A52, 0x5A9C5952, 0x599B5952, -0x599B5A52, 0x5A9B5A52, 0x5A9C5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x599B5952, 0x599B5A52, -0x599B5952, 0x5A9B5A52, 0x599C5A52, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5B52, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, 0x5A9B5952, 0x599B5952, 0x589B5A52, -0x599C5952, 0x599C5A52, 0x599B5952, 0x5A9C5952, 0x5A9B5952, 0x599C5A52, 0x5A9B5952, 0x599B5952, -0x599B5952, 0x5A9B5A52, 0x5A9C5952, 0x599C5952, 0x599C5952, 0x599C5A52, 0x599B5952, 0x5A9B5A52, -0x599C5952, 0x599B5952, 0x599B5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9C5A52, 0x5A9B5952, -0x599C5952, 0x599B5A52, 0x5A9B5A52, 0x5A9B5952, 0x5A9B5952, 0x599B5952, 0x599C5952, 0x5A9C5A52, -0x599B5952, 0x599C5952, 0x5A9B5A52, 0x599B5952, 0x599C5952, 0x599C5A52, 0x5A9B5A52, 0x5A9B5B52, -0x599B5A52, 0x5A9B5952, 0x599B5852, 0x589B5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5952, -0x5A9B5A52, 0x599B5852, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x5A9B5952, -0x599B5852, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, 0x599B5952, 0x599B5A52, -0x5A9B5952, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, -0x599C5852, 0x589B5952, 0x589B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x599B5852, -0x599B5852, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5A52, 0x5A9B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599C5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5A52, -0x5A9B5952, 0x599B5952, 0x599B5952, 0x589B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x599B5852, 0x599B5952, -0x599C5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x599B5952, 0x5A9B5952, -0x599B5952, 0x599B5A52, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5A52, 0x599B5952, 0x599B5A52, 0x599B5952, 0x599B5A52, 0x599B5952, 0x599B5952, 0x5A9B5A52, -0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x5A9B5952, 0x599B5852, 0x599B5952, -0x599B5A52, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x589B5952, 0x599B5952, 0x589B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x599B5952, -0x5A9B5952, 0x599C5952, 0x5A9B5952, 0x599B5952, 0x599C5A52, 0x599B5952, 0x589B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599C5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5A52, -0x599B5952, 0x599B5953, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, 0x599B5852, 0x599B5852, -0x599B5952, 0x5A9B5952, 0x589B5853, 0x599B5952, 0x599C5952, 0x599B5A52, 0x599B5A52, 0x599B5952, -0x5A9B5A52, 0x599B5952, 0x599B5952, 0x5A9B5852, 0x599B5A52, 0x589B5853, 0x599B5952, 0x599B5853, -0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5A52, 0x5A9B5952, 0x5A9B5952, 0x599B5952, 0x5A9B5952, -0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x5A9B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x5A9B5952, 0x5A9B5A52, -0x5A9B5A52, 0x5A9C5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x589B5952, -0x599B5952, 0x599B5952, 0x589B5952, 0x599C5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x589B5853, 0x599B5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5A52, 0x599B5952, -0x599B5A52, 0x5A9B5952, 0x5A9B5A52, 0x599B5952, 0x589B5952, 0x599B5B52, 0x5A9B5A52, 0x599B5952, -0x589B5852, 0x589B5952, 0x599B5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5852, 0x599B5952, 0x599B5952, -0x599B5A52, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x599B5A52, 0x5B9B5A52, 0x599B5952, -0x5A9B5952, 0x589B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x5A9B5852, 0x599B5952, 0x589B5952, -0x599B5952, 0x599C5952, 0x589C5952, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x599B5952, -0x599B5852, 0x599C5A52, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599C5952, 0x589B5952, 0x599B5A52, -0x599B5952, 0x599B5852, 0x599B5952, 0x599C5952, 0x5A9B5A52, 0x599B5A52, 0x5A9B5952, 0x599C5952, -0x599B5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5852, -0x599B5952, 0x599C5A52, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x5A9B5952, 0x599B5852, -0x599B5952, 0x589B5853, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5952, -0x599B5952, 0x5A9B5952, 0x589B5952, 0x589B5952, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x589B5753, 0x599B5852, 0x589B5853, 0x599B5752, 0x589B5952, 0x589B5952, 0x599B5952, -0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x589B5853, 0x589B5952, 0x589B5853, 0x599B5A52, 0x599B5952, 0x589B5952, 0x599B5952, -0x589B5853, 0x589B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x5A9B5A52, 0x599B5852, 0x589B5852, -0x589B5952, 0x599B5952, 0x599B5852, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5952, 0x599B5852, -0x599B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, -0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x599B5952, 0x589B5753, 0x589B5952, 0x599B5852, 0x589B5853, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, -0x599B5952, 0x599B5952, 0x599B5852, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5852, 0x599B5952, -0x599B5952, 0x599B5952, 0x599C5952, 0x599B5952, 0x599B5A52, 0x599B5852, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x5A9B5952, 0x599B5852, 0x589B5853, -0x599B5952, 0x589B5952, 0x599B5952, 0x599B5852, 0x589B5952, 0x599B5852, 0x599B5952, 0x599B5852, -0x599B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x599B5A52, -0x599B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, -0x599B5952, 0x589B5952, 0x599B5952, 0x589B5853, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x589B5853, 0x589B5852, 0x589B5952, 0x599B5A52, -0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x589B5952, 0x599B5952, 0x599B5752, -0x599B5952, 0x5A9B5952, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x589B5952, 0x599B5852, 0x599B5952, 0x5A9B5852, -0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5952, 0x5A9B5952, 0x599B5952, 0x599B5952, -0x589B5852, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5852, 0x599B5952, 0x589B5853, 0x599B5952, 0x599B5A52, 0x599B5852, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5A52, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5852, 0x599B5852, 0x579B5952, -0x599B5952, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, -0x589B5952, 0x599B5A52, 0x5A9B5952, 0x5A9B5A52, 0x5A9B5A52, 0x5A9B5952, 0x599B5952, 0x599B5A52, -0x599B5952, 0x599B5A52, 0x599B5952, 0x5A9B5952, 0x599B5952, 0x599B5952, 0x599B5A52, 0x5A9B5952, -0x599B5852, 0x589B5853, 0x589B5752, 0x579B5753, 0x579B5853, 0x599B5952, 0x599B5952, 0x589B5952, -0x599B5952, 0x589B5952, 0x589B5952, 0x589B5853, 0x599B5952, 0x599B5952, 0x5B9B5952, 0x599B5952, -0x599B5852, 0x589B5853, 0x599B5852, 0x5A9B5A52, 0x599B5952, 0x589B5852, 0x599B5852, 0x589B5952, -0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x589B5952, -0x589B5753, 0x599B5952, 0x5A9B5952, 0x589B5952, 0x589B5952, 0x599B5952, 0x599B5852, 0x579B5952, -0x599B5952, 0x599B5852, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x599B5A52, -0x599B5952, 0x599B5952, 0x599B5852, 0x589B5852, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x5A9B5A52, 0x599B5853, 0x589B5952, 0x599B5952, -0x579B5753, 0x589B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x589B5853, 0x599B5952, 0x599B5852, 0x589B5853, 0x599B5852, 0x589B5853, 0x589B5952, 0x599B5952, -0x599B5852, 0x579B5753, 0x589B5852, 0x589B5853, 0x589B5753, 0x589B5853, 0x589B5952, 0x589B5952, -0x589B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5852, -0x599B5952, 0x579B5853, 0x589B5852, 0x589B5853, 0x589B5952, 0x599B5952, 0x589B5853, 0x599B5952, -0x579B5853, 0x589B5852, 0x599B5852, 0x589B5952, 0x599B5852, 0x589B5952, 0x5A9B5952, 0x589B5753, -0x579B5852, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x579B5853, -0x589B5753, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5852, 0x589B5853, 0x599B5952, 0x599B5852, -0x589B5852, 0x589B5853, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5852, -0x589B5853, 0x579B5753, 0x589B5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5952, 0x589B5853, -0x599B5852, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x579B5952, 0x599B5952, -0x589B5952, 0x599B5952, 0x589B5852, 0x599B5952, 0x589B5952, 0x599B5852, 0x599B5952, 0x599B5852, -0x599B5852, 0x599B5952, 0x589B5853, 0x589B5853, 0x599B5952, 0x599B5852, 0x589B5853, 0x599B5952, -0x599B5952, 0x599B5852, 0x599B5952, 0x599B5852, 0x599B5952, 0x5A9B5852, 0x589B5952, 0x589B5852, -0x599B5952, 0x599B5952, 0x589B5952, 0x599B5852, 0x599B5952, 0x589B5853, 0x589B5853, 0x589B5852, -0x599B5852, 0x589B5853, 0x599B5952, 0x589B5852, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, -0x599B5852, 0x589B5853, 0x589B5952, 0x599B5952, 0x589B5853, 0x589B5853, 0x599B5952, 0x589B5853, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x589B5853, 0x599B5952, 0x599B5852, 0x589B5853, 0x589B5952, 0x599B5952, -0x589B5853, 0x599B5952, 0x589B5853, 0x589B5952, 0x599B5953, 0x599B5952, 0x599B5952, 0x5A9B5A52, -0x599B5952, 0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x589B5753, 0x579B5852, 0x599B5952, -0x599B5953, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5853, 0x599B5852, 0x589B5853, -0x589B5952, 0x599B5852, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x599B5852, 0x589B5852, 0x589B5952, -0x589B5853, 0x589B5952, 0x589B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, -0x589B5852, 0x599B5852, 0x599B5852, 0x599B5852, 0x599B5852, 0x599B5952, 0x589B5952, 0x589B5853, -0x599B5852, 0x589B5952, 0x599B5852, 0x589B5952, 0x599B5952, 0x599B5852, 0x589B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5952, 0x599B5852, 0x579B5853, -0x589B5952, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5852, -0x579B5853, 0x599B5952, 0x599B5A52, 0x5A9B5A52, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5952, 0x599B5A52, -0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, -0x599B5852, 0x599B5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5853, 0x599B5952, -0x589B5853, 0x589B5753, 0x589B5853, 0x589B5853, 0x589B5852, 0x589B5952, 0x589B5853, 0x589B5952, -0x599B5852, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5852, 0x589B5852, 0x599B5952, 0x579B5952, -0x589B5753, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5952, 0x589B5952, 0x599B5852, 0x589B5852, -0x599B5952, 0x599B5952, 0x589B5852, 0x589B5852, 0x589B5952, 0x599B5952, 0x589B5853, 0x599B5852, -0x589B5853, 0x589B5753, 0x579B5753, 0x599B5952, 0x599B5952, 0x599B5852, 0x579B5853, 0x599B5952, -0x599B5952, 0x599B5952, 0x589B5853, 0x599B5A52, 0x599B5852, 0x579B5853, 0x599B5952, 0x599B5952, -0x579B5853, 0x589B5753, 0x579A5853, 0x589A5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x599B5952, -0x599B5852, 0x589B5952, 0x599B5852, 0x579B5753, 0x599B5852, 0x589B5853, 0x589B5952, 0x599B5952, -0x599B5852, 0x579B5753, 0x589B5852, 0x589B5852, 0x589B5753, 0x589B5853, 0x589B5853, 0x579B5753, -0x579B5853, 0x589B5952, 0x589B5952, 0x589B5952, 0x589B5853, 0x579B5853, 0x589B5853, 0x599B5852, -0x599B5952, 0x579A5853, 0x589B5753, 0x589B5853, 0x589B5952, 0x589B5853, 0x589A5853, 0x589B5952, -0x589B5753, 0x589B5753, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x599B5952, 0x599B5852, -0x589B5753, 0x579B5852, 0x589B5852, 0x589B5952, 0x589B5952, 0x599B5852, 0x589B5853, 0x579B5852, -0x589B5853, 0x589B5852, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x599B5952, 0x599A5852, -0x579B5753, 0x589B5753, 0x579B5753, 0x589B5853, 0x599B5852, 0x589B5852, 0x589B5853, 0x589B5853, -0x589B5853, 0x589B5852, 0x579B5753, 0x589B5852, 0x579B5852, 0x589B5752, 0x589B5852, 0x589B5753, -0x579B5753, 0x589B5852, 0x589B5853, 0x589B5753, 0x589B5852, 0x589B5853, 0x589B5853, 0x589B5853, -0x589B5952, 0x599B5852, 0x599B5852, 0x589B5853, 0x599B5852, 0x589A5753, 0x589B5853, 0x589B5852, -0x589B5952, 0x599B5852, 0x589B5952, 0x599B5852, 0x599B5852, 0x589B5852, 0x599B5952, 0x589B5853, -0x589B5853, 0x599B5852, 0x589B5753, 0x579B5853, 0x599B5952, 0x589B5853, 0x589B5852, 0x589B5952, -0x589B5853, 0x599B5752, 0x599B5952, 0x589B5853, 0x589B5952, 0x599B5952, 0x589B5853, 0x589B5853, -0x589B5952, 0x589B5853, 0x599B5952, 0x589B5952, 0x599B5853, 0x589B5853, 0x589B5852, 0x589B5952, -0x589B5853, 0x589A5853, 0x599B5752, 0x579B5952, 0x599B5852, 0x589B5853, 0x589B5852, 0x589B5853, -0x589B5853, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5853, -0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x579B5853, 0x589B5952, 0x599B5952, 0x589B5952, -0x589B5952, 0x599B5852, 0x589B5952, 0x589B5952, 0x589B5753, 0x589B5853, 0x589B5853, 0x589B5853, -0x589A5952, 0x589B5753, 0x579B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, 0x599B5952, -0x599B5952, 0x599B5952, 0x599B5852, 0x589A5853, 0x599B5952, 0x589B5753, 0x579B5753, 0x589B5952, -0x599B5952, 0x599B5952, 0x589B5853, 0x589B5952, 0x599B5852, 0x589B5752, 0x589B5853, 0x589B5853, -0x579B5952, 0x599B5852, 0x589A5852, 0x589B5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x589B5853, -0x599B5952, 0x589B5853, 0x589B5853, 0x599B5952, 0x589B5753, 0x599B5852, 0x579B5852, 0x589B5952, -0x589B5853, 0x589B5853, 0x589B5952, 0x599B5852, 0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, -0x589B5852, 0x589B5853, 0x589B5853, 0x599A5852, 0x589B5753, 0x589B5952, 0x589B5952, 0x599B5852, -0x589B5853, 0x579B5952, 0x589B5853, 0x589B5952, 0x599B5952, 0x599B5852, 0x589B5852, 0x599B5952, -0x599B5952, 0x589B5853, 0x599B5952, 0x599B5952, 0x589B5853, 0x579B5853, 0x589A5853, 0x579B5753, -0x589B5853, 0x579B5753, 0x579B5853, 0x599B5952, 0x589B5853, 0x599B5852, 0x589B5952, 0x589B5753, -0x579B5853, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5752, 0x589B5853, 0x589B5853, 0x589B5952, -0x599B5952, 0x599B5952, 0x589B5952, 0x599B5952, 0x599B5952, 0x599B5852, 0x589B5852, 0x589B5952, -0x599B5952, 0x599B5952, 0x599B5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5852, 0x599B5852, -0x579B5853, 0x589B5753, 0x589B5753, 0x579B5853, 0x589B5852, 0x599B5952, 0x599B5852, 0x599B5952, -0x579B5853, 0x589B5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5853, 0x599B5852, -0x589B5853, 0x589B5853, 0x589B5952, 0x599B5852, 0x589B5853, 0x589B5853, 0x599B5852, 0x579B5952, -0x579B5753, 0x589B5952, 0x599B5852, 0x589A5853, 0x579B5853, 0x589B5853, 0x589B5853, 0x589B5753, -0x599B5952, 0x589B5952, 0x589B5853, 0x579B5753, 0x579B5753, 0x589B5853, 0x589B5853, 0x589B5753, -0x579B5753, 0x579B5753, 0x589B5853, 0x589B5853, 0x589B5853, 0x579B5753, 0x589B5853, 0x599B5952, -0x599B5952, 0x599B5852, 0x589B5953, 0x599B5752, 0x579B5853, 0x599B5952, 0x589B5853, 0x589B5853, -0x579B5753, 0x579A5753, 0x579A5853, 0x589B5952, 0x599B5852, 0x589B5952, 0x589B5853, 0x589A5853, -0x589A5853, 0x589B5753, 0x589A5853, 0x579B5753, 0x579A5853, 0x579B5753, 0x589B5852, 0x589B5853, -0x589B5853, 0x579B5753, 0x579B5753, 0x579B5853, 0x579B5753, 0x579B5853, 0x579B5853, 0x579B5753, -0x579B5753, 0x579B5853, 0x589A5853, 0x589A5853, 0x589B5753, 0x579B5853, 0x579A5853, 0x589B5753, -0x589B5853, 0x579B5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x589B5853, 0x589B5753, 0x579B5852, -0x589A5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x579B5853, 0x589A5853, 0x589A5853, 0x589A5852, -0x599A5852, 0x589A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579A5853, 0x589A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x589A5853, -0x589B5753, 0x579B5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x579B5753, 0x579B5753, -0x579B5753, 0x579A5853, 0x579A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x589A5853, 0x589A5853, 0x579B5753, 0x579A5853, 0x589B5853, 0x589B5753, 0x589A5753, 0x579A5853, -0x589B5753, 0x589A5853, 0x589A5853, 0x589A5853, 0x589A5753, 0x579B5853, 0x589B5853, 0x579B5853, -0x599B5952, 0x589A5753, 0x589B5952, 0x589B5853, 0x589B5753, 0x589B5752, 0x589B5952, 0x589A5853, -0x589B5752, 0x589A5853, 0x589A5753, 0x579B5753, 0x599B5852, 0x589A5853, 0x589B5853, 0x589A5853, -0x589B5753, 0x589A5753, 0x589B5952, 0x589B5853, 0x589B5853, 0x589B5952, 0x599B5952, 0x589B5853, -0x589A5853, 0x589B5952, 0x589A5853, 0x599B5952, 0x589A5753, 0x589A5753, 0x579B5753, 0x589B5853, -0x579B5853, 0x589A5853, 0x579B5753, 0x589B5853, 0x589B5852, 0x579B5753, 0x589B5753, 0x589A5753, -0x579B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x589B5853, 0x589A5853, -0x589A5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x599B5952, 0x599B5952, 0x589B5853, 0x589A5853, -0x589B5753, 0x579A5853, 0x589B5853, 0x589A5853, 0x579A5853, 0x589A5853, 0x589B5853, 0x589B5753, -0x589A5853, 0x579A5853, 0x599B5952, 0x589B5853, 0x589B5853, 0x579A5853, 0x589A5753, 0x579A5853, -0x589B5853, 0x589B5952, 0x599B5952, 0x589B5753, 0x579B5853, 0x599B5852, 0x579B5753, 0x579B5753, -0x589B5952, 0x589B5853, 0x589A5853, 0x579B5952, 0x589B5753, 0x589A5753, 0x589A5853, 0x589A5853, -0x579B5952, 0x589A5853, 0x579B5753, 0x579B5952, 0x589B5852, 0x589A5853, 0x579B5853, 0x579A5853, -0x589A5753, 0x579B5753, 0x579B5753, 0x589A5952, 0x589A5853, 0x579B5853, 0x579B5753, 0x579A5853, -0x589B5753, 0x579B5753, 0x579B5853, 0x599B5752, 0x589B5952, 0x589B5952, 0x589A5853, 0x589B5952, -0x589B5852, 0x589A5853, 0x579A5853, 0x589A5853, 0x579B5753, 0x579B5853, 0x589A5753, 0x599A5852, -0x579A5853, 0x579A5853, 0x589B5853, 0x579A5853, 0x589A5952, 0x589B5853, 0x589A5753, 0x579B5853, -0x589B5952, 0x589A5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x589B5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5853, 0x589A5853, 0x589A5852, 0x589B5853, 0x589B5853, 0x579B5753, -0x579B5853, 0x599B5952, 0x589B5952, 0x599B5852, 0x579A5853, 0x579B5753, 0x589B5753, 0x579B5853, -0x579B5853, 0x589A5853, 0x589A5753, 0x589A5853, 0x589A5853, 0x589B5853, 0x589A5853, 0x589A5753, -0x579A5853, 0x589B5853, 0x599B5852, 0x589B5952, 0x589B5853, 0x589A5853, 0x589A5953, 0x589B5753, -0x579B5853, 0x579B5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x589A5952, 0x599B5852, 0x589B5853, -0x589A5753, 0x579A5853, 0x589A5853, 0x579B5753, 0x579B5753, 0x589A5853, 0x599B5852, 0x589B5752, -0x589B5852, 0x589A5852, 0x599B5852, 0x589A5853, 0x589A5853, 0x579B5853, 0x589B5853, 0x579B5952, -0x579B5753, 0x589B5952, 0x589B5853, 0x589A5853, 0x579A5853, 0x579A5853, 0x589B5853, 0x579B5753, -0x579B5853, 0x599A5852, 0x589A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579A5853, 0x589B5853, 0x589A5753, 0x589A5853, 0x579B5753, 0x579B5753, 0x589A5853, 0x589B5853, -0x589A5853, 0x579B5952, 0x599B5752, 0x579B5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x589B5952, -0x579A5753, 0x579A5853, 0x589A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x589A5853, -0x589A5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5853, -0x589A5853, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5753, -0x579B5753, 0x579A5853, 0x579B5753, 0x589A5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5753, -0x589A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x589A5753, 0x589A5753, 0x589A5753, 0x579B5753, -0x589B5752, 0x579B5753, 0x579A5753, 0x579B5753, 0x589A5753, 0x579A5853, 0x589A5853, 0x579B5753, -0x579B5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x589A5853, 0x589B5853, 0x589A5853, 0x589A5853, -0x589A5753, 0x589A5853, 0x589A5853, 0x579B5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579A5853, 0x579B5753, 0x579B5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x579B5753, -0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579A5753, 0x579B5753, 0x589A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5753, -0x579B5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x579B5753, 0x579A5853, -0x589A5853, 0x579B5753, 0x599A5852, 0x579A5853, 0x579B5753, 0x579B5753, 0x589A5853, 0x579A5853, -0x579B5753, 0x579A5853, 0x579B5753, 0x579B5753, 0x579A5853, 0x579B5753, 0x579B5753, 0x589A5853, -0x589A5753, 0x579A5853, 0x579B5853, 0x599A5852, 0x579A5853, 0x589B5853, 0x589A5853, 0x589A5853, -0x589A5853, 0x589A5853, 0x579A5853, 0x589A5753, 0x579A5853, 0x579B5753, 0x579A5853, 0x589A5753, -0x589A5753, 0x589A5753, 0x579B5753, 0x589A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5853, -0x589A5853, 0x589A5853, 0x589A5853, 0x589A5753, 0x589A5853, 0x579A5853, 0x589A5853, 0x589A5853, -0x589A5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x579A5853, -0x579B5753, 0x589A5853, 0x589A5853, 0x579A5753, 0x579A5853, 0x579A5853, 0x589A5753, 0x579B5753, -0x579B5753, 0x579A5853, 0x589A5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x579B5753, 0x579B5952, 0x589A5753, 0x579A5753, -0x579A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579A5853, 0x589A5853, 0x579B5753, 0x579A5853, 0x579B5753, 0x589A5853, 0x579B5753, 0x579B5753, -0x579A5753, 0x579A5753, 0x579B5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x579A5753, 0x579B5753, -0x589A5753, 0x579B5753, 0x579B5753, 0x599B5752, 0x579B5853, 0x589A5853, 0x589A5753, 0x589A5853, -0x589A5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x579B5753, 0x579B5753, 0x589A5753, 0x589A5853, -0x579B5753, 0x579A5753, 0x589A5753, 0x589A5753, 0x579A5853, 0x589A5853, 0x589A5753, 0x579B5753, -0x579A5853, 0x589A5853, 0x589A5753, 0x579B5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x589A5753, 0x589B5752, 0x589A5853, 0x579A5853, 0x579B5753, -0x579B5753, 0x589A5853, 0x589A5853, 0x589A5853, 0x579B5753, 0x579B5753, 0x589A5853, 0x589A5753, -0x589A5753, 0x589A5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x579A5853, 0x579A5853, 0x579B5753, -0x589A5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x579B5753, 0x579B5753, 0x589A5753, 0x579B5753, -0x589A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x589A5853, 0x579A5853, -0x589A5853, 0x589A5753, 0x589A5753, 0x589A5853, 0x589A5853, 0x589A5853, 0x579B5753, 0x579B5753, -0x579B5753, 0x589A5853, 0x579B5753, 0x579A5853, 0x579B5753, 0x589A5853, 0x589A5753, 0x589A5853, -0x579A5753, 0x589A5952, 0x589A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5853, 0x579B5753, -0x579B5753, 0x589A5853, 0x579B5753, 0x579B5753, 0x589A5853, 0x589A5853, 0x579A5853, 0x579A5853, -0x579B5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5753, -0x579B5753, 0x589A5853, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, -0x589A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x569A5753, 0x579A5753, 0x579B5753, 0x579A5853, -0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579A5753, 0x589A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, -0x579B5753, 0x569A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, -0x579A5853, 0x579A5753, 0x579A5653, 0x569A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x569A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, -0x579A5853, 0x579A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5853, -0x579A5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x589A5853, 0x589A5853, -0x589A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579B5753, -0x579A5853, 0x579A5753, 0x579A5853, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5853, -0x589A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5853, -0x579A5853, 0x579A5853, 0x589A5853, 0x589A5853, 0x589A5853, 0x589A5753, 0x579B5753, 0x579A5753, -0x579B5753, 0x579B5753, 0x589A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x569B5653, 0x569A5753, 0x579A5753, -0x579A5653, 0x569B5653, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x589A5753, 0x579A5653, -0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x589A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5853, 0x589A5853, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x589A5753, 0x579A5753, 0x579A5753, 0x589A5753, 0x579A5853, 0x589A5853, 0x589A5753, 0x579B5753, -0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, -0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x579A5853, 0x579B5753, -0x579A5753, 0x579A5853, 0x589A5853, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, -0x579A5753, 0x579A5853, 0x589A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, -0x579B5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5853, 0x579B5753, 0x579A5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x569A5753, 0x579A5753, -0x579A5753, 0x579A5653, 0x569A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x589A5853, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, -0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579B5753, 0x589A5753, 0x579A5753, 0x589A5753, -0x569A5753, 0x589A5853, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579B5753, 0x579A5753, -0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, -0x589A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579B5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5653, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, -0x579A5753, 0x579A5653, 0x569B5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5653, 0x579A5753, 0x579A5753, -0x569A5753, 0x579B5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5653, 0x569A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, -0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5653, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5653, 0x579A5853, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x589A5753, 0x579A5653, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, -0x579A5753, 0x579B5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, -0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, -0x569A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x569A5653, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, 0x579A5653, 0x579A5753, 0x569A5753, -0x579A5753, 0x579A5753, 0x569A5753, 0x579B5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5653, 0x579A5653, 0x569B5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x569A5753, -0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x579A5753, -0x569A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, -0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, -0x569B5653, 0x569B5653, 0x579A5753, 0x579B5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x569A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x579A5753, 0x579A5753, -0x569A5653, 0x579A5753, 0x579A5753, 0x569A5753, 0x569A5653, 0x569A5753, 0x569A5653, 0x579A5653, -0x579A5753, 0x579A5653, 0x569A5653, 0x569A5753, 0x569A5753, 0x569A5753, 0x579A5653, 0x569A5653, -0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5653, 0x569A5753, 0x569A5753, -0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5653, 0x569A5753, 0x579A5653, -0x569A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x579A5753, 0x579A5753, -0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5753, -0x569A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x579A5653, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5653, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x579A5753, -0x579A5753, 0x579A5653, 0x579A5653, 0x569A5653, 0x579A5653, 0x579A5753, 0x569A5653, 0x579A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x579A5753, 0x569A5753, 0x579A5653, -0x569A5653, 0x569A5753, 0x579A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, 0x579A5753, -0x569A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x569A5753, -0x569A5653, 0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, 0x579A5653, 0x579A5653, 0x569A5653, -0x579A5753, 0x579A5753, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5653, 0x569A5653, 0x569A5753, 0x579A5653, 0x569A5653, 0x569A5753, 0x579A5653, -0x579A5753, 0x569A5753, 0x569A5653, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5653, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x579A5653, -0x569A5653, 0x569A5653, 0x579A5653, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, -0x579A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x569B5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, -0x569A5653, 0x579A5753, 0x579A5753, 0x569A5653, 0x569A5553, 0x569A5653, 0x579A5753, 0x579A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5653, 0x569A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5653, -0x569A5753, 0x579A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, 0x579A5753, 0x569A5653, -0x569A5753, 0x579A5753, 0x569A5653, 0x579A5653, 0x579A5653, 0x579A5653, 0x569A5653, 0x579A5753, -0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x579A5753, 0x569A5653, -0x579A5653, 0x579A5753, 0x579A5653, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5753, -0x579A5653, 0x569A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5753, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, -0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5753, 0x569A5653, -0x569A5653, 0x579A5753, 0x569A5553, 0x559A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, -0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x579A5753, 0x579A5653, 0x569A5653, -0x569A5753, 0x579A5753, 0x579A5753, 0x579A5754, 0x579A5753, 0x579A5753, 0x569A5753, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5753, -0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x579A5753, 0x569A5653, -0x569A5753, 0x579A5753, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x579A5653, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x569A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5553, -0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, -0x579A5753, 0x579A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, -0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, -0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5753, -0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x579A5753, 0x579A5653, 0x569A5653, 0x569A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x569A5753, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x579A5753, -0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x579A5753, 0x569A5753, 0x579A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5553, 0x559B5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5753, 0x579A5653, 0x579A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5753, 0x579A5753, 0x579A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, -0x569A5753, 0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, -0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x579A5653, 0x569A5653, 0x579A5753, 0x579A5753, 0x579A5653, 0x569A5753, 0x579A5753, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x559B5553, 0x559A5553, 0x559B5653, 0x569A5654, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x579A5653, 0x569A5653, 0x569A5553, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569B5654, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x559B5553, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5753, 0x569A5653, 0x579A5753, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5753, -0x579A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, -0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x559B5553, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5553, 0x559B5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x559A5553, 0x569A5653, -0x579A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5654, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5753, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x559A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5654, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x559A5653, 0x569A5553, -0x569A5553, 0x569A5653, 0x569A5653, 0x559A5553, 0x569A5553, 0x559A5553, 0x569A5654, 0x569A5653, -0x569A5653, 0x569A5553, 0x559A5553, 0x559A5653, 0x559A5553, 0x559A5553, 0x559A5653, 0x569A5553, -0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5654, 0x559A5653, 0x569A5653, -0x569A5654, 0x569A5654, 0x569A5653, 0x569A5653, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5654, -0x569A5653, 0x569A5653, 0x569A5553, 0x559A5553, 0x569A5654, 0x569A5653, 0x569A5654, 0x569A5653, -0x569A5653, 0x559A5553, 0x559A5653, 0x569A5653, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, 0x559A5553, 0x559A5553, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5553, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, -0x569A5553, 0x559A5553, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x559A5653, 0x559A5653, -0x559A5553, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, -0x569A5653, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x569A5653, 0x559A5653, 0x569A5654, -0x569A5653, 0x569A5653, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5654, 0x559A5653, -0x569A5653, 0x559A5653, 0x569A5553, 0x559A5553, 0x569A5653, 0x569A5654, 0x569A5654, 0x569A5653, -0x569A5553, 0x569A5653, 0x569A5553, 0x559A5653, 0x569A5653, 0x559A5653, 0x569A5553, 0x569A5653, -0x569A5553, 0x559A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5553, 0x559A5553, 0x559A5653, -0x559A5553, 0x569A5653, 0x569A5553, 0x559A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5654, 0x569A5553, 0x559A5553, 0x569A5553, 0x559A5653, 0x559A5553, 0x569A5654, 0x569A5654, -0x569A5653, 0x569A5653, 0x569A5553, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5653, -0x569A5653, 0x569A5653, 0x559A5553, 0x569A5654, 0x559A5553, 0x569A5654, 0x559A5653, 0x559A5653, -0x569A5553, 0x569A5653, 0x569A5553, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5553, 0x559A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, -0x559A5553, 0x569A5653, 0x569A5553, 0x569A5653, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5654, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5653, -0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, 0x569A5654, 0x569A5553, 0x569A5654, -0x559A5553, 0x569A5553, 0x559A5553, 0x559A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5653, 0x559A5553, -0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5654, -0x569A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5553, 0x559A5553, 0x559A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x559A5653, 0x569A5553, 0x569A5654, 0x559A5553, 0x559A5653, -0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5653, 0x569A5653, -0x569A5653, 0x569A5653, 0x569A5553, 0x569A5653, 0x569A5654, 0x569A5653, 0x559A5653, 0x569A5553, -0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5653, 0x569A5653, 0x569A5653, 0x569A5653, -0x559A5653, 0x569A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x559A5553, 0x569A5654, 0x569A5553, 0x559A5553, 0x559A5553, 0x569A5553, -0x559A5553, 0x559A5653, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, -0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x569A5654, 0x559A5653, 0x569A5654, 0x559A5553, 0x569A5554, 0x559A5653, 0x569A5654, -0x569A5654, 0x569A5553, 0x559A5653, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5653, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5653, 0x569A5654, 0x569A5654, 0x559A5653, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x569A5654, 0x569A5654, 0x569A5553, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5653, 0x569A5654, 0x569A5554, 0x559A5653, -0x569A5654, 0x569A5654, 0x569A5553, 0x569A5654, 0x559A5553, 0x559A5653, 0x569A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, -0x569A5654, 0x569A5654, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5653, 0x569A5553, -0x559A5553, 0x559A5653, 0x559A5553, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x559A5553, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5653, 0x559A5553, 0x559A5553, 0x569A5654, 0x559A5553, 0x569A5654, 0x559A5553, -0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5553, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, -0x569A5553, 0x559A5653, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x559A5553, 0x569A5654, -0x559A5653, 0x559A5653, 0x559A5653, 0x559A5553, 0x559A5653, 0x569A5553, 0x569A5553, 0x559A5653, -0x559A5553, 0x559A5553, 0x569A5553, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x569A5654, 0x569A5553, 0x559A5654, 0x569A5553, 0x559A5653, 0x569A5654, 0x569A5654, -0x569A5553, 0x569A5553, 0x559A5553, 0x569A5553, 0x559A5653, 0x559A5553, 0x569A5553, 0x559A5553, -0x559A5653, 0x569A5654, 0x569A5553, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5653, 0x569A5654, -0x569A5553, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, -0x569A5654, 0x559A5653, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5654, 0x559A5553, 0x559A5553, -0x559A5553, 0x569A5654, 0x569A5653, 0x569A5654, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5654, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5654, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5653, 0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5653, 0x569A5654, -0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, -0x569A5654, 0x569A5654, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5553, -0x559A5553, 0x569A5654, 0x569A5553, 0x559A5653, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5653, 0x569A5654, 0x569A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5553, 0x569A5654, -0x569A5654, 0x559A5553, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5553, 0x569A5553, 0x559A5553, -0x559A5653, 0x569A5654, 0x569A5654, 0x569A5654, 0x569A5654, 0x559A5553, 0x559A5653, 0x569A5654, -0x569A5554, 0x569A5654, 0x569A5553, 0x559A5553, 0x559A5653, 0x559A5553, 0x569A5654, 0x559A5553, -0x569A5553, 0x569A5553, 0x569A5554, 0x559A5654, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5553, -0x559A5553, 0x559A5553, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, -0x559A5653, 0x559A5553, 0x569A5654, 0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x569A5654, -0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x569A5654, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5553, -0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x569A5654, -0x559A5654, 0x569A5554, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x569A5654, 0x569A5654, -0x559A5554, 0x559A5654, 0x569A5654, 0x569A5554, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5654, 0x569A5654, 0x559A5553, 0x559A5554, 0x559A5654, 0x569A5553, 0x559A5553, 0x559A5553, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5553, 0x559A5653, 0x569A5654, 0x569A5654, 0x569A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5654, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5553, 0x559A5553, 0x559A5654, 0x569A5553, 0x559A5554, 0x559A5553, 0x559A5554, 0x569A5654, -0x569A5654, 0x569A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5553, -0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5553, 0x559A5653, 0x559A5553, 0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x559A5553, -0x559A5554, 0x559A5554, 0x569A5554, 0x559A5653, 0x559A5654, 0x559A5554, 0x559A5554, 0x559A5553, -0x559A5554, 0x569A5554, 0x559A5553, 0x559A5554, 0x569A5554, 0x559A5654, 0x569A5654, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x569A5654, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5654, 0x559A5553, 0x559A5554, 0x559A5554, 0x569A5654, 0x559A5653, 0x569A5654, 0x559A5654, -0x569A5654, 0x559A5653, 0x569A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5654, 0x559A5554, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5653, 0x559A5654, 0x569A5553, 0x559A5554, 0x559A5654, 0x569A5554, -0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5653, 0x559A5554, 0x569A5654, 0x559A5553, 0x559A5554, 0x559A5553, 0x559A5553, -0x559A5654, 0x559A5553, 0x569A5654, 0x569A5554, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5553, 0x559A5553, 0x559A5654, 0x569A5654, 0x569A5554, 0x569A5554, 0x569A5654, -0x559A5553, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5553, 0x569A5654, 0x569A5554, 0x559A5554, 0x569A5654, 0x569A5654, 0x559A5553, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5654, 0x559A5553, 0x559A5553, 0x559A5553, -0x559A5553, 0x569A5554, 0x559A5554, 0x559A5653, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5654, 0x569A5554, 0x559A5554, 0x559A5554, 0x569A5554, 0x559A5554, 0x559A5554, -0x569A5554, 0x569A5553, 0x559A5553, 0x559A5553, 0x559A5553, 0x559A5554, 0x559A5554, 0x559A5553, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5654, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, -0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, 0x559A5554, +0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x00800080, 0x0083127C, 0x13861278, +0x10871179, 0x12871378, 0x14871278, 0x12871278, 0x12871178, 0x12871378, 0x13871378, 0x13871378, +0x15871777, 0x18871577, 0x14871577, 0x13871677, 0x14871477, 0x15871078, 0x0F871078, 0x13871378, +0x14871078, 0x13861478, 0x13861678, 0x15871177, 0x11871079, 0x12861278, 0x10861179, 0x13871278, +0x16871377, 0x15871577, 0x17861577, 0x12861378, 0x12871278, 0x14861478, 0x16861677, 0x16861578, +0x15861378, 0x11871078, 0x0D861079, 0x16861877, 0x13871278, 0x13871178, 0x13861678, 0x15871577, +0x18861677, 0x16861778, 0x14871278, 0x11871278, 0x13861877, 0x16871477, 0x10870C79, 0x0D871079, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0E861378, 0x0F871078, 0x13861279, 0x0F860E79, 0x10861378, 0x14861378, 0x11861179, 0x11851079, +0x10861179, 0x10861279, 0x0F860D79, 0x0F861279, 0x12861078, 0x12861178, 0x11861279, 0x12851279, +0x0D861079, 0x11860F79, 0x0D860E79, 0x0F860D79, 0x0D860F79, 0x0E860F79, 0x0E860C7A, 0x0D860E7A, +0x0E860E79, 0x0E860F79, 0x0F871278, 0x14871377, 0x13861378, 0x14861178, 0x0E860E79, 0x11851179, +0x0D860E79, 0x10871078, 0x13861578, 0x14861478, 0x0F861379, 0x13861278, 0x12851179, 0x11861279, +0x0E861179, 0x12861578, 0x12851079, 0x13860F78, 0x0E851079, 0x12861079, 0x11861278, 0x12860F79, +0x0E870E79, 0x14860F78, 0x0F871078, 0x10871178, 0x0F871179, 0x14860F78, 0x0F861178, 0x10861179, +0x13860E78, 0x12861178, 0x0D860E7A, 0x13861178, 0x12861478, 0x12861378, 0x15861378, 0x0F861179, +0x12861179, 0x10861278, 0x14861378, 0x12861278, 0x10861079, 0x14851678, 0x14861278, 0x10861279, +0x12861278, 0x11861279, 0x13861378, 0x13861379, 0x14861478, 0x13861378, 0x14861478, 0x13861278, +0x11861378, 0x13861179, 0x12861179, 0x0D860F79, 0x10861279, 0x14861378, 0x10861379, 0x12860E79, +0x0E861178, 0x0E870E79, 0x0F861378, 0x12861278, 0x11861478, 0x18851478, 0x12860F79, 0x11861378, +0x11860F79, 0x11861378, 0x13861079, 0x13871178, 0x12861178, 0x0F861278, 0x13861178, 0x0F860E79, +0x11861179, 0x10861278, 0x15851279, 0x14861278, 0x14861279, 0x12861078, 0x11861578, 0x12861378, +0x15851278, 0x12860F78, 0x13851578, 0x12861378, 0x11861379, 0x12860F79, 0x0E860E79, 0x12851578, +0x15851578, 0x14861378, 0x13861478, 0x12860E79, 0x0E861279, 0x16861278, 0x12861278, 0x12860E79, +0x12861378, 0x10871179, 0x0F851279, 0x12861478, 0x13861079, 0x12861078, 0x0D860F79, 0x10861279, +0x14861078, 0x10861279, 0x14861478, 0x13861278, 0x12861378, 0x14861378, 0x13861178, 0x12861178, +0x11851479, 0x15861578, 0x14861478, 0x14861178, 0x11861079, 0x11861078, 0x0E860E79, 0x0E860E79, +0x10861578, 0x15861378, 0x0F861278, 0x12861178, 0x11861378, 0x14861178, 0x12861178, 0x10861278, +0x10861178, 0x0D870B79, 0x0E861179, 0x12861178, 0x11860E78, 0x0E860F79, 0x10861179, 0x12861178, +0x11861079, 0x11861178, 0x0F861278, 0x11861278, 0x13861777, 0x16851478, 0x11860F79, 0x11861179, +0x11861178, 0x11861279, 0x11860E79, 0x10861378, 0x12861079, 0x0D861079, 0x0F861279, 0x11851079, +0x12861178, 0x12861078, 0x11861178, 0x12861178, 0x12861079, 0x0F860F79, 0x12861777, 0x10861079, +0x10870F79, 0x0D871178, 0x10861378, 0x13860F78, 0x0F871079, 0x0E851179, 0x0F860D79, 0x0F860F79, +0x12861179, 0x13861278, 0x0F870E79, 0x13861078, 0x14861478, 0x11861178, 0x15861478, 0x0D861079, +0x11861178, 0x0F861379, 0x12860E78, 0x0F861279, 0x13861178, 0x12861078, 0x10861179, 0x13861278, +0x10851278, 0x10861079, 0x0F861279, 0x13861278, 0x12860E78, 0x12860E78, 0x15861278, 0x14861378, +0x0F860F79, 0x11860E79, 0x0F861378, 0x12861379, 0x12861378, 0x11861279, 0x11851279, 0x10860D79, +0x10861178, 0x11861279, 0x10861079, 0x0D870E79, 0x12861378, 0x13861278, 0x15861478, 0x11861079, +0x11861079, 0x10861079, 0x10861179, 0x10861079, 0x11861279, 0x13861278, 0x14861678, 0x17861678, +0x13860F78, 0x0E870E79, 0x0F861278, 0x12861278, 0x12861078, 0x10861179, 0x10861079, 0x12861278, +0x13861278, 0x10860E79, 0x0E860D79, 0x0E860F79, 0x10861179, 0x10870F79, 0x12861278, 0x10861279, +0x11861179, 0x12861279, 0x11851279, 0x0F861379, 0x14861379, 0x11861079, 0x12861079, 0x10861079, +0x11861479, 0x14851378, 0x13861278, 0x11861178, 0x10861079, 0x0F860F79, 0x11861378, 0x13861278, +0x11861279, 0x14861578, 0x15861378, 0x12861478, 0x12861378, 0x12861378, 0x13860F78, 0x0C871079, +0x12861278, 0x0F861179, 0x12861078, 0x15861378, 0x10860F78, 0x0E861179, 0x11851079, 0x0E861179, +0x11871278, 0x12861378, 0x12861478, 0x16861578, 0x11851379, 0x12861079, 0x10861179, 0x10860E79, +0x0D860D7A, 0x11861578, 0x17851578, 0x12860E78, 0x10861078, 0x12861478, 0x14851578, 0x16851278, +0x13851478, 0x12861079, 0x0E860E79, 0x12861578, 0x14861078, 0x0D860E79, 0x13861578, 0x15851478, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0D860E79, 0x11850F79, 0x0D850F79, 0x10850F79, 0x0E850D79, 0x0D850E7A, 0x0E850F79, 0x0F851079, +0x0F850F79, 0x0F850E79, 0x10850D79, 0x0B850D7A, 0x10860D79, 0x0F851179, 0x10851179, 0x0E850F7A, +0x0C850F7A, 0x0E860C7A, 0x0D850E7A, 0x0C850E79, 0x0D860B7A, 0x0F851279, 0x10850F79, 0x0F850E79, +0x10850F79, 0x0D850D7A, 0x0F850E7A, 0x11861179, 0x13861278, 0x11851379, 0x12850F79, 0x0C850D7A, +0x0E850D7A, 0x0C860D79, 0x0E851179, 0x13851279, 0x12860D79, 0x11851178, 0x10850F79, 0x0F850E7A, +0x0F850C79, 0x11851079, 0x13850F79, 0x10851079, 0x0D850D7A, 0x0E850F7A, 0x0E861079, 0x11850F79, +0x0D860D79, 0x0D861279, 0x10860D79, 0x0F850F79, 0x11861279, 0x10850D79, 0x0F850D79, 0x0E861179, +0x0E850E79, 0x0E860C7A, 0x0D850D7A, 0x0C850C7A, 0x11851078, 0x11850F79, 0x13851179, 0x0D860F79, +0x11851279, 0x0F850F79, 0x13851179, 0x10850F79, 0x0F850F7A, 0x0F851179, 0x14851279, 0x13861079, +0x0E850E79, 0x11861179, 0x10861079, 0x11851179, 0x11851179, 0x11851179, 0x11851279, 0x12851179, +0x11851179, 0x11850F79, 0x0D850D7A, 0x0E851179, 0x12850F79, 0x0E851079, 0x0F850A7A, 0x0C860E79, +0x0D860D7A, 0x0F851179, 0x12851179, 0x11851379, 0x14851179, 0x0E850E79, 0x11851179, 0x0F850D79, +0x0F850F79, 0x0E850E7A, 0x12860F79, 0x0F850F79, 0x0E861179, 0x11860E79, 0x0F860F79, 0x10851179, +0x11850F78, 0x13850F79, 0x10861079, 0x12851179, 0x0F850F79, 0x10851279, 0x11850F79, 0x11851179, +0x0F860C79, 0x0F851279, 0x10850F79, 0x10861278, 0x10850E79, 0x0E851079, 0x13851279, 0x10851179, +0x10851079, 0x0F850F79, 0x10851279, 0x12851079, 0x0E850E79, 0x0F841279, 0x10850F79, 0x10850D7A, +0x0F860E79, 0x0D860F79, 0x10850F79, 0x11851179, 0x0F851179, 0x0F850C79, 0x0D851079, 0x13860D78, +0x10861079, 0x0E860D79, 0x0E850F79, 0x0F850F79, 0x0F851079, 0x10861079, 0x10851279, 0x12851079, +0x0F850F79, 0x10860F79, 0x10861079, 0x0F850E79, 0x0E860E79, 0x0F850F79, 0x0D850E79, 0x0E851279, +0x12861179, 0x0F861079, 0x0F851079, 0x0E860F79, 0x11851179, 0x10850F79, 0x0D861078, 0x10861079, +0x0C860B7A, 0x0E850F79, 0x0E850E79, 0x0E861179, 0x12851279, 0x12851279, 0x11851179, 0x12851279, +0x12851378, 0x13861378, 0x12851278, 0x12851279, 0x12851179, 0x10861079, 0x12851379, 0x11850F79, +0x0E851179, 0x11850F79, 0x11851079, 0x0E850D79, 0x0F851079, 0x0F850C79, 0x0F850C7A, 0x10850F79, +0x10850F79, 0x0F860E79, 0x0D851179, 0x0F851079, 0x0F850F7A, 0x0D85107A, 0x0E851479, 0x0E860E79, +0x0E850F79, 0x0F860D7A, 0x0C860D79, 0x11851079, 0x0C860E79, 0x0D850C7A, 0x10850D7A, 0x0D850E79, +0x0E851079, 0x0E851179, 0x0E850C79, 0x10851079, 0x10851279, 0x11860F79, 0x11851378, 0x0C860E7A, +0x0F861079, 0x0E851179, 0x11850E79, 0x0D851079, 0x0F851079, 0x0F860D79, 0x0F850E7A, 0x0F850F79, +0x0D850F79, 0x0E850E79, 0x0E850F7A, 0x10861179, 0x10860D79, 0x10860E79, 0x13851079, 0x13851279, +0x0E850F79, 0x0F860B7A, 0x10851179, 0x10851079, 0x10850E79, 0x0F850F79, 0x0F851079, 0x0C850E79, +0x0F850F79, 0x0F850F79, 0x0E860C7A, 0x0C861079, 0x11861079, 0x10851279, 0x10851079, 0x0E850E7A, +0x0E860E7A, 0x0E861079, 0x11861079, 0x10861079, 0x0F860E79, 0x0D860D79, 0x0C860E79, 0x0E860E79, +0x10861279, 0x14851478, 0x10850F79, 0x0C860C7A, 0x0F850F79, 0x10861179, 0x10850F79, 0x0F850F79, +0x0F850F79, 0x0F850F79, 0x0D850E7A, 0x0F850F79, 0x11851079, 0x0E850E79, 0x0F850F7A, 0x0E850D79, +0x12851179, 0x0E85117A, 0x0D850F7A, 0x1085107A, 0x0E850E7A, 0x0F850E79, 0x0F860D7A, 0x0F851479, +0x14851279, 0x10850F79, 0x0D850B7A, 0x0D860E7A, 0x0E850E7A, 0x0D850D7A, 0x10850F79, 0x0F850E79, +0x0E851179, 0x0E861179, 0x12851179, 0x11860E79, 0x0F851279, 0x11851179, 0x0F851079, 0x0F850C79, +0x0F861178, 0x11860E79, 0x0F850F79, 0x0E851279, 0x12860F78, 0x0E850E79, 0x0F851079, 0x0F850D7A, +0x0D850F79, 0x10861079, 0x0F861178, 0x10851079, 0x12851379, 0x13851479, 0x15841579, 0x14851479, +0x14851479, 0x13851079, 0x0E860D79, 0x0D860F79, 0x10851179, 0x12851478, 0x12851079, 0x10851179, +0x10850F79, 0x0E850F79, 0x10851179, 0x0F860C7A, 0x0C851079, 0x12851279, 0x10851079, 0x11850F79, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0D850D7A, 0x0F850D79, 0x0B850B7A, 0x0D850E7A, 0x0F84107A, 0x0F840F7A, 0x0F840E7A, 0x0E850D7A, +0x0C850D7A, 0x0D850D7A, 0x0C850E7A, 0x0C850B7A, 0x0E850D79, 0x0D84107A, 0x0F84107A, 0x0D850E7A, +0x0C850E7A, 0x0B850A7B, 0x0D850C7A, 0x0B850C7A, 0x0B850E7A, 0x0D850C7A, 0x0B850A7B, 0x0B850C7A, +0x0D850E7A, 0x0D850E7A, 0x0F850C79, 0x0D850E7A, 0x0F850F79, 0x12850F79, 0x0E85107A, 0x10850C79, +0x0B840B7A, 0x0D850C7A, 0x0D850C7A, 0x0F841079, 0x0F851079, 0x0C84107A, 0x0E850E79, 0x0D850E7A, +0x0C840E7A, 0x0C850F7A, 0x0F850F7A, 0x0C840E7A, 0x0E850D7A, 0x0B850C7A, 0x0D850D7A, 0x0D850F79, +0x0E850C7A, 0x0A850B7A, 0x0B850A7A, 0x0B860A7A, 0x0A850A7A, 0x0B850B7A, 0x0D850C7A, 0x0C850A7A, +0x09850B7B, 0x0B840C7A, 0x0D850D7A, 0x0D850C7A, 0x0B850C7A, 0x0C850D79, 0x0D850F7A, 0x0F850D7A, +0x0D840F7A, 0x0F850D7A, 0x0F84117A, 0x0F840E7A, 0x0E850D7A, 0x0E850E7A, 0x0D84117A, 0x10840E7A, +0x10840E7A, 0x0E850D7A, 0x0D850D7A, 0x0E840F7A, 0x0F840E7A, 0x0F840F7A, 0x0F840F7A, 0x0F850D7A, +0x0C850B7A, 0x0C850D7A, 0x0F851079, 0x10840E7A, 0x0E850E7A, 0x0B85097A, 0x0C850D7A, 0x0B850C7A, +0x0E850E7A, 0x0E850D7A, 0x0E850F79, 0x10840E7A, 0x0B850D7A, 0x0F84107A, 0x0E850D7A, 0x0E850D7A, +0x0B850C7A, 0x0F850E7A, 0x0E850E7A, 0x0D850E7A, 0x0F850C79, 0x0E850D7A, 0x0E84107A, 0x0F850E79, +0x12840F7A, 0x0E850F79, 0x1084107A, 0x0C850D7A, 0x0B850E7A, 0x11850D79, 0x0F850D79, 0x0F850C7A, +0x0B850F7A, 0x0F840D7A, 0x0D850E79, 0x11850E79, 0x0E850E79, 0x0F850F79, 0x0F851079, 0x10841179, +0x0E850F79, 0x0D850E7A, 0x0D850C7A, 0x10841079, 0x0E850C7A, 0x0C84107A, 0x0E850E7A, 0x0C850C7A, +0x0C850C7A, 0x0D850D7A, 0x0E850E79, 0x0E850E7A, 0x0F840D7A, 0x0C850D7A, 0x0F840D7A, 0x0E850D7A, +0x0D850D79, 0x0C850C7A, 0x0C850C7A, 0x0C850C7A, 0x0C850C7A, 0x0B850D7A, 0x0F84107A, 0x0F850D79, +0x0E850F79, 0x10840F7A, 0x0F840F7A, 0x0E850D7A, 0x0C850C7A, 0x0C850E7A, 0x0E84117A, 0x0F850F79, +0x0E850E79, 0x0D850F7A, 0x0E850D79, 0x0F841079, 0x0E850D7A, 0x0D850F79, 0x10850D79, 0x0B850B7A, +0x0C850D7A, 0x0D850E7A, 0x0F850E79, 0x0D850C7A, 0x0C850C7A, 0x0C850C7A, 0x0C850C7A, 0x0B850A7B, +0x0A850B7A, 0x0B850B7A, 0x0D850E7A, 0x0F84117A, 0x12841279, 0x1184127A, 0x10840D7A, 0x0D84117A, +0x10840E7A, 0x0D850D7A, 0x0F850E79, 0x0F840D7A, 0x0C850C7A, 0x0E850E79, 0x0B850D7A, 0x0C840F7A, +0x0E840F7A, 0x0D850C7A, 0x0C850C7A, 0x0F840D7A, 0x0D850E7A, 0x0C840E7A, 0x0D84127A, 0x0C850C7A, +0x0F850F79, 0x0F850F7A, 0x0D850B7A, 0x0C850E79, 0x0D850A7A, 0x0C850A7A, 0x0C840C7B, 0x0B850D7A, +0x0C850D7A, 0x0D850F7A, 0x0F850C79, 0x0D84107A, 0x0E851179, 0x11840D7A, 0x0E851279, 0x0C850B7A, +0x0C850D7A, 0x0D840E7A, 0x10850F79, 0x0C840F7A, 0x0D840F7A, 0x0E850D79, 0x0E840C7B, 0x0E850E7A, +0x0C850E7A, 0x0E850D7A, 0x0C840D7B, 0x0F850E79, 0x0F850C7A, 0x0D850D7A, 0x0F84107A, 0x0F84117A, +0x0E850C7A, 0x0D850C7A, 0x0C840E7A, 0x0E850D7A, 0x0E850D7A, 0x0F840E7A, 0x0F850D79, 0x0A850C7A, +0x0D850E7A, 0x0E850C79, 0x0B850C7A, 0x0E850F79, 0x0F841079, 0x0F850F79, 0x0E850F7A, 0x0E840D7A, +0x0C850D7A, 0x0E850F79, 0x0E850D7A, 0x0D850D7A, 0x0D850D7A, 0x0E850E7A, 0x0E850F7A, 0x0E850E7A, +0x0D850C7A, 0x0C850C7A, 0x0E84117A, 0x13841279, 0x0F850C79, 0x0A850B7A, 0x0E85107A, 0x10850E79, +0x0D850D7A, 0x0D850D7A, 0x0D850D7A, 0x0D850D7A, 0x0D840D7A, 0x0C850C7A, 0x0C850E7A, 0x11840D7A, +0x0B840F7B, 0x0D850F7A, 0x0F840D7B, 0x0F840C7A, 0x0E850C7A, 0x0D840B7A, 0x0D840F7A, 0x13841079, +0x0F840C7B, 0x0E840D7A, 0x0D850D7A, 0x0C850E7A, 0x0E840E7A, 0x0D850C7A, 0x0C850B7A, 0x0E850D7A, +0x0C85097A, 0x0F850C79, 0x0F840F79, 0x10840E7A, 0x0D850C7A, 0x0F850F7A, 0x0F850D79, 0x0E850D7A, +0x0B850E79, 0x10850F79, 0x0D850D7A, 0x0E850D7A, 0x0D850F79, 0x0D850D7A, 0x0C850E7A, 0x0E840E7A, +0x0D850C7A, 0x0D850E7A, 0x10850E79, 0x0E850F79, 0x0F850E79, 0x0F850F79, 0x0F850F7A, 0x0E850E7A, +0x0D850C7A, 0x0C850C7A, 0x0D850E79, 0x0F840F7A, 0x1184117A, 0x0F850E7A, 0x0E850D7A, 0x0D850C7A, +0x0E850E7A, 0x0E850B79, 0x0D850C7A, 0x0D85107A, 0x0F850E7A, 0x0D850E7A, 0x0E840D7A, 0x0D850F7A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0B840A7B, 0x0C840D7B, 0x0E840E7B, 0x0C840B7B, 0x0B840C7B, 0x0C840C7B, 0x0C840C7B, 0x0D840E7B, +0x0E840D7A, 0x0B840A7B, 0x0B840A7B, 0x0D840A7A, 0x0A840B7B, 0x0B840B7B, 0x0C840E7B, 0x0D840D7B, +0x0C840A7A, 0x0A84097B, 0x0C850B7A, 0x0B840B7B, 0x0C840B7B, 0x0A840A7B, 0x0A840B7B, 0x0B840B7B, +0x0B840A7B, 0x0B840D7A, 0x0C840C7B, 0x0D840B7A, 0x0C840C7B, 0x0C840E7A, 0x0D840D7B, 0x0D840E7A, +0x0B84087B, 0x0A840B7B, 0x0A840B7B, 0x0B840C7A, 0x0F840D7A, 0x0D840A7B, 0x0D840C7A, 0x0C840B7B, +0x0B840B7B, 0x0C840C7B, 0x0C840D7B, 0x0D840B7B, 0x0C840E7B, 0x0B840B7B, 0x0A840C7B, 0x0C840C7A, +0x0C850C7A, 0x0D840C7A, 0x0C840B7B, 0x0B840B7B, 0x0984097B, 0x0984097B, 0x0984097B, 0x0B840B7B, +0x0C840C7A, 0x0C840C7B, 0x0C840C7B, 0x0C840C7B, 0x0C840C7A, 0x0B840A7B, 0x0B850C7A, 0x0C840D7B, +0x0C840B7B, 0x0D840D7B, 0x0C840C7A, 0x0D840D7B, 0x0D840E7A, 0x0C840B7B, 0x0B840C7B, 0x0C840C7B, +0x0D840D7B, 0x0C840C7A, 0x0C840C7B, 0x0D840D7A, 0x0D840C7A, 0x0C840B7B, 0x0A840A7B, 0x0B840C7B, +0x0D840D7B, 0x0E840E7A, 0x0C840C7B, 0x0D840B7B, 0x08840A7B, 0x0C840B7A, 0x0B840B7A, 0x0B840B7B, +0x0C840C7A, 0x0C840E7B, 0x0D840A7B, 0x0A840C7B, 0x0D840D7B, 0x0C840C7B, 0x0C840B7B, 0x0A840B7B, +0x0D840D7A, 0x0D840C7A, 0x0C840C7A, 0x0E840B7A, 0x0D840D7A, 0x0C840D7B, 0x0D840C7A, 0x0E840E7B, +0x0C840D7A, 0x0C840F7A, 0x0D840B7B, 0x0B840B7B, 0x0C840E7A, 0x0C850D7A, 0x0B840C7B, 0x0B840B7B, +0x0C840E7B, 0x0C840C7A, 0x0C840F7A, 0x0E850C7A, 0x0C840F7A, 0x0C840C7A, 0x0D840C7B, 0x0C840D7A, +0x0A840D7A, 0x0E840D7A, 0x0B840C7B, 0x0C840E7B, 0x0C840C7A, 0x0D840E7B, 0x0C840C7A, 0x0A840B7A, +0x09840C7B, 0x0C840C7B, 0x0C840C7A, 0x0C830D7B, 0x09840A7B, 0x0C840C7B, 0x0C840B7A, 0x0B850C7A, +0x0D850D7A, 0x0B840B7B, 0x0A840A7B, 0x0A840B7B, 0x0C840D7A, 0x0D840B7A, 0x0B840B7B, 0x0A840B7B, +0x0B840D7B, 0x0D840E7B, 0x0E840E7B, 0x0E830D7B, 0x0C840D7A, 0x0D840D7A, 0x0D840D7A, 0x0C840C7A, +0x0C840E7B, 0x0D840C7A, 0x0D840E7A, 0x0C840C7B, 0x0B840C7A, 0x0C840C7A, 0x0A850B7A, 0x0C840B7A, +0x0C850D7A, 0x0C840C7B, 0x0C840B7B, 0x0B840C7B, 0x0D840D7B, 0x0D840C7B, 0x0C840D7B, 0x0D840C7B, +0x0B840B7B, 0x0C840B7A, 0x0A840A7B, 0x0A84097B, 0x0A840B7B, 0x0D840F7A, 0x0F84107A, 0x0F840D7B, +0x0D840E7B, 0x0E830C7B, 0x0C840C7B, 0x0C840B7A, 0x0B840A7A, 0x0B840C7B, 0x0C840A7A, 0x0B840B7B, +0x0D840D7A, 0x0D840C7A, 0x0A840A7B, 0x0C840C7B, 0x0C840D7A, 0x0C840D7B, 0x0C840E7B, 0x0A840B7B, +0x0D840D7B, 0x0F850D7A, 0x0D840D7B, 0x0B840A7A, 0x0C840B7B, 0x09840B7A, 0x0A840D7B, 0x0A840A7B, +0x0C840C7A, 0x0C840C7B, 0x0E840C7A, 0x0B840D7A, 0x0E840E7A, 0x0F840C7A, 0x0B840E7A, 0x0D840A7A, +0x0A840B7B, 0x0B840C7B, 0x0F840C7A, 0x0B840D7B, 0x0B840C7B, 0x0D850C7A, 0x0C840C7B, 0x0B840D7B, +0x0B840B7B, 0x0E840B7B, 0x0B840B7B, 0x0D840E7A, 0x0D840C7B, 0x0A840B7B, 0x0C840E7A, 0x0E840F7A, +0x0E840E7A, 0x0C840C7A, 0x0B840B7B, 0x0B840D7A, 0x0C840C7B, 0x0B840D7B, 0x0B840B7B, 0x09840C7A, +0x0B840C7B, 0x0B840B7B, 0x0B850C7A, 0x0C840D7B, 0x0D840C7A, 0x0D840C7A, 0x0D840C7B, 0x0B850C7A, +0x0D840B7A, 0x0B840C7B, 0x0D840E7A, 0x0D840D7A, 0x0D840D7B, 0x0D840C7B, 0x0C840C7B, 0x0D850E7A, +0x0D840D7A, 0x0F840E7A, 0x0C840B7B, 0x0B840A7A, 0x0C84107A, 0x10840E7A, 0x0C850C7A, 0x0A840A7B, +0x0B840D7B, 0x0E840E7A, 0x0D840D7B, 0x0E840D7A, 0x0D840E7B, 0x0F840E7A, 0x0C840A7B, 0x0B830E7B, +0x0C840C7A, 0x0D840D7B, 0x0C840D7A, 0x0B840C7B, 0x0A840B7B, 0x0B840C7A, 0x0E84117A, 0x0C840C7A, +0x0C840C7B, 0x0B840C7B, 0x0C840C7B, 0x0B840E7A, 0x0E840C7A, 0x0D830A7B, 0x0C840A7B, 0x09840D7B, +0x0B840A7B, 0x0B840D7A, 0x0A840C7B, 0x0D840B7B, 0x0D840A7B, 0x0C840D7A, 0x0E840C7B, 0x0B840C7B, +0x0B840A7B, 0x0D840E7A, 0x0D840B7B, 0x0B840B7B, 0x0B840C7B, 0x0C850C7A, 0x0A840A7B, 0x0E840D7A, +0x0C840C7B, 0x0A840B7B, 0x0C840D7B, 0x0D840D7B, 0x0D850D7A, 0x0D850D7A, 0x0D840D7A, 0x0D840C7A, +0x0C850C7A, 0x0C840E7A, 0x0E840E7A, 0x0E840C7B, 0x0D840B7B, 0x0B840C7B, 0x0C840B7A, 0x0D840D7A, +0x0A840A7B, 0x0B840B7B, 0x0E840D7B, 0x0C840C7B, 0x0C840C7B, 0x0B840D7A, 0x0E840E7A, 0x0F840F7A, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0B830B7B, 0x0984087C, 0x0984097C, 0x0A830A7C, 0x0A830A7C, 0x0C840C7B, 0x0B830B7B, 0x09840A7B, +0x0A830C7C, 0x0D830B7B, 0x08840A7C, 0x09830C7B, 0x0983097C, 0x0A840A7B, 0x0B830B7B, 0x0C830C7B, +0x0C84097B, 0x0884077C, 0x0B83097B, 0x0984097C, 0x0A83077C, 0x09840A7B, 0x09840B7B, 0x0C830A7B, +0x09840C7B, 0x0B830A7C, 0x0C830B7B, 0x0B840C7B, 0x09830A7C, 0x0A830B7B, 0x0C830B7B, 0x0A840B7C, +0x0C84097B, 0x0884097C, 0x09840A7B, 0x0984097C, 0x0B830D7B, 0x0B830B7C, 0x09840B7B, 0x0A840A7B, +0x0884097C, 0x08830A7C, 0x0B830B7B, 0x0B840C7B, 0x09830A7C, 0x0D830E7B, 0x0B84087B, 0x0884087C, +0x09830A7C, 0x0A830A7C, 0x0A83097B, 0x09840A7B, 0x0A840B7B, 0x0B840A7B, 0x0A840A7B, 0x0A830A7B, +0x0984097C, 0x0A840A7C, 0x0A830B7C, 0x0B830B7C, 0x0B830A7C, 0x0983087C, 0x08830A7C, 0x0A83087B, +0x0A83097B, 0x0A830B7C, 0x0B830C7B, 0x0B830A7B, 0x0B830B7B, 0x0C830B7B, 0x0B840A7B, 0x0A84097B, +0x09840A7B, 0x0B840B7B, 0x0C830C7B, 0x0C830C7B, 0x0C830C7B, 0x0C830C7B, 0x0B830C7B, 0x0B830B7B, +0x0A84097B, 0x0A840B7B, 0x0884087C, 0x09840B7B, 0x0B83087B, 0x0984097C, 0x0A830C7B, 0x0B840B7B, +0x0B830B7B, 0x0A84087C, 0x0A830C7C, 0x0C830C7B, 0x0B830A7B, 0x0B830A7B, 0x0983097C, 0x0B840B7B, +0x0B840A7B, 0x0A830C7B, 0x0B830A7B, 0x0A840C7B, 0x0C830B7B, 0x0C830B7B, 0x0A830D7B, 0x0D830A7B, +0x0B830A7B, 0x0B830B7C, 0x0A84097C, 0x0A83097B, 0x0C830B7B, 0x0B830A7B, 0x0A84097B, 0x0B830A7B, +0x0B830C7B, 0x0B830A7B, 0x0C840C7B, 0x0C840A7B, 0x0B830E7B, 0x0B84097B, 0x0A840A7B, 0x0B840C7B, +0x0C840C7B, 0x0B830B7B, 0x0C830B7B, 0x0D830C7B, 0x0A840B7B, 0x0D830B7B, 0x0A83097B, 0x0984097C, +0x0C830B7B, 0x09840A7B, 0x0A830B7C, 0x0B83087B, 0x09830B7C, 0x0C84097B, 0x0A840B7B, 0x0A84097B, +0x0B830C7B, 0x0C830B7B, 0x0A830A7C, 0x09830A7C, 0x0A830B7B, 0x0B830A7C, 0x09830A7C, 0x0A830B7B, +0x0B830A7B, 0x0A830A7C, 0x09840A7B, 0x0B830B7B, 0x0B830B7B, 0x0B830B7B, 0x0A83097B, 0x0C830D7B, +0x0C840B7B, 0x0B840C7B, 0x0C830A7B, 0x09840B7B, 0x0B840B7B, 0x0A84097B, 0x0A840A7B, 0x0A840B7B, +0x0B840A7B, 0x09830A7C, 0x0B830B7C, 0x0983097C, 0x0983097C, 0x0B830B7C, 0x0B830C7B, 0x0B830C7B, +0x0A830A7C, 0x0B830C7B, 0x0B830A7C, 0x09840A7B, 0x0984087B, 0x0984087C, 0x09840C7B, 0x0C830D7B, +0x0D830C7B, 0x0B830B7C, 0x0C830B7B, 0x0C830B7B, 0x09830A7B, 0x08840A7C, 0x0B830A7B, 0x0A84077C, +0x0B830C7B, 0x0D830A7B, 0x0983097C, 0x0B830B7B, 0x0B840B7B, 0x0A830C7C, 0x0B830C7B, 0x0A830B7B, +0x0C830C7B, 0x0C830C7B, 0x0C830B7B, 0x0D830A7B, 0x08840C7C, 0x0A84087C, 0x0A840A7B, 0x0D83097B, +0x09830B7B, 0x0A830B7B, 0x0C840C7B, 0x0A830B7B, 0x0D830C7B, 0x0D830C7B, 0x0B840B7B, 0x0C840A7B, +0x0984097B, 0x0B84097B, 0x0B830A7C, 0x0B830A7C, 0x0B830A7B, 0x0B840B7B, 0x0A830C7B, 0x0A840A7C, +0x0B83087B, 0x0B840C7B, 0x0983097C, 0x0A830B7C, 0x0C830D7B, 0x0A84087B, 0x0B830C7B, 0x0C830C7B, +0x0C830C7B, 0x0C840D7B, 0x0B830A7B, 0x0A84097C, 0x0B830A7B, 0x0B83097C, 0x0B83097C, 0x07840A7C, +0x0A840B7B, 0x0983097C, 0x08840A7C, 0x0B840B7B, 0x0B830B7B, 0x0A830B7C, 0x0C830A7B, 0x0A84097C, +0x08840A7C, 0x0B830D7B, 0x0E830C7B, 0x0D830E7B, 0x0E830E7B, 0x0D830C7B, 0x0C830C7B, 0x0C830D7B, +0x0C830A7B, 0x0B840D7B, 0x0C840B7B, 0x0E830C7B, 0x0A840A7B, 0x0A830A7B, 0x0C830E7B, 0x0D840B7B, +0x0A83097B, 0x0984087B, 0x0883077C, 0x0783087D, 0x0883087C, 0x0A840C7B, 0x0C830A7B, 0x09830B7C, +0x0B830B7C, 0x09830C7B, 0x09840B7B, 0x0984097C, 0x0B840A7B, 0x0B830B7B, 0x0F830B7B, 0x0B830A7B, +0x0B83097C, 0x0984087C, 0x0A83097C, 0x0D830D7B, 0x0C830B7C, 0x0884087C, 0x0A84087C, 0x08830B7C, +0x0B830A7B, 0x0A840A7B, 0x09840C7B, 0x0C830B7B, 0x0B830A7B, 0x0A83097C, 0x0C830C7B, 0x08840C7B, +0x0984077C, 0x0B840C7B, 0x0D830B7B, 0x09830A7C, 0x09830A7C, 0x0B830A7B, 0x0A84097B, 0x08830C7B, +0x0C830B7B, 0x0A83097C, 0x0983097C, 0x0A830B7B, 0x0B830C7B, 0x0C830C7B, 0x0D830D7B, 0x0C830D7B, +0x0C830B7C, 0x0B830B7B, 0x0B83097B, 0x0884097C, 0x0B840B7B, 0x0B830B7B, 0x0A84087B, 0x08830A7C, +0x0B830C7B, 0x0C830C7B, 0x0B830B7B, 0x0A840B7C, 0x0D830E7B, 0x0C83097C, 0x08830A7C, 0x0B830C7B, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8D970A59, +0x0782097C, 0x0883087C, 0x0883087C, 0x0883087C, 0x0883087C, 0x0883087C, 0x0983097C, 0x0A830B7C, +0x0A83097C, 0x08830A7C, 0x0A83087C, 0x0783087D, 0x0A83087C, 0x0883097C, 0x08830A7C, 0x0A830A7C, +0x0B83087C, 0x0783077C, 0x0883087C, 0x0883097C, 0x0883077C, 0x0883097C, 0x0883097C, 0x0783077C, +0x0883087C, 0x08830A7C, 0x09830A7C, 0x09830A7B, 0x0983087C, 0x0783097C, 0x0983097C, 0x0A83087C, +0x0A830A7B, 0x0683087C, 0x0883077C, 0x0983097C, 0x08830A7C, 0x0983097C, 0x0983087C, 0x08830A7B, +0x0883077C, 0x0883077C, 0x0883097C, 0x0983087C, 0x0983097C, 0x0883097C, 0x0A830B7B, 0x0A83097C, +0x0883077C, 0x0783087C, 0x0883087C, 0x09830A7B, 0x09830A7B, 0x0A83097B, 0x0983087C, 0x0783087C, +0x0883087C, 0x0883087C, 0x0883097C, 0x0983097C, 0x0983097C, 0x0983097C, 0x0A830A7C, 0x0A83087C, +0x0783087C, 0x0883077C, 0x0783087C, 0x0883097C, 0x0A83097C, 0x0883087C, 0x0883097C, 0x0983097C, +0x0883087C, 0x0883087C, 0x0784077C, 0x0883087C, 0x0783087C, 0x0883077C, 0x0883087C, 0x0883077C, +0x0783067C, 0x0883097C, 0x0983087C, 0x0883077C, 0x0883097C, 0x0983097C, 0x0983087C, 0x0983097C, +0x08830A7C, 0x0A83097C, 0x0A83097C, 0x0983097C, 0x0A83097C, 0x0883077C, 0x0983097C, 0x0983087C, +0x09830A7C, 0x0A83097C, 0x08830A7C, 0x0C83087B, 0x0A83087C, 0x0883087C, 0x0A830A7C, 0x0983097C, +0x0983087C, 0x0A83097C, 0x0983087C, 0x0783087C, 0x0B830A7C, 0x0983087C, 0x0883097C, 0x09830A7C, +0x0983097C, 0x0A83077C, 0x0A830B7C, 0x0983097C, 0x09830A7C, 0x0B820B7B, 0x0983097C, 0x0983097C, +0x09830A7C, 0x0983097C, 0x0A830A7C, 0x09830A7B, 0x0C83097C, 0x0883097C, 0x0883087C, 0x08830A7C, +0x0983087C, 0x0983087C, 0x0A83077C, 0x08830A7C, 0x0A83097C, 0x0983097C, 0x0883097C, 0x0983097C, +0x0883087C, 0x0883097C, 0x0983097C, 0x09830A7C, 0x0A830A7C, 0x0A830A7C, 0x0983087C, 0x0883097C, +0x0983097C, 0x0983097C, 0x0983097C, 0x0983087C, 0x0883087C, 0x09830B7C, 0x0C830B7C, 0x09830A7C, +0x09830A7C, 0x0A83087C, 0x09830A7C, 0x09830A7C, 0x0883077C, 0x0983097C, 0x0883097C, 0x0983097C, +0x08830A7C, 0x0983087C, 0x08830A7C, 0x0C820B7C, 0x0B830B7C, 0x0B830A7B, 0x0A830A7C, 0x0B830B7C, +0x0B830C7B, 0x0C830B7B, 0x0A83097C, 0x0883087C, 0x0B830B7B, 0x0983077C, 0x0783077D, 0x08830A7C, +0x0A820C7C, 0x0A830A7C, 0x0983097C, 0x09830B7C, 0x0A83097C, 0x0883077C, 0x0983097C, 0x0883087C, +0x07830A7C, 0x0A83097C, 0x0883087C, 0x08830B7C, 0x0983097C, 0x0983097C, 0x08830A7C, 0x0883097C, +0x0A830A7C, 0x0983097C, 0x0983087C, 0x0A830A7C, 0x0983077C, 0x0A83097C, 0x0783087C, 0x08830A7C, +0x0883087C, 0x0883087C, 0x08830B7C, 0x0A83087C, 0x0B830B7C, 0x0A830C7B, 0x09830A7C, 0x0A830A7C, +0x0883087C, 0x0983087C, 0x0883097C, 0x0A83087C, 0x0983077C, 0x08830A7C, 0x08830A7C, 0x0A83087C, +0x0983087C, 0x07830A7C, 0x0983097C, 0x08830A7C, 0x0B830B7B, 0x0A83097C, 0x0883087C, 0x0A830A7C, +0x0B830A7C, 0x0983097C, 0x0A830A7C, 0x0A830A7C, 0x0983097C, 0x0783097C, 0x0883097C, 0x0783077C, +0x0883087C, 0x0783087C, 0x0883097C, 0x0A830A7C, 0x0983097C, 0x0A83097C, 0x09830A7C, 0x0883077C, +0x0783097C, 0x0C830B7C, 0x0A830C7B, 0x0C83097B, 0x0883077C, 0x0983097C, 0x0883097C, 0x09830A7C, +0x0A830A7B, 0x0A830A7C, 0x08830A7C, 0x0A830A7C, 0x0A830B7C, 0x0B83087C, 0x0983087C, 0x08830A7B, +0x0B830B7C, 0x0B830B7C, 0x0A830A7C, 0x0983097C, 0x0983097C, 0x09830A7B, 0x0B83097C, 0x0A83097C, +0x0883087C, 0x0983077C, 0x0983077C, 0x0783097C, 0x0883097C, 0x0A830B7C, 0x0B83097C, 0x0A830A7C, +0x0882097C, 0x0983087C, 0x0783077C, 0x0783077C, 0x0783087C, 0x0783077C, 0x0783097C, 0x0B83097C, +0x0883087C, 0x0883087C, 0x09830B7B, 0x0A83097C, 0x0883097C, 0x0883097C, 0x0B83097C, 0x07830B7C, +0x0783077C, 0x09830B7C, 0x0B83097B, 0x0883087C, 0x0783097C, 0x0883097C, 0x0983087C, 0x0883077C, +0x0A830B7C, 0x09830A7C, 0x0983087C, 0x0783077C, 0x0783077C, 0x0883097C, 0x0883087C, 0x0883077C, +0x0783067D, 0x0683077C, 0x0983097C, 0x0883097C, 0x0983097C, 0x0783077C, 0x0883097C, 0x0B830A7B, +0x0A830A7C, 0x0A83087C, 0x09830C7C, 0x0A83087C, 0x0783097C, 0x0A830A7C, 0x0983087C, 0x0883097C, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0682067D, 0x0883087C, 0x0882087D, 0x0882077C, 0x0782077C, 0x0883077D, 0x0882087C, 0x0882087C, +0x0882077C, 0x0882077C, 0x0682077D, 0x0782067D, 0x0682077D, 0x0782067D, 0x0783077C, 0x0882087C, +0x0883087C, 0x0682067D, 0x0682067D, 0x0683077C, 0x0782067C, 0x0682067D, 0x0782077C, 0x0882077C, +0x0782077D, 0x0782087C, 0x0782077C, 0x0882077C, 0x0883077C, 0x0682077D, 0x0682077C, 0x0882077D, +0x0882077C, 0x0582067D, 0x0682077D, 0x0782087D, 0x0883077C, 0x0882067C, 0x0882067D, 0x0782077D, +0x0882077C, 0x0682067D, 0x0582057D, 0x0782077D, 0x0882067C, 0x0783087C, 0x0882087C, 0x0782067D, +0x0783077D, 0x0682077D, 0x0882087C, 0x0982097C, 0x0982097C, 0x0983097C, 0x0882097C, 0x0882087C, +0x0882077C, 0x0882087C, 0x0882087C, 0x0782077D, 0x0882077C, 0x0782077C, 0x0682067D, 0x0683077C, +0x0782087C, 0x0782077C, 0x0682067D, 0x0882077C, 0x0683067D, 0x0682077D, 0x0782087C, 0x0682077C, +0x0683067C, 0x0682067D, 0x0582057D, 0x0582057D, 0x0582057D, 0x0682067D, 0x0783077C, 0x0882077D, +0x0682067D, 0x0682067D, 0x0682077D, 0x0882097C, 0x0882067C, 0x0682077D, 0x0682077D, 0x0882077C, +0x0782077C, 0x0882077D, 0x0682077C, 0x0782077D, 0x0682077D, 0x0883087C, 0x0782067D, 0x0782097C, +0x0882087D, 0x0683087D, 0x0A82087C, 0x0782087C, 0x0782067D, 0x0783077C, 0x0882087C, 0x0782087C, +0x0782067C, 0x0782087D, 0x0782077D, 0x0782067D, 0x0783087C, 0x0682077D, 0x0882077D, 0x0882087C, +0x0882077C, 0x0782087C, 0x0782097C, 0x0A82097C, 0x0782087C, 0x0983097C, 0x0883087C, 0x0883087C, +0x0883087C, 0x0882087C, 0x0782097C, 0x0882077D, 0x0783087C, 0x0782067C, 0x0682087C, 0x0882077C, +0x0882077C, 0x0882067D, 0x0782077D, 0x0983087C, 0x0783077C, 0x0782067C, 0x0782077D, 0x0783087C, +0x0982097C, 0x0982087C, 0x0882087C, 0x0882077D, 0x0882087D, 0x0782087C, 0x0883087C, 0x0882087C, +0x0982087C, 0x0882087C, 0x0883087C, 0x0982087C, 0x0882097C, 0x0983087C, 0x0883087C, 0x0782087C, +0x0782067D, 0x0883087C, 0x0982097C, 0x0782057D, 0x0782087C, 0x0783087C, 0x0883087C, 0x0682077D, +0x0782067D, 0x0782097C, 0x0882077C, 0x0882077C, 0x0782077D, 0x0782067D, 0x0582067D, 0x0582057D, +0x0682067D, 0x0682077D, 0x0782077D, 0x0882087C, 0x0682067D, 0x07820A7C, 0x0883067C, 0x0682067D, +0x0783087C, 0x0982077C, 0x0782077D, 0x0782077D, 0x0982077C, 0x0782067C, 0x0783077C, 0x0782077C, +0x0683087C, 0x0882087C, 0x0682067D, 0x0682087D, 0x0783077C, 0x0882087C, 0x0782077C, 0x0682077D, +0x0782067D, 0x0582067D, 0x0683067D, 0x0682087C, 0x0882077C, 0x0682077D, 0x0682067D, 0x0782077C, +0x0882067D, 0x0782077D, 0x0782077C, 0x0A83087C, 0x0782097C, 0x0882097C, 0x0982077C, 0x0883087C, +0x0883077C, 0x0683077C, 0x0783077C, 0x0882087C, 0x0682067D, 0x0682077C, 0x0882067C, 0x0882087C, +0x0782077D, 0x0782067C, 0x0882077D, 0x0882077C, 0x0782087D, 0x0982087C, 0x0882077D, 0x0783067C, +0x0783087C, 0x0982087C, 0x0882077C, 0x0682077C, 0x0783087C, 0x0883077C, 0x0682067D, 0x0682067D, +0x0682067D, 0x0782067D, 0x0782067D, 0x0882077C, 0x0882067C, 0x0882087C, 0x0782097C, 0x0782077D, +0x0682087D, 0x0882097C, 0x0882087C, 0x0882097C, 0x0782077D, 0x0682077C, 0x0883087C, 0x0882067C, +0x0883077C, 0x0883077C, 0x0882077D, 0x0782077D, 0x0983087C, 0x0782087C, 0x0782097C, 0x0782077D, +0x0882077C, 0x0783077C, 0x0882087C, 0x0882087C, 0x0782077D, 0x0782087D, 0x0882077C, 0x0682067D, +0x0882067C, 0x0683077C, 0x0582067D, 0x0782077C, 0x0782077C, 0x0682097C, 0x0982087C, 0x0782087C, +0x0982087C, 0x0882077D, 0x0882087D, 0x0882087D, 0x0882087D, 0x0882087C, 0x0783077C, 0x0782077C, +0x0782077C, 0x0883097C, 0x0782077C, 0x0782087C, 0x0682077C, 0x0883097C, 0x0882067C, 0x0882087C, +0x0582067C, 0x08830A7C, 0x0883077C, 0x0782077D, 0x0782077D, 0x0782067C, 0x0782087C, 0x0682067D, +0x0683077D, 0x0982087C, 0x0782077D, 0x0782077C, 0x0882087C, 0x0882087C, 0x0782087C, 0x0782087C, +0x0782077D, 0x0782087C, 0x0882077C, 0x0682077D, 0x0682067D, 0x0782077D, 0x0782077C, 0x0882077C, +0x0782077C, 0x0982087C, 0x0682077D, 0x0782077C, 0x0782077D, 0x0782077D, 0x0782067D, 0x0682067D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0682067D, 0x0682057D, 0x0682067D, 0x0682077D, 0x0782077D, 0x0682067D, 0x0682067D, 0x0682057D, +0x0682077D, 0x0782077D, 0x0782067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682077D, +0x0782067D, 0x0682057D, 0x0582057D, 0x0682057D, 0x0582057D, 0x0682067D, 0x0582057D, 0x0682067D, +0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0782067D, 0x0682067D, 0x0682067D, 0x0682077D, +0x0682067D, 0x0482067D, 0x0682067D, 0x0682067D, 0x0682057D, 0x0782057D, 0x0682077D, 0x0682067D, +0x0582067D, 0x0782057D, 0x0582057D, 0x0582047D, 0x0582067D, 0x0782077D, 0x0682057D, 0x0582067D, +0x0682067D, 0x0782077D, 0x0782077D, 0x0782067D, 0x0782067D, 0x0782067D, 0x0782077D, 0x0782077D, +0x0782077D, 0x0782077D, 0x0781077D, 0x0782077D, 0x0782077D, 0x0682067D, 0x0682057D, 0x0582067D, +0x0681077D, 0x0782067C, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682077D, 0x0682067D, 0x0682057D, +0x0582057D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, +0x0682077D, 0x0782067D, 0x0682067D, 0x0682067D, 0x0582067D, 0x0781067D, 0x0682057D, 0x0781077D, +0x0782067D, 0x0682067D, 0x0781067D, 0x0682067D, 0x0782067D, 0x0682067D, 0x0781077D, 0x0782077D, +0x0682057D, 0x0682087D, 0x0782067D, 0x0682067D, 0x0682067D, 0x0582067D, 0x0682067D, 0x0682067D, +0x0682067D, 0x0682067D, 0x0782077D, 0x0781057D, 0x0582057D, 0x0682067D, 0x0682077D, 0x0782067D, +0x0782077D, 0x0782077D, 0x0682067D, 0x0782067C, 0x0782077D, 0x0682067D, 0x0682067D, 0x0682067D, +0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682057D, 0x0582067D, 0x0682067D, 0x0682067D, +0x0881067D, 0x0682067D, 0x0881067D, 0x0682057D, 0x0682057D, 0x0682067D, 0x0682077D, 0x0782067D, +0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0582057D, 0x0682067D, 0x0682067D, +0x0682067D, 0x0682067D, 0x0682077D, 0x0782077D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0582067D, +0x0682067D, 0x0781077D, 0x0782067D, 0x0682067D, 0x0582057D, 0x0682067D, 0x0582067D, 0x0682067D, +0x0782067D, 0x0782067D, 0x0682067D, 0x0682057D, 0x0482057D, 0x0582057D, 0x0582047E, 0x0482047E, +0x0582057D, 0x0582067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682057D, 0x0682077D, 0x0682057D, +0x0582057D, 0x0682087D, 0x0582067D, 0x0682067D, 0x0781077D, 0x0682067D, 0x0582057D, 0x0682067D, +0x0582077D, 0x0782077D, 0x0682067D, 0x0582077D, 0x0682057D, 0x0682077D, 0x0782067D, 0x0682077D, +0x0582057D, 0x0682067D, 0x0682067D, 0x0582057D, 0x0682067D, 0x0682057D, 0x0682057D, 0x0582067D, +0x0782087D, 0x0682067D, 0x0582067D, 0x0782077D, 0x0682077D, 0x0881077D, 0x0782077D, 0x0782067D, +0x0782067D, 0x0582057D, 0x0682057D, 0x0682067D, 0x0782057D, 0x0682057D, 0x0582077D, 0x0582067D, +0x0682067D, 0x0682067D, 0x0582067D, 0x0682067D, 0x0682057D, 0x0682077D, 0x0682067D, 0x0781077D, +0x0682067D, 0x0682067D, 0x0682077D, 0x0782077D, 0x0782067D, 0x0682057D, 0x0682067D, 0x0582067D, +0x0682057D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682077D, 0x0682077D, 0x0682067D, +0x0682067D, 0x0682067D, 0x0782067D, 0x0682057D, 0x0682067D, 0x0682067D, 0x0682057D, 0x0582057D, +0x0682067D, 0x0582057D, 0x0682067D, 0x0682067D, 0x0682077D, 0x0782067D, 0x0682067D, 0x0682067D, +0x0682067D, 0x0782067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0482047D, 0x0582057D, 0x0682067D, +0x0582067D, 0x0682047D, 0x0582057D, 0x0782067D, 0x0582067D, 0x0682067D, 0x0682077D, 0x0782077D, +0x0682067D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0582067D, 0x0682067D, 0x0682067D, 0x0682067D, +0x0682057D, 0x0582067D, 0x0682067D, 0x0682067D, 0x0782077D, 0x0782067D, 0x0682077D, 0x0682047D, +0x0582067D, 0x0782077D, 0x0582067D, 0x0782067D, 0x0782057D, 0x0682067D, 0x0682067D, 0x0782067D, +0x0582057D, 0x0582057D, 0x0682067D, 0x0782077D, 0x0682067D, 0x0682067D, 0x0682067D, 0x0682077D, +0x0781067D, 0x0682067D, 0x0682057D, 0x0582067D, 0x0782067D, 0x0682067D, 0x0582067D, 0x0781077D, +0x0582057D, 0x0682067D, 0x0682077D, 0x0682067D, 0x0582067D, 0x0782067D, 0x0782077D, 0x0782077D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0582047E, 0x0482047E, 0x0581067D, 0x0581057D, 0x0581057D, 0x0581057E, 0x0681067D, 0x0681067D, +0x0681047D, 0x0481077D, 0x0681067D, 0x0581047D, 0x0581047D, 0x0482057E, 0x0681047D, 0x0581067D, +0x0581067D, 0x0582057E, 0x0482047E, 0x0481057D, 0x0581047D, 0x0582047E, 0x0582057D, 0x0681067D, +0x0581057D, 0x0581067D, 0x0582057E, 0x0581057D, 0x0381047E, 0x0481047E, 0x0581047D, 0x0581057D, +0x0582047D, 0x0381057D, 0x0582057D, 0x0581057D, 0x0681047D, 0x0581047E, 0x0581067D, 0x0581047E, +0x0581047E, 0x0681067D, 0x0581037D, 0x0382047E, 0x0482047E, 0x0482037E, 0x0381047E, 0x0581057D, +0x0681067D, 0x0581057E, 0x0581057E, 0x0581057D, 0x0582047E, 0x0581047D, 0x0482047E, 0x0581057D, +0x0581057E, 0x0581057E, 0x0481057D, 0x0581057E, 0x0581057E, 0x0581057E, 0x0581047D, 0x0581057D, +0x0581057E, 0x0582047E, 0x0481057D, 0x0581067D, 0x0581057E, 0x0681067D, 0x0681057D, 0x0581057D, +0x0581067D, 0x0681067D, 0x0781067D, 0x0681067E, 0x0781067D, 0x0681067D, 0x0582067D, 0x0581057D, +0x0582057D, 0x0482057D, 0x0482057E, 0x0581067D, 0x0581047D, 0x0481057E, 0x0682057D, 0x0581067D, +0x0681057D, 0x0481057D, 0x0582057E, 0x0581057D, 0x0581057D, 0x0681067D, 0x0681067D, 0x0581057D, +0x0481067D, 0x0781067D, 0x0581057E, 0x0581057D, 0x0681057D, 0x0482047E, 0x0482047E, 0x0582057D, +0x0581057D, 0x0581057D, 0x0582047D, 0x0481057D, 0x0481047E, 0x0481057E, 0x0582047D, 0x0581057D, +0x0581057D, 0x0681057D, 0x0681067D, 0x0581057E, 0x0582057D, 0x0582057E, 0x0682067D, 0x0581057D, +0x0581057D, 0x0581057D, 0x0582057D, 0x0482047E, 0x0581067D, 0x0481057D, 0x0581057D, 0x0581057E, +0x0582067D, 0x0681057D, 0x0582047D, 0x0481047E, 0x0481057E, 0x0581067D, 0x0581057E, 0x0582057D, +0x0581057D, 0x0581057D, 0x0582057E, 0x0581057E, 0x0581057D, 0x0581067D, 0x0581047D, 0x0482037E, +0x0382047E, 0x0581057D, 0x0581057D, 0x0581057D, 0x0482047E, 0x0481037E, 0x0481067D, 0x0581067D, +0x0681067D, 0x0681057D, 0x0581067D, 0x0581057D, 0x0582057D, 0x0481047E, 0x0482047E, 0x0581057D, +0x0681057D, 0x0582057D, 0x0482047D, 0x0582047E, 0x0482047E, 0x0482047E, 0x0581057D, 0x0681057D, +0x0581057D, 0x0581037D, 0x0481057D, 0x0581057D, 0x0482047E, 0x0481057D, 0x0482047E, 0x0681057D, +0x0482047D, 0x0581067D, 0x0581047D, 0x0581057E, 0x0681067D, 0x0482057D, 0x0482047E, 0x0581057D, +0x0482057D, 0x0681067D, 0x0581057D, 0x0481057E, 0x0682047D, 0x0582057D, 0x0581057D, 0x0481067D, +0x0582047D, 0x0581057D, 0x0481067D, 0x0481047E, 0x0482057E, 0x0581037D, 0x0482047E, 0x0581047D, +0x0681067D, 0x0681057D, 0x0482057D, 0x0581077D, 0x0681067D, 0x0781067D, 0x0681067D, 0x0581067D, +0x0581067D, 0x0582047E, 0x0482057D, 0x0482057D, 0x0581057D, 0x0481047E, 0x0581047D, 0x0681057D, +0x0482057D, 0x0582057D, 0x0581047D, 0x0481057D, 0x0582047D, 0x0481057D, 0x0581067D, 0x0681067D, +0x0681057D, 0x0581057E, 0x0581057D, 0x0581047D, 0x0481057D, 0x0581067D, 0x0581047D, 0x0482057E, +0x0581057E, 0x0481037E, 0x0581057D, 0x0481057E, 0x0481057D, 0x0581057D, 0x0681057D, 0x0581057D, +0x0581067D, 0x0581047D, 0x0581057E, 0x0581057D, 0x0482057D, 0x0581057D, 0x0581057D, 0x0582047D, +0x0482047E, 0x0482047E, 0x0582047E, 0x0681067D, 0x0581067D, 0x0681057D, 0x0581057D, 0x0581057D, +0x0581057D, 0x0482047E, 0x0482037E, 0x0382037E, 0x0481057D, 0x0481057E, 0x0581057E, 0x0581047E, +0x0482047E, 0x0482047E, 0x0582047D, 0x0581057E, 0x0581067D, 0x0581057D, 0x0481057D, 0x0581057D, +0x0581057E, 0x0581067D, 0x0681057D, 0x0681067D, 0x0681057D, 0x0582057D, 0x0581057D, 0x0581057D, +0x0581057D, 0x0581067D, 0x0681077D, 0x0681057D, 0x0481057E, 0x0681067D, 0x0481047E, 0x0481047E, +0x0581067D, 0x0681057D, 0x0481057E, 0x0482047E, 0x0581047E, 0x0582057D, 0x0481057D, 0x0581067D, +0x0681057D, 0x0481047E, 0x0481057D, 0x0581057D, 0x0581057D, 0x0581057D, 0x0582047D, 0x0581047D, +0x0481047E, 0x0481057E, 0x0682067D, 0x0581057D, 0x0582047D, 0x0581057E, 0x0481047E, 0x0482047E, +0x0481067D, 0x0681047D, 0x0481057D, 0x0681067D, 0x0781067D, 0x0681057D, 0x0581067D, 0x0581057D, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0381037E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0381047E, 0x0481047E, 0x0481037E, +0x0481047E, 0x0481037E, 0x0381047E, 0x0481037D, 0x0481047E, 0x0381037E, 0x0381047E, 0x0481037E, +0x0481037E, 0x0481047E, 0x0581037D, 0x0381027E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0481047E, +0x0481047E, 0x0381037E, 0x0381027E, 0x0381037E, 0x0381027E, 0x0381027E, 0x0281037E, 0x0381037E, +0x0281037E, 0x0481047E, 0x0481037E, 0x0481057E, 0x0481027E, 0x0381037E, 0x0381047E, 0x0481047E, +0x0381037E, 0x0381037E, 0x0481047E, 0x0481037E, 0x0381027E, 0x0381027E, 0x0281027E, 0x0281027E, +0x0281027E, 0x0281027E, 0x0281027E, 0x0281037E, 0x0281037E, 0x0380037E, 0x0381037E, 0x0380037E, +0x0381037E, 0x0381037E, 0x0381047E, 0x0481037E, 0x0481047E, 0x0481037E, 0x0481037E, 0x0481047E, +0x0481047E, 0x0481047E, 0x0481037E, 0x0381037E, 0x0381027E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0381047E, 0x0381047E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0481037E, 0x0381037E, 0x0381047E, +0x0481047E, 0x0381037E, 0x0381037E, 0x0481047E, 0x0381037E, 0x0481047E, 0x0481047D, 0x0481047E, +0x0481047E, 0x0481037E, 0x0481037E, 0x0481047E, 0x0481047E, 0x0581047E, 0x0481047E, 0x0381047E, +0x0481057E, 0x0481047E, 0x0481037E, 0x0481037E, 0x0381047E, 0x0481047E, 0x0381037E, 0x0381037E, +0x0381047E, 0x0381047E, 0x0481037E, 0x0381037E, 0x0281027E, 0x0381037E, 0x0381037E, 0x0481047E, +0x0481047E, 0x0381047E, 0x0381047E, 0x0481047E, 0x0481047E, 0x0481047E, 0x0381047E, 0x0481047E, +0x0381037E, 0x0481047E, 0x0381047E, 0x0381037E, 0x0481037E, 0x0481047E, 0x0381037E, 0x0481047E, +0x0481037E, 0x0381037E, 0x0381037E, 0x0381047E, 0x0481047E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0381037E, 0x0381037E, 0x0481047E, 0x0481037E, 0x0481037E, 0x0481047E, 0x0381037E, 0x0481047E, +0x0381047E, 0x0481037E, 0x0281037E, 0x0281027E, 0x0381037E, 0x0481047E, 0x0381047E, 0x0481037E, +0x0481047D, 0x0381057E, 0x0481037E, 0x0381037E, 0x0381027E, 0x0381037E, 0x0381037E, 0x0281047E, +0x0481047E, 0x0381037E, 0x0481037E, 0x0281037E, 0x0381047E, 0x0381037E, 0x0381037E, 0x0481047E, +0x0381037E, 0x0381047E, 0x0381027E, 0x0381037E, 0x0481037E, 0x0281037E, 0x0481037E, 0x0481047E, +0x0381037E, 0x0381047E, 0x0481037E, 0x0481047E, 0x0381047E, 0x0381037E, 0x0281027E, 0x0381037E, +0x0381037E, 0x0481047D, 0x0381037E, 0x0281047E, 0x0481037D, 0x0481047E, 0x0581047E, 0x0381047E, +0x0381037E, 0x0381037E, 0x0281027E, 0x0481037E, 0x0381047E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0381047E, 0x0481037E, 0x0381027E, 0x0381047E, 0x0581047E, 0x0481057E, 0x0481047E, 0x0581047E, +0x0481047E, 0x0481047E, 0x0281037E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0281047E, +0x0481037E, 0x0381047E, 0x0381037E, 0x0381027E, 0x0281037E, 0x0381037E, 0x0380037E, 0x0381037E, +0x0481047E, 0x0581057E, 0x0481047E, 0x0381037E, 0x0380037E, 0x0481037E, 0x0481047E, 0x0481037E, +0x0281037E, 0x0480037E, 0x0381027E, 0x0381047E, 0x0381047E, 0x0381047E, 0x0481047E, 0x0381037E, +0x0381047E, 0x0481047E, 0x0581057E, 0x0481047E, 0x0381037E, 0x0481047E, 0x0381047E, 0x0481037E, +0x0381037E, 0x0481047E, 0x0481037E, 0x0481037E, 0x0381037E, 0x0381037E, 0x0381037E, 0x0381037E, +0x0381037E, 0x0381037E, 0x0381037E, 0x0381047E, 0x0481047E, 0x0581047E, 0x0481047E, 0x0381037E, +0x0281037E, 0x0381037E, 0x0381037E, 0x0281037E, 0x0381037E, 0x0381037E, 0x0381047E, 0x0381037E, +0x0381037E, 0x0281027E, 0x0381037E, 0x0381037E, 0x0481047D, 0x0481047E, 0x0481047E, 0x0481047E, +0x0481047E, 0x0381047E, 0x0481047E, 0x0481047E, 0x0381027E, 0x0281037E, 0x0281047E, 0x0481047E, +0x0481047E, 0x0381047E, 0x0481037E, 0x0281037E, 0x0481037E, 0x0381037E, 0x0381027E, 0x0381037E, +0x0481057E, 0x0481047D, 0x0481047E, 0x0481047E, 0x0381037E, 0x0481037E, 0x0481047E, 0x0481047E, +0x0481037E, 0x0481037E, 0x0381037E, 0x0481057E, 0x0481047E, 0x0481037E, 0x0381037E, 0x0381037E, +0x0381037E, 0x0381037E, 0x0481047E, 0x0481037E, 0x0381047E, 0x0481047E, 0x0481047E, 0x0381047E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0380037E, 0x0380037E, 0x0380027E, 0x0280027E, 0x0280037E, 0x0280027E, 0x0280037E, 0x0381027E, +0x0281027E, 0x0380027E, 0x0380027E, 0x0280037E, 0x0280027E, 0x0280027E, 0x0180027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0380027E, 0x0280027E, 0x0181017F, 0x0180027E, 0x0280017E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0280017E, 0x0180027E, 0x0280017E, 0x0180027E, 0x0280027E, 0x0280027E, +0x0280037E, 0x0381027E, 0x0380037E, 0x0280027E, 0x0180027E, 0x0281017F, 0x0180027E, 0x0380027E, +0x0380027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0380037E, 0x0280027E, 0x0281027E, 0x0281027E, +0x0281027E, 0x0280027E, 0x0281027E, 0x0280027E, 0x0281027E, 0x0281027E, 0x0280027E, 0x0280027E, +0x0281027E, 0x0281027E, 0x0280027E, 0x0281027E, 0x0281027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0280027E, 0x0180027F, 0x0280027E, 0x0280027E, 0x0280027E, 0x0180027E, +0x0280027E, 0x0180027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280037E, +0x0280037E, 0x0380027E, 0x0281027E, 0x0281027E, 0x0280027E, 0x0280027E, 0x0280037E, 0x0380027E, +0x0280027E, 0x0280027E, 0x0380037E, 0x0380027E, 0x0280027E, 0x0280027E, 0x0181017F, 0x0280027E, +0x0280037E, 0x0380037E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0380027E, 0x0280027E, 0x0281027E, +0x0280027E, 0x0181017F, 0x0181017F, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0181017F, +0x0180027E, 0x0280027E, 0x0280027F, 0x0280027E, 0x0280027E, 0x0280017E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0280027E, 0x0281027E, 0x0380037E, 0x0380037E, 0x0380027E, 0x0280017E, +0x0180027E, 0x0280027E, 0x0280037E, 0x0381027E, 0x0280017E, 0x0280027E, 0x0180027E, 0x0280027E, +0x0280017E, 0x0181017F, 0x0181017F, 0x0280027E, 0x0280027E, 0x0181027E, 0x0280027E, 0x0280027F, +0x0280027E, 0x0281027E, 0x0280037E, 0x0380027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0380037E, +0x0280037E, 0x0380027E, 0x0280027E, 0x0280027E, 0x0180027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280017E, 0x0180027E, 0x0180017F, 0x0280027E, 0x0180017E, 0x0180017F, 0x0180027E, +0x0280027E, 0x0281027E, 0x0281027E, 0x0280027E, 0x0280027E, 0x0280017F, 0x0280027E, 0x0280037E, +0x0280027E, 0x0180027E, 0x0380027E, 0x0280037E, 0x0280037E, 0x0180027E, 0x0180027E, 0x0280027E, +0x0180027E, 0x0380027E, 0x0281017E, 0x0180027E, 0x0380027E, 0x0280037E, 0x0380037E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0281027E, 0x0280027E, 0x0380037E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280037E, 0x0280027E, 0x0280027E, 0x0180027E, 0x0380037E, 0x0380037E, 0x0380037E, 0x0280037E, +0x0280037E, 0x0281027E, 0x0380027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0181017F, +0x0180037E, 0x0280027E, 0x0281027E, 0x0280027E, 0x0280017E, 0x0181017E, 0x0280027E, 0x0180027E, +0x0180027E, 0x0180027E, 0x0280037E, 0x0380037E, 0x0380027E, 0x0280017E, 0x0280027F, 0x0280027F, +0x0280027E, 0x0181017F, 0x0280027E, 0x0280017E, 0x0180017F, 0x0280027E, 0x0280027E, 0x0280017E, +0x0280027E, 0x0280037E, 0x0280027E, 0x0380037E, 0x0381027E, 0x0280027E, 0x0281027E, 0x0281027E, +0x0280037E, 0x0381037E, 0x0380037E, 0x0380027E, 0x0381027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0280027E, 0x0280037E, 0x0280037E, 0x0380027E, 0x0380027E, 0x0380037E, +0x0280027E, 0x0181017F, 0x0180017E, 0x0181017F, 0x0280027E, 0x0180027E, 0x0180027E, 0x0280027E, +0x0280027E, 0x0280027E, 0x0380037E, 0x0380027E, 0x0280027E, 0x0280037E, 0x0380037E, 0x0281027E, +0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280037E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0281027E, 0x0280027E, 0x0180027E, 0x0280037E, 0x0280027E, 0x0280027E, 0x0180017F, 0x0180027E, +0x0280027E, 0x0180027E, 0x0280017E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0280027E, 0x0280037E, 0x0380027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x0380027E, 0x0380027E, 0x0280027E, 0x0281027E, 0x0281027E, 0x0280027E, 0x0280027E, 0x0280027E, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, 0x8DAB8D37, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0080017F, 0x0080007F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180007F, 0x0080007F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0180017F, 0x0080007F, 0x0180017F, 0x0280017F, +0x0180027F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0280017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0180017F, +0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180007F, 0x0080007F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0080017E, 0x0080007F, 0x0080007F, 0x0180017F, 0x0080017F, 0x0180017F, +0x0180017F, 0x0180027F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0080007F, 0x0180017F, +0x0180017F, 0x0180027F, 0x0180017F, 0x0080007F, 0x0080017E, 0x0180007F, 0x0080017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180007F, 0x0180017F, 0x0180017F, 0x0180007F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180007F, 0x0180017F, 0x0080007F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0280017F, +0x0180017F, 0x0180007F, 0x0080017F, 0x0180007F, 0x0180017F, 0x0280017F, 0x0180017F, 0x0080017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180007F, 0x0180027F, +0x0180007F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0080017F, +0x0080017F, 0x0180017F, 0x0180007F, 0x0080017F, 0x0180007F, 0x0180017E, 0x0180027F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180017F, 0x0180007F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0280027F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180017F, 0x0180017F, 0x0080017F, 0x0180007F, +0x0080007F, 0x0080017F, 0x0180017F, 0x0080017F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0080007F, +0x0080017F, 0x0180007F, 0x0080007F, 0x0080007F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180027F, 0x0280017F, 0x0180017F, 0x0080007F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180027F, 0x0280017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017E, 0x0280027F, 0x0280017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0080017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0280027F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180007F, 0x0180007F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017E, 0x0180017F, 0x0180017F, 0x0080007F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0080017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180027F, +0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, 0x0180017F, +0x0180017F, 0x0180017F, 0x0280017F, 0x0180007F, 0x0180017F, 0x0180017F, 0x0080007F, 0x0180017F, }; #endif diff --git a/source/ngc/images/saveicon.h b/source/ngc/images/saveicon.h index 311be755..51e211f8 100644 --- a/source/ngc/images/saveicon.h +++ b/source/ngc/images/saveicon.h @@ -5,71 +5,135 @@ #ifndef _IMGSAVEICON_ #define _IMGSAVEICON_ -const unsigned long saveicon[32*32] = { -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, 0x579A5753, -0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, -0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, -0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, -0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, 0x589B5852, -0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, -0x599B5951, 0x599B5951, 0x599B5951, 0x599B5951, 0x5A9B5951, 0x599B5951, 0x599B5951, 0x599B5951, -0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, -0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, 0x5A9B5A51, -0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, -0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5B51, 0x5B9C5C50, 0x5B9C5B51, -0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, -0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, -0x5D9C5C50, 0x5C9C5D50, 0x5C9C5C50, 0x5D9C5C50, 0x5D9C5C50, 0x5D9C5C50, 0x5D9C5C50, 0x5C9C5C50, -0x5C9C5C50, 0x5C9C5D50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5C50, 0x5C9C5D50, -0x5D9C5D50, 0x5E9C5E4F, 0x5D9C5E4F, 0x5E9C5D4F, 0x5E9C5E4F, 0x5D9C5E4F, 0x5D9C5E4F, 0x5E9C5D4F, -0x5E9C5E4F, 0x5E9C5E4F, 0x5D9C5D50, 0x5D9C5D50, 0x5D9C5D50, 0x5E9C5E4F, 0x5E9C5D4F, 0x5E9C5D4F, -0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5F9D5E4F, 0x5E9D5E4F, -0x5E9D5E4F, 0x5E9D5F4F, 0x5E9D5E4F, 0x5F9D5E4F, 0x5E9D5F4F, 0x5E9D5E4F, 0x5E9D5E4F, 0x5F9D5E4F, -0x5F9B5351, 0x27860075, 0x00862775, 0x5F9D5F4E, 0x27860075, 0x12882770, 0x00800080, 0x00800080, -0x00800080, 0x1F8F4765, 0x5F9D5F4F, 0x5A93275E, 0x00800080, 0x26914D62, 0x5F9D5F4E, 0x5F9D5F4E, -0x60952C5B, 0x6551C69C, 0xCD631B91, 0x53974658, 0x3761D091, 0xA766468F, 0xD658D898, 0xD85AD897, -0xD755D399, 0x89741F81, 0x549B6051, 0x337C6179, 0xD454D49A, 0x7B77267F, 0x609D604E, 0x609D604E, -0x609A4654, 0x2F53BB9B, 0xC5595197, 0x3A903363, 0x5E58C998, 0x5D69428D, 0xCA4ACBA0, 0xCC4CCC9F, -0xCB49C7A1, 0xC554699A, 0x2D95615B, 0x136EA387, 0xD050D09C, 0xBB67068D, 0x609E604E, 0x619D604E, -0x629D624D, 0x0D5E9891, 0xBC4D779F, 0x27881370, 0x9E4AC1A1, 0x326B3E8C, 0xBA3ABBAA, 0x25790084, -0x0062A292, 0xBC459AA4, 0x138F5465, 0x1A60C893, 0xBE4DCC9E, 0xC4583198, 0x48996254, 0x629D624D, -0x639E624D, 0x276A6386, 0xB03CA4A9, 0x0D7D197F, 0xBE3F9EA7, 0x0D733985, 0xAF31B3B0, 0x24780084, -0x00609E93, 0xB94C589F, 0x34903564, 0x5851BF9C, 0x7350B49D, 0xBB466BA3, 0x2795625C, 0x629E634D, -0x639E634C, 0x427B3578, 0xA42BB1B4, 0x3167498E, 0xB13E66A8, 0x2776367F, 0xA426A7B7, 0xAC2DAFB2, -0xAF30B1B0, 0x786C2186, 0x5E921A60, 0x853EB2A8, 0x2E5D6A94, 0xAE3293AF, 0x0D916363, 0x639E634C, -0x659F644C, 0x65900664, 0x9529A3B7, 0x4E4D6F9F, 0xA34041A7, 0x3C7A347A, 0x9F26A0B9, 0xA126A2B9, -0xA225A3B8, 0xA74050A6, 0x2F811776, 0xAA2A9AB4, 0x006E418B, 0xA425A4B8, 0x20825070, 0x649F654C, -0x659E654C, 0x65931B5F, 0x73349EB2, 0x753695B0, 0x94570799, 0x437B3478, 0x9D289EBB, 0x1F770085, -0x005F7595, 0xA12998B7, 0x076B4B8B, 0xA1269FB9, 0x9E289EBB, 0x9E27A0B9, 0x4B73357F, 0x659E654C, -0x659F654C, 0x65983C56, 0x3D439AAA, 0x9A299ABC, 0x70641B8F, 0x437C3378, 0x9B299CBB, 0x1F770085, -0x00626993, 0x9E2B93B9, 0x07617393, 0x992A97BC, 0x962C96BD, 0x982A9BBC, 0x7E5F1492, 0x659F654C, -0x679F674B, 0x669D594E, 0x144F97A2, 0x962C96BD, 0x46743680, 0x447B3278, 0x972B97BD, 0x972B97BD, -0x972B97BD, 0x983965B2, 0x0A558D9E, 0x8A560A9F, 0x00800080, 0x454197AD, 0x9A4E14A2, 0x599D674E, -0x679F674A, 0x679F674A, 0x14617793, 0x932D93BF, 0x14875A6C, 0x447C3178, 0x932D92BF, 0x922D92BF, -0x922D92BF, 0x586C228A, 0x444393AE, 0x6B651B8F, 0x679C534F, 0x1D4D95A5, 0x974148AC, 0x37976756, -0x68A0674A, 0x68A0684A, 0x3F8C146A, 0x00800080, 0x2A966859, 0x68962A59, 0x00800080, 0x00800080, -0x00800080, 0x2A93545F, 0x2A860075, 0x1B8E4766, 0x68A0674A, 0x2A860075, 0x00862A74, 0x639F674B, -0x699F684A, 0x699F694A, 0x699F684A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, -0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, 0x699F694A, -0x6AA06949, 0x69A0694A, 0x69A06A49, 0x69A06A49, 0x6AA06949, 0x69A0694A, 0x69A0694A, 0x69A0694A, -0x6AA06949, 0x69A06A49, 0x69A06A49, 0x69A0694A, 0x69A0694A, 0x6AA06949, 0x69A0694A, 0x69A0694A, -0x6BA06A49, 0x6AA06A49, 0x6BA06B49, 0x6AA06B49, 0x6AA06B49, 0x6BA06B49, 0x6AA06B49, 0x6BA06B49, -0x6BA06B49, 0x6BA06A49, 0x6BA06A49, 0x6AA06B49, 0x6BA06B49, 0x6BA06A49, 0x6AA06B49, 0x6BA06B49, -0x6CA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, -0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, 0x6BA16B48, -0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, -0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, 0x6CA16C48, -0x6DA16C48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16C48, 0x6CA16D48, 0x6CA16D48, 0x6DA16D48, -0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, 0x6DA16D48, 0x6DA16D48, 0x6CA16D48, 0x6DA16D48, -0x6EA16E47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6DA16D47, 0x6EA16D47, 0x6DA16D47, 0x6DA16E47, -0x6DA16D47, 0x6DA16D47, 0x6DA16E47, 0x6DA16D47, 0x6DA16D47, 0x6EA16D47, 0x6DA16D47, 0x6DA16D47, -0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, -0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E47, 0x6EA16E46, 0x6EA16E46, 0x6EA16E46, -0x6FA26F47, 0x6FA16E46, 0x6FA16E46, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, -0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, 0x6FA26F47, -0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, -0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, 0x70A27046, +const unsigned short saveicon[1024] = { + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73F, + 0xFFFF, 0xFFFF, 0xB5BF, 0x801F, 0xFFFF, 0xD29F, 0x801F, 0x801F, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA11E, 0x843C, 0x8439, 0x9CF7, + 0x801F, 0x801F, 0x801C, 0x8018, 0x801F, 0x801F, 0x801C, 0x8018, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEB5C, 0xFFFF, 0xFFFF, 0xFFFF, + 0x800F, 0xB9D3, 0xFFFF, 0xFFFF, 0x8013, 0x8008, 0xDAD7, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0x801F, 0x801F, 0x885F, 0xFFFF, 0x98D6, 0x801F, 0x801F, + 0xFFFF, 0xFFFF, 0xFFFF, 0x843C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFBDF, 0x801E, 0x801B, 0x8017, 0x801E, 0x801B, 0x8018, 0x8015, + 0x801A, 0x8018, 0x8015, 0x8011, 0x8016, 0x8014, 0x8011, 0x800D, + 0x8012, 0x800B, 0x8848, 0xFFFF, 0x8010, 0x8009, 0x8003, 0xFFFF, + 0x800C, 0x8007, 0x8006, 0xFFFF, 0x8008, 0x8005, 0xA52E, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFBBD, 0xF1EF, 0xFFFF, 0xF508, 0xF000, 0xEC00, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xE56B, 0xE16B, 0xE673, 0xFFFF, 0xE800, 0xDC00, 0xCC00, 0xB400, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE94, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEBBA, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xEFBA, 0xE378, 0xB2EB, 0x9AA4, 0x9AA5, 0x9AA5, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xE778, 0xF3BC, 0xFFFF, 0xFFFF, 0x9A84, 0x9623, 0x91E3, 0xB66C, + 0xD6BB, 0x800E, 0x800C, 0x8008, 0xFFFF, 0x8C6A, 0x8004, 0x8004, + 0xFFFF, 0xFFFF, 0xB191, 0xDAD8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0x8006, 0x8004, 0xFFFF, 0xFFFF, 0x8006, 0xF39D, 0xFFFF, 0xFA94, + 0xFFFF, 0xFFFF, 0xFFFF, 0xEC21, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xF484, 0xF800, 0xF800, 0xF000, 0xF800, 0xF800, 0xFD6B, 0xF8C6, + 0xF400, 0xF400, 0xFDEF, 0xF4A5, 0xFF18, 0xEC63, 0xE400, 0xE000, + 0xE800, 0xE000, 0xD400, 0xC400, 0xE400, 0xE000, 0xD000, 0xC400, + 0xE000, 0xD800, 0xCC00, 0xC000, 0xD800, 0xD000, 0xC400, 0xB800, + 0xA400, 0xD673, 0xFFFF, 0xFFFF, 0xB400, 0x9000, 0xFFFF, 0xFFFF, + 0xB000, 0x9000, 0xFFFF, 0xFFFF, 0xA800, 0x9000, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xDB75, 0x9AE4, 0xFFFF, 0xFFFF, 0x9A84, 0xA6E7, + 0xFFFF, 0xFFFF, 0xA1E7, 0x9604, 0xFFFF, 0xFFFF, 0xFFFF, 0x8D03, + 0xA707, 0xA708, 0xAF2A, 0xAF2A, 0xA6E7, 0xA2C7, 0xBF4E, 0xCB71, + 0x9E46, 0x9E26, 0x9A25, 0x9604, 0x80E0, 0x8922, 0x8D22, 0x8D22, + 0xA2C7, 0xA2A7, 0x9E66, 0x95E4, 0xA2A6, 0x9E46, 0x9E25, 0x95C4, + 0x99E5, 0x95C4, 0x9163, 0x8D02, 0x88E2, 0x84A1, 0x8060, 0x8020, + 0x8500, 0xF7BD, 0xFFFF, 0xFFFF, 0x8901, 0xA148, 0xFFFF, 0xFFFF, + 0x8040, 0xB9ED, 0xFFFF, 0xFFFF, 0x9926, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xE529, 0xD400, 0xFFFF, 0xFFFF, 0xFFFF, 0xD4C6, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xD000, 0xC400, 0xBC00, 0xB000, 0xC000, 0xB800, 0xAC00, 0xA000, + 0xA800, 0xA800, 0x9C00, 0x9400, 0xC18C, 0x8C00, 0x8C00, 0x8C00, + 0x9C00, 0x8C00, 0xFFFF, 0xFFFF, 0x9400, 0x8C00, 0xFFFF, 0xFFFF, + 0x8800, 0xDEB5, 0xFFFF, 0xFFFF, 0xE2D6, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xD6D5, 0xAD8A, 0x8CC3, 0x8060, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0x8060, 0x90E4, 0xB1CC, 0xE759, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7AF, + 0xFFFF, 0xFFFF, 0xFBDC, 0xF7B1, 0xFFFB, 0xFFE2, 0xFFE0, 0xFFE0, + 0xFFE0, 0xFFE0, 0xFFE0, 0xFFE0, 0xFFE0, 0xFFE0, 0xFFE0, 0xFFE5, + 0xF38C, 0xEF6A, 0xEB4B, 0xEB4F, 0xFFE0, 0xFBC0, 0xF7A0, 0xEB40, + 0xFFE0, 0xFFE0, 0xFBC0, 0xF7A0, 0xFFF5, 0xFFE4, 0xF380, 0xEF60, + 0xEF76, 0xFFFF, 0xFFFF, 0xFFFF, 0xE300, 0xCE60, 0xD6AB, 0xFFFF, + 0xEB40, 0xE300, 0xCE60, 0xB180, 0xE720, 0xDEE0, 0xCE60, 0xB180, + 0xF7BD, 0xB96B, 0xDAB4, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB9CA, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xF399, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xD280, 0xEB40, 0xEB40, 0xEB40, 0xDAD1, 0xAD60, 0xC200, 0xCA40, + 0xFFFF, 0xF7BE, 0xBDEB, 0x98C0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xEB40, 0xE720, 0xE300, 0xDAC0, 0xCA40, 0xC620, 0xC200, 0xBDE0, + 0x9080, 0x94A0, 0x94A0, 0x9080, 0xFBDD, 0xE738, 0xE337, 0xE738, + 0xD280, 0xCA40, 0xB5A0, 0x98C0, 0xB180, 0xA100, 0x94A0, 0x9080, + 0x8C60, 0x9080, 0xC20C, 0xFFFF, 0xF7BD, 0xFFFF, 0xFFFF, 0xFFFF, + 0xB9C9, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, }; #endif diff --git a/source/ngc/input.cpp b/source/ngc/input.cpp index 875f0241..871f4fff 100644 --- a/source/ngc/input.cpp +++ b/source/ngc/input.cpp @@ -26,6 +26,8 @@ #include "input.h" #include "tbtime.h" +#define MAXJP 10 + #define VBA_BUTTON_A 1 #define VBA_BUTTON_B 2 #define VBA_BUTTON_SELECT 4 @@ -82,13 +84,14 @@ unsigned int ncpadmap[] = { WPAD_BUTTON_2, WPAD_BUTTON_1 }; +#ifdef HW_RVL /**************************************************************************** - * WPAD_Stick + * WPAD_StickX * - * Get X/Y value from Wii Joystick (classic, nunchuk) input + * Get X value from Wii Joystick (classic, nunchuk) input ***************************************************************************/ -s8 WPAD_Stick(u8 chan, u8 right, int axis) +s8 WPAD_StickX(u8 chan,u8 right) { float mag = 0.0; float ang = 0.0; @@ -122,18 +125,62 @@ s8 WPAD_Stick(u8 chan, u8 right, int axis) break; } - /* calculate x/y value (angle need to be converted into radian) */ + /* calculate X value (angle need to be converted into radian) */ if (mag > 1.0) mag = 1.0; else if (mag < -1.0) mag = -1.0; - double val; + double val = mag * sin((PI * ang)/180.0f); + + return (s8)(val * 128.0f); +} + +/**************************************************************************** + * WPAD_StickY + * + * Get Y value from Wii Joystick (classic, nunchuk) input + ***************************************************************************/ + +s8 WPAD_StickY(u8 chan, u8 right) +{ + float mag = 0.0; + float ang = 0.0; + WPADData *data = WPAD_Data(chan); + + switch (data->exp.type) + { + case WPAD_EXP_NUNCHUK: + case WPAD_EXP_GUITARHERO3: + if (right == 0) + { + mag = data->exp.nunchuk.js.mag; + ang = data->exp.nunchuk.js.ang; + } + break; + + case WPAD_EXP_CLASSIC: + if (right == 0) + { + mag = data->exp.classic.ljs.mag; + ang = data->exp.classic.ljs.ang; + } + else + { + mag = data->exp.classic.rjs.mag; + ang = data->exp.classic.rjs.ang; + } + break; + + default: + break; + } - if(axis == 0) // x-axis - val = mag * sin((PI * ang)/180.0f); - else // y-axis - val = mag * cos((PI * ang)/180.0f); + /* calculate X value (angle need to be converted into radian) */ + if (mag > 1.0) mag = 1.0; + else if (mag < -1.0) mag = -1.0; + double val = mag * cos((PI * ang)/180.0f); return (s8)(val * 128.0f); } +#endif /**************************************************************************** * DecodeJoy @@ -146,15 +193,16 @@ u32 DecodeJoy(unsigned short pad) { signed char pad_x = PAD_StickX (pad); signed char pad_y = PAD_StickY (pad); - signed char gc_px = PAD_SubStickX (0); u32 jp = PAD_ButtonsHeld (pad); u32 J = 0; #ifdef HW_RVL - signed char wm_ax = WPAD_Stick ((u8)pad, 0, 0); - signed char wm_ay = WPAD_Stick ((u8)pad, 0, 1); - u32 wp = WPAD_ButtonsHeld (pad); - signed char wm_sx = WPAD_Stick (0,1,0); // CC right joystick + signed char wm_ax = 0; + signed char wm_ay = 0; + u32 wp = 0; + wm_ax = WPAD_StickX ((u8)pad, 0); + wm_ay = WPAD_StickY ((u8)pad, 0); + wp = WPAD_ButtonsHeld (pad); u32 exp_type; if ( WPAD_Probe(pad, &exp_type) != 0 ) exp_type = WPAD_EXP_NONE; @@ -235,16 +283,6 @@ u32 DecodeJoy(unsigned short pad) } #endif - // Turbo feature - if( - (gc_px > 70) - #ifdef HW_RVL - || (wm_sx > 70) - || ((wp & WPAD_BUTTON_A) && (wp & WPAD_BUTTON_B)) - #endif - ) - J |= VBA_SPEED; - /*** Report pressed buttons (gamepads) ***/ int i; @@ -272,25 +310,12 @@ u32 GetJoy() int pad = 0; s8 gc_px = PAD_SubStickX (0); - s8 gc_py = PAD_SubStickY (0); #ifdef HW_RVL - s8 wm_sx = WPAD_Stick (0,1,0); - s8 wm_sy = WPAD_Stick (0,1,1); + s8 wm_sx = WPAD_StickX (0,1); u32 wm_pb = WPAD_ButtonsHeld (0); // wiimote / expansion button info #endif - // Check for video zoom - if (GCSettings.NGCZoom) - { - if (gc_py < -36 || gc_py > 36) - zoom ((float) gc_py / -36); - #ifdef HW_RVL - if (wm_sy < -36 || wm_sy > 36) - zoom ((float) wm_sy / -36); - #endif - } - // request to go back to menu if ((gc_px < -70) #ifdef HW_RVL @@ -302,19 +327,17 @@ u32 GetJoy() { if (GCSettings.AutoSave == 1) { - SaveBatteryOrState(GCSettings.SaveMethod, 0, SILENT); // save battery + SaveBattery(GCSettings.SaveMethod, SILENT); } else if (GCSettings.AutoSave == 2) { - SaveBatteryOrState(GCSettings.SaveMethod, 1, SILENT); // save state + SaveState(GCSettings.SaveMethod, SILENT); } else if(GCSettings.AutoSave == 3) { - SaveBatteryOrState(GCSettings.SaveMethod, 0, SILENT); // save battery - SaveBatteryOrState(GCSettings.SaveMethod, 1, SILENT); // save state + SaveBattery(GCSettings.SaveMethod, SILENT); + SaveState(GCSettings.SaveMethod, SILENT); } - // change to menu video mode - ResetVideo_Menu (); MainMenu(3); return 0; } diff --git a/source/ngc/input.h b/source/ngc/input.h index 4d1ef6a6..676f3ecb 100644 --- a/source/ngc/input.h +++ b/source/ngc/input.h @@ -15,14 +15,14 @@ #define PI 3.14159265f #define PADCAL 50 -#define MAXJP 10 extern unsigned int gcpadmap[]; extern unsigned int wmpadmap[]; extern unsigned int ccpadmap[]; extern unsigned int ncpadmap[]; -s8 WPAD_Stick(u8 chan,u8 right, int axis); +s8 WPAD_StickX(u8 chan,u8 right); +s8 WPAD_StickY(u8 chan, u8 right); u32 GetJoy(); diff --git a/source/ngc/memcardop.cpp b/source/ngc/memcardop.cpp index a333f0be..cf32d6fb 100644 --- a/source/ngc/memcardop.cpp +++ b/source/ngc/memcardop.cpp @@ -25,6 +25,7 @@ #define VERIFBUFFERSIZE 65536 static u8 SysArea[CARD_WORKAREA] ATTRIBUTE_ALIGN (32); +extern unsigned char savebuffer[]; unsigned char verifbuffer[VERIFBUFFERSIZE] ATTRIBUTE_ALIGN (32); card_dir CardDir; card_file CardFile; @@ -67,7 +68,7 @@ bool TestCard(int slot, bool silent) /*** Initialize Card System ***/ memset (SysArea, 0, CARD_WORKAREA); - CARD_Init ("VBA0", "00"); + CARD_Init ("SNES", "00"); /*** Try to mount the card ***/ if (MountCard(slot, silent) == 0) @@ -135,7 +136,7 @@ VerifyMCFile (unsigned char *buf, int slot, char *filename, int datasize) /*** Initialize Card System ***/ memset (SysArea, 0, CARD_WORKAREA); - CARD_Init ("VBA0", "00"); + CARD_Init ("SNES", "00"); /*** Try to mount the card ***/ CardError = MountCard(slot, NOTSILENT); @@ -214,7 +215,7 @@ LoadBufferFromMC (unsigned char *buf, int slot, char *filename, bool silent) /*** Initialize Card System ***/ memset (SysArea, 0, CARD_WORKAREA); - CARD_Init ("VBA0", "00"); + CARD_Init ("SNES", "00"); /*** Try to mount the card ***/ CardError = MountCard(slot, NOTSILENT); @@ -278,7 +279,7 @@ SaveBufferToMC (unsigned char *buf, int slot, char *filename, int datasize, bool /*** Initialize Card System ***/ memset (SysArea, 0, CARD_WORKAREA); - CARD_Init ("VBA0", "00"); + CARD_Init ("SNES", "00"); /*** Try to mount the card ***/ CardError = MountCard(slot, NOTSILENT); diff --git a/source/ngc/menu.cpp b/source/ngc/menu.cpp index 9a7252a5..746c2e83 100644 --- a/source/ngc/menu.cpp +++ b/source/ngc/menu.cpp @@ -44,7 +44,7 @@ extern "C" extern void DrawMenu (char items[][50], char *title, int maxitems, int selected, int fontsize); extern int menu; -extern bool ROMLoaded; +extern int ROMSize; #define SOFTRESET_ADR ((volatile u32*)0xCC003024) @@ -83,9 +83,9 @@ LoadManager () if ( loadROM == 1 ) // if ROM was loaded, load the battery / state { if (GCSettings.AutoLoad == 1) - LoadBatteryOrState(GCSettings.SaveMethod, 0, SILENT); // load battery + LoadBattery(GCSettings.SaveMethod, SILENT); else if (GCSettings.AutoLoad == 2) - LoadBatteryOrState(GCSettings.SaveMethod, 1, SILENT); // load state + LoadState(GCSettings.SaveMethod, SILENT); } return loadROM; @@ -94,7 +94,7 @@ LoadManager () /**************************************************************************** * Preferences Menu ***************************************************************************/ -static int prefmenuCount = 11; +static int prefmenuCount = 9; static char prefmenu[][50] = { "Load Method", @@ -105,8 +105,6 @@ static char prefmenu[][50] = { "Auto Load", "Auto Save", "Verify MC Saves", - "Enable Zooming", - "Video Rendering", "Save Preferences", "Back to Main Menu" @@ -124,26 +122,40 @@ PreferencesMenu () // some load/save methods are not implemented - here's where we skip them // they need to be skipped in the order they were enumerated in vba.h + // skip + if(GCSettings.LoadMethod == METHOD_DVD) + GCSettings.LoadMethod++; + if(GCSettings.LoadMethod == METHOD_SMB) + GCSettings.LoadMethod++; + if(GCSettings.SaveMethod == METHOD_SMB) + GCSettings.SaveMethod++; + if(GCSettings.SaveMethod == METHOD_MC_SLOTA) + GCSettings.SaveMethod++; + if(GCSettings.SaveMethod == METHOD_MC_SLOTB) + GCSettings.SaveMethod++; + + prefmenu[6][0] = '\0'; // MC saving not implemented + // no USB ports on GameCube - #ifdef HW_DOL + #ifndef HW_RVL if(GCSettings.LoadMethod == METHOD_USB) GCSettings.LoadMethod++; if(GCSettings.SaveMethod == METHOD_USB) GCSettings.SaveMethod++; #endif - // saving to DVD is impossible - if(GCSettings.SaveMethod == METHOD_DVD) - GCSettings.SaveMethod++; - - // disable DVD in GC mode (not implemented) - #ifdef HW_DOL + // check if DVD access in Wii mode is disabled + #ifndef WII_DVD if(GCSettings.LoadMethod == METHOD_DVD) GCSettings.LoadMethod++; #endif + // saving to DVD is impossible + if(GCSettings.SaveMethod == METHOD_DVD) + GCSettings.SaveMethod++; + // disable SMB in GC mode (stalls out) - #ifdef HW_DOL + #ifndef HW_RVL if(GCSettings.LoadMethod == METHOD_SMB) GCSettings.LoadMethod++; if(GCSettings.SaveMethod == METHOD_SMB) @@ -156,9 +168,6 @@ PreferencesMenu () GCSettings.SaveMethod++; if(GCSettings.SaveMethod == METHOD_MC_SLOTB) GCSettings.SaveMethod++; - prefmenu[6][0] = 0; - #else - sprintf (prefmenu[6], "Verify MC Saves %s", GCSettings.VerifySaves == true ? " ON" : "OFF"); #endif // correct load/save methods out of bounds @@ -197,13 +206,7 @@ PreferencesMenu () else if (GCSettings.AutoSave == 2) sprintf (prefmenu[5],"Auto Save SNAPSHOT"); else if (GCSettings.AutoSave == 3) sprintf (prefmenu[5],"Auto Save BOTH"); - sprintf (prefmenu[7], "Enable Zooming %s", - GCSettings.NGCZoom == true ? " ON" : "OFF"); - - if ( GCSettings.render == 0) - sprintf (prefmenu[8], "Video Rendering Filtered"); - if ( GCSettings.render == 1) - sprintf (prefmenu[8], "Video Rendering Unfiltered"); + //sprintf (prefmenu[6], "Verify MC Saves %s", GCSettings.VerifySaves == true ? " ON" : "OFF"); ret = RunMenu (prefmenu, prefmenuCount, (char*)"Preferences", 16); @@ -240,23 +243,11 @@ PreferencesMenu () break; case 7: - GCSettings.NGCZoom ^= 1; - break; - - case 8: - GCSettings.render++; - if (GCSettings.render > 1 ) - GCSettings.render = 0; - // reset zoom - zoom_reset (); - break; - - case 9: SavePrefs(GCSettings.SaveMethod, NOTSILENT); break; case -1: /*** Button B ***/ - case 10: + case 8: quit = 1; break; @@ -272,13 +263,12 @@ PreferencesMenu () int GameMenu () { - int gamemenuCount = 8; + int gamemenuCount = 7; char gamemenu[][50] = { "Return to Game", "Reset Game", "Load SRAM", "Save SRAM", "Load Game Snapshot", "Save Game Snapshot", - "Reset Zoom", "Back to Main Menu" }; @@ -305,9 +295,6 @@ GameMenu () gamemenu[3][0] = '\0'; gamemenu[5][0] = '\0'; } - // disable Reset Zoom if Zooming is off - if(!GCSettings.NGCZoom) - gamemenu[6][0] = '\0'; ret = RunMenu (gamemenu, gamemenuCount, (char*)"Game Menu"); @@ -323,29 +310,23 @@ GameMenu () break; case 2: // Load Battery - quit = retval = LoadBatteryOrState(GCSettings.SaveMethod, 0, NOTSILENT); - emulator.emuReset(); + quit = retval = LoadBattery(GCSettings.SaveMethod, NOTSILENT); break; case 3: // Save Battery - SaveBatteryOrState(GCSettings.SaveMethod, 0, NOTSILENT); + SaveBattery(GCSettings.SaveMethod, NOTSILENT); break; case 4: // Load State - quit = retval = LoadBatteryOrState(GCSettings.SaveMethod, 1, NOTSILENT); + quit = retval = LoadState(GCSettings.SaveMethod, NOTSILENT); break; case 5: // Save State - SaveBatteryOrState(GCSettings.SaveMethod, 1, NOTSILENT); - break; - - case 6: // Reset Zoom - zoom_reset (); - quit = retval = 1; + SaveState(GCSettings.SaveMethod, NOTSILENT); break; case -1: // Button B - case 7: // Return to previous menu + case 6: // Return to previous menu retval = 0; quit = 1; break; @@ -652,7 +633,7 @@ MainMenu (int selectedMenu) int ret; // disable game-specific menu items if a ROM isn't loaded - if (!ROMLoaded) + if (ROMSize == 0 ) menuitems[3][0] = '\0'; else sprintf (menuitems[3], "Game Menu"); @@ -719,24 +700,19 @@ MainMenu (int selectedMenu) case -1: // Button B // Return to Game - if(ROMLoaded) - quit = 1; + quit = 1; break; } } - // Wait for buttons to be released - int count = 0; // how long we've been waiting for the user to release the button - while(count < 50 && ( - PAD_ButtonsHeld(0) - #ifdef HW_RVL - || WPAD_ButtonsHeld(0) - #endif - )) - { - VIDEO_WaitVSync(); - count++; - } + /*** Remove any still held buttons ***/ + #ifdef HW_RVL + while( PAD_ButtonsHeld(0) || WPAD_ButtonsHeld(0) ) + VIDEO_WaitVSync(); + #else + while( PAD_ButtonsHeld(0) ) + VIDEO_WaitVSync(); + #endif StartAudio(); mftb(&end); diff --git a/source/ngc/menudraw.cpp b/source/ngc/menudraw.cpp index 435b46a9..fb28fc4f 100644 --- a/source/ngc/menudraw.cpp +++ b/source/ngc/menudraw.cpp @@ -246,8 +246,6 @@ Credits () DrawText (375, ypos, (char*)"emukidid"); DrawText (100, ypos += 18, (char*)"Original GameCube Port"); DrawText (375, ypos, (char*)"SoftDev"); - DrawText (100, ypos += 18, (char*)"Visual Boy Advance - M"); - DrawText (375, ypos, (char*)"VBA-M Team"); DrawText (100, ypos += 18, (char*)"Visual Boy Advance 1.7.2"); DrawText (375, ypos, (char*)"Forgotten"); DrawText (100, ypos += 18, (char*)"libogc"); @@ -258,7 +256,7 @@ Credits () DrawText (-1, ypos += 36, (char*)"And many others who have contributed over the years!"); setfontsize (12); - DrawText (-1, ypos += 40, (char*)"This software is open source and may be copied,"); + DrawText (-1, ypos += 50, (char*)"This software is open source and may be copied,"); DrawText (-1, ypos += 15, (char*)"distributed, or modified under the terms of"); DrawText (-1, ypos += 15, (char*)"the GNU General Public License (GPL) Version 2."); @@ -368,7 +366,7 @@ WaitPrompt (char *msg) ypos += 32; clearscreen (); - setfontsize(16); + setfontsize(20); DrawText (-1, ypos, msg); ypos += 30; DrawText (-1, ypos, (char*)"Press A to continue"); @@ -442,7 +440,7 @@ DrawMenu (char items[][50], char *title, int maxitems, int selected, int fontsiz if (screenheight == 480) ypos += 52; else - ypos += 42; + ypos += 32; clearscreen (); @@ -540,7 +538,7 @@ RunMenu (char items[][50], int maxitems, char *title, int fontsize, int x) gc_ay = PAD_StickY (0); p = PAD_ButtonsDown (0); #ifdef HW_RVL - wm_ay = WPAD_Stick (0,0,1); + wm_ay = WPAD_StickY (0,0); wp = WPAD_ButtonsDown (0); #endif @@ -797,43 +795,32 @@ DrawLine (int x1, int y1, int x2, int y2, u8 r, u8 g, u8 b) void ShowProgress (char *msg, int done, int total) { - if(total <= 0) // division by 0 is bad! - return; - else if(done > total) // this shouldn't happen - done = total; - - int xpos, ypos; - int i; + int ypos = (screenheight - 30) >> 1; - if(done < 5000) // we just started! - { - ypos = (screenheight - 30) >> 1; + if (screenheight == 480) + ypos += 52; + else + ypos += 32; - if (screenheight == 480) - ypos += 52; - else - ypos += 32; + int xpos; + int i; - clearscreen (); - setfontsize(20); - DrawText (-1, ypos, msg); + clearscreen (); + setfontsize(20); + DrawText (-1, ypos, msg); - /*** Draw a white outline box ***/ - for (i = 380; i < 401; i++) - DrawLine (100, i, 540, i, 0xff, 0xff, 0xff); - } + /*** Draw a white outline box ***/ + for (i = 380; i < 401; i++) + DrawLine (100, i, 540, i, 0xff, 0xff, 0xff); /*** Show progess ***/ - xpos = (int) (((float) done / (float) total) * 438); + xpos = (int) (((float) done / (float) total) * 438); - for (i = 381; i < 400; i++) - DrawLine (101, i, 101 + xpos, i, 0x00, 0x00, 0x80); + for (i = 381; i < 400; i++) + DrawLine (101, i, 101 + xpos, i, 0x00, 0x00, 0x80); - if(done < 5000) // we just started! - { - DrawVersion(); - showscreen (); - } + DrawVersion(); + showscreen (); } /**************************************************************************** diff --git a/source/ngc/preferences.cpp b/source/ngc/preferences.cpp index b329a986..663d4945 100644 --- a/source/ngc/preferences.cpp +++ b/source/ngc/preferences.cpp @@ -21,10 +21,16 @@ #include "fileop.h" #include "smbop.h" #include "filesel.h" -#include "input.h" +extern unsigned char savebuffer[]; extern int currconfig[4]; +// button map configurations +extern unsigned int gcpadmap[]; +extern unsigned int wmpadmap[]; +extern unsigned int ccpadmap[]; +extern unsigned int ncpadmap[]; + #define PREFS_FILE_NAME "VBAGX.xml" char prefscomment[2][32]; @@ -40,7 +46,7 @@ mxml_node_t *section; mxml_node_t *item; mxml_node_t *elem; -char temp[20]; +char temp[200]; const char * toStr(int i) { @@ -70,7 +76,7 @@ void createXMLController(unsigned int controller[], const char * name, const cha mxmlElementSetAttr(item, "description", description); // create buttons - for(int i=0; i < MAXJP; i++) + for(int i=0; i < 12; i++) { elem = mxmlNewElement(item, "button"); mxmlElementSetAttr(elem, "number", toStr(i)); @@ -110,6 +116,7 @@ int preparePrefsData (int method) { int offset = 0; + memset (savebuffer, 0, SAVEBUFFERSIZE); // add save icon and comments for Memory Card saves if(method == METHOD_MC_SLOTA || method == METHOD_MC_SLOTB) @@ -141,7 +148,7 @@ preparePrefsData (int method) createXMLSetting("LoadFolder", "Load Folder", GCSettings.LoadFolder); createXMLSetting("SaveFolder", "Save Folder", GCSettings.SaveFolder); //createXMLSetting("CheatFolder", "Cheats Folder", GCSettings.CheatFolder); - createXMLSetting("VerifySaves", "Verify Memory Card Saves", toStr(GCSettings.VerifySaves)); + //createXMLSetting("VerifySaves", "Verify Memory Card Saves", toStr(GCSettings.VerifySaves)); createXMLSection("Network", "Network Settings"); @@ -150,10 +157,7 @@ preparePrefsData (int method) createXMLSetting("smbuser", "Share Username", GCSettings.smbuser); createXMLSetting("smbpwd", "Share Password", GCSettings.smbpwd); - createXMLSection("Emulation", "Emulation Settings"); - - createXMLSetting("NGCZoom", "Enable Zoom", toStr(GCSettings.NGCZoom)); - createXMLSetting("render", "Video Rendering", toStr(GCSettings.render)); + //createXMLSection("Emulation", "Emulation Settings"); createXMLSection("Controller", "Controller Settings"); @@ -208,7 +212,7 @@ void loadXMLController(unsigned int controller[], const char * name) if(item) { // populate buttons - for(int i=0; i < MAXJP; i++) + for(int i=0; i < 12; i++) { elem = mxmlFindElement(item, xml, "button", "number", toStr(i), MXML_DESCEND); if(elem) @@ -238,6 +242,7 @@ decodePrefsData (int method) xml = mxmlLoadString(NULL, (char *)savebuffer+offset, MXML_TEXT_CALLBACK); // check settings version + // we don't do anything with the version #, but we'll store it anyway char * version; item = mxmlFindElement(xml, xml, "file", "version", NULL, MXML_DESCEND); if(item) // a version entry exists @@ -245,17 +250,6 @@ decodePrefsData (int method) else // version # not found, must be invalid return false; - // this code assumes version in format X.X.X - // XX.X.X, X.XX.X, or X.X.XX will NOT work - char verMajor = version[7]; - char verMinor = version[9]; - char verPoint = version[11]; - - if(verPoint < '3' && verMajor == '1') // less than version 1.0.3 - return false; // reset settings - else if(verMajor > '1' || verMinor > '0' || verPoint > '3') // some future version - return false; // reset settings - // File Settings loadXMLSetting(&GCSettings.AutoLoad, "AutoLoad"); @@ -276,9 +270,6 @@ decodePrefsData (int method) // Emulation Settings - loadXMLSetting(&GCSettings.NGCZoom, "NGCZoom"); - loadXMLSetting(&GCSettings.render, "render"); - // Controller Settings loadXMLController(gcpadmap, "gcpadmap"); @@ -297,17 +288,13 @@ decodePrefsData (int method) bool SavePrefs (int method, bool silent) { - // there's no point in saving SMB settings TO SMB, because then we'll have no way to load them the next time! - // so instead we'll save using whatever other method is available (eg: SD) - if(method == METHOD_AUTO || method == METHOD_SMB) + if(method == METHOD_AUTO) method = autoSaveMethod(); char filepath[1024]; int datasize; int offset = 0; - AllocSaveBuffer (); - datasize = preparePrefsData (method); if (!silent) @@ -335,8 +322,6 @@ SavePrefs (int method, bool silent) offset = SaveBufferToMC (savebuffer, CARD_SLOTB, (char *)PREFS_FILE_NAME, datasize, silent); } - FreeSaveBuffer (); - if (offset > 0) { if (!silent) @@ -356,8 +341,6 @@ LoadPrefsFromMethod (int method) char filepath[1024]; int offset = 0; - AllocSaveBuffer (); - if(method == METHOD_SD || method == METHOD_USB) { if(ChangeFATInterface(method, NOTSILENT)) @@ -383,8 +366,6 @@ LoadPrefsFromMethod (int method) if (offset > 0) retval = decodePrefsData (method); - FreeSaveBuffer (); - return retval; } diff --git a/source/ngc/sdfileio.c b/source/ngc/sdfileio.c new file mode 100644 index 00000000..362f3626 --- /dev/null +++ b/source/ngc/sdfileio.c @@ -0,0 +1,115 @@ +/**************************************************************************** + * Visual Boy Advance GX + * + * Tantric September 2008 + * + * sdfileio.c + * + * Generic File I/O for VisualBoyAdvance + * Currently only supports SD/USB +****************************************************************************/ +#include +#include +#include +#include +#include +#include + +#define MAXDIRENTRIES 1000 +char direntries[MAXDIRENTRIES][255]; + +/** + * SDInit + */ +void SDInit( void ) +{ + fatInitDefault(); +} + +/** + * SD Card f_open + */ +FILE* gen_fopen( const char *filename, const char *mode ) +{ + return fopen( filename, mode ); +} + +/** + * SD Card f_write + */ +int gen_fwrite( const void *buffer, int len, int block, FILE* f ) +{ + return fwrite(buffer, len, block, f); +} + +/** + * SD Card f_read + */ +int gen_fread( void *buffer, int len, int block, FILE* f ) +{ + + return fread(buffer, len, block, f); +} + +/** + * SD Card fclose + */ +void gen_fclose( FILE* f ) +{ + fclose(f); +} + +/** + * SD Card fseek + * + * NB: Only supports SEEK_SET + */ +int gen_fseek(FILE* f, int where, int whence) +{ + fseek(f, where, whence); + return 1; +} + +/** + * Simple fgetc + */ +int gen_fgetc( FILE* f ) +{ + return fgetc(f); +} + +static struct stat _fstat; +char filename[1024]; +int fcount = 0; + +/** + * Get directory listing + */ +int gen_getdir( char *thisdir ) +{ + memset(&direntries[0],0,MAXDIRENTRIES*255); + + DIR_ITER* dp = diropen( thisdir ); + + if ( dp ) + { + while ( dirnext(dp, filename, &_fstat) == 0 ) + { + + // Skip any sub directories + if ( !(_fstat.st_mode & S_IFDIR) ) + { + memcpy(&direntries[fcount],&filename,strlen(filename)); + fcount++; + } + } + dirclose(dp); + } + else + return 0; + + + return fcount; + +} + diff --git a/source/ngc/sdfileio.h b/source/ngc/sdfileio.h new file mode 100644 index 00000000..7ece3748 --- /dev/null +++ b/source/ngc/sdfileio.h @@ -0,0 +1,38 @@ +/**************************************************************************** + * Visual Boy Advance GX + * + * Tantric September 2008 + * + * sdfileio.h + * + * Generic File I/O for VisualBoyAdvance + * Currently only supports SD/USB +****************************************************************************/ +#ifndef __SDFILEIO__ +#define __SDFILEIO__ + + +#define MAXDIRENTRIES 1000 +#include +#include +#include +#include +#include + +extern "C" + { + + /* Required Functions */ + FILE* gen_fopen( const char *filename, const char *mode ); + int gen_fwrite( const void *buffer, int len, int block, FILE* f ); + int gen_fread( void *buffer, int len, int block, FILE* f ); + void gen_fclose( FILE* f ); + int gen_fseek(FILE* f, int where, int whence); + int gen_fgetc( FILE* f ); + int SDInit( void ); + int gen_getdir( char *thisdir ); + extern char direntries[MAXDIRENTRIES][255]; + } + +#endif + diff --git a/source/ngc/smbop.cpp b/source/ngc/smbop.cpp index 84dc5b60..a39e0483 100644 --- a/source/ngc/smbop.cpp +++ b/source/ngc/smbop.cpp @@ -30,12 +30,17 @@ bool networkShareInit = false; unsigned int SMBTimer = 0; #define SMBTIMEOUT ( 3600 ) // Some implementations timeout in 10 minutes -// SMB connection/file handles - the only ones we should ever use! SMBCONN smbconn; -SMBFILE smbfile; - #define ZIPCHUNK 16384 +extern unsigned char savebuffer[]; +extern char output[16384]; +extern int offset; +extern int selection; +extern char currentdir[MAXPATHLEN]; +extern FILEENTRIES filelist[MAXFILES]; + + /**************************************************************************** * InitializeNetwork * Initializes the Wii/GameCube network interface @@ -88,7 +93,7 @@ ConnectShare (bool silent) strlen(GCSettings.smbip) == 0) { if(!silent) - WaitPrompt((char*) "Invalid network settings. Check VBAGX.xml."); + WaitPrompt((char*) "Invalid network settings. Check SNES9xGX.xml."); return false; } @@ -213,76 +218,36 @@ ParseSMBdirectory () return filecount; } -/**************************************************************************** - * Open SMB file - ***************************************************************************/ - -SMBFILE OpenSMBFile(char * filepath) -{ - return SMB_OpenFile (SMBPath(filepath), SMB_OPEN_READING, SMB_OF_OPEN, smbconn); -} - /**************************************************************************** * Load SMB file - * rom - pointer to memory where ROM will be stored - * length - # bytes to read (0 for all) ****************************************************************************/ int -LoadSMBFile (char * rom, int length) +LoadSMBFile (char *filename, int length) { char filepath[MAXPATHLEN]; /* Check filename length */ - if (!MakeROMPath(filepath, METHOD_SMB)) + if ((strlen(currentdir)+1+strlen(filelist[selection].filename)) < MAXPATHLEN) + sprintf(filepath, "%s/%s",currentdir,filelist[selection].filename); + else { WaitPrompt((char*) "Maximum filepath length reached!"); return -1; } - return LoadBufferFromSMB(rom, filepath, length, NOTSILENT); -} - -/**************************************************************************** - * LoadSMBSzFile - * Loads the selected file # from the specified 7z into rbuffer - * Returns file size - ***************************************************************************/ -int -LoadSMBSzFile(char * filepath, unsigned char * rbuffer) -{ - if(!ConnectShare (NOTSILENT)) - return 0; - - smbfile = OpenSMBFile(filepath); - - if (smbfile) - { - u32 size = SzExtractFile(filelist[selection].offset, rbuffer); - SMB_CloseFile (smbfile); - return size; - } - else - { - WaitPrompt((char*) "Error opening file"); - return 0; - } + return 0; + //return LoadBufferFromSMB((char *)Memory.ROM, SMBPath(filepath), NOTSILENT); } /**************************************************************************** * Write savebuffer to SMB file ****************************************************************************/ -// no buffer specified, use savebuffer int SaveBufferToSMB (char *filepath, int datasize, bool silent) -{ - return SaveBufferToSMB((char *)savebuffer, filepath, datasize, silent); -} - -int -SaveBufferToSMB (char * sbuffer, char *filepath, int datasize, bool silent) { if(!ConnectShare (NOTSILENT)) return 0; + SMBFILE smbfile; int dsize = datasize; int wrote = 0; int boffset = 0; @@ -297,10 +262,10 @@ SaveBufferToSMB (char * sbuffer, char *filepath, int datasize, bool silent) { if (dsize > 1024) wrote = - SMB_WriteFile ((char *) sbuffer + boffset, 1024, boffset, smbfile); + SMB_WriteFile ((char *) savebuffer + boffset, 1024, boffset, smbfile); else wrote = - SMB_WriteFile ((char *) sbuffer + boffset, dsize, boffset, smbfile); + SMB_WriteFile ((char *) savebuffer + boffset, dsize, boffset, smbfile); boffset += wrote; dsize -= wrote; @@ -314,6 +279,7 @@ SaveBufferToSMB (char * sbuffer, char *filepath, int datasize, bool silent) WaitPrompt (msg); } + ClearSaveBuffer (); return boffset; } @@ -325,19 +291,22 @@ SaveBufferToSMB (char * sbuffer, char *filepath, int datasize, bool silent) int LoadBufferFromSMB (char *filepath, bool silent) { - return LoadBufferFromSMB((char *)savebuffer, filepath, 0, silent); + ClearSaveBuffer (); + return LoadBufferFromSMB((char *)savebuffer, filepath, silent); } int -LoadBufferFromSMB (char * sbuffer, char *filepath, int length, bool silent) +LoadBufferFromSMB (char * sbuffer, char *filepath, bool silent) { if(!ConnectShare (NOTSILENT)) return 0; + SMBFILE smbfile; int ret; int boffset = 0; - smbfile = OpenSMBFile(filepath); + smbfile = + SMB_OpenFile (SMBPath(filepath), SMB_OPEN_READING, SMB_OF_OPEN, smbconn); if (!smbfile) { @@ -350,27 +319,17 @@ LoadBufferFromSMB (char * sbuffer, char *filepath, int length, bool silent) return 0; } - if(length > 0 && length <= 2048) // do a partial read (eg: to check file header) + ret = SMB_ReadFile (sbuffer, 1024, boffset, smbfile); + + if (IsZipFile (sbuffer)) { - boffset = SMB_ReadFile (sbuffer, length, 0, smbfile); + boffset = UnZipFile ((unsigned char *)sbuffer, smbfile); // unzip from SMB } - else // load whole file + else { - ret = SMB_ReadFile (sbuffer, 2048, boffset, smbfile); - - if (IsZipFile (sbuffer)) - { - boffset = UnZipBuffer ((unsigned char *)sbuffer, METHOD_SMB); // unzip from SMB - } - else - { - // Just load the file up - while ((ret = SMB_ReadFile (sbuffer + boffset, 2048, boffset, smbfile)) > 0) - { - boffset += ret; - ShowProgress ((char *)"Loading...", boffset, length); - } - } + // Just load the file up + while ((ret = SMB_ReadFile (sbuffer + boffset, 1024, boffset, smbfile)) > 0) + boffset += ret; } SMB_CloseFile (smbfile); diff --git a/source/ngc/smbop.h b/source/ngc/smbop.h index 75dc1768..137e7e37 100644 --- a/source/ngc/smbop.h +++ b/source/ngc/smbop.h @@ -12,21 +12,14 @@ #define _NGCSMB_ -#include - bool InitializeNetwork(bool silent); bool ConnectShare (bool silent); char * SMBPath(char * path); int UpdateSMBdirname(); int ParseSMBdirectory (); -SMBFILE OpenSMBFile(char * filepath); -int LoadSMBFile (char * fbuffer, int length); -int LoadSMBSzFile(char * filepath, unsigned char * rbuffer); +int LoadSMBFile (char *filename, int length); int LoadBufferFromSMB (char *filepath, bool silent); -int LoadBufferFromSMB (char * sbuffer, char *filepath, int length, bool silent); +int LoadBufferFromSMB (char * sbuffer, char *filepath, bool silent); int SaveBufferToSMB (char *filepath, int datasize, bool silent); -int SaveBufferToSMB (char * sbuffer, char *filepath, int datasize, bool silent); - -extern SMBFILE smbfile; #endif diff --git a/source/ngc/vba.cpp b/source/ngc/vba.cpp index 00fe09cd..86a53f8a 100644 --- a/source/ngc/vba.cpp +++ b/source/ngc/vba.cpp @@ -38,7 +38,7 @@ extern "C" { #include "video.h" #include "vbaconfig.h" -extern bool ROMLoaded; +extern int ROMSize; extern int emulating; @@ -74,10 +74,10 @@ int main() } // Initialize libFAT for SD and USB - fatInit (8, false); + fatInitDefault(); // Initialize DVD subsystem (GameCube only) - #ifdef HW_DOL + #ifndef HW_RVL DVD_Init (); #endif @@ -98,7 +98,7 @@ int main() selectedMenu = 2; // change to preferences menu } - while (!ROMLoaded) + while (ROMSize == 0) { MainMenu (selectedMenu); } diff --git a/source/ngc/vba.h b/source/ngc/vba.h index e40890fc..91f52732 100644 --- a/source/ngc/vba.h +++ b/source/ngc/vba.h @@ -7,13 +7,14 @@ * * This file controls overall program flow. Most things start and end here! ***************************************************************************/ + #ifndef _VBA_H_ #define _VBA_H_ #include -#define VERSIONNUM "1.0.3" -#define VERSIONSTR "VBA GX 1.0.3" -#define VERSIONSTRFULL "Visual Boy Advance GX 1.0.3" +#define VERSIONNUM "1.0.1" +#define VERSIONSTR "VBA GX 1.0.1" +#define VERSIONSTRFULL "Visual Boy Advance GX 1.0.1" #define NOTSILENT 0 #define SILENT 1 @@ -45,9 +46,7 @@ struct SGCSettings{ char smbgcid[20]; char smbsvid[20]; char smbshare[20]; - int NGCZoom; // 0 - off, 1 - on int VerifySaves; - int render; // 0 - filtered, 1 - unfiltered }; extern struct SGCSettings GCSettings; diff --git a/source/ngc/vbaconfig.cpp b/source/ngc/vbaconfig.cpp index e81803ae..79ba7295 100644 --- a/source/ngc/vbaconfig.cpp +++ b/source/ngc/vbaconfig.cpp @@ -46,6 +46,4 @@ DefaultSettings () GCSettings.smbgcid[0] = 0; GCSettings.VerifySaves = 0; - GCSettings.NGCZoom = 0; // zooming default off - GCSettings.render = 0; // Unfiltered } diff --git a/source/ngc/vbasupport.cpp b/source/ngc/vbasupport.cpp index 36367835..f2ca93fb 100644 --- a/source/ngc/vbasupport.cpp +++ b/source/ngc/vbasupport.cpp @@ -13,40 +13,43 @@ #include #include -#include "agb/GBA.h" -#include "agb/agbprint.h" +#include "GBA.h" +#include "agbprint.h" #include "Flash.h" #include "Port.h" #include "RTC.h" #include "Sound.h" +#include "Text.h" #include "unzip.h" #include "Util.h" -#include "dmg/GB.h" -#include "dmg/gbGlobals.h" -#include "images/saveicon.h" -//#include "dmg/gbSound.h" +#include "gb/GB.h" +#include "gb/gbGlobals.h" #include "vba.h" #include "fileop.h" -#include "dvd.h" -#include "smbop.h" -#include "memcardop.h" #include "audio.h" #include "vmmem.h" +#include "pal60.h" #include "input.h" #include "video.h" #include "menudraw.h" -#include "gcunzip.h" extern "C" { #include "tbtime.h" +#include "sdfileio.h" } static tb_t start, now; u32 loadtimeradjust; +int throttle = 100; +u32 throttleLastTime = 0; + +static u32 autoFrameSkipLastTime = 0; +static int frameskipadjust = 0; + int vAspect = 0; int hAspect = 0; @@ -79,7 +82,7 @@ int systemColorDepth = 0; u16 systemGbPalette[24]; u16 systemColorMap16[0x10000]; //u32 systemColorMap32[0x10000]; -u32 *systemColorMap32 = NULL; +u32 *systemColorMap32 = (u32 *)&systemColorMap16; struct EmulatedSystem emulator = { @@ -119,7 +122,7 @@ bool systemPauseOnFrame() { return false; } -/* + void GC_Sleep(u32 dwMiliseconds) { int nVBlanks = (dwMiliseconds / 16); @@ -128,39 +131,21 @@ void GC_Sleep(u32 dwMiliseconds) VIDEO_WaitVSync(); } } -*/ - -static u32 autoFrameSkipLastTime = 0; void system10Frames(int rate) { - if (cartridgeType == 1) + if ( cartridgeType == 1 ) return; u32 time = systemGetClock(); u32 diff = time - autoFrameSkipLastTime; - - // difference should be 1/6 second or (1/6)*1000 ms or 167 ms - int timeOff = (167 - diff); - - if(timeOff > 3 && timeOff < 60) // we're running ahead! - usleep(timeOff*1000); // let's take a nap - else - timeOff = 0; // timeoff was not valid - - if(diff > 175 && systemFrameSkip < 9) - systemFrameSkip++; - else if(diff < 150 && systemFrameSkip > 0) - systemFrameSkip--; - - autoFrameSkipLastTime = time + timeOff; // total time = processing time + sleep time - - /* - // Original VBA SDL frameskip algorithm int speed = 100; if(diff) speed = (1000000/rate)/diff; + /* char temp[512]; + sprintf(temp,"Speed: %i",speed); + MENU_DrawString( -1, 450,temp , 1 ); */ if(speed >= 98) { @@ -189,7 +174,6 @@ void system10Frames(int rate) } autoFrameSkipLastTime = time; - */ } /**************************************************************************** @@ -197,296 +181,113 @@ void system10Frames(int rate) ****************************************************************************/ void systemGbPrint(u8 *data,int pages,int feed,int palette, int contrast) {} -void debuggerOutput(const char *s, u32 addr) {} -void (*dbgOutput)(const char *s, u32 addr) = debuggerOutput; +void debuggerOutput(char *, u32) {} +void (*dbgOutput)(char *, u32) = debuggerOutput; void systemMessage(int num, const char *msg, ...) {} -bool MemCPUReadBatteryFile(char * membuffer, int size) +/**************************************************************************** +* Saves +****************************************************************************/ + +bool LoadBattery(int method, bool silent) { - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; + char filepath[1024]; + bool result = false; - if(size == 512 || size == 0x2000) - { - memcpy(eepromData, membuffer, size); - } - else + ShowAction ((char*) "Loading..."); + + if(method == METHOD_AUTO) + method = autoSaveMethod(); // we use 'Save' because we need R/W + + if(method == METHOD_SD || method == METHOD_USB) { - if(size == 0x20000) - { - memcpy(flashSaveMemory, membuffer, 0x20000); - flashSetSize(0x20000); - } - else - { - memcpy(flashSaveMemory, membuffer, 0x10000); - flashSetSize(0x10000); - } + ChangeFATInterface(method, NOTSILENT); + sprintf (filepath, "%s/%s/%s.sav", ROOTFATDIR, GCSettings.SaveFolder, ROMFilename); + result = emulator.emuReadBattery(filepath); } - return true; -} -extern int gbaSaveType; + if(!result && !silent) + WaitPrompt ((char*) "Save file not found"); + + return result; +} -int MemCPUWriteBatteryFile(char * membuffer) +bool SaveBattery(int method, bool silent) { - int result = 0; - if(gbaSaveType == 0) + char filepath[1024]; + bool result = false; + + ShowAction ((char*) "Saving..."); + + if(method == METHOD_AUTO) + method = autoSaveMethod(); // we use 'Save' because we need R/W + + if(method == METHOD_SD || method == METHOD_USB) { - if(eepromInUse) - gbaSaveType = 3; - else - switch(saveType) - { - case 1: - gbaSaveType = 1; - break; - case 2: - gbaSaveType = 2; - break; - } + ChangeFATInterface(method, NOTSILENT); + sprintf (filepath, "%s/%s/%s.sav", ROOTFATDIR, GCSettings.SaveFolder, ROMFilename); + result = emulator.emuWriteBattery(filepath); } - if((gbaSaveType) && (gbaSaveType!=5)) + if(!silent) { - // only save if Flash/Sram in use or EEprom in use - if(gbaSaveType != 3) - { - if(gbaSaveType == 2) - { - memcpy(membuffer, flashSaveMemory, flashSize); - result = flashSize; - } - else - { - memcpy(membuffer, flashSaveMemory, 0x10000); - result = 0x10000; - } - } + if(result) + WaitPrompt ((char*) "Save successful"); else - { - memcpy(membuffer, eepromData, eepromSize); - result = eepromSize; - } + WaitPrompt ((char*) "Save failed"); } - return result; -} -/**************************************************************************** -* SetFileBytesWritten -* Sets the # of bytes written into a file -* Used by GBA.cpp and GB.cpp -****************************************************************************/ - -void SetFileBytesWritten(int bytes) -{ - //datasize = bytes; + return result; } -/**************************************************************************** -* LoadBatteryOrState -* Load Battery/State file into memory -* action = 0 - Load battery -* action = 1 - Load state -****************************************************************************/ - -bool LoadBatteryOrState(int method, int action, bool silent) +bool LoadState(int method, bool silent) { char filepath[1024]; bool result = false; - int offset = 0; - char ext[4]; - - if(action == 0) - sprintf(ext, "sav"); - else - sprintf(ext, "sgm"); ShowAction ((char*) "Loading..."); if(method == METHOD_AUTO) method = autoSaveMethod(); // we use 'Save' because we need R/W - AllocSaveBuffer(); - - // load the file into savebuffer - if(method == METHOD_SD || method == METHOD_USB) { - if(ChangeFATInterface(method, NOTSILENT)) - { - sprintf (filepath, "%s/%s/%s.%s", ROOTFATDIR, GCSettings.SaveFolder, ROMFilename, ext); - offset = LoadBufferFromFAT (filepath, silent); - } - } - else if(method == METHOD_SMB) - { - sprintf (filepath, "%s/%s.%s", GCSettings.SaveFolder, ROMFilename, ext); - offset = LoadBufferFromSMB (filepath, silent); - } - else if(method == METHOD_MC_SLOTA || method == METHOD_MC_SLOTB) - { - sprintf (filepath, "%s.%s", ROMFilename, ext); - - if(method == METHOD_MC_SLOTA) - offset = LoadBufferFromMC (savebuffer, CARD_SLOTA, filepath, silent); - else - offset = LoadBufferFromMC (savebuffer, CARD_SLOTB, filepath, silent); - - // skip save icon and comments for Memory Card saves - int skip = sizeof (saveicon); - skip += 64; // sizeof savecomment - memmove(savebuffer, savebuffer+skip, offset-skip); - offset -= skip; - } - - // load savebuffer into VBA memory - if (offset > 0) - { - if(action == 0) - { - if(cartridgeType == 1) - result = MemgbReadBatteryFile((char *)savebuffer, offset); - else - result = MemCPUReadBatteryFile((char *)savebuffer, offset); - } - else - { - result = emulator.emuReadMemState((char *)savebuffer, offset); - } + ChangeFATInterface(method, NOTSILENT); + sprintf (filepath, "%s/%s/%s.sgm", ROOTFATDIR, GCSettings.SaveFolder, ROMFilename); + result = emulator.emuReadState(filepath); } - FreeSaveBuffer(); + if(!result && !silent) + WaitPrompt ((char*) "State file not found"); - if(!silent && !result) - { - if(offset == 0) - { - if(action == 0) - WaitPrompt ((char*) "Save file not found"); - else - WaitPrompt ((char*) "State file not found"); - } - else - { - if(action == 0) - WaitPrompt ((char*) "Invalid save file"); - else - WaitPrompt ((char*) "Invalid state file"); - } - } return result; } - -/**************************************************************************** -* SaveBatteryOrState -* Save Battery/State file into memory -* action = 0 - Save battery -* action = 1 - Save state -****************************************************************************/ - -bool SaveBatteryOrState(int method, int action, bool silent) +bool SaveState(int method, bool silent) { char filepath[1024]; - char savecomment[2][32]; bool result = false; - int offset = 0; - char ext[4]; - char savetype[10]; - int datasize = 0; // we need the actual size of the data written - - if(action == 0) - { - sprintf(ext, "sav"); - sprintf(savetype, "SRAM"); - } - else - { - sprintf(ext, "sgm"); - sprintf(savetype, "Freeze"); - } ShowAction ((char*) "Saving..."); if(method == METHOD_AUTO) method = autoSaveMethod(); // we use 'Save' because we need R/W - AllocSaveBuffer(); - - // add save icon and comments for Memory Card saves - if(method == METHOD_MC_SLOTA || method == METHOD_MC_SLOTB) + if(method == METHOD_SD || method == METHOD_USB) { - offset = sizeof (saveicon); - - // Copy in save icon - memcpy (savebuffer, saveicon, offset); - - // And the comments - sprintf (savecomment[0], "%s %s", VERSIONSTR, savetype); - strncpy(savecomment[1], ROMFilename, 31); // truncate filename to 31 chars - savecomment[1][31] = 0; // make sure last char is null byte - memcpy (savebuffer + offset, savecomment, 64); - offset += 64; + ChangeFATInterface(method, NOTSILENT); + sprintf (filepath, "%s/%s/%s.sgm", ROOTFATDIR, GCSettings.SaveFolder, ROMFilename); + result = emulator.emuWriteState(filepath); } - // put VBA memory into savebuffer, sets datasize to size of memory written - if(action == 0) + if(!silent) { - if(cartridgeType == 1) - datasize = MemgbWriteBatteryFile((char *)savebuffer+offset); + if(result) + WaitPrompt ((char*) "Save successful"); else - datasize = MemCPUWriteBatteryFile((char *)savebuffer+offset); - } - else - { - bool written = emulator.emuWriteMemState((char *)savebuffer+offset, SAVEBUFFERSIZE-offset); - // we really should set datasize to the exact memory size written - // but instead we'll set it at 128K - although much of it will go unused - if(written) - datasize = (1024*128); + WaitPrompt ((char*) "Save failed"); } - // write savebuffer into file - if(datasize > 0) - { - if(method == METHOD_SD || method == METHOD_USB) - { - if(ChangeFATInterface(method, NOTSILENT)) - { - sprintf (filepath, "%s/%s/%s.%s", ROOTFATDIR, GCSettings.SaveFolder, ROMFilename, ext); - offset = SaveBufferToFAT (filepath, datasize, silent); - } - } - else if(method == METHOD_SMB) - { - sprintf (filepath, "%s/%s.%s", GCSettings.SaveFolder, ROMFilename, ext); - offset = SaveBufferToSMB (filepath, datasize, silent); - } - else if(method == METHOD_MC_SLOTA || method == METHOD_MC_SLOTB) - { - sprintf (filepath, "%s.%s", ROMFilename, ext); - - if(method == METHOD_MC_SLOTA) - offset = SaveBufferToMC (savebuffer, CARD_SLOTA, filepath, datasize+offset, silent); - else - offset = SaveBufferToMC (savebuffer, CARD_SLOTB, filepath, datasize+offset, silent); - } - - if(offset > 0) - { - if(!silent) - WaitPrompt ((char*) "Save successful"); - result = true; - } - } - else - { - if(!silent) - WaitPrompt((char *)"No data to save!"); - } - - FreeSaveBuffer(); - return result; } @@ -532,73 +333,21 @@ u32 systemReadJoypad(int which) ****************************************************************************/ void systemDrawScreen() { + // GB / GBC Have oodles of time - so sync on VSync GX_Render( srcWidth, srcHeight, pix, srcPitch ); -} - -extern bool gbUpdateSizes(); -bool LoadGBROM(int method) -{ - // cleanup GB memory - if(gbRom != NULL) - gbCleanUp(); - gbRom = (u8 *)malloc(1024*1024*4); // allocate 4 MB to GB ROM - - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; - - switch (method) + #ifdef HW_RVL + VIDEO_WaitVSync (); + #else + if ( cartridgeType == 1 ) { - case METHOD_SD: - case METHOD_USB: - gbRomSize = LoadFATFile ((char *)gbRom, 0); - break; - - case METHOD_DVD: - gbRomSize = LoadDVDFile ((unsigned char *)gbRom, 0); - break; - - case METHOD_SMB: - gbRomSize = LoadSMBFile ((char *)gbRom, 0); - break; + VIDEO_WaitVSync(); } - - if(!gbRom) - return false; - - return gbUpdateSizes(); + #endif } -bool LoadVBAROM(int method) +int loadVBAROM(char filename[]) { - int type = 0; - bool loaded = false; - - // image type (checks file extension) - if(utilIsGBAImage(filelist[selection].filename)) - type = 2; - else if(utilIsGBImage(filelist[selection].filename)) - type = 1; - else if(utilIsZipFile(filelist[selection].filename)) - { - // we need to check the file extension of the first file in the archive - char * zippedFilename = GetFirstZipFilename (method); - - if(strlen(zippedFilename) > 0) - { - if(utilIsGBAImage(zippedFilename)) - type = 2; - else if(utilIsGBImage(zippedFilename)) - type = 1; - } - } - - // leave before we do anything - if(type != 1 && type != 2) - { - WaitPrompt((char *)"Unknown game image!"); - return false; - } - cartridgeType = 0; srcWidth = 0; srcHeight = 0; @@ -606,15 +355,17 @@ bool LoadVBAROM(int method) destHeight = 0; srcPitch = 0; + IMAGE_TYPE type = utilFindType(filename); + switch( type ) { - case 2: + case IMAGE_GBA: //WaitPrompt("GameBoy Advance Image"); cartridgeType = 2; emulator = GBASystem; srcWidth = 240; srcHeight = 160; - loaded = VMCPULoadROM(method); + VMCPULoadROM(filename); // Actual Visual Aspect is 1.57 hAspect = 70; vAspect = 46; @@ -624,13 +375,13 @@ bool LoadVBAROM(int method) cpuSaveType = 0; break; - case 1: + case IMAGE_GB: //WaitPrompt("GameBoy Image"); cartridgeType = 1; emulator = GBSystem; srcWidth = 160; srcHeight = 144; - loaded = LoadGBROM(method); + gbLoadRom(filename); // Actual physical aspect is 1.0 hAspect = 60; vAspect = 46; @@ -638,52 +389,46 @@ bool LoadVBAROM(int method) soundQuality = 1; soundBufferLen = 1470 * 2; break; + + default: + WaitPrompt((char *)"Unknown Image"); + return 0; + break; } - if(!loaded) + // Set defaults + flashSetSize(0x10000); + rtcEnable(true); + agbPrintEnable(false); + soundOffFlag = false; + soundLowPass = true; + + // Setup GX + GX_Render_Init( srcWidth, srcHeight, hAspect, vAspect ); + + if ( cartridgeType == 1 ) { - WaitPrompt((char *)"Error loading game!"); - return false; + gbSoundReset(); + gbSoundSetQuality(soundQuality); } else { - // Set defaults - flashSetSize(0x20000); // 128K saves - rtcEnable(true); - agbPrintEnable(false); - soundOffFlag = false; - soundLowPass = true; - - // Setup GX - GX_Render_Init( srcWidth, srcHeight, hAspect, vAspect ); - - if ( cartridgeType == 1 ) - { - gbSoundReset(); - gbSoundSetQuality(soundQuality); - } - else - { - soundSetQuality(soundQuality); - CPUInit("/VBA/BIOS/BIOS.GBA", 1); - CPUReset(); - } - - soundVolume = 0; - systemSoundOn = true; + soundSetQuality(soundQuality); + CPUInit("/VBA/BIOS/BIOS.GBA", 1); + CPUReset(); + } - soundInit(); + soundVolume = 0; + systemSoundOn = true; - emulating = 1; + soundInit(); - // reset frameskip variables - autoFrameSkipLastTime = systemFrameSkip = 0; + emulating = 1; - // Start system clock - mftb(&start); + // Start system clock + mftb(&start); - return true; - } + return 1; } /**************************************************************************** diff --git a/source/ngc/vbasupport.h b/source/ngc/vbasupport.h index 9e9ac491..1222e587 100644 --- a/source/ngc/vbasupport.h +++ b/source/ngc/vbasupport.h @@ -12,7 +12,9 @@ extern struct EmulatedSystem emulator; extern u32 loadtimeradjust; -bool LoadVBAROM(int method); +int loadVBAROM(char filename[]); void InitialisePalette(); -bool LoadBatteryOrState(int method, int action, bool silent); -bool SaveBatteryOrState(int method, int action, bool silent); +bool LoadBattery(int method, bool silent); +bool SaveBattery(int method, bool silent); +bool LoadState(int method, bool silent); +bool SaveState(int method, bool silent); diff --git a/source/ngc/video.cpp b/source/ngc/video.cpp index adf1306d..ceb796b6 100644 --- a/source/ngc/video.cpp +++ b/source/ngc/video.cpp @@ -11,43 +11,33 @@ * These are pretty standard functions to setup and use GX scaling. ***************************************************************************/ #include -#include #include #include #include #include #include #include "images/bg.h" -#include "vba.h" -#include "menudraw.h" -//#include "pal60.h" - -extern unsigned int SMBTimer; // timer to reset SMB connection -u32 FrameTimer = 0; /*** External 2D Video ***/ /*** 2D Video Globals ***/ -GXRModeObj *vmode = NULL; // Graphics Mode Object -unsigned int *xfb[2]; // Framebuffers -int whichfb = 0; // Frame buffer toggle +GXRModeObj *vmode; /*** Graphics Mode Object ***/ +u32 *xfb[2] = { NULL, NULL }; /*** Framebuffers ***/ +int whichfb = 0; /*** Frame buffer toggle ***/ int screenheight; /*** 3D GX ***/ #define DEFAULT_FIFO_SIZE ( 256 * 1024 ) static u8 gp_fifo[DEFAULT_FIFO_SIZE] ATTRIBUTE_ALIGN(32); -unsigned int copynow = GX_FALSE; /*** Texture memory ***/ -static u8 *texturemem = NULL; +static u8 *texturemem; static int texturesize; GXTexObj texobj; static Mtx view; static int vwidth, vheight, oldvwidth, oldvheight; -static int video_vaspect, video_haspect; -int updateScaling; -float zoom_level = 1; +unsigned int copynow = GX_FALSE; #define HASPECT 80 #define VASPECT 45 @@ -81,146 +71,6 @@ static camera cam = { {0.0F, 0.0F, 0.0F}, {0.0F, 0.0F, -0.5F} }; -#ifdef VIDEO_THREADING -/**************************************************************************** - * VideoThreading - ***************************************************************************/ -#define TSTACK 16384 -lwpq_t videoblankqueue; -lwp_t vbthread; -static unsigned char vbstack[TSTACK]; - -/**************************************************************************** - * vbgetback - * - * This callback enables the emulator to keep running while waiting for a - * vertical blank. - * - * Putting LWP to good use :) - ***************************************************************************/ -static void * -vbgetback (void *arg) -{ - while (1) - { - VIDEO_WaitVSync (); /**< Wait for video vertical blank */ - LWP_SuspendThread (vbthread); - } - - return NULL; -} - -/**************************************************************************** - * InitVideoThread - * - * libOGC provides a nice wrapper for LWP access. - * This function sets up a new local queue and attaches the thread to it. - ***************************************************************************/ -void -InitVideoThread () -{ - /*** Initialise a new queue ***/ - LWP_InitQueue (&videoblankqueue); - - /*** Create the thread on this queue ***/ - LWP_CreateThread (&vbthread, vbgetback, NULL, vbstack, TSTACK, 80); -} - -#endif - -/**************************************************************************** - * copy_to_xfb - * - * Stock code to copy the GX buffer to the current display mode. - * Also increments the frameticker, as it's called for each vb. - ***************************************************************************/ -static void -copy_to_xfb (u32 arg) -{ - if (copynow == GX_TRUE) - { - GX_CopyDisp (xfb[whichfb], GX_TRUE); - GX_Flush (); - copynow = GX_FALSE; - } - - FrameTimer++; - SMBTimer++; -} - -/**************************************************************************** - * Drawing screen - ***************************************************************************/ -void -clearscreen () -{ - int colour = COLOR_BLACK; - - whichfb ^= 1; - VIDEO_ClearFrameBuffer (vmode, xfb[whichfb], colour); - memcpy (xfb[whichfb], &bg, 1280 * 480); -} - -void -showscreen () -{ - VIDEO_SetNextFramebuffer (xfb[whichfb]); - VIDEO_Flush (); - VIDEO_WaitVSync (); -} - -/**************************************************************************** - * Scaler Support Functions - ****************************************************************************/ -static void draw_init(void) -{ - GX_ClearVtxDesc (); - GX_SetVtxDesc (GX_VA_POS, GX_INDEX8); - GX_SetVtxDesc (GX_VA_CLR0, GX_INDEX8); - GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT); - - GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); - GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - - GX_SetArray (GX_VA_POS, square, 3 * sizeof (s16)); - - GX_SetNumTexGens (1); - GX_SetNumChans (0); - - GX_SetTexCoordGen (GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); - - GX_InvalidateTexAll(); - memset (&view, 0, sizeof (Mtx)); - guLookAt(view, &cam.pos, &cam.up, &cam.view); - GX_LoadPosMtxImm (view, GX_PNMTX0); -} - -static void draw_vert(u8 pos, u8 c, f32 s, f32 t) -{ - GX_Position1x8(pos); - GX_Color1x8(c); - GX_TexCoord2f32(s, t); -} - -static void draw_square(Mtx v) -{ - Mtx m; // model matrix. - Mtx mv; // modelview matrix. - - guMtxIdentity(m); - guMtxTransApply(m, m, 0, 0, -100); - guMtxConcat(v, m, mv); - - GX_LoadPosMtxImm(mv, GX_PNMTX0); - GX_Begin(GX_QUADS, GX_VTXFMT0, 4); - draw_vert(0, 0, 0.0, 0.0); - draw_vert(1, 0, 1.0, 0.0); - draw_vert(2, 0, 1.0, 1.0); - draw_vert(3, 0, 0.0, 1.0); - GX_End(); -} - /**************************************************************************** * StartGX ****************************************************************************/ @@ -228,39 +78,32 @@ void GX_Start() { Mtx p; - GXColor background = { 0, 0, 0, 0xff }; + GXColor gxbackground = { 0, 0, 0, 0xff }; /*** Clear out FIFO area ***/ - memset (&gp_fifo, 0, DEFAULT_FIFO_SIZE); + memset(&gp_fifo, 0, DEFAULT_FIFO_SIZE); /*** Initialise GX ***/ - GX_Init (&gp_fifo, DEFAULT_FIFO_SIZE); - GX_SetCopyClear (background, 0x00ffffff); - - - GX_SetViewport (0, 0, vmode->fbWidth, vmode->efbHeight, 0, 1); - GX_SetDispCopyYScale ((f32) vmode->xfbHeight / (f32) vmode->efbHeight); - GX_SetScissor (0, 0, vmode->fbWidth, vmode->efbHeight); - - GX_SetDispCopySrc (0, 0, vmode->fbWidth, vmode->efbHeight); - GX_SetDispCopyDst (vmode->fbWidth, vmode->xfbHeight); - GX_SetCopyFilter (vmode->aa, vmode->sample_pattern, GX_TRUE, vmode->vfilter); - - GX_SetFieldMode (vmode->field_rendering, ((vmode->viHeight == 2 * vmode->xfbHeight) ? GX_ENABLE : GX_DISABLE)); - - GX_SetPixelFmt (GX_PF_RGB8_Z24, GX_ZC_LINEAR); - GX_SetCullMode (GX_CULL_NONE); - GX_SetDispCopyGamma (GX_GM_1_0); - GX_SetZMode (GX_TRUE, GX_LEQUAL, GX_TRUE); - GX_SetColorUpdate (GX_TRUE); + GX_Init(&gp_fifo, DEFAULT_FIFO_SIZE); + GX_SetCopyClear(gxbackground, 0x00ffffff); + + GX_SetViewport(0, 0, vmode->fbWidth, vmode->efbHeight, 0, 1); + GX_SetDispCopyYScale((f32) vmode->xfbHeight / (f32) vmode->efbHeight); + GX_SetScissor(0, 0, vmode->fbWidth, vmode->efbHeight); + GX_SetDispCopySrc(0, 0, vmode->fbWidth, vmode->efbHeight); + GX_SetDispCopyDst(vmode->fbWidth, vmode->xfbHeight); + GX_SetCopyFilter(vmode->aa, vmode->sample_pattern, GX_TRUE, + vmode->vfilter); + GX_SetFieldMode(vmode->field_rendering, + ((vmode->viHeight == + 2 * vmode->xfbHeight) ? GX_ENABLE : GX_DISABLE)); + GX_SetPixelFmt(GX_PF_RGB8_Z24, GX_ZC_LINEAR); + GX_SetCullMode(GX_CULL_NONE); + GX_CopyDisp(xfb[whichfb ^ 1], GX_TRUE); + GX_SetDispCopyGamma(GX_GM_1_0); guPerspective(p, 60, 1.33F, 10.0F, 1000.0F); GX_LoadProjectionMtx(p, GX_PERSPECTIVE); - - GX_SetTevOp(GX_TEVSTAGE0, GX_DECAL); - GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - - GX_CopyDisp (xfb[whichfb], GX_TRUE); // reset xfb } /**************************************************************************** @@ -285,170 +128,96 @@ UpdatePadsCB () ****************************************************************************/ void InitialiseVideo () { - /*** Start VIDEO Subsystem ***/ - VIDEO_Init(); - - vmode = VIDEO_GetPreferredMode(NULL); + /*** Start VIDEO Subsystem ***/ + VIDEO_Init(); -#ifdef HW_DOL -/* we have component cables, but the preferred mode is interlaced - * why don't we switch into progressive? - * on the Wii, the user can do this themselves on their Wii Settings */ - if(VIDEO_HaveComponentCable() && vmode == &TVNtsc480IntDf) - vmode = &TVNtsc480Prog; -#endif + vmode = VIDEO_GetPreferredMode(NULL); + VIDEO_Configure(vmode); - VIDEO_Configure(vmode); + screenheight = vmode->xfbHeight; - screenheight = vmode->xfbHeight; + xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); + xfb[1] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); - xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); - xfb[1] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); + VIDEO_SetNextFramebuffer(xfb[0]); + VIDEO_SetBlack(FALSE); + VIDEO_Flush(); + VIDEO_WaitVSync(); - // Clear framebuffers etc. - VIDEO_ClearFrameBuffer (vmode, xfb[0], COLOR_BLACK); - VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK); - VIDEO_SetNextFramebuffer (xfb[0]); + if(vmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync(); + VIDEO_SetPostRetraceCallback((VIRetraceCallback)UpdatePadsCB); + VIDEO_SetNextFramebuffer(xfb[0]); - // video callbacks - VIDEO_SetPostRetraceCallback ((VIRetraceCallback)UpdatePadsCB); - VIDEO_SetPreRetraceCallback ((VIRetraceCallback)copy_to_xfb); - - VIDEO_SetNextFramebuffer(xfb[0]); - VIDEO_SetBlack(FALSE); - - // set timings in VI to PAL60 - /*u32 *vreg = (u32 *)0xCC002000; - for (int i = 0; i < 64; i++ ) - vreg[i] = vpal60[i];*/ - - VIDEO_Flush(); - VIDEO_WaitVSync(); - - if(vmode->viTVMode&VI_NON_INTERLACE) - VIDEO_WaitVSync(); - - copynow = GX_FALSE; - GX_Start(); - - #ifdef VIDEO_THREADING - InitVideoThread (); - #endif + GX_Start(); } /**************************************************************************** - * ResetVideo_Emu - * - * Reset the video/rendering mode for the emulator rendering -****************************************************************************/ -void -ResetVideo_Emu () + * Scaler Support Functions + ****************************************************************************/ +static void draw_init(void) { - GXRModeObj *rmode; + GX_ClearVtxDesc(); + GX_SetVtxDesc(GX_VA_POS, GX_INDEX8); + GX_SetVtxDesc(GX_VA_CLR0, GX_INDEX8); + GX_SetVtxDesc(GX_VA_TEX0, GX_DIRECT); - rmode = vmode; // same mode as menu + GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); + GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - VIDEO_Configure (rmode); - VIDEO_ClearFrameBuffer (rmode, xfb[0], COLOR_BLACK); - VIDEO_ClearFrameBuffer (rmode, xfb[1], COLOR_BLACK); - VIDEO_Flush(); - VIDEO_WaitVSync(); - if (rmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); - else while (VIDEO_GetNextField()) VIDEO_WaitVSync(); + GX_SetArray(GX_VA_POS, square, 3 * sizeof(s16)); - GX_SetViewport (0, 0, rmode->fbWidth, rmode->efbHeight, 0, 1); - GX_SetDispCopyYScale ((f32) rmode->xfbHeight / (f32) rmode->efbHeight); - GX_SetScissor (0, 0, rmode->fbWidth, rmode->efbHeight); + GX_SetNumTexGens(1); + GX_SetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); - GX_SetDispCopySrc (0, 0, rmode->fbWidth, rmode->efbHeight); - GX_SetDispCopyDst (rmode->fbWidth, rmode->xfbHeight); - GX_SetCopyFilter (rmode->aa, rmode->sample_pattern, (GCSettings.render == 0) ? GX_TRUE : GX_FALSE, rmode->vfilter); // AA on only for filtered mode + GX_InvalidateTexAll(); - GX_SetFieldMode (rmode->field_rendering, ((rmode->viHeight == 2 * rmode->xfbHeight) ? GX_ENABLE : GX_DISABLE)); - GX_SetPixelFmt (GX_PF_RGB8_Z24, GX_ZC_LINEAR); + GX_InitTexObj(&texobj, texturemem, vwidth, vheight, GX_TF_RGB565, + GX_CLAMP, GX_CLAMP, GX_FALSE); } -/**************************************************************************** - * ResetVideo_Menu - * - * Reset the video/rendering mode for the menu -****************************************************************************/ -void -ResetVideo_Menu () +static void draw_vert(u8 pos, u8 c, f32 s, f32 t) { - VIDEO_Configure (vmode); - VIDEO_ClearFrameBuffer (vmode, xfb[whichfb], COLOR_BLACK); - VIDEO_Flush(); - VIDEO_WaitVSync(); - if (vmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); - else while (VIDEO_GetNextField()) VIDEO_WaitVSync(); - - GX_SetViewport (0, 0, vmode->fbWidth, vmode->efbHeight, 0, 1); - GX_SetDispCopyYScale ((f32) vmode->xfbHeight / (f32) vmode->efbHeight); - GX_SetScissor (0, 0, vmode->fbWidth, vmode->efbHeight); - - GX_SetDispCopySrc (0, 0, vmode->fbWidth, vmode->efbHeight); - GX_SetDispCopyDst (vmode->fbWidth, vmode->xfbHeight); - GX_SetCopyFilter (vmode->aa, vmode->sample_pattern, GX_TRUE, vmode->vfilter); - - GX_SetFieldMode (vmode->field_rendering, ((vmode->viHeight == 2 * vmode->xfbHeight) ? GX_ENABLE : GX_DISABLE)); - GX_SetPixelFmt (GX_PF_RGB8_Z24, GX_ZC_LINEAR); + GX_Position1x8(pos); + GX_Color1x8(c); + GX_TexCoord2f32(s, t); } -void UpdateScaling() +static void draw_square(Mtx v) { - // Update scaling - int xscale = video_haspect; - int yscale = video_vaspect; - - // change zoom - xscale *= zoom_level; - yscale *= zoom_level; - - // Set new aspect (now with crap AR hack!) - square[0] = square[9] = (-xscale - 7); - square[3] = square[6] = (xscale + 7); - square[1] = square[4] = (yscale + 7); - square[7] = square[10] = (-yscale - 7); - - GX_InvVtxCache (); // update vertex cache - - GX_InitTexObj (&texobj, texturemem, vwidth, vheight, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); // initialize the texture obj we are going to use - - if (GCSettings.render == 1) - GX_InitTexObjLOD(&texobj,GX_NEAR,GX_NEAR_MIP_NEAR,2.5,9.0,0.0,GX_FALSE,GX_FALSE,GX_ANISO_1); // original/unfiltered video mode: force texture filtering OFF + Mtx m; // model matrix. + Mtx mv; // modelview matrix. - GX_LoadTexObj (&texobj, GX_TEXMAP0); // load texture object so its ready to use + guMtxIdentity(m); + guMtxTransApply(m, m, 0, 0, -100); + guMtxConcat(v, m, mv); - draw_init(); - updateScaling = 0; + GX_LoadPosMtxImm(mv, GX_PNMTX0); + GX_Begin(GX_QUADS, GX_VTXFMT0, 4); + draw_vert(0, 0, 0.0, 0.0); + draw_vert(1, 0, 1.0, 0.0); + draw_vert(2, 0, 1.0, 1.0); + draw_vert(3, 0, 0.0, 1.0); + GX_End(); } void GX_Render_Init(int width, int height, int haspect, int vaspect) { - ResetVideo_Emu (); // reset video to emulator rendering settings - - if (texturemem) - free(texturemem); + /*** Set new aspect (now with crap AR hack!) ***/ + square[0] = square[9] = (-haspect - 7); + square[3] = square[6] = (haspect + 7); + square[1] = square[4] = (vaspect + 7); + square[7] = square[10] = (-vaspect - 7); /*** Allocate 32byte aligned texture memory ***/ texturesize = (width * height) * 2; - texturemem = (u8 *) memalign(32, texturesize); memset(texturemem, 0, texturesize); /*** Setup for first call to scaler ***/ - vwidth = width; - vheight = height; - oldvwidth = oldvheight = -1; - - video_vaspect = vaspect; - video_haspect = haspect; - - UpdateScaling(); + vwidth = vheight = oldvwidth = oldvheight = -1; } - /**************************************************************************** * GX_Render * @@ -469,30 +238,24 @@ void GX_Render(int width, int height, u8 * buffer, int pitch) vwidth = width; vheight = height; - #ifdef VIDEO_THREADING - // Ensure previous vb has complete - while ((LWP_ThreadIsSuspended (vbthread) == 0) || (copynow == GX_TRUE)) - #else - while (copynow == GX_TRUE) - #endif - { - usleep (50); - } - whichfb ^= 1; - if(updateScaling) - { - UpdateScaling(); - } - if ((oldvheight != vheight) || (oldvwidth != vwidth)) { + /** Update scaling **/ oldvwidth = vwidth; oldvheight = vheight; - updateScaling = 1; + draw_init(); + memset(&view, 0, sizeof(Mtx)); + guLookAt(view, &cam.pos, &cam.up, &cam.view); + GX_SetViewport(0, 0, vmode->fbWidth, vmode->efbHeight, 0, 1); } + GX_InvVtxCache(); + GX_InvalidateTexAll(); + GX_SetTevOp(GX_TEVSTAGE0, GX_DECAL); + GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + for (h = 0; h < vheight; h += 4) { for (w = 0; w < (vwidth >> 2); w++) @@ -522,43 +285,43 @@ void GX_Render(int width, int height, u8 * buffer, int pitch) } DCFlushRange(texturemem, texturesize); - GX_InvalidateTexAll (); + + GX_SetNumChans(1); + GX_LoadTexObj(&texobj, GX_TEXMAP0); draw_square(view); GX_DrawDone(); + GX_SetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GX_SetColorUpdate(GX_TRUE); + GX_CopyDisp(xfb[whichfb], GX_TRUE); + GX_Flush(); + VIDEO_SetNextFramebuffer(xfb[whichfb]); VIDEO_Flush(); - copynow = GX_TRUE; - -#ifdef VIDEO_THREADING - // Return to caller, don't waste time waiting for vb - LWP_ResumeThread (vbthread); -#endif + //VIDEO_WaitVSync(); } + /**************************************************************************** - * Zoom Functions + * Drawing screen ***************************************************************************/ void -zoom (float speed) +clearscreen (int c) { - if (zoom_level > 1) - zoom_level += (speed / -100.0); - else - zoom_level += (speed / -200.0); - - if (zoom_level < 0.5) zoom_level = 0.5; - else if (zoom_level > 10.0) zoom_level = 10.0; + int colour = COLOR_WHITE; - oldvheight = 0; // update video + whichfb ^= 1; + VIDEO_ClearFrameBuffer (vmode, xfb[whichfb], colour); + memcpy (xfb[whichfb], &bg, 1280 * 480); } void -zoom_reset () +showscreen () { - zoom_level = 1.0; - - oldvheight = 0; // update video + copynow = GX_FALSE; + VIDEO_SetNextFramebuffer (xfb[whichfb]); + VIDEO_Flush (); + VIDEO_WaitVSync (); } diff --git a/source/ngc/video.h b/source/ngc/video.h index 0d9f05f6..591f992b 100644 --- a/source/ngc/video.h +++ b/source/ngc/video.h @@ -15,13 +15,9 @@ #define __GXHDR__ void InitialiseVideo (); -void GX_Start(); void GX_Render_Init(int width, int height, int haspect, int vaspect); void GX_Render(int width, int height, u8 * buffer, int pitch); -void clearscreen (); +void clearscreen (int colour = COLOR_BLACK); void showscreen (); -void zoom (float speed); -void zoom_reset (); -void ResetVideo_Menu (); #endif diff --git a/source/ngc/vmmem.cpp b/source/ngc/vmmem.cpp index fb974d0a..6ad3ef67 100644 --- a/source/ngc/vmmem.cpp +++ b/source/ngc/vmmem.cpp @@ -9,6 +9,7 @@ ***************************************************************************/ #ifdef HW_RVL +#include "sdfileio.h" #include #include #include @@ -16,18 +17,12 @@ #include #include -#include "agb/GBA.h" +#include "GBA.h" #include "Globals.h" #include "Util.h" #include "Port.h" -#include "vba.h" -#include "smbop.h" -#include "fileop.h" -#include "dvd.h" #include "menudraw.h" -#include "filesel.h" -#include "gcunzip.h" extern "C" { #include "tbtime.h" @@ -40,7 +35,9 @@ extern "C" { unsigned int MEM2Storage = 0x91000000; static char *gbabase = NULL; +static FILE *romfile = NULL; static u32 GBAROMSize = 0; +static char romfilename[1024]; /** * GBA Memory @@ -91,7 +88,12 @@ static void VMClose( void ) if ( gbabase != NULL ) free(gbabase); + if ( romfile != NULL ) + gen_fclose(romfile); + gbabase = NULL; + romfile = NULL; + } /**************************************************************************** @@ -99,49 +101,49 @@ static void VMClose( void ) * * MEM2 version of GBA CPULoadROM ****************************************************************************/ - -bool VMCPULoadROM(int method) +int VMCPULoadROM( char *filename ) { - VMClose(); - VMAllocGBA(); - GBAROMSize = 0; + int res=0; + char temp[512]; + VMClose(); + VMAllocGBA(); + + GBAROMSize = 0; + + sprintf(temp,"Filename %s\n", filename); + //WaitPrompt(temp); + + romfile = gen_fopen(filename, "rb"); + if ( romfile == NULL ) + { + WaitPrompt((char*) "Error opening file!"); + //while(1); + VMClose(); + return 0; + } + + fseek(romfile, 0, SEEK_END); + GBAROMSize = ftell(romfile); + fseek(romfile, 0, SEEK_SET); + + sprintf(temp,"ROM Size %dMb (%dMBit)", GBAROMSize/1024/1024,(GBAROMSize*8)/1024/1024); + //WaitPrompt(temp); + rom = (u8 *)MEM2Storage; - switch (method) - { - case METHOD_SD: - case METHOD_USB: - if(inSz) - GBAROMSize = LoadFATSzFile(szpath, (unsigned char *)rom); - else - GBAROMSize = LoadFATFile((char *)rom, filelist[selection].length); - break; - - case METHOD_DVD: - if(inSz) - GBAROMSize = SzExtractFile(filelist[selection].offset, (unsigned char *)rom); - else - GBAROMSize = LoadDVDFile((unsigned char *)rom, filelist[selection].length); - break; - - case METHOD_SMB: - if(inSz) - GBAROMSize = LoadSMBSzFile(szpath, (unsigned char *)rom); - else - GBAROMSize = LoadSMBFile((char *)rom, filelist[selection].length); - break; - } - - if(GBAROMSize) - { - CPUUpdateRenderBuffers( true ); - return true; - } - else - { - VMClose(); - return false; - } + /* Always use MEM2, regardless of ROM size */ + res = gen_fread(rom, 1, GBAROMSize, romfile); + + if ( (u32)res != GBAROMSize ) + { + WaitPrompt((char*) "Error reading file!"); + while(1); + } + strcpy( romfilename, filename ); + + CPUUpdateRenderBuffers( true ); + + return 1; } @@ -161,6 +163,8 @@ u32 VMRead32( u32 address ) } return READ32LE((rom + address)); + + } /**************************************************************************** @@ -198,20 +202,18 @@ u8 VMRead8( u32 address ) } #else +#include "sdfileio.h" #include #include #include #include -#include "agb/GBA.h" +#include "GBA.h" #include "Globals.h" #include "Util.h" #include "Port.h" #include "menudraw.h" -#include "filesel.h" -#include "vba.h" -#include "fileop.h" extern "C" { #include "tbtime.h" @@ -245,8 +247,9 @@ static int vmpageno = 0; static char *rombase = NULL; static char *gbabase = NULL; static FILE* romfile = NULL; -static int useVM = 1; +static int useVM = 0; static u32 GBAROMSize = 0; +static char romfilename[1024]; /** * GBA Memory @@ -362,7 +365,7 @@ static void VMClose( void ) free(gbabase); if ( romfile != NULL ) - fclose(romfile); + gen_fclose(romfile); rombase = gbabase = NULL; romfile = NULL; @@ -374,77 +377,54 @@ static void VMClose( void ) * * VM version of GBA CPULoadROM ****************************************************************************/ - -int VMCPULoadROM(int method) +int VMCPULoadROM( char *filename ) { - int res; - char msg[512]; - char filepath[MAXPATHLEN]; - - /** Fix VM **/ - VMClose(); - VMInit(); - VMAllocGBA(); - - loadtimeradjust = GBAROMSize = 0; - - switch (method) - { - case METHOD_SD: - case METHOD_USB: - break; - - case METHOD_DVD: - VMClose(); - return 0; // not implemented - break; - - case METHOD_SMB: - VMClose(); - return 0; // not implemented - break; - } - - /* Check filename length */ - if ((strlen(currentdir)+1+strlen(filelist[selection].filename)) < MAXPATHLEN) - sprintf(filepath, "%s/%s",currentdir,filelist[selection].filename); - else - { - WaitPrompt((char*) "Maximum filepath length reached!"); - return -1; - } - - romfile = fopen(filepath, "rb"); - if ( romfile == NULL ) - { - WaitPrompt((char*) "Error opening file!"); - VMClose(); - return 0; - } - - // printf("ROM Size %d\n", romfile->fsize); - - /* Always use VM, regardless of ROM size */ - res = fread(rom, 1, (1 << VMSHIFTBITS), romfile); - if ( res != (1 << VMSHIFTBITS ) ) - { + int res; + char msg[512]; + + /** Fix VM **/ + VMClose(); + VMInit(); + VMAllocGBA(); + + loadtimeradjust = useVM = GBAROMSize = 0; + + printf("Filename %s\n", filename); + + romfile = gen_fopen(filename, "rb"); + if ( romfile == NULL ) + { + WaitPrompt((char*) "Error opening file!"); + while(1); + VMClose(); + return 0; + } + + // printf("ROM Size %d\n", romfile->fsize); + + /* Always use VM, regardless of ROM size */ + res = gen_fread(rom, 1, (1 << VMSHIFTBITS), romfile); + if ( res != (1 << VMSHIFTBITS ) ) + { sprintf(msg, "Error reading file! %i \n",res); WaitPrompt(msg); - VMClose(); - return 0; - } + while(1); + } fseek(romfile, 0, SEEK_END); GBAROMSize = ftell(romfile); fseek(romfile, 0, SEEK_SET); - vmpageno = 0; - vmpage[0].pageptr = rombase; - vmpage[0].pageno = 0; - vmpage[0].pagetype = MEM_VM; + vmpageno = 0; + vmpage[0].pageptr = rombase; + vmpage[0].pageno = 0; + vmpage[0].pagetype = MEM_VM; + useVM = 1; + + strcpy( romfilename, filename ); - CPUUpdateRenderBuffers( true ); + CPUUpdateRenderBuffers( true ); - return 1; + return 1; } /**************************************************************************** @@ -461,24 +441,22 @@ static void VMNewPage( int pageid ) mftb(&start); - res = fseek( romfile, pageid << VMSHIFTBITS, SEEK_SET ); + res = gen_fseek( romfile, pageid << VMSHIFTBITS, SEEK_SET ); if ( ! res ) { sprintf(msg, "Seek error! - Offset %08x %d\n", pageid << VMSHIFTBITS, res); WaitPrompt(msg); - VMClose(); - return; + while(1); } VMAllocate( pageid ); - res = fread( vmpage[pageid].pageptr, 1, 1 << VMSHIFTBITS, romfile ); + res = gen_fread( vmpage[pageid].pageptr, 1, 1 << VMSHIFTBITS, romfile ); if ( res != ( 1 << VMSHIFTBITS ) ) { sprintf(msg, "Error reading! %d bytes only\n", res); WaitPrompt(msg); - VMClose(); - return; + while(1); } mftb(&end); @@ -538,8 +516,7 @@ u32 VMRead32( u32 address ) default: sprintf(msg, "VM32 : Unknown page type! (%d) [%d]", vmpage[pageid].pagetype, pageid); WaitPrompt(msg); - VMClose(); - return 0; + while(1); } /* Can never get here ... but stops gcc bitchin' */ @@ -578,8 +555,7 @@ u16 VMRead16( u32 address ) default: WaitPrompt((char*) "VM16 : Unknown page type!"); - VMClose(); - return 0; + while(1); } /* Can never get here ... but stops gcc bitchin' */ @@ -618,8 +594,7 @@ u8 VMRead8( u32 address ) default: WaitPrompt((char*) "VM8 : Unknown page type!"); - VMClose(); - return 0; + while(1); } /* Can never get here ... but stops gcc bitchin' */ diff --git a/source/ngc/vmmem.h b/source/ngc/vmmem.h index 30a316f2..92609c3d 100644 --- a/source/ngc/vmmem.h +++ b/source/ngc/vmmem.h @@ -11,7 +11,7 @@ #ifndef __VBAVMHDR__ #define __VBAVMHDR__ -bool VMCPULoadROM(int method); +int VMCPULoadROM( char *filename ); u32 VMRead32( u32 address ); u16 VMRead16( u32 address ); u8 VMRead8( u32 address ); diff --git a/source/sz/7zAlloc.c b/source/sz/7zAlloc.c deleted file mode 100644 index d5da81b1..00000000 --- a/source/sz/7zAlloc.c +++ /dev/null @@ -1,70 +0,0 @@ -/* 7zAlloc.c */ - -#include -#include "7zAlloc.h" - -/* #define _SZ_ALLOC_DEBUG */ -/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ - -#ifdef _SZ_ALLOC_DEBUG - -#ifdef _WIN32 -#include -#endif -#include -int g_allocCount = 0; -int g_allocCountTemp = 0; -#endif - -void *SzAlloc(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount); - g_allocCount++; - #endif - return malloc(size); -} - -void SzFree(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - { - g_allocCount--; - fprintf(stderr, "\nFree; count = %10d", g_allocCount); - } - #endif - free(address); -} - -void *SzAllocTemp(size_t size) -{ - if (size == 0) - return 0; - #ifdef _SZ_ALLOC_DEBUG - fprintf(stderr, "\nAlloc_temp %10d bytes; count = %10d", size, g_allocCountTemp); - g_allocCountTemp++; - #ifdef _WIN32 - return HeapAlloc(GetProcessHeap(), 0, size); - #endif - #endif - return malloc(size); -} - -void SzFreeTemp(void *address) -{ - #ifdef _SZ_ALLOC_DEBUG - if (address != 0) - { - g_allocCountTemp--; - fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp); - } - #ifdef _WIN32 - HeapFree(GetProcessHeap(), 0, address); - return; - #endif - #endif - free(address); -} diff --git a/source/sz/7zAlloc.h b/source/sz/7zAlloc.h deleted file mode 100644 index b02c1dea..00000000 --- a/source/sz/7zAlloc.h +++ /dev/null @@ -1,20 +0,0 @@ -/* 7zAlloc.h */ - -#ifndef __7Z_ALLOC_H -#define __7Z_ALLOC_H - -#include - -typedef struct _ISzAlloc -{ - void *(*Alloc)(size_t size); - void (*Free)(void *address); /* address can be 0 */ -} ISzAlloc; - -void *SzAlloc(size_t size); -void SzFree(void *address); - -void *SzAllocTemp(size_t size); -void SzFreeTemp(void *address); - -#endif diff --git a/source/sz/7zBuffer.c b/source/sz/7zBuffer.c deleted file mode 100644 index 8bc8e067..00000000 --- a/source/sz/7zBuffer.c +++ /dev/null @@ -1,29 +0,0 @@ -/* 7zBuffer.c */ - -#include "7zBuffer.h" -#include "7zAlloc.h" - -void SzByteBufferInit(CSzByteBuffer *buffer) -{ - buffer->Capacity = 0; - buffer->Items = 0; -} - -int SzByteBufferCreate(CSzByteBuffer *buffer, size_t newCapacity, void * (*allocFunc)(size_t size)) -{ - buffer->Capacity = newCapacity; - if (newCapacity == 0) - { - buffer->Items = 0; - return 1; - } - buffer->Items = (Byte *)allocFunc(newCapacity); - return (buffer->Items != 0); -} - -void SzByteBufferFree(CSzByteBuffer *buffer, void (*freeFunc)(void *)) -{ - freeFunc(buffer->Items); - buffer->Items = 0; - buffer->Capacity = 0; -} diff --git a/source/sz/7zBuffer.h b/source/sz/7zBuffer.h deleted file mode 100644 index afea3ca8..00000000 --- a/source/sz/7zBuffer.h +++ /dev/null @@ -1,19 +0,0 @@ -/* 7zBuffer.h */ - -#ifndef __7Z_BUFFER_H -#define __7Z_BUFFER_H - -#include -#include "7zTypes.h" - -typedef struct _CSzByteBuffer -{ - size_t Capacity; - Byte *Items; -}CSzByteBuffer; - -void SzByteBufferInit(CSzByteBuffer *buffer); -int SzByteBufferCreate(CSzByteBuffer *buffer, size_t newCapacity, void * (*allocFunc)(size_t size)); -void SzByteBufferFree(CSzByteBuffer *buffer, void (*freeFunc)(void *)); - -#endif diff --git a/source/sz/7zCrc.c b/source/sz/7zCrc.c deleted file mode 100644 index 6dc7dd32..00000000 --- a/source/sz/7zCrc.c +++ /dev/null @@ -1,76 +0,0 @@ -/* 7zCrc.c */ - -#include "7zCrc.h" - -#define kCrcPoly 0xEDB88320 - -UInt32 g_CrcTable[256]; - -void InitCrcTable() -{ - UInt32 i; - for (i = 0; i < 256; i++) - { - UInt32 r = i; - int j; - for (j = 0; j < 8; j++) - if (r & 1) - r = (r >> 1) ^ kCrcPoly; - else - r >>= 1; - g_CrcTable[i] = r; - } -} - -void CrcInit(UInt32 *crc) { *crc = 0xFFFFFFFF; } -UInt32 CrcGetDigest(UInt32 *crc) { return *crc ^ 0xFFFFFFFF; } - -void CrcUpdateByte(UInt32 *crc, Byte b) -{ - *crc = g_CrcTable[((Byte)(*crc)) ^ b] ^ (*crc >> 8); -} - -void CrcUpdateUInt16(UInt32 *crc, UInt16 v) -{ - CrcUpdateByte(crc, (Byte)v); - CrcUpdateByte(crc, (Byte)(v >> 8)); -} - -void CrcUpdateUInt32(UInt32 *crc, UInt32 v) -{ - int i; - for (i = 0; i < 4; i++) - CrcUpdateByte(crc, (Byte)(v >> (8 * i))); -} - -void CrcUpdateUInt64(UInt32 *crc, UInt64 v) -{ - int i; - for (i = 0; i < 8; i++) - { - CrcUpdateByte(crc, (Byte)(v)); - v >>= 8; - } -} - -void CrcUpdate(UInt32 *crc, const void *data, size_t size) -{ - UInt32 v = *crc; - const Byte *p = (const Byte *)data; - for (; size > 0 ; size--, p++) - v = g_CrcTable[((Byte)(v)) ^ *p] ^ (v >> 8); - *crc = v; -} - -UInt32 CrcCalculateDigest(const void *data, size_t size) -{ - UInt32 crc; - CrcInit(&crc); - CrcUpdate(&crc, data, size); - return CrcGetDigest(&crc); -} - -int CrcVerifyDigest(UInt32 digest, const void *data, size_t size) -{ - return (CrcCalculateDigest(data, size) == digest); -} diff --git a/source/sz/7zCrc.h b/source/sz/7zCrc.h deleted file mode 100644 index bac26b14..00000000 --- a/source/sz/7zCrc.h +++ /dev/null @@ -1,24 +0,0 @@ -/* 7zCrc.h */ - -#ifndef __7Z_CRC_H -#define __7Z_CRC_H - -#include - -#include "7zTypes.h" - -extern UInt32 g_CrcTable[256]; -void InitCrcTable(); - -void CrcInit(UInt32 *crc); -UInt32 CrcGetDigest(UInt32 *crc); -void CrcUpdateByte(UInt32 *crc, Byte v); -void CrcUpdateUInt16(UInt32 *crc, UInt16 v); -void CrcUpdateUInt32(UInt32 *crc, UInt32 v); -void CrcUpdateUInt64(UInt32 *crc, UInt64 v); -void CrcUpdate(UInt32 *crc, const void *data, size_t size); - -UInt32 CrcCalculateDigest(const void *data, size_t size); -int CrcVerifyDigest(UInt32 digest, const void *data, size_t size); - -#endif diff --git a/source/sz/7zDecode.c b/source/sz/7zDecode.c deleted file mode 100644 index 12198eea..00000000 --- a/source/sz/7zDecode.c +++ /dev/null @@ -1,361 +0,0 @@ -/* 7zDecode.c */ - -#include "7zDecode.h" -#ifdef _SZ_ONE_DIRECTORY -#include "LzmaDecode.h" -#else -#include "../../Compress/LZMA_C/LzmaDecode.h" -#endif - -#ifdef _LZMA_OUT_READ -#include // for memcpy -#endif - -CMethodID k_Copy = { { 0x0 }, 1 }; -CMethodID k_LZMA = { { 0x3, 0x1, 0x1 }, 3 }; - -#ifdef _LZMA_IN_CB - -typedef struct _CLzmaInCallbackImp -{ - ILzmaInCallback InCallback; - ISzInStream *InStream; - size_t Size; -} CLzmaInCallbackImp; - -int LzmaReadImp(void *object, const unsigned char **buffer, SizeT *size) -{ - CLzmaInCallbackImp *cb = (CLzmaInCallbackImp *)object; - size_t processedSize; - SZ_RESULT res; - *size = 0; - res = cb->InStream->Read((void *)cb->InStream, (void **)buffer, cb->Size, &processedSize); - *size = (SizeT)processedSize; - if (processedSize > cb->Size) - return (int)SZE_FAIL; - cb->Size -= processedSize; - if (res == SZ_OK) - return 0; - return (int)res; -} - -#endif - -SZ_RESULT SzDecode(const CFileSize *packSizes, const CFolder *folder, - #ifdef _LZMA_IN_CB - ISzInStream *inStream, - #else - const Byte *inBuffer, - #endif - Byte *outBuffer, size_t outSize, - size_t *outSizeProcessed, ISzAlloc *allocMain) -{ - UInt32 si; - size_t inSize = 0; - CCoderInfo *coder; - if (folder->NumPackStreams != 1) - return SZE_NOTIMPL; - if (folder->NumCoders != 1) - return SZE_NOTIMPL; - coder = folder->Coders; - *outSizeProcessed = 0; - - for (si = 0; si < folder->NumPackStreams; si++) - inSize += (size_t)packSizes[si]; - - if (AreMethodsEqual(&coder->MethodID, &k_Copy)) - { - size_t i; - if (inSize != outSize) - return SZE_DATA_ERROR; - #ifdef _LZMA_IN_CB - for (i = 0; i < inSize;) - { - size_t j; - Byte *inBuffer; - size_t bufferSize; - RINOK(inStream->Read((void *)inStream, (void **)&inBuffer, inSize - i, &bufferSize)); - if (bufferSize == 0) - return SZE_DATA_ERROR; - if (bufferSize > inSize - i) - return SZE_FAIL; - *outSizeProcessed += bufferSize; - for (j = 0; j < bufferSize && i < inSize; j++, i++) - outBuffer[i] = inBuffer[j]; - } - #else - for (i = 0; i < inSize; i++) - outBuffer[i] = inBuffer[i]; - *outSizeProcessed = inSize; - #endif - return SZ_OK; - } - - if (AreMethodsEqual(&coder->MethodID, &k_LZMA)) - { - #ifdef _LZMA_IN_CB - CLzmaInCallbackImp lzmaCallback; - #else - SizeT inProcessed; - #endif - - CLzmaDecoderState state; /* it's about 24-80 bytes structure, if int is 32-bit */ - int result; - SizeT outSizeProcessedLoc; - - #ifdef _LZMA_IN_CB - lzmaCallback.Size = inSize; - lzmaCallback.InStream = inStream; - lzmaCallback.InCallback.Read = LzmaReadImp; - #endif - - if (LzmaDecodeProperties(&state.Properties, coder->Properties.Items, - coder->Properties.Capacity) != LZMA_RESULT_OK) - return SZE_FAIL; - - state.Probs = (CProb *)allocMain->Alloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); - if (state.Probs == 0) - return SZE_OUTOFMEMORY; - - #ifdef _LZMA_OUT_READ - if (state.Properties.DictionarySize == 0) - state.Dictionary = 0; - else - { - state.Dictionary = (unsigned char *)allocMain->Alloc(state.Properties.DictionarySize); - if (state.Dictionary == 0) - { - allocMain->Free(state.Probs); - return SZE_OUTOFMEMORYDIC; - } - } - LzmaDecoderInit(&state); - #endif - - result = LzmaDecode(&state, - #ifdef _LZMA_IN_CB - &lzmaCallback.InCallback, - #else - inBuffer, (SizeT)inSize, &inProcessed, - #endif - outBuffer, (SizeT)outSize, &outSizeProcessedLoc); - *outSizeProcessed = (size_t)outSizeProcessedLoc; - allocMain->Free(state.Probs); - #ifdef _LZMA_OUT_READ - allocMain->Free(state.Dictionary); - #endif - if (result == LZMA_RESULT_DATA_ERROR) - return SZE_DATA_ERROR; - if (result != LZMA_RESULT_OK) - return SZE_FAIL; - return SZ_OK; - } - return SZE_NOTIMPL; -} - -#ifdef _LZMA_OUT_READ -// like SzDecode but uses less memory -SZ_RESULT SzDecode2(const CFileSize *packSizes, const CFolder *folder, - ISzInStream *inStream, - Byte *outBuffer, size_t outSize, - size_t *outSizeProcessed, ISzAlloc *allocMain, - size_t *fileOffset, size_t *fileSize) -{ - UInt32 si; - size_t inSize = 0; - CCoderInfo *coder; - if (folder->NumPackStreams != 1) - return SZE_NOTIMPL; - if (folder->NumCoders != 1) - return SZE_NOTIMPL; - coder = folder->Coders; - *outSizeProcessed = 0; - - for (si = 0; si < folder->NumPackStreams; si++) - inSize += (size_t)packSizes[si]; - - if (AreMethodsEqual(&coder->MethodID, &k_Copy)) - { - size_t i; - if (inSize != outSize) - return SZE_DATA_ERROR; - #ifdef _LZMA_IN_CB - for (i = 0; i < inSize;) - { - size_t j; - Byte *inBuffer; - size_t bufferSize; - RINOK(inStream->Read((void *)inStream, (void **)&inBuffer, inSize - i, &bufferSize)); - if (bufferSize == 0) - return SZE_DATA_ERROR; - if (bufferSize > inSize - i) - return SZE_FAIL; - *outSizeProcessed += bufferSize; - for (j = 0; j < bufferSize && i < inSize; j++, i++) - outBuffer[i] = inBuffer[j]; - } - #else - for (i = 0; i < inSize; i++) - outBuffer[i] = inBuffer[i]; - *outSizeProcessed = inSize; - #endif - return SZ_OK; - } - - if (AreMethodsEqual(&coder->MethodID, &k_LZMA)) - { - #ifdef _LZMA_IN_CB - CLzmaInCallbackImp lzmaCallback; - #else - SizeT inProcessed; - #endif - - CLzmaDecoderState state; /* it's about 24-80 bytes structure, if int is 32-bit */ - int result; - SizeT outSizeProcessedLoc; - - #ifdef _LZMA_IN_CB - lzmaCallback.Size = inSize; - lzmaCallback.InStream = inStream; - lzmaCallback.InCallback.Read = LzmaReadImp; - #endif - - if (LzmaDecodeProperties(&state.Properties, coder->Properties.Items, - coder->Properties.Capacity) != LZMA_RESULT_OK) - return SZE_FAIL; - - state.Probs = (CProb *)allocMain->Alloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); - if (state.Probs == 0) - return SZE_OUTOFMEMORY; - - if (state.Properties.DictionarySize == 0) - state.Dictionary = 0; - else - { - state.Dictionary = (unsigned char *)allocMain->Alloc(state.Properties.DictionarySize); - if (state.Dictionary == 0) - { - allocMain->Free(state.Probs); - return SZE_OUTOFMEMORY; - } - } - LzmaDecoderInit(&state); - - // allocate memory for the temporary buffer - Byte *tmpBuffer = (Byte *)allocMain->Alloc(_LZMA_TEMP_BUFFER_SIZE); - - // variables containing the number of the first and the last bytes of the buffer - size_t bufferStart, bufferEnd; - bufferStart = bufferEnd = 0; - - // integers contains the offset, the size and the already copied data which will be - // copied from the tmpBuffer to outBuffer - size_t copyOffset, copySize, copyDone; - copyOffset = copySize = copyDone = 0; - - UInt32 i = 0; - int bytesToCopy = 0; - - // decompress data in _LZMA_TEMP_BUFFER_SIZE byte steps and copy the wanted file to outBuffer - do - { - if((*fileSize - copyDone) >= _LZMA_TEMP_BUFFER_SIZE) - bytesToCopy = _LZMA_TEMP_BUFFER_SIZE; - else - bytesToCopy = (*fileSize - copyDone); - - // decompress next bytes - result = LzmaDecode(&state, - #ifdef _LZMA_IN_CB - &lzmaCallback.InCallback, - #else - //inBuffer, (SizeT)inSize, &inProcessed, //TODO! - #endif - tmpBuffer, bytesToCopy, &outSizeProcessedLoc - ); - - // check result - if(result == LZMA_RESULT_DATA_ERROR) - { - return SZE_DATA_ERROR; - } - if(result != LZMA_RESULT_OK) - { - return SZE_FAIL; - } - - // normally this should never happen - if(outSizeProcessedLoc > _LZMA_TEMP_BUFFER_SIZE) - { - return SZE_FAIL; - } - - // update bufferStart and bufferEnd - bufferStart = _LZMA_TEMP_BUFFER_SIZE * i; - bufferEnd = bufferStart + outSizeProcessedLoc; - i++; - - // calculate copy offset and size - if(*fileOffset > bufferEnd) - { - // we haven't reached the start of the file yet - continue; - } - - // calculate offset - if(*fileOffset < bufferStart) - { - // the file has already started before this decompression step - copyOffset = 0; - } - else - { - // the file starts somewhere inside this buffer - copyDone = 0; - copyOffset = _LZMA_TEMP_BUFFER_SIZE - (bufferEnd - *fileOffset); - } - - // calculate size - if((*fileOffset + *fileSize) > bufferEnd) - { - // we'll need the whole buffer after copyOffset - copySize = _LZMA_TEMP_BUFFER_SIZE - copyOffset; - } - else - { - // we'll stop somewhere inside the buffer - copySize = (*fileOffset + *fileSize) - (bufferStart + copyOffset); - } - - // copy bytes to the real output buffer - if(copySize == 0) - { - continue; - } - // printf("memcpy(outBuffer + %d, tmpBuffer + %d, %d)\n", copyDone, copyOffset, copySize); - memcpy(outBuffer + copyDone, tmpBuffer + copyOffset, copySize); - copyDone += copySize; - } - while((*fileOffset + *fileSize) > bufferEnd); - - /* result = LzmaDecode(&state, - #ifdef _LZMA_IN_CB - &lzmaCallback.InCallback, - #else - inBuffer, (SizeT)inSize, &inProcessed, - #endif - outBuffer, (SizeT)outSize, &outSizeProcessedLoc);*/ - //*outSizeProcessed = (size_t)outSizeProcessedLoc; - *outSizeProcessed = copyDone; - allocMain->Free(tmpBuffer); // free the temporary buffer again - allocMain->Free(state.Probs); - allocMain->Free(state.Dictionary); - /* if (result == LZMA_RESULT_DATA_ERROR) - return SZE_DATA_ERROR; - if (result != LZMA_RESULT_OK) - return SZE_FAIL;*/ - return SZ_OK; - } - return SZE_NOTIMPL; - } - #endif diff --git a/source/sz/7zDecode.h b/source/sz/7zDecode.h deleted file mode 100644 index 9f15ba16..00000000 --- a/source/sz/7zDecode.h +++ /dev/null @@ -1,37 +0,0 @@ -/* 7zDecode.h */ - -#if defined(_LZMA_OUT_READ) && !defined(_LZMA_IN_CB) -#error "Fixme: _LZMA_OUT_READ && _LZMA_IN_CB isn't currently possible!" -#endif - -#ifndef __7Z_DECODE_H -#define __7Z_DECODE_H - -#include "7zItem.h" -#include "7zAlloc.h" -#ifdef _LZMA_IN_CB -#include "7zIn.h" -#endif - -SZ_RESULT SzDecode(const CFileSize *packSizes, const CFolder *folder, - #ifdef _LZMA_IN_CB - ISzInStream *stream, - #else - const Byte *inBuffer, - #endif - Byte *outBuffer, size_t outSize, - size_t *outSizeProcessed, ISzAlloc *allocMain); - -#ifdef _LZMA_OUT_READ -#ifndef _LZMA_TEMP_BUFFER_SIZE -#define _LZMA_TEMP_BUFFER_SIZE (2048) // size of the temporary buffer in bytes -#endif - -SZ_RESULT SzDecode2(const CFileSize *packSizes, const CFolder *folder, - ISzInStream *stream, - Byte *outBuffer, size_t outSize, - size_t *outSizeProcessed, ISzAlloc *allocMain, - size_t *fileOffset, size_t *fileSize); -#endif // #ifdef _LZMA_OUT_READ - -#endif diff --git a/source/sz/7zExtract.c b/source/sz/7zExtract.c deleted file mode 100644 index 13ba62ce..00000000 --- a/source/sz/7zExtract.c +++ /dev/null @@ -1,254 +0,0 @@ -/* 7zExtract.c */ - -#include "7zExtract.h" -#include "7zDecode.h" -#include "7zCrc.h" - -SZ_RESULT SzExtract( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - UInt32 fileIndex, - UInt32 *blockIndex, - Byte **outBuffer, - size_t *outBufferSize, - size_t *offset, - size_t *outSizeProcessed, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt32 folderIndex = db->FileIndexToFolderIndexMap[fileIndex]; - SZ_RESULT res = SZ_OK; - *offset = 0; - *outSizeProcessed = 0; - if (folderIndex == (UInt32)-1) - { - allocMain->Free(*outBuffer); - *blockIndex = folderIndex; - *outBuffer = 0; - *outBufferSize = 0; - return SZ_OK; - } - - if (*outBuffer == 0 || *blockIndex != folderIndex) - { - CFolder *folder = db->Database.Folders + folderIndex; - CFileSize unPackSize = SzFolderGetUnPackSize(folder); - #ifndef _LZMA_IN_CB - CFileSize packSize = SzArDbGetFolderFullPackSize(db, folderIndex); - Byte *inBuffer = 0; - size_t processedSize; - #endif - *blockIndex = folderIndex; - allocMain->Free(*outBuffer); - *outBuffer = 0; - - RINOK(inStream->Seek(inStream, SzArDbGetFolderStreamPos(db, folderIndex, 0))); - - #ifndef _LZMA_IN_CB - if (packSize != 0) - { - inBuffer = (Byte *)allocTemp->Alloc((size_t)packSize); - if (inBuffer == 0) - return SZE_OUTOFMEMORY; - } - res = inStream->Read(inStream, inBuffer, (size_t)packSize, &processedSize); - if (res == SZ_OK && processedSize != (size_t)packSize) - res = SZE_FAIL; - #endif - if (res == SZ_OK) - { - *outBufferSize = (size_t)unPackSize; - if (unPackSize != 0) - { - *outBuffer = (Byte *)allocMain->Alloc((size_t)unPackSize); - if (*outBuffer == 0) - res = SZE_OUTOFMEMORY; - } - if (res == SZ_OK) - { - size_t outRealSize; - res = SzDecode(db->Database.PackSizes + - db->FolderStartPackStreamIndex[folderIndex], folder, - #ifdef _LZMA_IN_CB - inStream, - #else - inBuffer, - #endif - *outBuffer, (size_t)unPackSize, &outRealSize, allocTemp); - if (res == SZ_OK) - { - if (outRealSize == (size_t)unPackSize) - { - if (folder->UnPackCRCDefined) - { - if (!CrcVerifyDigest(folder->UnPackCRC, *outBuffer, (size_t)unPackSize)) - res = SZE_FAIL; - } - } - else - res = SZE_FAIL; - } - } - } - #ifndef _LZMA_IN_CB - allocTemp->Free(inBuffer); - #endif - } - if (res == SZ_OK) - { - UInt32 i; - CFileItem *fileItem = db->Database.Files + fileIndex; - *offset = 0; - for(i = db->FolderStartFileIndex[folderIndex]; i < fileIndex; i++) - *offset += (UInt32)db->Database.Files[i].Size; - *outSizeProcessed = (size_t)fileItem->Size; - if (*offset + *outSizeProcessed > *outBufferSize) - return SZE_FAIL; - { - if (fileItem->IsFileCRCDefined) - { - if (!CrcVerifyDigest(fileItem->FileCRC, *outBuffer + *offset, *outSizeProcessed)) - res = SZE_FAIL; - } - } - } - return res; -} - -#ifdef _LZMA_OUT_READ -// similar to SzExtract but needs less memory -SZ_RESULT SzExtract2( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - UInt32 fileIndex, - UInt32 *blockIndex, - Byte **outBuffer, - size_t *outBufferSize, - size_t *offset, - size_t *outSizeProcessed, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt32 folderIndex = db->FileIndexToFolderIndexMap[fileIndex]; - SZ_RESULT res = SZ_OK; - *offset = 0; - *outSizeProcessed = 0; - if (folderIndex == (UInt32)-1) - { - *blockIndex = folderIndex; - #ifndef NGC - allocMain->Free(*outBuffer); - *outBuffer = 0; - #endif - *outBufferSize = 0; - return SZ_OK; - } - -// if (*outBuffer == 0 || *blockIndex != folderIndex) -// { - CFolder *folder = db->Database.Folders + folderIndex; - CFileSize unPackSize = SzFolderGetUnPackSize(folder); - #ifndef _LZMA_IN_CB - CFileSize packSize = SzArDbGetFolderFullPackSize(db, folderIndex); - Byte *inBuffer = 0; - size_t processedSize; - #endif - *blockIndex = folderIndex; - #ifndef NGC - allocMain->Free(*outBuffer); - *outBuffer = 0; - #endif - - RINOK(inStream->Seek(inStream, SzArDbGetFolderStreamPos(db, folderIndex, 0))); - - #ifndef _LZMA_IN_CB - if (packSize != 0) - { - inBuffer = (Byte *)allocTemp->Alloc((size_t)packSize); - if (inBuffer == 0) - return SZE_OUTOFMEMORY; - } - res = inStream->Read(inStream, inBuffer, (size_t)packSize, &processedSize); - if (res == SZ_OK && processedSize != (size_t)packSize) - res = SZE_FAIL; - #endif - if (res == SZ_OK) - { - // calculate file offset and filesize - CFileItem *fileItem = db->Database.Files + fileIndex; - UInt32 i; - *offset = 0; - for(i = db->FolderStartFileIndex[folderIndex]; i < fileIndex; i++) - *offset += (UInt32)db->Database.Files[i].Size; - *outSizeProcessed = (size_t)fileItem->Size; - *outBufferSize = (size_t)fileItem->Size; - if (unPackSize != 0) - { - #ifndef NGC - *outBuffer = (Byte *)allocMain->Alloc((size_t)fileItem->Size); - if (*outBuffer == 0) - res = SZE_OUTOFMEMORY; - #endif - } - if (res == SZ_OK) - { - - size_t outRealSize; - res = SzDecode2(db->Database.PackSizes + - db->FolderStartPackStreamIndex[folderIndex], folder, - #ifdef _LZMA_IN_CB - inStream, - #else - inBuffer, - #endif - *outBuffer, (size_t)unPackSize, &outRealSize, allocTemp, - offset, outSizeProcessed - ); - *outSizeProcessed = outRealSize; -/* if (res == SZ_OK) // we can't validate the CRC of the whole data stream because we only extracted the wanted file - { - if (outRealSize == (size_t)unPackSize) - { - if (folder->UnPackCRCDefined) - { - if (!CrcVerifyDigest(folder->UnPackCRC, *outBuffer, (size_t)unPackSize)) - res = SZE_FAIL; - } - } - else - res = SZE_FAIL; - }*/ - } -// } - #ifndef _LZMA_IN_CB - allocTemp->Free(inBuffer); - #endif - } - if (res == SZ_OK) - { -/* UInt32 i; - CFileItem *fileItem = db->Database.Files + fileIndex; - *offset = 0; - for(i = db->FolderStartFileIndex[folderIndex]; i < fileIndex; i++) - *offset += (UInt32)db->Database.Files[i].Size; - *outSizeProcessed = (size_t)fileItem->Size;*/ - //CFileItem *fileItem = db->Database.Files + fileIndex; - if (/**offset +*/ *outSizeProcessed > *outBufferSize) - return SZE_FAIL; - { - //if (fileItem->IsFileCRCDefined) - //{ - // if (!CrcVerifyDigest(fileItem->FileCRC, *outBuffer/* + *offset*/, *outSizeProcessed)) - // res = SZE_CRC_ERROR; // why does SzExtract return SZE_FAIL when we can return SZE_CRC_ERROR? - //} - } - } - - // change *offset to 0 because SzExtract normally decompresses the whole solid block - // and sets *offset to the offset of the wanted file. - // SzDecode2 does only copy the needed file to the output buffer and has to set *offset - // to 0 to ensure compatibility with SzExtract - *offset = 0; - return res; -} -#endif diff --git a/source/sz/7zExtract.h b/source/sz/7zExtract.h deleted file mode 100644 index 7f7e07ee..00000000 --- a/source/sz/7zExtract.h +++ /dev/null @@ -1,60 +0,0 @@ -/* 7zExtract.h */ - -#if defined(_LZMA_OUT_READ) && !defined(_LZMA_IN_CB) -#error "Fixme: _LZMA_OUT_READ && _LZMA_IN_CB isn't currently possible!" -#endif - -#ifndef __7Z_EXTRACT_H -#define __7Z_EXTRACT_H - -#include "7zIn.h" - -/* - SzExtract extracts file from archive - - SzExtract2 does the same but needs less memory - - *outBuffer must be 0 before first call for each new archive. - - Extracting cache: - If you need to decompress more than one file, you can send - these values from previous call: - *blockIndex, - *outBuffer, - *outBufferSize - You can consider "*outBuffer" as cache of solid block. If your archive is solid, - it will increase decompression speed. - - If you use external function, you can declare these 3 cache variables - (blockIndex, outBuffer, outBufferSize) as static in that external function. - - Free *outBuffer and set *outBuffer to 0, if you want to flush cache. -*/ - -SZ_RESULT SzExtract( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - UInt32 fileIndex, /* index of file */ - UInt32 *blockIndex, /* index of solid block */ - Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ - size_t *outBufferSize, /* buffer size for output buffer */ - size_t *offset, /* offset of stream for required file in *outBuffer */ - size_t *outSizeProcessed, /* size of file in *outBuffer */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp); - -#ifdef _LZMA_OUT_READ -SZ_RESULT SzExtract2( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - UInt32 fileIndex, /* index of file */ - UInt32 *blockIndex, /* index of solid block */ - Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ - size_t *outBufferSize, /* buffer size for output buffer */ - size_t *offset, /* offset of stream for required file in *outBuffer */ - size_t *outSizeProcessed, /* size of file in *outBuffer */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp); -#endif - -#endif diff --git a/source/sz/7zHeader.c b/source/sz/7zHeader.c deleted file mode 100644 index e26c0143..00000000 --- a/source/sz/7zHeader.c +++ /dev/null @@ -1,5 +0,0 @@ -/* 7zHeader.c */ - -#include "7zHeader.h" - -Byte k7zSignature[k7zSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; diff --git a/source/sz/7zHeader.h b/source/sz/7zHeader.h deleted file mode 100644 index 7edf640f..00000000 --- a/source/sz/7zHeader.h +++ /dev/null @@ -1,55 +0,0 @@ -/* 7zHeader.h */ - -#ifndef __7Z_HEADER_H -#define __7Z_HEADER_H - -#include "7zTypes.h" - -#define k7zSignatureSize 6 -extern Byte k7zSignature[k7zSignatureSize]; - -#define k7zMajorVersion 0 - -#define k7zStartHeaderSize 0x20 - -enum EIdEnum -{ - k7zIdEnd, - - k7zIdHeader, - - k7zIdArchiveProperties, - - k7zIdAdditionalStreamsInfo, - k7zIdMainStreamsInfo, - k7zIdFilesInfo, - - k7zIdPackInfo, - k7zIdUnPackInfo, - k7zIdSubStreamsInfo, - - k7zIdSize, - k7zIdCRC, - - k7zIdFolder, - - k7zIdCodersUnPackSize, - k7zIdNumUnPackStream, - - k7zIdEmptyStream, - k7zIdEmptyFile, - k7zIdAnti, - - k7zIdName, - k7zIdCreationTime, - k7zIdLastAccessTime, - k7zIdLastWriteTime, - k7zIdWinAttributes, - k7zIdComment, - - k7zIdEncodedHeader, - - k7zIdStartPos -}; - -#endif diff --git a/source/sz/7zIn.c b/source/sz/7zIn.c deleted file mode 100644 index b3e9ea27..00000000 --- a/source/sz/7zIn.c +++ /dev/null @@ -1,1281 +0,0 @@ -/* 7zIn.c */ - -#include "7zIn.h" -#include "7zCrc.h" -#include "7zDecode.h" - -#define RINOM(x) { if((x) == 0) return SZE_OUTOFMEMORY; } - -void SzArDbExInit(CArchiveDatabaseEx *db) -{ - SzArchiveDatabaseInit(&db->Database); - db->FolderStartPackStreamIndex = 0; - db->PackStreamStartPositions = 0; - db->FolderStartFileIndex = 0; - db->FileIndexToFolderIndexMap = 0; -} - -void SzArDbExFree(CArchiveDatabaseEx *db, void (*freeFunc)(void *)) -{ - freeFunc(db->FolderStartPackStreamIndex); - freeFunc(db->PackStreamStartPositions); - freeFunc(db->FolderStartFileIndex); - freeFunc(db->FileIndexToFolderIndexMap); - SzArchiveDatabaseFree(&db->Database, freeFunc); - SzArDbExInit(db); -} - -/* -CFileSize GetFolderPackStreamSize(int folderIndex, int streamIndex) const -{ - return PackSizes[FolderStartPackStreamIndex[folderIndex] + streamIndex]; -} - -CFileSize GetFilePackSize(int fileIndex) const -{ - int folderIndex = FileIndexToFolderIndexMap[fileIndex]; - if (folderIndex >= 0) - { - const CFolder &folderInfo = Folders[folderIndex]; - if (FolderStartFileIndex[folderIndex] == fileIndex) - return GetFolderFullPackSize(folderIndex); - } - return 0; -} -*/ - -#define MY_ALLOC(T, p, size, allocFunc) { if ((size) == 0) p = 0; else \ - if ((p = (T *)allocFunc((size) * sizeof(T))) == 0) return SZE_OUTOFMEMORY; } - -SZ_RESULT SzArDbExFill(CArchiveDatabaseEx *db, void * (*allocFunc)(size_t size)) -{ - UInt32 startPos = 0; - CFileSize startPosSize = 0; - UInt32 i; - UInt32 folderIndex = 0; - UInt32 indexInFolder = 0; - MY_ALLOC(UInt32, db->FolderStartPackStreamIndex, db->Database.NumFolders, allocFunc); - for(i = 0; i < db->Database.NumFolders; i++) - { - db->FolderStartPackStreamIndex[i] = startPos; - startPos += db->Database.Folders[i].NumPackStreams; - } - - MY_ALLOC(CFileSize, db->PackStreamStartPositions, db->Database.NumPackStreams, allocFunc); - - for(i = 0; i < db->Database.NumPackStreams; i++) - { - db->PackStreamStartPositions[i] = startPosSize; - startPosSize += db->Database.PackSizes[i]; - } - - MY_ALLOC(UInt32, db->FolderStartFileIndex, db->Database.NumFolders, allocFunc); - MY_ALLOC(UInt32, db->FileIndexToFolderIndexMap, db->Database.NumFiles, allocFunc); - - for (i = 0; i < db->Database.NumFiles; i++) - { - CFileItem *file = db->Database.Files + i; - int emptyStream = !file->HasStream; - if (emptyStream && indexInFolder == 0) - { - db->FileIndexToFolderIndexMap[i] = (UInt32)-1; - continue; - } - if (indexInFolder == 0) - { - /* - v3.13 incorrectly worked with empty folders - v4.07: Loop for skipping empty folders - */ - while(1) - { - if (folderIndex >= db->Database.NumFolders) - return SZE_ARCHIVE_ERROR; - db->FolderStartFileIndex[folderIndex] = i; - if (db->Database.Folders[folderIndex].NumUnPackStreams != 0) - break; - folderIndex++; - } - } - db->FileIndexToFolderIndexMap[i] = folderIndex; - if (emptyStream) - continue; - indexInFolder++; - if (indexInFolder >= db->Database.Folders[folderIndex].NumUnPackStreams) - { - folderIndex++; - indexInFolder = 0; - } - } - return SZ_OK; -} - - -CFileSize SzArDbGetFolderStreamPos(CArchiveDatabaseEx *db, UInt32 folderIndex, UInt32 indexInFolder) -{ - return db->ArchiveInfo.DataStartPosition + - db->PackStreamStartPositions[db->FolderStartPackStreamIndex[folderIndex] + indexInFolder]; -} - -CFileSize SzArDbGetFolderFullPackSize(CArchiveDatabaseEx *db, UInt32 folderIndex) -{ - UInt32 packStreamIndex = db->FolderStartPackStreamIndex[folderIndex]; - CFolder *folder = db->Database.Folders + folderIndex; - CFileSize size = 0; - UInt32 i; - for (i = 0; i < folder->NumPackStreams; i++) - size += db->Database.PackSizes[packStreamIndex + i]; - return size; -} - - -/* -SZ_RESULT SzReadTime(const CObjectVector &dataVector, - CObjectVector &files, UInt64 type) -{ - CBoolVector boolVector; - RINOK(ReadBoolVector2(files.Size(), boolVector)) - - CStreamSwitch streamSwitch; - RINOK(streamSwitch.Set(this, &dataVector)); - - for(int i = 0; i < files.Size(); i++) - { - CFileItem &file = files[i]; - CArchiveFileTime fileTime; - bool defined = boolVector[i]; - if (defined) - { - UInt32 low, high; - RINOK(SzReadUInt32(low)); - RINOK(SzReadUInt32(high)); - fileTime.dwLowDateTime = low; - fileTime.dwHighDateTime = high; - } - switch(type) - { - case k7zIdCreationTime: - file.IsCreationTimeDefined = defined; - if (defined) - file.CreationTime = fileTime; - break; - case k7zIdLastWriteTime: - file.IsLastWriteTimeDefined = defined; - if (defined) - file.LastWriteTime = fileTime; - break; - case k7zIdLastAccessTime: - file.IsLastAccessTimeDefined = defined; - if (defined) - file.LastAccessTime = fileTime; - break; - } - } - return SZ_OK; -} -*/ - -SZ_RESULT SafeReadDirect(ISzInStream *inStream, Byte *data, size_t size) -{ - #ifdef _LZMA_IN_CB - while (size > 0) - { - Byte *inBuffer; - size_t processedSize; - RINOK(inStream->Read(inStream, (void **)&inBuffer, size, &processedSize)); - if (processedSize == 0 || processedSize > size) - return SZE_FAIL; - size -= processedSize; - do - { - *data++ = *inBuffer++; - } - while (--processedSize != 0); - } - #else - size_t processedSize; - RINOK(inStream->Read(inStream, data, size, &processedSize)); - if (processedSize != size) - return SZE_FAIL; - #endif - return SZ_OK; -} - -SZ_RESULT SafeReadDirectByte(ISzInStream *inStream, Byte *data) -{ - return SafeReadDirect(inStream, data, 1); -} - -SZ_RESULT SafeReadDirectUInt32(ISzInStream *inStream, UInt32 *value) -{ - int i; - *value = 0; - for (i = 0; i < 4; i++) - { - Byte b; - RINOK(SafeReadDirectByte(inStream, &b)); - *value |= ((UInt32)b << (8 * i)); - } - return SZ_OK; -} - -SZ_RESULT SafeReadDirectUInt64(ISzInStream *inStream, UInt64 *value) -{ - int i; - *value = 0; - for (i = 0; i < 8; i++) - { - Byte b; - RINOK(SafeReadDirectByte(inStream, &b)); - *value |= ((UInt32)b << (8 * i)); - } - return SZ_OK; -} - -int TestSignatureCandidate(Byte *testBytes) -{ - size_t i; - for (i = 0; i < k7zSignatureSize; i++) - if (testBytes[i] != k7zSignature[i]) - return 0; - return 1; -} - -typedef struct _CSzState -{ - Byte *Data; - size_t Size; -}CSzData; - -SZ_RESULT SzReadByte(CSzData *sd, Byte *b) -{ - if (sd->Size == 0) - return SZE_ARCHIVE_ERROR; - sd->Size--; - *b = *sd->Data++; - return SZ_OK; -} - -SZ_RESULT SzReadBytes(CSzData *sd, Byte *data, size_t size) -{ - size_t i; - for (i = 0; i < size; i++) - { - RINOK(SzReadByte(sd, data + i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadUInt32(CSzData *sd, UInt32 *value) -{ - int i; - *value = 0; - for (i = 0; i < 4; i++) - { - Byte b; - RINOK(SzReadByte(sd, &b)); - *value |= ((UInt32)(b) << (8 * i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadNumber(CSzData *sd, UInt64 *value) -{ - Byte firstByte; - Byte mask = 0x80; - int i; - RINOK(SzReadByte(sd, &firstByte)); - *value = 0; - for (i = 0; i < 8; i++) - { - Byte b; - if ((firstByte & mask) == 0) - { - UInt64 highPart = firstByte & (mask - 1); - *value += (highPart << (8 * i)); - return SZ_OK; - } - RINOK(SzReadByte(sd, &b)); - *value |= ((UInt64)b << (8 * i)); - mask >>= 1; - } - return SZ_OK; -} - -SZ_RESULT SzReadSize(CSzData *sd, CFileSize *value) -{ - UInt64 value64; - RINOK(SzReadNumber(sd, &value64)); - *value = (CFileSize)value64; - return SZ_OK; -} - -SZ_RESULT SzReadNumber32(CSzData *sd, UInt32 *value) -{ - UInt64 value64; - RINOK(SzReadNumber(sd, &value64)); - if (value64 >= 0x80000000) - return SZE_NOTIMPL; - if (value64 >= ((UInt64)(1) << ((sizeof(size_t) - 1) * 8 + 2))) - return SZE_NOTIMPL; - *value = (UInt32)value64; - return SZ_OK; -} - -SZ_RESULT SzReadID(CSzData *sd, UInt64 *value) -{ - return SzReadNumber(sd, value); -} - -SZ_RESULT SzSkeepDataSize(CSzData *sd, UInt64 size) -{ - if (size > sd->Size) - return SZE_ARCHIVE_ERROR; - sd->Size -= (size_t)size; - sd->Data += (size_t)size; - return SZ_OK; -} - -SZ_RESULT SzSkeepData(CSzData *sd) -{ - UInt64 size; - RINOK(SzReadNumber(sd, &size)); - return SzSkeepDataSize(sd, size); -} - -SZ_RESULT SzReadArchiveProperties(CSzData *sd) -{ - while(1) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - SzSkeepData(sd); - } - return SZ_OK; -} - -SZ_RESULT SzWaitAttribute(CSzData *sd, UInt64 attribute) -{ - while(1) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == attribute) - return SZ_OK; - if (type == k7zIdEnd) - return SZE_ARCHIVE_ERROR; - RINOK(SzSkeepData(sd)); - } -} - -SZ_RESULT SzReadBoolVector(CSzData *sd, size_t numItems, Byte **v, void * (*allocFunc)(size_t size)) -{ - Byte b = 0; - Byte mask = 0; - size_t i; - MY_ALLOC(Byte, *v, numItems, allocFunc); - for(i = 0; i < numItems; i++) - { - if (mask == 0) - { - RINOK(SzReadByte(sd, &b)); - mask = 0x80; - } - (*v)[i] = (Byte)(((b & mask) != 0) ? 1 : 0); - mask >>= 1; - } - return SZ_OK; -} - -SZ_RESULT SzReadBoolVector2(CSzData *sd, size_t numItems, Byte **v, void * (*allocFunc)(size_t size)) -{ - Byte allAreDefined; - size_t i; - RINOK(SzReadByte(sd, &allAreDefined)); - if (allAreDefined == 0) - return SzReadBoolVector(sd, numItems, v, allocFunc); - MY_ALLOC(Byte, *v, numItems, allocFunc); - for(i = 0; i < numItems; i++) - (*v)[i] = 1; - return SZ_OK; -} - -SZ_RESULT SzReadHashDigests( - CSzData *sd, - size_t numItems, - Byte **digestsDefined, - UInt32 **digests, - void * (*allocFunc)(size_t size)) -{ - size_t i; - RINOK(SzReadBoolVector2(sd, numItems, digestsDefined, allocFunc)); - MY_ALLOC(UInt32, *digests, numItems, allocFunc); - for(i = 0; i < numItems; i++) - if ((*digestsDefined)[i]) - { - RINOK(SzReadUInt32(sd, (*digests) + i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadPackInfo( - CSzData *sd, - CFileSize *dataOffset, - UInt32 *numPackStreams, - CFileSize **packSizes, - Byte **packCRCsDefined, - UInt32 **packCRCs, - void * (*allocFunc)(size_t size)) -{ - UInt32 i; - RINOK(SzReadSize(sd, dataOffset)); - RINOK(SzReadNumber32(sd, numPackStreams)); - - RINOK(SzWaitAttribute(sd, k7zIdSize)); - - MY_ALLOC(CFileSize, *packSizes, (size_t)*numPackStreams, allocFunc); - - for(i = 0; i < *numPackStreams; i++) - { - RINOK(SzReadSize(sd, (*packSizes) + i)); - } - - while(1) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - if (type == k7zIdCRC) - { - RINOK(SzReadHashDigests(sd, (size_t)*numPackStreams, packCRCsDefined, packCRCs, allocFunc)); - continue; - } - RINOK(SzSkeepData(sd)); - } - if (*packCRCsDefined == 0) - { - MY_ALLOC(Byte, *packCRCsDefined, (size_t)*numPackStreams, allocFunc); - MY_ALLOC(UInt32, *packCRCs, (size_t)*numPackStreams, allocFunc); - for(i = 0; i < *numPackStreams; i++) - { - (*packCRCsDefined)[i] = 0; - (*packCRCs)[i] = 0; - } - } - return SZ_OK; -} - -SZ_RESULT SzReadSwitch(CSzData *sd) -{ - Byte external; - RINOK(SzReadByte(sd, &external)); - return (external == 0) ? SZ_OK: SZE_ARCHIVE_ERROR; -} - -SZ_RESULT SzGetNextFolderItem(CSzData *sd, CFolder *folder, void * (*allocFunc)(size_t size)) -{ - UInt32 numCoders; - UInt32 numBindPairs; - UInt32 numPackedStreams; - UInt32 i; - UInt32 numInStreams = 0; - UInt32 numOutStreams = 0; - RINOK(SzReadNumber32(sd, &numCoders)); - folder->NumCoders = numCoders; - - MY_ALLOC(CCoderInfo, folder->Coders, (size_t)numCoders, allocFunc); - - for (i = 0; i < numCoders; i++) - SzCoderInfoInit(folder->Coders + i); - - for (i = 0; i < numCoders; i++) - { - Byte mainByte; - CCoderInfo *coder = folder->Coders + i; - { - RINOK(SzReadByte(sd, &mainByte)); - coder->MethodID.IDSize = (Byte)(mainByte & 0xF); - RINOK(SzReadBytes(sd, coder->MethodID.ID, coder->MethodID.IDSize)); - if ((mainByte & 0x10) != 0) - { - RINOK(SzReadNumber32(sd, &coder->NumInStreams)); - RINOK(SzReadNumber32(sd, &coder->NumOutStreams)); - } - else - { - coder->NumInStreams = 1; - coder->NumOutStreams = 1; - } - if ((mainByte & 0x20) != 0) - { - UInt64 propertiesSize = 0; - RINOK(SzReadNumber(sd, &propertiesSize)); - if (!SzByteBufferCreate(&coder->Properties, (size_t)propertiesSize, allocFunc)) - return SZE_OUTOFMEMORY; - RINOK(SzReadBytes(sd, coder->Properties.Items, (size_t)propertiesSize)); - } - } - while ((mainByte & 0x80) != 0) - { - RINOK(SzReadByte(sd, &mainByte)); - RINOK(SzSkeepDataSize(sd, (mainByte & 0xF))); - if ((mainByte & 0x10) != 0) - { - UInt32 n; - RINOK(SzReadNumber32(sd, &n)); - RINOK(SzReadNumber32(sd, &n)); - } - if ((mainByte & 0x20) != 0) - { - UInt64 propertiesSize = 0; - RINOK(SzReadNumber(sd, &propertiesSize)); - RINOK(SzSkeepDataSize(sd, propertiesSize)); - } - } - numInStreams += (UInt32)coder->NumInStreams; - numOutStreams += (UInt32)coder->NumOutStreams; - } - - numBindPairs = numOutStreams - 1; - folder->NumBindPairs = numBindPairs; - - - MY_ALLOC(CBindPair, folder->BindPairs, (size_t)numBindPairs, allocFunc); - - for (i = 0; i < numBindPairs; i++) - { - CBindPair *bindPair = folder->BindPairs + i;; - RINOK(SzReadNumber32(sd, &bindPair->InIndex)); - RINOK(SzReadNumber32(sd, &bindPair->OutIndex)); - } - - numPackedStreams = numInStreams - (UInt32)numBindPairs; - - folder->NumPackStreams = numPackedStreams; - MY_ALLOC(UInt32, folder->PackStreams, (size_t)numPackedStreams, allocFunc); - - if (numPackedStreams == 1) - { - UInt32 j; - UInt32 pi = 0; - for (j = 0; j < numInStreams; j++) - if (SzFolderFindBindPairForInStream(folder, j) < 0) - { - folder->PackStreams[pi++] = j; - break; - } - } - else - for(i = 0; i < numPackedStreams; i++) - { - RINOK(SzReadNumber32(sd, folder->PackStreams + i)); - } - return SZ_OK; -} - -SZ_RESULT SzReadUnPackInfo( - CSzData *sd, - UInt32 *numFolders, - CFolder **folders, /* for allocFunc */ - void * (*allocFunc)(size_t size), - ISzAlloc *allocTemp) -{ - UInt32 i; - RINOK(SzWaitAttribute(sd, k7zIdFolder)); - RINOK(SzReadNumber32(sd, numFolders)); - { - RINOK(SzReadSwitch(sd)); - - MY_ALLOC(CFolder, *folders, (size_t)*numFolders, allocFunc); - - for(i = 0; i < *numFolders; i++) - SzFolderInit((*folders) + i); - - for(i = 0; i < *numFolders; i++) - { - RINOK(SzGetNextFolderItem(sd, (*folders) + i, allocFunc)); - } - } - - RINOK(SzWaitAttribute(sd, k7zIdCodersUnPackSize)); - - for(i = 0; i < *numFolders; i++) - { - UInt32 j; - CFolder *folder = (*folders) + i; - UInt32 numOutStreams = SzFolderGetNumOutStreams(folder); - - MY_ALLOC(CFileSize, folder->UnPackSizes, (size_t)numOutStreams, allocFunc); - - for(j = 0; j < numOutStreams; j++) - { - RINOK(SzReadSize(sd, folder->UnPackSizes + j)); - } - } - - while(1) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - return SZ_OK; - if (type == k7zIdCRC) - { - SZ_RESULT res; - Byte *crcsDefined = 0; - UInt32 *crcs = 0; - res = SzReadHashDigests(sd, *numFolders, &crcsDefined, &crcs, allocTemp->Alloc); - if (res == SZ_OK) - { - for(i = 0; i < *numFolders; i++) - { - CFolder *folder = (*folders) + i; - folder->UnPackCRCDefined = crcsDefined[i]; - folder->UnPackCRC = crcs[i]; - } - } - allocTemp->Free(crcs); - allocTemp->Free(crcsDefined); - RINOK(res); - continue; - } - RINOK(SzSkeepData(sd)); - } -} - -SZ_RESULT SzReadSubStreamsInfo( - CSzData *sd, - UInt32 numFolders, - CFolder *folders, - UInt32 *numUnPackStreams, - CFileSize **unPackSizes, - Byte **digestsDefined, - UInt32 **digests, - ISzAlloc *allocTemp) -{ - UInt64 type = 0; - UInt32 i; - UInt32 si = 0; - UInt32 numDigests = 0; - - for(i = 0; i < numFolders; i++) - folders[i].NumUnPackStreams = 1; - *numUnPackStreams = numFolders; - - while(1) - { - RINOK(SzReadID(sd, &type)); - if (type == k7zIdNumUnPackStream) - { - *numUnPackStreams = 0; - for(i = 0; i < numFolders; i++) - { - UInt32 numStreams; - RINOK(SzReadNumber32(sd, &numStreams)); - folders[i].NumUnPackStreams = numStreams; - *numUnPackStreams += numStreams; - } - continue; - } - if (type == k7zIdCRC || type == k7zIdSize) - break; - if (type == k7zIdEnd) - break; - RINOK(SzSkeepData(sd)); - } - - if (*numUnPackStreams == 0) - { - *unPackSizes = 0; - *digestsDefined = 0; - *digests = 0; - } - else - { - *unPackSizes = (CFileSize *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(CFileSize)); - RINOM(*unPackSizes); - *digestsDefined = (Byte *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(Byte)); - RINOM(*digestsDefined); - *digests = (UInt32 *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(UInt32)); - RINOM(*digests); - } - - for(i = 0; i < numFolders; i++) - { - /* - v3.13 incorrectly worked with empty folders - v4.07: we check that folder is empty - */ - CFileSize sum = 0; - UInt32 j; - UInt32 numSubstreams = folders[i].NumUnPackStreams; - if (numSubstreams == 0) - continue; - if (type == k7zIdSize) - for (j = 1; j < numSubstreams; j++) - { - CFileSize size; - RINOK(SzReadSize(sd, &size)); - (*unPackSizes)[si++] = size; - sum += size; - } - (*unPackSizes)[si++] = SzFolderGetUnPackSize(folders + i) - sum; - } - if (type == k7zIdSize) - { - RINOK(SzReadID(sd, &type)); - } - - for(i = 0; i < *numUnPackStreams; i++) - { - (*digestsDefined)[i] = 0; - (*digests)[i] = 0; - } - - - for(i = 0; i < numFolders; i++) - { - UInt32 numSubstreams = folders[i].NumUnPackStreams; - if (numSubstreams != 1 || !folders[i].UnPackCRCDefined) - numDigests += numSubstreams; - } - - - si = 0; - while(1) - { - if (type == k7zIdCRC) - { - int digestIndex = 0; - Byte *digestsDefined2 = 0; - UInt32 *digests2 = 0; - SZ_RESULT res = SzReadHashDigests(sd, numDigests, &digestsDefined2, &digests2, allocTemp->Alloc); - if (res == SZ_OK) - { - for (i = 0; i < numFolders; i++) - { - CFolder *folder = folders + i; - UInt32 numSubstreams = folder->NumUnPackStreams; - if (numSubstreams == 1 && folder->UnPackCRCDefined) - { - (*digestsDefined)[si] = 1; - (*digests)[si] = folder->UnPackCRC; - si++; - } - else - { - UInt32 j; - for (j = 0; j < numSubstreams; j++, digestIndex++) - { - (*digestsDefined)[si] = digestsDefined2[digestIndex]; - (*digests)[si] = digests2[digestIndex]; - si++; - } - } - } - } - allocTemp->Free(digestsDefined2); - allocTemp->Free(digests2); - RINOK(res); - } - else if (type == k7zIdEnd) - return SZ_OK; - else - { - RINOK(SzSkeepData(sd)); - } - RINOK(SzReadID(sd, &type)); - } -} - - -SZ_RESULT SzReadStreamsInfo( - CSzData *sd, - CFileSize *dataOffset, - CArchiveDatabase *db, - UInt32 *numUnPackStreams, - CFileSize **unPackSizes, /* allocTemp */ - Byte **digestsDefined, /* allocTemp */ - UInt32 **digests, /* allocTemp */ - void * (*allocFunc)(size_t size), - ISzAlloc *allocTemp) -{ - while(1) - { - UInt64 type; - RINOK(SzReadID(sd, &type)); - if ((UInt64)(int)type != type) - return SZE_FAIL; - switch((int)type) - { - case k7zIdEnd: - return SZ_OK; - case k7zIdPackInfo: - { - RINOK(SzReadPackInfo(sd, dataOffset, &db->NumPackStreams, - &db->PackSizes, &db->PackCRCsDefined, &db->PackCRCs, allocFunc)); - break; - } - case k7zIdUnPackInfo: - { - RINOK(SzReadUnPackInfo(sd, &db->NumFolders, &db->Folders, allocFunc, allocTemp)); - break; - } - case k7zIdSubStreamsInfo: - { - RINOK(SzReadSubStreamsInfo(sd, db->NumFolders, db->Folders, - numUnPackStreams, unPackSizes, digestsDefined, digests, allocTemp)); - break; - } - default: - return SZE_FAIL; - } - } -} - -Byte kUtf8Limits[5] = { 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - -SZ_RESULT SzReadFileNames(CSzData *sd, UInt32 numFiles, CFileItem *files, - void * (*allocFunc)(size_t size)) -{ - UInt32 i; - for(i = 0; i < numFiles; i++) - { - UInt32 len = 0; - UInt32 pos = 0; - CFileItem *file = files + i; - while(pos + 2 <= sd->Size) - { - int numAdds; - UInt32 value = (UInt32)(sd->Data[pos] | (((UInt32)sd->Data[pos + 1]) << 8)); - pos += 2; - len++; - if (value == 0) - break; - if (value < 0x80) - continue; - if (value >= 0xD800 && value < 0xE000) - { - UInt32 c2; - if (value >= 0xDC00) - return SZE_ARCHIVE_ERROR; - if (pos + 2 > sd->Size) - return SZE_ARCHIVE_ERROR; - c2 = (UInt32)(sd->Data[pos] | (((UInt32)sd->Data[pos + 1]) << 8)); - pos += 2; - if (c2 < 0xDC00 || c2 >= 0xE000) - return SZE_ARCHIVE_ERROR; - value = ((value - 0xD800) << 10) | (c2 - 0xDC00); - } - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((UInt32)1) << (numAdds * 5 + 6))) - break; - len += numAdds; - } - - MY_ALLOC(char, file->Name, (size_t)len, allocFunc); - - len = 0; - while(2 <= sd->Size) - { - int numAdds; - UInt32 value = (UInt32)(sd->Data[0] | (((UInt32)sd->Data[1]) << 8)); - SzSkeepDataSize(sd, 2); - if (value < 0x80) - { - file->Name[len++] = (char)value; - if (value == 0) - break; - continue; - } - if (value >= 0xD800 && value < 0xE000) - { - UInt32 c2 = (UInt32)(sd->Data[0] | (((UInt32)sd->Data[1]) << 8)); - SzSkeepDataSize(sd, 2); - value = ((value - 0xD800) << 10) | (c2 - 0xDC00); - } - for (numAdds = 1; numAdds < 5; numAdds++) - if (value < (((UInt32)1) << (numAdds * 5 + 6))) - break; - file->Name[len++] = (char)(kUtf8Limits[numAdds - 1] + (value >> (6 * numAdds))); - do - { - numAdds--; - file->Name[len++] = (char)(0x80 + ((value >> (6 * numAdds)) & 0x3F)); - } - while(numAdds > 0); - - len += numAdds; - } - } - return SZ_OK; -} - -SZ_RESULT SzReadHeader2( - CSzData *sd, - CArchiveDatabaseEx *db, /* allocMain */ - CFileSize **unPackSizes, /* allocTemp */ - Byte **digestsDefined, /* allocTemp */ - UInt32 **digests, /* allocTemp */ - Byte **emptyStreamVector, /* allocTemp */ - Byte **emptyFileVector, /* allocTemp */ - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - UInt64 type; - UInt32 numUnPackStreams = 0; - UInt32 numFiles = 0; - CFileItem *files = 0; - UInt32 numEmptyStreams = 0; - UInt32 i; - - RINOK(SzReadID(sd, &type)); - - if (type == k7zIdArchiveProperties) - { - RINOK(SzReadArchiveProperties(sd)); - RINOK(SzReadID(sd, &type)); - } - - - if (type == k7zIdMainStreamsInfo) - { - RINOK(SzReadStreamsInfo(sd, - &db->ArchiveInfo.DataStartPosition, - &db->Database, - &numUnPackStreams, - unPackSizes, - digestsDefined, - digests, allocMain->Alloc, allocTemp)); - db->ArchiveInfo.DataStartPosition += db->ArchiveInfo.StartPositionAfterHeader; - RINOK(SzReadID(sd, &type)); - } - - if (type == k7zIdEnd) - return SZ_OK; - if (type != k7zIdFilesInfo) - return SZE_ARCHIVE_ERROR; - - RINOK(SzReadNumber32(sd, &numFiles)); - db->Database.NumFiles = numFiles; - - MY_ALLOC(CFileItem, files, (size_t)numFiles, allocMain->Alloc); - - db->Database.Files = files; - for(i = 0; i < numFiles; i++) - SzFileInit(files + i); - - while(1) - { - UInt64 type; - UInt64 size; - RINOK(SzReadID(sd, &type)); - if (type == k7zIdEnd) - break; - RINOK(SzReadNumber(sd, &size)); - - if ((UInt64)(int)type != type) - { - RINOK(SzSkeepDataSize(sd, size)); - } - else - switch((int)type) - { - case k7zIdName: - { - RINOK(SzReadSwitch(sd)); - RINOK(SzReadFileNames(sd, numFiles, files, allocMain->Alloc)) - break; - } - case k7zIdEmptyStream: - { - RINOK(SzReadBoolVector(sd, numFiles, emptyStreamVector, allocTemp->Alloc)); - numEmptyStreams = 0; - for (i = 0; i < numFiles; i++) - if ((*emptyStreamVector)[i]) - numEmptyStreams++; - break; - } - case k7zIdEmptyFile: - { - RINOK(SzReadBoolVector(sd, numEmptyStreams, emptyFileVector, allocTemp->Alloc)); - break; - } - default: - { - RINOK(SzSkeepDataSize(sd, size)); - } - } - } - - { - UInt32 emptyFileIndex = 0; - UInt32 sizeIndex = 0; - for(i = 0; i < numFiles; i++) - { - CFileItem *file = files + i; - file->IsAnti = 0; - if (*emptyStreamVector == 0) - file->HasStream = 1; - else - file->HasStream = (Byte)((*emptyStreamVector)[i] ? 0 : 1); - if(file->HasStream) - { - file->IsDirectory = 0; - file->Size = (*unPackSizes)[sizeIndex]; - file->FileCRC = (*digests)[sizeIndex]; - file->IsFileCRCDefined = (Byte)(*digestsDefined)[sizeIndex]; - sizeIndex++; - } - else - { - if (*emptyFileVector == 0) - file->IsDirectory = 1; - else - file->IsDirectory = (Byte)((*emptyFileVector)[emptyFileIndex] ? 0 : 1); - emptyFileIndex++; - file->Size = 0; - file->IsFileCRCDefined = 0; - } - } - } - return SzArDbExFill(db, allocMain->Alloc); -} - -SZ_RESULT SzReadHeader( - CSzData *sd, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - CFileSize *unPackSizes = 0; - Byte *digestsDefined = 0; - UInt32 *digests = 0; - Byte *emptyStreamVector = 0; - Byte *emptyFileVector = 0; - SZ_RESULT res = SzReadHeader2(sd, db, - &unPackSizes, &digestsDefined, &digests, - &emptyStreamVector, &emptyFileVector, - allocMain, allocTemp); - allocTemp->Free(unPackSizes); - allocTemp->Free(digestsDefined); - allocTemp->Free(digests); - allocTemp->Free(emptyStreamVector); - allocTemp->Free(emptyFileVector); - return res; -} - -SZ_RESULT SzReadAndDecodePackedStreams2( - ISzInStream *inStream, - CSzData *sd, - CSzByteBuffer *outBuffer, - CFileSize baseOffset, - CArchiveDatabase *db, - CFileSize **unPackSizes, - Byte **digestsDefined, - UInt32 **digests, - #ifndef _LZMA_IN_CB - Byte **inBuffer, - #endif - ISzAlloc *allocTemp) -{ - - UInt32 numUnPackStreams = 0; - CFileSize dataStartPos; - CFolder *folder; - #ifndef _LZMA_IN_CB - CFileSize packSize = 0; - UInt32 i = 0; - #endif - CFileSize unPackSize; - size_t outRealSize; - SZ_RESULT res; - - RINOK(SzReadStreamsInfo(sd, &dataStartPos, db, - &numUnPackStreams, unPackSizes, digestsDefined, digests, - allocTemp->Alloc, allocTemp)); - - dataStartPos += baseOffset; - if (db->NumFolders != 1) - return SZE_ARCHIVE_ERROR; - - folder = db->Folders; - unPackSize = SzFolderGetUnPackSize(folder); - - RINOK(inStream->Seek(inStream, dataStartPos)); - - #ifndef _LZMA_IN_CB - for (i = 0; i < db->NumPackStreams; i++) - packSize += db->PackSizes[i]; - - MY_ALLOC(Byte, *inBuffer, (size_t)packSize, allocTemp->Alloc); - - RINOK(SafeReadDirect(inStream, *inBuffer, (size_t)packSize)); - #endif - - if (!SzByteBufferCreate(outBuffer, (size_t)unPackSize, allocTemp->Alloc)) - return SZE_OUTOFMEMORY; - - res = SzDecode(db->PackSizes, folder, - #ifdef _LZMA_IN_CB - inStream, - #else - *inBuffer, - #endif - outBuffer->Items, (size_t)unPackSize, - &outRealSize, allocTemp); - RINOK(res) - if (outRealSize != (UInt32)unPackSize) - return SZE_FAIL; - if (folder->UnPackCRCDefined) - if (!CrcVerifyDigest(folder->UnPackCRC, outBuffer->Items, (size_t)unPackSize)) - return SZE_FAIL; - return SZ_OK; -} - -SZ_RESULT SzReadAndDecodePackedStreams( - ISzInStream *inStream, - CSzData *sd, - CSzByteBuffer *outBuffer, - CFileSize baseOffset, - ISzAlloc *allocTemp) -{ - CArchiveDatabase db; - CFileSize *unPackSizes = 0; - Byte *digestsDefined = 0; - UInt32 *digests = 0; - #ifndef _LZMA_IN_CB - Byte *inBuffer = 0; - #endif - SZ_RESULT res; - SzArchiveDatabaseInit(&db); - res = SzReadAndDecodePackedStreams2(inStream, sd, outBuffer, baseOffset, - &db, &unPackSizes, &digestsDefined, &digests, - #ifndef _LZMA_IN_CB - &inBuffer, - #endif - allocTemp); - SzArchiveDatabaseFree(&db, allocTemp->Free); - allocTemp->Free(unPackSizes); - allocTemp->Free(digestsDefined); - allocTemp->Free(digests); - #ifndef _LZMA_IN_CB - allocTemp->Free(inBuffer); - #endif - return res; -} - -SZ_RESULT SzArchiveOpen2( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - Byte signature[k7zSignatureSize]; - Byte version; - UInt32 crcFromArchive; - UInt64 nextHeaderOffset; - UInt64 nextHeaderSize; - UInt32 nextHeaderCRC; - UInt32 crc; - CFileSize pos = 0; - CSzByteBuffer buffer; - CSzData sd; - SZ_RESULT res; - - RINOK(SafeReadDirect(inStream, signature, k7zSignatureSize)); - - if (!TestSignatureCandidate(signature)) - return SZE_ARCHIVE_ERROR; - - /* - db.Clear(); - db.ArchiveInfo.StartPosition = _arhiveBeginStreamPosition; - */ - RINOK(SafeReadDirectByte(inStream, &version)); - if (version != k7zMajorVersion) - return SZE_ARCHIVE_ERROR; - RINOK(SafeReadDirectByte(inStream, &version)); - - RINOK(SafeReadDirectUInt32(inStream, &crcFromArchive)); - - CrcInit(&crc); - RINOK(SafeReadDirectUInt64(inStream, &nextHeaderOffset)); - CrcUpdateUInt64(&crc, nextHeaderOffset); - RINOK(SafeReadDirectUInt64(inStream, &nextHeaderSize)); - CrcUpdateUInt64(&crc, nextHeaderSize); - RINOK(SafeReadDirectUInt32(inStream, &nextHeaderCRC)); - CrcUpdateUInt32(&crc, nextHeaderCRC); - - pos = k7zStartHeaderSize; - db->ArchiveInfo.StartPositionAfterHeader = pos; - - if (CrcGetDigest(&crc) != crcFromArchive) - return SZE_ARCHIVE_ERROR; - - if (nextHeaderSize == 0) - return SZ_OK; - - RINOK(inStream->Seek(inStream, (CFileSize)(pos + nextHeaderOffset))); - - if (!SzByteBufferCreate(&buffer, (size_t)nextHeaderSize, allocTemp->Alloc)) - return SZE_OUTOFMEMORY; - - res = SafeReadDirect(inStream, buffer.Items, (size_t)nextHeaderSize); - if (res == SZ_OK) - { - if (CrcVerifyDigest(nextHeaderCRC, buffer.Items, (UInt32)nextHeaderSize)) - { - while (1) - { - UInt64 type; - sd.Data = buffer.Items; - sd.Size = buffer.Capacity; - res = SzReadID(&sd, &type); - if (res != SZ_OK) - break; - if (type == k7zIdHeader) - { - res = SzReadHeader(&sd, db, allocMain, allocTemp); - break; - } - if (type != k7zIdEncodedHeader) - { - res = SZE_ARCHIVE_ERROR; - break; - } - { - CSzByteBuffer outBuffer; - res = SzReadAndDecodePackedStreams(inStream, &sd, &outBuffer, - db->ArchiveInfo.StartPositionAfterHeader, - allocTemp); - if (res != SZ_OK) - { - SzByteBufferFree(&outBuffer, allocTemp->Free); - break; - } - SzByteBufferFree(&buffer, allocTemp->Free); - buffer.Items = outBuffer.Items; - buffer.Capacity = outBuffer.Capacity; - } - } - } - } - SzByteBufferFree(&buffer, allocTemp->Free); - return res; -} - -SZ_RESULT SzArchiveOpen( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp) -{ - SZ_RESULT res = SzArchiveOpen2(inStream, db, allocMain, allocTemp); - if (res != SZ_OK) - SzArDbExFree(db, allocMain->Free); - return res; -} diff --git a/source/sz/7zIn.h b/source/sz/7zIn.h deleted file mode 100644 index 8ded0ecc..00000000 --- a/source/sz/7zIn.h +++ /dev/null @@ -1,55 +0,0 @@ -/* 7zIn.h */ - -#ifndef __7Z_IN_H -#define __7Z_IN_H - -#include "7zHeader.h" -#include "7zItem.h" -#include "7zAlloc.h" - -typedef struct _CInArchiveInfo -{ - CFileSize StartPositionAfterHeader; - CFileSize DataStartPosition; -}CInArchiveInfo; - -typedef struct _CArchiveDatabaseEx -{ - CArchiveDatabase Database; - CInArchiveInfo ArchiveInfo; - UInt32 *FolderStartPackStreamIndex; - CFileSize *PackStreamStartPositions; - UInt32 *FolderStartFileIndex; - UInt32 *FileIndexToFolderIndexMap; -}CArchiveDatabaseEx; - -void SzArDbExInit(CArchiveDatabaseEx *db); -void SzArDbExFree(CArchiveDatabaseEx *db, void (*freeFunc)(void *)); -CFileSize SzArDbGetFolderStreamPos(CArchiveDatabaseEx *db, UInt32 folderIndex, UInt32 indexInFolder); -CFileSize SzArDbGetFolderFullPackSize(CArchiveDatabaseEx *db, UInt32 folderIndex); - -typedef struct _ISzInStream -{ - #ifdef _LZMA_IN_CB - SZ_RESULT (*Read)( - void *object, /* pointer to ISzInStream itself */ - void **buffer, /* out: pointer to buffer with data */ - size_t maxRequiredSize, /* max required size to read */ - size_t *processedSize); /* real processed size. - processedSize can be less than maxRequiredSize. - If processedSize == 0, then there are no more - bytes in stream. */ - #else - SZ_RESULT (*Read)(void *object, void *buffer, size_t size, size_t *processedSize); - #endif - SZ_RESULT (*Seek)(void *object, CFileSize pos); -} ISzInStream; - - -int SzArchiveOpen( - ISzInStream *inStream, - CArchiveDatabaseEx *db, - ISzAlloc *allocMain, - ISzAlloc *allocTemp); - -#endif diff --git a/source/sz/7zItem.c b/source/sz/7zItem.c deleted file mode 100644 index 5f9a37f6..00000000 --- a/source/sz/7zItem.c +++ /dev/null @@ -1,133 +0,0 @@ -/* 7zItem.c */ - -#include "7zItem.h" -#include "7zAlloc.h" - -void SzCoderInfoInit(CCoderInfo *coder) -{ - SzByteBufferInit(&coder->Properties); -} - -void SzCoderInfoFree(CCoderInfo *coder, void (*freeFunc)(void *p)) -{ - SzByteBufferFree(&coder->Properties, freeFunc); - SzCoderInfoInit(coder); -} - -void SzFolderInit(CFolder *folder) -{ - folder->NumCoders = 0; - folder->Coders = 0; - folder->NumBindPairs = 0; - folder->BindPairs = 0; - folder->NumPackStreams = 0; - folder->PackStreams = 0; - folder->UnPackSizes = 0; - folder->UnPackCRCDefined = 0; - folder->UnPackCRC = 0; - folder->NumUnPackStreams = 0; -} - -void SzFolderFree(CFolder *folder, void (*freeFunc)(void *p)) -{ - UInt32 i; - for (i = 0; i < folder->NumCoders; i++) - SzCoderInfoFree(&folder->Coders[i], freeFunc); - freeFunc(folder->Coders); - freeFunc(folder->BindPairs); - freeFunc(folder->PackStreams); - freeFunc(folder->UnPackSizes); - SzFolderInit(folder); -} - -UInt32 SzFolderGetNumOutStreams(CFolder *folder) -{ - UInt32 result = 0; - UInt32 i; - for (i = 0; i < folder->NumCoders; i++) - result += folder->Coders[i].NumOutStreams; - return result; -} - -int SzFolderFindBindPairForInStream(CFolder *folder, UInt32 inStreamIndex) -{ - UInt32 i; - for(i = 0; i < folder->NumBindPairs; i++) - if (folder->BindPairs[i].InIndex == inStreamIndex) - return i; - return -1; -} - - -int SzFolderFindBindPairForOutStream(CFolder *folder, UInt32 outStreamIndex) -{ - UInt32 i; - for(i = 0; i < folder->NumBindPairs; i++) - if (folder->BindPairs[i].OutIndex == outStreamIndex) - return i; - return -1; -} - -CFileSize SzFolderGetUnPackSize(CFolder *folder) -{ - int i = (int)SzFolderGetNumOutStreams(folder); - if (i == 0) - return 0; - for (i--; i >= 0; i--) - if (SzFolderFindBindPairForOutStream(folder, i) < 0) - return folder->UnPackSizes[i]; - /* throw 1; */ - return 0; -} - -/* -int FindPackStreamArrayIndex(int inStreamIndex) const -{ - for(int i = 0; i < PackStreams.Size(); i++) - if (PackStreams[i] == inStreamIndex) - return i; - return -1; -} -*/ - -void SzFileInit(CFileItem *fileItem) -{ - fileItem->IsFileCRCDefined = 0; - fileItem->HasStream = 1; - fileItem->IsDirectory = 0; - fileItem->IsAnti = 0; - fileItem->Name = 0; -} - -void SzFileFree(CFileItem *fileItem, void (*freeFunc)(void *p)) -{ - freeFunc(fileItem->Name); - SzFileInit(fileItem); -} - -void SzArchiveDatabaseInit(CArchiveDatabase *db) -{ - db->NumPackStreams = 0; - db->PackSizes = 0; - db->PackCRCsDefined = 0; - db->PackCRCs = 0; - db->NumFolders = 0; - db->Folders = 0; - db->NumFiles = 0; - db->Files = 0; -} - -void SzArchiveDatabaseFree(CArchiveDatabase *db, void (*freeFunc)(void *)) -{ - UInt32 i; - for (i = 0; i < db->NumFolders; i++) - SzFolderFree(&db->Folders[i], freeFunc); - for (i = 0; i < db->NumFiles; i++) - SzFileFree(&db->Files[i], freeFunc); - freeFunc(db->PackSizes); - freeFunc(db->PackCRCsDefined); - freeFunc(db->PackCRCs); - freeFunc(db->Folders); - freeFunc(db->Files); - SzArchiveDatabaseInit(db); -} diff --git a/source/sz/7zItem.h b/source/sz/7zItem.h deleted file mode 100644 index e59b73f0..00000000 --- a/source/sz/7zItem.h +++ /dev/null @@ -1,90 +0,0 @@ -/* 7zItem.h */ - -#ifndef __7Z_ITEM_H -#define __7Z_ITEM_H - -#include "7zMethodID.h" -#include "7zHeader.h" -#include "7zBuffer.h" - -typedef struct _CCoderInfo -{ - UInt32 NumInStreams; - UInt32 NumOutStreams; - CMethodID MethodID; - CSzByteBuffer Properties; -}CCoderInfo; - -void SzCoderInfoInit(CCoderInfo *coder); -void SzCoderInfoFree(CCoderInfo *coder, void (*freeFunc)(void *p)); - -typedef struct _CBindPair -{ - UInt32 InIndex; - UInt32 OutIndex; -}CBindPair; - -typedef struct _CFolder -{ - UInt32 NumCoders; - CCoderInfo *Coders; - UInt32 NumBindPairs; - CBindPair *BindPairs; - UInt32 NumPackStreams; - UInt32 *PackStreams; - CFileSize *UnPackSizes; - int UnPackCRCDefined; - UInt32 UnPackCRC; - - UInt32 NumUnPackStreams; -}CFolder; - -void SzFolderInit(CFolder *folder); -CFileSize SzFolderGetUnPackSize(CFolder *folder); -int SzFolderFindBindPairForInStream(CFolder *folder, UInt32 inStreamIndex); -UInt32 SzFolderGetNumOutStreams(CFolder *folder); -CFileSize SzFolderGetUnPackSize(CFolder *folder); - -/* #define CArchiveFileTime UInt64 */ - -typedef struct _CFileItem -{ - /* - CArchiveFileTime LastWriteTime; - CFileSize StartPos; - UInt32 Attributes; - */ - CFileSize Size; - UInt32 FileCRC; - char *Name; - - Byte IsFileCRCDefined; - Byte HasStream; - Byte IsDirectory; - Byte IsAnti; - /* - int AreAttributesDefined; - int IsLastWriteTimeDefined; - int IsStartPosDefined; - */ -}CFileItem; - -void SzFileInit(CFileItem *fileItem); - -typedef struct _CArchiveDatabase -{ - UInt32 NumPackStreams; - CFileSize *PackSizes; - Byte *PackCRCsDefined; - UInt32 *PackCRCs; - UInt32 NumFolders; - CFolder *Folders; - UInt32 NumFiles; - CFileItem *Files; -}CArchiveDatabase; - -void SzArchiveDatabaseInit(CArchiveDatabase *db); -void SzArchiveDatabaseFree(CArchiveDatabase *db, void (*freeFunc)(void *)); - - -#endif diff --git a/source/sz/7zMethodID.c b/source/sz/7zMethodID.c deleted file mode 100644 index 9daf39c2..00000000 --- a/source/sz/7zMethodID.c +++ /dev/null @@ -1,14 +0,0 @@ -/* 7zMethodID.c */ - -#include "7zMethodID.h" - -int AreMethodsEqual(CMethodID *a1, CMethodID *a2) -{ - int i; - if (a1->IDSize != a2->IDSize) - return 0; - for (i = 0; i < a1->IDSize; i++) - if (a1->ID[i] != a2->ID[i]) - return 0; - return 1; -} diff --git a/source/sz/7zMethodID.h b/source/sz/7zMethodID.h deleted file mode 100644 index 4d886899..00000000 --- a/source/sz/7zMethodID.h +++ /dev/null @@ -1,18 +0,0 @@ -/* 7zMethodID.h */ - -#ifndef __7Z_METHOD_ID_H -#define __7Z_METHOD_ID_H - -#include "7zTypes.h" - -#define kMethodIDSize 15 - -typedef struct _CMethodID -{ - Byte ID[kMethodIDSize]; - Byte IDSize; -} CMethodID; - -int AreMethodsEqual(CMethodID *a1, CMethodID *a2); - -#endif diff --git a/source/sz/7zTypes.h b/source/sz/7zTypes.h deleted file mode 100644 index fa4c5c3c..00000000 --- a/source/sz/7zTypes.h +++ /dev/null @@ -1,71 +0,0 @@ -/* 7zTypes.h */ - -#ifndef __COMMON_TYPES_H -#define __COMMON_TYPES_H - -#ifndef _7ZIP_BYTE_DEFINED -#define _7ZIP_BYTE_DEFINED -#ifndef ZCONF_H -typedef unsigned char Byte; -#endif -#endif - -#ifndef _7ZIP_UINT16_DEFINED -#define _7ZIP_UINT16_DEFINED -typedef unsigned short UInt16; -#endif - -#ifndef _7ZIP_UINT32_DEFINED -#define _7ZIP_UINT32_DEFINED -#ifdef _LZMA_UINT32_IS_ULONG -typedef unsigned long UInt32; -#else -typedef unsigned int UInt32; -#endif -#endif - -/* #define _SZ_NO_INT_64 */ -/* define it your compiler doesn't support long long int */ - -#ifndef _7ZIP_UINT64_DEFINED -#define _7ZIP_UINT64_DEFINED -#ifdef _SZ_NO_INT_64 -typedef unsigned long UInt64; -#else -#ifdef _MSC_VER -typedef unsigned __int64 UInt64; -#else -typedef unsigned long long int UInt64; -#endif -#endif -#endif - - -/* #define _SZ_FILE_SIZE_64 */ -/* Use _SZ_FILE_SIZE_64 if you need support for files larger than 4 GB*/ - -#ifndef CFileSize -#ifdef _SZ_FILE_SIZE_64 -typedef UInt64 CFileSize; -#else -typedef UInt32 CFileSize; -#endif -#endif - -#define SZ_RESULT int - -#define SZ_OK (0) -#define SZE_DATA_ERROR (1) -#define SZE_OUTOFMEMORY (2) -#define SZE_CRC_ERROR (3) - -#define SZE_NOTIMPL (4) -#define SZE_FAIL (5) - -#define SZE_ARCHIVE_ERROR (6) - -#define SZE_OUTOFMEMORYDIC (7) - -#define RINOK(x) { int __result_ = (x); if(__result_ != 0) return __result_; } - -#endif diff --git a/source/sz/LzmaDecode.c b/source/sz/LzmaDecode.c deleted file mode 100644 index 71c62c47..00000000 --- a/source/sz/LzmaDecode.c +++ /dev/null @@ -1,584 +0,0 @@ -/* - LzmaDecode.c - LZMA Decoder (optimized for Speed version) - - LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this Code, expressly permits you to - statically or dynamically link your Code (or bind by name) to the - interfaces of this file without subjecting your linked Code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#include "LzmaDecode.h" - -#define kNumTopBits 24 -#define kTopValue ((UInt32)1 << kNumTopBits) - -#define kNumBitModelTotalBits 11 -#define kBitModelTotal (1 << kNumBitModelTotalBits) -#define kNumMoveBits 5 - -#define RC_READ_BYTE (*Buffer++) - -#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \ - { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }} - -#ifdef _LZMA_IN_CB - -#define RC_TEST { if (Buffer == BufferLim) \ - { SizeT size; int result = InCallback->Read(InCallback, &Buffer, &size); if (result != LZMA_RESULT_OK) return result; \ - BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }} - -#define RC_INIT Buffer = BufferLim = 0; RC_INIT2 - -#else - -#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; } - -#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2 - -#endif - -#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; } - -#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound) -#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits; -#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits; - -#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \ - { UpdateBit0(p); mi <<= 1; A0; } else \ - { UpdateBit1(p); mi = (mi + mi) + 1; A1; } - -#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;) - -#define RangeDecoderBitTreeDecode(probs, numLevels, res) \ - { int i = numLevels; res = 1; \ - do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \ - res -= (1 << numLevels); } - - -#define kNumPosBitsMax 4 -#define kNumPosStatesMax (1 << kNumPosBitsMax) - -#define kLenNumLowBits 3 -#define kLenNumLowSymbols (1 << kLenNumLowBits) -#define kLenNumMidBits 3 -#define kLenNumMidSymbols (1 << kLenNumMidBits) -#define kLenNumHighBits 8 -#define kLenNumHighSymbols (1 << kLenNumHighBits) - -#define LenChoice 0 -#define LenChoice2 (LenChoice + 1) -#define LenLow (LenChoice2 + 1) -#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) -#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) -#define kNumLenProbs (LenHigh + kLenNumHighSymbols) - - -#define kNumStates 12 -#define kNumLitStates 7 - -#define kStartPosModelIndex 4 -#define kEndPosModelIndex 14 -#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) - -#define kNumPosSlotBits 6 -#define kNumLenToPosStates 4 - -#define kNumAlignBits 4 -#define kAlignTableSize (1 << kNumAlignBits) - -#define kMatchMinLen 2 - -#define IsMatch 0 -#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) -#define IsRepG0 (IsRep + kNumStates) -#define IsRepG1 (IsRepG0 + kNumStates) -#define IsRepG2 (IsRepG1 + kNumStates) -#define IsRep0Long (IsRepG2 + kNumStates) -#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) -#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) -#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) -#define LenCoder (Align + kAlignTableSize) -#define RepLenCoder (LenCoder + kNumLenProbs) -#define Literal (RepLenCoder + kNumLenProbs) - -#if Literal != LZMA_BASE_SIZE -StopCompilingDueBUG -#endif - -int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size) -{ - unsigned char prop0; - if (size < LZMA_PROPERTIES_SIZE) - return LZMA_RESULT_DATA_ERROR; - prop0 = propsData[0]; - if (prop0 >= (9 * 5 * 5)) - return LZMA_RESULT_DATA_ERROR; - { - for (propsRes->pb = 0; prop0 >= (9 * 5); propsRes->pb++, prop0 -= (9 * 5)); - for (propsRes->lp = 0; prop0 >= 9; propsRes->lp++, prop0 -= 9); - propsRes->lc = prop0; - /* - unsigned char remainder = (unsigned char)(prop0 / 9); - propsRes->lc = prop0 % 9; - propsRes->pb = remainder / 5; - propsRes->lp = remainder % 5; - */ - } - - #ifdef _LZMA_OUT_READ - { - int i; - propsRes->DictionarySize = 0; - for (i = 0; i < 4; i++) - propsRes->DictionarySize += (UInt32)(propsData[1 + i]) << (i * 8); - if (propsRes->DictionarySize == 0) - propsRes->DictionarySize = 1; - } - #endif - return LZMA_RESULT_OK; -} - -#define kLzmaStreamWasFinishedId (-1) - -int LzmaDecode(CLzmaDecoderState *vs, - #ifdef _LZMA_IN_CB - ILzmaInCallback *InCallback, - #else - const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, - #endif - unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed) -{ - CProb *p = vs->Probs; - SizeT nowPos = 0; - Byte previousByte = 0; - UInt32 posStateMask = (1 << (vs->Properties.pb)) - 1; - UInt32 literalPosMask = (1 << (vs->Properties.lp)) - 1; - int lc = vs->Properties.lc; - - #ifdef _LZMA_OUT_READ - - UInt32 Range = vs->Range; - UInt32 Code = vs->Code; - #ifdef _LZMA_IN_CB - const Byte *Buffer = vs->Buffer; - const Byte *BufferLim = vs->BufferLim; - #else - const Byte *Buffer = inStream; - const Byte *BufferLim = inStream + inSize; - #endif - int state = vs->State; - UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3]; - int len = vs->RemainLen; - UInt32 globalPos = vs->GlobalPos; - UInt32 distanceLimit = vs->DistanceLimit; - - Byte *dictionary = vs->Dictionary; - UInt32 dictionarySize = vs->Properties.DictionarySize; - UInt32 dictionaryPos = vs->DictionaryPos; - - Byte tempDictionary[4]; - - #ifndef _LZMA_IN_CB - *inSizeProcessed = 0; - #endif - *outSizeProcessed = 0; - if (len == kLzmaStreamWasFinishedId) - return LZMA_RESULT_OK; - - if (dictionarySize == 0) - { - dictionary = tempDictionary; - dictionarySize = 1; - tempDictionary[0] = vs->TempDictionary[0]; - } - - if (len == kLzmaNeedInitId) - { - { - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); - UInt32 i; - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - rep0 = rep1 = rep2 = rep3 = 1; - state = 0; - globalPos = 0; - distanceLimit = 0; - dictionaryPos = 0; - dictionary[dictionarySize - 1] = 0; - #ifdef _LZMA_IN_CB - RC_INIT; - #else - RC_INIT(inStream, inSize); - #endif - } - len = 0; - } - while(len != 0 && nowPos < outSize) - { - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos]; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - len--; - } - if (dictionaryPos == 0) - previousByte = dictionary[dictionarySize - 1]; - else - previousByte = dictionary[dictionaryPos - 1]; - - #else /* if !_LZMA_OUT_READ */ - - int state = 0; - UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1; - int len = 0; - const Byte *Buffer; - const Byte *BufferLim; - UInt32 Range; - UInt32 Code; - - #ifndef _LZMA_IN_CB - *inSizeProcessed = 0; - #endif - *outSizeProcessed = 0; - - { - UInt32 i; - UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + vs->Properties.lp)); - for (i = 0; i < numProbs; i++) - p[i] = kBitModelTotal >> 1; - } - - #ifdef _LZMA_IN_CB - RC_INIT; - #else - RC_INIT(inStream, inSize); - #endif - - #endif /* _LZMA_OUT_READ */ - - while(nowPos < outSize) - { - CProb *prob; - UInt32 bound; - int posState = (int)( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & posStateMask); - - prob = p + IsMatch + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - int symbol = 1; - UpdateBit0(prob) - prob = p + Literal + (LZMA_LIT_SIZE * - ((( - (nowPos - #ifdef _LZMA_OUT_READ - + globalPos - #endif - ) - & literalPosMask) << lc) + (previousByte >> (8 - lc)))); - - if (state >= kNumLitStates) - { - int matchByte; - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - matchByte = dictionary[pos]; - #else - matchByte = outStream[nowPos - rep0]; - #endif - do - { - int bit; - CProb *probLit; - matchByte <<= 1; - bit = (matchByte & 0x100); - probLit = prob + 0x100 + bit + symbol; - RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break) - } - while (symbol < 0x100); - } - while (symbol < 0x100) - { - CProb *probLit = prob + symbol; - RC_GET_BIT(probLit, symbol) - } - previousByte = (Byte)symbol; - - outStream[nowPos++] = previousByte; - #ifdef _LZMA_OUT_READ - if (distanceLimit < dictionarySize) - distanceLimit++; - - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #endif - if (state < 4) state = 0; - else if (state < 10) state -= 3; - else state -= 6; - } - else - { - UpdateBit1(prob); - prob = p + IsRep + state; - IfBit0(prob) - { - UpdateBit0(prob); - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - state = state < kNumLitStates ? 0 : 3; - prob = p + LenCoder; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG0 + state; - IfBit0(prob) - { - UpdateBit0(prob); - prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState; - IfBit0(prob) - { - #ifdef _LZMA_OUT_READ - UInt32 pos; - #endif - UpdateBit0(prob); - - #ifdef _LZMA_OUT_READ - if (distanceLimit == 0) - #else - if (nowPos == 0) - #endif - return LZMA_RESULT_DATA_ERROR; - - state = state < kNumLitStates ? 9 : 11; - #ifdef _LZMA_OUT_READ - pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - outStream[nowPos++] = previousByte; - #ifdef _LZMA_OUT_READ - if (distanceLimit < dictionarySize) - distanceLimit++; - #endif - - continue; - } - else - { - UpdateBit1(prob); - } - } - else - { - UInt32 distance; - UpdateBit1(prob); - prob = p + IsRepG1 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep1; - } - else - { - UpdateBit1(prob); - prob = p + IsRepG2 + state; - IfBit0(prob) - { - UpdateBit0(prob); - distance = rep2; - } - else - { - UpdateBit1(prob); - distance = rep3; - rep3 = rep2; - } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - state = state < kNumLitStates ? 8 : 11; - prob = p + RepLenCoder; - } - { - int numBits, offset; - CProb *probLen = prob + LenChoice; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenLow + (posState << kLenNumLowBits); - offset = 0; - numBits = kLenNumLowBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenChoice2; - IfBit0(probLen) - { - UpdateBit0(probLen); - probLen = prob + LenMid + (posState << kLenNumMidBits); - offset = kLenNumLowSymbols; - numBits = kLenNumMidBits; - } - else - { - UpdateBit1(probLen); - probLen = prob + LenHigh; - offset = kLenNumLowSymbols + kLenNumMidSymbols; - numBits = kLenNumHighBits; - } - } - RangeDecoderBitTreeDecode(probLen, numBits, len); - len += offset; - } - - if (state < 4) - { - int posSlot; - state += kNumLitStates; - prob = p + PosSlot + - ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << - kNumPosSlotBits); - RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot); - if (posSlot >= kStartPosModelIndex) - { - int numDirectBits = ((posSlot >> 1) - 1); - rep0 = (2 | ((UInt32)posSlot & 1)); - if (posSlot < kEndPosModelIndex) - { - rep0 <<= numDirectBits; - prob = p + SpecPos + rep0 - posSlot - 1; - } - else - { - numDirectBits -= kNumAlignBits; - do - { - RC_NORMALIZE - Range >>= 1; - rep0 <<= 1; - if (Code >= Range) - { - Code -= Range; - rep0 |= 1; - } - } - while (--numDirectBits != 0); - prob = p + Align; - rep0 <<= kNumAlignBits; - numDirectBits = kNumAlignBits; - } - { - int i = 1; - int mi = 1; - do - { - CProb *prob3 = prob + mi; - RC_GET_BIT2(prob3, mi, ; , rep0 |= i); - i <<= 1; - } - while(--numDirectBits != 0); - } - } - else - rep0 = posSlot; - if (++rep0 == (UInt32)(0)) - { - /* it's for stream version */ - len = kLzmaStreamWasFinishedId; - break; - } - } - - len += kMatchMinLen; - #ifdef _LZMA_OUT_READ - if (rep0 > distanceLimit) - #else - if (rep0 > nowPos) - #endif - return LZMA_RESULT_DATA_ERROR; - - #ifdef _LZMA_OUT_READ - if (dictionarySize - distanceLimit > (UInt32)len) - distanceLimit += len; - else - distanceLimit = dictionarySize; - #endif - - do - { - #ifdef _LZMA_OUT_READ - UInt32 pos = dictionaryPos - rep0; - if (pos >= dictionarySize) - pos += dictionarySize; - previousByte = dictionary[pos]; - dictionary[dictionaryPos] = previousByte; - if (++dictionaryPos == dictionarySize) - dictionaryPos = 0; - #else - previousByte = outStream[nowPos - rep0]; - #endif - len--; - outStream[nowPos++] = previousByte; - } - while(len != 0 && nowPos < outSize); - } - } - RC_NORMALIZE; - - #ifdef _LZMA_OUT_READ - vs->Range = Range; - vs->Code = Code; - vs->DictionaryPos = dictionaryPos; - vs->GlobalPos = globalPos + (UInt32)nowPos; - vs->DistanceLimit = distanceLimit; - vs->Reps[0] = rep0; - vs->Reps[1] = rep1; - vs->Reps[2] = rep2; - vs->Reps[3] = rep3; - vs->State = state; - vs->RemainLen = len; - vs->TempDictionary[0] = tempDictionary[0]; - #endif - - #ifdef _LZMA_IN_CB - vs->Buffer = Buffer; - vs->BufferLim = BufferLim; - #else - *inSizeProcessed = (SizeT)(Buffer - inStream); - #endif - *outSizeProcessed = nowPos; - return LZMA_RESULT_OK; -} diff --git a/source/sz/LzmaDecode.h b/source/sz/LzmaDecode.h deleted file mode 100644 index 8382fa85..00000000 --- a/source/sz/LzmaDecode.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - LzmaDecode.h - LZMA Decoder interface - - LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) - http://www.7-zip.org/ - - LZMA SDK is licensed under two licenses: - 1) GNU Lesser General Public License (GNU LGPL) - 2) Common Public License (CPL) - It means that you can select one of these two licenses and - follow rules of that license. - - SPECIAL EXCEPTION: - Igor Pavlov, as the author of this code, expressly permits you to - statically or dynamically link your code (or bind by name) to the - interfaces of this file without subjecting your linked code to the - terms of the CPL or GNU LGPL. Any modifications or additions - to this file, however, are subject to the LGPL or CPL terms. -*/ - -#ifndef __LZMADECODE_H -#define __LZMADECODE_H - -#include "LzmaTypes.h" - -/* #define _LZMA_IN_CB */ -/* Use callback for input data */ - -/* #define _LZMA_OUT_READ */ -/* Use read function for output data */ - -/* #define _LZMA_PROB32 */ -/* It can increase speed on some 32-bit CPUs, - but memory usage will be doubled in that case */ - -/* #define _LZMA_LOC_OPT */ -/* Enable local speed optimizations inside code */ - -#ifdef _LZMA_PROB32 -#define CProb UInt32 -#else -#define CProb UInt16 -#endif - -#define LZMA_RESULT_OK 0 -#define LZMA_RESULT_DATA_ERROR 1 - -#ifdef _LZMA_IN_CB -typedef struct _ILzmaInCallback -{ - int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize); -} ILzmaInCallback; -#endif - -#define LZMA_BASE_SIZE 1846 -#define LZMA_LIT_SIZE 768 - -#define LZMA_PROPERTIES_SIZE 5 - -typedef struct _CLzmaProperties -{ - int lc; - int lp; - int pb; - #ifdef _LZMA_OUT_READ - UInt32 DictionarySize; - #endif -}CLzmaProperties; - -int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size); - -#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp))) - -#define kLzmaNeedInitId (-2) - -typedef struct _CLzmaDecoderState -{ - CLzmaProperties Properties; - CProb *Probs; - - #ifdef _LZMA_IN_CB - const unsigned char *Buffer; - const unsigned char *BufferLim; - #endif - - #ifdef _LZMA_OUT_READ - unsigned char *Dictionary; - UInt32 Range; - UInt32 Code; - UInt32 DictionaryPos; - UInt32 GlobalPos; - UInt32 DistanceLimit; - UInt32 Reps[4]; - int State; - int RemainLen; - unsigned char TempDictionary[4]; - #endif -} CLzmaDecoderState; - -#ifdef _LZMA_OUT_READ -#define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; } -#endif - -int LzmaDecode(CLzmaDecoderState *vs, - #ifdef _LZMA_IN_CB - ILzmaInCallback *inCallback, - #else - const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, - #endif - unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed); - -#endif diff --git a/source/sz/LzmaTypes.h b/source/sz/LzmaTypes.h deleted file mode 100644 index 4a1f7db4..00000000 --- a/source/sz/LzmaTypes.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -LzmaTypes.h - -Types for LZMA Decoder - -This file written and distributed to public domain by Igor Pavlov. -This file is part of LZMA SDK 4.40 (2006-05-01) -*/ - -#ifndef __LZMATYPES_H -#define __LZMATYPES_H - -#ifndef _7ZIP_BYTE_DEFINED -#define _7ZIP_BYTE_DEFINED -typedef unsigned char Byte; -#endif - -#ifndef _7ZIP_UINT16_DEFINED -#define _7ZIP_UINT16_DEFINED -typedef unsigned short UInt16; -#endif - -#ifndef _7ZIP_UINT32_DEFINED -#define _7ZIP_UINT32_DEFINED -#ifdef _LZMA_UINT32_IS_ULONG -typedef unsigned long UInt32; -#else -typedef unsigned int UInt32; -#endif -#endif - -/* #define _LZMA_SYSTEM_SIZE_T */ -/* Use system's size_t. You can use it to enable 64-bit sizes supporting */ - -#ifndef _7ZIP_SIZET_DEFINED -#define _7ZIP_SIZET_DEFINED -#ifdef _LZMA_SYSTEM_SIZE_T -#include -typedef size_t SizeT; -#else -typedef UInt32 SizeT; -#endif -#endif - -#endif diff --git a/source/vba/CheatSearch.cpp b/source/vba/CheatSearch.cpp index c5280b16..da460de4 100644 --- a/source/vba/CheatSearch.cpp +++ b/source/vba/CheatSearch.cpp @@ -1,329 +1,362 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include - -#include "CheatSearch.h" - -CheatSearchBlock cheatSearchBlocks[4]; - -CheatSearchData cheatSearchData = { - 0, - cheatSearchBlocks -}; - -static bool cheatSearchEQ(u32 a, u32 b) -{ - return a == b; -} - -static bool cheatSearchNE(u32 a, u32 b) -{ - return a != b; -} - -static bool cheatSearchLT(u32 a, u32 b) -{ - return a < b; -} - -static bool cheatSearchLE(u32 a, u32 b) -{ - return a <= b; -} - -static bool cheatSearchGT(u32 a, u32 b) -{ - return a > b; -} - -static bool cheatSearchGE(u32 a, u32 b) -{ - return a >= b; -} - -static bool cheatSearchSignedEQ(s32 a, s32 b) -{ - return a == b; -} - -static bool cheatSearchSignedNE(s32 a, s32 b) -{ - return a != b; -} - -static bool cheatSearchSignedLT(s32 a, s32 b) -{ - return a < b; -} - -static bool cheatSearchSignedLE(s32 a, s32 b) -{ - return a <= b; -} - -static bool cheatSearchSignedGT(s32 a, s32 b) -{ - return a > b; -} - -static bool cheatSearchSignedGE(s32 a, s32 b) -{ - return a >= b; -} - -static bool (*cheatSearchFunc[])(u32,u32) = { - cheatSearchEQ, - cheatSearchNE, - cheatSearchLT, - cheatSearchLE, - cheatSearchGT, - cheatSearchGE -}; - -static bool (*cheatSearchSignedFunc[])(s32,s32) = { - cheatSearchSignedEQ, - cheatSearchSignedNE, - cheatSearchSignedLT, - cheatSearchSignedLE, - cheatSearchSignedGT, - cheatSearchSignedGE -}; - -void cheatSearchCleanup(CheatSearchData *cs) -{ - int count = cs->count; - - for(int i = 0; i < count; i++) { - free(cs->blocks[i].saved); - free(cs->blocks[i].bits); - } - cs->count = 0; -} - -void cheatSearchStart(const CheatSearchData *cs) -{ - int count = cs->count; - - for(int i = 0; i < count; i++) { - CheatSearchBlock *block = &cs->blocks[i]; - - memset(block->bits, 0xff, block->size >> 3); - memcpy(block->saved, block->data, block->size); - } -} - -s32 cheatSearchSignedRead(u8 *data, int off, int size) -{ - u32 res = data[off++]; - - switch(size) { - case BITS_8: - res <<= 24; - return ((s32)res) >> 24; - case BITS_16: - res |= ((u32)data[off++])<<8; - res <<= 16; - return ((s32)res) >> 16; - case BITS_32: - res |= ((u32)data[off++])<<8; - res |= ((u32)data[off++])<<16; - res |= ((u32)data[off++])<<24; - return (s32)res; - } - return (s32)res; -} - -u32 cheatSearchRead(u8 *data, int off, int size) -{ - u32 res = data[off++]; - if(size == BITS_16) - res |= ((u32)data[off++])<<8; - else if(size == BITS_32) { - res |= ((u32)data[off++])<<8; - res |= ((u32)data[off++])<<16; - res |= ((u32)data[off++])<<24; - } - return res; -} - -void cheatSearch(const CheatSearchData *cs, int compare, int size, - bool isSigned) -{ - if(compare < 0 || compare > SEARCH_GE) - return; - int inc = 1; - if(size == BITS_16) - inc = 2; - else if(size == BITS_32) - inc = 4; - - if(isSigned) { - bool (*func)(s32,s32) = cheatSearchSignedFunc[compare]; - - for(int i = 0; i < cs->count; i++) { - CheatSearchBlock *block = &cs->blocks[i]; - int size2 = block->size; - u8 *bits = block->bits; - u8 *data = block->data; - u8 *saved = block->saved; - - for(int j = 0; j < size2; j += inc) { - if(IS_BIT_SET(bits, j)) { - s32 a = cheatSearchSignedRead(data, j, size); - s32 b = cheatSearchSignedRead(saved,j, size); - - if(!func(a, b)) { - CLEAR_BIT(bits, j); - if(size == BITS_16) - CLEAR_BIT(bits, j+1); - if(size == BITS_32) { - CLEAR_BIT(bits, j+2); - CLEAR_BIT(bits, j+3); - } - } - } - } - } - } else { - bool (*func)(u32,u32) = cheatSearchFunc[compare]; - - for(int i = 0; i < cs->count; i++) { - CheatSearchBlock *block = &cs->blocks[i]; - int size2 = block->size; - u8 *bits = block->bits; - u8 *data = block->data; - u8 *saved = block->saved; - - for(int j = 0; j < size2; j += inc) { - if(IS_BIT_SET(bits, j)) { - u32 a = cheatSearchRead(data, j, size); - u32 b = cheatSearchRead(saved,j, size); - - if(!func(a, b)) { - CLEAR_BIT(bits, j); - if(size == BITS_16) - CLEAR_BIT(bits, j+1); - if(size == BITS_32) { - CLEAR_BIT(bits, j+2); - CLEAR_BIT(bits, j+3); - } - } - } - } - } - } -} - -void cheatSearchValue(const CheatSearchData *cs, int compare, int size, - bool isSigned, u32 value) -{ - if(compare < 0 || compare > SEARCH_GE) - return; - int inc = 1; - if(size == BITS_16) - inc = 2; - else if(size == BITS_32) - inc = 4; - - if(isSigned) { - bool (*func)(s32,s32) = cheatSearchSignedFunc[compare]; - - for(int i = 0; i < cs->count; i++) { - CheatSearchBlock *block = &cs->blocks[i]; - int size2 = block->size; - u8 *bits = block->bits; - u8 *data = block->data; - - for(int j = 0; j < size2; j += inc) { - if(IS_BIT_SET(bits, j)) { - s32 a = cheatSearchSignedRead(data, j, size); - s32 b = (s32)value; - - if(!func(a, b)) { - CLEAR_BIT(bits, j); - if(size == BITS_16) - CLEAR_BIT(bits, j+1); - if(size == BITS_32) { - CLEAR_BIT(bits, j+2); - CLEAR_BIT(bits, j+3); - } - } - } - } - } - } else { - bool (*func)(u32,u32) = cheatSearchFunc[compare]; - - for(int i = 0; i < cs->count; i++) { - CheatSearchBlock *block = &cs->blocks[i]; - int size2 = block->size; - u8 *bits = block->bits; - u8 *data = block->data; - - for(int j = 0; j < size2; j += inc) { - if(IS_BIT_SET(bits, j)) { - u32 a = cheatSearchRead(data, j, size); - - if(!func(a, value)) { - CLEAR_BIT(bits, j); - if(size == BITS_16) - CLEAR_BIT(bits, j+1); - if(size == BITS_32) { - CLEAR_BIT(bits, j+2); - CLEAR_BIT(bits, j+3); - } - } - } - } - } - } -} - -int cheatSearchGetCount(const CheatSearchData *cs, int size) -{ - int res = 0; - int inc = 1; - if(size == BITS_16) - inc = 2; - else if(size == BITS_32) - inc = 4; - - for(int i = 0; i < cs->count; i++) { - CheatSearchBlock *block = &cs->blocks[i]; - - int size2 = block->size; - u8 *bits = block->bits; - for(int j = 0; j < size2; j += inc) { - if(IS_BIT_SET(bits, j)) - res++; - } - } - return res; -} - -void cheatSearchUpdateValues(const CheatSearchData *cs) -{ - for(int i = 0; i < cs->count; i++) { - CheatSearchBlock *block = &cs->blocks[i]; - - memcpy(block->saved, block->data, block->size); - } -} - +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include +#include + +#include "CheatSearch.h" + +CheatSearchBlock cheatSearchBlocks[4]; + +CheatSearchData cheatSearchData = { + 0, + cheatSearchBlocks + }; + +static bool cheatSearchEQ(u32 a, u32 b) +{ + return a == b; +} + +static bool cheatSearchNE(u32 a, u32 b) +{ + return a != b; +} + +static bool cheatSearchLT(u32 a, u32 b) +{ + return a < b; +} + +static bool cheatSearchLE(u32 a, u32 b) +{ + return a <= b; +} + +static bool cheatSearchGT(u32 a, u32 b) +{ + return a > b; +} + +static bool cheatSearchGE(u32 a, u32 b) +{ + return a >= b; +} + +static bool cheatSearchSignedEQ(s32 a, s32 b) +{ + return a == b; +} + +static bool cheatSearchSignedNE(s32 a, s32 b) +{ + return a != b; +} + +static bool cheatSearchSignedLT(s32 a, s32 b) +{ + return a < b; +} + +static bool cheatSearchSignedLE(s32 a, s32 b) +{ + return a <= b; +} + +static bool cheatSearchSignedGT(s32 a, s32 b) +{ + return a > b; +} + +static bool cheatSearchSignedGE(s32 a, s32 b) +{ + return a >= b; +} + +static bool (*cheatSearchFunc[])(u32,u32) = { + cheatSearchEQ, + cheatSearchNE, + cheatSearchLT, + cheatSearchLE, + cheatSearchGT, + cheatSearchGE + }; + +static bool (*cheatSearchSignedFunc[])(s32,s32) = { + cheatSearchSignedEQ, + cheatSearchSignedNE, + cheatSearchSignedLT, + cheatSearchSignedLE, + cheatSearchSignedGT, + cheatSearchSignedGE + }; + +void cheatSearchCleanup(CheatSearchData *cs) +{ + int count = cs->count; + + for(int i = 0; i < count; i++) + { + free(cs->blocks[i].saved); + free(cs->blocks[i].bits); + } + cs->count = 0; +} + +void cheatSearchStart(const CheatSearchData *cs) +{ + int count = cs->count; + + for(int i = 0; i < count; i++) + { + CheatSearchBlock *block = &cs->blocks[i]; + + memset(block->bits, 0xff, block->size >> 3); + memcpy(block->saved, block->data, block->size); + } +} + +s32 cheatSearchSignedRead(u8 *data, int off, int size) +{ + u32 res = data[off++]; + + switch(size) + { + case BITS_8: + res <<= 24; + return ((s32)res) >> 24; + case BITS_16: + res |= ((u32)data[off++])<<8; + res <<= 16; + return ((s32)res) >> 16; + case BITS_32: + res |= ((u32)data[off++])<<8; + res |= ((u32)data[off++])<<16; + res |= ((u32)data[off++])<<24; + return (s32)res; + } + return (s32)res; +} + +u32 cheatSearchRead(u8 *data, int off, int size) +{ + u32 res = data[off++]; + if(size == BITS_16) + res |= ((u32)data[off++])<<8; + else if(size == BITS_32) + { + res |= ((u32)data[off++])<<8; + res |= ((u32)data[off++])<<16; + res |= ((u32)data[off++])<<24; + } + return res; +} + +void cheatSearch(const CheatSearchData *cs, int compare, int size, + bool isSigned) +{ + if(compare < 0 || compare > SEARCH_GE) + return; + int inc = 1; + if(size == BITS_16) + inc = 2; + else if(size == BITS_32) + inc = 4; + + if(isSigned) + { + bool (*func)(s32,s32) = cheatSearchSignedFunc[compare]; + + for(int i = 0; i < cs->count; i++) + { + CheatSearchBlock *block = &cs->blocks[i]; + int size2 = block->size; + u8 *bits = block->bits; + u8 *data = block->data; + u8 *saved = block->saved; + + for(int j = 0; j < size2; j += inc) + { + if(IS_BIT_SET(bits, j)) + { + s32 a = cheatSearchSignedRead(data, j, size); + s32 b = cheatSearchSignedRead(saved,j, size); + + if(!func(a, b)) + { + CLEAR_BIT(bits, j); + if(size == BITS_16) + CLEAR_BIT(bits, j+1); + if(size == BITS_32) + { + CLEAR_BIT(bits, j+2); + CLEAR_BIT(bits, j+3); + } + } + } + } + } + } + else + { + bool (*func)(u32,u32) = cheatSearchFunc[compare]; + + for(int i = 0; i < cs->count; i++) + { + CheatSearchBlock *block = &cs->blocks[i]; + int size2 = block->size; + u8 *bits = block->bits; + u8 *data = block->data; + u8 *saved = block->saved; + + for(int j = 0; j < size2; j += inc) + { + if(IS_BIT_SET(bits, j)) + { + u32 a = cheatSearchRead(data, j, size); + u32 b = cheatSearchRead(saved,j, size); + + if(!func(a, b)) + { + CLEAR_BIT(bits, j); + if(size == BITS_16) + CLEAR_BIT(bits, j+1); + if(size == BITS_32) + { + CLEAR_BIT(bits, j+2); + CLEAR_BIT(bits, j+3); + } + } + } + } + } + } +} + +void cheatSearchValue(const CheatSearchData *cs, int compare, int size, + bool isSigned, u32 value) +{ + if(compare < 0 || compare > SEARCH_GE) + return; + int inc = 1; + if(size == BITS_16) + inc = 2; + else if(size == BITS_32) + inc = 4; + + if(isSigned) + { + bool (*func)(s32,s32) = cheatSearchSignedFunc[compare]; + + for(int i = 0; i < cs->count; i++) + { + CheatSearchBlock *block = &cs->blocks[i]; + int size2 = block->size; + u8 *bits = block->bits; + u8 *data = block->data; + + for(int j = 0; j < size2; j += inc) + { + if(IS_BIT_SET(bits, j)) + { + s32 a = cheatSearchSignedRead(data, j, size); + s32 b = (s32)value; + + if(!func(a, b)) + { + CLEAR_BIT(bits, j); + if(size == BITS_16) + CLEAR_BIT(bits, j+1); + if(size == BITS_32) + { + CLEAR_BIT(bits, j+2); + CLEAR_BIT(bits, j+3); + } + } + } + } + } + } + else + { + bool (*func)(u32,u32) = cheatSearchFunc[compare]; + + for(int i = 0; i < cs->count; i++) + { + CheatSearchBlock *block = &cs->blocks[i]; + int size2 = block->size; + u8 *bits = block->bits; + u8 *data = block->data; + + for(int j = 0; j < size2; j += inc) + { + if(IS_BIT_SET(bits, j)) + { + u32 a = cheatSearchRead(data, j, size); + + if(!func(a, value)) + { + CLEAR_BIT(bits, j); + if(size == BITS_16) + CLEAR_BIT(bits, j+1); + if(size == BITS_32) + { + CLEAR_BIT(bits, j+2); + CLEAR_BIT(bits, j+3); + } + } + } + } + } + } +} + +int cheatSearchGetCount(const CheatSearchData *cs, int size) +{ + int res = 0; + int inc = 1; + if(size == BITS_16) + inc = 2; + else if(size == BITS_32) + inc = 4; + + for(int i = 0; i < cs->count; i++) + { + CheatSearchBlock *block = &cs->blocks[i]; + + int size2 = block->size; + u8 *bits = block->bits; + for(int j = 0; j < size2; j += inc) + { + if(IS_BIT_SET(bits, j)) + res++; + } + } + return res; +} + +void cheatSearchUpdateValues(const CheatSearchData *cs) +{ + for(int i = 0; i < cs->count; i++) + { + CheatSearchBlock *block = &cs->blocks[i]; + + memcpy(block->saved, block->data, block->size); + } +} + diff --git a/source/vba/CheatSearch.h b/source/vba/CheatSearch.h index 43a68c47..5b833cb3 100644 --- a/source/vba/CheatSearch.h +++ b/source/vba/CheatSearch.h @@ -1,73 +1,75 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_CHEATSEARCH_H -#define VBA_CHEATSEARCH_H - -#include "System.h" - -struct CheatSearchBlock { - int size; - u32 offset; - u8 *bits; - u8 *data; - u8 *saved; -}; - -struct CheatSearchData { - int count; - CheatSearchBlock *blocks; -}; - -enum { - SEARCH_EQ, - SEARCH_NE, - SEARCH_LT, - SEARCH_LE, - SEARCH_GT, - SEARCH_GE -}; - -enum { - BITS_8, - BITS_16, - BITS_32 -}; - -#define SET_BIT(bits,off) \ - (bits)[(off) >> 3] |= (1 << ((off) & 7)) - -#define CLEAR_BIT(bits, off) \ - (bits)[(off) >> 3] &= ~(1 << ((off) & 7)) - -#define IS_BIT_SET(bits, off) \ - (bits)[(off) >> 3] & (1 << ((off) & 7)) - -extern CheatSearchData cheatSearchData; -extern void cheatSearchCleanup(CheatSearchData *cs); -extern void cheatSearchStart(const CheatSearchData *cs); -extern void cheatSearch(const CheatSearchData *cs, int compare, int size, - bool isSigned); -extern void cheatSearchValue(const CheatSearchData *cs, int compare, int size, - bool isSigned, u32 value); -extern int cheatSearchGetCount(const CheatSearchData *cs, int size); -extern void cheatSearchUpdateValues(const CheatSearchData *cs); -extern s32 cheatSearchSignedRead(u8 *data, int off, int size); -extern u32 cheatSearchRead(u8 *data, int off, int size); -#endif +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_CHEATSEARCH_H +#define VBA_CHEATSEARCH_H + +#include "System.h" + +struct CheatSearchBlock + { + int size; + u32 offset; + u8 *bits; + u8 *data; + u8 *saved; + }; + +struct CheatSearchData + { + int count; + CheatSearchBlock *blocks; + }; + +enum { + SEARCH_EQ, + SEARCH_NE, + SEARCH_LT, + SEARCH_LE, + SEARCH_GT, + SEARCH_GE +}; + +enum { + BITS_8, + BITS_16, + BITS_32 +}; + +#define SET_BIT(bits,off) \ + (bits)[(off) >> 3] |= (1 << ((off) & 7)) + +#define CLEAR_BIT(bits, off) \ + (bits)[(off) >> 3] &= ~(1 << ((off) & 7)) + +#define IS_BIT_SET(bits, off) \ + (bits)[(off) >> 3] & (1 << ((off) & 7)) + +extern CheatSearchData cheatSearchData; +extern void cheatSearchCleanup(CheatSearchData *cs); +extern void cheatSearchStart(const CheatSearchData *cs); +extern void cheatSearch(const CheatSearchData *cs, int compare, int size, + bool isSigned); +extern void cheatSearchValue(const CheatSearchData *cs, int compare, int size, + bool isSigned, u32 value); +extern int cheatSearchGetCount(const CheatSearchData *cs, int size); +extern void cheatSearchUpdateValues(const CheatSearchData *cs); +extern s32 cheatSearchSignedRead(u8 *data, int off, int size); +extern u32 cheatSearchRead(u8 *data, int off, int size); +#endif diff --git a/source/vba/Cheats.cpp b/source/vba/Cheats.cpp index 6947f599..54df425e 100644 --- a/source/vba/Cheats.cpp +++ b/source/vba/Cheats.cpp @@ -1,2896 +1,1836 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005-2006 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include -#include - -#include "agb/GBA.h" -#include "agb/GBAinline.h" -#include "Cheats.h" -#include "Globals.h" -#include "NLS.h" -#include "Util.h" - -/** - * Gameshark code types: (based on AR v1.0) - * - * NNNNNNNN 001DC0DE - ID code for the game (game 4 character name) from ROM - * DEADFACE XXXXXXXX - changes decryption seeds // Not supported by VBA. - * 0AAAAAAA 000000YY - 8-bit constant write - * 1AAAAAAA 0000YYYY - 16-bit constant write - * 2AAAAAAA YYYYYYYY - 32-bit constant write - * 30XXAAAA YYYYYYYY - 32bit Group Write, 8/16/32bit Sub/Add (depending on the XX value). - * 6AAAAAAA Z000YYYY - 16-bit ROM Patch (address >> 1). Z selects the Rom Patching register. - * - AR v1/2 hardware only supports Z=0. - * - AR v3 hardware should support Z=0,1,2 or 3. - * 8A1AAAAA 000000YY - 8-bit button write - * 8A2AAAAA 0000YYYY - 16-bit button write - * 8A4AAAAA YYYYYYYY - 32-bit button write // BUGGY ! Only writes 00000000 on the AR v1.0. - * 80F00000 0000YYYY - button slow motion - * DAAAAAAA 00Z0YYYY - Z = 0 : if 16-bit value at address != YYYY skip next line - * - Z = 1 : if 16-bit value at address == YYYY skip next line - * - Z = 2 : if 16-bit value at address > YYYY (Unsigned) skip next line - * - Z = 3 : if 16-bit value at address < YYYY (Unsigned) skip next line - * E0CCYYYY ZAAAAAAA - Z = 0 : if 16-bit value at address != YYYY skip CC lines - * - Z = 1 : if 16-bit value at address == YYYY skip CC lines - * - Z = 2 : if 16-bit value at address > YYYY (Unsigned) skip CC lines - * - Z = 3 : if 16-bit value at address < YYYY (Unsigned) skip CC lines - * FAAAAAAA 0000YYYY - Master code function - * - * - * - * CodeBreaker codes types: (based on the CBA clone "Cheatcode S" v1.1) - * - * 0000AAAA 000Y - Game CRC (Y are flags: 8 - CRC, 2 - DI) - * 1AAAAAAA YYYY - Master Code function (store address at ((YYYY << 0x16) - * + 0x08000100)) - * 2AAAAAAA YYYY - 16-bit or - * 3AAAAAAA YYYY - 8-bit constant write - * 4AAAAAAA YYYY - Slide code - * XXXXCCCC IIII (C is count and I is address increment, X is value incr.) - * 5AAAAAAA CCCC - Super code (Write bytes to address, 2*CCCC is count) - * BBBBBBBB BBBB - * 6AAAAAAA YYYY - 16-bit and - * 7AAAAAAA YYYY - if address contains 16-bit value enable next code - * 8AAAAAAA YYYY - 16-bit constant write - * 9AAAAAAA YYYY - change decryption (when first code only?) - * AAAAAAAA YYYY - if address does not contain 16-bit value enable next code - * BAAAAAAA YYYY - if 16-bit value at address <= YYYY skip next code - * CAAAAAAA YYYY - if 16-bit value at address >= YYYY skip next code - * D00000X0 YYYY - if button keys ... enable next code (else skip next code) - * EAAAAAAA YYYY - increase 16/32bit value stored in address - * FAAAAAAA YYYY - if 16-bit value at address AND YYYY = 0 then skip next code - **/ - -#define UNKNOWN_CODE -1 -#define INT_8_BIT_WRITE 0 -#define INT_16_BIT_WRITE 1 -#define INT_32_BIT_WRITE 2 -#define GSA_16_BIT_ROM_PATCH 3 -#define GSA_8_BIT_GS_WRITE 4 -#define GSA_16_BIT_GS_WRITE 5 -#define GSA_32_BIT_GS_WRITE 6 -#define CBA_IF_KEYS_PRESSED 7 -#define CBA_IF_TRUE 8 -#define CBA_SLIDE_CODE 9 -#define CBA_IF_FALSE 10 -#define CBA_AND 11 -#define GSA_8_BIT_GS_WRITE2 12 -#define GSA_16_BIT_GS_WRITE2 13 -#define GSA_32_BIT_GS_WRITE2 14 -#define GSA_16_BIT_ROM_PATCH2C 15 -#define GSA_8_BIT_SLIDE 16 -#define GSA_16_BIT_SLIDE 17 -#define GSA_32_BIT_SLIDE 18 -#define GSA_8_BIT_IF_TRUE 19 -#define GSA_32_BIT_IF_TRUE 20 -#define GSA_8_BIT_IF_FALSE 21 -#define GSA_32_BIT_IF_FALSE 22 -#define GSA_8_BIT_FILL 23 -#define GSA_16_BIT_FILL 24 -#define GSA_8_BIT_IF_TRUE2 25 -#define GSA_16_BIT_IF_TRUE2 26 -#define GSA_32_BIT_IF_TRUE2 27 -#define GSA_8_BIT_IF_FALSE2 28 -#define GSA_16_BIT_IF_FALSE2 29 -#define GSA_32_BIT_IF_FALSE2 30 -#define GSA_SLOWDOWN 31 -#define CBA_ADD 32 -#define CBA_OR 33 -#define CBA_LT 34 -#define CBA_GT 35 -#define CBA_SUPER 36 -#define GSA_8_BIT_POINTER 37 -#define GSA_16_BIT_POINTER 38 -#define GSA_32_BIT_POINTER 39 -#define GSA_8_BIT_ADD 40 -#define GSA_16_BIT_ADD 41 -#define GSA_32_BIT_ADD 42 -#define GSA_8_BIT_IF_LOWER_U 43 -#define GSA_16_BIT_IF_LOWER_U 44 -#define GSA_32_BIT_IF_LOWER_U 45 -#define GSA_8_BIT_IF_HIGHER_U 46 -#define GSA_16_BIT_IF_HIGHER_U 47 -#define GSA_32_BIT_IF_HIGHER_U 48 -#define GSA_8_BIT_IF_AND 49 -#define GSA_16_BIT_IF_AND 50 -#define GSA_32_BIT_IF_AND 51 -#define GSA_8_BIT_IF_LOWER_U2 52 -#define GSA_16_BIT_IF_LOWER_U2 53 -#define GSA_32_BIT_IF_LOWER_U2 54 -#define GSA_8_BIT_IF_HIGHER_U2 55 -#define GSA_16_BIT_IF_HIGHER_U2 56 -#define GSA_32_BIT_IF_HIGHER_U2 57 -#define GSA_8_BIT_IF_AND2 58 -#define GSA_16_BIT_IF_AND2 59 -#define GSA_32_BIT_IF_AND2 60 -#define GSA_ALWAYS 61 -#define GSA_ALWAYS2 62 -#define GSA_8_BIT_IF_LOWER_S 63 -#define GSA_16_BIT_IF_LOWER_S 64 -#define GSA_32_BIT_IF_LOWER_S 65 -#define GSA_8_BIT_IF_HIGHER_S 66 -#define GSA_16_BIT_IF_HIGHER_S 67 -#define GSA_32_BIT_IF_HIGHER_S 68 -#define GSA_8_BIT_IF_LOWER_S2 69 -#define GSA_16_BIT_IF_LOWER_S2 70 -#define GSA_32_BIT_IF_LOWER_S2 71 -#define GSA_8_BIT_IF_HIGHER_S2 72 -#define GSA_16_BIT_IF_HIGHER_S2 73 -#define GSA_32_BIT_IF_HIGHER_S2 74 -#define GSA_16_BIT_WRITE_IOREGS 75 -#define GSA_32_BIT_WRITE_IOREGS 76 -#define GSA_CODES_ON 77 -#define GSA_8_BIT_IF_TRUE3 78 -#define GSA_16_BIT_IF_TRUE3 79 -#define GSA_32_BIT_IF_TRUE3 80 -#define GSA_8_BIT_IF_FALSE3 81 -#define GSA_16_BIT_IF_FALSE3 82 -#define GSA_32_BIT_IF_FALSE3 83 -#define GSA_8_BIT_IF_LOWER_S3 84 -#define GSA_16_BIT_IF_LOWER_S3 85 -#define GSA_32_BIT_IF_LOWER_S3 86 -#define GSA_8_BIT_IF_HIGHER_S3 87 -#define GSA_16_BIT_IF_HIGHER_S3 88 -#define GSA_32_BIT_IF_HIGHER_S3 89 -#define GSA_8_BIT_IF_LOWER_U3 90 -#define GSA_16_BIT_IF_LOWER_U3 91 -#define GSA_32_BIT_IF_LOWER_U3 92 -#define GSA_8_BIT_IF_HIGHER_U3 93 -#define GSA_16_BIT_IF_HIGHER_U3 94 -#define GSA_32_BIT_IF_HIGHER_U3 95 -#define GSA_8_BIT_IF_AND3 96 -#define GSA_16_BIT_IF_AND3 97 -#define GSA_32_BIT_IF_AND3 98 -#define GSA_ALWAYS3 99 -#define GSA_16_BIT_ROM_PATCH2D 100 -#define GSA_16_BIT_ROM_PATCH2E 101 -#define GSA_16_BIT_ROM_PATCH2F 102 -#define GSA_GROUP_WRITE 103 -#define GSA_32_BIT_ADD2 104 -#define GSA_32_BIT_SUB2 105 -#define GSA_16_BIT_IF_LOWER_OR_EQ_U 106 -#define GSA_16_BIT_IF_HIGHER_OR_EQ_U 107 -#define GSA_16_BIT_MIF_TRUE 108 -#define GSA_16_BIT_MIF_FALSE 109 -#define GSA_16_BIT_MIF_LOWER_OR_EQ_U 110 -#define GSA_16_BIT_MIF_HIGHER_OR_EQ_U 111 -#define MASTER_CODE 112 -#define CHEATS_16_BIT_WRITE 114 -#define CHEATS_32_BIT_WRITE 115 - -CheatsData cheatsList[100]; -int cheatsNumber = 0; -u32 rompatch2addr [4]; -u16 rompatch2val [4]; -u16 rompatch2oldval [4]; - -u8 cheatsCBASeedBuffer[0x30]; -u32 cheatsCBASeed[4]; -u32 cheatsCBATemporaryValue = 0; -u16 cheatsCBATable[256]; -bool cheatsCBATableGenerated = false; -u16 super = 0; -extern u32 mastercode; - -u8 cheatsCBACurrentSeed[12] = { - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; - -u32 seeds_v1[4]; -u32 seeds_v3[4]; - -u32 seed_gen(u8 upper, u8 seed, u8 *deadtable1, u8 *deadtable2); - -//seed tables for AR v1 -u8 v1_deadtable1[256] = { - 0x31, 0x1C, 0x23, 0xE5, 0x89, 0x8E, 0xA1, 0x37, 0x74, 0x6D, 0x67, 0xFC, 0x1F, 0xC0, 0xB1, 0x94, - 0x3B, 0x05, 0x56, 0x86, 0x00, 0x24, 0xF0, 0x17, 0x72, 0xA2, 0x3D, 0x1B, 0xE3, 0x17, 0xC5, 0x0B, - 0xB9, 0xE2, 0xBD, 0x58, 0x71, 0x1B, 0x2C, 0xFF, 0xE4, 0xC9, 0x4C, 0x5E, 0xC9, 0x55, 0x33, 0x45, - 0x7C, 0x3F, 0xB2, 0x51, 0xFE, 0x10, 0x7E, 0x75, 0x3C, 0x90, 0x8D, 0xDA, 0x94, 0x38, 0xC3, 0xE9, - 0x95, 0xEA, 0xCE, 0xA6, 0x06, 0xE0, 0x4F, 0x3F, 0x2A, 0xE3, 0x3A, 0xE4, 0x43, 0xBD, 0x7F, 0xDA, - 0x55, 0xF0, 0xEA, 0xCB, 0x2C, 0xA8, 0x47, 0x61, 0xA0, 0xEF, 0xCB, 0x13, 0x18, 0x20, 0xAF, 0x3E, - 0x4D, 0x9E, 0x1E, 0x77, 0x51, 0xC5, 0x51, 0x20, 0xCF, 0x21, 0xF9, 0x39, 0x94, 0xDE, 0xDD, 0x79, - 0x4E, 0x80, 0xC4, 0x9D, 0x94, 0xD5, 0x95, 0x01, 0x27, 0x27, 0xBD, 0x6D, 0x78, 0xB5, 0xD1, 0x31, - 0x6A, 0x65, 0x74, 0x74, 0x58, 0xB3, 0x7C, 0xC9, 0x5A, 0xED, 0x50, 0x03, 0xC4, 0xA2, 0x94, 0x4B, - 0xF0, 0x58, 0x09, 0x6F, 0x3E, 0x7D, 0xAE, 0x7D, 0x58, 0xA0, 0x2C, 0x91, 0xBB, 0xE1, 0x70, 0xEB, - 0x73, 0xA6, 0x9A, 0x44, 0x25, 0x90, 0x16, 0x62, 0x53, 0xAE, 0x08, 0xEB, 0xDC, 0xF0, 0xEE, 0x77, - 0xC2, 0xDE, 0x81, 0xE8, 0x30, 0x89, 0xDB, 0xFE, 0xBC, 0xC2, 0xDF, 0x26, 0xE9, 0x8B, 0xD6, 0x93, - 0xF0, 0xCB, 0x56, 0x90, 0xC0, 0x46, 0x68, 0x15, 0x43, 0xCB, 0xE9, 0x98, 0xE3, 0xAF, 0x31, 0x25, - 0x4D, 0x7B, 0xF3, 0xB1, 0x74, 0xE2, 0x64, 0xAC, 0xD9, 0xF6, 0xA0, 0xD5, 0x0B, 0x9B, 0x49, 0x52, - 0x69, 0x3B, 0x71, 0x00, 0x2F, 0xBB, 0xBA, 0x08, 0xB1, 0xAE, 0xBB, 0xB3, 0xE1, 0xC9, 0xA6, 0x7F, - 0x17, 0x97, 0x28, 0x72, 0x12, 0x6E, 0x91, 0xAE, 0x3A, 0xA2, 0x35, 0x46, 0x27, 0xF8, 0x12, 0x50 -}; -u8 v1_deadtable2[256] = { - 0xD8, 0x65, 0x04, 0xC2, 0x65, 0xD5, 0xB0, 0x0C, 0xDF, 0x9D, 0xF0, 0xC3, 0x9A, 0x17, 0xC9, 0xA6, - 0xE1, 0xAC, 0x0D, 0x14, 0x2F, 0x3C, 0x2C, 0x87, 0xA2, 0xBF, 0x4D, 0x5F, 0xAC, 0x2D, 0x9D, 0xE1, - 0x0C, 0x9C, 0xE7, 0x7F, 0xFC, 0xA8, 0x66, 0x59, 0xAC, 0x18, 0xD7, 0x05, 0xF0, 0xBF, 0xD1, 0x8B, - 0x35, 0x9F, 0x59, 0xB4, 0xBA, 0x55, 0xB2, 0x85, 0xFD, 0xB1, 0x72, 0x06, 0x73, 0xA4, 0xDB, 0x48, - 0x7B, 0x5F, 0x67, 0xA5, 0x95, 0xB9, 0xA5, 0x4A, 0xCF, 0xD1, 0x44, 0xF3, 0x81, 0xF5, 0x6D, 0xF6, - 0x3A, 0xC3, 0x57, 0x83, 0xFA, 0x8E, 0x15, 0x2A, 0xA2, 0x04, 0xB2, 0x9D, 0xA8, 0x0D, 0x7F, 0xB8, - 0x0F, 0xF6, 0xAC, 0xBE, 0x97, 0xCE, 0x16, 0xE6, 0x31, 0x10, 0x60, 0x16, 0xB5, 0x83, 0x45, 0xEE, - 0xD7, 0x5F, 0x2C, 0x08, 0x58, 0xB1, 0xFD, 0x7E, 0x79, 0x00, 0x34, 0xAD, 0xB5, 0x31, 0x34, 0x39, - 0xAF, 0xA8, 0xDD, 0x52, 0x6A, 0xB0, 0x60, 0x35, 0xB8, 0x1D, 0x52, 0xF5, 0xF5, 0x30, 0x00, 0x7B, - 0xF4, 0xBA, 0x03, 0xCB, 0x3A, 0x84, 0x14, 0x8A, 0x6A, 0xEF, 0x21, 0xBD, 0x01, 0xD8, 0xA0, 0xD4, - 0x43, 0xBE, 0x23, 0xE7, 0x76, 0x27, 0x2C, 0x3F, 0x4D, 0x3F, 0x43, 0x18, 0xA7, 0xC3, 0x47, 0xA5, - 0x7A, 0x1D, 0x02, 0x55, 0x09, 0xD1, 0xFF, 0x55, 0x5E, 0x17, 0xA0, 0x56, 0xF4, 0xC9, 0x6B, 0x90, - 0xB4, 0x80, 0xA5, 0x07, 0x22, 0xFB, 0x22, 0x0D, 0xD9, 0xC0, 0x5B, 0x08, 0x35, 0x05, 0xC1, 0x75, - 0x4F, 0xD0, 0x51, 0x2D, 0x2E, 0x5E, 0x69, 0xE7, 0x3B, 0xC2, 0xDA, 0xFF, 0xF6, 0xCE, 0x3E, 0x76, - 0xE8, 0x36, 0x8C, 0x39, 0xD8, 0xF3, 0xE9, 0xA6, 0x42, 0xE6, 0xC1, 0x4C, 0x05, 0xBE, 0x17, 0xF2, - 0x5C, 0x1B, 0x19, 0xDB, 0x0F, 0xF3, 0xF8, 0x49, 0xEB, 0x36, 0xF6, 0x40, 0x6F, 0xAD, 0xC1, 0x8C -}; - -//seed tables for AR v3 -u8 v3_deadtable1[256] = { - 0xD0, 0xFF, 0xBA, 0xE5, 0xC1, 0xC7, 0xDB, 0x5B, 0x16, 0xE3, 0x6E, 0x26, 0x62, 0x31, 0x2E, 0x2A, - 0xD1, 0xBB, 0x4A, 0xE6, 0xAE, 0x2F, 0x0A, 0x90, 0x29, 0x90, 0xB6, 0x67, 0x58, 0x2A, 0xB4, 0x45, - 0x7B, 0xCB, 0xF0, 0x73, 0x84, 0x30, 0x81, 0xC2, 0xD7, 0xBE, 0x89, 0xD7, 0x4E, 0x73, 0x5C, 0xC7, - 0x80, 0x1B, 0xE5, 0xE4, 0x43, 0xC7, 0x46, 0xD6, 0x6F, 0x7B, 0xBF, 0xED, 0xE5, 0x27, 0xD1, 0xB5, - 0xD0, 0xD8, 0xA3, 0xCB, 0x2B, 0x30, 0xA4, 0xF0, 0x84, 0x14, 0x72, 0x5C, 0xFF, 0xA4, 0xFB, 0x54, - 0x9D, 0x70, 0xE2, 0xFF, 0xBE, 0xE8, 0x24, 0x76, 0xE5, 0x15, 0xFB, 0x1A, 0xBC, 0x87, 0x02, 0x2A, - 0x58, 0x8F, 0x9A, 0x95, 0xBD, 0xAE, 0x8D, 0x0C, 0xA5, 0x4C, 0xF2, 0x5C, 0x7D, 0xAD, 0x51, 0xFB, - 0xB1, 0x22, 0x07, 0xE0, 0x29, 0x7C, 0xEB, 0x98, 0x14, 0xC6, 0x31, 0x97, 0xE4, 0x34, 0x8F, 0xCC, - 0x99, 0x56, 0x9F, 0x78, 0x43, 0x91, 0x85, 0x3F, 0xC2, 0xD0, 0xD1, 0x80, 0xD1, 0x77, 0xA7, 0xE2, - 0x43, 0x99, 0x1D, 0x2F, 0x8B, 0x6A, 0xE4, 0x66, 0x82, 0xF7, 0x2B, 0x0B, 0x65, 0x14, 0xC0, 0xC2, - 0x1D, 0x96, 0x78, 0x1C, 0xC4, 0xC3, 0xD2, 0xB1, 0x64, 0x07, 0xD7, 0x6F, 0x02, 0xE9, 0x44, 0x31, - 0xDB, 0x3C, 0xEB, 0x93, 0xED, 0x9A, 0x57, 0x05, 0xB9, 0x0E, 0xAF, 0x1F, 0x48, 0x11, 0xDC, 0x35, - 0x6C, 0xB8, 0xEE, 0x2A, 0x48, 0x2B, 0xBC, 0x89, 0x12, 0x59, 0xCB, 0xD1, 0x18, 0xEA, 0x72, 0x11, - 0x01, 0x75, 0x3B, 0xB5, 0x56, 0xF4, 0x8B, 0xA0, 0x41, 0x75, 0x86, 0x7B, 0x94, 0x12, 0x2D, 0x4C, - 0x0C, 0x22, 0xC9, 0x4A, 0xD8, 0xB1, 0x8D, 0xF0, 0x55, 0x2E, 0x77, 0x50, 0x1C, 0x64, 0x77, 0xAA, - 0x3E, 0xAC, 0xD3, 0x3D, 0xCE, 0x60, 0xCA, 0x5D, 0xA0, 0x92, 0x78, 0xC6, 0x51, 0xFE, 0xF9, 0x30 -}; -u8 v3_deadtable2[256] = { - 0xAA, 0xAF, 0xF0, 0x72, 0x90, 0xF7, 0x71, 0x27, 0x06, 0x11, 0xEB, 0x9C, 0x37, 0x12, 0x72, 0xAA, - 0x65, 0xBC, 0x0D, 0x4A, 0x76, 0xF6, 0x5C, 0xAA, 0xB0, 0x7A, 0x7D, 0x81, 0xC1, 0xCE, 0x2F, 0x9F, - 0x02, 0x75, 0x38, 0xC8, 0xFC, 0x66, 0x05, 0xC2, 0x2C, 0xBD, 0x91, 0xAD, 0x03, 0xB1, 0x88, 0x93, - 0x31, 0xC6, 0xAB, 0x40, 0x23, 0x43, 0x76, 0x54, 0xCA, 0xE7, 0x00, 0x96, 0x9F, 0xD8, 0x24, 0x8B, - 0xE4, 0xDC, 0xDE, 0x48, 0x2C, 0xCB, 0xF7, 0x84, 0x1D, 0x45, 0xE5, 0xF1, 0x75, 0xA0, 0xED, 0xCD, - 0x4B, 0x24, 0x8A, 0xB3, 0x98, 0x7B, 0x12, 0xB8, 0xF5, 0x63, 0x97, 0xB3, 0xA6, 0xA6, 0x0B, 0xDC, - 0xD8, 0x4C, 0xA8, 0x99, 0x27, 0x0F, 0x8F, 0x94, 0x63, 0x0F, 0xB0, 0x11, 0x94, 0xC7, 0xE9, 0x7F, - 0x3B, 0x40, 0x72, 0x4C, 0xDB, 0x84, 0x78, 0xFE, 0xB8, 0x56, 0x08, 0x80, 0xDF, 0x20, 0x2F, 0xB9, - 0x66, 0x2D, 0x60, 0x63, 0xF5, 0x18, 0x15, 0x1B, 0x86, 0x85, 0xB9, 0xB4, 0x68, 0x0E, 0xC6, 0xD1, - 0x8A, 0x81, 0x2B, 0xB3, 0xF6, 0x48, 0xF0, 0x4F, 0x9C, 0x28, 0x1C, 0xA4, 0x51, 0x2F, 0xD7, 0x4B, - 0x17, 0xE7, 0xCC, 0x50, 0x9F, 0xD0, 0xD1, 0x40, 0x0C, 0x0D, 0xCA, 0x83, 0xFA, 0x5E, 0xCA, 0xEC, - 0xBF, 0x4E, 0x7C, 0x8F, 0xF0, 0xAE, 0xC2, 0xD3, 0x28, 0x41, 0x9B, 0xC8, 0x04, 0xB9, 0x4A, 0xBA, - 0x72, 0xE2, 0xB5, 0x06, 0x2C, 0x1E, 0x0B, 0x2C, 0x7F, 0x11, 0xA9, 0x26, 0x51, 0x9D, 0x3F, 0xF8, - 0x62, 0x11, 0x2E, 0x89, 0xD2, 0x9D, 0x35, 0xB1, 0xE4, 0x0A, 0x4D, 0x93, 0x01, 0xA7, 0xD1, 0x2D, - 0x00, 0x87, 0xE2, 0x2D, 0xA4, 0xE9, 0x0A, 0x06, 0x66, 0xF8, 0x1F, 0x44, 0x75, 0xB5, 0x6B, 0x1C, - 0xFC, 0x31, 0x09, 0x48, 0xA3, 0xFF, 0x92, 0x12, 0x58, 0xE9, 0xFA, 0xAE, 0x4F, 0xE2, 0xB4, 0xCC -}; - -#define debuggerReadMemory(addr) \ - READ32LE((&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -#define debuggerReadHalfWord(addr) \ - READ16LE((&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -#define debuggerReadByte(addr) \ - map[(addr)>>24].address[(addr) & map[(addr)>>24].mask] - -#define debuggerWriteMemory(addr, value) \ - WRITE32LE(&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask], value) - -#define debuggerWriteHalfWord(addr, value) \ - WRITE16LE(&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask], value) - -#define debuggerWriteByte(addr, value) \ - map[(addr)>>24].address[(addr) & map[(addr)>>24].mask] = (value) - - -#define CHEAT_IS_HEX(a) ( ((a)>='A' && (a) <='F') || ((a) >='0' && (a) <= '9')) - -#define CHEAT_PATCH_ROM_16BIT(a,v) \ - WRITE16LE(((u16 *)&rom[(a) & 0x1ffffff]), v); - -#define CHEAT_PATCH_ROM_32BIT(a,v) \ - WRITE32LE(((u32 *)&rom[(a) & 0x1ffffff]), v); - -static bool isMultilineWithData(int i) -{ - // we consider it a multiline code if it has more than one line of data - // otherwise, it can still be considered a single code - // (Only CBA codes can be true multilines !!!) - if(i < cheatsNumber && i >= 0) - switch(cheatsList[i].size) { - case INT_8_BIT_WRITE: - case INT_16_BIT_WRITE: - case INT_32_BIT_WRITE: - case GSA_16_BIT_ROM_PATCH: - case GSA_8_BIT_GS_WRITE: - case GSA_16_BIT_GS_WRITE: - case GSA_32_BIT_GS_WRITE: - case CBA_AND: - case CBA_IF_KEYS_PRESSED: - case CBA_IF_TRUE: - case CBA_IF_FALSE: - case GSA_8_BIT_IF_TRUE: - case GSA_32_BIT_IF_TRUE: - case GSA_8_BIT_IF_FALSE: - case GSA_32_BIT_IF_FALSE: - case GSA_8_BIT_FILL: - case GSA_16_BIT_FILL: - case GSA_8_BIT_IF_TRUE2: - case GSA_16_BIT_IF_TRUE2: - case GSA_32_BIT_IF_TRUE2: - case GSA_8_BIT_IF_FALSE2: - case GSA_16_BIT_IF_FALSE2: - case GSA_32_BIT_IF_FALSE2: - case GSA_SLOWDOWN: - case CBA_ADD: - case CBA_OR: - case CBA_LT: - case CBA_GT: - case GSA_8_BIT_POINTER: - case GSA_16_BIT_POINTER: - case GSA_32_BIT_POINTER: - case GSA_8_BIT_ADD: - case GSA_16_BIT_ADD: - case GSA_32_BIT_ADD: - case GSA_8_BIT_IF_LOWER_U: - case GSA_16_BIT_IF_LOWER_U: - case GSA_32_BIT_IF_LOWER_U: - case GSA_8_BIT_IF_HIGHER_U: - case GSA_16_BIT_IF_HIGHER_U: - case GSA_32_BIT_IF_HIGHER_U: - case GSA_8_BIT_IF_AND: - case GSA_16_BIT_IF_AND: - case GSA_32_BIT_IF_AND: - case GSA_8_BIT_IF_LOWER_U2: - case GSA_16_BIT_IF_LOWER_U2: - case GSA_32_BIT_IF_LOWER_U2: - case GSA_8_BIT_IF_HIGHER_U2: - case GSA_16_BIT_IF_HIGHER_U2: - case GSA_32_BIT_IF_HIGHER_U2: - case GSA_8_BIT_IF_AND2: - case GSA_16_BIT_IF_AND2: - case GSA_32_BIT_IF_AND2: - case GSA_ALWAYS: - case GSA_ALWAYS2: - case GSA_8_BIT_IF_LOWER_S: - case GSA_16_BIT_IF_LOWER_S: - case GSA_32_BIT_IF_LOWER_S: - case GSA_8_BIT_IF_HIGHER_S: - case GSA_16_BIT_IF_HIGHER_S: - case GSA_32_BIT_IF_HIGHER_S: - case GSA_8_BIT_IF_LOWER_S2: - case GSA_16_BIT_IF_LOWER_S2: - case GSA_32_BIT_IF_LOWER_S2: - case GSA_8_BIT_IF_HIGHER_S2: - case GSA_16_BIT_IF_HIGHER_S2: - case GSA_32_BIT_IF_HIGHER_S2: - case GSA_16_BIT_WRITE_IOREGS: - case GSA_32_BIT_WRITE_IOREGS: - case GSA_CODES_ON: - case GSA_8_BIT_IF_TRUE3: - case GSA_16_BIT_IF_TRUE3: - case GSA_32_BIT_IF_TRUE3: - case GSA_8_BIT_IF_FALSE3: - case GSA_16_BIT_IF_FALSE3: - case GSA_32_BIT_IF_FALSE3: - case GSA_8_BIT_IF_LOWER_S3: - case GSA_16_BIT_IF_LOWER_S3: - case GSA_32_BIT_IF_LOWER_S3: - case GSA_8_BIT_IF_HIGHER_S3: - case GSA_16_BIT_IF_HIGHER_S3: - case GSA_32_BIT_IF_HIGHER_S3: - case GSA_8_BIT_IF_LOWER_U3: - case GSA_16_BIT_IF_LOWER_U3: - case GSA_32_BIT_IF_LOWER_U3: - case GSA_8_BIT_IF_HIGHER_U3: - case GSA_16_BIT_IF_HIGHER_U3: - case GSA_32_BIT_IF_HIGHER_U3: - case GSA_8_BIT_IF_AND3: - case GSA_16_BIT_IF_AND3: - case GSA_32_BIT_IF_AND3: - case GSA_ALWAYS3: - case GSA_8_BIT_GS_WRITE2: - case GSA_16_BIT_GS_WRITE2: - case GSA_32_BIT_GS_WRITE2: - case GSA_16_BIT_ROM_PATCH2C: - case GSA_16_BIT_ROM_PATCH2D: - case GSA_16_BIT_ROM_PATCH2E: - case GSA_16_BIT_ROM_PATCH2F: - case GSA_8_BIT_SLIDE: - case GSA_16_BIT_SLIDE: - case GSA_32_BIT_SLIDE: - case GSA_GROUP_WRITE: - case GSA_32_BIT_ADD2: - case GSA_32_BIT_SUB2: - case GSA_16_BIT_IF_LOWER_OR_EQ_U: - case GSA_16_BIT_IF_HIGHER_OR_EQ_U: - case GSA_16_BIT_MIF_TRUE: - case GSA_16_BIT_MIF_FALSE: - case GSA_16_BIT_MIF_LOWER_OR_EQ_U: - case GSA_16_BIT_MIF_HIGHER_OR_EQ_U: - case MASTER_CODE: - case CHEATS_16_BIT_WRITE: - case CHEATS_32_BIT_WRITE: - return false; - // the codes below have two lines of data - case CBA_SLIDE_CODE: - case CBA_SUPER: - return true; - } - return false; -} - -static int getCodeLength(int num) -{ - if(num >= cheatsNumber || num < 0) - return 1; - - // this is for all the codes that are true multiline - switch(cheatsList[num].size) { - case INT_8_BIT_WRITE: - case INT_16_BIT_WRITE: - case INT_32_BIT_WRITE: - case GSA_16_BIT_ROM_PATCH: - case GSA_8_BIT_GS_WRITE: - case GSA_16_BIT_GS_WRITE: - case GSA_32_BIT_GS_WRITE: - case CBA_AND: - case GSA_8_BIT_FILL: - case GSA_16_BIT_FILL: - case GSA_SLOWDOWN: - case CBA_ADD: - case CBA_OR: - case GSA_8_BIT_POINTER: - case GSA_16_BIT_POINTER: - case GSA_32_BIT_POINTER: - case GSA_8_BIT_ADD: - case GSA_16_BIT_ADD: - case GSA_32_BIT_ADD: - case GSA_CODES_ON: - case GSA_8_BIT_IF_TRUE3: - case GSA_16_BIT_IF_TRUE3: - case GSA_32_BIT_IF_TRUE3: - case GSA_8_BIT_IF_FALSE3: - case GSA_16_BIT_IF_FALSE3: - case GSA_32_BIT_IF_FALSE3: - case GSA_8_BIT_IF_LOWER_S3: - case GSA_16_BIT_IF_LOWER_S3: - case GSA_32_BIT_IF_LOWER_S3: - case GSA_8_BIT_IF_HIGHER_S3: - case GSA_16_BIT_IF_HIGHER_S3: - case GSA_32_BIT_IF_HIGHER_S3: - case GSA_8_BIT_IF_LOWER_U3: - case GSA_16_BIT_IF_LOWER_U3: - case GSA_32_BIT_IF_LOWER_U3: - case GSA_8_BIT_IF_HIGHER_U3: - case GSA_16_BIT_IF_HIGHER_U3: - case GSA_32_BIT_IF_HIGHER_U3: - case GSA_8_BIT_IF_AND3: - case GSA_16_BIT_IF_AND3: - case GSA_32_BIT_IF_AND3: - case GSA_8_BIT_IF_LOWER_U: - case GSA_16_BIT_IF_LOWER_U: - case GSA_32_BIT_IF_LOWER_U: - case GSA_8_BIT_IF_HIGHER_U: - case GSA_16_BIT_IF_HIGHER_U: - case GSA_32_BIT_IF_HIGHER_U: - case GSA_8_BIT_IF_AND: - case GSA_16_BIT_IF_AND: - case GSA_32_BIT_IF_AND: - case GSA_ALWAYS: - case GSA_8_BIT_IF_LOWER_S: - case GSA_16_BIT_IF_LOWER_S: - case GSA_32_BIT_IF_LOWER_S: - case GSA_8_BIT_IF_HIGHER_S: - case GSA_16_BIT_IF_HIGHER_S: - case GSA_32_BIT_IF_HIGHER_S: - case GSA_16_BIT_WRITE_IOREGS: - case GSA_32_BIT_WRITE_IOREGS: - case GSA_8_BIT_GS_WRITE2: - case GSA_16_BIT_GS_WRITE2: - case GSA_32_BIT_GS_WRITE2: - case GSA_16_BIT_ROM_PATCH2C: - case GSA_16_BIT_ROM_PATCH2D: - case GSA_16_BIT_ROM_PATCH2E: - case GSA_16_BIT_ROM_PATCH2F: - case GSA_8_BIT_SLIDE: - case GSA_16_BIT_SLIDE: - case GSA_32_BIT_SLIDE: - case GSA_8_BIT_IF_TRUE: - case GSA_32_BIT_IF_TRUE: - case GSA_8_BIT_IF_FALSE: - case GSA_32_BIT_IF_FALSE: - case CBA_LT: - case CBA_GT: - case CBA_IF_TRUE: - case CBA_IF_FALSE: - case GSA_8_BIT_IF_TRUE2: - case GSA_16_BIT_IF_TRUE2: - case GSA_32_BIT_IF_TRUE2: - case GSA_8_BIT_IF_FALSE2: - case GSA_16_BIT_IF_FALSE2: - case GSA_32_BIT_IF_FALSE2: - case GSA_8_BIT_IF_LOWER_U2: - case GSA_16_BIT_IF_LOWER_U2: - case GSA_32_BIT_IF_LOWER_U2: - case GSA_8_BIT_IF_HIGHER_U2: - case GSA_16_BIT_IF_HIGHER_U2: - case GSA_32_BIT_IF_HIGHER_U2: - case GSA_8_BIT_IF_AND2: - case GSA_16_BIT_IF_AND2: - case GSA_32_BIT_IF_AND2: - case GSA_ALWAYS2: - case GSA_8_BIT_IF_LOWER_S2: - case GSA_16_BIT_IF_LOWER_S2: - case GSA_32_BIT_IF_LOWER_S2: - case GSA_8_BIT_IF_HIGHER_S2: - case GSA_16_BIT_IF_HIGHER_S2: - case GSA_32_BIT_IF_HIGHER_S2: - case GSA_GROUP_WRITE: - case GSA_32_BIT_ADD2: - case GSA_32_BIT_SUB2: - case GSA_16_BIT_IF_LOWER_OR_EQ_U: - case GSA_16_BIT_IF_HIGHER_OR_EQ_U: - case GSA_16_BIT_MIF_TRUE: - case GSA_16_BIT_MIF_FALSE: - case GSA_16_BIT_MIF_LOWER_OR_EQ_U: - case GSA_16_BIT_MIF_HIGHER_OR_EQ_U: - case MASTER_CODE: - case CHEATS_16_BIT_WRITE: - case CHEATS_32_BIT_WRITE: - case UNKNOWN_CODE: - return 1; - case CBA_IF_KEYS_PRESSED: - case CBA_SLIDE_CODE: - return 2; - case CBA_SUPER: - return ((((cheatsList[num].value-1) & 0xFFFF)/3) + 1); - } - return 1; -} - -int cheatsCheckKeys(u32 keys, u32 extended) -{ - bool onoff = true; - int ticks = 0; - int i; - mastercode = 0; - - for (i = 0; i<4; i++) - if (rompatch2addr [i] != 0) { - CHEAT_PATCH_ROM_16BIT(rompatch2addr [i],rompatch2oldval [i]); - rompatch2addr [i] = 0; - } - - for (i = 0; i < cheatsNumber; i++) { - if(!cheatsList[i].enabled) { - // make sure we skip other lines in this code - i += getCodeLength(i)-1; - continue; - } - switch(cheatsList[i].size) { - case GSA_CODES_ON: - onoff = true; - break; - case GSA_SLOWDOWN: - // check if button was pressed and released, if so toggle our state - if((cheatsList[i].status & 4) && !(extended & 4)) - cheatsList[i].status ^= 1; - if(extended & 4) - cheatsList[i].status |= 4; - else - cheatsList[i].status &= ~4; - - if(cheatsList[i].status & 1) - ticks += ((cheatsList[i].value & 0xFFFF) * 7); - break; - case GSA_8_BIT_SLIDE: - i++; - if(i < cheatsNumber) { - u32 addr = cheatsList[i-1].value; - u8 value = cheatsList[i].rawaddress; - int vinc = (cheatsList[i].value >> 24) & 255; - int count = (cheatsList[i].value >> 16) & 255; - int ainc = (cheatsList[i].value & 0xffff); - while(count > 0) { - CPUWriteByte(addr, value); - value += vinc; - addr += ainc; - count--; - } - } - break; - case GSA_16_BIT_SLIDE: - i++; - if(i < cheatsNumber) { - u32 addr = cheatsList[i-1].value; - u16 value = cheatsList[i].rawaddress; - int vinc = (cheatsList[i].value >> 24) & 255; - int count = (cheatsList[i].value >> 16) & 255; - int ainc = (cheatsList[i].value & 0xffff)*2; - while(count > 0) { - CPUWriteHalfWord(addr, value); - value += vinc; - addr += ainc; - count--; - } - } - break; - case GSA_32_BIT_SLIDE: - i++; - if(i < cheatsNumber) { - u32 addr = cheatsList[i-1].value; - u32 value = cheatsList[i].rawaddress; - int vinc = (cheatsList[i].value >> 24) & 255; - int count = (cheatsList[i].value >> 16) & 255; - int ainc = (cheatsList[i].value & 0xffff)*4; - while(count > 0) { - CPUWriteMemory(addr, value); - value += vinc; - addr += ainc; - count--; - } - } - break; - case GSA_8_BIT_GS_WRITE2: - i++; - if(i < cheatsNumber) { - if(extended & 4) { - CPUWriteByte(cheatsList[i-1].value, cheatsList[i].address); - } - } - break; - case GSA_16_BIT_GS_WRITE2: - i++; - if(i < cheatsNumber) { - if(extended & 4) { - CPUWriteHalfWord(cheatsList[i-1].value, cheatsList[i].address); - } - } - break; - case GSA_32_BIT_GS_WRITE2: - i++; - if(i < cheatsNumber) { - if(extended & 4) { - CPUWriteMemory(cheatsList[i-1].value, cheatsList[i].address); - } - } - break; - case GSA_16_BIT_ROM_PATCH: - if((cheatsList[i].status & 1) == 0) { - if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) { - cheatsList[i].oldValue = CPUReadHalfWord(cheatsList[i].address); - cheatsList[i].status |= 1; - CHEAT_PATCH_ROM_16BIT(cheatsList[i].address, cheatsList[i].value); - } - } - break; - case GSA_16_BIT_ROM_PATCH2C: - i++; - if(i < cheatsNumber) { - rompatch2addr [0] = ((cheatsList[i-1].value & 0x00FFFFFF) << 1) + 0x8000000; - rompatch2oldval [0] = CPUReadHalfWord(rompatch2addr [0]); - rompatch2val [0] = cheatsList[i].rawaddress & 0xFFFF; - } - break; - case GSA_16_BIT_ROM_PATCH2D: - i++; - if(i < cheatsNumber) { - rompatch2addr [1] = ((cheatsList[i-1].value & 0x00FFFFFF) << 1) + 0x8000000; - rompatch2oldval [1] = CPUReadHalfWord(rompatch2addr [1]); - rompatch2val [1] = cheatsList[i].rawaddress & 0xFFFF; - } - break; - case GSA_16_BIT_ROM_PATCH2E: - i++; - if(i < cheatsNumber) { - rompatch2addr [2] = ((cheatsList[i-1].value & 0x00FFFFFF) << 1) + 0x8000000; - rompatch2oldval [2] = CPUReadHalfWord(rompatch2addr [2]); - rompatch2val [2] = cheatsList[i].rawaddress & 0xFFFF; - } - break; - case GSA_16_BIT_ROM_PATCH2F: - i++; - if(i < cheatsNumber) { - rompatch2addr [3] = ((cheatsList[i-1].value & 0x00FFFFFF) << 1) + 0x8000000; - rompatch2oldval [3] = CPUReadHalfWord(rompatch2addr [3]); - rompatch2val [3] = cheatsList[i].rawaddress & 0xFFFF; - } - break; - case MASTER_CODE: - mastercode = cheatsList[i].address; - break; - } - if (onoff) { - switch(cheatsList[i].size) { - case INT_8_BIT_WRITE: - CPUWriteByte(cheatsList[i].address, cheatsList[i].value); - break; - case INT_16_BIT_WRITE: - CPUWriteHalfWord(cheatsList[i].address, cheatsList[i].value); - break; - case INT_32_BIT_WRITE: - CPUWriteMemory(cheatsList[i].address, cheatsList[i].value); - break; - case GSA_8_BIT_GS_WRITE: - if(extended & 4) { - CPUWriteByte(cheatsList[i].address, cheatsList[i].value); - } - break; - case GSA_16_BIT_GS_WRITE: - if(extended & 4) { - CPUWriteHalfWord(cheatsList[i].address, cheatsList[i].value); - } - break; - case GSA_32_BIT_GS_WRITE: - if(extended & 4) { - CPUWriteMemory(cheatsList[i].address, cheatsList[i].value); - } - break; - case CBA_IF_KEYS_PRESSED: - { - u16 value = cheatsList[i].value; - u32 addr = cheatsList[i].address; - if((addr & 0xF0) == 0x20) { - if((keys & value) == 0) { - i++; - } - } else if((addr & 0xF0) == 0x10) { - if((keys & value) == value) { - i++; - } - } else if((addr & 0xF0) == 0x00) { - if(((~keys) & 0x3FF) == value) { - i++; - } - } - } - break; - case CBA_IF_TRUE: - if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) { - i++; - } - break; - case CBA_SLIDE_CODE: - { - u32 address = cheatsList[i].address; - u16 value = cheatsList[i].value; - i++; - if(i < cheatsNumber) { - int count = ((cheatsList[i].address - 1) & 0xFFFF); - u16 vinc = (cheatsList[i].address >> 16) & 0xFFFF; - int inc = cheatsList[i].value; - for(int x = 0; x <= count ; x++) { - CPUWriteHalfWord(address, value); - address += inc; - value += vinc; - } - } - } - break; - case CBA_IF_FALSE: - if(CPUReadHalfWord(cheatsList[i].address) == cheatsList[i].value){ - i++; - } - break; - case CBA_AND: - CPUWriteHalfWord(cheatsList[i].address, - CPUReadHalfWord(cheatsList[i].address) & - cheatsList[i].value); - break; - case GSA_8_BIT_IF_TRUE: - if(CPUReadByte(cheatsList[i].address) != cheatsList[i].value) { - i++; - } - break; - case GSA_32_BIT_IF_TRUE: - if(CPUReadMemory(cheatsList[i].address) != cheatsList[i].value) { - i++; - } - break; - case GSA_8_BIT_IF_FALSE: - if(CPUReadByte(cheatsList[i].address) == cheatsList[i].value) { - i++; - } - break; - case GSA_32_BIT_IF_FALSE: - if(CPUReadMemory(cheatsList[i].address) == cheatsList[i].value) { - i++; - } - break; - case GSA_8_BIT_FILL: - { - u32 addr = cheatsList[i].address; - u8 v = cheatsList[i].value & 0xff; - u32 end = addr + (cheatsList[i].value >> 8); - do { - CPUWriteByte(addr, v); - addr++; - } while (addr <= end); - } - break; - case GSA_16_BIT_FILL: - { - u32 addr = cheatsList[i].address; - u16 v = cheatsList[i].value & 0xffff; - u32 end = addr + ((cheatsList[i].value >> 16) << 1); - do { - CPUWriteHalfWord(addr, v); - addr+=2; - } while (addr <= end); - } - break; - case GSA_8_BIT_IF_TRUE2: - if(CPUReadByte(cheatsList[i].address) != cheatsList[i].value) { - i+=2; - } - break; - case GSA_16_BIT_IF_TRUE2: - if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) { - i+=2; - } - break; - case GSA_32_BIT_IF_TRUE2: - if(CPUReadMemory(cheatsList[i].address) != cheatsList[i].value) { - i+=2; - } - break; - case GSA_8_BIT_IF_FALSE2: - if(CPUReadByte(cheatsList[i].address) == cheatsList[i].value) { - i+=2; - } - break; - case GSA_16_BIT_IF_FALSE2: - if(CPUReadHalfWord(cheatsList[i].address) == cheatsList[i].value) { - i+=2; - } - break; - case GSA_32_BIT_IF_FALSE2: - if(CPUReadMemory(cheatsList[i].address) == cheatsList[i].value) { - i+=2; - } - break; - case CBA_ADD: - if ((cheatsList[i].address & 1) == 0) { - CPUWriteHalfWord(cheatsList[i].address, - CPUReadHalfWord(cheatsList[i].address) + - cheatsList[i].value); - } else { - CPUWriteMemory(cheatsList[i].address & 0x0FFFFFFE, - CPUReadMemory(cheatsList[i].address & 0x0FFFFFFE) + - cheatsList[i].value); - } - break; - case CBA_OR: - CPUWriteHalfWord(cheatsList[i].address, - CPUReadHalfWord(cheatsList[i].address) | - cheatsList[i].value); - break; - case CBA_GT: - if (!(CPUReadHalfWord(cheatsList[i].address) > cheatsList[i].value)){ - i++; - } - break; - case CBA_LT: - if (!(CPUReadHalfWord(cheatsList[i].address) < cheatsList[i].value)){ - i++; - } - break; - case CBA_SUPER: - { - int count = 2*((cheatsList[i].value -1) & 0xFFFF)+1; - u32 address = cheatsList[i].address; - for(int x = 0; x <= count; x++) { - u8 b; - int res = x % 6; - if (res==0) - i++; - if(res < 4) - b = (cheatsList[i].address >> (24-8*res)) & 0xFF; - else - b = (cheatsList[i].value >> (8 - 8*(res-4))) & 0xFF; - CPUWriteByte(address, b); - address++; - } - } - break; - case GSA_8_BIT_POINTER : - if ((CPUReadMemory(cheatsList[i].address)>=0x02000000) && (CPUReadMemory(cheatsList[i].address)<0x02040000) || - (CPUReadMemory(cheatsList[i].address)>=0x03000000) && (CPUReadMemory(cheatsList[i].address)<0x03008000)) - { - CPUWriteByte(CPUReadMemory(cheatsList[i].address)+((cheatsList[i].value & 0xFFFFFF00) >> 8), - cheatsList[i].value & 0xFF); - } - break; - case GSA_16_BIT_POINTER : - if ((CPUReadMemory(cheatsList[i].address)>=0x02000000) && (CPUReadMemory(cheatsList[i].address)<0x02040000) || - (CPUReadMemory(cheatsList[i].address)>=0x03000000) && (CPUReadMemory(cheatsList[i].address)<0x03008000)) - { - CPUWriteHalfWord(CPUReadMemory(cheatsList[i].address)+((cheatsList[i].value & 0xFFFF0000) >> 15), - cheatsList[i].value & 0xFFFF); - } - break; - case GSA_32_BIT_POINTER : - if ((CPUReadMemory(cheatsList[i].address)>=0x02000000) && (CPUReadMemory(cheatsList[i].address)<0x02040000) || - (CPUReadMemory(cheatsList[i].address)>=0x03000000) && (CPUReadMemory(cheatsList[i].address)<0x03008000)) - { - CPUWriteMemory(CPUReadMemory(cheatsList[i].address), - cheatsList[i].value); - } - break; - case GSA_8_BIT_ADD : - CPUWriteByte(cheatsList[i].address, - (cheatsList[i].value & 0xFF) + CPUReadMemory(cheatsList[i].address) & 0xFF); - break; - case GSA_16_BIT_ADD : - CPUWriteHalfWord(cheatsList[i].address, - (cheatsList[i].value & 0xFFFF) + CPUReadMemory(cheatsList[i].address) & 0xFFFF); - break; - case GSA_32_BIT_ADD : - CPUWriteMemory(cheatsList[i].address , - cheatsList[i].value + CPUReadMemory(cheatsList[i].address) & 0xFFFFFFFF); - break; - case GSA_8_BIT_IF_LOWER_U: - if (!(CPUReadByte(cheatsList[i].address) < (cheatsList[i].value & 0xFF))) { - i++; - } - break; - case GSA_16_BIT_IF_LOWER_U: - if (!(CPUReadHalfWord(cheatsList[i].address) < (cheatsList[i].value & 0xFFFF))) { - i++; - } - break; - case GSA_32_BIT_IF_LOWER_U: - if (!(CPUReadMemory(cheatsList[i].address) < cheatsList[i].value)) { - i++; - } - break; - case GSA_8_BIT_IF_HIGHER_U: - if (!(CPUReadByte(cheatsList[i].address) > (cheatsList[i].value & 0xFF))) { - i++; - } - break; - case GSA_16_BIT_IF_HIGHER_U: - if (!(CPUReadHalfWord(cheatsList[i].address) > (cheatsList[i].value & 0xFFFF))) { - i++; - } - break; - case GSA_32_BIT_IF_HIGHER_U: - if (!(CPUReadMemory(cheatsList[i].address) > cheatsList[i].value)) { - i++; - } - break; - case GSA_8_BIT_IF_AND: - if (!(CPUReadByte(cheatsList[i].address) & (cheatsList[i].value & 0xFF))) { - i++; - } - break; - case GSA_16_BIT_IF_AND: - if (!(CPUReadHalfWord(cheatsList[i].address) & (cheatsList[i].value & 0xFFFF))) { - i++; - } - break; - case GSA_32_BIT_IF_AND: - if (!(CPUReadMemory(cheatsList[i].address) & cheatsList[i].value)) { - i++; - } - break; - case GSA_8_BIT_IF_LOWER_U2: - if (!(CPUReadByte(cheatsList[i].address) < (cheatsList[i].value & 0xFF))) { - i+=2; - } - break; - case GSA_16_BIT_IF_LOWER_U2: - if (!(CPUReadHalfWord(cheatsList[i].address) < (cheatsList[i].value & 0xFFFF))) { - i+=2; - } - break; - case GSA_32_BIT_IF_LOWER_U2: - if (!(CPUReadMemory(cheatsList[i].address) < cheatsList[i].value)) { - i+=2; - } - break; - case GSA_8_BIT_IF_HIGHER_U2: - if (!(CPUReadByte(cheatsList[i].address) > (cheatsList[i].value & 0xFF))) { - i+=2; - } - break; - case GSA_16_BIT_IF_HIGHER_U2: - if (!(CPUReadHalfWord(cheatsList[i].address) > (cheatsList[i].value & 0xFFFF))) { - i+=2; - } - break; - case GSA_32_BIT_IF_HIGHER_U2: - if (!(CPUReadMemory(cheatsList[i].address) > cheatsList[i].value)) { - i+=2; - } - break; - case GSA_8_BIT_IF_AND2: - if (!(CPUReadByte(cheatsList[i].address) & (cheatsList[i].value & 0xFF))) { - i+=2; - } - break; - case GSA_16_BIT_IF_AND2: - if (!(CPUReadHalfWord(cheatsList[i].address) & (cheatsList[i].value & 0xFFFF))) { - i+=2; - } - break; - case GSA_32_BIT_IF_AND2: - if (!(CPUReadMemory(cheatsList[i].address) & cheatsList[i].value)) { - i+=2; - } - break; - case GSA_ALWAYS: - i++; - break; - case GSA_ALWAYS2: - i+=2; - break; - case GSA_8_BIT_IF_LOWER_S: - if (!((s8)CPUReadByte(cheatsList[i].address) < ((s8)cheatsList[i].value & 0xFF))) { - i++; - } - break; - case GSA_16_BIT_IF_LOWER_S: - if (!((s16)CPUReadHalfWord(cheatsList[i].address) < ((s16)cheatsList[i].value & 0xFFFF))) { - i++; - } - break; - case GSA_32_BIT_IF_LOWER_S: - if (!((s32)CPUReadMemory(cheatsList[i].address) < (s32)cheatsList[i].value)) { - i++; - } - break; - case GSA_8_BIT_IF_HIGHER_S: - if (!((s8)CPUReadByte(cheatsList[i].address) > ((s8)cheatsList[i].value & 0xFF))) { - i++; - } - break; - case GSA_16_BIT_IF_HIGHER_S: - if (!((s16)CPUReadHalfWord(cheatsList[i].address) > ((s16)cheatsList[i].value & 0xFFFF))) { - i++; - } - break; - case GSA_32_BIT_IF_HIGHER_S: - if (!((s32)CPUReadMemory(cheatsList[i].address) > (s32)cheatsList[i].value)) { - i++; - } - break; - case GSA_8_BIT_IF_LOWER_S2: - if (!((s8)CPUReadByte(cheatsList[i].address) < ((s8)cheatsList[i].value & 0xFF))) { - i+=2; - } - break; - case GSA_16_BIT_IF_LOWER_S2: - if (!((s16)CPUReadHalfWord(cheatsList[i].address) < ((s16)cheatsList[i].value & 0xFFFF))) { - i+=2; - } - break; - case GSA_32_BIT_IF_LOWER_S2: - if (!((s32)CPUReadMemory(cheatsList[i].address) < (s32)cheatsList[i].value)) { - i+=2; - } - break; - case GSA_8_BIT_IF_HIGHER_S2: - if (!((s8)CPUReadByte(cheatsList[i].address) > ((s8)cheatsList[i].value & 0xFF))) { - i+=2; - } - break; - case GSA_16_BIT_IF_HIGHER_S2: - if (!((s16)CPUReadHalfWord(cheatsList[i].address) > ((s16)cheatsList[i].value & 0xFFFF))) { - i+=2; - } - break; - case GSA_32_BIT_IF_HIGHER_S2: - if (!((s32)CPUReadMemory(cheatsList[i].address) > (s32)cheatsList[i].value)) { - i+=2; - } - break; - case GSA_16_BIT_WRITE_IOREGS: - if ((cheatsList[i].address <= 0x3FF) && (cheatsList[i].address != 0x6) && - (cheatsList[i].address != 0x130)) - ioMem[cheatsList[i].address & 0x3FE]=cheatsList[i].value & 0xFFFF; - break; - case GSA_32_BIT_WRITE_IOREGS: - if (cheatsList[i].address<=0x3FF) - { - if (((cheatsList[i].address & 0x3FC) != 0x6) && ((cheatsList[i].address & 0x3FC) != 0x130)) - ioMem[cheatsList[i].address & 0x3FC]= (cheatsList[i].value & 0xFFFF); - if ((((cheatsList[i].address & 0x3FC)+2) != 0x6) && ((cheatsList[i].address & 0x3FC) +2) != 0x130) - ioMem[(cheatsList[i].address & 0x3FC) + 2 ]= ((cheatsList[i].value>>16 ) & 0xFFFF); - } - break; - case GSA_8_BIT_IF_TRUE3: - if(CPUReadByte(cheatsList[i].address) != cheatsList[i].value) { - onoff=false; - } - break; - case GSA_16_BIT_IF_TRUE3: - if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) { - onoff=false; - } - break; - case GSA_32_BIT_IF_TRUE3: - if(CPUReadMemory(cheatsList[i].address) != cheatsList[i].value) { - onoff=false; - } - break; - case GSA_8_BIT_IF_FALSE3: - if(CPUReadByte(cheatsList[i].address) == cheatsList[i].value) { - onoff=false; - } - break; - case GSA_16_BIT_IF_FALSE3: - if(CPUReadHalfWord(cheatsList[i].address) == cheatsList[i].value) { - onoff=false; - } - break; - case GSA_32_BIT_IF_FALSE3: - if(CPUReadMemory(cheatsList[i].address) == cheatsList[i].value) { - onoff=false; - } - break; - case GSA_8_BIT_IF_LOWER_S3: - if (!((s8)CPUReadByte(cheatsList[i].address) < ((s8)cheatsList[i].value & 0xFF))) { - onoff=false; - } - break; - case GSA_16_BIT_IF_LOWER_S3: - if (!((s16)CPUReadHalfWord(cheatsList[i].address) < ((s16)cheatsList[i].value & 0xFFFF))) { - onoff=false; - } - break; - case GSA_32_BIT_IF_LOWER_S3: - if (!((s32)CPUReadMemory(cheatsList[i].address) < (s32)cheatsList[i].value)) { - onoff=false; - } - break; - case GSA_8_BIT_IF_HIGHER_S3: - if (!((s8)CPUReadByte(cheatsList[i].address) > ((s8)cheatsList[i].value & 0xFF))) { - onoff=false; - } - break; - case GSA_16_BIT_IF_HIGHER_S3: - if (!((s16)CPUReadHalfWord(cheatsList[i].address) > ((s16)cheatsList[i].value & 0xFFFF))) { - onoff=false; - } - break; - case GSA_32_BIT_IF_HIGHER_S3: - if (!((s32)CPUReadMemory(cheatsList[i].address) > (s32)cheatsList[i].value)) { - onoff=false; - } - break; - case GSA_8_BIT_IF_LOWER_U3: - if (!(CPUReadByte(cheatsList[i].address) < (cheatsList[i].value & 0xFF))) { - onoff=false; - } - break; - case GSA_16_BIT_IF_LOWER_U3: - if (!(CPUReadHalfWord(cheatsList[i].address) < (cheatsList[i].value & 0xFFFF))) { - onoff=false; - } - break; - case GSA_32_BIT_IF_LOWER_U3: - if (!(CPUReadMemory(cheatsList[i].address) < cheatsList[i].value)) { - onoff=false; - } - break; - case GSA_8_BIT_IF_HIGHER_U3: - if (!(CPUReadByte(cheatsList[i].address) > (cheatsList[i].value & 0xFF))) { - onoff=false; - } - break; - case GSA_16_BIT_IF_HIGHER_U3: - if (!(CPUReadHalfWord(cheatsList[i].address) > (cheatsList[i].value & 0xFFFF))) { - onoff=false; - } - break; - case GSA_32_BIT_IF_HIGHER_U3: - if (!(CPUReadMemory(cheatsList[i].address) > cheatsList[i].value)) { - onoff=false; - } - break; - case GSA_8_BIT_IF_AND3: - if (!(CPUReadByte(cheatsList[i].address) & (cheatsList[i].value & 0xFF))) { - onoff=false; - } - break; - case GSA_16_BIT_IF_AND3: - if (!(CPUReadHalfWord(cheatsList[i].address) & (cheatsList[i].value & 0xFFFF))) { - onoff=false; - } - break; - case GSA_32_BIT_IF_AND3: - if (!(CPUReadMemory(cheatsList[i].address) & cheatsList[i].value)) { - onoff=false; - } - break; - case GSA_ALWAYS3: - if (!(CPUReadMemory(cheatsList[i].address) & cheatsList[i].value)) { - onoff=false; - } - break; - case GSA_GROUP_WRITE: - { - int count = ((cheatsList[i].address) & 0xFFFE) +1; - u32 value = cheatsList[i].value; - if (count==0) - i++; - else - for (int x = 1; x <= count; x++) { - if ((x % 2) ==0){ - if (x cheatsList[i].value) { - i++; - } - break; - case GSA_16_BIT_IF_HIGHER_OR_EQ_U: - if(CPUReadHalfWord(cheatsList[i].address) < cheatsList[i].value) { - i++; - } - break; - case GSA_16_BIT_MIF_TRUE: - if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) { - i+=((cheatsList[i].rawaddress >> 0x10) & 0xFF); - } - break; - case GSA_16_BIT_MIF_FALSE: - if(CPUReadHalfWord(cheatsList[i].address) == cheatsList[i].value) { - i+=(cheatsList[i].rawaddress >> 0x10) & 0xFF; - } - break; - case GSA_16_BIT_MIF_LOWER_OR_EQ_U: - if(CPUReadHalfWord(cheatsList[i].address) > cheatsList[i].value) { - i+=(cheatsList[i].rawaddress >> 0x10) & 0xFF; - } - break; - case GSA_16_BIT_MIF_HIGHER_OR_EQ_U: - if(CPUReadHalfWord(cheatsList[i].address) < cheatsList[i].value) { - i+=(cheatsList[i].rawaddress >> 0x10) & 0xFF; - } - break; - case CHEATS_16_BIT_WRITE: - if ((cheatsList[i].address>>24)>=0x08) { - CHEAT_PATCH_ROM_16BIT(cheatsList[i].address, cheatsList[i].value); - } else { - CPUWriteHalfWord(cheatsList[i].address, cheatsList[i].value); - } - break; - case CHEATS_32_BIT_WRITE: - if ((cheatsList[i].address>>24)>=0x08) { - CHEAT_PATCH_ROM_32BIT(cheatsList[i].address, cheatsList[i].value); - } else { - CPUWriteMemory(cheatsList[i].address, cheatsList[i].value); - } - break; - } - } - } - for (i = 0; i<4; i++) - if (rompatch2addr [i] != 0) - CHEAT_PATCH_ROM_16BIT(rompatch2addr [i],rompatch2val [i]); - return ticks; -} - -void cheatsAdd(const char *codeStr, - const char *desc, - u32 rawaddress, - u32 address, - u32 value, - int code, - int size) -{ - if(cheatsNumber < 100) { - int x = cheatsNumber; - cheatsList[x].code = code; - cheatsList[x].size = size; - cheatsList[x].rawaddress = rawaddress; - cheatsList[x].address = address; - cheatsList[x].value = value; - strcpy(cheatsList[x].codestring, codeStr); - strcpy(cheatsList[x].desc, desc); - cheatsList[x].enabled = true; - cheatsList[x].status = 0; - - // we only store the old value for this simple codes. ROM patching - // is taken care when it actually patches the ROM - switch(cheatsList[x].size) { - case INT_8_BIT_WRITE: - cheatsList[x].oldValue = CPUReadByte(address); - break; - case INT_16_BIT_WRITE: - cheatsList[x].oldValue = CPUReadHalfWord(address); - break; - case INT_32_BIT_WRITE: - cheatsList[x].oldValue = CPUReadMemory(address); - break; - case CHEATS_16_BIT_WRITE: - cheatsList[x].oldValue = CPUReadHalfWord(address); - break; - case CHEATS_32_BIT_WRITE: - cheatsList[x].oldValue = CPUReadMemory(address); - break; - } - cheatsNumber++; - } -} - -void cheatsDelete(int number, bool restore) -{ - if(number < cheatsNumber && number >= 0) { - int x = number; - - if(restore) { - switch(cheatsList[x].size) { - case INT_8_BIT_WRITE: - CPUWriteByte(cheatsList[x].address, (u8)cheatsList[x].oldValue); - break; - case INT_16_BIT_WRITE: - CPUWriteHalfWord(cheatsList[x].address, (u16)cheatsList[x].oldValue); - break; - case INT_32_BIT_WRITE: - CPUWriteMemory(cheatsList[x].address, cheatsList[x].oldValue); - break; - case CHEATS_16_BIT_WRITE: - if ((cheatsList[x].address>>24)>=0x08) { - CHEAT_PATCH_ROM_16BIT(cheatsList[x].address, cheatsList[x].oldValue); - } else { - CPUWriteHalfWord(cheatsList[x].address, cheatsList[x].oldValue); - } - break; - case CHEATS_32_BIT_WRITE: - if ((cheatsList[x].address>>24)>=0x08) { - CHEAT_PATCH_ROM_32BIT(cheatsList[x].address, cheatsList[x].oldValue); - } else { - CPUWriteMemory(cheatsList[x].address, cheatsList[x].oldValue); - } - case GSA_16_BIT_ROM_PATCH: - if(cheatsList[x].status & 1) { - cheatsList[x].status &= ~1; - CHEAT_PATCH_ROM_16BIT(cheatsList[x].address, - cheatsList[x].oldValue); - } - break; - case GSA_16_BIT_ROM_PATCH2C: - case GSA_16_BIT_ROM_PATCH2D: - case GSA_16_BIT_ROM_PATCH2E: - case GSA_16_BIT_ROM_PATCH2F: - if(cheatsList[x].status & 1) { - cheatsList[x].status &= ~1; - } - break; - case MASTER_CODE: - mastercode=0; - break; - } - } - if((x+1) < cheatsNumber) { - memcpy(&cheatsList[x], &cheatsList[x+1], sizeof(CheatsData)* - (cheatsNumber-x-1)); - } - cheatsNumber--; - } -} - -void cheatsDeleteAll(bool restore) -{ - for(int i = cheatsNumber-1; i >= 0; i--) { - cheatsDelete(i, restore); - } -} - -void cheatsEnable(int i) -{ - if(i >= 0 && i < cheatsNumber) { - cheatsList[i].enabled = true; - mastercode = 0; - } -} - -void cheatsDisable(int i) -{ - if(i >= 0 && i < cheatsNumber) { - switch(cheatsList[i].size) { - case GSA_16_BIT_ROM_PATCH: - if(cheatsList[i].status & 1) { - cheatsList[i].status &= ~1; - CHEAT_PATCH_ROM_16BIT(cheatsList[i].address, - cheatsList[i].oldValue); - } - break; - case GSA_16_BIT_ROM_PATCH2C: - case GSA_16_BIT_ROM_PATCH2D: - case GSA_16_BIT_ROM_PATCH2E: - case GSA_16_BIT_ROM_PATCH2F: - if(cheatsList[i].status & 1) { - cheatsList[i].status &= ~1; - } - break; - case MASTER_CODE: - mastercode=0; - break; - } - cheatsList[i].enabled = false; - } -} - -bool cheatsVerifyCheatCode(const char *code, const char *desc) -{ - size_t len = strlen(code); - if(len != 11 && len != 13 && len != 17) { - systemMessage(MSG_INVALID_CHEAT_CODE, N_("Invalid cheat code '%s': wrong length"), code); - return false; - } - - if(code[8] != ':') { - systemMessage(MSG_INVALID_CHEAT_CODE, N_("Invalid cheat code '%s': no colon"), code); - return false; - } - - size_t i; - for(i = 0; i < 8; i++) { - if(!CHEAT_IS_HEX(code[i])) { - // wrong cheat - systemMessage(MSG_INVALID_CHEAT_CODE, - N_("Invalid cheat code '%s': first part is not hex"), code); - return false; - } - } - for(i = 9; i < len; i++) { - if(!CHEAT_IS_HEX(code[i])) { - // wrong cheat - systemMessage(MSG_INVALID_CHEAT_CODE, - N_("Invalid cheat code '%s' second part is not hex"), code); - return false; - } - } - - u32 address = 0; - u32 value = 0; - - char buffer[10]; - strncpy(buffer, code, 8); - buffer[8] = 0; - sscanf(buffer, "%x", &address); - - switch(address >> 24) { - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - case 0x08: - case 0x09: - case 0x0A: - case 0x0B: - case 0x0C: - case 0x0D: - break; - default: - systemMessage(MSG_INVALID_CHEAT_CODE_ADDRESS, - N_("Invalid cheat code address: %08x"), - address); - return false; - } - - strncpy(buffer, &code[9], 8); - sscanf(buffer, "%x", &value); - int type = 0; - if(len == 13) - type = 114; - if(len == 17) - type = 115; - cheatsAdd(code, desc, address, address, value, type, type); - return true; -} - -void cheatsAddCheatCode(const char *code, const char *desc) -{ - cheatsVerifyCheatCode(code, desc); -} - -u16 cheatsGSAGetDeadface(bool v3) -{ - for(int i = cheatsNumber-1; i >= 0; i--) - if ((cheatsList[i].address == 0xDEADFACE) && (cheatsList[i].code == (v3 ? 257 : 256))) - return cheatsList[i].value & 0xFFFF; - return 0; -} - -void cheatsGSAChangeEncryption(u16 value, bool v3) { - int i; - u8 *deadtable1, *deadtable2; - - if (v3) { - deadtable1 = (u8*)(&v3_deadtable1); - deadtable2 = (u8*)(&v3_deadtable2); - for (i = 0; i < 4; i++) - seeds_v3[i] = seed_gen(((value & 0xFF00) >> 8), (value & 0xFF) + i, deadtable1, deadtable2); - } - else { - deadtable1 = (u8*)(&v1_deadtable1); - deadtable2 = (u8*)(&v1_deadtable2); - for (i = 0; i < 4; i++){ - seeds_v1[i] = seed_gen(((value & 0xFF00) >> 8), (value & 0xFF) + i, deadtable1, deadtable2); - } - } -} - -u32 seed_gen(u8 upper, u8 seed, u8 *deadtable1, u8 *deadtable2) { - int i; - u32 newseed = 0; - - for (i = 0; i < 4; i++) - newseed = ((newseed << 8) | ((deadtable1[(i + upper) & 0xFF] + deadtable2[seed]) & 0xFF)); - - return newseed; -} - -void cheatsDecryptGSACode(u32& address, u32& value, bool v3) -{ - u32 rollingseed = 0xC6EF3720; - u32 *seeds = v3 ? seeds_v3 : seeds_v1; - - int bitsleft = 32; - while (bitsleft > 0) { - value -= ((((address << 4) + seeds[2]) ^ (address + rollingseed)) ^ - ((address >> 5) + seeds[3])); - address -= ((((value << 4) + seeds[0]) ^ (value + rollingseed)) ^ - ((value >> 5) + seeds[1])); - rollingseed -= 0x9E3779B9; - bitsleft--; - } -} - -void cheatsAddGSACode(const char *code, const char *desc, bool v3) -{ - if(strlen(code) != 16) { - // wrong cheat - systemMessage(MSG_INVALID_GSA_CODE, - N_("Invalid GSA code. Format is XXXXXXXXYYYYYYYY")); - return; - } - - int i; - for(i = 0; i < 16; i++) { - if(!CHEAT_IS_HEX(code[i])) { - // wrong cheat - systemMessage(MSG_INVALID_GSA_CODE, - N_("Invalid GSA code. Format is XXXXXXXXYYYYYYYY")); - return; - } - } - - char buffer[10]; - strncpy(buffer, code, 8); - buffer[8] = 0; - u32 address; - sscanf(buffer, "%x", &address); - strncpy(buffer, &code[8], 8); - buffer[8] = 0; - u32 value; - sscanf(buffer, "%x", &value); - cheatsGSAChangeEncryption(cheatsGSAGetDeadface (v3), v3); - cheatsDecryptGSACode(address, value, v3); - - if(value == 0x1DC0DE) { - u32 gamecode = READ32LE(((u32 *)&rom[0xac])); - if(gamecode != address) { - char buffer[5]; - *((u32 *)buffer) = address; - buffer[4] = 0; - char buffer2[5]; - *((u32 *)buffer2) = READ32LE(((u32 *)&rom[0xac])); - buffer2[4] = 0; - systemMessage(MSG_GBA_CODE_WARNING, N_("Warning: cheats are for game %s. Current game is %s.\nCodes may not work correctly."), - buffer, buffer2); - } - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, v3 ? 257 : 256, - UNKNOWN_CODE); - return; - } - if(isMultilineWithData(cheatsNumber-1)) { - cheatsAdd(code, desc, address, address, value, v3 ? 257 : 256, UNKNOWN_CODE); - return; - } - if(v3) { - int type = ((address >> 25) & 127) | ((address >> 17) & 0x80); - u32 addr = (address & 0x00F00000) << 4 | (address & 0x0003FFFF); - u16 mcode = (address>>24 & 0xFF); - - if ((mcode & 0xFE) == 0xC4) - { - cheatsAdd(code, desc, address, (address & 0x1FFFFFF) | (0x08000000), - value, 257, MASTER_CODE); - mastercode = (address & 0x1FFFFFF) | (0x08000000); - } - else - switch(type) { - case 0x00: - if(address == 0) { - type = (value >> 25) & 127; - addr = (value & 0x00F00000) << 4 | (value & 0x0003FFFF); - switch(type) { - case 0x04: - cheatsAdd(code, desc, address, 0, value & 0x00FFFFFF, 257, GSA_SLOWDOWN); - break; - case 0x08: - cheatsAdd(code, desc, address, 0, addr, 257, GSA_8_BIT_GS_WRITE2); - break; - case 0x09: - cheatsAdd(code, desc, address, 0, addr, 257, GSA_16_BIT_GS_WRITE2); - break; - case 0x0a: - cheatsAdd(code, desc, address, 0, addr, 257, GSA_32_BIT_GS_WRITE2); - break; - case 0x0c: - cheatsAdd(code, desc, address, 0, value & 0x00FFFFFF, 257, GSA_16_BIT_ROM_PATCH2C); - break; - case 0x0d: - cheatsAdd(code, desc, address, 0, value & 0x00FFFFFF, 257, GSA_16_BIT_ROM_PATCH2D); - break; - case 0x0e: - cheatsAdd(code, desc, address, 0, value & 0x00FFFFFF, 257, GSA_16_BIT_ROM_PATCH2E); - break; - case 0x0f: - cheatsAdd(code, desc, address, 0, value & 0x00FFFFFF, 257, GSA_16_BIT_ROM_PATCH2F); - break; - case 0x20: - cheatsAdd(code, desc, address, 0, addr, 257, GSA_CODES_ON); - break; - case 0x40: - cheatsAdd(code, desc, address, 0, addr, 257, GSA_8_BIT_SLIDE); - break; - case 0x41: - cheatsAdd(code, desc, address, 0, addr, 257, GSA_16_BIT_SLIDE); - break; - case 0x42: - cheatsAdd(code, desc, address, 0, addr, 257, GSA_32_BIT_SLIDE); - break; - default: - cheatsAdd(code, desc, address, address, value, 257, UNKNOWN_CODE); - break; - } - } else - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_FILL); - break; - case 0x01: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_FILL); - break; - case 0x02: - cheatsAdd(code, desc, address, addr, value, 257, INT_32_BIT_WRITE); - break; - case 0x04: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_TRUE); - break; - case 0x05: - cheatsAdd(code, desc, address, addr, value, 257, CBA_IF_TRUE); - break; - case 0x06: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_TRUE); - break; - case 0x07: - cheatsAdd(code, desc, address, addr, value, 257, GSA_ALWAYS); - break; - case 0x08: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_FALSE); - break; - case 0x09: - cheatsAdd(code, desc, address, addr, value, 257, CBA_IF_FALSE); - break; - case 0x0a: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_FALSE); - break; - case 0xc: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_LOWER_S); - break; - case 0xd: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_LOWER_S); - break; - case 0xe: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_LOWER_S); - break; - case 0x10: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_HIGHER_S); - break; - case 0x11: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_HIGHER_S); - break; - case 0x12: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_HIGHER_S); - break; - case 0x14: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_LOWER_U); - break; - case 0x15: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_LOWER_U); - break; - case 0x16: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_LOWER_U); - break; - case 0x18: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_HIGHER_U); - break; - case 0x19: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_HIGHER_U); - break; - case 0x1A: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_HIGHER_U); - break; - case 0x1C: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_AND); - break; - case 0x1D: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_AND); - break; - case 0x1E: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_AND); - break; - case 0x20: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_POINTER); - break; - case 0x21: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_POINTER); - break; - case 0x22: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_POINTER); - break; - case 0x24: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_TRUE2); - break; - case 0x25: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_TRUE2); - break; - case 0x26: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_TRUE2); - break; - case 0x27: - cheatsAdd(code, desc, address, addr, value, 257, GSA_ALWAYS2); - break; - case 0x28: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_FALSE2); - break; - case 0x29: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_FALSE2); - break; - case 0x2a: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_FALSE2); - break; - case 0x2c: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_LOWER_S2); - break; - case 0x2d: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_LOWER_S2); - break; - case 0x2e: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_LOWER_S2); - break; - case 0x30: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_HIGHER_S2); - break; - case 0x31: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_HIGHER_S2); - break; - case 0x32: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_HIGHER_S2); - break; - case 0x34: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_LOWER_U2); - break; - case 0x35: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_LOWER_U2); - break; - case 0x36: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_LOWER_U2); - break; - case 0x38: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_HIGHER_U2); - break; - case 0x39: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_HIGHER_U2); - break; - case 0x3A: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_HIGHER_U2); - break; - case 0x3C: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_AND2); - break; - case 0x3D: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_AND2); - break; - case 0x3E: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_AND2); - break; - case 0x40: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_ADD); - break; - case 0x41: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_ADD); - break; - case 0x42: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_ADD); - break; - case 0x44: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_TRUE3); - break; - case 0x45: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_TRUE3); - break; - case 0x46: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_TRUE3); - break; - case 0x47: - cheatsAdd(code, desc, address, addr, value, 257, GSA_ALWAYS3); - break; - case 0x48: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_FALSE3); - break; - case 0x49: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_FALSE3); - break; - case 0x4a: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_FALSE3); - break; - case 0x4c: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_LOWER_S3); - break; - case 0x4d: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_LOWER_S3); - break; - case 0x4e: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_LOWER_S3); - break; - case 0x50: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_HIGHER_S3); - break; - case 0x51: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_HIGHER_S3); - break; - case 0x52: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_HIGHER_S3); - break; - case 0x54: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_LOWER_U3); - break; - case 0x55: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_LOWER_U3); - break; - case 0x56: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_LOWER_U3); - break; - case 0x58: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_HIGHER_U3); - break; - case 0x59: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_HIGHER_U3); - break; - case 0x5a: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_HIGHER_U3); - break; - case 0x5c: - cheatsAdd(code, desc, address, addr, value, 257, GSA_8_BIT_IF_AND3); - break; - case 0x5d: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_IF_AND3); - break; - case 0x5e: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_IF_AND3); - break; - case 0x63: - cheatsAdd(code, desc, address, addr, value, 257, GSA_16_BIT_WRITE_IOREGS); - break; - case 0xE3: - cheatsAdd(code, desc, address, addr, value, 257, GSA_32_BIT_WRITE_IOREGS); - break; - default: - cheatsAdd(code, desc, address, address, value, 257, UNKNOWN_CODE); - break; - } - } else { - int type = (address >> 28) & 15; - switch(type) { - case 0: - case 1: - case 2: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, 256, type); - break; - case 3: - switch ((address >> 0x10) & 0xFF){ - case 0x00: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, 256, GSA_GROUP_WRITE); - break; - case 0x10: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, address & 0xFF, 256, GSA_32_BIT_ADD ); - break; - case 0x20: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, (~(address & 0xFF)+1), 256, GSA_32_BIT_ADD ); - break; - case 0x30: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, address & 0xFFFF, 256, GSA_32_BIT_ADD ); - break; - case 0x40: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, (~(address & 0xFFFF)+1), 256, GSA_32_BIT_ADD ); - break; - case 0x50: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, 256, GSA_32_BIT_ADD2); - break; - case 0x60: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, 256, GSA_32_BIT_SUB2); - break; - default: - // unsupported code - cheatsAdd(code, desc, address, address, value, 256, - UNKNOWN_CODE); - break; - } - break; - case 6: - address <<= 1; - type = (value >> 24) & 0xFF; - if(type == 0x00) { - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value & 0xFFFF, 256, - GSA_16_BIT_ROM_PATCH); - break; - } - // unsupported code - cheatsAdd(code, desc, address, address, value, 256, - UNKNOWN_CODE); - break; - case 8: - switch((address >> 20) & 15) { - case 1: - cheatsAdd(code, desc, address, address & 0x0F0FFFFF, value, 256, - GSA_8_BIT_GS_WRITE); - break; - case 2: - cheatsAdd(code, desc, address, address & 0x0F0FFFFF, value, 256, - GSA_16_BIT_GS_WRITE); - break; - case 4: - // This code is buggy : the value is always set to 0 ! - cheatsAdd(code, desc, address, address & 0x0F0FFFFF, 0, 256, - GSA_32_BIT_GS_WRITE); - break; - case 15: - cheatsAdd(code, desc, address, 0, value & 0xFFFF, 256, GSA_SLOWDOWN); - break; - default: - // unsupported code - cheatsAdd(code, desc, address, address, value, 256, - UNKNOWN_CODE); - break; - } - break; - case 0x0d: - if(address != 0xDEADFACE) { - switch((value >> 20) & 0xF) { - case 0: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value & 0xFFFF, 256, - CBA_IF_TRUE); - break; - case 1: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value & 0xFFFF, 256, - CBA_IF_FALSE); - break; - case 2: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value & 0xFFFF, 256, - GSA_16_BIT_IF_LOWER_OR_EQ_U); - break; - case 3: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value & 0xFFFF, 256, - GSA_16_BIT_IF_HIGHER_OR_EQ_U); - break; - default: - // unsupported code - cheatsAdd(code, desc, address, address, value, 256, - UNKNOWN_CODE); - break; - } - } else - cheatsAdd(code, desc, address, address, value, 256, - UNKNOWN_CODE); - break; - case 0x0e: - switch((value >> 28) & 0xF) { - case 0: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, address & 0xFFFF, 256, - GSA_16_BIT_MIF_TRUE); - break; - case 1: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, address & 0xFFFF, 256, - GSA_16_BIT_MIF_FALSE); - break; - case 2: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, address & 0xFFFF, 256, - GSA_16_BIT_MIF_LOWER_OR_EQ_U); - break; - case 3: - cheatsAdd(code, desc, address, value & 0x0FFFFFFF, address & 0xFFFF, 256, - GSA_16_BIT_MIF_HIGHER_OR_EQ_U); - break; - default: - // unsupported code - cheatsAdd(code, desc, address, address, value, 256, - UNKNOWN_CODE); - break; - } - break; - case 0x0f: - cheatsAdd(code, desc, address, (address & 0xFFFFFFF), value, 256, MASTER_CODE); - mastercode = (address & 0xFFFFFFF); - break; - default: - // unsupported code - cheatsAdd(code, desc, address, address, value, 256, - UNKNOWN_CODE); - break; - } - } -} - -bool cheatsImportGSACodeFile(const char *name, int game, bool v3) -{ - FILE *f = fopen(name, "rb"); - if(!f) - return false; - - int games = 0; - int len = 0; - fseek(f, 0x1e, SEEK_CUR); - fread(&games, 1, 4, f); - bool found = false; - int g = 0; - while(games > 0) { - if(g == game) { - found = true; - break; - } - fread(&len, 1, 4, f); - fseek(f,len,SEEK_CUR); - int codes = 0; - fread(&codes, 1, 4, f); - while(codes > 0) { - fread(&len, 1, 4, f); - fseek(f, len, SEEK_CUR); - fseek(f, 8, SEEK_CUR); - fread(&len, 1, 4, f); - fseek(f, len*12, SEEK_CUR); - codes--; - } - games--; - g++; - } - if(found) { - char desc[256]; - char code[17]; - fread(&len, 1, 4, f); - fseek(f, len, SEEK_CUR); - int codes = 0; - fread(&codes, 1, 4, f); - while(codes > 0) { - fread(&len, 1, 4, f); - fread(desc, 1, len, f); - desc[len] =0; - desc[31] = 0; - fread(&len, 1, 4, f); - fseek(f, len, SEEK_CUR); - fseek(f, 4, SEEK_CUR); - fread(&len, 1, 4, f); - while(len) { - fseek(f, 4, SEEK_CUR); - fread(code, 1, 8, f); - fseek(f, 4, SEEK_CUR); - fread(&code[8], 1, 8, f); - code[16] = 0; - cheatsAddGSACode(code, desc, v3); - len -= 2; - } - codes--; - } - } - fclose(f); - return false; -} - -void cheatsCBAReverseArray(u8 *array, u8 *dest) -{ - dest[0] = array[3]; - dest[1] = array[2]; - dest[2] = array[1]; - dest[3] = array[0]; - dest[4] = array[5]; - dest[5] = array[4]; -} - -void chatsCBAScramble(u8 *array, int count, u8 b) -{ - u8 *x = array + (count >> 3); - u8 *y = array + (b >> 3); - u32 z = *x & (1 << (count & 7)); - u32 x0 = (*x & (~(1 << (count & 7)))); - if (z != 0) - z = 1; - if ((*y & (1 << (b & 7))) != 0) - x0 |= (1 << (count & 7)); - *x = x0; - u32 temp = *y & (~(1 << (b & 7))); - if (z != 0) - temp |= (1 << (b & 7)); - *y = temp; -} - -u32 cheatsCBAGetValue(u8 *array) -{ - return array[0] | array[1]<<8 | array[2] << 16 | array[3]<<24; -} - -u16 cheatsCBAGetData(u8 *array) -{ - return array[4] | array[5]<<8; -} - -void cheatsCBAArrayToValue(u8 *array, u8 *dest) -{ - dest[0] = array[3]; - dest[1] = array[2]; - dest[2] = array[1]; - dest[3] = array[0]; - dest[4] = array[5]; - dest[5] = array[4]; -} - -void cheatsCBAParseSeedCode(u32 address, u32 value, u32 *array) -{ - array[0] = 1; - array[1] = value & 0xFF; - array[2] = (address >> 0x10) & 0xFF; - array[3] = (value >> 8) & 0xFF; - array[4] = (address >> 0x18) & 0x0F; - array[5] = address & 0xFFFF; - array[6] = address; - array[7] = value; -} - -u32 cheatsCBAEncWorker() -{ - u32 x = (cheatsCBATemporaryValue * 0x41c64e6d) + 0x3039; - u32 y = (x * 0x41c64e6d) + 0x3039; - u32 z = x >> 0x10; - x = ((y >> 0x10) & 0x7fff) << 0x0f; - z = (z << 0x1e) | x; - x = (y * 0x41c64e6d) + 0x3039; - cheatsCBATemporaryValue = x; - return z | ((x >> 0x10) & 0x7fff); -} - -#define ROR(v, s) \ - (((v) >> (s)) | (((v) & ((1 << (s))-1)) << (32 - (s)))) - -u32 cheatsCBACalcIndex(u32 x, u32 y) -{ - if(y != 0) { - if(y == 1) - x = 0; - else if(x == y) - x = 0; - if(y < 1) - return x; - else if(x < y) - return x; - u32 x0 = 1; - - while(y < 0x10000000) { - if(y < x) { - y = y << 4; - x0 = x0 << 4; - } else break; - } - - while(y < 0x80000000) { - if(y < x) { - y = y << 1; - x0 = x0 << 1; - } else break; - } - - loop: - u32 z = 0; - if(x >= y) - x -= y; - if(x >= (y >> 1)) { - x -= (y >> 1); - z |= ROR(x0, 1); - } - if(x >= (y >> 2)) { - x -= (y >> 2); - z |= ROR(x0, 2); - } - if(x >= (y >> 3)) { - x -= (y >> 3); - z |= ROR(x0, 3); - } - - u32 temp = x0; - - if(x != 0) { - x0 = x0 >> 4; - if(x0 != 0) { - y = y >> 4; - goto loop; - } - } - - z = z & 0xe0000000; - - if(z != 0) { - if((temp & 7) == 0) - return x; - } else - return x; - - if((z & ROR(temp, 3)) != 0) - x += y >> 3; - if((z & ROR(temp, 2)) != 0) - x += y >> 2; - if((z & ROR(temp, 1)) != 0) - x += y >> 1; - return x; - } else { - } - // should not happen in the current code - return 0; -} - -void cheatsCBAUpdateSeedBuffer(u32 a, u8 *buffer, int count) -{ - int i; - for(i = 0; i < count; i++) - buffer[i] = i; - for(i = 0; (u32)i < a; i++) { - u32 a = cheatsCBACalcIndex(cheatsCBAEncWorker(), count); - u32 b = cheatsCBACalcIndex(cheatsCBAEncWorker(), count); - u32 t = buffer[a]; - buffer[a] = buffer[b]; - buffer[b] = t; - } -} - -void cheatsCBAChangeEncryption(u32 *seed) -{ - int i; - - cheatsCBATemporaryValue = (seed[1] ^ 0x1111); - cheatsCBAUpdateSeedBuffer(0x50, cheatsCBASeedBuffer, 0x30); - cheatsCBATemporaryValue = 0x4efad1c3; - - for(i = 0; (u32)i < seed[4]; i++) { - cheatsCBATemporaryValue = cheatsCBAEncWorker(); - } - cheatsCBASeed[2] = cheatsCBAEncWorker(); - cheatsCBASeed[3] = cheatsCBAEncWorker(); - - cheatsCBATemporaryValue = seed[3] ^ 0xf254; - - for(i = 0; (u32)i < seed[3]; i++) { - cheatsCBATemporaryValue = cheatsCBAEncWorker(); - } - - cheatsCBASeed[0] = cheatsCBAEncWorker(); - cheatsCBASeed[1] = cheatsCBAEncWorker(); - - *((u32 *)&cheatsCBACurrentSeed[0]) = seed[6]; - *((u32 *)&cheatsCBACurrentSeed[4]) = seed[7]; - *((u32 *)&cheatsCBACurrentSeed[8]) = 0; -} - -u16 cheatsCBAGenValue(u32 x, u32 y, u32 z) -{ - y <<= 0x10; - z <<= 0x10; - x <<= 0x18; - u32 x0 = (int)y >> 0x10; - z = (int)z >> 0x10; - x = (int)x >> 0x10; - for(int i = 0; i < 8; i++) { - u32 temp = z ^ x; - if ((int)temp >= 0) { - temp = z << 0x11; - } - else { - temp = z << 0x01; - temp ^= x0; - temp = temp << 0x10; - } - z = (int)temp >> 0x10; - temp = x << 0x11; - x = (int)temp >> 0x10; - } - return z & 0xffff; -} - -void cheatsCBAGenTable() { - for (int i = 0; i < 0x100; i++) { - cheatsCBATable[i] = cheatsCBAGenValue(i, 0x1021, 0); - } - cheatsCBATableGenerated = true; -} - -u16 cheatsCBACalcCRC(u8 *rom, int count) -{ - u32 crc = 0xffffffff; - - if (count & 3) { - // 0x08000EAE - } else { - count = (count >> 2) - 1; - if(count != -1) { - while(count != -1) { - crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) - ^ *rom++]) << 0x10) >> 0x10; - crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) - ^ *rom++]) << 0x10) >> 0x10; - crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) - ^ *rom++]) << 0x10) >> 0x10; - crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) - ^ *rom++]) << 0x10) >> 0x10; - count--; - } - } - } - return crc & 0xffff; -} - -void cheatsCBADecrypt(u8 *decrypt) -{ - u8 buffer[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - u8 *array = &buffer[1]; - - cheatsCBAReverseArray(decrypt, array); - - for(int count = 0x2f; count >= 0; count--) { - chatsCBAScramble(array, count, cheatsCBASeedBuffer[count]); - } - cheatsCBAArrayToValue(array, decrypt); - *((u32 *)decrypt) = cheatsCBAGetValue(decrypt) ^ - cheatsCBASeed[0]; - *((u16 *)(decrypt+4)) = (cheatsCBAGetData(decrypt) ^ - cheatsCBASeed[1]) & 0xffff; - - cheatsCBAReverseArray(decrypt, array); - - u32 cs = cheatsCBAGetValue(cheatsCBACurrentSeed); - for(int i = 0; i <= 4; i++) { - array[i] = ((cs >> 8) ^ array[i+1]) ^ array[i] ; - } - - array[5] = (cs >> 8) ^ array[5]; - - for(int j = 5; j >=0; j--) { - array[j] = (cs ^ array[j-1]) ^ array[j]; - } - - cheatsCBAArrayToValue(array, decrypt); - - *((u32 *)decrypt) = cheatsCBAGetValue(decrypt) - ^ cheatsCBASeed[2]; - *((u16 *)(decrypt+4)) = (cheatsCBAGetData(decrypt) - ^ cheatsCBASeed[3]) & 0xffff; -} - -int cheatsCBAGetCount() -{ - int count = 0; - for(int i = 0; i < cheatsNumber; i++) { - if(cheatsList[i].code == 512) - count++; - } - return count; -} - -bool cheatsCBAShouldDecrypt() -{ - for(int i = 0; i < cheatsNumber; i++) { - if(cheatsList[i].code == 512) { - return (cheatsList[i].codestring[0] == '9'); - } - } - return false; -} - -void cheatsAddCBACode(const char *code, const char *desc) -{ - if(strlen(code) != 13) { - // wrong cheat - systemMessage(MSG_INVALID_CBA_CODE, - N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); - return; - } - - int i; - for(i = 0; i < 8; i++) { - if(!CHEAT_IS_HEX(code[i])) { - // wrong cheat - systemMessage(MSG_INVALID_CBA_CODE, - N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); - return; - } - } - - if(code[8] != ' ') { - systemMessage(MSG_INVALID_CBA_CODE, - N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); - return; - } - - for(i = 9; i < 13; i++) { - if(!CHEAT_IS_HEX(code[i])) { - // wrong cheat - systemMessage(MSG_INVALID_CBA_CODE, - N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); - return; - } - } - - char buffer[10]; - strncpy(buffer, code, 8); - buffer[8] = 0; - u32 address; - sscanf(buffer, "%x", &address); - strncpy(buffer, &code[9], 4); - buffer[4] = 0; - u32 value; - sscanf(buffer, "%x", &value); - - u8 array[8] = { - address & 255, - (address >> 8) & 255, - (address >> 16) & 255, - (address >> 24) & 255, - (value & 255), - (value >> 8) & 255, - 0, - 0 - }; - - if(cheatsCBAGetCount() == 0 && - (address >> 28) == 9) { - u32 seed[8]; - cheatsCBAParseSeedCode(address, value, seed); - cheatsCBAChangeEncryption(seed); - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, 512, UNKNOWN_CODE); - } else { - if(cheatsCBAShouldDecrypt()) - cheatsCBADecrypt(array); - - address = READ32LE(((u32 *)array)); - value = READ16LE(((u16 *)&array[4])); - - int type = (address >> 28) & 15; - - if(isMultilineWithData(cheatsNumber-1) || (super>0)) { - cheatsAdd(code, desc, address, address, value, 512, UNKNOWN_CODE); - if (super>0) - super-= 1; - return; - } - - switch(type) { - case 0x00: - { - if(!cheatsCBATableGenerated) - cheatsCBAGenTable(); - u32 crc = cheatsCBACalcCRC(rom, 0x10000); - if(crc != address) { - systemMessage(MSG_CBA_CODE_WARNING, - N_("Warning: Codes seem to be for a different game.\nCodes may not work correctly.")); - } - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, 512, - UNKNOWN_CODE); - } - break; - case 0x01: - cheatsAdd(code, desc, address, (address & 0x1FFFFFF) | 0x08000000, value, 512, MASTER_CODE); - mastercode = (address & 0x1FFFFFF) | 0x08000000; - break; - case 0x02: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_OR); - break; - case 0x03: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value, 512, - INT_8_BIT_WRITE); - break; - case 0x04: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_SLIDE_CODE); - break; - case 0x05: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_SUPER); - super = getCodeLength(cheatsNumber-1); - break; - case 0x06: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_AND); - break; - case 0x07: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_IF_TRUE); - break; - case 0x08: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - INT_16_BIT_WRITE); - break; - case 0x0a: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_IF_FALSE); - break; - case 0x0b: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_GT); - break; - case 0x0c: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - CBA_LT); - break; - case 0x0d: - if ((address & 0xF0)<0x30) - cheatsAdd(code, desc, address, address & 0xF0, value, 512, - CBA_IF_KEYS_PRESSED); - break; - case 0x0e: - cheatsAdd(code, desc, address, address & 0x0FFFFFFF, value & 0x8000 ? value | 0xFFFF0000 : value, 512, - CBA_ADD); - break; - case 0x0f: - cheatsAdd(code, desc, address, address & 0x0FFFFFFE, value, 512, - GSA_16_BIT_IF_AND); - break; - default: - // unsupported code - cheatsAdd(code, desc, address, address & 0xFFFFFFFF, value, 512, - UNKNOWN_CODE); - break; - } - } -} - -void cheatsSaveGame(gzFile file) -{ - utilWriteInt(file, cheatsNumber); - - utilGzWrite(file, cheatsList, sizeof(cheatsList)); -} - -void cheatsReadGame(gzFile file, int version) -{ - cheatsNumber = 0; - - cheatsNumber = utilReadInt(file); - - if (version > 8) - utilGzRead(file, cheatsList, sizeof(cheatsList)); - - - bool firstCodeBreaker = true; - - for(int i = 0; i < cheatsNumber; i++) { - if (version <9) - { - cheatsList[i].code = utilReadInt(file); - cheatsList[i].size = utilReadInt(file); - cheatsList[i].status = utilReadInt(file); - cheatsList[i].enabled = utilReadInt(file) ? true : false; - utilGzRead(file, &cheatsList[i].address, sizeof(u32)); - cheatsList[i].rawaddress = cheatsList[i].address; - utilGzRead(file, &cheatsList[i].value, sizeof(u32)); - utilGzRead(file, &cheatsList[i].oldValue, sizeof(u32)); - utilGzRead(file, &cheatsList[i].codestring, 20*sizeof(char)); - utilGzRead(file, &cheatsList[i].desc, 32*sizeof(char)); - } - - cheatsList[i].status = 0; - if(!cheatsList[i].codestring[0]) { - switch(cheatsList[i].size) { - case 0: - sprintf(cheatsList[i].codestring, "%08x:%02x", cheatsList[i].address, - cheatsList[i].value); - break; - case 1: - sprintf(cheatsList[i].codestring, "%08x:%04x", cheatsList[i].address, - cheatsList[i].value); - break; - case 2: - sprintf(cheatsList[i].codestring, "%08x:%08x", cheatsList[i].address, - cheatsList[i].value); - break; - } - } - - if(cheatsList[i].enabled) { - cheatsEnable(i); - } - - if(cheatsList[i].code == 512 && firstCodeBreaker) { - firstCodeBreaker = false; - char buffer[10]; - strncpy(buffer, cheatsList[i].codestring, 8); - buffer[8] = 0; - u32 address; - sscanf(buffer, "%x", &address); - if((address >> 28) == 9) { - strncpy(buffer, &cheatsList[i].codestring[9], 4); - buffer[4] = 0; - u32 value; - sscanf(buffer, "%x", &value); - - u32 seed[8]; - cheatsCBAParseSeedCode(address, value, seed); - cheatsCBAChangeEncryption(seed); - } - } - } -} - -void cheatsSaveCheatList(const char *file) -{ - if(cheatsNumber == 0) - return; - FILE *f = fopen(file, "wb"); - if(f == NULL) - return; - int version = 1; - fwrite(&version, 1, sizeof(version), f); - int type = 1; - fwrite(&type, 1, sizeof(type), f); - fwrite(&cheatsNumber, 1, sizeof(cheatsNumber), f); - fwrite(cheatsList, 1, sizeof(cheatsList), f); - fclose(f); -} - -bool cheatsLoadCheatList(const char *file) -{ - - int count = 0; - - FILE *f = fopen(file, "rb"); - - if(f == NULL) - return false; - - int version = 0; - - if(fread(&version, 1, sizeof(version), f) != sizeof(version)) { - fclose(f); - return false; - } - - if(version != 1) { - systemMessage(MSG_UNSUPPORTED_CHEAT_LIST_VERSION, - N_("Unsupported cheat list version %d"), version); - fclose(f); - return false; - } - - int type = 0; - if(fread(&type, 1, sizeof(type), f) != sizeof(type)) { - fclose(f); - return false; - } - - - if((type != 0) && (type != 1)) { - systemMessage(MSG_UNSUPPORTED_CHEAT_LIST_TYPE, - N_("Unsupported cheat list type %d"), type); - fclose(f); - return false; - } - - if(fread(&count, 1, sizeof(count), f) != sizeof(count)) { - fclose(f); - return false; - } - if (type == 1) - { - if(fread(cheatsList, 1, sizeof(cheatsList), f) != sizeof(cheatsList)) { - fclose(f); - return false; - } - } - else if (type == 0) - { - for(int i = 0; i < count; i++) { - fread(&cheatsList[i].code, 1, sizeof(int),f); - fread(&cheatsList[i].size, 1, sizeof(int),f); - fread(&cheatsList[i].status, 1, sizeof(int),f); - fread(&cheatsList[i].enabled, 1, sizeof(int),f); - cheatsList[i].enabled = cheatsList[i].enabled ? true : false; - fread(&cheatsList[i].address, 1, sizeof(u32),f); - cheatsList[i].rawaddress = cheatsList[i].address; - fread(&cheatsList[i].value, 1, sizeof(u32),f); - fread(&cheatsList[i].oldValue, 1, sizeof(u32),f); - fread(&cheatsList[i].codestring, 1, 20*sizeof(char),f); - if(fread(&cheatsList[i].desc, 1, 32*sizeof(char),f) != 32*sizeof(char)) { - fclose(f); - return false; - } - } - } - - bool firstCodeBreaker = true; - - for(int i = 0; i < count; i++) { - cheatsList[i].status = 0; // remove old status as it is not used - if(!cheatsList[i].codestring[0]) { - switch(cheatsList[i].size) { - case 0: - sprintf(cheatsList[i].codestring, "%08x:%02x", cheatsList[i].address, - cheatsList[i].value); - break; - case 1: - sprintf(cheatsList[i].codestring, "%08x:%04x", cheatsList[i].address, - cheatsList[i].value); - break; - case 2: - sprintf(cheatsList[i].codestring, "%08x:%08x", cheatsList[i].address, - cheatsList[i].value); - break; - } - } - - if(cheatsList[i].code == 512 && firstCodeBreaker) { - firstCodeBreaker = false; - char buffer[10]; - strncpy(buffer, cheatsList[i].codestring, 8); - buffer[8] = 0; - u32 address; - sscanf(buffer, "%x", &address); - if((address >> 28) == 9) { - strncpy(buffer, &cheatsList[i].codestring[9], 4); - buffer[4] = 0; - u32 value; - sscanf(buffer, "%x", &value); - - u32 seed[8]; - cheatsCBAParseSeedCode(address, value, seed); - cheatsCBAChangeEncryption(seed); - } - } - } - cheatsNumber = count; - fclose(f); - return true; -} - -extern int cpuNextEvent; - -extern void debuggerBreakOnWrite(u32 , u32, u32, int, int); - -#ifdef BKPT_SUPPORT -static u8 cheatsGetType(u32 address) -{ - switch(address >> 24) { - case 2: - return freezeWorkRAM[address & 0x3FFFF]; - case 3: - return freezeInternalRAM[address & 0x7FFF]; - case 5: - return freezePRAM[address & 0x3FC]; - case 6: - if (address > 0x06010000) - return freezeVRAM[address & 0x17FFF]; - else - return freezeVRAM[address & 0x1FFFF]; - case 7: - return freezeOAM[address & 0x3FC]; - } - return 0; -} -#endif - -void cheatsWriteMemory(u32 address, u32 value) -{ -#ifdef BKPT_SUPPORT -#ifdef SDL - if(cheatsNumber == 0) { - int type = cheatsGetType(address); - u32 oldValue = debuggerReadMemory(address); - if(type == 1 || (type == 2 && oldValue != value)) { - debuggerBreakOnWrite(address, oldValue, value, 2, type); - cpuNextEvent = 0; - } - debuggerWriteMemory(address, value); - } -#endif -#endif -} - -void cheatsWriteHalfWord(u32 address, u16 value) -{ -#ifdef BKPT_SUPPORT -#ifdef SDL - if(cheatsNumber == 0) { - int type = cheatsGetType(address); - u16 oldValue = debuggerReadHalfWord(address); - if(type == 1 || (type == 2 && oldValue != value)) { - debuggerBreakOnWrite(address, oldValue, value, 1, type); - cpuNextEvent = 0; - } - debuggerWriteHalfWord(address, value); - } -#endif -#endif -} - -#if defined BKPT_SUPPORT && defined SDL -void cheatsWriteByte(u32 address, u8 value) -#else -void cheatsWriteByte(u32, u8) -#endif -{ -#ifdef BKPT_SUPPORT -#ifdef SDL - if(cheatsNumber == 0) { - int type = cheatsGetType(address); - u8 oldValue = debuggerReadByte(address); - if(type == 1 || (type == 2 && oldValue != value)) { - debuggerBreakOnWrite(address, oldValue, value, 0, type); - cpuNextEvent = 0; - } - debuggerWriteByte(address, value); - } -#endif -#endif -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "sdfileio.h" +#include +#include +#include +#include + +#include "GBA.h" +#include "GBAinline.h" +#include "Cheats.h" +#include "Globals.h" +#include "NLS.h" +#include "Util.h" + +/** + * Gameshark code types: + * + * NNNNNNNN 001DC0DE - ID code for the game (game 4 character name) from ROM + * DEADFACE XXXXXXXX - changes decryption seeds + * 0AAAAAAA 000000YY - 8-bit constant write + * 1AAAAAAA 0000YYYY - 16-bit constant write + * 2AAAAAAA YYYYYYYY - 32-bit constant write + * 3AAAAAAA YYYYYYYY - ?? + * 6AAAAAAA 0000YYYY - 16-bit ROM Patch (address >> 1) + * 6AAAAAAA 1000YYYY - 16-bit ROM Patch ? (address >> 1) + * 6AAAAAAA 2000YYYY - 16-bit ROM Patch ? (address >> 1) + * 8A1AAAAA 000000YY - 8-bit button write + * 8A2AAAAA 0000YYYY - 16-bit button write + * 8A3AAAAA YYYYYYYY - 32-bit button write + * 80F00000 0000YYYY - button slow motion + * DAAAAAAA 0000YYYY - if address contains 16-bit value enable next code + * FAAAAAAA 0000YYYY - Master code function + * + * CodeBreaker codes types: + * + * 0000AAAA 000Y - Game CRC (Y are flags: 8 - CRC, 2 - DI) + * 1AAAAAAA YYYY - Master Code function (store address at ((YYYY << 0x16) + * + 0x08000100)) + * 2AAAAAAA YYYY - 16-bit or + * 3AAAAAAA YYYY - 8-bit constant write + * 4AAAAAAA YYYY - Slide code + * XXXXCCCC IIII (C is count and I is address increment, X is value incr.) + * 5AAAAAAA CCCC - Super code (Write bytes to address, CCCC is count) + * BBBBBBBB BBBB + * 6AAAAAAA YYYY - 16-bit and + * 7AAAAAAA YYYY - if address contains 16-bit value enable next code + * 8AAAAAAA YYYY - 16-bit constant write + * 9AAAAAAA YYYY - change decryption (when first code only?) + * AAAAAAAA YYYY - if address does not contain 16-bit value enable next code + * BAAAAAAA YYYY - if 16-bit < YYYY + * CAAAAAAA YYYY - if 16-bit > YYYY + * D0000020 YYYY - if button keys equal value enable next code + * EAAAAAAA YYYY - increase value stored in address + */ +#define UNKNOWN_CODE -1 +#define INT_8_BIT_WRITE 0 +#define INT_16_BIT_WRITE 1 +#define INT_32_BIT_WRITE 2 +#define GSA_16_BIT_ROM_PATCH 3 +#define GSA_8_BIT_GS_WRITE 4 +#define GSA_16_BIT_GS_WRITE 5 +#define GSA_32_BIT_GS_WRITE 6 +#define CBA_IF_KEYS_PRESSED 7 +#define CBA_IF_TRUE 8 +#define CBA_SLIDE_CODE 9 +#define CBA_IF_FALSE 10 +#define CBA_AND 11 +#define GSA_8_BIT_GS_WRITE2 12 +#define GSA_16_BIT_GS_WRITE2 13 +#define GSA_32_BIT_GS_WRITE2 14 +#define GSA_16_BIT_ROM_PATCH2 15 +#define GSA_8_BIT_SLIDE 16 +#define GSA_16_BIT_SLIDE 17 +#define GSA_32_BIT_SLIDE 18 +#define GSA_8_BIT_IF_TRUE 19 +#define GSA_32_BIT_IF_TRUE 20 +#define GSA_8_BIT_IF_FALSE 21 +#define GSA_32_BIT_IF_FALSE 22 +#define GSA_8_BIT_FILL 23 +#define GSA_16_BIT_FILL 24 +#define GSA_8_BIT_IF_TRUE2 25 +#define GSA_16_BIT_IF_TRUE2 26 +#define GSA_32_BIT_IF_TRUE2 27 +#define GSA_8_BIT_IF_FALSE2 28 +#define GSA_16_BIT_IF_FALSE2 29 +#define GSA_32_BIT_IF_FALSE2 30 +#define GSA_SLOWDOWN 31 +#define CBA_ADD 32 +#define CBA_OR 33 +#define CBA_LT 34 +#define CBA_GT 35 +#define CBA_SUPER 36 + +CheatsData cheatsList[100]; +int cheatsNumber = 0; + +u8 cheatsCBASeedBuffer[0x30]; +u32 cheatsCBASeed[4]; +u32 cheatsCBATemporaryValue = 0; +u16 cheatsCBATable[256]; +bool cheatsCBATableGenerated = false; + +u8 cheatsCBACurrentSeed[12] = { + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }; + +#define CHEAT_IS_HEX(a) ( ((a)>='A' && (a) <='F') || ((a) >='0' && (a) <= '9')) + +#define CHEAT_PATCH_ROM_16BIT(a,v) \ + WRITE16LE(((u16 *)&rom[(a) & 0x1ffffff]), v); + +static bool isMultilineWithData(int i) +{ + // we consider it a multiline code if it has more than one line of data + // otherwise, it can still be considered a single code + if(i < cheatsNumber && i >= 0) + switch(cheatsList[i].size) + { + case INT_8_BIT_WRITE: + case INT_16_BIT_WRITE: + case INT_32_BIT_WRITE: + case GSA_16_BIT_ROM_PATCH: + case GSA_8_BIT_GS_WRITE: + case GSA_16_BIT_GS_WRITE: + case GSA_32_BIT_GS_WRITE: + case CBA_AND: + case CBA_IF_KEYS_PRESSED: + case CBA_IF_TRUE: + case CBA_IF_FALSE: + case GSA_8_BIT_IF_TRUE: + case GSA_32_BIT_IF_TRUE: + case GSA_8_BIT_IF_FALSE: + case GSA_32_BIT_IF_FALSE: + case GSA_8_BIT_FILL: + case GSA_16_BIT_FILL: + case GSA_8_BIT_IF_TRUE2: + case GSA_16_BIT_IF_TRUE2: + case GSA_32_BIT_IF_TRUE2: + case GSA_8_BIT_IF_FALSE2: + case GSA_16_BIT_IF_FALSE2: + case GSA_32_BIT_IF_FALSE2: + case GSA_SLOWDOWN: + case CBA_ADD: + case CBA_OR: + return false; + // the codes below have two lines of data + case CBA_SLIDE_CODE: + case GSA_8_BIT_GS_WRITE2: + case GSA_16_BIT_GS_WRITE2: + case GSA_32_BIT_GS_WRITE2: + case GSA_16_BIT_ROM_PATCH2: + case GSA_8_BIT_SLIDE: + case GSA_16_BIT_SLIDE: + case GSA_32_BIT_SLIDE: + case CBA_LT: + case CBA_GT: + case CBA_SUPER: + return true; + } + return false; +} + +static int getCodeLength(int num) +{ + if(num >= cheatsNumber || num < 0) + return 1; + + // this is for all the codes that are true multiline + switch(cheatsList[num].size) + { + case INT_8_BIT_WRITE: + case INT_16_BIT_WRITE: + case INT_32_BIT_WRITE: + case GSA_16_BIT_ROM_PATCH: + case GSA_8_BIT_GS_WRITE: + case GSA_16_BIT_GS_WRITE: + case GSA_32_BIT_GS_WRITE: + case CBA_AND: + case GSA_8_BIT_FILL: + case GSA_16_BIT_FILL: + case GSA_SLOWDOWN: + case CBA_ADD: + case CBA_OR: + return 1; + case CBA_IF_KEYS_PRESSED: + case CBA_IF_TRUE: + case CBA_IF_FALSE: + case CBA_SLIDE_CODE: + case GSA_8_BIT_GS_WRITE2: + case GSA_16_BIT_GS_WRITE2: + case GSA_32_BIT_GS_WRITE2: + case GSA_16_BIT_ROM_PATCH2: + case GSA_8_BIT_SLIDE: + case GSA_16_BIT_SLIDE: + case GSA_32_BIT_SLIDE: + case GSA_8_BIT_IF_TRUE: + case GSA_32_BIT_IF_TRUE: + case GSA_8_BIT_IF_FALSE: + case GSA_32_BIT_IF_FALSE: + case CBA_LT: + case CBA_GT: + return 2; + case GSA_8_BIT_IF_TRUE2: + case GSA_16_BIT_IF_TRUE2: + case GSA_32_BIT_IF_TRUE2: + case GSA_8_BIT_IF_FALSE2: + case GSA_16_BIT_IF_FALSE2: + case GSA_32_BIT_IF_FALSE2: + return 3; + case CBA_SUPER: + return (cheatsList[num].value+5)/6; + } + return 1; +} + +int cheatsCheckKeys(u32 keys, u32 extended) +{ + int ticks = 0; + for(int i = 0; i < cheatsNumber; i++) + { + if(!cheatsList[i].enabled) + { + // make sure we skip other lines in this code + i += getCodeLength(i)-1; + continue; + } + switch(cheatsList[i].size) + { + case INT_8_BIT_WRITE: + CPUWriteByte(cheatsList[i].address, cheatsList[i].value); + break; + case INT_16_BIT_WRITE: + CPUWriteHalfWord(cheatsList[i].address, cheatsList[i].value); + break; + case INT_32_BIT_WRITE: + CPUWriteMemory(cheatsList[i].address, cheatsList[i].value); + break; + case GSA_16_BIT_ROM_PATCH: + if((cheatsList[i].status & 1) == 0) + { + if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) + { + cheatsList[i].oldValue = CPUReadHalfWord(cheatsList[i].address); + cheatsList[i].status |= 1; + CHEAT_PATCH_ROM_16BIT(cheatsList[i].address, cheatsList[i].value); + } + } + break; + case GSA_8_BIT_GS_WRITE: + if(extended & 4) + { + CPUWriteByte(cheatsList[i].address, cheatsList[i].value); + } + break; + case GSA_16_BIT_GS_WRITE: + if(extended & 4) + { + CPUWriteHalfWord(cheatsList[i].address, cheatsList[i].value); + } + break; + case GSA_32_BIT_GS_WRITE: + if(extended & 4) + { + CPUWriteMemory(cheatsList[i].address, cheatsList[i].value); + } + break; + case CBA_IF_KEYS_PRESSED: + { + u16 value = cheatsList[i].value; + u32 addr = cheatsList[i].address; + if((addr & 0x30) == 0x20) + { + if((keys & value) != value) + { + i++; + } + } + else if((addr & 0x30) == 0x10) + { + if((keys & value) == value) + { + i++; + } + } + } + break; + case CBA_IF_TRUE: + if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) + { + i++; + } + break; + case CBA_SLIDE_CODE: + { + u32 address = cheatsList[i].address; + u16 value = cheatsList[i].value; + i++; + if(i < cheatsNumber) + { + int count = (cheatsList[i].address & 0xFFFF); + u16 vinc = (cheatsList[i].address >> 16) & 0xFFFF; + int inc = cheatsList[i].value; + + for(int x = 0; x < count; x++) + { + CPUWriteHalfWord(address, value); + address += inc; + value += vinc; + } + } + } + break; + case CBA_IF_FALSE: + if(CPUReadHalfWord(cheatsList[i].address) == cheatsList[i].value) + { + i++; + } + break; + case CBA_AND: + CPUWriteHalfWord(cheatsList[i].address, + CPUReadHalfWord(cheatsList[i].address) & + cheatsList[i].value); + break; + case GSA_8_BIT_GS_WRITE2: + i++; + if(i < cheatsNumber) + { + if(extended & 4) + { + CPUWriteByte(cheatsList[i-1].value, cheatsList[i].address); + } + } + break; + case GSA_16_BIT_GS_WRITE2: + i++; + if(i < cheatsNumber) + { + if(extended & 4) + { + CPUWriteHalfWord(cheatsList[i-1].value, cheatsList[i].address); + } + } + break; + case GSA_32_BIT_GS_WRITE2: + i++; + if(i < cheatsNumber) + { + if(extended & 4) + { + CPUWriteMemory(cheatsList[i-1].value, cheatsList[i].address); + } + } + break; + case GSA_16_BIT_ROM_PATCH2: + i++; + if(i < cheatsNumber) + { + if((cheatsList[i-1].status & 1) == 0) + { + u32 addr = ((cheatsList[i-1].value & 0x00FFFFFF) << 1) + 0x8000000; + if(CPUReadHalfWord(addr) != (cheatsList[i].address & 0xFFFF)) + { + cheatsList[i-1].oldValue = CPUReadHalfWord(addr); + cheatsList[i-1].status |= 1; + CHEAT_PATCH_ROM_16BIT(addr,cheatsList[i].address & 0xFFFF); + } + } + } + break; + case GSA_8_BIT_SLIDE: + i++; + if(i < cheatsNumber) + { + u32 addr = cheatsList[i-1].value; + u8 value = cheatsList[i].address; + int vinc = (cheatsList[i].value >> 24) & 255; + int count = (cheatsList[i].value >> 16) & 255; + int ainc = (cheatsList[i].value & 0xffff); + while(count > 0) + { + CPUWriteByte(addr, value); + value += vinc; + addr += ainc; + count--; + } + } + break; + case GSA_16_BIT_SLIDE: + i++; + if(i < cheatsNumber) + { + u32 addr = cheatsList[i-1].value; + u16 value = cheatsList[i].address; + int vinc = (cheatsList[i].value >> 24) & 255; + int count = (cheatsList[i].value >> 16) & 255; + int ainc = (cheatsList[i].value & 0xffff)*2; + while(count > 0) + { + CPUWriteHalfWord(addr, value); + value += vinc; + addr += ainc; + count--; + } + } + break; + case GSA_32_BIT_SLIDE: + i++; + if(i < cheatsNumber) + { + u32 addr = cheatsList[i-1].value; + u32 value = cheatsList[i].address; + int vinc = (cheatsList[i].value >> 24) & 255; + int count = (cheatsList[i].value >> 16) & 255; + int ainc = (cheatsList[i].value & 0xffff)*4; + while(count > 0) + { + CPUWriteMemory(addr, value); + value += vinc; + addr += ainc; + count--; + } + } + break; + case GSA_8_BIT_IF_TRUE: + if(CPUReadByte(cheatsList[i].address) != cheatsList[i].value) + { + i++; + } + break; + case GSA_32_BIT_IF_TRUE: + if(CPUReadMemory(cheatsList[i].address) != cheatsList[i].value) + { + i++; + } + break; + case GSA_8_BIT_IF_FALSE: + if(CPUReadByte(cheatsList[i].address) == cheatsList[i].value) + { + i++; + } + break; + case GSA_32_BIT_IF_FALSE: + if(CPUReadMemory(cheatsList[i].address) == cheatsList[i].value) + { + i++; + } + break; + case GSA_8_BIT_FILL: + { + u32 addr = cheatsList[i].address; + u8 v = cheatsList[i].value & 0xff; + u32 end = addr + (cheatsList[i].value >> 8); + do + { + CPUWriteByte(addr, v); + addr++; + } + while (addr <= end); + } + break; + case GSA_16_BIT_FILL: + { + u32 addr = cheatsList[i].address; + u16 v = cheatsList[i].value & 0xffff; + u32 end = addr + ((cheatsList[i].value >> 16) << 1); + do + { + CPUWriteHalfWord(addr, v); + addr+=2; + } + while (addr <= end); + } + break; + case GSA_8_BIT_IF_TRUE2: + if(CPUReadByte(cheatsList[i].address) != cheatsList[i].value) + { + i+=2; + } + break; + case GSA_16_BIT_IF_TRUE2: + if(CPUReadHalfWord(cheatsList[i].address) != cheatsList[i].value) + { + i+=2; + } + break; + case GSA_32_BIT_IF_TRUE2: + if(CPUReadMemory(cheatsList[i].address) != cheatsList[i].value) + { + i+=2; + } + break; + case GSA_8_BIT_IF_FALSE2: + if(CPUReadByte(cheatsList[i].address) == cheatsList[i].value) + { + i+=2; + } + break; + case GSA_16_BIT_IF_FALSE2: + if(CPUReadHalfWord(cheatsList[i].address) == cheatsList[i].value) + { + i+=2; + } + break; + case GSA_32_BIT_IF_FALSE2: + if(CPUReadMemory(cheatsList[i].address) == cheatsList[i].value) + { + i+=2; + } + break; + case GSA_SLOWDOWN: + // check if button was pressed and released, if so toggle our state + if((cheatsList[i].status & 4) && !(extended & 4)) + cheatsList[i].status ^= 1; + if(extended & 4) + cheatsList[i].status |= 4; + else + cheatsList[i].status &= ~4; + + if(cheatsList[i].status & 1) + ticks += 2*256*((cheatsList[i].value >> 8) & 255); + break; + case CBA_ADD: + CPUWriteHalfWord(cheatsList[i].address, + CPUReadHalfWord(cheatsList[i].address) + + (u16)cheatsList[i].value); + break; + case CBA_OR: + CPUWriteHalfWord(cheatsList[i].address, + CPUReadHalfWord(cheatsList[i].address) | + cheatsList[i].value); + break; + case CBA_LT: + if(CPUReadHalfWord(cheatsList[i].address) >= cheatsList[i].value) + i++; + break; + case CBA_GT: + if(CPUReadHalfWord(cheatsList[i].address) <= cheatsList[i].value) + i++; + break; + case CBA_SUPER: + { + int count = 2*cheatsList[i].value; + u32 address = cheatsList[i].address; + for(int x = 0; x < count; x++) + { + u8 b; + int res = x % 6; + if(res < 4) + b = (cheatsList[i].address >> (24-8*res)) & 0xFF; + else + b = (cheatsList[i].value >> (8 - 8*(res-4))) & 0x0FF; + CPUWriteByte(address, b); + address++; + if(x && !res) + i++; + } + if(count % 6) + i++; + } + break; + } + } + return ticks; +} + +void cheatsAdd(const char *codeStr, + const char *desc, + u32 address, + u32 value, + int code, + int size) +{ + if(cheatsNumber < 100) + { + int x = cheatsNumber; + cheatsList[x].code = code; + cheatsList[x].size = size; + cheatsList[x].address = address; + cheatsList[x].value = value; + strcpy(cheatsList[x].codestring, codeStr); + strcpy(cheatsList[x].desc, desc); + cheatsList[x].enabled = true; + cheatsList[x].status = 0; + + // we only store the old value for this simple codes. ROM patching + // is taken care when it actually patches the ROM + switch(cheatsList[x].size) + { + case INT_8_BIT_WRITE: + cheatsList[x].oldValue = CPUReadByte(address); + break; + case INT_16_BIT_WRITE: + cheatsList[x].oldValue = CPUReadHalfWord(address); + break; + case INT_32_BIT_WRITE: + cheatsList[x].oldValue = CPUReadMemory(address); + break; + } + cheatsNumber++; + } +} + +void cheatsDelete(int number, bool restore) +{ + if(number < cheatsNumber && number >= 0) + { + int x = number; + + if(restore) + { + switch(cheatsList[x].size) + { + case INT_8_BIT_WRITE: + CPUWriteByte(cheatsList[x].address, (u8)cheatsList[x].oldValue); + break; + case INT_16_BIT_WRITE: + CPUWriteHalfWord(cheatsList[x].address, (u16)cheatsList[x].oldValue); + break; + case INT_32_BIT_WRITE: + CPUWriteMemory(cheatsList[x].address, cheatsList[x].oldValue); + break; + case GSA_16_BIT_ROM_PATCH: + if(cheatsList[x].status & 1) + { + cheatsList[x].status &= ~1; + CHEAT_PATCH_ROM_16BIT(cheatsList[x].address, + cheatsList[x].oldValue); + } + break; + case GSA_16_BIT_ROM_PATCH2: + if(cheatsList[x].status & 1) + { + cheatsList[x].status &= ~1; + CHEAT_PATCH_ROM_16BIT(((cheatsList[x].value & 0x00FFFFFF) << 1)+ + 0x8000000, + cheatsList[x].oldValue); + } + break; + } + } + if((x+1) < cheatsNumber) + { + memcpy(&cheatsList[x], &cheatsList[x+1], sizeof(CheatsData)* + (cheatsNumber-x-1)); + } + cheatsNumber--; + } +} + +void cheatsDeleteAll(bool restore) +{ + for(int i = cheatsNumber-1; i >= 0; i--) + { + cheatsDelete(i, restore); + } +} + +void cheatsEnable(int i) +{ + if(i >= 0 && i < cheatsNumber) + { + cheatsList[i].enabled = true; + } +} + +void cheatsDisable(int i) +{ + if(i >= 0 && i < cheatsNumber) + { + switch(cheatsList[i].size) + { + case GSA_16_BIT_ROM_PATCH: + if(cheatsList[i].status & 1) + { + cheatsList[i].status &= ~1; + CHEAT_PATCH_ROM_16BIT(cheatsList[i].address, + cheatsList[i].oldValue); + } + break; + case GSA_16_BIT_ROM_PATCH2: + if(cheatsList[i].status & 1) + { + cheatsList[i].status &= ~1; + CHEAT_PATCH_ROM_16BIT(((cheatsList[i].value & 0x00FFFFFF) << 1)+ + 0x8000000, + cheatsList[i].oldValue); + } + break; + } + cheatsList[i].enabled = false; + } +} + +bool cheatsVerifyCheatCode(const char *code, const char *desc) +{ + int len = strlen(code); + if(len != 11 && len != 13 && len != 17) + { + systemMessage(MSG_INVALID_CHEAT_CODE, N_("Invalid cheat code '%s'"), code); + return false; + } + + if(code[8] != ':') + { + systemMessage(MSG_INVALID_CHEAT_CODE, N_("Invalid cheat code '%s'"), code); + return false; + } + + int i; + for(i = 0; i < 8; i++) + { + if(!CHEAT_IS_HEX(code[i])) + { + // wrong cheat + systemMessage(MSG_INVALID_CHEAT_CODE, + N_("Invalid cheat code '%s'"), code); + return false; + } + } + for(i = 9; i < len; i++) + { + if(!CHEAT_IS_HEX(code[i])) + { + // wrong cheat + systemMessage(MSG_INVALID_CHEAT_CODE, + N_("Invalid cheat code '%s'"), code); + return false; + } + } + + u32 address = 0; + u32 value = 0; + + char buffer[10]; + strncpy(buffer, code, 8); + buffer[8] = 0; + sscanf(buffer, "%x", &address); + + switch(address >> 24) + { + case 2: + case 3: + break; + default: + systemMessage(MSG_INVALID_CHEAT_CODE_ADDRESS, + N_("Invalid cheat code address: %08x"), + address); + return false; + } + + strncpy(buffer, &code[9], 8); + sscanf(buffer, "%x", &value); + int type = 0; + if(len == 13) + type = 1; + if(len == 17) + type = 2; + cheatsAdd(code, desc, address, value, type, type); + return true; +} + +void cheatsAddCheatCode(const char *code, const char *desc) +{ + cheatsVerifyCheatCode(code, desc); +} + +void cheatsDecryptGSACode(u32& address, u32& value, bool v3) +{ + u32 rollingseed = 0xC6EF3720; + u32 seeds_v1[] = { 0x09F4FBBD, 0x9681884A, 0x352027E9, 0xF3DEE5A7 }; + u32 seeds_v3[] = { 0x7AA9648F, 0x7FAE6994, 0xC0EFAAD5, 0x42712C57 }; + u32 *seeds = v3 ? seeds_v3 : seeds_v1; + + int bitsleft = 32; + while (bitsleft > 0) + { + value -= ((((address << 4) + seeds[2]) ^ (address + rollingseed)) ^ + ((address >> 5) + seeds[3])); + address -= ((((value << 4) + seeds[0]) ^ (value + rollingseed)) ^ + ((value >> 5) + seeds[1])); + rollingseed -= 0x9E3779B9; + bitsleft--; + } +} + +void cheatsAddGSACode(const char *code, const char *desc, bool v3) +{ + if(strlen(code) != 16) + { + // wrong cheat + systemMessage(MSG_INVALID_GSA_CODE, + N_("Invalid GSA code. Format is XXXXXXXXYYYYYYYY")); + return; + } + + int i; + for(i = 0; i < 16; i++) + { + if(!CHEAT_IS_HEX(code[i])) + { + // wrong cheat + systemMessage(MSG_INVALID_GSA_CODE, + N_("Invalid GSA code. Format is XXXXXXXXYYYYYYYY")); + return; + } + } + + char buffer[10]; + strncpy(buffer, code, 8); + buffer[8] = 0; + u32 address; + sscanf(buffer, "%x", &address); + strncpy(buffer, &code[8], 8); + buffer[8] = 0; + u32 value; + sscanf(buffer, "%x", &value); + + cheatsDecryptGSACode(address, value, v3); + + if(value == 0x1DC0DE) + { + u32 gamecode = READ32LE(((u32 *)&rom[0xac])); + if(gamecode != address) + { + char buffer[5]; + *((u32 *)buffer) = address; + buffer[4] = 0; + char buffer2[5]; + *((u32 *)buffer2) = READ32LE(((u32 *)&rom[0xac])); + buffer2[4] = 0; + systemMessage(MSG_GBA_CODE_WARNING, N_("Warning: cheats are for game %s. Current game is %s.\nCodes may not work correctly."), + buffer, buffer2); + } + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, v3 ? 257 : 256, + UNKNOWN_CODE); + return; + } + if(isMultilineWithData(cheatsNumber-1)) + { + cheatsAdd(code, desc, address, value, v3 ? 257 : 256, UNKNOWN_CODE); + return; + } + if(v3) + { + int type = (address >> 25) & 127; + u32 addr = (address & 0x00F00000) << 4 | (address & 0x0003FFFF); + switch(type) + { + case 0x00: + if(address == 0) + { + type = (value >> 25) & 127; + addr = (value & 0x00F00000) << 4 | (value & 0x0003FFFF); + switch(type) + { + case 0x04: + cheatsAdd(code, desc, 0, value & 0x00FFFFFF, 257, GSA_SLOWDOWN); + break; + case 0x08: + cheatsAdd(code, desc, 0, addr, 257, GSA_8_BIT_GS_WRITE2); + break; + case 0x09: + cheatsAdd(code, desc, 0, addr, 257, GSA_16_BIT_GS_WRITE2); + break; + case 0x0a: + cheatsAdd(code, desc, 0, addr, 257, GSA_32_BIT_GS_WRITE2); + break; + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + cheatsAdd(code, desc, 0, value & 0x00FFFFFF, 257, GSA_16_BIT_ROM_PATCH2); + break; + case 0x40: + cheatsAdd(code, desc, 0, addr, 257, GSA_8_BIT_SLIDE); + break; + case 0x41: + cheatsAdd(code, desc, 0, addr, 257, GSA_16_BIT_SLIDE); + break; + case 0x42: + cheatsAdd(code, desc, 0, addr, 257, GSA_32_BIT_SLIDE); + break; + default: + cheatsAdd(code, desc, address, value, 257, UNKNOWN_CODE); + break; + } + } + else + cheatsAdd(code, desc, addr, value, 257, GSA_8_BIT_FILL); + break; + case 0x01: + cheatsAdd(code, desc, addr, value, 257, GSA_16_BIT_FILL); + break; + case 0x02: + cheatsAdd(code, desc, addr, value, 257, INT_32_BIT_WRITE); + break; + case 0x04: + cheatsAdd(code, desc, addr, value, 257, GSA_8_BIT_IF_TRUE); + break; + case 0x05: + cheatsAdd(code, desc, addr, value, 257, CBA_IF_TRUE); + break; + case 0x06: + cheatsAdd(code, desc, addr, value, 257, GSA_32_BIT_IF_TRUE); + break; + case 0x08: + cheatsAdd(code, desc, addr, value, 257, GSA_8_BIT_IF_FALSE); + break; + case 0x09: + cheatsAdd(code, desc, addr, value, 257, CBA_IF_FALSE); + break; + case 0x0a: + cheatsAdd(code, desc, addr, value, 257, GSA_32_BIT_IF_FALSE); + break; + case 0x24: + cheatsAdd(code, desc, addr, value, 257, GSA_8_BIT_IF_TRUE2); + break; + case 0x25: + cheatsAdd(code, desc, addr, value, 257, GSA_16_BIT_IF_TRUE2); + break; + case 0x26: + cheatsAdd(code, desc, addr, value, 257, GSA_32_BIT_IF_TRUE2); + break; + case 0x28: + cheatsAdd(code, desc, addr, value, 257, GSA_8_BIT_IF_FALSE2); + break; + case 0x29: + cheatsAdd(code, desc, addr, value, 257, GSA_16_BIT_IF_FALSE2); + break; + case 0x2a: + cheatsAdd(code, desc, addr, value, 257, GSA_32_BIT_IF_FALSE2); + break; + default: + cheatsAdd(code, desc, address, value, 257, UNKNOWN_CODE); + break; + } + } + else + { + int type = (address >> 28) & 15; + switch(type) + { + case 0: + case 1: + case 2: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 256, type); + break; + case 6: + address <<= 1; + type = (address >> 28) & 15; + if(type == 0x0c) + { + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 256, + GSA_16_BIT_ROM_PATCH); + break; + } + // unsupported code + cheatsAdd(code, desc, address, value, 256, + UNKNOWN_CODE); + break; + case 8: + switch((address >> 20) & 15) + { + case 1: + cheatsAdd(code, desc, address & 0x0F0FFFFF, value, 256, + GSA_8_BIT_GS_WRITE); + break; + case 2: + cheatsAdd(code, desc, address & 0x0F0FFFFF, value, 256, + GSA_16_BIT_GS_WRITE); + break; + case 3: + cheatsAdd(code, desc, address & 0x0F0FFFFF, value, 256, + GSA_32_BIT_GS_WRITE); + case 15: + cheatsAdd(code, desc, 0, value & 0xFF00, 256, GSA_SLOWDOWN); + break; + default: + // unsupported code + cheatsAdd(code, desc, address, value, 256, + UNKNOWN_CODE); + break; + } + break; + case 0x0d: + if(address != 0xDEADFACE) + { + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 256, + CBA_IF_TRUE); + } + else + cheatsAdd(code, desc, address, value, 256, + UNKNOWN_CODE); + break; + default: + // unsupported code + cheatsAdd(code, desc, address, value, 256, + UNKNOWN_CODE); + break; + } + } +} + +bool cheatsImportGSACodeFile(const char *name, int game, bool v3) +{ + FILE* f = gen_fopen(name, "rb"); + if(!f) + return false; + + int games = 0; + int len = 0; + gen_fseek(f, 0x1e, SEEK_CUR); + gen_fread(&games, 1, 4, f); + bool found = false; + int g = 0; + while(games > 0) + { + if(g == game) + { + found = true; + break; + } + gen_fread(&len, 1, 4, f); + gen_fseek(f,len,SEEK_CUR); + int codes = 0; + gen_fread(&codes, 1, 4, f); + while(codes > 0) + { + gen_fread(&len, 1, 4, f); + gen_fseek(f, len, SEEK_CUR); + gen_fseek(f, 8, SEEK_CUR); + gen_fread(&len, 1, 4, f); + gen_fseek(f, len*12, SEEK_CUR); + codes--; + } + games--; + g++; + } + if(found) + { + char desc[256]; + char code[17]; + gen_fread(&len, 1, 4, f); + gen_fseek(f, len, SEEK_CUR); + int codes = 0; + gen_fread(&codes, 1, 4, f); + while(codes > 0) + { + gen_fread(&len, 1, 4, f); + gen_fread(desc, 1, len, f); + desc[len] =0; + desc[31] = 0; + gen_fread(&len, 1, 4, f); + gen_fseek(f, len, SEEK_CUR); + gen_fseek(f, 4, SEEK_CUR); + gen_fread(&len, 1, 4, f); + while(len) + { + gen_fseek(f, 4, SEEK_CUR); + gen_fread(code, 1, 8, f); + gen_fseek(f, 4, SEEK_CUR); + gen_fread(&code[8], 1, 8, f); + code[16] = 0; + cheatsAddGSACode(code, desc, v3); + len -= 2; + } + codes--; + } + } + gen_fclose(f); + return false; +} + +void cheatsCBAReverseArray(u8 *array, u8 *dest) +{ + dest[0] = array[3]; + dest[1] = array[2]; + dest[2] = array[1]; + dest[3] = array[0]; + dest[4] = array[5]; + dest[5] = array[4]; +} + +void chatsCBAScramble(u8 *array, int count, u8 b) +{ + u8 *x = array + (count >> 3); + u8 *y = array + (b >> 3); + u32 z = *x & (1 << (count & 7)); + u32 x0 = (*x & (~(1 << (count & 7)))); + if (z != 0) + z = 1; + if ((*y & (1 << (b & 7))) != 0) + x0 |= (1 << (count & 7)); + *x = x0; + u32 temp = *y & (~(1 << (b & 7))); + if (z != 0) + temp |= (1 << (b & 7)); + *y = temp; +} + +u32 cheatsCBAGetValue(u8 *array) +{ + return array[0] | array[1]<<8 | array[2] << 16 | array[3]<<24; +} + +u16 cheatsCBAGetData(u8 *array) +{ + return array[4] | array[5]<<8; +} + +void cheatsCBAArrayToValue(u8 *array, u8 *dest) +{ + dest[0] = array[3]; + dest[1] = array[2]; + dest[2] = array[1]; + dest[3] = array[0]; + dest[4] = array[5]; + dest[5] = array[4]; +} + +void cheatsCBAParseSeedCode(u32 address, u32 value, u32 *array) +{ + array[0] = 1; + array[1] = value & 0xFF; + array[2] = (address >> 0x10) & 0xFF; + array[3] = (value >> 8) & 0xFF; + array[4] = (address >> 0x18) & 0x0F; + array[5] = address & 0xFFFF; + array[6] = address; + array[7] = value; +} + +u32 cheatsCBAEncWorker() +{ + u32 x = (cheatsCBATemporaryValue * 0x41c64e6d) + 0x3039; + u32 y = (x * 0x41c64e6d) + 0x3039; + u32 z = x >> 0x10; + x = ((y >> 0x10) & 0x7fff) << 0x0f; + z = (z << 0x1e) | x; + x = (y * 0x41c64e6d) + 0x3039; + cheatsCBATemporaryValue = x; + return z | ((x >> 0x10) & 0x7fff); +} + +#define ROR(v, s) \ + (((v) >> (s)) | (((v) & ((1 << (s))-1)) << (32 - (s)))) + +u32 cheatsCBACalcIndex(u32 x, u32 y) +{ + if(y != 0) + { + if(y == 1) + x = 0; + else if(x == y) + x = 0; + if(y < 1) + return x; + else if(x < y) + return x; + u32 x0 = 1; + + while(y < 0x10000000) + { + if(y < x) + { + y = y << 4; + x0 = x0 << 4; + } + else break; + } + + while(y < 0x80000000) + { + if(y < x) + { + y = y << 1; + x0 = x0 << 1; + } + else break; + } + +loop: + u32 z = 0; + if(x >= y) + x -= y; + if(x >= (y >> 1)) + { + x -= (y >> 1); + z |= ROR(x0, 1); + } + if(x >= (y >> 2)) + { + x -= (y >> 2); + z |= ROR(x0, 2); + } + if(x >= (y >> 3)) + { + x -= (y >> 3); + z |= ROR(x0, 3); + } + + u32 temp = x0; + + if(x != 0) + { + x0 = x0 >> 4; + if(x0 != 0) + { + y = y >> 4; + goto loop; + } + } + + z = z & 0xe0000000; + + if(z != 0) + { + if((temp & 7) == 0) + return x; + } + else + return x; + + if((z & ROR(temp, 3)) != 0) + x += y >> 3; + if((z & ROR(temp, 2)) != 0) + x += y >> 2; + if((z & ROR(temp, 1)) != 0) + x += y >> 1; + return x; + } + else + {} + // should not happen in the current code + return 0; +} + +void cheatsCBAUpdateSeedBuffer(u32 a, u8 *buffer, int count) +{ + int i; + for(i = 0; i < count; i++) + buffer[i] = i; + for(i = 0; (u32)i < a; i++) + { + u32 a = cheatsCBACalcIndex(cheatsCBAEncWorker(), count); + u32 b = cheatsCBACalcIndex(cheatsCBAEncWorker(), count); + u32 t = buffer[a]; + buffer[a] = buffer[b]; + buffer[b] = t; + } +} + +void cheatsCBAChangeEncryption(u32 *seed) +{ + int i; + + cheatsCBATemporaryValue = (seed[1] ^ 0x1111); + cheatsCBAUpdateSeedBuffer(0x50, cheatsCBASeedBuffer, 0x30); + cheatsCBATemporaryValue = 0x4efad1c3; + + for(i = 0; (u32)i < seed[4]; i++) + { + cheatsCBATemporaryValue = cheatsCBAEncWorker(); + } + cheatsCBASeed[2] = cheatsCBAEncWorker(); + cheatsCBASeed[3] = cheatsCBAEncWorker(); + + cheatsCBATemporaryValue = seed[3] ^ 0xf254; + + for(i = 0; (u32)i < seed[3]; i++) + { + cheatsCBATemporaryValue = cheatsCBAEncWorker(); + } + + cheatsCBASeed[0] = cheatsCBAEncWorker(); + cheatsCBASeed[1] = cheatsCBAEncWorker(); + + *((u32 *)&cheatsCBACurrentSeed[0]) = seed[6]; + *((u32 *)&cheatsCBACurrentSeed[4]) = seed[7]; + *((u32 *)&cheatsCBACurrentSeed[8]) = 0; +} + +u16 cheatsCBAGenValue(u32 x, u32 y, u32 z) +{ + y <<= 0x10; + z <<= 0x10; + x <<= 0x18; + u32 x0 = (int)y >> 0x10; + z = (int)z >> 0x10; + x = (int)x >> 0x10; + for(int i = 0; i < 8; i++) + { + u32 temp = z ^ x; + if ((int)temp >= 0) + { + temp = z << 0x11; + } + else + { + temp = z << 0x01; + temp ^= x0; + temp = temp << 0x10; + } + z = (int)temp >> 0x10; + temp = x << 0x11; + x = (int)temp >> 0x10; + } + return z & 0xffff; +} + +void cheatsCBAGenTable() +{ + for (int i = 0; i < 0x100; i++) + { + cheatsCBATable[i] = cheatsCBAGenValue(i, 0x1021, 0); + } + cheatsCBATableGenerated = true; +} + +u16 cheatsCBACalcCRC(u8 *rom, int count) +{ + u32 crc = 0xffffffff; + + if (count & 3) + { + // 0x08000EAE + } + else + { + count = (count >> 2) - 1; + if(count != -1) + { + while(count != -1) + { + crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) + ^ *rom++]) << 0x10) >> 0x10; + crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) + ^ *rom++]) << 0x10) >> 0x10; + crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) + ^ *rom++]) << 0x10) >> 0x10; + crc = (((crc << 0x08) ^ cheatsCBATable[(((u32)crc << 0x10) >> 0x18) + ^ *rom++]) << 0x10) >> 0x10; + count--; + } + } + } + return crc & 0xffff; +} + +void cheatsCBADecrypt(u8 *decrypt) +{ + u8 buffer[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + u8 *array = &buffer[1]; + + cheatsCBAReverseArray(decrypt, array); + + for(int count = 0x2f; count >= 0; count--) + { + chatsCBAScramble(array, count, cheatsCBASeedBuffer[count]); + } + cheatsCBAArrayToValue(array, decrypt); + *((u32 *)decrypt) = cheatsCBAGetValue(decrypt) ^ + cheatsCBASeed[0]; + *((u16 *)(decrypt+4)) = (cheatsCBAGetData(decrypt) ^ + cheatsCBASeed[1]) & 0xffff; + + cheatsCBAReverseArray(decrypt, array); + + u32 cs = cheatsCBAGetValue(cheatsCBACurrentSeed); + for(int i = 0; i <= 4; i++) + { + array[i] = ((cs >> 8) ^ array[i+1]) ^ array[i] ; + } + + array[5] = (cs >> 8) ^ array[5]; + + for(int j = 5; j >=0; j--) + { + array[j] = (cs ^ array[j-1]) ^ array[j]; + } + + cheatsCBAArrayToValue(array, decrypt); + + *((u32 *)decrypt) = cheatsCBAGetValue(decrypt) + ^ cheatsCBASeed[2]; + *((u16 *)(decrypt+4)) = (cheatsCBAGetData(decrypt) + ^ cheatsCBASeed[3]) & 0xffff; +} + +int cheatsCBAGetCount() +{ + int count = 0; + for(int i = 0; i < cheatsNumber; i++) + { + if(cheatsList[i].code == 512) + count++; + } + return count; +} + +bool cheatsCBAShouldDecrypt() +{ + for(int i = 0; i < cheatsNumber; i++) + { + if(cheatsList[i].code == 512) + { + return (cheatsList[i].codestring[0] == '9'); + } + } + return false; +} + +void cheatsAddCBACode(const char *code, const char *desc) +{ + if(strlen(code) != 13) + { + // wrong cheat + systemMessage(MSG_INVALID_CBA_CODE, + N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); + return; + } + + int i; + for(i = 0; i < 8; i++) + { + if(!CHEAT_IS_HEX(code[i])) + { + // wrong cheat + systemMessage(MSG_INVALID_CBA_CODE, + N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); + return; + } + } + + if(code[8] != ' ') + { + systemMessage(MSG_INVALID_CBA_CODE, + N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); + return; + } + + for(i = 9; i < 13; i++) + { + if(!CHEAT_IS_HEX(code[i])) + { + // wrong cheat + systemMessage(MSG_INVALID_CBA_CODE, + N_("Invalid CBA code. Format is XXXXXXXX YYYY.")); + return; + } + } + + char buffer[10]; + strncpy(buffer, code, 8); + buffer[8] = 0; + u32 address; + sscanf(buffer, "%x", &address); + strncpy(buffer, &code[9], 4); + buffer[4] = 0; + u32 value; + sscanf(buffer, "%x", &value); + + u8 array[8] = { + address & 255, + (address >> 8) & 255, + (address >> 16) & 255, + (address >> 24) & 255, + (value & 255), + (value >> 8) & 255, + 0, + 0 + }; + + if(cheatsCBAGetCount() == 0 && + (address >> 28) == 9) + { + u32 seed[8]; + cheatsCBAParseSeedCode(address, value, seed); + cheatsCBAChangeEncryption(seed); + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, UNKNOWN_CODE); + } + else + { + if(cheatsCBAShouldDecrypt()) + cheatsCBADecrypt(array); + + address = READ32LE(((u32 *)array)); + value = READ16LE(((u16 *)&array[4])); + + int type = (address >> 28) & 15; + + if(isMultilineWithData(cheatsNumber-1)) + { + cheatsAdd(code, desc, address, value, 512, UNKNOWN_CODE); + return; + } + + switch(type) + { + case 0x00: + { + if(!cheatsCBATableGenerated) + cheatsCBAGenTable(); + u32 crc = cheatsCBACalcCRC(rom, 0x10000); + if(crc != address) + { + systemMessage(MSG_CBA_CODE_WARNING, + N_("Warning: Codes seem to be for a different game.\nCodes may not work correctly.")); + } + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + UNKNOWN_CODE); + } + break; + case 0x02: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_OR); + break; + case 0x03: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + INT_8_BIT_WRITE); + break; + case 0x04: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_SLIDE_CODE); + break; + case 0x05: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_SUPER); + break; + case 0x06: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_AND); + break; + case 0x07: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_IF_TRUE); + break; + case 0x08: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + INT_16_BIT_WRITE); + break; + case 0x0a: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_IF_FALSE); + break; + case 0x0b: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_LT); + break; + case 0x0c: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_GT); + break; + case 0x0d: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_IF_KEYS_PRESSED); + break; + case 0x0e: + cheatsAdd(code, desc, address & 0x0FFFFFFF, value, 512, + CBA_ADD); + break; + default: + // unsupported code + cheatsAdd(code, desc, address & 0xFFFFFFFF, value, 512, + UNKNOWN_CODE); + break; + } + } +} + +void cheatsSaveGame(gzFile file) +{ + utilWriteInt(file, cheatsNumber); + + utilGzWrite(file, cheatsList, sizeof(cheatsList)); +} + +void cheatsReadGame(gzFile file) +{ + cheatsNumber = 0; + + cheatsNumber = utilReadInt(file); + + utilGzRead(file, cheatsList, sizeof(cheatsList)); + + bool firstCodeBreaker = true; + + for(int i = 0; i < cheatsNumber; i++) + { + cheatsList[i].status = 0; + if(!cheatsList[i].codestring[0]) + { + switch(cheatsList[i].size) + { + case 0: + sprintf(cheatsList[i].codestring, "%08x:%02x", cheatsList[i].address, + cheatsList[i].value); + break; + case 1: + sprintf(cheatsList[i].codestring, "%08x:%04x", cheatsList[i].address, + cheatsList[i].value); + break; + case 2: + sprintf(cheatsList[i].codestring, "%08x:%08x", cheatsList[i].address, + cheatsList[i].value); + break; + } + } + + if(cheatsList[i].enabled) + { + cheatsEnable(i); + } + + if(cheatsList[i].code == 512 && firstCodeBreaker) + { + firstCodeBreaker = false; + char buffer[10]; + strncpy(buffer, cheatsList[i].codestring, 8); + buffer[8] = 0; + u32 address; + sscanf(buffer, "%x", &address); + if((address >> 28) == 9) + { + strncpy(buffer, &cheatsList[i].codestring[9], 4); + buffer[4] = 0; + u32 value; + sscanf(buffer, "%x", &value); + + u32 seed[8]; + cheatsCBAParseSeedCode(address, value, seed); + cheatsCBAChangeEncryption(seed); + } + } + } +} + +void cheatsSaveCheatList(const char *file) +{ + if(cheatsNumber == 0) + return; + FILE* f = gen_fopen(file, "wb"); + if(f == NULL) + return; + int version = 1; + gen_fwrite(&version, 1, sizeof(version), f); + int type = 0; + gen_fwrite(&type, 1, sizeof(type), f); + gen_fwrite(&cheatsNumber, 1, sizeof(cheatsNumber), f); + gen_fwrite(cheatsList, 1, sizeof(cheatsList), f); + gen_fclose(f); +} + +bool cheatsLoadCheatList(const char *file) +{ + cheatsNumber = 0; + + int count = 0; + + FILE* f = gen_fopen(file, "rb"); + + if(f == NULL) + return false; + + int version = 0; + + if(gen_fread(&version, 1, sizeof(version), f) != sizeof(version)) + { + gen_fclose(f); + return false; + } + + if(version != 1) + { + systemMessage(MSG_UNSUPPORTED_CHEAT_LIST_VERSION, + N_("Unsupported cheat list version %d"), version); + gen_fclose(f); + return false; + } + + int type = 0; + if(gen_fread(&type, 1, sizeof(type), f) != sizeof(type)) + { + gen_fclose(f); + return false; + } + + if(type != 0) + { + systemMessage(MSG_UNSUPPORTED_CHEAT_LIST_TYPE, + N_("Unsupported cheat list type %d"), type); + gen_fclose(f); + return false; + } + + if(gen_fread(&count, 1, sizeof(count), f) != sizeof(count)) + { + gen_fclose(f); + return false; + } + + if(gen_fread(cheatsList, 1, sizeof(cheatsList), f) != sizeof(cheatsList)) + { + gen_fclose(f); + return false; + } + + bool firstCodeBreaker = true; + + for(int i = 0; i < count; i++) + { + cheatsList[i].status = 0; // remove old status as it is not used + if(!cheatsList[i].codestring[0]) + { + switch(cheatsList[i].size) + { + case 0: + sprintf(cheatsList[i].codestring, "%08x:%02x", cheatsList[i].address, + cheatsList[i].value); + break; + case 1: + sprintf(cheatsList[i].codestring, "%08x:%04x", cheatsList[i].address, + cheatsList[i].value); + break; + case 2: + sprintf(cheatsList[i].codestring, "%08x:%08x", cheatsList[i].address, + cheatsList[i].value); + break; + } + } + + if(cheatsList[i].code == 512 && firstCodeBreaker) + { + firstCodeBreaker = false; + char buffer[10]; + strncpy(buffer, cheatsList[i].codestring, 8); + buffer[8] = 0; + u32 address; + sscanf(buffer, "%x", &address); + if((address >> 28) == 9) + { + strncpy(buffer, &cheatsList[i].codestring[9], 4); + buffer[4] = 0; + u32 value; + sscanf(buffer, "%x", &value); + + u32 seed[8]; + cheatsCBAParseSeedCode(address, value, seed); + cheatsCBAChangeEncryption(seed); + } + } + } + cheatsNumber = count; + gen_fclose(f); + return true; +} + +extern int *extCpuLoopTicks; +extern int *extClockTicks; +extern int *extTicks; +extern int cpuSavedTicks; + +extern void debuggerBreakOnWrite(u32 *, u32, u32, int); + +#define CPU_BREAK_LOOP \ + cpuSavedTicks = cpuSavedTicks - *extCpuLoopTicks;\ + *extCpuLoopTicks = *extClockTicks;\ + *extTicks = *extClockTicks; + +void cheatsWriteMemory(u32 *address, u32 value, u32 mask) +{ +#ifdef BKPT_SUPPORT +#ifdef SDL + if(cheatsNumber == 0) + { + debuggerBreakOnWrite(address, *address, value, 2); + CPU_BREAK_LOOP; + *address = value; + return; + } +#endif +#endif +} + +void cheatsWriteHalfWord(u16 *address, u16 value, u16 mask) +{ +#ifdef BKPT_SUPPORT +#ifdef SDL + if(cheatsNumber == 0) + { + debuggerBreakOnWrite((u32 *)address, *address, value, 1); + CPU_BREAK_LOOP; + *address = value; + return; + } +#endif +#endif +} + +#if defined BKPT_SUPPORT && defined SDL +void cheatsWriteByte(u8 *address, u8 value) +#else +void cheatsWriteByte(u8 *, u8) +#endif +{ +#ifdef BKPT_SUPPORT +#ifdef SDL + if(cheatsNumber == 0) + { + debuggerBreakOnWrite((u32 *)address, *address, value, 0); + CPU_BREAK_LOOP; + *address = value; + return; + } +#endif +#endif +} diff --git a/source/vba/Cheats.h b/source/vba/Cheats.h index 29665951..61d8e905 100644 --- a/source/vba/Cheats.h +++ b/source/vba/Cheats.h @@ -1,55 +1,55 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004-2006 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef GBA_CHEATS_H -#define GBA_CHEATS_H - -struct CheatsData { - int code; - int size; - int status; - bool enabled; - u32 rawaddress; - u32 address; - u32 value; - u32 oldValue; - char codestring[20]; - char desc[32]; -}; - -extern void cheatsAdd(const char *,const char *,u32, u32,u32,int,int); -extern void cheatsAddCheatCode(const char *code, const char *desc); -extern void cheatsAddGSACode(const char *code, const char *desc, bool v3); -extern void cheatsAddCBACode(const char *code, const char *desc); -extern bool cheatsImportGSACodeFile(const char *name, int game, bool v3); -extern void cheatsDelete(int number, bool restore); -extern void cheatsDeleteAll(bool restore); -extern void cheatsEnable(int number); -extern void cheatsDisable(int number); -extern void cheatsSaveGame(gzFile file); -extern void cheatsReadGame(gzFile file, int version); -extern void cheatsSaveCheatList(const char *file); -extern bool cheatsLoadCheatList(const char *file); -extern void cheatsWriteMemory(u32, u32); -extern void cheatsWriteHalfWord(u32, u16); -extern void cheatsWriteByte(u32, u8); -extern int cheatsCheckKeys(u32,u32); -extern int cheatsNumber; -extern CheatsData cheatsList[100]; -#endif // GBA_CHEATS_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef GBA_CHEATS_H +#define GBA_CHEATS_H + +struct CheatsData + { + int code; + int size; + int status; + bool enabled; + u32 address; + u32 value; + u32 oldValue; + char codestring[20]; + char desc[32]; + }; + +extern void cheatsAdd(const char *,const char *,u32,u32,int,int); +extern void cheatsAddCheatCode(const char *code, const char *desc); +extern void cheatsAddGSACode(const char *code, const char *desc, bool v3); +extern void cheatsAddCBACode(const char *code, const char *desc); +extern bool cheatsImportGSACodeFile(const char *name, int game, bool v3); +extern void cheatsDelete(int number, bool restore); +extern void cheatsDeleteAll(bool restore); +extern void cheatsEnable(int number); +extern void cheatsDisable(int number); +extern void cheatsSaveGame(gzFile file); +extern void cheatsReadGame(gzFile file); +extern void cheatsSaveCheatList(const char *file); +extern bool cheatsLoadCheatList(const char *file); +extern void cheatsWriteMemory(u32 *, u32, u32); +extern void cheatsWriteHalfWord(u16 *, u16, u16); +extern void cheatsWriteByte(u8 *, u8); +extern int cheatsCheckKeys(u32,u32); +extern int cheatsNumber; +extern CheatsData cheatsList[100]; +#endif // GBA_CHEATS_H diff --git a/source/vba/EEprom.cpp b/source/vba/EEprom.cpp index fd9b006b..86ec201b 100644 --- a/source/vba/EEprom.cpp +++ b/source/vba/EEprom.cpp @@ -1,206 +1,214 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include "agb/GBA.h" -#include "EEprom.h" -#include "Util.h" - -extern int cpuDmaCount; - -int eepromMode = EEPROM_IDLE; -int eepromByte = 0; -int eepromBits = 0; -int eepromAddress = 0; -u8 eepromData[0x2000]; -u8 eepromBuffer[16]; -bool eepromInUse = false; -int eepromSize = 512; - -variable_desc eepromSaveData[] = { - { &eepromMode, sizeof(int) }, - { &eepromByte, sizeof(int) }, - { &eepromBits , sizeof(int) }, - { &eepromAddress , sizeof(int) }, - { &eepromInUse, sizeof(bool) }, - { &eepromData[0], 512 }, - { &eepromBuffer[0], 16 }, - { NULL, 0 } -}; - -void eepromInit() -{ - memset(eepromData, 255, sizeof(eepromData)); -} - -void eepromReset() -{ - eepromMode = EEPROM_IDLE; - eepromByte = 0; - eepromBits = 0; - eepromAddress = 0; - eepromInUse = false; - eepromSize = 512; -} - -void eepromSaveGame(gzFile gzFile) -{ - utilWriteData(gzFile, eepromSaveData); - utilWriteInt(gzFile, eepromSize); - utilGzWrite(gzFile, eepromData, 0x2000); -} - -void eepromReadGame(gzFile gzFile, int version) -{ - utilReadData(gzFile, eepromSaveData); - if(version >= SAVE_GAME_VERSION_3) { - eepromSize = utilReadInt(gzFile); - utilGzRead(gzFile, eepromData, 0x2000); - } else { - // prior to 0.7.1, only 4K EEPROM was supported - eepromSize = 512; - } -} - -void eepromReadGameSkip(gzFile gzFile, int version) -{ - // skip the eeprom data in a save game - utilReadDataSkip(gzFile, eepromSaveData); - if(version >= SAVE_GAME_VERSION_3) { - utilGzSeek(gzFile, sizeof(int), SEEK_CUR); - utilGzSeek(gzFile, 0x2000, SEEK_CUR); - } -} - -int eepromRead(u32 /* address */) -{ - switch(eepromMode) { - case EEPROM_IDLE: - case EEPROM_READADDRESS: - case EEPROM_WRITEDATA: - return 1; - case EEPROM_READDATA: - { - eepromBits++; - if(eepromBits == 4) { - eepromMode = EEPROM_READDATA2; - eepromBits = 0; - eepromByte = 0; - } - return 0; - } - case EEPROM_READDATA2: - { - int data = 0; - int address = eepromAddress << 3; - int mask = 1 << (7 - (eepromBits & 7)); - data = (eepromData[address+eepromByte] & mask) ? 1 : 0; - eepromBits++; - if((eepromBits & 7) == 0) - eepromByte++; - if(eepromBits == 0x40) - eepromMode = EEPROM_IDLE; - return data; - } - default: - return 0; - } - return 1; -} - -void eepromWrite(u32 /* address */, u8 value) -{ - if(cpuDmaCount == 0) - return; - int bit = value & 1; - switch(eepromMode) { - case EEPROM_IDLE: - eepromByte = 0; - eepromBits = 1; - eepromBuffer[eepromByte] = bit; - eepromMode = EEPROM_READADDRESS; - break; - case EEPROM_READADDRESS: - eepromBuffer[eepromByte] <<= 1; - eepromBuffer[eepromByte] |= bit; - eepromBits++; - if((eepromBits & 7) == 0) { - eepromByte++; - } - if(cpuDmaCount == 0x11 || cpuDmaCount == 0x51) { - if(eepromBits == 0x11) { - eepromInUse = true; - eepromSize = 0x2000; - eepromAddress = ((eepromBuffer[0] & 0x3F) << 8) | - ((eepromBuffer[1] & 0xFF)); - if(!(eepromBuffer[0] & 0x40)) { - eepromBuffer[0] = bit; - eepromBits = 1; - eepromByte = 0; - eepromMode = EEPROM_WRITEDATA; - } else { - eepromMode = EEPROM_READDATA; - eepromByte = 0; - eepromBits = 0; - } - } - } else { - if(eepromBits == 9) { - eepromInUse = true; - eepromAddress = (eepromBuffer[0] & 0x3F); - if(!(eepromBuffer[0] & 0x40)) { - eepromBuffer[0] = bit; - eepromBits = 1; - eepromByte = 0; - eepromMode = EEPROM_WRITEDATA; - } else { - eepromMode = EEPROM_READDATA; - eepromByte = 0; - eepromBits = 0; - } - } - } - break; - case EEPROM_READDATA: - case EEPROM_READDATA2: - // should we reset here? - eepromMode = EEPROM_IDLE; - break; - case EEPROM_WRITEDATA: - eepromBuffer[eepromByte] <<= 1; - eepromBuffer[eepromByte] |= bit; - eepromBits++; - if((eepromBits & 7) == 0) { - eepromByte++; - } - if(eepromBits == 0x40) { - eepromInUse = true; - // write data; - for(int i = 0; i < 8; i++) { - eepromData[(eepromAddress << 3) + i] = eepromBuffer[i]; - } - systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; - } else if(eepromBits == 0x41) { - eepromMode = EEPROM_IDLE; - eepromByte = 0; - eepromBits = 0; - } - break; - } -} - +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "EEprom.h" +#include "Util.h" + +extern int cpuDmaCount; + +int eepromMode = EEPROM_IDLE; +int eepromByte = 0; +int eepromBits = 0; +int eepromAddress = 0; +u8 eepromData[0x2000]; +u8 eepromBuffer[16]; +bool eepromInUse = false; +int eepromSize = 512; + +variable_desc eepromSaveData[] = { + { &eepromMode, sizeof(int) }, + { &eepromByte, sizeof(int) }, + { &eepromBits , sizeof(int) }, + { &eepromAddress , sizeof(int) }, + { &eepromInUse, sizeof(bool) }, + { &eepromData[0], 512 }, + { &eepromBuffer[0], 16 }, + { NULL, 0 } + }; + +void eepromReset() +{ + eepromMode = EEPROM_IDLE; + eepromByte = 0; + eepromBits = 0; + eepromAddress = 0; + eepromInUse = false; + eepromSize = 512; +} + +void eepromSaveGame(gzFile gzFile) +{ + utilWriteData(gzFile, eepromSaveData); + utilWriteInt(gzFile, eepromSize); + utilGzWrite(gzFile, eepromData, 0x2000); +} + +void eepromReadGame(gzFile gzFile, int version) +{ + utilReadData(gzFile, eepromSaveData); + if(version >= SAVE_GAME_VERSION_3) + { + eepromSize = utilReadInt(gzFile); + utilGzRead(gzFile, eepromData, 0x2000); + } + else + { + // prior to 0.7.1, only 4K EEPROM was supported + eepromSize = 512; + } +} + + +int eepromRead(u32 /* address */) +{ + switch(eepromMode) + { + case EEPROM_IDLE: + case EEPROM_READADDRESS: + case EEPROM_WRITEDATA: + return 1; + case EEPROM_READDATA: + { + eepromBits++; + if(eepromBits == 4) + { + eepromMode = EEPROM_READDATA2; + eepromBits = 0; + eepromByte = 0; + } + return 0; + } + case EEPROM_READDATA2: + { + int data = 0; + int address = eepromAddress << 3; + int mask = 1 << (7 - (eepromBits & 7)); + data = (eepromData[address+eepromByte] & mask) ? 1 : 0; + eepromBits++; + if((eepromBits & 7) == 0) + eepromByte++; + if(eepromBits == 0x40) + eepromMode = EEPROM_IDLE; + return data; + } + default: + return 0; + } + return 1; +} + +void eepromWrite(u32 /* address */, u8 value) +{ + if(cpuDmaCount == 0) + return; + int bit = value & 1; + switch(eepromMode) + { + case EEPROM_IDLE: + eepromByte = 0; + eepromBits = 1; + eepromBuffer[eepromByte] = bit; + eepromMode = EEPROM_READADDRESS; + break; + case EEPROM_READADDRESS: + eepromBuffer[eepromByte] <<= 1; + eepromBuffer[eepromByte] |= bit; + eepromBits++; + if((eepromBits & 7) == 0) + { + eepromByte++; + } + if(cpuDmaCount == 0x11 || cpuDmaCount == 0x51) + { + if(eepromBits == 0x11) + { + eepromInUse = true; + eepromSize = 0x2000; + eepromAddress = ((eepromBuffer[0] & 0x3F) << 8) | + ((eepromBuffer[1] & 0xFF)); + if(!(eepromBuffer[0] & 0x40)) + { + eepromBuffer[0] = bit; + eepromBits = 1; + eepromByte = 0; + eepromMode = EEPROM_WRITEDATA; + } + else + { + eepromMode = EEPROM_READDATA; + eepromByte = 0; + eepromBits = 0; + } + } + } + else + { + if(eepromBits == 9) + { + eepromInUse = true; + eepromAddress = (eepromBuffer[0] & 0x3F); + if(!(eepromBuffer[0] & 0x40)) + { + eepromBuffer[0] = bit; + eepromBits = 1; + eepromByte = 0; + eepromMode = EEPROM_WRITEDATA; + } + else + { + eepromMode = EEPROM_READDATA; + eepromByte = 0; + eepromBits = 0; + } + } + } + break; + case EEPROM_READDATA: + case EEPROM_READDATA2: + // should we reset here? + eepromMode = EEPROM_IDLE; + break; + case EEPROM_WRITEDATA: + eepromBuffer[eepromByte] <<= 1; + eepromBuffer[eepromByte] |= bit; + eepromBits++; + if((eepromBits & 7) == 0) + { + eepromByte++; + } + if(eepromBits == 0x40) + { + eepromInUse = true; + // write data; + for(int i = 0; i < 8; i++) + { + eepromData[(eepromAddress << 3) + i] = eepromBuffer[i]; + } + systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; + } + else if(eepromBits == 0x41) + { + eepromMode = EEPROM_IDLE; + eepromByte = 0; + eepromBits = 0; + } + break; + } +} + diff --git a/source/vba/EEprom.h b/source/vba/EEprom.h index cb25056d..4bf23afc 100644 --- a/source/vba/EEprom.h +++ b/source/vba/EEprom.h @@ -1,40 +1,38 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_EEPROM_H -#define VBA_EEPROM_H - -extern void eepromSaveGame(gzFile _gzFile); -extern void eepromReadGame(gzFile _gzFile, int version); -extern void eepromReadGameSkip(gzFile _gzFile, int version); -extern int eepromRead(u32 address); -extern void eepromWrite(u32 address, u8 value); -extern void eepromInit(); -extern void eepromReset(); -extern u8 eepromData[0x2000]; -extern bool eepromInUse; -extern int eepromSize; - -#define EEPROM_IDLE 0 -#define EEPROM_READADDRESS 1 -#define EEPROM_READDATA 2 -#define EEPROM_READDATA2 3 -#define EEPROM_WRITEDATA 4 - -#endif // VBA_EEPROM_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_EEPROM_H +#define VBA_EEPROM_H + +extern void eepromSaveGame(gzFile gzFile); +extern void eepromReadGame(gzFile gzFile, int version); +extern int eepromRead(u32 address); +extern void eepromWrite(u32 address, u8 value); +extern void eepromReset(); +extern u8 eepromData[0x2000]; +extern bool eepromInUse; +extern int eepromSize; + +#define EEPROM_IDLE 0 +#define EEPROM_READADDRESS 1 +#define EEPROM_READDATA 2 +#define EEPROM_READDATA2 3 +#define EEPROM_WRITEDATA 4 + +#endif // VBA_EEPROM_H diff --git a/source/vba/Flash.cpp b/source/vba/Flash.cpp index 61416d5f..41c189a2 100644 --- a/source/vba/Flash.cpp +++ b/source/vba/Flash.cpp @@ -1,275 +1,288 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004-2006 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include -#include "agb/GBA.h" -#include "Globals.h" -#include "Flash.h" -#include "Sram.h" -#include "Util.h" - -#define FLASH_READ_ARRAY 0 -#define FLASH_CMD_1 1 -#define FLASH_CMD_2 2 -#define FLASH_AUTOSELECT 3 -#define FLASH_CMD_3 4 -#define FLASH_CMD_4 5 -#define FLASH_CMD_5 6 -#define FLASH_ERASE_COMPLETE 7 -#define FLASH_PROGRAM 8 -#define FLASH_SETBANK 9 - -u8 flashSaveMemory[0x20000]; -int flashState = FLASH_READ_ARRAY; -int flashReadState = FLASH_READ_ARRAY; -int flashSize = 0x10000; -int flashDeviceID = 0x1b; -int flashManufacturerID = 0x32; -int flashBank = 0; - -static variable_desc flashSaveData[] = { - { &flashState, sizeof(int) }, - { &flashReadState, sizeof(int) }, - { &flashSaveMemory[0], 0x10000 }, - { NULL, 0 } -}; - -static variable_desc flashSaveData2[] = { - { &flashState, sizeof(int) }, - { &flashReadState, sizeof(int) }, - { &flashSize, sizeof(int) }, - { &flashSaveMemory[0], 0x20000 }, - { NULL, 0 } -}; - -static variable_desc flashSaveData3[] = { - { &flashState, sizeof(int) }, - { &flashReadState, sizeof(int) }, - { &flashSize, sizeof(int) }, - { &flashBank, sizeof(int) }, - { &flashSaveMemory[0], 0x20000 }, - { NULL, 0 } -}; - -void flashInit() -{ - memset(flashSaveMemory, 0xff, sizeof(flashSaveMemory)); -} - -void flashReset() -{ - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - flashBank = 0; -} - -void flashSaveGame(gzFile gzFile) -{ - utilWriteData(gzFile, flashSaveData3); -} - -void flashReadGame(gzFile gzFile, int version) -{ - if(version < SAVE_GAME_VERSION_5) - utilReadData(gzFile, flashSaveData); - else if(version < SAVE_GAME_VERSION_7) { - utilReadData(gzFile, flashSaveData2); - flashBank = 0; - flashSetSize(flashSize); - } else { - utilReadData(gzFile, flashSaveData3); - } -} - -void flashReadGameSkip(gzFile gzFile, int version) -{ - // skip the flash data in a save game - if(version < SAVE_GAME_VERSION_5) - utilReadDataSkip(gzFile, flashSaveData); - else if(version < SAVE_GAME_VERSION_7) { - utilReadDataSkip(gzFile, flashSaveData2); - } else { - utilReadDataSkip(gzFile, flashSaveData3); - } -} - -void flashSetSize(int size) -{ - // log("Setting flash size to %d\n", size); - if(size == 0x10000) { - flashDeviceID = 0x1b; - flashManufacturerID = 0x32; - } else { - flashDeviceID = 0x13; //0x09; - flashManufacturerID = 0x62; //0xc2; - } - // Added to make 64k saves compatible with 128k ones - // (allow wrongfuly set 64k saves to work for Pokemon games) - if ((size == 0x20000) && (flashSize == 0x10000)) - memcpy((u8 *)(flashSaveMemory+0x10000), (u8 *)(flashSaveMemory), 0x10000); - flashSize = size; -} - -u8 flashRead(u32 address) -{ - // log("Reading %08x from %08x\n", address, reg[15].I); - // log("Current read state is %d\n", flashReadState); - address &= 0xFFFF; - - switch(flashReadState) { - case FLASH_READ_ARRAY: - return flashSaveMemory[(flashBank << 16) + address]; - case FLASH_AUTOSELECT: - switch(address & 0xFF) { - case 0: - // manufacturer ID - return flashManufacturerID; - case 1: - // device ID - return flashDeviceID; - } - break; - case FLASH_ERASE_COMPLETE: - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - return 0xFF; - }; - return 0; -} - -void flashSaveDecide(u32 address, u8 byte) -{ - // log("Deciding save type %08x\n", address); - if(address == 0x0e005555) { - saveType = 2; - cpuSaveGameFunc = flashWrite; - } else { - saveType = 1; - cpuSaveGameFunc = sramWrite; - } - - (*cpuSaveGameFunc)(address, byte); -} - -void flashDelayedWrite(u32 address, u8 byte) -{ - saveType = 2; - cpuSaveGameFunc = flashWrite; - flashWrite(address, byte); -} - -void flashWrite(u32 address, u8 byte) -{ - // log("Writing %02x at %08x\n", byte, address); - // log("Current state is %d\n", flashState); - address &= 0xFFFF; - switch(flashState) { - case FLASH_READ_ARRAY: - if(address == 0x5555 && byte == 0xAA) - flashState = FLASH_CMD_1; - break; - case FLASH_CMD_1: - if(address == 0x2AAA && byte == 0x55) - flashState = FLASH_CMD_2; - else - flashState = FLASH_READ_ARRAY; - break; - case FLASH_CMD_2: - if(address == 0x5555) { - if(byte == 0x90) { - flashState = FLASH_AUTOSELECT; - flashReadState = FLASH_AUTOSELECT; - } else if(byte == 0x80) { - flashState = FLASH_CMD_3; - } else if(byte == 0xF0) { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } else if(byte == 0xA0) { - flashState = FLASH_PROGRAM; - } else if(byte == 0xB0 && flashSize == 0x20000) { - flashState = FLASH_SETBANK; - } else { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } - } else { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } - break; - case FLASH_CMD_3: - if(address == 0x5555 && byte == 0xAA) { - flashState = FLASH_CMD_4; - } else { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } - break; - case FLASH_CMD_4: - if(address == 0x2AAA && byte == 0x55) { - flashState = FLASH_CMD_5; - } else { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } - break; - case FLASH_CMD_5: - if(byte == 0x30) { - // SECTOR ERASE - memset(&flashSaveMemory[(flashBank << 16) + (address & 0xF000)], - 0, - 0x1000); - systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; - flashReadState = FLASH_ERASE_COMPLETE; - } else if(byte == 0x10) { - // CHIP ERASE - memset(flashSaveMemory, 0, flashSize); - systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; - flashReadState = FLASH_ERASE_COMPLETE; - } else { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } - break; - case FLASH_AUTOSELECT: - if(byte == 0xF0) { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } else if(address == 0x5555 && byte == 0xAA) - flashState = FLASH_CMD_1; - else { - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - } - break; - case FLASH_PROGRAM: - flashSaveMemory[(flashBank<<16)+address] = byte; - systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - break; - case FLASH_SETBANK: - if(address == 0) { - flashBank = (byte & 1); - } - flashState = FLASH_READ_ARRAY; - flashReadState = FLASH_READ_ARRAY; - break; - } -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include +#include +#include "GBA.h" +#include "Globals.h" +#include "Flash.h" +#include "Sram.h" +#include "Util.h" + +#define FLASH_READ_ARRAY 0 +#define FLASH_CMD_1 1 +#define FLASH_CMD_2 2 +#define FLASH_AUTOSELECT 3 +#define FLASH_CMD_3 4 +#define FLASH_CMD_4 5 +#define FLASH_CMD_5 6 +#define FLASH_ERASE_COMPLETE 7 +#define FLASH_PROGRAM 8 +#define FLASH_SETBANK 9 + +u8 flashSaveMemory[0x20000]; +int flashState = FLASH_READ_ARRAY; +int flashReadState = FLASH_READ_ARRAY; +int flashSize = 0x10000; +int flashDeviceID = 0x1b; +int flashManufacturerID = 0x32; +int flashBank = 0; + +static variable_desc flashSaveData[] = { + { &flashState, sizeof(int) }, + { &flashReadState, sizeof(int) }, + { &flashSaveMemory[0], 0x10000 }, + { NULL, 0 } + }; + +static variable_desc flashSaveData2[] = { + { &flashState, sizeof(int) }, + { &flashReadState, sizeof(int) }, + { &flashSize, sizeof(int) }, + { &flashSaveMemory[0], 0x20000 }, + { NULL, 0 } + }; + +static variable_desc flashSaveData3[] = { + { &flashState, sizeof(int) }, + { &flashReadState, sizeof(int) }, + { &flashSize, sizeof(int) }, + { &flashBank, sizeof(int) }, + { &flashSaveMemory[0], 0x20000 }, + { NULL, 0 } + }; + +void flashReset() +{ + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + flashBank = 0; +} + +void flashSaveGame(gzFile gzFile) +{ + utilWriteData(gzFile, flashSaveData3); +} + +void flashReadGame(gzFile gzFile, int version) +{ + if(version < SAVE_GAME_VERSION_5) + utilReadData(gzFile, flashSaveData); + else if(version < SAVE_GAME_VERSION_7) + { + utilReadData(gzFile, flashSaveData2); + flashBank = 0; + flashSetSize(flashSize); + } + else + { + utilReadData(gzFile, flashSaveData3); + } +} + +void flashSetSize(int size) +{ + // log("Setting flash size to %d\n", size); + flashSize = size; + if(size == 0x10000) + { + flashDeviceID = 0x1b; + flashManufacturerID = 0x32; + } + else + { + flashDeviceID = 0x13; //0x09; + flashManufacturerID = 0x62; //0xc2; + } +} + +u8 flashRead(u32 address) +{ + // log("Reading %08x from %08x\n", address, reg[15].I); + // log("Current read state is %d\n", flashReadState); + address &= 0xFFFF; + + switch(flashReadState) + { + case FLASH_READ_ARRAY: + return flashSaveMemory[(flashBank << 16) + address]; + case FLASH_AUTOSELECT: + switch(address & 0xFF) + { + case 0: + // manufacturer ID + return flashManufacturerID; + case 1: + // device ID + return flashDeviceID; + } + break; + case FLASH_ERASE_COMPLETE: + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + return 0xFF; + }; + return 0; +} + +void flashSaveDecide(u32 address, u8 byte) +{ + // log("Deciding save type %08x\n", address); + if(address == 0x0e005555) + { + saveType = 2; + cpuSaveGameFunc = flashWrite; + } + else + { + saveType = 1; + cpuSaveGameFunc = sramWrite; + } + + (*cpuSaveGameFunc)(address, byte); +} + +void flashWrite(u32 address, u8 byte) +{ + // log("Writing %02x at %08x\n", byte, address); + // log("Current state is %d\n", flashState); + address &= 0xFFFF; + switch(flashState) + { + case FLASH_READ_ARRAY: + if(address == 0x5555 && byte == 0xAA) + flashState = FLASH_CMD_1; + break; + case FLASH_CMD_1: + if(address == 0x2AAA && byte == 0x55) + flashState = FLASH_CMD_2; + else + flashState = FLASH_READ_ARRAY; + break; + case FLASH_CMD_2: + if(address == 0x5555) + { + if(byte == 0x90) + { + flashState = FLASH_AUTOSELECT; + flashReadState = FLASH_AUTOSELECT; + } + else if(byte == 0x80) + { + flashState = FLASH_CMD_3; + } + else if(byte == 0xF0) + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + else if(byte == 0xA0) + { + flashState = FLASH_PROGRAM; + } + else if(byte == 0xB0 && flashSize == 0x20000) + { + flashState = FLASH_SETBANK; + } + else + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + } + else + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + break; + case FLASH_CMD_3: + if(address == 0x5555 && byte == 0xAA) + { + flashState = FLASH_CMD_4; + } + else + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + break; + case FLASH_CMD_4: + if(address == 0x2AAA && byte == 0x55) + { + flashState = FLASH_CMD_5; + } + else + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + break; + case FLASH_CMD_5: + if(byte == 0x30) + { + // SECTOR ERASE + memset(&flashSaveMemory[(flashBank << 16) + (address & 0xF000)], + 0, + 0x1000); + systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; + flashReadState = FLASH_ERASE_COMPLETE; + } + else if(byte == 0x10) + { + // CHIP ERASE + memset(flashSaveMemory, 0, flashSize); + systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; + flashReadState = FLASH_ERASE_COMPLETE; + } + else + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + break; + case FLASH_AUTOSELECT: + if(byte == 0xF0) + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + else if(address == 0x5555 && byte == 0xAA) + flashState = FLASH_CMD_1; + else + { + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + } + break; + case FLASH_PROGRAM: + flashSaveMemory[(flashBank<<16)+address] = byte; + systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + break; + case FLASH_SETBANK: + if(address == 0) + { + flashBank = (byte & 1); + } + flashState = FLASH_READ_ARRAY; + flashReadState = FLASH_READ_ARRAY; + break; + } +} diff --git a/source/vba/Flash.h b/source/vba/Flash.h index d8f765e3..b00a35e4 100644 --- a/source/vba/Flash.h +++ b/source/vba/Flash.h @@ -1,36 +1,33 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_FLASH_H -#define VBA_FLASH_H - -extern void flashSaveGame(gzFile _gzFile); -extern void flashReadGame(gzFile _gzFile, int version); -extern void flashReadGameSkip(gzFile _gzFile, int version); -extern u8 flashRead(u32 address); -extern void flashWrite(u32 address, u8 byte); -extern void flashDelayedWrite(u32 address, u8 byte); -extern u8 flashSaveMemory[0x20000]; -extern void flashSaveDecide(u32 address, u8 byte); -extern void flashReset(); -extern void flashSetSize(int size); -extern void flashInit(); - -extern int flashSize; -#endif // VBA_FLASH_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_FLASH_H +#define VBA_FLASH_H + +extern void flashSaveGame(gzFile gzFile); +extern void flashReadGame(gzFile gzFile, int version); +extern u8 flashRead(u32 address); +extern void flashWrite(u32 address, u8 byte); +extern u8 flashSaveMemory[0x20000]; +extern void flashSaveDecide(u32 address, u8 byte); +extern void flashReset(); +extern void flashSetSize(int size); + +extern int flashSize; +#endif // VBA_FLASH_H diff --git a/source/vba/GBA.cpp b/source/vba/GBA.cpp new file mode 100644 index 00000000..ee458fcc --- /dev/null +++ b/source/vba/GBA.cpp @@ -0,0 +1,4361 @@ +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "sdfileio.h" +#include +#include +#include +#include +#include + +#include "GBA.h" +#include "GBAinline.h" +#include "Globals.h" +#include "Gfx.h" +#include "EEprom.h" +#include "Flash.h" +#include "Sound.h" +#include "Sram.h" +#include "bios.h" +#include "unzip.h" +#include "Cheats.h" +#include "NLS.h" +#include "elf.h" +#include "Util.h" +#include "Port.h" +#include "agbprint.h" +#ifdef PROFILING +#include "prof/prof.h" +#endif + +#define UPDATE_REG(address, value) WRITE16LE(((u16 *)&ioMem[address]),value) + +#ifdef __GNUC__ +#define _stricmp strcasecmp +#endif + +#define CPU_BREAK_LOOP \ + cpuSavedTicks = cpuSavedTicks - *extCpuLoopTicks;\ + *extCpuLoopTicks = *extClockTicks; + +#define CPU_BREAK_LOOP_2 \ + cpuSavedTicks = cpuSavedTicks - *extCpuLoopTicks;\ + *extCpuLoopTicks = *extClockTicks;\ + *extTicks = *extClockTicks; + +extern int emulating; + +int cpuDmaTicksToUpdate = 0; +int cpuDmaCount = 0; +bool cpuDmaHack = 0; +u32 cpuDmaLast = 0; +int dummyAddress = 0; + +int *extCpuLoopTicks = NULL; +int *extClockTicks = NULL; +int *extTicks = NULL; + +int gbaSaveType = 0; // used to remember the save type on reset +bool intState = false; +bool stopState = false; +bool holdState = false; +int holdType = 0; +bool cpuSramEnabled = true; +bool cpuFlashEnabled = true; +bool cpuEEPROMEnabled = true; +bool cpuEEPROMSensorEnabled = false; + +#ifdef PROFILING +int profilingTicks = 0; +int profilingTicksReload = 0; +static char *profilBuffer = NULL; +static int profilSize = 0; +static u32 profilLowPC = 0; +static int profilScale = 0; +#endif +bool freezeWorkRAM[0x40000]; +bool freezeInternalRAM[0x8000]; +int lcdTicks = 960; +bool timer0On = false; +int timer0Ticks = 0; +int timer0Reload = 0; +int timer0ClockReload = 0; +bool timer1On = false; +int timer1Ticks = 0; +int timer1Reload = 0; +int timer1ClockReload = 0; +bool timer2On = false; +int timer2Ticks = 0; +int timer2Reload = 0; +int timer2ClockReload = 0; +bool timer3On = false; +int timer3Ticks = 0; +int timer3Reload = 0; +int timer3ClockReload = 0; +u32 dma0Source = 0; +u32 dma0Dest = 0; +u32 dma1Source = 0; +u32 dma1Dest = 0; +u32 dma2Source = 0; +u32 dma2Dest = 0; +u32 dma3Source = 0; +u32 dma3Dest = 0; +void (*cpuSaveGameFunc)(u32,u8) = flashSaveDecide; +void (*renderLine)() = mode0RenderLine; +bool fxOn = false; +bool windowOn = false; +int frameCount = 0; +char buffer[1024]; +FILE* out = NULL; +u32 lastTime = 0; +int count = 0; + +int capture = 0; +int capturePrevious = 0; +int captureNumber = 0; + +const int TIMER_TICKS[4] = + { + 1, + 64, + 256, + 1024 + }; + +const int thumbCycles[] = + { + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 3 + 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 4 + 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 5 + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, // 6 + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, // 7 + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, // 8 + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, // 9 + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // a + 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 4, 1, 1, // b + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // c + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, // d + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // e + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 // f + }; + +const int gamepakRamWaitState[4] = + { + 4, 3, 2, 8 + }; +const int gamepakWaitState[8] = + { + 4, 3, 2, 8, 4, 3, 2, 8 + }; +const int gamepakWaitState0[8] = + { + 2, 2, 2, 2, 1, 1, 1, 1 + }; +const int gamepakWaitState1[8] = + { + 4, 4, 4, 4, 1, 1, 1, 1 + }; +const int gamepakWaitState2[8] = + { + 8, 8, 8, 8, 1, 1, 1, 1 + }; + +int memoryWait[16] = + { 0, 0, 2, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0 }; +int memoryWait32[16] = + { 0, 0, 9, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 0 }; +int memoryWaitSeq[16] = + { 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 4, 4, 8, 8, 4, 0 }; +int memoryWaitSeq32[16] = + { 2, 0, 3, 0, 0, 2, 2, 0, 4, 4, 8, 8, 16, 16, 8, 0 }; +int memoryWaitFetch[16] = + { 3, 0, 3, 0, 0, 1, 1, 0, 4, 4, 4, 4, 4, 4, 4, 0 }; +int memoryWaitFetch32[16] = + { 6, 0, 6, 0, 0, 2, 2, 0, 8, 8, 8, 8, 8, 8, 8, 0 }; + +const int cpuMemoryWait[16] = + { + 0, 0, 2, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 0, 0 + }; +const int cpuMemoryWait32[16] = + { + 0, 0, 3, 0, 0, 0, 0, 0, + 3, 3, 3, 3, 3, 3, 0, 0 + }; + +const bool memory32[16] = + { + true, false, false, true, true, false, false, true, false, false, false, false, false, false, true, false + }; + +u8 biosProtected[4]; + +#ifdef WORDS_BIGENDIAN +bool cpuBiosSwapped = false; +#endif + +u32 myROM[] = { + 0xEA000006, + 0xEA000093, + 0xEA000006, + 0x00000000, + 0x00000000, + 0x00000000, + 0xEA000088, + 0x00000000, + 0xE3A00302, + 0xE1A0F000, + 0xE92D5800, + 0xE55EC002, + 0xE28FB03C, + 0xE79BC10C, + 0xE14FB000, + 0xE92D0800, + 0xE20BB080, + 0xE38BB01F, + 0xE129F00B, + 0xE92D4004, + 0xE1A0E00F, + 0xE12FFF1C, + 0xE8BD4004, + 0xE3A0C0D3, + 0xE129F00C, + 0xE8BD0800, + 0xE169F00B, + 0xE8BD5800, + 0xE1B0F00E, + 0x0000009C, + 0x0000009C, + 0x0000009C, + 0x0000009C, + 0x000001F8, + 0x000001F0, + 0x000000AC, + 0x000000A0, + 0x000000FC, + 0x00000168, + 0xE12FFF1E, + 0xE1A03000, + 0xE1A00001, + 0xE1A01003, + 0xE2113102, + 0x42611000, + 0xE033C040, + 0x22600000, + 0xE1B02001, + 0xE15200A0, + 0x91A02082, + 0x3AFFFFFC, + 0xE1500002, + 0xE0A33003, + 0x20400002, + 0xE1320001, + 0x11A020A2, + 0x1AFFFFF9, + 0xE1A01000, + 0xE1A00003, + 0xE1B0C08C, + 0x22600000, + 0x42611000, + 0xE12FFF1E, + 0xE92D0010, + 0xE1A0C000, + 0xE3A01001, + 0xE1500001, + 0x81A000A0, + 0x81A01081, + 0x8AFFFFFB, + 0xE1A0000C, + 0xE1A04001, + 0xE3A03000, + 0xE1A02001, + 0xE15200A0, + 0x91A02082, + 0x3AFFFFFC, + 0xE1500002, + 0xE0A33003, + 0x20400002, + 0xE1320001, + 0x11A020A2, + 0x1AFFFFF9, + 0xE0811003, + 0xE1B010A1, + 0xE1510004, + 0x3AFFFFEE, + 0xE1A00004, + 0xE8BD0010, + 0xE12FFF1E, + 0xE0010090, + 0xE1A01741, + 0xE2611000, + 0xE3A030A9, + 0xE0030391, + 0xE1A03743, + 0xE2833E39, + 0xE0030391, + 0xE1A03743, + 0xE2833C09, + 0xE283301C, + 0xE0030391, + 0xE1A03743, + 0xE2833C0F, + 0xE28330B6, + 0xE0030391, + 0xE1A03743, + 0xE2833C16, + 0xE28330AA, + 0xE0030391, + 0xE1A03743, + 0xE2833A02, + 0xE2833081, + 0xE0030391, + 0xE1A03743, + 0xE2833C36, + 0xE2833051, + 0xE0030391, + 0xE1A03743, + 0xE2833CA2, + 0xE28330F9, + 0xE0000093, + 0xE1A00840, + 0xE12FFF1E, + 0xE3A00001, + 0xE3A01001, + 0xE92D4010, + 0xE3A0C301, + 0xE3A03000, + 0xE3A04001, + 0xE3500000, + 0x1B000004, + 0xE5CC3301, + 0xEB000002, + 0x0AFFFFFC, + 0xE8BD4010, + 0xE12FFF1E, + 0xE5CC3208, + 0xE15C20B8, + 0xE0110002, + 0x10200002, + 0x114C00B8, + 0xE5CC4208, + 0xE12FFF1E, + 0xE92D500F, + 0xE3A00301, + 0xE1A0E00F, + 0xE510F004, + 0xE8BD500F, + 0xE25EF004, + 0xE59FD044, + 0xE92D5000, + 0xE14FC000, + 0xE10FE000, + 0xE92D5000, + 0xE3A0C302, + 0xE5DCE09C, + 0xE35E00A5, + 0x1A000004, + 0x05DCE0B4, + 0x021EE080, + 0xE28FE004, + 0x159FF018, + 0x059FF018, + 0xE59FD018, + 0xE8BD5000, + 0xE169F00C, + 0xE8BD5000, + 0xE25EF004, + 0x03007FF0, + 0x09FE2000, + 0x09FFC000, + 0x03007FE0 + }; + +variable_desc saveGameStruct[] = { + { &DISPCNT , sizeof(u16) }, + { &DISPSTAT , sizeof(u16) }, + { &VCOUNT , sizeof(u16) }, + { &BG0CNT , sizeof(u16) }, + { &BG1CNT , sizeof(u16) }, + { &BG2CNT , sizeof(u16) }, + { &BG3CNT , sizeof(u16) }, + { &BG0HOFS , sizeof(u16) }, + { &BG0VOFS , sizeof(u16) }, + { &BG1HOFS , sizeof(u16) }, + { &BG1VOFS , sizeof(u16) }, + { &BG2HOFS , sizeof(u16) }, + { &BG2VOFS , sizeof(u16) }, + { &BG3HOFS , sizeof(u16) }, + { &BG3VOFS , sizeof(u16) }, + { &BG2PA , sizeof(u16) }, + { &BG2PB , sizeof(u16) }, + { &BG2PC , sizeof(u16) }, + { &BG2PD , sizeof(u16) }, + { &BG2X_L , sizeof(u16) }, + { &BG2X_H , sizeof(u16) }, + { &BG2Y_L , sizeof(u16) }, + { &BG2Y_H , sizeof(u16) }, + { &BG3PA , sizeof(u16) }, + { &BG3PB , sizeof(u16) }, + { &BG3PC , sizeof(u16) }, + { &BG3PD , sizeof(u16) }, + { &BG3X_L , sizeof(u16) }, + { &BG3X_H , sizeof(u16) }, + { &BG3Y_L , sizeof(u16) }, + { &BG3Y_H , sizeof(u16) }, + { &WIN0H , sizeof(u16) }, + { &WIN1H , sizeof(u16) }, + { &WIN0V , sizeof(u16) }, + { &WIN1V , sizeof(u16) }, + { &WININ , sizeof(u16) }, + { &WINOUT , sizeof(u16) }, + { &MOSAIC , sizeof(u16) }, + { &BLDMOD , sizeof(u16) }, + { &COLEV , sizeof(u16) }, + { &COLY , sizeof(u16) }, + { &DM0SAD_L , sizeof(u16) }, + { &DM0SAD_H , sizeof(u16) }, + { &DM0DAD_L , sizeof(u16) }, + { &DM0DAD_H , sizeof(u16) }, + { &DM0CNT_L , sizeof(u16) }, + { &DM0CNT_H , sizeof(u16) }, + { &DM1SAD_L , sizeof(u16) }, + { &DM1SAD_H , sizeof(u16) }, + { &DM1DAD_L , sizeof(u16) }, + { &DM1DAD_H , sizeof(u16) }, + { &DM1CNT_L , sizeof(u16) }, + { &DM1CNT_H , sizeof(u16) }, + { &DM2SAD_L , sizeof(u16) }, + { &DM2SAD_H , sizeof(u16) }, + { &DM2DAD_L , sizeof(u16) }, + { &DM2DAD_H , sizeof(u16) }, + { &DM2CNT_L , sizeof(u16) }, + { &DM2CNT_H , sizeof(u16) }, + { &DM3SAD_L , sizeof(u16) }, + { &DM3SAD_H , sizeof(u16) }, + { &DM3DAD_L , sizeof(u16) }, + { &DM3DAD_H , sizeof(u16) }, + { &DM3CNT_L , sizeof(u16) }, + { &DM3CNT_H , sizeof(u16) }, + { &TM0D , sizeof(u16) }, + { &TM0CNT , sizeof(u16) }, + { &TM1D , sizeof(u16) }, + { &TM1CNT , sizeof(u16) }, + { &TM2D , sizeof(u16) }, + { &TM2CNT , sizeof(u16) }, + { &TM3D , sizeof(u16) }, + { &TM3CNT , sizeof(u16) }, + { &P1 , sizeof(u16) }, + { &IE , sizeof(u16) }, + { &IF , sizeof(u16) }, + { &IME , sizeof(u16) }, + { &holdState, sizeof(bool) }, + { &holdType, sizeof(int) }, + { &lcdTicks, sizeof(int) }, + { &timer0On , sizeof(bool) }, + { &timer0Ticks , sizeof(int) }, + { &timer0Reload , sizeof(int) }, + { &timer0ClockReload , sizeof(int) }, + { &timer1On , sizeof(bool) }, + { &timer1Ticks , sizeof(int) }, + { &timer1Reload , sizeof(int) }, + { &timer1ClockReload , sizeof(int) }, + { &timer2On , sizeof(bool) }, + { &timer2Ticks , sizeof(int) }, + { &timer2Reload , sizeof(int) }, + { &timer2ClockReload , sizeof(int) }, + { &timer3On , sizeof(bool) }, + { &timer3Ticks , sizeof(int) }, + { &timer3Reload , sizeof(int) }, + { &timer3ClockReload , sizeof(int) }, + { &dma0Source , sizeof(u32) }, + { &dma0Dest , sizeof(u32) }, + { &dma1Source , sizeof(u32) }, + { &dma1Dest , sizeof(u32) }, + { &dma2Source , sizeof(u32) }, + { &dma2Dest , sizeof(u32) }, + { &dma3Source , sizeof(u32) }, + { &dma3Dest , sizeof(u32) }, + { &fxOn, sizeof(bool) }, + { &windowOn, sizeof(bool) }, + { &N_FLAG , sizeof(bool) }, + { &C_FLAG , sizeof(bool) }, + { &Z_FLAG , sizeof(bool) }, + { &V_FLAG , sizeof(bool) }, + { &armState , sizeof(bool) }, + { &armIrqEnable , sizeof(bool) }, + { &armNextPC , sizeof(u32) }, + { &armMode , sizeof(int) }, + { &saveType , sizeof(int) }, + { NULL, 0 } + }; + +//int cpuLoopTicks = 0; +int cpuSavedTicks = 0; + +#ifdef PROFILING +void cpuProfil(char *buf, int size, u32 lowPC, int scale) +{ + profilBuffer = buf; + profilSize = size; + profilLowPC = lowPC; + profilScale = scale; +} + +void cpuEnableProfiling(int hz) +{ + if(hz == 0) + hz = 100; + profilingTicks = profilingTicksReload = 16777216 / hz; + profSetHertz(hz); +} +#endif + +inline int CPUUpdateTicksAccess32(u32 address) +{ + return memoryWait32[(address>>24)&15]; +} + +inline int CPUUpdateTicksAccess16(u32 address) +{ + return memoryWait[(address>>24)&15]; +} + +inline int CPUUpdateTicksAccessSeq32(u32 address) +{ + return memoryWaitSeq32[(address>>24)&15]; +} + +inline int CPUUpdateTicksAccessSeq16(u32 address) +{ + return memoryWaitSeq[(address>>24)&15]; +} + +inline int CPUUpdateTicks() +{ + int cpuLoopTicks = lcdTicks; + + if(soundTicks < cpuLoopTicks) + cpuLoopTicks = soundTicks; + + if(timer0On && !(TM0CNT & 4) && (timer0Ticks < cpuLoopTicks)) + { + cpuLoopTicks = timer0Ticks; + } + if(timer1On && !(TM1CNT & 4) && (timer1Ticks < cpuLoopTicks)) + { + cpuLoopTicks = timer1Ticks; + } + if(timer2On && !(TM2CNT & 4) && (timer2Ticks < cpuLoopTicks)) + { + cpuLoopTicks = timer2Ticks; + } + if(timer3On && !(TM3CNT & 4) && (timer3Ticks < cpuLoopTicks)) + { + cpuLoopTicks = timer3Ticks; + } +#ifdef PROFILING + if(profilingTicksReload != 0) + { + if(profilingTicks < cpuLoopTicks) + { + cpuLoopTicks = profilingTicks; + } + } +#endif + cpuSavedTicks = cpuLoopTicks; + return cpuLoopTicks; +} + +void CPUUpdateWindow0() +{ + int x00 = WIN0H>>8; + int x01 = WIN0H & 255; + + if(x00 <= x01) + { + for(int i = 0; i < 240; i++) + { + gfxInWin0[i] = (i >= x00 && i < x01); + } + } + else + { + for(int i = 0; i < 240; i++) + { + gfxInWin0[i] = (i >= x00 || i < x01); + } + } +} + +void CPUUpdateWindow1() +{ + int x00 = WIN1H>>8; + int x01 = WIN1H & 255; + + if(x00 <= x01) + { + for(int i = 0; i < 240; i++) + { + gfxInWin1[i] = (i >= x00 && i < x01); + } + } + else + { + for(int i = 0; i < 240; i++) + { + gfxInWin1[i] = (i >= x00 || i < x01); + } + } +} + +extern u32 line0[240]; +extern u32 line1[240]; +extern u32 line2[240]; +extern u32 line3[240]; + +#define CLEAR_ARRAY(a) \ + {\ + u32 *array = (a);\ + for(int i = 0; i < 240; i++) {\ + *array++ = 0x80000000;\ + }\ + }\ + +void CPUUpdateRenderBuffers(bool force) +{ + if(!(layerEnable & 0x0100) || force) + { + CLEAR_ARRAY(line0); + } + if(!(layerEnable & 0x0200) || force) + { + CLEAR_ARRAY(line1); + } + if(!(layerEnable & 0x0400) || force) + { + CLEAR_ARRAY(line2); + } + if(!(layerEnable & 0x0800) || force) + { + CLEAR_ARRAY(line3); + } +} + +static bool CPUWriteState(gzFile gzFile) +{ + utilWriteInt(gzFile, SAVE_GAME_VERSION); + + utilGzWrite(gzFile, &rom[0xa0], 16); + + utilWriteInt(gzFile, useBios); + + utilGzWrite(gzFile, ®[0], sizeof(reg)); + + utilWriteData(gzFile, saveGameStruct); + + // new to version 0.7.1 + utilWriteInt(gzFile, stopState); + // new to version 0.8 + utilWriteInt(gzFile, intState); + + utilGzWrite(gzFile, internalRAM, 0x8000); + utilGzWrite(gzFile, paletteRAM, 0x400); + utilGzWrite(gzFile, workRAM, 0x40000); + utilGzWrite(gzFile, vram, 0x20000); + utilGzWrite(gzFile, oam, 0x400); + utilGzWrite(gzFile, pix, 4*241*162); + utilGzWrite(gzFile, ioMem, 0x400); + + eepromSaveGame(gzFile); + flashSaveGame(gzFile); + soundSaveGame(gzFile); + + cheatsSaveGame(gzFile); + + // version 1.5 + rtcSaveGame(gzFile); + + return true; +} + +bool CPUWriteState(const char *file) +{ + gzFile gzFile = utilGzOpen(file, "wb"); + + if(gzFile == NULL) + { + systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), file); + return false; + } + + bool res = CPUWriteState(gzFile); + + utilGzClose(gzFile); + + return res; +} + +bool CPUWriteMemState(char *memory, int available) +{ + gzFile gzFile = utilMemGzOpen(memory, available, "w"); + + if(gzFile == NULL) + { + return false; + } + + bool res = CPUWriteState(gzFile); + + long pos = utilGzMemTell(gzFile)+8; + + if(pos >= (available)) + res = false; + + utilGzClose(gzFile); + + return res; +} + +static bool CPUReadState(gzFile gzFile) +{ + int version = utilReadInt(gzFile); + + if(version > SAVE_GAME_VERSION || version < SAVE_GAME_VERSION_1) + { + systemMessage(MSG_UNSUPPORTED_VBA_SGM, + N_("Unsupported VisualBoyAdvance save game version %d"), + version); + return false; + } + + u8 romname[17]; + + utilGzRead(gzFile, romname, 16); + + if(memcmp(&rom[0xa0], romname, 16) != 0) + { + romname[16]=0; + for(int i = 0; i < 16; i++) + if(romname[i] < 32) + romname[i] = 32; + systemMessage(MSG_CANNOT_LOAD_SGM, N_("Cannot load save game for %s"), romname); + return false; + } + + bool ub = utilReadInt(gzFile) ? true : false; + + if(ub != useBios) + { + if(useBios) + systemMessage(MSG_SAVE_GAME_NOT_USING_BIOS, + N_("Save game is not using the BIOS files")); + else + systemMessage(MSG_SAVE_GAME_USING_BIOS, + N_("Save game is using the BIOS file")); + return false; + } + + utilGzRead(gzFile, ®[0], sizeof(reg)); + + utilReadData(gzFile, saveGameStruct); + + if(version < SAVE_GAME_VERSION_3) + stopState = false; + else + stopState = utilReadInt(gzFile) ? true : false; + + if(version < SAVE_GAME_VERSION_4) + intState = false; + else + intState = utilReadInt(gzFile) ? true : false; + + utilGzRead(gzFile, internalRAM, 0x8000); + utilGzRead(gzFile, paletteRAM, 0x400); + utilGzRead(gzFile, workRAM, 0x40000); + utilGzRead(gzFile, vram, 0x20000); + utilGzRead(gzFile, oam, 0x400); + if(version < SAVE_GAME_VERSION_6) + utilGzRead(gzFile, pix, 4*240*160); + else + utilGzRead(gzFile, pix, 4*241*162); + utilGzRead(gzFile, ioMem, 0x400); + + eepromReadGame(gzFile, version); + flashReadGame(gzFile, version); + soundReadGame(gzFile, version); + + if(version > SAVE_GAME_VERSION_1) + { + cheatsReadGame(gzFile); + } + if(version > SAVE_GAME_VERSION_6) + { + rtcReadGame(gzFile); + } + + if(version <= SAVE_GAME_VERSION_7) + { + u32 temp; +#define SWAP(a,b,c) \ + temp = (a);\ + (a) = (b)<<16|(c);\ + (b) = (temp) >> 16;\ + (c) = (temp) & 0xFFFF; + + SWAP(dma0Source, DM0SAD_H, DM0SAD_L); + SWAP(dma0Dest, DM0DAD_H, DM0DAD_L); + SWAP(dma1Source, DM1SAD_H, DM1SAD_L); + SWAP(dma1Dest, DM1DAD_H, DM1DAD_L); + SWAP(dma2Source, DM2SAD_H, DM2SAD_L); + SWAP(dma2Dest, DM2DAD_H, DM2DAD_L); + SWAP(dma3Source, DM3SAD_H, DM3SAD_L); + SWAP(dma3Dest, DM3DAD_H, DM3DAD_L); + } + + // set pointers! + layerEnable = layerSettings & DISPCNT; + + CPUUpdateRender(); + CPUUpdateRenderBuffers(true); + CPUUpdateWindow0(); + CPUUpdateWindow1(); + gbaSaveType = 0; + switch(saveType) + { + case 0: + cpuSaveGameFunc = flashSaveDecide; + break; + case 1: + cpuSaveGameFunc = sramWrite; + gbaSaveType = 1; + break; + case 2: + cpuSaveGameFunc = flashWrite; + gbaSaveType = 2; + break; + default: + systemMessage(MSG_UNSUPPORTED_SAVE_TYPE, + N_("Unsupported save type %d"), saveType); + break; + } + if(eepromInUse) + gbaSaveType = 3; + + systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; + + return true; +} + +bool CPUReadMemState(char *memory, int available) +{ + gzFile gzFile = utilMemGzOpen(memory, available, "r"); + + bool res = CPUReadState(gzFile); + + utilGzClose(gzFile); + + return res; +} + +bool CPUReadState(const char * file) +{ + gzFile gzFile = utilGzOpen(file, "rb"); + + if(gzFile == NULL) + return false; + + bool res = CPUReadState(gzFile); + + utilGzClose(gzFile); + + return res; +} + +bool CPUExportEepromFile(const char *fileName) +{ + if(eepromInUse) + { + FILE* file = gen_fopen(fileName, "wb"); + + if(!file) + { + systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), + fileName); + return false; + } + + for(int i = 0; i < eepromSize;) + { + for(int j = 0; j < 8; j++) + { + if(gen_fwrite(&eepromData[i+7-j], 1, 1, file) != 1) + { + gen_fclose(file); + return false; + } + } + i += 8; + } + gen_fclose(file); + } + return true; +} + +bool CPUWriteBatteryFile(const char *fileName) +{ + if(gbaSaveType == 0) + { + if(eepromInUse) + gbaSaveType = 3; + else switch(saveType) + { + case 1: + gbaSaveType = 1; + break; + case 2: + gbaSaveType = 2; + break; + } + } + + if(gbaSaveType) + { + FILE* file = gen_fopen(fileName, "wb"); + + if(!file) + { + systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), + fileName); + return false; + } + + // only save if Flash/Sram in use or EEprom in use + if(gbaSaveType != 3) + { + if(gbaSaveType == 2) + { + if(gen_fwrite(flashSaveMemory, 1, flashSize, file) != (int)flashSize) + { + gen_fclose(file); + return false; + } + } + else + { + if(gen_fwrite(flashSaveMemory, 1, 0x10000, file) != 0x10000) + { + gen_fclose(file); + return false; + } + } + } + else + { + if(gen_fwrite(eepromData, 1, eepromSize, file) != (int)eepromSize) + { + gen_fclose(file); + return false; + } + } + gen_fclose(file); + } + return true; +} + +bool CPUReadGSASnapshot(const char *fileName) +{ + int i; + FILE* file = gen_fopen(fileName, "rb"); + + if(!file) + { + systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), fileName); + return false; + } + + // check file size to know what we should read + // gen_fseek(file, 0, SEEK_END); + + // long size = ftell(file); + gen_fseek(file, 0x0, SEEK_SET); + gen_fread(&i, 1, 4, file); + gen_fseek(file, i, SEEK_CUR); // Skip SharkPortSave + gen_fseek(file, 4, SEEK_CUR); // skip some sort of flag + gen_fread(&i, 1, 4, file); // name length + gen_fseek(file, i, SEEK_CUR); // skip name + gen_fread(&i, 1, 4, file); // desc length + gen_fseek(file, i, SEEK_CUR); // skip desc + gen_fread(&i, 1, 4, file); // notes length + gen_fseek(file, i, SEEK_CUR); // skip notes + int saveSize; + gen_fread(&saveSize, 1, 4, file); // read length + saveSize -= 0x1c; // remove header size + char buffer[17]; + char buffer2[17]; + gen_fread(buffer, 1, 16, file); + buffer[16] = 0; + for(i = 0; i < 16; i++) + if(buffer[i] < 32) + buffer[i] = 32; + memcpy(buffer2, &rom[0xa0], 16); + buffer2[16] = 0; + for(i = 0; i < 16; i++) + if(buffer2[i] < 32) + buffer2[i] = 32; + if(memcmp(buffer, buffer2, 16)) + { + systemMessage(MSG_CANNOT_IMPORT_SNAPSHOT_FOR, + N_("Cannot import snapshot for %s. Current game is %s"), + buffer, + buffer2); + gen_fclose(file); + return false; + } + gen_fseek(file, 12, SEEK_CUR); // skip some flags + if(saveSize >= 65536) + { + if(gen_fread(flashSaveMemory, 1, saveSize, file) != (int)saveSize) + { + gen_fclose(file); + return false; + } + } + else + { + systemMessage(MSG_UNSUPPORTED_SNAPSHOT_FILE, + N_("Unsupported snapshot file %s"), + fileName); + gen_fclose(file); + return false; + } + gen_fclose(file); + CPUReset(); + return true; +} + +bool CPUWriteGSASnapshot(const char *fileName, + const char *title, + const char *desc, + const char *notes) +{ + FILE* file = gen_fopen(fileName, "wb"); + + if(!file) + { + systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), fileName); + return false; + } + + u8 buffer[17]; + + utilPutDword(buffer, 0x0d); // SharkPortSave length + gen_fwrite(buffer, 1, 4, file); + gen_fwrite("SharkPortSave", 1, 0x0d, file); + utilPutDword(buffer, 0x000f0000); + gen_fwrite(buffer, 1, 4, file); // save type 0x000f0000 = GBA save + utilPutDword(buffer, strlen(title)); + gen_fwrite(buffer, 1, 4, file); // title length + gen_fwrite(title, 1, strlen(title), file); + utilPutDword(buffer, strlen(desc)); + gen_fwrite(buffer, 1, 4, file); // desc length + gen_fwrite(desc, 1, strlen(desc), file); + utilPutDword(buffer, strlen(notes)); + gen_fwrite(buffer, 1, 4, file); // notes length + gen_fwrite(notes, 1, strlen(notes), file); + int saveSize = 0x10000; + if(gbaSaveType == 2) + saveSize = flashSize; + int totalSize = saveSize + 0x1c; + + utilPutDword(buffer, totalSize); // length of remainder of save - CRC + gen_fwrite(buffer, 1, 4, file); + + char temp[0x2001c]; + memset(temp, 0, 28); + memcpy(temp, &rom[0xa0], 16); // copy internal name + temp[0x10] = rom[0xbe]; // reserved area (old checksum) + temp[0x11] = rom[0xbf]; // reserved area (old checksum) + temp[0x12] = rom[0xbd]; // complement check + temp[0x13] = rom[0xb0]; // maker + temp[0x14] = 1; // 1 save ? + memcpy(&temp[0x1c], flashSaveMemory, saveSize); // copy save + gen_fwrite(temp, 1, totalSize, file); // write save + header + u32 crc = 0; + + for(int i = 0; i < totalSize; i++) + { + crc += ((u32)temp[i] << (crc % 0x18)); + } + + utilPutDword(buffer, crc); + gen_fwrite(buffer, 1, 4, file); // CRC? + + gen_fclose(file); + return true; +} + +bool CPUImportEepromFile(const char *fileName) +{ + FILE* file = gen_fopen(fileName, "rb"); + + if(!file) + return false; + + + // check file size to know what we should read + gen_fseek(file, 0, SEEK_END); + + long size = ftell(file); + + gen_fseek(file, 0, SEEK_SET); + if(size == 512 || size == 0x2000) + { + if(gen_fread(eepromData, 1, size, file) != (int)size) + { + gen_fclose(file); + return false; + } + for(int i = 0; i < size;) + { + u8 tmp = eepromData[i]; + eepromData[i] = eepromData[7-i]; + eepromData[7-i] = tmp; + i++; + tmp = eepromData[i]; + eepromData[i] = eepromData[7-i]; + eepromData[7-i] = tmp; + i++; + tmp = eepromData[i]; + eepromData[i] = eepromData[7-i]; + eepromData[7-i] = tmp; + i++; + tmp = eepromData[i]; + eepromData[i] = eepromData[7-i]; + eepromData[7-i] = tmp; + i++; + i += 4; + } + } + else + return false; + gen_fclose(file); + return true; +} + +bool CPUReadBatteryFile(const char *fileName) +{ + FILE* file = gen_fopen(fileName, "rb"); + + if(!file) + return false; + + // check file size to know what we should read + gen_fseek(file, 0, SEEK_END); + + long size = ftell(file); + + + gen_fseek(file, 0, SEEK_SET); + systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; + + if(size == 512 || size == 0x2000) + { + if(gen_fread(eepromData, 1, size, file) != (int)size) + { + gen_fclose(file); + return false; + } + } + else + { + if(size == 0x20000) + { + if(gen_fread(flashSaveMemory, 1, 0x20000, file) != 0x20000) + { + gen_fclose(file); + return false; + } + flashSetSize(0x20000); + } + else + { + if(gen_fread(flashSaveMemory, 1, 0x10000, file) != 0x10000) + { + gen_fclose(file); + return false; + } + flashSetSize(0x10000); + } + } + gen_fclose(file); + return true; +} + +bool CPUWritePNGFile(const char *fileName) +{ + return utilWritePNGFile(fileName, 240, 160, pix); +} + +bool CPUWriteBMPFile(const char *fileName) +{ + return utilWriteBMPFile(fileName, 240, 160, pix); +} + +bool CPUIsZipFile(const char * file) +{ + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".zip") == 0) + return true; + } + } + + return false; +} + +bool CPUIsGBAImage(const char * file) +{ + cpuIsMultiBoot = false; + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".gba") == 0) + return true; + if(_stricmp(p, ".agb") == 0) + return true; + if(_stricmp(p, ".bin") == 0) + return true; + if(_stricmp(p, ".elf") == 0) + return true; + if(_stricmp(p, ".mb") == 0) + { + cpuIsMultiBoot = true; + return true; + } + } + } + + return false; +} + +bool CPUIsGBABios(const char * file) +{ + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".gba") == 0) + return true; + if(_stricmp(p, ".agb") == 0) + return true; + if(_stricmp(p, ".bin") == 0) + return true; + if(_stricmp(p, ".bios") == 0) + return true; + } + } + + return false; +} + +bool CPUIsELF(const char *file) +{ + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".elf") == 0) + return true; + } + } + return false; +} + +void CPUCleanUp() +{ +#ifdef PROFILING + if(profilingTicksReload) + { + profCleanup(); + } +#endif + + if(rom != NULL) + { + free(rom); + rom = NULL; + } + + if(vram != NULL) + { + free(vram); + vram = NULL; + } + + if(paletteRAM != NULL) + { + free(paletteRAM); + paletteRAM = NULL; + } + + if(internalRAM != NULL) + { + free(internalRAM); + internalRAM = NULL; + } + + if(workRAM != NULL) + { + free(workRAM); + workRAM = NULL; + } + + if(bios != NULL) + { + free(bios); + bios = NULL; + } + + if(pix != NULL) + { + // this causes system to CRASH when switching from GBA to GB and then back to GBA + //free(pix); + pix = NULL; + } + + if(oam != NULL) + { + free(oam); + oam = NULL; + } + + if(ioMem != NULL) + { + free(ioMem); + ioMem = NULL; + } + + elfCleanUp(); + + systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; + + emulating = 0; +} + +int CPULoadRom(const char *szFile) +{ + int size = 0x2000000; + + if(rom != NULL) + { + CPUCleanUp(); + } + + systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; + + rom = (u8 *)malloc(0x2000000); + if(rom == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "ROM"); + return 0; + } + workRAM = (u8 *)calloc(1, 0x40000); + if(workRAM == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "WRAM"); + return 0; + } + + u8 *whereToLoad = rom; + if(cpuIsMultiBoot) + whereToLoad = workRAM; + + if(CPUIsELF(szFile)) + { + FILE* f = gen_fopen(szFile, "rb"); + if(!f) + { + systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), + szFile); + free(rom); + rom = NULL; + free(workRAM); + workRAM = NULL; + return 0; + } + bool res = elfRead(szFile, size, f); + if(!res || size == 0) + { + free(rom); + rom = NULL; + free(workRAM); + workRAM = NULL; + elfCleanUp(); + return 0; + } + } + else if(!utilLoad(szFile, + utilIsGBAImage, + whereToLoad, + size)) + { + free(rom); + rom = NULL; + free(workRAM); + workRAM = NULL; + return 0; + } + + u16 *temp = (u16 *)(rom+((size+1)&~1)); + int i; + for(i = (size+1)&~1; i < 0x2000000; i+=2) + { + WRITE16LE(temp, (i >> 1) & 0xFFFF); + temp++; + } + + bios = (u8 *)calloc(1,0x4000); + if(bios == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "BIOS"); + CPUCleanUp(); + return 0; + } + internalRAM = (u8 *)calloc(1,0x8000); + if(internalRAM == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "IRAM"); + CPUCleanUp(); + return 0; + } + paletteRAM = (u8 *)calloc(1,0x400); + if(paletteRAM == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "PRAM"); + CPUCleanUp(); + return 0; + } + vram = (u8 *)calloc(1, 0x20000); + if(vram == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "VRAM"); + CPUCleanUp(); + return 0; + } + oam = (u8 *)calloc(1, 0x400); + if(oam == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "OAM"); + CPUCleanUp(); + return 0; + } + pix = (u8 *)calloc(1, 4 * 241 * 162); + if(pix == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "PIX"); + CPUCleanUp(); + return 0; + } + ioMem = (u8 *)calloc(1, 0x400); + if(ioMem == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "IO"); + CPUCleanUp(); + return 0; + } + + CPUUpdateRenderBuffers(true); + + return size; +} + +void CPUUpdateRender() +{ + switch(DISPCNT & 7) + { + case 0: + if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || + cpuDisableSfx) + renderLine = mode0RenderLine; + else if(fxOn && !windowOn && !(layerEnable & 0x8000)) + renderLine = mode0RenderLineNoWindow; + else + renderLine = mode0RenderLineAll; + break; + case 1: + if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || + cpuDisableSfx) + renderLine = mode1RenderLine; + else if(fxOn && !windowOn && !(layerEnable & 0x8000)) + renderLine = mode1RenderLineNoWindow; + else + renderLine = mode1RenderLineAll; + break; + case 2: + if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || + cpuDisableSfx) + renderLine = mode2RenderLine; + else if(fxOn && !windowOn && !(layerEnable & 0x8000)) + renderLine = mode2RenderLineNoWindow; + else + renderLine = mode2RenderLineAll; + break; + case 3: + if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || + cpuDisableSfx) + renderLine = mode3RenderLine; + else if(fxOn && !windowOn && !(layerEnable & 0x8000)) + renderLine = mode3RenderLineNoWindow; + else + renderLine = mode3RenderLineAll; + break; + case 4: + if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || + cpuDisableSfx) + renderLine = mode4RenderLine; + else if(fxOn && !windowOn && !(layerEnable & 0x8000)) + renderLine = mode4RenderLineNoWindow; + else + renderLine = mode4RenderLineAll; + break; + case 5: + if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || + cpuDisableSfx) + renderLine = mode5RenderLine; + else if(fxOn && !windowOn && !(layerEnable & 0x8000)) + renderLine = mode5RenderLineNoWindow; + else + renderLine = mode5RenderLineAll; + default: + break; + } +} + +void CPUUpdateCPSR() +{ + u32 CPSR = reg[16].I & 0x40; + if(N_FLAG) + CPSR |= 0x80000000; + if(Z_FLAG) + CPSR |= 0x40000000; + if(C_FLAG) + CPSR |= 0x20000000; + if(V_FLAG) + CPSR |= 0x10000000; + if(!armState) + CPSR |= 0x00000020; + if(!armIrqEnable) + CPSR |= 0x80; + CPSR |= (armMode & 0x1F); + reg[16].I = CPSR; +} + +void CPUUpdateFlags(bool breakLoop) +{ + u32 CPSR = reg[16].I; + + N_FLAG = (CPSR & 0x80000000) ? true: false; + Z_FLAG = (CPSR & 0x40000000) ? true: false; + C_FLAG = (CPSR & 0x20000000) ? true: false; + V_FLAG = (CPSR & 0x10000000) ? true: false; + armState = (CPSR & 0x20) ? false : true; + armIrqEnable = (CPSR & 0x80) ? false : true; + if(breakLoop) + { + if(armIrqEnable && (IF & IE) && (IME & 1)) + { + CPU_BREAK_LOOP_2; + } + } +} + +void CPUUpdateFlags() +{ + CPUUpdateFlags(true); +} + +#ifdef WORDS_BIGENDIAN +static void CPUSwap(volatile u32 *a, volatile u32 *b) +{ + volatile u32 c = *b; + *b = *a; + *a = c; +} +#else +static void CPUSwap(u32 *a, u32 *b) +{ + u32 c = *b; + *b = *a; + *a = c; +} +#endif + +void CPUSwitchMode(int mode, bool saveState, bool breakLoop) +{ + // if(armMode == mode) + // return; + + CPUUpdateCPSR(); + + switch(armMode) + { + case 0x10: + case 0x1F: + reg[R13_USR].I = reg[13].I; + reg[R14_USR].I = reg[14].I; + reg[17].I = reg[16].I; + break; + case 0x11: + CPUSwap(®[R8_FIQ].I, ®[8].I); + CPUSwap(®[R9_FIQ].I, ®[9].I); + CPUSwap(®[R10_FIQ].I, ®[10].I); + CPUSwap(®[R11_FIQ].I, ®[11].I); + CPUSwap(®[R12_FIQ].I, ®[12].I); + reg[R13_FIQ].I = reg[13].I; + reg[R14_FIQ].I = reg[14].I; + reg[SPSR_FIQ].I = reg[17].I; + break; + case 0x12: + reg[R13_IRQ].I = reg[13].I; + reg[R14_IRQ].I = reg[14].I; + reg[SPSR_IRQ].I = reg[17].I; + break; + case 0x13: + reg[R13_SVC].I = reg[13].I; + reg[R14_SVC].I = reg[14].I; + reg[SPSR_SVC].I = reg[17].I; + break; + case 0x17: + reg[R13_ABT].I = reg[13].I; + reg[R14_ABT].I = reg[14].I; + reg[SPSR_ABT].I = reg[17].I; + break; + case 0x1b: + reg[R13_UND].I = reg[13].I; + reg[R14_UND].I = reg[14].I; + reg[SPSR_UND].I = reg[17].I; + break; + } + + u32 CPSR = reg[16].I; + u32 SPSR = reg[17].I; + + switch(mode) + { + case 0x10: + case 0x1F: + reg[13].I = reg[R13_USR].I; + reg[14].I = reg[R14_USR].I; + reg[16].I = SPSR; + break; + case 0x11: + CPUSwap(®[8].I, ®[R8_FIQ].I); + CPUSwap(®[9].I, ®[R9_FIQ].I); + CPUSwap(®[10].I, ®[R10_FIQ].I); + CPUSwap(®[11].I, ®[R11_FIQ].I); + CPUSwap(®[12].I, ®[R12_FIQ].I); + reg[13].I = reg[R13_FIQ].I; + reg[14].I = reg[R14_FIQ].I; + if(saveState) + reg[17].I = CPSR; + else + reg[17].I = reg[SPSR_FIQ].I; + break; + case 0x12: + reg[13].I = reg[R13_IRQ].I; + reg[14].I = reg[R14_IRQ].I; + reg[16].I = SPSR; + if(saveState) + reg[17].I = CPSR; + else + reg[17].I = reg[SPSR_IRQ].I; + break; + case 0x13: + reg[13].I = reg[R13_SVC].I; + reg[14].I = reg[R14_SVC].I; + reg[16].I = SPSR; + if(saveState) + reg[17].I = CPSR; + else + reg[17].I = reg[SPSR_SVC].I; + break; + case 0x17: + reg[13].I = reg[R13_ABT].I; + reg[14].I = reg[R14_ABT].I; + reg[16].I = SPSR; + if(saveState) + reg[17].I = CPSR; + else + reg[17].I = reg[SPSR_ABT].I; + break; + case 0x1b: + reg[13].I = reg[R13_UND].I; + reg[14].I = reg[R14_UND].I; + reg[16].I = SPSR; + if(saveState) + reg[17].I = CPSR; + else + reg[17].I = reg[SPSR_UND].I; + break; + default: + systemMessage(MSG_UNSUPPORTED_ARM_MODE, N_("Unsupported ARM mode %02x"), mode); + break; + } + armMode = mode; + CPUUpdateFlags(breakLoop); + CPUUpdateCPSR(); +} + +void CPUSwitchMode(int mode, bool saveState) +{ + CPUSwitchMode(mode, saveState, true); +} + +void CPUUndefinedException() +{ + u32 PC = reg[15].I; + bool savedArmState = armState; + CPUSwitchMode(0x1b, true, false); + reg[14].I = PC - (savedArmState ? 4 : 2); + reg[15].I = 0x04; + armState = true; + armIrqEnable = false; + armNextPC = 0x04; + reg[15].I += 4; +} + +void CPUSoftwareInterrupt() +{ + u32 PC = reg[15].I; + bool savedArmState = armState; + CPUSwitchMode(0x13, true, false); + reg[14].I = PC - (savedArmState ? 4 : 2); + reg[15].I = 0x08; + armState = true; + armIrqEnable = false; + armNextPC = 0x08; + reg[15].I += 4; +} + +void CPUSoftwareInterrupt(int comment) +{ + static bool disableMessage = false; + if(armState) comment >>= 16; +#ifdef BKPT_SUPPORT + if(comment == 0xff) + { + extern void (*dbgOutput)(char *, u32); + dbgOutput(NULL, reg[0].I); + return; + } +#endif +#ifdef PROFILING + if(comment == 0xfe) + { + profStartup(reg[0].I, reg[1].I); + return; + } + if(comment == 0xfd) + { + profControl(reg[0].I); + return; + } + if(comment == 0xfc) + { + profCleanup(); + return; + } + if(comment == 0xfb) + { + profCount(); + return; + } +#endif + if(comment == 0xfa) + { + agbPrintFlush(); + return; + } +#ifdef SDL + if(comment == 0xf9) + { + emulating = 0; + CPU_BREAK_LOOP_2; + return; + } +#endif + if(useBios) + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("SWI: %08x at %08x (0x%08x,0x%08x,0x%08x,VCOUNT = %2d)\n", comment, + armState ? armNextPC - 4: armNextPC -2, + reg[0].I, + reg[1].I, + reg[2].I, + VCOUNT); + } +#endif + CPUSoftwareInterrupt(); + return; + } + // This would be correct, but it causes problems if uncommented + // else { + // biosProtected = 0xe3a02004; + // } + + switch(comment) + { + case 0x00: + BIOS_SoftReset(); + break; + case 0x01: + BIOS_RegisterRamReset(); + break; + case 0x02: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Halt: (VCOUNT = %2d)\n", + VCOUNT); + } +#endif + holdState = true; + holdType = -1; + break; + case 0x03: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Stop: (VCOUNT = %2d)\n", + VCOUNT); + } +#endif + holdState = true; + holdType = -1; + stopState = true; + break; + case 0x04: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("IntrWait: 0x%08x,0x%08x (VCOUNT = %2d)\n", + reg[0].I, + reg[1].I, + VCOUNT); + } +#endif + CPUSoftwareInterrupt(); + break; + case 0x05: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("VBlankIntrWait: (VCOUNT = %2d)\n", + VCOUNT); + } +#endif + CPUSoftwareInterrupt(); + break; + case 0x06: + CPUSoftwareInterrupt(); + break; + case 0x07: + CPUSoftwareInterrupt(); + break; + case 0x08: + BIOS_Sqrt(); + break; + case 0x09: + BIOS_ArcTan(); + break; + case 0x0A: + BIOS_ArcTan2(); + break; + case 0x0B: + BIOS_CpuSet(); + break; + case 0x0C: + BIOS_CpuFastSet(); + break; + case 0x0E: + BIOS_BgAffineSet(); + break; + case 0x0F: + BIOS_ObjAffineSet(); + break; + case 0x10: + BIOS_BitUnPack(); + break; + case 0x11: + BIOS_LZ77UnCompWram(); + break; + case 0x12: + BIOS_LZ77UnCompVram(); + break; + case 0x13: + BIOS_HuffUnComp(); + break; + case 0x14: + BIOS_RLUnCompWram(); + break; + case 0x15: + BIOS_RLUnCompVram(); + break; + case 0x16: + BIOS_Diff8bitUnFilterWram(); + break; + case 0x17: + BIOS_Diff8bitUnFilterVram(); + break; + case 0x18: + BIOS_Diff16bitUnFilter(); + break; + case 0x19: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("SoundBiasSet: 0x%08x (VCOUNT = %2d)\n", + reg[0].I, + VCOUNT); + } +#endif + if(reg[0].I) + systemSoundPause(); + else + systemSoundResume(); + break; + case 0x1F: + BIOS_MidiKey2Freq(); + break; + case 0x2A: + BIOS_SndDriverJmpTableCopy(); + // let it go, because we don't really emulate this function + default: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("SWI: %08x at %08x (0x%08x,0x%08x,0x%08x,VCOUNT = %2d)\n", comment, + armState ? armNextPC - 4: armNextPC -2, + reg[0].I, + reg[1].I, + reg[2].I, + VCOUNT); + } +#endif + + if(!disableMessage) + { + systemMessage(MSG_UNSUPPORTED_BIOS_FUNCTION, + N_("Unsupported BIOS function %02x called from %08x. A BIOS file is needed in order to get correct behaviour."), + comment, + armMode ? armNextPC - 4: armNextPC - 2); + disableMessage = true; + } + break; + } +} + +void CPUCompareVCOUNT() +{ + if(VCOUNT == (DISPSTAT >> 8)) + { + DISPSTAT |= 4; + UPDATE_REG(0x04, DISPSTAT); + + if(DISPSTAT & 0x20) + { + IF |= 4; + UPDATE_REG(0x202, IF); + } + } + else + { + DISPSTAT &= 0xFFFB; + UPDATE_REG(0x4, DISPSTAT); + } +} + +void doDMA(u32 &s, u32 &d, u32 si, u32 di, u32 c, int transfer32) +{ + int sm = s >> 24; + int dm = d >> 24; + + int sc = c; + + cpuDmaCount = c; + + if(transfer32) + { + s &= 0xFFFFFFFC; + if(s < 0x02000000 && (reg[15].I >> 24)) + { + while(c != 0) + { + CPUWriteMemory(d, 0); + d += di; + c--; + } + } + else + { + while(c != 0) + { + CPUWriteMemory(d, CPUReadMemory(s)); + d += di; + s += si; + c--; + } + } + } + else + { + s &= 0xFFFFFFFE; + si = (int)si >> 1; + di = (int)di >> 1; + if(s < 0x02000000 && (reg[15].I >> 24)) + { + while(c != 0) + { + CPUWriteHalfWord(d, 0); + d += di; + c--; + } + } + else + { + while(c != 0) + { + cpuDmaLast = CPUReadHalfWord(s); + CPUWriteHalfWord(d, cpuDmaLast); + d += di; + s += si; + c--; + } + } + } + + cpuDmaCount = 0; + + int sw = 1+memoryWaitSeq[sm & 15]; + int dw = 1+memoryWaitSeq[dm & 15]; + + int totalTicks = 0; + + if(transfer32) + { + if(!memory32[sm & 15]) + sw <<= 1; + if(!memory32[dm & 15]) + dw <<= 1; + } + + totalTicks = (sw+dw)*sc; + + cpuDmaTicksToUpdate += totalTicks; + + if(*extCpuLoopTicks >= 0) + { + CPU_BREAK_LOOP; + } +} + +void CPUCheckDMA(int reason, int dmamask) +{ + cpuDmaHack = 0; + // DMA 0 + if((DM0CNT_H & 0x8000) && (dmamask & 1)) + { + if(((DM0CNT_H >> 12) & 3) == reason) + { + u32 sourceIncrement = 4; + u32 destIncrement = 4; + switch((DM0CNT_H >> 7) & 3) + { + case 0: + break; + case 1: + sourceIncrement = (u32)-4; + break; + case 2: + sourceIncrement = 0; + break; + } + switch((DM0CNT_H >> 5) & 3) + { + case 0: + break; + case 1: + destIncrement = (u32)-4; + break; + case 2: + destIncrement = 0; + break; + } +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_DMA0) + { + int count = (DM0CNT_L ? DM0CNT_L : 0x4000) << 1; + if(DM0CNT_H & 0x0400) + count <<= 1; + log("DMA0: s=%08x d=%08x c=%04x count=%08x\n", dma0Source, dma0Dest, + DM0CNT_H, + count); + } +#endif + doDMA(dma0Source, dma0Dest, sourceIncrement, destIncrement, + DM0CNT_L ? DM0CNT_L : 0x4000, + DM0CNT_H & 0x0400); + cpuDmaHack = 1; + if(DM0CNT_H & 0x4000) + { + IF |= 0x0100; + UPDATE_REG(0x202, IF); + } + + if(((DM0CNT_H >> 5) & 3) == 3) + { + dma0Dest = DM0DAD_L | (DM0DAD_H << 16); + } + + if(!(DM0CNT_H & 0x0200) || (reason == 0)) + { + DM0CNT_H &= 0x7FFF; + UPDATE_REG(0xBA, DM0CNT_H); + } + } + } + + // DMA 1 + if((DM1CNT_H & 0x8000) && (dmamask & 2)) + { + if(((DM1CNT_H >> 12) & 3) == reason) + { + u32 sourceIncrement = 4; + u32 destIncrement = 4; + switch((DM1CNT_H >> 7) & 3) + { + case 0: + break; + case 1: + sourceIncrement = (u32)-4; + break; + case 2: + sourceIncrement = 0; + break; + } + switch((DM1CNT_H >> 5) & 3) + { + case 0: + break; + case 1: + destIncrement = (u32)-4; + break; + case 2: + destIncrement = 0; + break; + } + if(reason == 3) + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_DMA1) + { + log("DMA1: s=%08x d=%08x c=%04x count=%08x\n", dma1Source, dma1Dest, + DM1CNT_H, + 16); + } +#endif + doDMA(dma1Source, dma1Dest, sourceIncrement, 0, 4, + 0x0400); + } + else + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_DMA1) + { + int count = (DM1CNT_L ? DM1CNT_L : 0x4000) << 1; + if(DM1CNT_H & 0x0400) + count <<= 1; + log("DMA1: s=%08x d=%08x c=%04x count=%08x\n", dma1Source, dma1Dest, + DM1CNT_H, + count); + } +#endif + doDMA(dma1Source, dma1Dest, sourceIncrement, destIncrement, + DM1CNT_L ? DM1CNT_L : 0x4000, + DM1CNT_H & 0x0400); + } + cpuDmaHack = 1; + + if(DM1CNT_H & 0x4000) + { + IF |= 0x0200; + UPDATE_REG(0x202, IF); + } + + if(((DM1CNT_H >> 5) & 3) == 3) + { + dma1Dest = DM1DAD_L | (DM1DAD_H << 16); + } + + if(!(DM1CNT_H & 0x0200) || (reason == 0)) + { + DM1CNT_H &= 0x7FFF; + UPDATE_REG(0xC6, DM1CNT_H); + } + } + } + + // DMA 2 + if((DM2CNT_H & 0x8000) && (dmamask & 4)) + { + if(((DM2CNT_H >> 12) & 3) == reason) + { + u32 sourceIncrement = 4; + u32 destIncrement = 4; + switch((DM2CNT_H >> 7) & 3) + { + case 0: + break; + case 1: + sourceIncrement = (u32)-4; + break; + case 2: + sourceIncrement = 0; + break; + } + switch((DM2CNT_H >> 5) & 3) + { + case 0: + break; + case 1: + destIncrement = (u32)-4; + break; + case 2: + destIncrement = 0; + break; + } + if(reason == 3) + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_DMA2) + { + int count = (4) << 2; + log("DMA2: s=%08x d=%08x c=%04x count=%08x\n", dma2Source, dma2Dest, + DM2CNT_H, + count); + } +#endif + doDMA(dma2Source, dma2Dest, sourceIncrement, 0, 4, + 0x0400); + } + else + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_DMA2) + { + int count = (DM2CNT_L ? DM2CNT_L : 0x4000) << 1; + if(DM2CNT_H & 0x0400) + count <<= 1; + log("DMA2: s=%08x d=%08x c=%04x count=%08x\n", dma2Source, dma2Dest, + DM2CNT_H, + count); + } +#endif + doDMA(dma2Source, dma2Dest, sourceIncrement, destIncrement, + DM2CNT_L ? DM2CNT_L : 0x4000, + DM2CNT_H & 0x0400); + } + cpuDmaHack = 1; + if(DM2CNT_H & 0x4000) + { + IF |= 0x0400; + UPDATE_REG(0x202, IF); + } + + if(((DM2CNT_H >> 5) & 3) == 3) + { + dma2Dest = DM2DAD_L | (DM2DAD_H << 16); + } + + if(!(DM2CNT_H & 0x0200) || (reason == 0)) + { + DM2CNT_H &= 0x7FFF; + UPDATE_REG(0xD2, DM2CNT_H); + } + } + } + + // DMA 3 + if((DM3CNT_H & 0x8000) && (dmamask & 8)) + { + if(((DM3CNT_H >> 12) & 3) == reason) + { + u32 sourceIncrement = 4; + u32 destIncrement = 4; + switch((DM3CNT_H >> 7) & 3) + { + case 0: + break; + case 1: + sourceIncrement = (u32)-4; + break; + case 2: + sourceIncrement = 0; + break; + } + switch((DM3CNT_H >> 5) & 3) + { + case 0: + break; + case 1: + destIncrement = (u32)-4; + break; + case 2: + destIncrement = 0; + break; + } +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_DMA3) + { + int count = (DM3CNT_L ? DM3CNT_L : 0x10000) << 1; + if(DM3CNT_H & 0x0400) + count <<= 1; + log("DMA3: s=%08x d=%08x c=%04x count=%08x\n", dma3Source, dma3Dest, + DM3CNT_H, + count); + } +#endif + doDMA(dma3Source, dma3Dest, sourceIncrement, destIncrement, + DM3CNT_L ? DM3CNT_L : 0x10000, + DM3CNT_H & 0x0400); + if(DM3CNT_H & 0x4000) + { + IF |= 0x0800; + UPDATE_REG(0x202, IF); + } + + if(((DM3CNT_H >> 5) & 3) == 3) + { + dma3Dest = DM3DAD_L | (DM3DAD_H << 16); + } + + if(!(DM3CNT_H & 0x0200) || (reason == 0)) + { + DM3CNT_H &= 0x7FFF; + UPDATE_REG(0xDE, DM3CNT_H); + } + } + } + cpuDmaHack = 0; +} + +void CPUUpdateRegister(u32 address, u16 value) +{ + switch(address) + { + case 0x00: + { + bool change = ((DISPCNT ^ value) & 0x80) ? true : false; + bool changeBG = ((DISPCNT ^ value) & 0x0F00) ? true : false; + DISPCNT = (value & 0xFFF7); + UPDATE_REG(0x00, DISPCNT); + layerEnable = layerSettings & value; + windowOn = (layerEnable & 0x6000) ? true : false; + if(change && !((value & 0x80))) + { + if(!(DISPSTAT & 1)) + { + lcdTicks = 960; + // VCOUNT = 0; + // UPDATE_REG(0x06, VCOUNT); + DISPSTAT &= 0xFFFC; + UPDATE_REG(0x04, DISPSTAT); + CPUCompareVCOUNT(); + } + // (*renderLine)(); + } + CPUUpdateRender(); + // we only care about changes in BG0-BG3 + if(changeBG) + CPUUpdateRenderBuffers(false); + // CPUUpdateTicks(); + } + break; + case 0x04: + DISPSTAT = (value & 0xFF38) | (DISPSTAT & 7); + UPDATE_REG(0x04, DISPSTAT); + break; + case 0x06: + // not writable + break; + case 0x08: + BG0CNT = (value & 0xDFCF); + UPDATE_REG(0x08, BG0CNT); + break; + case 0x0A: + BG1CNT = (value & 0xDFCF); + UPDATE_REG(0x0A, BG1CNT); + break; + case 0x0C: + BG2CNT = (value & 0xFFCF); + UPDATE_REG(0x0C, BG2CNT); + break; + case 0x0E: + BG3CNT = (value & 0xFFCF); + UPDATE_REG(0x0E, BG3CNT); + break; + case 0x10: + BG0HOFS = value & 511; + UPDATE_REG(0x10, BG0HOFS); + break; + case 0x12: + BG0VOFS = value & 511; + UPDATE_REG(0x12, BG0VOFS); + break; + case 0x14: + BG1HOFS = value & 511; + UPDATE_REG(0x14, BG1HOFS); + break; + case 0x16: + BG1VOFS = value & 511; + UPDATE_REG(0x16, BG1VOFS); + break; + case 0x18: + BG2HOFS = value & 511; + UPDATE_REG(0x18, BG2HOFS); + break; + case 0x1A: + BG2VOFS = value & 511; + UPDATE_REG(0x1A, BG2VOFS); + break; + case 0x1C: + BG3HOFS = value & 511; + UPDATE_REG(0x1C, BG3HOFS); + break; + case 0x1E: + BG3VOFS = value & 511; + UPDATE_REG(0x1E, BG3VOFS); + break; + case 0x20: + BG2PA = value; + UPDATE_REG(0x20, BG2PA); + break; + case 0x22: + BG2PB = value; + UPDATE_REG(0x22, BG2PB); + break; + case 0x24: + BG2PC = value; + UPDATE_REG(0x24, BG2PC); + break; + case 0x26: + BG2PD = value; + UPDATE_REG(0x26, BG2PD); + break; + case 0x28: + BG2X_L = value; + UPDATE_REG(0x28, BG2X_L); + gfxBG2Changed |= 1; + break; + case 0x2A: + BG2X_H = (value & 0xFFF); + UPDATE_REG(0x2A, BG2X_H); + gfxBG2Changed |= 1; + break; + case 0x2C: + BG2Y_L = value; + UPDATE_REG(0x2C, BG2Y_L); + gfxBG2Changed |= 2; + break; + case 0x2E: + BG2Y_H = value & 0xFFF; + UPDATE_REG(0x2E, BG2Y_H); + gfxBG2Changed |= 2; + break; + case 0x30: + BG3PA = value; + UPDATE_REG(0x30, BG3PA); + break; + case 0x32: + BG3PB = value; + UPDATE_REG(0x32, BG3PB); + break; + case 0x34: + BG3PC = value; + UPDATE_REG(0x34, BG3PC); + break; + case 0x36: + BG3PD = value; + UPDATE_REG(0x36, BG3PD); + break; + case 0x38: + BG3X_L = value; + UPDATE_REG(0x38, BG3X_L); + gfxBG3Changed |= 1; + break; + case 0x3A: + BG3X_H = value & 0xFFF; + UPDATE_REG(0x3A, BG3X_H); + gfxBG3Changed |= 1; + break; + case 0x3C: + BG3Y_L = value; + UPDATE_REG(0x3C, BG3Y_L); + gfxBG3Changed |= 2; + break; + case 0x3E: + BG3Y_H = value & 0xFFF; + UPDATE_REG(0x3E, BG3Y_H); + gfxBG3Changed |= 2; + break; + case 0x40: + WIN0H = value; + UPDATE_REG(0x40, WIN0H); + CPUUpdateWindow0(); + break; + case 0x42: + WIN1H = value; + UPDATE_REG(0x42, WIN1H); + CPUUpdateWindow1(); + break; + case 0x44: + WIN0V = value; + UPDATE_REG(0x44, WIN0V); + break; + case 0x46: + WIN1V = value; + UPDATE_REG(0x46, WIN1V); + break; + case 0x48: + WININ = value & 0x3F3F; + UPDATE_REG(0x48, WININ); + break; + case 0x4A: + WINOUT = value & 0x3F3F; + UPDATE_REG(0x4A, WINOUT); + break; + case 0x4C: + MOSAIC = value; + UPDATE_REG(0x4C, MOSAIC); + break; + case 0x50: + BLDMOD = value & 0x3FFF; + UPDATE_REG(0x50, BLDMOD); + fxOn = ((BLDMOD>>6)&3) != 0; + CPUUpdateRender(); + break; + case 0x52: + COLEV = value & 0x1F1F; + UPDATE_REG(0x52, COLEV); + break; + case 0x54: + COLY = value & 0x1F; + UPDATE_REG(0x54, COLY); + break; + case 0x60: + case 0x62: + case 0x64: + case 0x68: + case 0x6c: + case 0x70: + case 0x72: + case 0x74: + case 0x78: + case 0x7c: + case 0x80: + case 0x84: + soundEvent(address&0xFF, (u8)(value & 0xFF)); + soundEvent((address&0xFF)+1, (u8)(value>>8)); + break; + case 0x82: + case 0x88: + case 0xa0: + case 0xa2: + case 0xa4: + case 0xa6: + case 0x90: + case 0x92: + case 0x94: + case 0x96: + case 0x98: + case 0x9a: + case 0x9c: + case 0x9e: + soundEvent(address&0xFF, value); + break; + case 0xB0: + DM0SAD_L = value; + UPDATE_REG(0xB0, DM0SAD_L); + break; + case 0xB2: + DM0SAD_H = value & 0x07FF; + UPDATE_REG(0xB2, DM0SAD_H); + break; + case 0xB4: + DM0DAD_L = value; + UPDATE_REG(0xB4, DM0DAD_L); + break; + case 0xB6: + DM0DAD_H = value & 0x07FF; + UPDATE_REG(0xB6, DM0DAD_H); + break; + case 0xB8: + DM0CNT_L = value & 0x3FFF; + UPDATE_REG(0xB8, 0); + break; + case 0xBA: + { + bool start = ((DM0CNT_H ^ value) & 0x8000) ? true : false; + value &= 0xF7E0; + + DM0CNT_H = value; + UPDATE_REG(0xBA, DM0CNT_H); + + if(start && (value & 0x8000)) + { + dma0Source = DM0SAD_L | (DM0SAD_H << 16); + dma0Dest = DM0DAD_L | (DM0DAD_H << 16); + CPUCheckDMA(0, 1); + } + } + break; + case 0xBC: + DM1SAD_L = value; + UPDATE_REG(0xBC, DM1SAD_L); + break; + case 0xBE: + DM1SAD_H = value & 0x0FFF; + UPDATE_REG(0xBE, DM1SAD_H); + break; + case 0xC0: + DM1DAD_L = value; + UPDATE_REG(0xC0, DM1DAD_L); + break; + case 0xC2: + DM1DAD_H = value & 0x07FF; + UPDATE_REG(0xC2, DM1DAD_H); + break; + case 0xC4: + DM1CNT_L = value & 0x3FFF; + UPDATE_REG(0xC4, 0); + break; + case 0xC6: + { + bool start = ((DM1CNT_H ^ value) & 0x8000) ? true : false; + value &= 0xF7E0; + + DM1CNT_H = value; + UPDATE_REG(0xC6, DM1CNT_H); + + if(start && (value & 0x8000)) + { + dma1Source = DM1SAD_L | (DM1SAD_H << 16); + dma1Dest = DM1DAD_L | (DM1DAD_H << 16); + CPUCheckDMA(0, 2); + } + } + break; + case 0xC8: + DM2SAD_L = value; + UPDATE_REG(0xC8, DM2SAD_L); + break; + case 0xCA: + DM2SAD_H = value & 0x0FFF; + UPDATE_REG(0xCA, DM2SAD_H); + break; + case 0xCC: + DM2DAD_L = value; + UPDATE_REG(0xCC, DM2DAD_L); + break; + case 0xCE: + DM2DAD_H = value & 0x07FF; + UPDATE_REG(0xCE, DM2DAD_H); + break; + case 0xD0: + DM2CNT_L = value & 0x3FFF; + UPDATE_REG(0xD0, 0); + break; + case 0xD2: + { + bool start = ((DM2CNT_H ^ value) & 0x8000) ? true : false; + + value &= 0xF7E0; + + DM2CNT_H = value; + UPDATE_REG(0xD2, DM2CNT_H); + + if(start && (value & 0x8000)) + { + dma2Source = DM2SAD_L | (DM2SAD_H << 16); + dma2Dest = DM2DAD_L | (DM2DAD_H << 16); + + CPUCheckDMA(0, 4); + } + } + break; + case 0xD4: + DM3SAD_L = value; + UPDATE_REG(0xD4, DM3SAD_L); + break; + case 0xD6: + DM3SAD_H = value & 0x0FFF; + UPDATE_REG(0xD6, DM3SAD_H); + break; + case 0xD8: + DM3DAD_L = value; + UPDATE_REG(0xD8, DM3DAD_L); + break; + case 0xDA: + DM3DAD_H = value & 0x0FFF; + UPDATE_REG(0xDA, DM3DAD_H); + break; + case 0xDC: + DM3CNT_L = value; + UPDATE_REG(0xDC, 0); + break; + case 0xDE: + { + bool start = ((DM3CNT_H ^ value) & 0x8000) ? true : false; + + value &= 0xFFE0; + + DM3CNT_H = value; + UPDATE_REG(0xDE, DM3CNT_H); + + if(start && (value & 0x8000)) + { + dma3Source = DM3SAD_L | (DM3SAD_H << 16); + dma3Dest = DM3DAD_L | (DM3DAD_H << 16); + CPUCheckDMA(0,8); + } + } + break; + case 0x100: + timer0Reload = value; + break; + case 0x102: + timer0Ticks = timer0ClockReload = TIMER_TICKS[value & 3]; + if(!timer0On && (value & 0x80)) + { + // reload the counter + TM0D = timer0Reload; + if(timer0ClockReload == 1) + timer0Ticks = 0x10000 - TM0D; + UPDATE_REG(0x100, TM0D); + } + timer0On = value & 0x80 ? true : false; + TM0CNT = value & 0xC7; + UPDATE_REG(0x102, TM0CNT); + // CPUUpdateTicks(); + break; + case 0x104: + timer1Reload = value; + break; + case 0x106: + timer1Ticks = timer1ClockReload = TIMER_TICKS[value & 3]; + if(!timer1On && (value & 0x80)) + { + // reload the counter + TM1D = timer1Reload; + if(timer1ClockReload == 1) + timer1Ticks = 0x10000 - TM1D; + UPDATE_REG(0x104, TM1D); + } + timer1On = value & 0x80 ? true : false; + TM1CNT = value & 0xC7; + UPDATE_REG(0x106, TM1CNT); + break; + case 0x108: + timer2Reload = value; + break; + case 0x10A: + timer2Ticks = timer2ClockReload = TIMER_TICKS[value & 3]; + if(!timer2On && (value & 0x80)) + { + // reload the counter + TM2D = timer2Reload; + if(timer2ClockReload == 1) + timer2Ticks = 0x10000 - TM2D; + UPDATE_REG(0x108, TM2D); + } + timer2On = value & 0x80 ? true : false; + TM2CNT = value & 0xC7; + UPDATE_REG(0x10A, TM2CNT); + break; + case 0x10C: + timer3Reload = value; + break; + case 0x10E: + timer3Ticks = timer3ClockReload = TIMER_TICKS[value & 3]; + if(!timer3On && (value & 0x80)) + { + // reload the counter + TM3D = timer3Reload; + if(timer3ClockReload == 1) + timer3Ticks = 0x10000 - TM3D; + UPDATE_REG(0x10C, TM3D); + } + timer3On = value & 0x80 ? true : false; + TM3CNT = value & 0xC7; + UPDATE_REG(0x10E, TM3CNT); + break; + case 0x128: + if(value & 0x80) + { + value &= 0xff7f; + if(value & 1 && (value & 0x4000)) + { + UPDATE_REG(0x12a, 0xFF); + IF |= 0x80; + UPDATE_REG(0x202, IF); + value &= 0x7f7f; + } + } + UPDATE_REG(0x128, value); + break; + case 0x130: + P1 |= (value & 0x3FF); + UPDATE_REG(0x130, P1); + break; + case 0x132: + UPDATE_REG(0x132, value & 0xC3FF); + break; + case 0x200: + IE = value & 0x3FFF; + UPDATE_REG(0x200, IE); + if((IME & 1) && (IF & IE) && armIrqEnable) + { + CPU_BREAK_LOOP_2; + } + break; + case 0x202: + IF ^= (value & IF); + UPDATE_REG(0x202, IF); + break; + case 0x204: + { + int i; + memoryWait[0x0e] = memoryWaitSeq[0x0e] = gamepakRamWaitState[value & 3]; + + if(!speedHack) + { + memoryWait[0x08] = memoryWait[0x09] = gamepakWaitState[(value >> 2) & 7]; + memoryWaitSeq[0x08] = memoryWaitSeq[0x09] = + gamepakWaitState0[(value >> 2) & 7]; + + memoryWait[0x0a] = memoryWait[0x0b] = gamepakWaitState[(value >> 5) & 7]; + memoryWaitSeq[0x0a] = memoryWaitSeq[0x0b] = + gamepakWaitState1[(value >> 5) & 7]; + + memoryWait[0x0c] = memoryWait[0x0d] = gamepakWaitState[(value >> 8) & 7]; + memoryWaitSeq[0x0c] = memoryWaitSeq[0x0d] = + gamepakWaitState2[(value >> 8) & 7]; + } + else + { + memoryWait[0x08] = memoryWait[0x09] = 4; + memoryWaitSeq[0x08] = memoryWaitSeq[0x09] = 2; + + memoryWait[0x0a] = memoryWait[0x0b] = 4; + memoryWaitSeq[0x0a] = memoryWaitSeq[0x0b] = 4; + + memoryWait[0x0c] = memoryWait[0x0d] = 4; + memoryWaitSeq[0x0c] = memoryWaitSeq[0x0d] = 8; + } + for(i = 0; i < 16; i++) + { + memoryWaitFetch32[i] = memoryWait32[i] = memoryWait[i] * + (memory32[i] ? 1 : 2); + memoryWaitFetch[i] = memoryWait[i]; + } + memoryWaitFetch32[3] += 1; + memoryWaitFetch32[2] += 3; + + if(value & 0x4000) + { + for(i = 8; i < 16; i++) + { + memoryWaitFetch32[i] = 2*cpuMemoryWait[i]; + memoryWaitFetch[i] = cpuMemoryWait[i]; + } + } + UPDATE_REG(0x204, value); + } + break; + case 0x208: + IME = value & 1; + UPDATE_REG(0x208, IME); + if((IME & 1) && (IF & IE) && armIrqEnable) + { + CPU_BREAK_LOOP_2; + } + break; + case 0x300: + if(value != 0) + value &= 0xFFFE; + UPDATE_REG(0x300, value); + break; + default: + UPDATE_REG(address&0x3FE, value); + break; + } +} + +void CPUWriteHalfWord(u32 address, u16 value) +{ +#ifdef DEV_VERSION + if(address & 1) + { + if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) + { + log("Unaligned halfword write: %04x to %08x from %08x\n", + value, + address, + armMode ? armNextPC - 4 : armNextPC - 2); + } + } +#endif + + switch(address >> 24) + { + case 2: +#ifdef SDL + if(*((u16 *)&freezeWorkRAM[address & 0x3FFFE])) + cheatsWriteHalfWord((u16 *)&workRAM[address & 0x3FFFE], + value, + *((u16 *)&freezeWorkRAM[address & 0x3FFFE])); + else +#endif + WRITE16LE(((u16 *)&workRAM[address & 0x3FFFE]),value); + break; + case 3: +#ifdef SDL + if(*((u16 *)&freezeInternalRAM[address & 0x7ffe])) + cheatsWriteHalfWord((u16 *)&internalRAM[address & 0x7ffe], + value, + *((u16 *)&freezeInternalRAM[address & 0x7ffe])); + else +#endif + WRITE16LE(((u16 *)&internalRAM[address & 0x7ffe]), value); + break; + case 4: + CPUUpdateRegister(address & 0x3fe, value); + break; + case 5: + WRITE16LE(((u16 *)&paletteRAM[address & 0x3fe]), value); + break; + case 6: + if(address & 0x10000) + WRITE16LE(((u16 *)&vram[address & 0x17ffe]), value); + else + WRITE16LE(((u16 *)&vram[address & 0x1fffe]), value); + break; + case 7: + WRITE16LE(((u16 *)&oam[address & 0x3fe]), value); + break; + case 8: + case 9: + if(address == 0x80000c4 || address == 0x80000c6 || address == 0x80000c8) + { + if(!rtcWrite(address, value)) + goto unwritable; + } + else if(!agbPrintWrite(address, value)) goto unwritable; + break; + case 13: + if(cpuEEPROMEnabled) + { + eepromWrite(address, (u8)value); + break; + } + goto unwritable; + case 14: + if(!eepromInUse | cpuSramEnabled | cpuFlashEnabled) + { + (*cpuSaveGameFunc)(address, (u8)value); + break; + } + goto unwritable; + default: +unwritable: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_WRITE) + { + log("Illegal halfword write: %04x to %08x from %08x\n", + value, + address, + armMode ? armNextPC - 4 : armNextPC - 2); + } +#endif + break; + } +} + +void CPUWriteByte(u32 address, u8 b) +{ + switch(address >> 24) + { + case 2: +#ifdef SDL + if(freezeWorkRAM[address & 0x3FFFF]) + cheatsWriteByte(&workRAM[address & 0x3FFFF], b); + else +#endif + workRAM[address & 0x3FFFF] = b; + break; + case 3: +#ifdef SDL + if(freezeInternalRAM[address & 0x7fff]) + cheatsWriteByte(&internalRAM[address & 0x7fff], b); + else +#endif + internalRAM[address & 0x7fff] = b; + break; + case 4: + switch(address & 0x3FF) + { + case 0x301: + if(b == 0x80) + stopState = true; + holdState = 1; + holdType = -1; + break; + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x68: + case 0x69: + case 0x6c: + case 0x6d: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x78: + case 0x79: + case 0x7c: + case 0x7d: + case 0x80: + case 0x81: + case 0x84: + case 0x85: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9a: + case 0x9b: + case 0x9c: + case 0x9d: + case 0x9e: + case 0x9f: + soundEvent(address&0xFF, b); + break; + default: + // if(address & 1) { + // CPUWriteHalfWord(address-1, (CPUReadHalfWord(address-1)&0x00FF)|((int)b<<8)); + // } else + if(address & 1) + CPUUpdateRegister(address & 0x3fe, + ((READ16LE(((u16 *)&ioMem[address & 0x3fe]))) + & 0x00FF) | + b<<8); + else + CPUUpdateRegister(address & 0x3fe, + ((READ16LE(((u16 *)&ioMem[address & 0x3fe])) & 0xFF00) | b)); + } + break; + case 5: + // no need to switch + *((u16 *)&paletteRAM[address & 0x3FE]) = (b << 8) | b; + break; + case 6: + // no need to switch + if(address & 0x10000) + *((u16 *)&vram[address & 0x17FFE]) = (b << 8) | b; + else + *((u16 *)&vram[address & 0x1FFFE]) = (b << 8) | b; + break; + case 7: + // no need to switch + *((u16 *)&oam[address & 0x3FE]) = (b << 8) | b; + break; + case 13: + if(cpuEEPROMEnabled) + { + eepromWrite(address, b); + break; + } + goto unwritable; + case 14: + if(!eepromInUse | cpuSramEnabled | cpuFlashEnabled) + { + (*cpuSaveGameFunc)(address, b); + break; + } + // default + default: +unwritable: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_WRITE) + { + log("Illegal byte write: %02x to %08x from %08x\n", + b, + address, + armMode ? armNextPC - 4 : armNextPC -2 ); + } +#endif + break; + } +} + +u8 cpuBitsSet[256]; +u8 cpuLowestBitSet[256]; + +void CPUInit(const char *biosFileName, bool useBiosFile) +{ +#ifdef WORDS_BIGENDIAN + if(!cpuBiosSwapped) + { + for(unsigned int i = 0; i < sizeof(myROM)/4; i++) + { + WRITE32LE(&myROM[i], myROM[i]); + } + cpuBiosSwapped = true; + } +#endif + gbaSaveType = 0; + eepromInUse = 0; + saveType = 0; + useBios = false; + + if(useBiosFile) + { +#if 0 + int size = 0x4000; + if(utilLoad(biosFileName, + CPUIsGBABios, + bios, + size)) + { + if(size == 0x4000) + useBios = true; + else + systemMessage(MSG_INVALID_BIOS_FILE_SIZE, N_("Invalid BIOS file size")); + } +#else + FILE* bfil; + int res; + bfil = gen_fopen(biosFileName, "rb"); + if ( bfil == NULL ) + { + useBios = false; + } + else + { + res = gen_fread(bios, 1, 0x4000, bfil); + gen_fclose(bfil); + useBios = true; + } +#endif + } + + if(!useBios) + { + memcpy(bios, myROM, sizeof(myROM)); + } + + int i = 0; + + biosProtected[0] = 0x00; + biosProtected[1] = 0xf0; + biosProtected[2] = 0x29; + biosProtected[3] = 0xe1; + + for(i = 0; i < 256; i++) + { + int count = 0; + int j; + for(j = 0; j < 8; j++) + if(i & (1 << j)) + count++; + cpuBitsSet[i] = count; + + for(j = 0; j < 8; j++) + if(i & (1 << j)) + break; + cpuLowestBitSet[i] = j; + } + + for(i = 0; i < 0x400; i++) + ioReadable[i] = true; + for(i = 0x10; i < 0x48; i++) + ioReadable[i] = false; + for(i = 0x4c; i < 0x50; i++) + ioReadable[i] = false; + for(i = 0x54; i < 0x60; i++) + ioReadable[i] = false; + for(i = 0x8c; i < 0x90; i++) + ioReadable[i] = false; + for(i = 0xa0; i < 0xb8; i++) + ioReadable[i] = false; + for(i = 0xbc; i < 0xc4; i++) + ioReadable[i] = false; + for(i = 0xc8; i < 0xd0; i++) + ioReadable[i] = false; + for(i = 0xd4; i < 0xdc; i++) + ioReadable[i] = false; + for(i = 0xe0; i < 0x100; i++) + ioReadable[i] = false; + for(i = 0x110; i < 0x120; i++) + ioReadable[i] = false; + for(i = 0x12c; i < 0x130; i++) + ioReadable[i] = false; + for(i = 0x138; i < 0x140; i++) + ioReadable[i] = false; + for(i = 0x144; i < 0x150; i++) + ioReadable[i] = false; + for(i = 0x15c; i < 0x200; i++) + ioReadable[i] = false; + for(i = 0x20c; i < 0x300; i++) + ioReadable[i] = false; + for(i = 0x304; i < 0x400; i++) + ioReadable[i] = false; + +#if 0 + *((u16 *)&rom[0x1fe209c]) = 0xdffa; // SWI 0xFA + *((u16 *)&rom[0x1fe209e]) = 0x4770; // BX LR +#endif + +} + +void CPUReset() +{ + if(gbaSaveType == 0) + { + if(eepromInUse) + gbaSaveType = 3; + else + switch(saveType) + { + case 1: + gbaSaveType = 1; + break; + case 2: + gbaSaveType = 2; + break; + } + } + rtcReset(); + // clen registers + memset(®[0], 0, sizeof(reg)); + // clean OAM + memset(oam, 0, 0x400); + // clean palette + memset(paletteRAM, 0, 0x400); + // clean picture + memset(pix, 0, 4*160*240); + // clean vram + memset(vram, 0, 0x20000); + // clean io memory + memset(ioMem, 0, 0x400); + + DISPCNT = 0x0080; + DISPSTAT = 0x0000; + VCOUNT = 0x0000; + BG0CNT = 0x0000; + BG1CNT = 0x0000; + BG2CNT = 0x0000; + BG3CNT = 0x0000; + BG0HOFS = 0x0000; + BG0VOFS = 0x0000; + BG1HOFS = 0x0000; + BG1VOFS = 0x0000; + BG2HOFS = 0x0000; + BG2VOFS = 0x0000; + BG3HOFS = 0x0000; + BG3VOFS = 0x0000; + BG2PA = 0x0100; + BG2PB = 0x0000; + BG2PC = 0x0000; + BG2PD = 0x0100; + BG2X_L = 0x0000; + BG2X_H = 0x0000; + BG2Y_L = 0x0000; + BG2Y_H = 0x0000; + BG3PA = 0x0100; + BG3PB = 0x0000; + BG3PC = 0x0000; + BG3PD = 0x0100; + BG3X_L = 0x0000; + BG3X_H = 0x0000; + BG3Y_L = 0x0000; + BG3Y_H = 0x0000; + WIN0H = 0x0000; + WIN1H = 0x0000; + WIN0V = 0x0000; + WIN1V = 0x0000; + WININ = 0x0000; + WINOUT = 0x0000; + MOSAIC = 0x0000; + BLDMOD = 0x0000; + COLEV = 0x0000; + COLY = 0x0000; + DM0SAD_L = 0x0000; + DM0SAD_H = 0x0000; + DM0DAD_L = 0x0000; + DM0DAD_H = 0x0000; + DM0CNT_L = 0x0000; + DM0CNT_H = 0x0000; + DM1SAD_L = 0x0000; + DM1SAD_H = 0x0000; + DM1DAD_L = 0x0000; + DM1DAD_H = 0x0000; + DM1CNT_L = 0x0000; + DM1CNT_H = 0x0000; + DM2SAD_L = 0x0000; + DM2SAD_H = 0x0000; + DM2DAD_L = 0x0000; + DM2DAD_H = 0x0000; + DM2CNT_L = 0x0000; + DM2CNT_H = 0x0000; + DM3SAD_L = 0x0000; + DM3SAD_H = 0x0000; + DM3DAD_L = 0x0000; + DM3DAD_H = 0x0000; + DM3CNT_L = 0x0000; + DM3CNT_H = 0x0000; + TM0D = 0x0000; + TM0CNT = 0x0000; + TM1D = 0x0000; + TM1CNT = 0x0000; + TM2D = 0x0000; + TM2CNT = 0x0000; + TM3D = 0x0000; + TM3CNT = 0x0000; + P1 = 0x03FF; + IE = 0x0000; + IF = 0x0000; + IME = 0x0000; + + armMode = 0x1F; + + if(cpuIsMultiBoot) + { + reg[13].I = 0x03007F00; + reg[15].I = 0x02000000; + reg[16].I = 0x00000000; + reg[R13_IRQ].I = 0x03007FA0; + reg[R13_SVC].I = 0x03007FE0; + armIrqEnable = true; + } + else + { + if(useBios && !skipBios) + { + reg[15].I = 0x00000000; + armMode = 0x13; + armIrqEnable = false; + } + else + { + reg[13].I = 0x03007F00; + reg[15].I = 0x08000000; + reg[16].I = 0x00000000; + reg[R13_IRQ].I = 0x03007FA0; + reg[R13_SVC].I = 0x03007FE0; + armIrqEnable = true; + } + } + armState = true; + C_FLAG = V_FLAG = N_FLAG = Z_FLAG = false; + UPDATE_REG(0x00, DISPCNT); + UPDATE_REG(0x20, BG2PA); + UPDATE_REG(0x26, BG2PD); + UPDATE_REG(0x30, BG3PA); + UPDATE_REG(0x36, BG3PD); + UPDATE_REG(0x130, P1); + UPDATE_REG(0x88, 0x200); + + // disable FIQ + reg[16].I |= 0x40; + + CPUUpdateCPSR(); + + armNextPC = reg[15].I; + reg[15].I += 4; + + // reset internal state + holdState = false; + holdType = 0; + + biosProtected[0] = 0x00; + biosProtected[1] = 0xf0; + biosProtected[2] = 0x29; + biosProtected[3] = 0xe1; + + lcdTicks = 960; + timer0On = false; + timer0Ticks = 0; + timer0Reload = 0; + timer0ClockReload = 0; + timer1On = false; + timer1Ticks = 0; + timer1Reload = 0; + timer1ClockReload = 0; + timer2On = false; + timer2Ticks = 0; + timer2Reload = 0; + timer2ClockReload = 0; + timer3On = false; + timer3Ticks = 0; + timer3Reload = 0; + timer3ClockReload = 0; + dma0Source = 0; + dma0Dest = 0; + dma1Source = 0; + dma1Dest = 0; + dma2Source = 0; + dma2Dest = 0; + dma3Source = 0; + dma3Dest = 0; + cpuSaveGameFunc = flashSaveDecide; + renderLine = mode0RenderLine; + fxOn = false; + windowOn = false; + frameCount = 0; + saveType = 0; + layerEnable = DISPCNT & layerSettings; + + CPUUpdateRenderBuffers(true); + + for(int i = 0; i < 256; i++) + { + map[i].address = (u8 *)&dummyAddress; + map[i].mask = 0; + } + + map[0].address = bios; + map[0].mask = 0x3FFF; + map[2].address = workRAM; + map[2].mask = 0x3FFFF; + map[3].address = internalRAM; + map[3].mask = 0x7FFF; + map[4].address = ioMem; + map[4].mask = 0x3FF; + map[5].address = paletteRAM; + map[5].mask = 0x3FF; + map[6].address = vram; + map[6].mask = 0x1FFFF; + map[7].address = oam; + map[7].mask = 0x3FF; + map[8].address = rom; + map[8].mask = 0x1FFFFFF; + map[9].address = rom; + map[9].mask = 0x1FFFFFF; + map[10].address = rom; + map[10].mask = 0x1FFFFFF; + map[12].address = rom; + map[12].mask = 0x1FFFFFF; + map[14].address = flashSaveMemory; + map[14].mask = 0xFFFF; + + eepromReset(); + flashReset(); + + soundReset(); + + CPUUpdateWindow0(); + CPUUpdateWindow1(); + + // make sure registers are correctly initialized if not using BIOS + if(!useBios) + { + if(cpuIsMultiBoot) + BIOS_RegisterRamReset(0xfe); + else + BIOS_RegisterRamReset(0xff); + } + else + { + if(cpuIsMultiBoot) + BIOS_RegisterRamReset(0xfe); + } + + switch(cpuSaveType) + { + case 0: // automatic + cpuSramEnabled = true; + cpuFlashEnabled = true; + cpuEEPROMEnabled = true; + cpuEEPROMSensorEnabled = false; + break; + case 1: // EEPROM + cpuSramEnabled = false; + cpuFlashEnabled = false; + cpuEEPROMEnabled = true; + cpuEEPROMSensorEnabled = false; + break; + case 2: // SRAM + cpuSramEnabled = true; + cpuFlashEnabled = false; + cpuEEPROMEnabled = false; + cpuEEPROMSensorEnabled = false; + cpuSaveGameFunc = sramWrite; + break; + case 3: // FLASH + cpuSramEnabled = false; + cpuFlashEnabled = true; + cpuEEPROMEnabled = false; + cpuEEPROMSensorEnabled = false; + cpuSaveGameFunc = flashWrite; + break; + case 4: // EEPROM+Sensor + cpuSramEnabled = false; + cpuFlashEnabled = false; + cpuEEPROMEnabled = true; + cpuEEPROMSensorEnabled = true; + break; + case 5: // NONE + cpuSramEnabled = false; + cpuFlashEnabled = false; + cpuEEPROMEnabled = false; + cpuEEPROMSensorEnabled = false; + break; + } + + systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; + + lastTime = systemGetClock(); +} + +void CPUInterrupt() +{ + u32 PC = reg[15].I; + bool savedState = armState; + CPUSwitchMode(0x12, true, false); + reg[14].I = PC; + if(!savedState) + reg[14].I += 2; + reg[15].I = 0x18; + armState = true; + armIrqEnable = false; + + armNextPC = reg[15].I; + reg[15].I += 4; + + // if(!holdState) + biosProtected[0] = 0x02; + biosProtected[1] = 0xc0; + biosProtected[2] = 0x5e; + biosProtected[3] = 0xe5; +} + +void log(const char *defaultMsg, ...) +{ +#if 0 + char buffer[2048]; + va_list valist; + + va_start(valist, defaultMsg); + vsprintf(buffer, defaultMsg, valist); + + if(out == NULL) + { + out = gen_fopen("trace.log","w"); + } + + fputs(buffer, out); + + va_end(valist); +#endif +} + +void CPULoop(int ticks) +{ + int clockTicks; + int cpuLoopTicks = 0; + int timerOverflow = 0; + // variables used by the CPU core + + extCpuLoopTicks = &cpuLoopTicks; + extClockTicks = &clockTicks; + extTicks = &ticks; + + cpuLoopTicks = CPUUpdateTicks(); + if(cpuLoopTicks > ticks) + { + cpuLoopTicks = ticks; + cpuSavedTicks = ticks; + } + + if(intState) + { + cpuLoopTicks = 5; + cpuSavedTicks = 5; + } + + for(;;) + { +#ifndef FINAL_VERSION + if(systemDebug) + { + if(systemDebug >= 10 && !holdState) + { + CPUUpdateCPSR(); + sprintf(buffer, "R00=%08x R01=%08x R02=%08x R03=%08x R04=%08x R05=%08x R06=%08x R07=%08x R08=%08x R09=%08x R10=%08x R11=%08x R12=%08x R13=%08x R14=%08x R15=%08x R16=%08x R17=%08x\n", + reg[0].I, reg[1].I, reg[2].I, reg[3].I, reg[4].I, reg[5].I, + reg[6].I, reg[7].I, reg[8].I, reg[9].I, reg[10].I, reg[11].I, + reg[12].I, reg[13].I, reg[14].I, reg[15].I, reg[16].I, + reg[17].I); +#ifdef SDL + log(buffer); +#else + winlog(buffer); +#endif + } + else if(!holdState) + { + sprintf(buffer, "PC=%08x\n", armNextPC); +#ifdef SDL + log(buffer); +#else + winlog(buffer); +#endif + } + } +#endif + + if(!holdState) + { + if(armState) + { +#include "arm-new.h" + } + else + { +#include "thumb.h" + } + } + else + { + clockTicks = lcdTicks; + + if(soundTicks < clockTicks) + clockTicks = soundTicks; + + if(timer0On && (timer0Ticks < clockTicks)) + { + clockTicks = timer0Ticks; + } + if(timer1On && (timer1Ticks < clockTicks)) + { + clockTicks = timer1Ticks; + } + if(timer2On && (timer2Ticks < clockTicks)) + { + clockTicks = timer2Ticks; + } + if(timer3On && (timer3Ticks < clockTicks)) + { + clockTicks = timer3Ticks; + } +#ifdef PROFILING + if(profilingTicksReload != 0) + { + if(profilingTicks < clockTicks) + { + clockTicks = profilingTicks; + } + } +#endif + } + + cpuLoopTicks -= clockTicks; + if((cpuLoopTicks <= 0)) + { + if(cpuSavedTicks) + { + clockTicks = cpuSavedTicks;// + cpuLoopTicks; + } + cpuDmaTicksToUpdate = -cpuLoopTicks; + +updateLoop: + lcdTicks -= clockTicks; + + if(lcdTicks <= 0) + { + if(DISPSTAT & 1) + { // V-BLANK + // if in V-Blank mode, keep computing... + if(DISPSTAT & 2) + { + lcdTicks += 960; + VCOUNT++; + UPDATE_REG(0x06, VCOUNT); + DISPSTAT &= 0xFFFD; + UPDATE_REG(0x04, DISPSTAT); + CPUCompareVCOUNT(); + } + else + { + lcdTicks += 272; + DISPSTAT |= 2; + UPDATE_REG(0x04, DISPSTAT); + if(DISPSTAT & 16) + { + IF |= 2; + UPDATE_REG(0x202, IF); + } + } + + if(VCOUNT >= 228) + { + DISPSTAT &= 0xFFFC; + UPDATE_REG(0x04, DISPSTAT); + VCOUNT = 0; + UPDATE_REG(0x06, VCOUNT); + CPUCompareVCOUNT(); + } + } + else + { + int framesToSkip = systemFrameSkip; + if(speedup) + framesToSkip = 9; // try 6 FPS during speedup + + if(DISPSTAT & 2) + { + // if in H-Blank, leave it and move to drawing mode + VCOUNT++; + UPDATE_REG(0x06, VCOUNT); + + lcdTicks += (960); + DISPSTAT &= 0xFFFD; + if(VCOUNT == 160) + { + count++; + systemFrame(); + + if((count % 10) == 0) + { + system10Frames(60); + } + if(count == 60) + { + u32 time = systemGetClock(); + if(time != lastTime) + { + u32 t = 100000/(time - lastTime); + systemShowSpeed(t); + } + else + systemShowSpeed(0); + lastTime = time; + count = 0; + } + u32 joy = 0; + // update joystick information + if(systemReadJoypads()) + // read default joystick + joy = systemReadJoypad(-1); + P1 = 0x03FF ^ (joy & 0x3FF); + if(cpuEEPROMSensorEnabled) + systemUpdateMotionSensor(); + UPDATE_REG(0x130, P1); + u16 P1CNT = READ16LE(((u16 *)&ioMem[0x132])); + // this seems wrong, but there are cases where the game + // can enter the stop state without requesting an IRQ from + // the joypad. + if((P1CNT & 0x4000) || stopState) + { + u16 p1 = (0x3FF ^ P1) & 0x3FF; + if(P1CNT & 0x8000) + { + if(p1 == (P1CNT & 0x3FF)) + { + IF |= 0x1000; + UPDATE_REG(0x202, IF); + } + } + else + { + if(p1 & P1CNT) + { + IF |= 0x1000; + UPDATE_REG(0x202, IF); + } + } + } + + u32 ext = (joy >> 10); + int cheatTicks = 0; + if(cheatsEnabled) + cheatsCheckKeys(P1^0x3FF, ext); + cpuDmaTicksToUpdate += cheatTicks; + speedup = (ext & 1) ? true : false; + capture = (ext & 2) ? true : false; + + if(capture && !capturePrevious) + { + captureNumber++; + systemScreenCapture(captureNumber); + } + capturePrevious = capture; + + DISPSTAT |= 1; + DISPSTAT &= 0xFFFD; + UPDATE_REG(0x04, DISPSTAT); + if(DISPSTAT & 0x0008) + { + IF |= 1; + UPDATE_REG(0x202, IF); + } + CPUCheckDMA(1, 0x0f); + if(frameCount >= framesToSkip) + { + systemDrawScreen(); + frameCount = 0; + } + else + frameCount++; + if(systemPauseOnFrame()) + ticks = 0; + } + + UPDATE_REG(0x04, DISPSTAT); + + CPUCompareVCOUNT(); + } + else + { + if(frameCount >= framesToSkip) + { + (*renderLine)(); + + switch(systemColorDepth) + { + case 16: + { + u16 *dest = (u16 *)pix + 242 * (VCOUNT+1); + for(int x = 0; x < 240;) + { + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + *dest++ = systemColorMap16[lineMix[x++]&0xFFFF]; + } + // for filters that read past the screen + *dest++ = 0; + } + break; + case 24: + { + u8 *dest = (u8 *)pix + 240 * VCOUNT * 3; + for(int x = 0; x < 240;) + { + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + *((u32 *)dest) = systemColorMap32[lineMix[x++] & 0xFFFF]; + dest += 3; + } + } + break; + case 32: + { + u32 *dest = (u32 *)pix + 241 * (VCOUNT+1); + for(int x = 0; x < 240; ) + { + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + *dest++ = systemColorMap32[lineMix[x++] & 0xFFFF]; + } + } + break; + } + } + // entering H-Blank + DISPSTAT |= 2; + UPDATE_REG(0x04, DISPSTAT); + lcdTicks += 272; + CPUCheckDMA(2, 0x0f); + if(DISPSTAT & 16) + { + IF |= 2; + UPDATE_REG(0x202, IF); + } + } + } + } + + if(!stopState) + { + if(timer0On) + { + if(timer0ClockReload == 1) + { + u32 tm0d = TM0D + clockTicks; + if(tm0d > 0xffff) + { + tm0d += timer0Reload; + timerOverflow |= 1; + soundTimerOverflow(0); + if(TM0CNT & 0x40) + { + IF |= 0x08; + UPDATE_REG(0x202, IF); + } + } + TM0D = tm0d; + timer0Ticks = 0x10000 - TM0D; + UPDATE_REG(0x100, TM0D); + } + else + { + timer0Ticks -= clockTicks; + if(timer0Ticks <= 0) + { + timer0Ticks += timer0ClockReload; + TM0D++; + if(TM0D == 0) + { + TM0D = timer0Reload; + timerOverflow |= 1; + soundTimerOverflow(0); + if(TM0CNT & 0x40) + { + IF |= 0x08; + UPDATE_REG(0x202, IF); + } + } + UPDATE_REG(0x100, TM0D); + } + } + } + + if(timer1On) + { + if(TM1CNT & 4) + { + if(timerOverflow & 1) + { + TM1D++; + if(TM1D == 0) + { + TM1D += timer1Reload; + timerOverflow |= 2; + soundTimerOverflow(1); + if(TM1CNT & 0x40) + { + IF |= 0x10; + UPDATE_REG(0x202, IF); + } + } + UPDATE_REG(0x104, TM1D); + } + } + else + { + if(timer1ClockReload == 1) + { + u32 tm1d = TM1D + clockTicks; + if(tm1d > 0xffff) + { + tm1d += timer1Reload; + timerOverflow |= 2; + soundTimerOverflow(1); + if(TM1CNT & 0x40) + { + IF |= 0x10; + UPDATE_REG(0x202, IF); + } + } + TM1D = tm1d; + timer1Ticks = 0x10000 - TM1D; + UPDATE_REG(0x104, TM1D); + } + else + { + timer1Ticks -= clockTicks; + if(timer1Ticks <= 0) + { + timer1Ticks += timer1ClockReload; + TM1D++; + + if(TM1D == 0) + { + TM1D = timer1Reload; + timerOverflow |= 2; + soundTimerOverflow(1); + if(TM1CNT & 0x40) + { + IF |= 0x10; + UPDATE_REG(0x202, IF); + } + } + UPDATE_REG(0x104, TM1D); + } + } + } + } + + if(timer2On) + { + if(TM2CNT & 4) + { + if(timerOverflow & 2) + { + TM2D++; + if(TM2D == 0) + { + TM2D += timer2Reload; + timerOverflow |= 4; + if(TM2CNT & 0x40) + { + IF |= 0x20; + UPDATE_REG(0x202, IF); + } + } + UPDATE_REG(0x108, TM2D); + } + } + else + { + if(timer2ClockReload == 1) + { + u32 tm2d = TM2D + clockTicks; + if(tm2d > 0xffff) + { + tm2d += timer2Reload; + timerOverflow |= 4; + if(TM2CNT & 0x40) + { + IF |= 0x20; + UPDATE_REG(0x202, IF); + } + } + TM2D = tm2d; + timer2Ticks = 0x10000 - TM2D; + UPDATE_REG(0x108, TM2D); + } + else + { + timer2Ticks -= clockTicks; + if(timer2Ticks <= 0) + { + timer2Ticks += timer2ClockReload; + TM2D++; + + if(TM2D == 0) + { + TM2D = timer2Reload; + timerOverflow |= 4; + if(TM2CNT & 0x40) + { + IF |= 0x20; + UPDATE_REG(0x202, IF); + } + } + UPDATE_REG(0x108, TM2D); + } + } + } + } + + if(timer3On) + { + if(TM3CNT & 4) + { + if(timerOverflow & 4) + { + TM3D++; + if(TM3D == 0) + { + TM3D += timer3Reload; + if(TM3CNT & 0x40) + { + IF |= 0x40; + UPDATE_REG(0x202, IF); + } + } + UPDATE_REG(0x10c, TM3D); + } + } + else + { + if(timer3ClockReload == 1) + { + u32 tm3d = TM3D + clockTicks; + if(tm3d > 0xffff) + { + tm3d += timer3Reload; + if(TM3CNT & 0x40) + { + IF |= 0x40; + UPDATE_REG(0x202, IF); + } + } + TM3D = tm3d; + timer3Ticks = 0x10000 - TM3D; + UPDATE_REG(0x10C, TM3D); + } + else + { + timer3Ticks -= clockTicks; + if(timer3Ticks <= 0) + { + timer3Ticks += timer3ClockReload; + TM3D++; + + if(TM3D == 0) + { + TM3D = timer3Reload; + if(TM3CNT & 0x40) + { + IF |= 0x40; + UPDATE_REG(0x202, IF); + } + } + UPDATE_REG(0x10C, TM3D); + } + } + } + } + } + // we shouldn't be doing sound in stop state, but we lose synchronization + // if sound is disabled, so in stop state, soundTick will just produce + // mute sound + soundTicks -= clockTicks; + if(soundTicks <= 0) + { + soundTick(); + soundTicks += SOUND_CLOCK_TICKS; + } + timerOverflow = 0; + +#ifdef PROFILING + profilingTicks -= clockTicks; + if(profilingTicks <= 0) + { + profilingTicks += profilingTicksReload; + if(profilBuffer && profilSize) + { + u16 *b = (u16 *)profilBuffer; + int pc = ((reg[15].I - profilLowPC) * profilScale)/0x10000; + if(pc >= 0 && pc < profilSize) + { + b[pc]++; + } + } + } +#endif + + ticks -= clockTicks; + + cpuLoopTicks = CPUUpdateTicks(); + + if(cpuDmaTicksToUpdate > 0) + { + clockTicks = cpuSavedTicks; + if(clockTicks > cpuDmaTicksToUpdate) + clockTicks = cpuDmaTicksToUpdate; + cpuDmaTicksToUpdate -= clockTicks; + if(cpuDmaTicksToUpdate < 0) + cpuDmaTicksToUpdate = 0; + goto updateLoop; + } + + if(IF && (IME & 1) && armIrqEnable) + { + int res = IF & IE; + if(stopState) + res &= 0x3080; + if(res) + { + if(intState) + { + CPUInterrupt(); + intState = false; + if(holdState) + { + holdState = false; + stopState = false; + } + } + else + { + if(!holdState) + { + intState = true; + cpuLoopTicks = 5; + cpuSavedTicks = 5; + } + else + { + CPUInterrupt(); + if(holdState) + { + holdState = false; + stopState = false; + } + } + } + } + } + + if(ticks <= 0) + break; + } + } +} + +struct EmulatedSystem GBASystem = + { + // emuMain + CPULoop, + // emuReset + CPUReset, + // emuCleanUp + CPUCleanUp, + // emuReadBattery + CPUReadBatteryFile, + // emuWriteBattery + CPUWriteBatteryFile, + // emuReadState + CPUReadState, + // emuWriteState + CPUWriteState, + // emuReadMemState + CPUReadMemState, + // emuWriteMemState + CPUWriteMemState, + // emuWritePNG + CPUWritePNGFile, + // emuWriteBMP + CPUWriteBMPFile, + // emuUpdateCPSR + CPUUpdateCPSR, + // emuHasDebugger + true, + // emuCount +#ifdef FINAL_VERSION + 250000 +#else + 5000 +#endif + }; diff --git a/source/vba/agb/GBA.h b/source/vba/GBA.h similarity index 72% rename from source/vba/agb/GBA.h rename to source/vba/GBA.h index a1c04a00..46169e6c 100644 --- a/source/vba/agb/GBA.h +++ b/source/vba/GBA.h @@ -1,160 +1,153 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_GBA_H -#define VBA_GBA_H - -#include "../System.h" - -#define SAVE_GAME_VERSION_1 1 -#define SAVE_GAME_VERSION_2 2 -#define SAVE_GAME_VERSION_3 3 -#define SAVE_GAME_VERSION_4 4 -#define SAVE_GAME_VERSION_5 5 -#define SAVE_GAME_VERSION_6 6 -#define SAVE_GAME_VERSION_7 7 -#define SAVE_GAME_VERSION_8 8 -#define SAVE_GAME_VERSION_9 9 -#define SAVE_GAME_VERSION_10 10 -#define SAVE_GAME_VERSION SAVE_GAME_VERSION_10 - -typedef struct { - u8 *address; - u32 mask; -} memoryMap; - -typedef union { - struct { -#ifdef WORDS_BIGENDIAN - u8 B3; - u8 B2; - u8 B1; - u8 B0; -#else - u8 B0; - u8 B1; - u8 B2; - u8 B3; -#endif - } B; - struct { -#ifdef WORDS_BIGENDIAN - u16 W1; - u16 W0; -#else - u16 W0; - u16 W1; -#endif - } W; -#ifdef WORDS_BIGENDIAN - volatile u32 I; -#else - u32 I; -#endif -} reg_pair; - -#ifndef NO_GBA_MAP -extern memoryMap map[256]; -#endif - -extern reg_pair reg[45]; -extern u8 biosProtected[4]; - -extern bool N_FLAG; -extern bool Z_FLAG; -extern bool C_FLAG; -extern bool V_FLAG; -extern bool armIrqEnable; -extern bool armState; -extern int armMode; -extern void (*cpuSaveGameFunc)(u32,u8); - -#ifdef BKPT_SUPPORT -extern u8 freezeWorkRAM[0x40000]; -extern u8 freezeInternalRAM[0x8000]; -extern u8 freezeVRAM[0x18000]; -extern u8 freezeOAM[0x400]; -extern u8 freezePRAM[0x400]; -extern bool debugger_last; -extern int oldreg[17]; -extern char oldbuffer[10]; -#endif - -extern bool CPUReadGSASnapshot(const char *); -extern bool CPUWriteGSASnapshot(const char *, const char *, const char *, const char *); -extern bool CPUWriteBatteryFile(const char *); -extern bool CPUReadBatteryFile(const char *); -extern bool CPUExportEepromFile(const char *); -extern bool CPUImportEepromFile(const char *); -extern bool CPUWritePNGFile(const char *); -extern bool CPUWriteBMPFile(const char *); -extern void CPUCleanUp(); -extern void CPUUpdateRender(); -extern void CPUUpdateRenderBuffers(bool); -extern bool CPUReadMemState(char *, int); -extern bool CPUReadState(const char *); -extern bool CPUWriteMemState(char *, int); -extern bool CPUWriteState(const char *); -extern int CPULoadRom(const char *); -extern void doMirroring(bool); -extern void CPUUpdateRegister(u32, u16); -extern void applyTimer (); -extern void CPUInit(const char *,bool); -extern void CPUReset(); -extern void CPULoop(int); -extern void CPUCheckDMA(int,int); -extern bool CPUIsGBAImage(const char *); -extern bool CPUIsZipFile(const char *); -#ifdef PROFILING -#include "prof/prof.h" -extern void cpuProfil(profile_segment *seg); -extern void cpuEnableProfiling(int hz); -#endif - -extern struct EmulatedSystem GBASystem; - -#define R13_IRQ 18 -#define R14_IRQ 19 -#define SPSR_IRQ 20 -#define R13_USR 26 -#define R14_USR 27 -#define R13_SVC 28 -#define R14_SVC 29 -#define SPSR_SVC 30 -#define R13_ABT 31 -#define R14_ABT 32 -#define SPSR_ABT 33 -#define R13_UND 34 -#define R14_UND 35 -#define SPSR_UND 36 -#define R8_FIQ 37 -#define R9_FIQ 38 -#define R10_FIQ 39 -#define R11_FIQ 40 -#define R12_FIQ 41 -#define R13_FIQ 42 -#define R14_FIQ 43 -#define SPSR_FIQ 44 - -#include "../Cheats.h" -#include "../Globals.h" -#include "../EEprom.h" -#include "../Flash.h" - -#endif //VBA_GBA_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_GBA_H +#define VBA_GBA_H + +#include "System.h" + +#define SAVE_GAME_VERSION_1 1 +#define SAVE_GAME_VERSION_2 2 +#define SAVE_GAME_VERSION_3 3 +#define SAVE_GAME_VERSION_4 4 +#define SAVE_GAME_VERSION_5 5 +#define SAVE_GAME_VERSION_6 6 +#define SAVE_GAME_VERSION_7 7 +#define SAVE_GAME_VERSION_8 8 +#define SAVE_GAME_VERSION SAVE_GAME_VERSION_8 + +typedef struct + { + u8 *address; + u32 mask; + } +memoryMap; + +typedef union { + struct + { +#ifdef WORDS_BIGENDIAN + u8 B3; + u8 B2; + u8 B1; + u8 B0; +#else + u8 B0; + u8 B1; + u8 B2; + u8 B3; +#endif + } + B; + struct + { +#ifdef WORDS_BIGENDIAN + u16 W1; + u16 W0; +#else + u16 W0; + u16 W1; +#endif + } + W; +#ifdef WORDS_BIGENDIAN + volatile u32 I; +#else + u32 I; +#endif + } reg_pair; + +#ifndef NO_GBA_MAP +extern memoryMap map[256]; +#endif + +extern reg_pair reg[45]; +extern u8 biosProtected[4]; + +extern bool N_FLAG; +extern bool Z_FLAG; +extern bool C_FLAG; +extern bool V_FLAG; +extern bool armIrqEnable; +extern bool armState; +extern int armMode; +extern void (*cpuSaveGameFunc)(u32,u8); + +extern bool freezeWorkRAM[0x40000]; +extern bool freezeInternalRAM[0x8000]; +extern bool CPUReadGSASnapshot(const char *); +extern bool CPUWriteGSASnapshot(const char *, const char *, const char *, const char *); +extern bool CPUWriteBatteryFile(const char *); +extern bool CPUReadBatteryFile(const char *); +extern bool CPUExportEepromFile(const char *); +extern bool CPUImportEepromFile(const char *); +extern bool CPUWritePNGFile(const char *); +extern bool CPUWriteBMPFile(const char *); +extern void CPUCleanUp(); +extern void CPUUpdateRender(); +extern bool CPUReadMemState(char *, int); +extern bool CPUReadState(const char *); +extern bool CPUWriteMemState(char *, int); +extern bool CPUWriteState(const char *); +extern int CPULoadRom(const char *); +extern void CPUUpdateRegister(u32, u16); +extern void CPUWriteHalfWord(u32, u16); +extern void CPUWriteByte(u32, u8); +extern void CPUInit(const char *,bool); +extern void CPUReset(); +extern void CPULoop(int); +extern void CPUCheckDMA(int,int); +extern bool CPUIsGBAImage(const char *); +extern bool CPUIsZipFile(const char *); +#ifdef PROFILING +extern void cpuProfil(char *buffer, int, u32, int); +extern void cpuEnableProfiling(int hz); +#endif + +extern struct EmulatedSystem GBASystem; + +#define R13_IRQ 18 +#define R14_IRQ 19 +#define SPSR_IRQ 20 +#define R13_USR 26 +#define R14_USR 27 +#define R13_SVC 28 +#define R14_SVC 29 +#define SPSR_SVC 30 +#define R13_ABT 31 +#define R14_ABT 32 +#define SPSR_ABT 33 +#define R13_UND 34 +#define R14_UND 35 +#define SPSR_UND 36 +#define R8_FIQ 37 +#define R9_FIQ 38 +#define R10_FIQ 39 +#define R11_FIQ 40 +#define R12_FIQ 41 +#define R13_FIQ 42 +#define R14_FIQ 43 +#define SPSR_FIQ 44 + +#include "Cheats.h" +#include "Globals.h" +#include "EEprom.h" +#include "Flash.h" + +#endif //VBA_GBA_H diff --git a/source/vba/GBAinline.h b/source/vba/GBAinline.h new file mode 100644 index 00000000..f4fc4c76 --- /dev/null +++ b/source/vba/GBAinline.h @@ -0,0 +1,556 @@ +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_GBAinline_H +#define VBA_GBAinline_H + +#include "System.h" +#include "Port.h" +#include "RTC.h" +#include "vmmem.h" + +extern bool cpuSramEnabled; +extern bool cpuFlashEnabled; +extern bool cpuEEPROMEnabled; +extern bool cpuEEPROMSensorEnabled; + +#define VM_USED 1 + +#define CPUReadByteQuickDef(addr) \ + map[(addr)>>24].address[(addr) & map[(addr)>>24].mask] + +#define CPUReadHalfWordQuickDef(addr) \ + READ16LE(((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) + +#define CPUReadMemoryQuickDef(addr) \ + READ32LE(((u32*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) + +u8 inline CPUReadByteQuick( u32 addr ) +{ + switch(addr >> 24 ) + { + case 8: + case 9: + case 10: + case 12: + return VMRead8( addr & 0x1FFFFFF ); + + default: + return CPUReadByteQuickDef(addr); + } + + return 0; +} + +u16 inline CPUReadHalfWordQuick( u32 addr ) +{ + switch(addr >> 24) + { + case 8: + case 9: + case 10: + case 12: + return VMRead16( addr & 0x1FFFFFF ); + default: + return CPUReadHalfWordQuickDef(addr); + } + + return 0; +} + +u32 inline CPUReadMemoryQuick( u32 addr ) +{ + switch(addr >> 24) + { + case 8: + case 9: + case 10: + case 12: + return VMRead32( addr & 0x1FFFFFF ); + default: + return CPUReadMemoryQuickDef(addr); + } + + return 0; +} + +inline u32 CPUReadMemory(u32 address) +{ + +#ifdef DEV_VERSION + if(address & 3) + { + if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) + { + log("Unaligned word read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } + } +#endif + + u32 value; + switch(address >> 24) + { + case 0: + if(reg[15].I >> 24) + { + if(address < 0x4000) + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_READ) + { + log("Illegal word read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } +#endif + + value = READ32LE(((u32 *)&biosProtected)); + } + else goto unreadable; + } + else + value = READ32LE(((u32 *)&bios[address & 0x3FFC])); + break; + case 2: + value = READ32LE(((u32 *)&workRAM[address & 0x3FFFC])); + break; + case 3: + value = READ32LE(((u32 *)&internalRAM[address & 0x7ffC])); + break; + case 4: + if((address < 0x4000400) && ioReadable[address & 0x3fc]) + { + if(ioReadable[(address & 0x3fc) + 2]) + value = READ32LE(((u32 *)&ioMem[address & 0x3fC])); + else + value = READ16LE(((u16 *)&ioMem[address & 0x3fc])); + } + else goto unreadable; + break; + case 5: + value = READ32LE(((u32 *)&paletteRAM[address & 0x3fC])); + break; + case 6: + value = READ32LE(((u32 *)&vram[address & 0x1fffc])); + break; + case 7: + value = READ32LE(((u32 *)&oam[address & 0x3FC])); + break; + case 8: + case 9: + case 10: + case 11: + case 12: + /** Need NGC VM here **/ + //value = READ32LE(((u32 *)&rom[address&0x1FFFFFC])); + value = VMRead32( address & 0x1FFFFFC ); + break; + case 13: + if(cpuEEPROMEnabled) + // no need to swap this + return eepromRead(address); + goto unreadable; + case 14: + if(cpuFlashEnabled | cpuSramEnabled) + // no need to swap this + return flashRead(address); + // default + default: +unreadable: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_READ) + { + log("Illegal word read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } +#endif + + // if(ioMem[0x205] & 0x40) { + if(armState) + { +#if VM_USED + value = CPUReadMemoryQuick(reg[15].I); +#else + value = CPUReadMemoryQuickDef(reg[15].I); +#endif + //value = VMRead32(reg[15].I); + } + else + { +#if VM_USED + value = CPUReadHalfWordQuick(reg[15].I) | + CPUReadHalfWordQuick(reg[15].I) << 16; +#else + value = CPUReadHalfWordQuickDef(reg[15].I) | + CPUReadHalfWordQuickDef(reg[15].I) << 16; +#endif + //value = VMRead16(reg[15].I) | VMRead16(reg[15].I) << 16; + } + // } else { + // value = *((u32 *)&bios[address & 0x3ffc]); + // } + // return 0xFFFFFFFF; + } + + if(address & 3) + { +#ifdef C_CORE + int shift = (address & 3) << 3; + value = (value >> shift) | (value << (32 - shift)); +#else +#ifdef __GNUC__ + asm("and $3, %%ecx;" + "shl $3 ,%%ecx;" + "ror %%cl, %0" + : "=r" (value) + : "r" (value), "c" (address)); +#else + __asm { + mov ecx, address; + and ecx, 3; + shl ecx, 3; + ror [dword ptr value], cl; + } +#endif +#endif + } + return value; +} + +extern u32 myROM[]; + +inline u32 CPUReadHalfWord(u32 address) +{ +#ifdef DEV_VERSION + if(address & 1) + { + if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) + { + log("Unaligned halfword read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } + } +#endif + + u32 value; + + switch(address >> 24) + { + case 0: + if (reg[15].I >> 24) + { + if(address < 0x4000) + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_READ) + { + log("Illegal halfword read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } +#endif + value = READ16LE(((u16 *)&biosProtected[address&2])); + } + else goto unreadable; + } + else + value = READ16LE(((u16 *)&bios[address & 0x3FFE])); + break; + case 2: + value = READ16LE(((u16 *)&workRAM[address & 0x3FFFE])); + break; + case 3: + value = READ16LE(((u16 *)&internalRAM[address & 0x7ffe])); + break; + case 4: + if((address < 0x4000400) && ioReadable[address & 0x3fe]) + value = READ16LE(((u16 *)&ioMem[address & 0x3fe])); + else goto unreadable; + break; + case 5: + value = READ16LE(((u16 *)&paletteRAM[address & 0x3fe])); + break; + case 6: + value = READ16LE(((u16 *)&vram[address & 0x1fffe])); + break; + case 7: + value = READ16LE(((u16 *)&oam[address & 0x3fe])); + break; + case 8: + case 9: + case 10: + case 11: + case 12: + if(address == 0x80000c4 || address == 0x80000c6 || address == 0x80000c8) + value = rtcRead(address); + else + /** Need NGC VM Here **/ + //value = READ16LE(((u16 *)&rom[address & 0x1FFFFFE])); + value = VMRead16( address & 0x1FFFFFE ); + break; + case 13: + if(cpuEEPROMEnabled) + // no need to swap this + return eepromRead(address); + goto unreadable; + case 14: + if(cpuFlashEnabled | cpuSramEnabled) + // no need to swap this + return flashRead(address); + // default + default: +unreadable: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_READ) + { + log("Illegal halfword read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } +#endif + extern bool cpuDmaHack; + extern u32 cpuDmaLast; + extern int cpuDmaCount; + if(cpuDmaHack && cpuDmaCount) + { + value = (u16)cpuDmaLast; + } + else + { + if(armState) + { +#if VM_USED + value = CPUReadHalfWordQuick(reg[15].I + (address & 2)); +#else + value = CPUReadHalfWordQuickDef(reg[15].I + (address & 2)); +#endif + //value = VMRead16(reg[15].I + (address & 2)); + } + else + { +#if VM_USED + value = CPUReadHalfWordQuick(reg[15].I); +#else + value = CPUReadHalfWordQuickDef(reg[15].I); +#endif + //value = VMRead16(reg[15].I); + } + } + // return value; + // if(address & 1) + // value = (value >> 8) | ((value & 0xFF) << 24); + // return 0xFFFF; + break; + } + + if(address & 1) + { + value = (value >> 8) | (value << 24); + } + + return value; +} + +inline u16 CPUReadHalfWordSigned(u32 address) +{ + u16 value = CPUReadHalfWord(address); + if((address & 1)) + value = (s8)value; + return value; +} + +inline u8 CPUReadByte(u32 address) +{ + switch(address >> 24) + { + case 0: + if (reg[15].I >> 24) + { + if(address < 0x4000) + { +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_READ) + { + log("Illegal byte read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } +#endif + return biosProtected[address & 3]; + } + else goto unreadable; + } + return bios[address & 0x3FFF]; + case 2: + return workRAM[address & 0x3FFFF]; + case 3: + return internalRAM[address & 0x7fff]; + case 4: + if((address < 0x4000400) && ioReadable[address & 0x3ff]) + return ioMem[address & 0x3ff]; + else goto unreadable; + case 5: + return paletteRAM[address & 0x3ff]; + case 6: + return vram[address & 0x1ffff]; + case 7: + return oam[address & 0x3ff]; + case 8: + case 9: + case 10: + case 11: + case 12: + /** Need NGC VM Here **/ + //return rom[address & 0x1FFFFFF]; + return VMRead8( address & 0x1FFFFFF ); + case 13: + if(cpuEEPROMEnabled) + return eepromRead(address); + goto unreadable; + case 14: + if(cpuSramEnabled | cpuFlashEnabled) + return flashRead(address); + if(cpuEEPROMSensorEnabled) + { + switch(address & 0x00008f00) + { + case 0x8200: + return systemGetSensorX() & 255; + case 0x8300: + return (systemGetSensorX() >> 8)|0x80; + case 0x8400: + return systemGetSensorY() & 255; + case 0x8500: + return systemGetSensorY() >> 8; + } + } + // default + default: +unreadable: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_READ) + { + log("Illegal byte read: %08x at %08x\n", address, armMode ? + armNextPC - 4 : armNextPC - 2); + } +#endif + + if(armState) + { +#if VM_USED + return CPUReadByteQuick(reg[15].I+(address & 3)); +#else + return CPUReadByteQuickDef(reg[15].I+(address & 3)); +#endif + //return VMRead8(reg[15].I+(address & 3)); + } + else + { +#if VM_USED + return CPUReadByteQuick(reg[15].I+(address & 1)); +#else + return CPUReadByteQuickDef(reg[15].I+(address & 1)); +#endif + //return VMRead8(reg[15].I+(address & 1)); + } + // return 0xFF; + break; + } +} + +inline void CPUWriteMemory(u32 address, u32 value) +{ +#ifdef DEV_VERSION + if(address & 3) + { + if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) + { + log("Unaliagned word write: %08x to %08x from %08x\n", + value, + address, + armMode ? armNextPC - 4 : armNextPC - 2); + } + } +#endif + + switch(address >> 24) + { + case 0x02: +#ifdef SDL + if(*((u32 *)&freezeWorkRAM[address & 0x3FFFC])) + cheatsWriteMemory((u32 *)&workRAM[address & 0x3FFFC], + value, + *((u32 *)&freezeWorkRAM[address & 0x3FFFC])); + else +#endif + WRITE32LE(((u32 *)&workRAM[address & 0x3FFFC]), value); + break; + case 0x03: +#ifdef SDL + if(*((u32 *)&freezeInternalRAM[address & 0x7ffc])) + cheatsWriteMemory((u32 *)&internalRAM[address & 0x7FFC], + value, + *((u32 *)&freezeInternalRAM[address & 0x7ffc])); + else +#endif + WRITE32LE(((u32 *)&internalRAM[address & 0x7ffC]), value); + break; + case 0x04: + CPUUpdateRegister((address & 0x3FC), value & 0xFFFF); + CPUUpdateRegister((address & 0x3FC) + 2, (value >> 16)); + break; + case 0x05: + WRITE32LE(((u32 *)&paletteRAM[address & 0x3FC]), value); + break; + case 0x06: + if(address & 0x10000) + WRITE32LE(((u32 *)&vram[address & 0x17ffc]), value); + else + WRITE32LE(((u32 *)&vram[address & 0x1fffc]), value); + break; + case 0x07: + WRITE32LE(((u32 *)&oam[address & 0x3fc]), value); + break; + case 0x0D: + if(cpuEEPROMEnabled) + { + eepromWrite(address, value); + break; + } + goto unwritable; + case 0x0E: + if(!eepromInUse | cpuSramEnabled | cpuFlashEnabled) + { + (*cpuSaveGameFunc)(address, (u8)value); + break; + } + // default + default: +unwritable: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_ILLEGAL_WRITE) + { + log("Illegal word write: %08x to %08x from %08x\n", + value, + address, + armMode ? armNextPC - 4 : armNextPC - 2); + } +#endif + break; + } +} + +#endif //VBA_GBAinline_H diff --git a/source/vba/agb/GBAGfx.cpp b/source/vba/Gfx.cpp similarity index 85% rename from source/vba/agb/GBAGfx.cpp rename to source/vba/Gfx.cpp index 24c73f68..c4ba850f 100644 --- a/source/vba/agb/GBAGfx.cpp +++ b/source/vba/Gfx.cpp @@ -1,47 +1,47 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "../System.h" - -int coeff[32] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}; - -u32 line0[240]; -u32 line1[240]; -u32 line2[240]; -u32 line3[240]; -u32 lineOBJ[240]; -u32 lineOBJWin[240]; -u32 lineMix[240]; -bool gfxInWin0[240]; -bool gfxInWin1[240]; -int lineOBJpixleft[128]; - -int gfxBG2Changed = 0; -int gfxBG3Changed = 0; - -int gfxBG2X = 0; -int gfxBG2Y = 0; -int gfxBG2LastX = 0; -int gfxBG2LastY = 0; -int gfxBG3X = 0; -int gfxBG3Y = 0; -int gfxBG3LastX = 0; -int gfxBG3LastY = 0; -int gfxLastVCOUNT = 0; +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "System.h" + +int coeff[32] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}; + + +u32 line0[240]; +u32 line1[240]; +u32 line2[240]; +u32 line3[240]; +u32 lineOBJ[240]; +u32 lineOBJWin[240]; +u32 lineMix[240]; +bool gfxInWin0[240]; +bool gfxInWin1[240]; + +int gfxBG2Changed = 0; +int gfxBG3Changed = 0; + +int gfxBG2X = 0; +int gfxBG2Y = 0; +int gfxBG2LastX = 0; +int gfxBG2LastY = 0; +int gfxBG3X = 0; +int gfxBG3Y = 0; +int gfxBG3LastX = 0; +int gfxBG3LastY = 0; +int gfxLastVCOUNT = 0; diff --git a/source/vba/Gfx.h b/source/vba/Gfx.h new file mode 100644 index 00000000..36c6592a --- /dev/null +++ b/source/vba/Gfx.h @@ -0,0 +1,1809 @@ +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_GFX_H +#define VBA_GFX_H + +#include "GBA.h" +#include "Gfx.h" +#include "Globals.h" + +#include "Port.h" + +//#define SPRITE_DEBUG + +void gfxDrawTextScreen(u16, u16, u16, u32 *); +void gfxDrawRotScreen(u16, + u16, u16, + u16, u16, + u16, u16, + u16, u16, + int&, int&, + int, + u32*); +void gfxDrawRotScreen16Bit(u16, + u16, u16, + u16, u16, + u16, u16, + u16, u16, + int&, int&, + int, + u32*); +void gfxDrawRotScreen256(u16, + u16, u16, + u16, u16, + u16, u16, + u16, u16, + int&, int&, + int, + u32*); +void gfxDrawRotScreen16Bit160(u16, + u16, u16, + u16, u16, + u16, u16, + u16, u16, + int&, int&, + int, + u32*); +void gfxDrawSprites(u32 *); +void gfxIncreaseBrightness(u32 *line, int coeff); +void gfxDecreaseBrightness(u32 *line, int coeff); +void gfxAlphaBlend(u32 *ta, u32 *tb, int ca, int cb); + +void mode0RenderLine(); +void mode0RenderLineNoWindow(); +void mode0RenderLineAll(); + +void mode1RenderLine(); +void mode1RenderLineNoWindow(); +void mode1RenderLineAll(); + +void mode2RenderLine(); +void mode2RenderLineNoWindow(); +void mode2RenderLineAll(); + +void mode3RenderLine(); +void mode3RenderLineNoWindow(); +void mode3RenderLineAll(); + +void mode4RenderLine(); +void mode4RenderLineNoWindow(); +void mode4RenderLineAll(); + +void mode5RenderLine(); +void mode5RenderLineNoWindow(); +void mode5RenderLineAll(); + +extern int coeff[32]; +extern u32 line0[240]; +extern u32 line1[240]; +extern u32 line2[240]; +extern u32 line3[240]; +extern u32 lineOBJ[240]; +extern u32 lineOBJWin[240]; +extern u32 lineMix[240]; +extern bool gfxInWin0[240]; +extern bool gfxInWin1[240]; + +extern int gfxBG2Changed; +extern int gfxBG3Changed; + +extern int gfxBG2X; +extern int gfxBG2Y; +extern int gfxBG2LastX; +extern int gfxBG2LastY; +extern int gfxBG3X; +extern int gfxBG3Y; +extern int gfxBG3LastX; +extern int gfxBG3LastY; +extern int gfxLastVCOUNT; + +inline void gfxClearArray(u32 *array) +{ + for(int i = 0; i < 240; i++) + { + *array++ = 0x80000000; + } +} + +inline void gfxDrawTextScreen(u16 control, u16 hofs, u16 vofs, + u32 *line) +{ + u16 *palette = (u16 *)paletteRAM; + u8 *charBase = &vram[((control >> 2) & 0x03) * 0x4000]; + u16 *screenBase = (u16 *)&vram[((control >> 8) & 0x1f) * 0x800]; + u32 prio = ((control & 3)<<25) + 0x1000000; + int sizeX = 256; + int sizeY = 256; + switch((control >> 14) & 3) + { + case 0: + break; + case 1: + sizeX = 512; + break; + case 2: + sizeY = 512; + break; + case 3: + sizeX = 512; + sizeY = 512; + break; + } + + int maskX = sizeX-1; + int maskY = sizeY-1; + + bool mosaicOn = (control & 0x40) ? true : false; + + int xxx = hofs & maskX; + int yyy = (vofs + VCOUNT) & maskY; + int mosaicX = (MOSAIC & 0x000F)+1; + int mosaicY = ((MOSAIC & 0x00F0)>>4)+1; + + if(mosaicOn) + { + if((VCOUNT % mosaicY) != 0) + { + mosaicY = (VCOUNT / mosaicY) * mosaicY; + yyy = (vofs + mosaicY) & maskY; + } + } + + if(yyy > 255 && sizeY > 256) + { + yyy &= 255; + screenBase += 0x400; + if(sizeX > 256) + screenBase += 0x400; + } + + int yshift = ((yyy>>3)<<5); + if((control) & 0x80) + { + u16 *screenSource = screenBase + 0x400 * (xxx>>8) + ((xxx & 255)>>3) + yshift; + for(int x = 0; x < 240; x++) + { + u16 data = READ16LE(screenSource); + + int tile = data & 0x3FF; + int tileX = (xxx & 7); + int tileY = yyy & 7; + + if(data & 0x0400) + tileX = 7 - tileX; + if(data & 0x0800) + tileY = 7 - tileY; + + u8 color = charBase[tile * 64 + tileY * 8 + tileX]; + + line[x] = color ? (READ16LE(&palette[color]) | prio): 0x80000000; + + if(data & 0x0400) + { + if(tileX == 0) + screenSource++; + } + else if(tileX == 7) + screenSource++; + xxx++; + if(xxx == 256) + { + if(sizeX > 256) + screenSource = screenBase + 0x400 + yshift; + else + { + screenSource = screenBase + yshift; + xxx = 0; + } + } + else if(xxx >= sizeX) + { + xxx = 0; + screenSource = screenBase + yshift; + } + } + } + else + { + u16 *screenSource = screenBase + 0x400*(xxx>>8)+((xxx&255)>>3) + + yshift; + for(int x = 0; x < 240; x++) + { + u16 data = READ16LE(screenSource); + + int tile = data & 0x3FF; + int tileX = (xxx & 7); + int tileY = yyy & 7; + + if(data & 0x0400) + tileX = 7 - tileX; + if(data & 0x0800) + tileY = 7 - tileY; + + u8 color = charBase[(tile<<5) + (tileY<<2) + (tileX>>1)]; + + if(tileX & 1) + { + color = (color >> 4); + } + else + { + color &= 0x0F; + } + + int pal = (READ16LE(screenSource)>>8) & 0xF0; + line[x] = color ? (READ16LE(&palette[pal + color])|prio): 0x80000000; + + if(data & 0x0400) + { + if(tileX == 0) + screenSource++; + } + else if(tileX == 7) + screenSource++; + xxx++; + if(xxx == 256) + { + if(sizeX > 256) + screenSource = screenBase + 0x400 + yshift; + else + { + screenSource = screenBase + yshift; + xxx = 0; + } + } + else if(xxx >= sizeX) + { + xxx = 0; + screenSource = screenBase + yshift; + } + } + } + if(mosaicOn) + { + if(mosaicX > 1) + { + int m = 1; + for(int i = 0; i < 239; i++) + { + line[i+1] = line[i]; + m++; + if(m == mosaicX) + { + m = 1; + i++; + } + } + } + } +} + +inline void gfxDrawRotScreen(u16 control, + u16 x_l, u16 x_h, + u16 y_l, u16 y_h, + u16 pa, u16 pb, + u16 pc, u16 pd, + int& currentX, int& currentY, + int changed, + u32 *line) +{ + u16 *palette = (u16 *)paletteRAM; + u8 *charBase = &vram[((control >> 2) & 0x03) * 0x4000]; + u8 *screenBase = (u8 *)&vram[((control >> 8) & 0x1f) * 0x800]; + int prio = ((control & 3) << 25) + 0x1000000; + + int sizeX = 128; + int sizeY = 128; + switch((control >> 14) & 3) + { + case 0: + break; + case 1: + sizeX = sizeY = 256; + break; + case 2: + sizeX = sizeY = 512; + break; + case 3: + sizeX = sizeY = 1024; + break; + } + + int dx = pa & 0x7FFF; + if(pa & 0x8000) + dx |= 0xFFFF8000; + int dmx = pb & 0x7FFF; + if(pb & 0x8000) + dmx |= 0xFFFF8000; + int dy = pc & 0x7FFF; + if(pc & 0x8000) + dy |= 0xFFFF8000; + int dmy = pd & 0x7FFFF; + if(pd & 0x8000) + dmy |= 0xFFFF8000; + + if(VCOUNT == 0) + changed = 3; + + if(changed & 1) + { + currentX = (x_l) | ((x_h & 0x07FF)<<16); + if(x_h & 0x0800) + currentX |= 0xF8000000; + } + else + { + currentX += dmx; + } + + if(changed & 2) + { + currentY = (y_l) | ((y_h & 0x07FF)<<16); + if(y_h & 0x0800) + currentY |= 0xF8000000; + } + else + { + currentY += dmy; + } + + int realX = currentX; + int realY = currentY; + + if(control & 0x40) + { + int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; + int y = (VCOUNT % mosaicY); + realX -= y*dmx; + realY -= y*dmy; + } + + int xxx = (realX >> 8); + int yyy = (realY >> 8); + + if(control & 0x2000) + { + xxx %= sizeX; + yyy %= sizeY; + if(xxx < 0) + xxx += sizeX; + if(yyy < 0) + yyy += sizeY; + } + + if(control & 0x80) + { + for(int x = 0; x < 240; x++) + { + if(xxx < 0 || + yyy < 0 || + xxx >= sizeX || + yyy >= sizeY) + { + line[x] = 0x80000000; + } + else + { + int tile = screenBase[(xxx>>3) + (yyy>>3)*(sizeX>>3)]; + + int tileX = (xxx & 7); + int tileY = yyy & 7; + + u8 color = charBase[(tile<<6) + (tileY<<3) + tileX]; + + line[x] = color ? (READ16LE(&palette[color])|prio): 0x80000000; + } + realX += dx; + realY += dy; + + xxx = (realX >> 8); + yyy = (realY >> 8); + + if(control & 0x2000) + { + xxx %= sizeX; + yyy %= sizeY; + if(xxx < 0) + xxx += sizeX; + if(yyy < 0) + yyy += sizeY; + } + } + } + else + { + for(int x = 0; x < 240; x++) + { + if(xxx < 0 || + yyy < 0 || + xxx >= sizeX || + yyy >= sizeY) + { + line[x] = 0x80000000; + } + else + { + int tile = screenBase[(xxx>>3) + (yyy>>3)*(sizeX>>3)]; + + int tileX = (xxx & 7); + int tileY = yyy & 7; + + u8 color = charBase[(tile<<6) + (tileY<<3) + tileX]; + + line[x] = color ? (READ16LE(&palette[color])|prio): 0x80000000; + } + realX += dx; + realY += dy; + + xxx = (realX >> 8); + yyy = (realY >> 8); + + if(control & 0x2000) + { + xxx %= sizeX; + yyy %= sizeY; + if(xxx < 0) + xxx += sizeX; + if(yyy < 0) + yyy += sizeY; + } + } + } + + if(control & 0x40) + { + int mosaicX = (MOSAIC & 0xF) + 1; + if(mosaicX > 1) + { + int m = 1; + for(int i = 0; i < 239; i++) + { + line[i+1] = line[i]; + m++; + if(m == mosaicX) + { + m = 1; + i++; + } + } + } + } +} + +inline void gfxDrawRotScreen16Bit(u16 control, + u16 x_l, u16 x_h, + u16 y_l, u16 y_h, + u16 pa, u16 pb, + u16 pc, u16 pd, + int& currentX, int& currentY, + int changed, + u32 *line) +{ + u16 *screenBase = (u16 *)&vram[0]; + int prio = ((control & 3) << 25) + 0x1000000; + int sizeX = 240; + int sizeY = 160; + + int startX = (x_l) | ((x_h & 0x07FF)<<16); + if(x_h & 0x0800) + startX |= 0xF8000000; + int startY = (y_l) | ((y_h & 0x07FF)<<16); + if(y_h & 0x0800) + startY |= 0xF8000000; + + int dx = pa & 0x7FFF; + if(pa & 0x8000) + dx |= 0xFFFF8000; + int dmx = pb & 0x7FFF; + if(pb & 0x8000) + dmx |= 0xFFFF8000; + int dy = pc & 0x7FFF; + if(pc & 0x8000) + dy |= 0xFFFF8000; + int dmy = pd & 0x7FFFF; + if(pd & 0x8000) + dmy |= 0xFFFF8000; + + if(VCOUNT == 0) + changed = 3; + + if(changed & 1) + { + currentX = (x_l) | ((x_h & 0x07FF)<<16); + if(x_h & 0x0800) + currentX |= 0xF8000000; + } + else + currentX += dmx; + + if(changed & 2) + { + currentY = (y_l) | ((y_h & 0x07FF)<<16); + if(y_h & 0x0800) + currentY |= 0xF8000000; + } + else + { + currentY += dmy; + } + + int realX = currentX; + int realY = currentY; + + if(control & 0x40) + { + int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; + int y = (VCOUNT % mosaicY); + realX -= y*dmx; + realY -= y*dmy; + } + + int xxx = (realX >> 8); + int yyy = (realY >> 8); + + for(int x = 0; x < 240; x++) + { + if(xxx < 0 || + yyy < 0 || + xxx >= sizeX || + yyy >= sizeY) + { + line[x] = 0x80000000; + } + else + { + line[x] = (READ16LE(&screenBase[yyy * sizeX + xxx]) | prio); + } + realX += dx; + realY += dy; + + xxx = (realX >> 8); + yyy = (realY >> 8); + } + + if(control & 0x40) + { + int mosaicX = (MOSAIC & 0xF) + 1; + if(mosaicX > 1) + { + int m = 1; + for(int i = 0; i < 239; i++) + { + line[i+1] = line[i]; + m++; + if(m == mosaicX) + { + m = 1; + i++; + } + } + } + } +} + +inline void gfxDrawRotScreen256(u16 control, + u16 x_l, u16 x_h, + u16 y_l, u16 y_h, + u16 pa, u16 pb, + u16 pc, u16 pd, + int ¤tX, int& currentY, + int changed, + u32 *line) +{ + u16 *palette = (u16 *)paletteRAM; + u8 *screenBase = (DISPCNT & 0x0010) ? &vram[0xA000] : &vram[0x0000]; + int prio = ((control & 3) << 25) + 0x1000000; + int sizeX = 240; + int sizeY = 160; + + int startX = (x_l) | ((x_h & 0x07FF)<<16); + if(x_h & 0x0800) + startX |= 0xF8000000; + int startY = (y_l) | ((y_h & 0x07FF)<<16); + if(y_h & 0x0800) + startY |= 0xF8000000; + + int dx = pa & 0x7FFF; + if(pa & 0x8000) + dx |= 0xFFFF8000; + int dmx = pb & 0x7FFF; + if(pb & 0x8000) + dmx |= 0xFFFF8000; + int dy = pc & 0x7FFF; + if(pc & 0x8000) + dy |= 0xFFFF8000; + int dmy = pd & 0x7FFFF; + if(pd & 0x8000) + dmy |= 0xFFFF8000; + + if(VCOUNT == 0) + changed = 3; + + if(changed & 1) + { + currentX = (x_l) | ((x_h & 0x07FF)<<16); + if(x_h & 0x0800) + currentX |= 0xF8000000; + } + else + { + currentX += dmx; + } + + if(changed & 2) + { + currentY = (y_l) | ((y_h & 0x07FF)<<16); + if(y_h & 0x0800) + currentY |= 0xF8000000; + } + else + { + currentY += dmy; + } + + int realX = currentX; + int realY = currentY; + + if(control & 0x40) + { + int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; + int y = (VCOUNT / mosaicY) * mosaicY; + realX = startX + y*dmx; + realY = startY + y*dmy; + } + + int xxx = (realX >> 8); + int yyy = (realY >> 8); + + for(int x = 0; x < 240; x++) + { + if(xxx < 0 || + yyy < 0 || + xxx >= sizeX || + yyy >= sizeY) + { + line[x] = 0x80000000; + } + else + { + u8 color = screenBase[yyy * 240 + xxx]; + + line[x] = color ? (READ16LE(&palette[color])|prio): 0x80000000; + } + realX += dx; + realY += dy; + + xxx = (realX >> 8); + yyy = (realY >> 8); + } + + if(control & 0x40) + { + int mosaicX = (MOSAIC & 0xF) + 1; + if(mosaicX > 1) + { + int m = 1; + for(int i = 0; i < 239; i++) + { + line[i+1] = line[i]; + m++; + if(m == mosaicX) + { + m = 1; + i++; + } + } + } + } +} + +inline void gfxDrawRotScreen16Bit160(u16 control, + u16 x_l, u16 x_h, + u16 y_l, u16 y_h, + u16 pa, u16 pb, + u16 pc, u16 pd, + int& currentX, int& currentY, + int changed, + u32 *line) +{ + u16 *screenBase = (DISPCNT & 0x0010) ? (u16 *)&vram[0xa000] : + (u16 *)&vram[0]; + int prio = ((control & 3) << 25) + 0x1000000; + int sizeX = 160; + int sizeY = 128; + + int startX = (x_l) | ((x_h & 0x07FF)<<16); + if(x_h & 0x0800) + startX |= 0xF8000000; + int startY = (y_l) | ((y_h & 0x07FF)<<16); + if(y_h & 0x0800) + startY |= 0xF8000000; + + int dx = pa & 0x7FFF; + if(pa & 0x8000) + dx |= 0xFFFF8000; + int dmx = pb & 0x7FFF; + if(pb & 0x8000) + dmx |= 0xFFFF8000; + int dy = pc & 0x7FFF; + if(pc & 0x8000) + dy |= 0xFFFF8000; + int dmy = pd & 0x7FFFF; + if(pd & 0x8000) + dmy |= 0xFFFF8000; + + if(VCOUNT == 0) + changed = 3; + + if(changed & 1) + { + currentX = (x_l) | ((x_h & 0x07FF)<<16); + if(x_h & 0x0800) + currentX |= 0xF8000000; + } + else + { + currentX += dmx; + } + + if(changed & 2) + { + currentY = (y_l) | ((y_h & 0x07FF)<<16); + if(y_h & 0x0800) + currentY |= 0xF8000000; + } + else + { + currentY += dmy; + } + + int realX = currentX; + int realY = currentY; + + if(control & 0x40) + { + int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; + int y = (VCOUNT / mosaicY) * mosaicY; + realX = startX + y*dmx; + realY = startY + y*dmy; + } + + int xxx = (realX >> 8); + int yyy = (realY >> 8); + + for(int x = 0; x < 240; x++) + { + if(xxx < 0 || + yyy < 0 || + xxx >= sizeX || + yyy >= sizeY) + { + line[x] = 0x80000000; + } + else + { + line[x] = (READ16LE(&screenBase[yyy * sizeX + xxx]) | prio); + } + realX += dx; + realY += dy; + + xxx = (realX >> 8); + yyy = (realY >> 8); + } + + if(control & 0x40) + { + int mosaicX = (MOSAIC & 0xF) + 1; + if(mosaicX > 1) + { + int m = 1; + for(int i = 0; i < 239; i++) + { + line[i+1] = line[i]; + m++; + if(m == mosaicX) + { + m = 1; + i++; + } + } + } + } +} + +inline void gfxDrawSprites(u32 *lineOBJ) +{ + int m=0; + gfxClearArray(lineOBJ); + if(layerEnable & 0x1000) + { + u16 *sprites = (u16 *)oam; + u16 *spritePalette = &((u16 *)paletteRAM)[256]; + int mosaicY = ((MOSAIC & 0xF000)>>12) + 1; + int mosaicX = ((MOSAIC & 0xF00)>>8) + 1; + for(int x = 0; x < 128 ; x++) + { + u16 a0 = READ16LE(sprites++); + u16 a1 = READ16LE(sprites++); + u16 a2 = READ16LE(sprites++); + sprites++; + + // ignore OBJ-WIN + if((a0 & 0x0c00) == 0x0800) + continue; + + int sizeY = 8; + int sizeX = 8; + + switch(((a0 >>12) & 0x0c)|(a1>>14)) + { + case 0: + break; + case 1: + sizeX = sizeY = 16; + break; + case 2: + sizeX = sizeY = 32; + break; + case 3: + sizeX = sizeY = 64; + break; + case 4: + sizeX = 16; + break; + case 5: + sizeX = 32; + break; + case 6: + sizeX = 32; + sizeY = 16; + break; + case 7: + sizeX = 64; + sizeY = 32; + break; + case 8: + sizeY = 16; + break; + case 9: + sizeY = 32; + break; + case 10: + sizeX = 16; + sizeY = 32; + break; + case 11: + sizeX = 32; + sizeY = 64; + break; + default: + continue; + } + +#ifdef SPRITE_DEBUG + int maskX = sizeX-1; + int maskY = sizeY-1; +#endif + + int sy = (a0 & 255); + + if(sy > 160) + sy -= 256; + + if(a0 & 0x0100) + { + int fieldX = sizeX; + int fieldY = sizeY; + if(a0 & 0x0200) + { + fieldX <<= 1; + fieldY <<= 1; + } + + int t = VCOUNT - sy; + if((t >= 0) && (t < fieldY)) + { + int sx = (a1 & 0x1FF); + if((sx < 240) || (((sx + fieldX) & 511) < 240)) + { + // int t2 = t - (fieldY >> 1); + int rot = (a1 >> 9) & 0x1F; + u16 *OAM = (u16 *)oam; + int dx = READ16LE(&OAM[3 + (rot << 4)]); + if(dx & 0x8000) + dx |= 0xFFFF8000; + int dmx = READ16LE(&OAM[7 + (rot << 4)]); + if(dmx & 0x8000) + dmx |= 0xFFFF8000; + int dy = READ16LE(&OAM[11 + (rot << 4)]); + if(dy & 0x8000) + dy |= 0xFFFF8000; + int dmy = READ16LE(&OAM[15 + (rot << 4)]); + if(dmy & 0x8000) + dmy |= 0xFFFF8000; + + if(a0 & 0x1000) + { + t -= (t % mosaicY); + } + + int realX = ((sizeX) << 7) - (fieldX >> 1)*dx - (fieldY>>1)*dmx + + t * dmx; + int realY = ((sizeY) << 7) - (fieldX >> 1)*dy - (fieldY>>1)*dmy + + t * dmy; + + u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); + + if(a0 & 0x2000) + { + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + int inc = 32; + if(DISPCNT & 0x40) + inc = sizeX >> 2; + else + c &= 0x3FE; + for(int x = 0; x < fieldX; x++) + { + int xxx = realX >> 8; + int yyy = realY >> 8; + + if(xxx < 0 || xxx >= sizeX || + yyy < 0 || yyy >= sizeY || + sx >= 240); + else + { + u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) + + ((yyy & 7)<<3) + ((xxx >> 3)<<6) + + (xxx & 7))&0x7FFF)]; + if ((color==0) && (((prio >> 25)&3) < + ((lineOBJ[sx]>>25)&3))) + { + lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) + { + lineOBJ[sx] = READ16LE(&spritePalette[color]) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + + if (a0 & 0x1000) + { + m++; + if (m==mosaicX) + m=0; + } +#ifdef SPRITE_DEBUG + if(t == 0 || t == maskY || x == 0 || x == maskX) + lineOBJ[sx] = 0x001F; +#endif + } + sx = (sx+1)&511; + ; + realX += dx; + realY += dy; + } + } + else + { + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + + int inc = 32; + if(DISPCNT & 0x40) + inc = sizeX >> 3; + int palette = (a2 >> 8) & 0xF0; + for(int x = 0; x < fieldX; x++) + { + int xxx = realX >> 8; + int yyy = realY >> 8; + if(xxx < 0 || xxx >= sizeX || + yyy < 0 || yyy >= sizeY || + sx >= 240); + else + { + u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) + + ((yyy & 7)<<2) + ((xxx >> 3)<<5) + + ((xxx & 7)>>1))&0x7FFF)]; + if(xxx & 1) + color >>= 4; + else + color &= 0x0F; + + if ((color==0) && (((prio >> 25)&3) < + ((lineOBJ[sx]>>25)&3))) + { + lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) + { + lineOBJ[sx] = READ16LE(&spritePalette[palette+color]) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + } + if((a0 & 0x1000) && m) + { + m++; + if (m==mosaicX) + m=0; + } + +#ifdef SPRITE_DEBUG + if(t == 0 || t == maskY || x == 0 || x == maskX) + lineOBJ[sx] = 0x001F; +#endif + sx = (sx+1)&511; + ; + realX += dx; + realY += dy; + + } + } + } + } + } + else + { + int t = VCOUNT - sy; + if((t >= 0) && (t < sizeY)) + { + int sx = (a1 & 0x1FF); + if(((sx < 240)||(((sx+sizeX)&511)<240)) && !(a0 & 0x0200)) + { + if(a0 & 0x2000) + { + if(a1 & 0x2000) + t = sizeY - t - 1; + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + + int inc = 32; + if(DISPCNT & 0x40) + { + inc = sizeX >> 2; + } + else + { + c &= 0x3FE; + } + int xxx = 0; + if(a1 & 0x1000) + xxx = sizeX-1; + + if(a0 & 0x1000) + { + t -= (t % mosaicY); + } + + int address = 0x10000 + ((((c+ (t>>3) * inc) << 5) + + ((t & 7) << 3) + ((xxx>>3)<<6) + (xxx & 7)) & 0x7FFF); + + if(a1 & 0x1000) + xxx = 7; + u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); + + for(int xx = 0; xx < sizeX; xx++) + { + if(sx < 240) + { + u8 color = vram[address]; + if ((color==0) && (((prio >> 25)&3) < + ((lineOBJ[sx]>>25)&3))) + { + lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) + { + lineOBJ[sx] = READ16LE(&spritePalette[color]) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + + if (a0 & 0x1000) + { + m++; + if (m==mosaicX) + m=0; + } + +#ifdef SPRITE_DEBUG + if(t == 0 || t == maskY || xx == 0 || xx == maskX) + lineOBJ[sx] = 0x001F; +#endif + } + + sx = (sx+1) & 511; + if(a1 & 0x1000) + { + xxx--; + address--; + if(xxx == -1) + { + address -= 56; + xxx = 7; + } + if(address < 0x10000) + address += 0x8000; + } + else + { + xxx++; + address++; + if(xxx == 8) + { + address += 56; + xxx = 0; + } + if(address > 0x17fff) + address -= 0x8000; + } + } + } + else + { + if(a1 & 0x2000) + t = sizeY - t - 1; + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + + int inc = 32; + if(DISPCNT & 0x40) + { + inc = sizeX >> 3; + } + int xxx = 0; + if(a1 & 0x1000) + xxx = sizeX - 1; + + if(a0 & 0x1000) + { + t -= (t % mosaicY); + } + + int address = 0x10000 + ((((c + (t>>3) * inc)<<5) + + ((t & 7)<<2) + ((xxx>>3)<<5) + ((xxx & 7) >> 1))&0x7FFF); + u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); + int palette = (a2 >> 8) & 0xF0; + if(a1 & 0x1000) + { + xxx = 7; + for(int xx = sizeX - 1; xx >= 0; xx--) + { + if(sx < 240) + { + u8 color = vram[address]; + if(xx & 1) + { + color = (color >> 4); + } + else + color &= 0x0F; + + if ((color==0) && (((prio >> 25)&3) < + ((lineOBJ[sx]>>25)&3))) + { + lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) + { + lineOBJ[sx] = READ16LE(&spritePalette[palette + color]) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + } + if (a0 & 0x1000) + { + m++; + if (m==mosaicX) + m=0; + } +#ifdef SPRITE_DEBUG + if(t == 0 || t == maskY || xx == 0 || xx == maskX) + lineOBJ[sx] = 0x001F; +#endif + sx = (sx+1) & 511; + xxx--; + if(!(xx & 1)) + address--; + if(xxx == -1) + { + xxx = 7; + address -= 28; + } + if(address < 0x10000) + address += 0x8000; + } + } + else + { + for(int xx = 0; xx < sizeX; xx++) + { + if(sx < 240) + { + u8 color = vram[address]; + if(xx & 1) + { + color = (color >> 4); + } + else + color &= 0x0F; + + if ((color==0) && (((prio >> 25)&3) < + ((lineOBJ[sx]>>25)&3))) + { + lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + } + else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) + { + lineOBJ[sx] = READ16LE(&spritePalette[palette + color]) | prio; + if((a0 & 0x1000) && m) + lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; + + } + } + if (a0 & 0x1000) + { + m++; + if (m==mosaicX) + m=0; + } +#ifdef SPRITE_DEBUG + if(t == 0 || t == maskY || xx == 0 || xx == maskX) + lineOBJ[sx] = 0x001F; +#endif + sx = (sx+1) & 511; + xxx++; + if(xx & 1) + address++; + if(xxx == 8) + { + address += 28; + xxx = 0; + } + if(address > 0x17fff) + address -= 0x8000; + } + } + } + } + } + } + } + } +} + +inline void gfxDrawOBJWin(u32 *lineOBJWin) +{ + gfxClearArray(lineOBJWin); + if(layerEnable & 0x8000) + { + u16 *sprites = (u16 *)oam; + // u16 *spritePalette = &((u16 *)paletteRAM)[256]; + for(int x = 0; x < 128 ; x++) + { + u16 a0 = READ16LE(sprites++); + u16 a1 = READ16LE(sprites++); + u16 a2 = READ16LE(sprites++); + sprites++; + + // ignore non OBJ-WIN + if((a0 & 0x0c00) != 0x0800) + continue; + + int sizeY = 8; + int sizeX = 8; + + switch(((a0 >>12) & 0x0c)|(a1>>14)) + { + case 0: + break; + case 1: + sizeX = sizeY = 16; + break; + case 2: + sizeX = sizeY = 32; + break; + case 3: + sizeX = sizeY = 64; + break; + case 4: + sizeX = 16; + break; + case 5: + sizeX = 32; + break; + case 6: + sizeX = 32; + sizeY = 16; + break; + case 7: + sizeX = 64; + sizeY = 32; + break; + case 8: + sizeY = 16; + break; + case 9: + sizeY = 32; + break; + case 10: + sizeX = 16; + sizeY = 32; + break; + case 11: + sizeX = 32; + sizeY = 64; + break; + default: + continue; + } + + int sy = (a0 & 255); + + if(sy > 160) + sy -= 256; + + if(a0 & 0x0100) + { + int fieldX = sizeX; + int fieldY = sizeY; + if(a0 & 0x0200) + { + fieldX <<= 1; + fieldY <<= 1; + } + + int t = VCOUNT - sy; + if((t >= 0) && (t < fieldY)) + { + int sx = (a1 & 0x1FF); + if((sx < 240) || (((sx + fieldX) & 511) < 240)) + { + // int t2 = t - (fieldY >> 1); + int rot = (a1 >> 9) & 0x1F; + u16 *OAM = (u16 *)oam; + int dx = READ16LE(&OAM[3 + (rot << 4)]); + if(dx & 0x8000) + dx |= 0xFFFF8000; + int dmx = READ16LE(&OAM[7 + (rot << 4)]); + if(dmx & 0x8000) + dmx |= 0xFFFF8000; + int dy = READ16LE(&OAM[11 + (rot << 4)]); + if(dy & 0x8000) + dy |= 0xFFFF8000; + int dmy = READ16LE(&OAM[15 + (rot << 4)]); + if(dmy & 0x8000) + dmy |= 0xFFFF8000; + + int realX = ((sizeX) << 7) - (fieldX >> 1)*dx - (fieldY>>1)*dmx + + t * dmx; + int realY = ((sizeY) << 7) - (fieldX >> 1)*dy - (fieldY>>1)*dmy + + t * dmy; + + // u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); + + if(a0 & 0x2000) + { + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + int inc = 32; + if(DISPCNT & 0x40) + inc = sizeX >> 2; + else + c &= 0x3FE; + for(int x = 0; x < fieldX; x++) + { + int xxx = realX >> 8; + int yyy = realY >> 8; + + if(xxx < 0 || xxx >= sizeX || + yyy < 0 || yyy >= sizeY) + {} + else + { + u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) + + ((yyy & 7)<<3) + ((xxx >> 3)<<6) + + (xxx & 7))&0x7fff)]; + if(color) + { + lineOBJWin[sx] = 1; + } + } + sx = (sx+1)&511; + ; + realX += dx; + realY += dy; + } + } + else + { + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + + int inc = 32; + if(DISPCNT & 0x40) + inc = sizeX >> 3; + // int palette = (a2 >> 8) & 0xF0; + for(int x = 0; x < fieldX; x++) + { + int xxx = realX >> 8; + int yyy = realY >> 8; + + // if(x == 0 || x == (sizeX-1) || + // t == 0 || t == (sizeY-1)) { + // lineOBJ[sx] = 0x001F | prio; + // } else { + if(xxx < 0 || xxx >= sizeX || + yyy < 0 || yyy >= sizeY) + {} + else + { + u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) + + ((yyy & 7)<<2) + ((xxx >> 3)<<5) + + ((xxx & 7)>>1))&0x7fff)]; + if(xxx & 1) + color >>= 4; + else + color &= 0x0F; + + if(color) + { + lineOBJWin[sx] = 1; + } + } + // } + sx = (sx+1)&511; + ; + realX += dx; + realY += dy; + } + } + } + } + } + else + { + int t = VCOUNT - sy; + if((t >= 0) && (t < sizeY)) + { + int sx = (a1 & 0x1FF); + if(((sx < 240)||(((sx+sizeX)&511)<240)) && !(a0 & 0x0200)) + { + if(a0 & 0x2000) + { + if(a1 & 0x2000) + t = sizeY - t - 1; + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + + int inc = 32; + if(DISPCNT & 0x40) + { + inc = sizeX >> 2; + } + else + { + c &= 0x3FE; + } + int xxx = 0; + if(a1 & 0x1000) + xxx = sizeX-1; + int address = 0x10000 + ((((c+ (t>>3) * inc) << 5) + + ((t & 7) << 3) + ((xxx>>3)<<6) + (xxx & 7))&0x7fff); + if(a1 & 0x1000) + xxx = 7; + // u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); + for(int xx = 0; xx < sizeX; xx++) + { + if(sx < 240) + { + u8 color = vram[address]; + if(color) + { + lineOBJWin[sx] = 1; + } + } + + sx = (sx+1) & 511; + if(a1 & 0x1000) + { + xxx--; + address--; + if(xxx == -1) + { + address -= 56; + xxx = 7; + } + if(address < 0x10000) + address += 0x8000; + } + else + { + xxx++; + address++; + if(xxx == 8) + { + address += 56; + xxx = 0; + } + if(address > 0x17fff) + address -= 0x8000; + } + } + } + else + { + if(a1 & 0x2000) + t = sizeY - t - 1; + int c = (a2 & 0x3FF); + if((DISPCNT & 7) > 2 && (c < 512)) + continue; + + int inc = 32; + if(DISPCNT & 0x40) + { + inc = sizeX >> 3; + } + int xxx = 0; + if(a1 & 0x1000) + xxx = sizeX - 1; + int address = 0x10000 + ((((c + (t>>3) * inc)<<5) + + ((t & 7)<<2) + ((xxx>>3)<<5) + ((xxx & 7) >> 1))&0x7fff); + // u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); + // int palette = (a2 >> 8) & 0xF0; + if(a1 & 0x1000) + { + xxx = 7; + for(int xx = sizeX - 1; xx >= 0; xx--) + { + if(sx < 240) + { + u8 color = vram[address]; + if(xx & 1) + { + color = (color >> 4); + } + else + color &= 0x0F; + + if(color) + { + lineOBJWin[sx] = 1; + } + } + sx = (sx+1) & 511; + xxx--; + if(!(xx & 1)) + address--; + if(xxx == -1) + { + xxx = 7; + address -= 28; + } + if(address < 0x10000) + address += 0x8000; + } + } + else + { + for(int xx = 0; xx < sizeX; xx++) + { + if(sx < 240) + { + u8 color = vram[address]; + if(xx & 1) + { + color = (color >> 4); + } + else + color &= 0x0F; + + if(color) + { + lineOBJWin[sx] = 1; + } + } + sx = (sx+1) & 511; + xxx++; + if(xx & 1) + address++; + if(xxx == 8) + { + address += 28; + xxx = 0; + } + if(address > 0x17fff) + address -= 0x8000; + } + } + } + } + } + } + } + } +} + +inline u32 gfxIncreaseBrightness(u32 color, int coeff) +{ + int r = (color & 0x1F); + int g = ((color >> 5) & 0x1F); + int b = ((color >> 10) & 0x1F); + + r = r + (((31 - r) * coeff) >> 4); + g = g + (((31 - g) * coeff) >> 4); + b = b + (((31 - b) * coeff) >> 4); + if(r > 31) + r = 31; + if(g > 31) + g = 31; + if(b > 31) + b = 31; + color = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; + return color; +} + +inline void gfxIncreaseBrightness(u32 *line, int coeff) +{ + for(int x = 0; x < 240; x++) + { + u32 color = *line; + int r = (color & 0x1F); + int g = ((color >> 5) & 0x1F); + int b = ((color >> 10) & 0x1F); + + r = r + (((31 - r) * coeff) >> 4); + g = g + (((31 - g) * coeff) >> 4); + b = b + (((31 - b) * coeff) >> 4); + if(r > 31) + r = 31; + if(g > 31) + g = 31; + if(b > 31) + b = 31; + *line++ = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; + } +} + +inline u32 gfxDecreaseBrightness(u32 color, int coeff) +{ + int r = (color & 0x1F); + int g = ((color >> 5) & 0x1F); + int b = ((color >> 10) & 0x1F); + + r = r - ((r * coeff) >> 4); + g = g - ((g * coeff) >> 4); + b = b - ((b * coeff) >> 4); + if(r < 0) + r = 0; + if(g < 0) + g = 0; + if(b < 0) + b = 0; + color = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; + + return color; +} + +inline void gfxDecreaseBrightness(u32 *line, int coeff) +{ + for(int x = 0; x < 240; x++) + { + u32 color = *line; + int r = (color & 0x1F); + int g = ((color >> 5) & 0x1F); + int b = ((color >> 10) & 0x1F); + + r = r - ((r * coeff) >> 4); + g = g - ((g * coeff) >> 4); + b = b - ((b * coeff) >> 4); + if(r < 0) + r = 0; + if(g < 0) + g = 0; + if(b < 0) + b = 0; + *line++ = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; + } +} + +inline u32 gfxAlphaBlend(u32 color, u32 color2, int ca, int cb) +{ + if(color < 0x80000000) + { + int r = (color & 0x1F); + int g = ((color >> 5) & 0x1F); + int b = ((color >> 10) & 0x1F); + int r0 = (color2 & 0x1F); + int g0 = ((color2 >> 5) & 0x1F); + int b0 = ((color2 >> 10) & 0x1F); + + r = ((r * ca) >> 4) + ((r0 * cb) >> 4); + g = ((g * ca) >> 4) + ((g0 * cb) >> 4); + b = ((b * ca) >> 4) + ((b0 * cb) >> 4); + + if(r > 31) + r = 31; + if(g > 31) + g = 31; + if(b > 31) + b = 31; + + return (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; + } + return color; +} + +inline void gfxAlphaBlend(u32 *ta, u32 *tb, int ca, int cb) +{ + for(int x = 0; x < 240; x++) + { + u32 color = *ta; + if(color < 0x80000000) + { + int r = (color & 0x1F); + int g = ((color >> 5) & 0x1F); + int b = ((color >> 10) & 0x1F); + u32 color2 = (*tb++); + int r0 = (color2 & 0x1F); + int g0 = ((color2 >> 5) & 0x1F); + int b0 = ((color2 >> 10) & 0x1F); + + r = ((r * ca) >> 4) + ((r0 * cb) >> 4); + g = ((g * ca) >> 4) + ((g0 * cb) >> 4); + b = ((b * ca) >> 4) + ((b0 * cb) >> 4); + + if(r > 31) + r = 31; + if(g > 31) + g = 31; + if(b > 31) + b = 31; + + *ta++ = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; + } + else + { + ta++; + tb++; + } + } +} + +#endif // VBA_GFX_H diff --git a/source/vba/Globals.cpp b/source/vba/Globals.cpp index 5d2433c9..f6e79687 100644 --- a/source/vba/Globals.cpp +++ b/source/vba/Globals.cpp @@ -1,141 +1,135 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" - -#ifdef BKPT_SUPPORT -int oldreg[17]; -char oldbuffer[10]; -#endif - -reg_pair reg[45]; -memoryMap map[256]; -bool ioReadable[0x400]; -bool N_FLAG = 0; -bool C_FLAG = 0; -bool Z_FLAG = 0; -bool V_FLAG = 0; -bool armState = true; -bool armIrqEnable = true; -u32 armNextPC = 0x00000000; -int armMode = 0x1f; -u32 stop = 0x08000568; -int saveType = 0; -bool useBios = false; -bool skipBios = false; -int frameSkip = 1; -bool speedup = false; -bool synchronize = true; -bool cpuDisableSfx = false; -bool cpuIsMultiBoot = false; -bool parseDebug = true; -int layerSettings = 0xff00; -int layerEnable = 0xff00; -bool speedHack = false; -int cpuSaveType = 0; -bool cheatsEnabled = true; -bool mirroringEnable = false; -bool skipSaveGameBattery = false; - -u8 *bios = NULL; -u8 *rom = NULL; -u8 *internalRAM = NULL; -u8 *workRAM = NULL; -u8 *paletteRAM = NULL; -u8 *vram = NULL; -u8 *pix = NULL; -u8 *oam = NULL; -u8 *ioMem = NULL; - -u16 DISPCNT = 0x0080; -u16 DISPSTAT = 0x0000; -u16 VCOUNT = 0x0000; -u16 BG0CNT = 0x0000; -u16 BG1CNT = 0x0000; -u16 BG2CNT = 0x0000; -u16 BG3CNT = 0x0000; -u16 BG0HOFS = 0x0000; -u16 BG0VOFS = 0x0000; -u16 BG1HOFS = 0x0000; -u16 BG1VOFS = 0x0000; -u16 BG2HOFS = 0x0000; -u16 BG2VOFS = 0x0000; -u16 BG3HOFS = 0x0000; -u16 BG3VOFS = 0x0000; -u16 BG2PA = 0x0100; -u16 BG2PB = 0x0000; -u16 BG2PC = 0x0000; -u16 BG2PD = 0x0100; -u16 BG2X_L = 0x0000; -u16 BG2X_H = 0x0000; -u16 BG2Y_L = 0x0000; -u16 BG2Y_H = 0x0000; -u16 BG3PA = 0x0100; -u16 BG3PB = 0x0000; -u16 BG3PC = 0x0000; -u16 BG3PD = 0x0100; -u16 BG3X_L = 0x0000; -u16 BG3X_H = 0x0000; -u16 BG3Y_L = 0x0000; -u16 BG3Y_H = 0x0000; -u16 WIN0H = 0x0000; -u16 WIN1H = 0x0000; -u16 WIN0V = 0x0000; -u16 WIN1V = 0x0000; -u16 WININ = 0x0000; -u16 WINOUT = 0x0000; -u16 MOSAIC = 0x0000; -u16 BLDMOD = 0x0000; -u16 COLEV = 0x0000; -u16 COLY = 0x0000; -u16 DM0SAD_L = 0x0000; -u16 DM0SAD_H = 0x0000; -u16 DM0DAD_L = 0x0000; -u16 DM0DAD_H = 0x0000; -u16 DM0CNT_L = 0x0000; -u16 DM0CNT_H = 0x0000; -u16 DM1SAD_L = 0x0000; -u16 DM1SAD_H = 0x0000; -u16 DM1DAD_L = 0x0000; -u16 DM1DAD_H = 0x0000; -u16 DM1CNT_L = 0x0000; -u16 DM1CNT_H = 0x0000; -u16 DM2SAD_L = 0x0000; -u16 DM2SAD_H = 0x0000; -u16 DM2DAD_L = 0x0000; -u16 DM2DAD_H = 0x0000; -u16 DM2CNT_L = 0x0000; -u16 DM2CNT_H = 0x0000; -u16 DM3SAD_L = 0x0000; -u16 DM3SAD_H = 0x0000; -u16 DM3DAD_L = 0x0000; -u16 DM3DAD_H = 0x0000; -u16 DM3CNT_L = 0x0000; -u16 DM3CNT_H = 0x0000; -u16 TM0D = 0x0000; -u16 TM0CNT = 0x0000; -u16 TM1D = 0x0000; -u16 TM1CNT = 0x0000; -u16 TM2D = 0x0000; -u16 TM2CNT = 0x0000; -u16 TM3D = 0x0000; -u16 TM3CNT = 0x0000; -u16 P1 = 0xFFFF; -u16 IE = 0x0000; -u16 IF = 0x0000; -u16 IME = 0x0000; +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" + +reg_pair reg[45]; +memoryMap map[256]; +bool ioReadable[0x400]; +bool N_FLAG = 0; +bool C_FLAG = 0; +bool Z_FLAG = 0; +bool V_FLAG = 0; +bool armState = true; +bool armIrqEnable = true; +u32 armNextPC = 0x00000000; +int armMode = 0x1f; +u32 stop = 0x08000568; +int saveType = 0; +bool useBios = false; +bool skipBios = false; +int frameSkip = 1; +bool speedup = false; +bool synchronize = true; +bool cpuDisableSfx = false; +bool cpuIsMultiBoot = false; +bool parseDebug = true; +int layerSettings = 0xff00; +int layerEnable = 0xff00; +bool speedHack = false; +int cpuSaveType = 0; +bool cpuEnhancedDetection = true; +bool cheatsEnabled = true; + +u8 *bios = NULL; +u8 *rom = NULL; +u8 *internalRAM = NULL; +u8 *workRAM = NULL; +u8 *paletteRAM = NULL; +u8 *vram = NULL; +u8 *pix = NULL; +u8 *oam = NULL; +u8 *ioMem = NULL; + +u16 DISPCNT = 0x0080; +u16 DISPSTAT = 0x0000; +u16 VCOUNT = 0x0000; +u16 BG0CNT = 0x0000; +u16 BG1CNT = 0x0000; +u16 BG2CNT = 0x0000; +u16 BG3CNT = 0x0000; +u16 BG0HOFS = 0x0000; +u16 BG0VOFS = 0x0000; +u16 BG1HOFS = 0x0000; +u16 BG1VOFS = 0x0000; +u16 BG2HOFS = 0x0000; +u16 BG2VOFS = 0x0000; +u16 BG3HOFS = 0x0000; +u16 BG3VOFS = 0x0000; +u16 BG2PA = 0x0100; +u16 BG2PB = 0x0000; +u16 BG2PC = 0x0000; +u16 BG2PD = 0x0100; +u16 BG2X_L = 0x0000; +u16 BG2X_H = 0x0000; +u16 BG2Y_L = 0x0000; +u16 BG2Y_H = 0x0000; +u16 BG3PA = 0x0100; +u16 BG3PB = 0x0000; +u16 BG3PC = 0x0000; +u16 BG3PD = 0x0100; +u16 BG3X_L = 0x0000; +u16 BG3X_H = 0x0000; +u16 BG3Y_L = 0x0000; +u16 BG3Y_H = 0x0000; +u16 WIN0H = 0x0000; +u16 WIN1H = 0x0000; +u16 WIN0V = 0x0000; +u16 WIN1V = 0x0000; +u16 WININ = 0x0000; +u16 WINOUT = 0x0000; +u16 MOSAIC = 0x0000; +u16 BLDMOD = 0x0000; +u16 COLEV = 0x0000; +u16 COLY = 0x0000; +u16 DM0SAD_L = 0x0000; +u16 DM0SAD_H = 0x0000; +u16 DM0DAD_L = 0x0000; +u16 DM0DAD_H = 0x0000; +u16 DM0CNT_L = 0x0000; +u16 DM0CNT_H = 0x0000; +u16 DM1SAD_L = 0x0000; +u16 DM1SAD_H = 0x0000; +u16 DM1DAD_L = 0x0000; +u16 DM1DAD_H = 0x0000; +u16 DM1CNT_L = 0x0000; +u16 DM1CNT_H = 0x0000; +u16 DM2SAD_L = 0x0000; +u16 DM2SAD_H = 0x0000; +u16 DM2DAD_L = 0x0000; +u16 DM2DAD_H = 0x0000; +u16 DM2CNT_L = 0x0000; +u16 DM2CNT_H = 0x0000; +u16 DM3SAD_L = 0x0000; +u16 DM3SAD_H = 0x0000; +u16 DM3DAD_L = 0x0000; +u16 DM3DAD_H = 0x0000; +u16 DM3CNT_L = 0x0000; +u16 DM3CNT_H = 0x0000; +u16 TM0D = 0x0000; +u16 TM0CNT = 0x0000; +u16 TM1D = 0x0000; +u16 TM1CNT = 0x0000; +u16 TM2D = 0x0000; +u16 TM2CNT = 0x0000; +u16 TM3D = 0x0000; +u16 TM3CNT = 0x0000; +u16 P1 = 0xFFFF; +u16 IE = 0x0000; +u16 IF = 0x0000; +u16 IME = 0x0000; diff --git a/source/vba/Globals.h b/source/vba/Globals.h index 8439848f..86c4aeec 100644 --- a/source/vba/Globals.h +++ b/source/vba/Globals.h @@ -1,153 +1,149 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_GLOBALS_H -#define VBA_GLOBALS_H - -#include "agb/GBA.h" - -#define VERBOSE_SWI 1 -#define VERBOSE_UNALIGNED_MEMORY 2 -#define VERBOSE_ILLEGAL_WRITE 4 -#define VERBOSE_ILLEGAL_READ 8 -#define VERBOSE_DMA0 16 -#define VERBOSE_DMA1 32 -#define VERBOSE_DMA2 64 -#define VERBOSE_DMA3 128 -#define VERBOSE_UNDEFINED 256 -#define VERBOSE_AGBPRINT 512 -#define VERBOSE_SOUNDOUTPUT 1024 - -extern reg_pair reg[45]; -extern bool ioReadable[0x400]; -extern bool N_FLAG; -extern bool C_FLAG; -extern bool Z_FLAG; -extern bool V_FLAG; -extern bool armState; -extern bool armIrqEnable; -extern u32 armNextPC; -extern int armMode; -extern u32 stop; -extern int saveType; -extern bool useBios; -extern bool skipBios; -extern int frameSkip; -extern bool speedup; -extern bool synchronize; -extern bool cpuDisableSfx; -extern bool cpuIsMultiBoot; -extern bool parseDebug; -extern int layerSettings; -extern int layerEnable; -extern bool speedHack; -extern int cpuSaveType; -extern bool cheatsEnabled; -extern bool mirroringEnable; -extern bool skipSaveGameBattery; - -extern u8 *bios; -extern u8 *rom; -extern u8 *internalRAM; -extern u8 *workRAM; -extern u8 *paletteRAM; -extern u8 *vram; -extern u8 *pix; -extern u8 *oam; -extern u8 *ioMem; - -extern u16 DISPCNT; -extern u16 DISPSTAT; -extern u16 VCOUNT; -extern u16 BG0CNT; -extern u16 BG1CNT; -extern u16 BG2CNT; -extern u16 BG3CNT; -extern u16 BG0HOFS; -extern u16 BG0VOFS; -extern u16 BG1HOFS; -extern u16 BG1VOFS; -extern u16 BG2HOFS; -extern u16 BG2VOFS; -extern u16 BG3HOFS; -extern u16 BG3VOFS; -extern u16 BG2PA; -extern u16 BG2PB; -extern u16 BG2PC; -extern u16 BG2PD; -extern u16 BG2X_L; -extern u16 BG2X_H; -extern u16 BG2Y_L; -extern u16 BG2Y_H; -extern u16 BG3PA; -extern u16 BG3PB; -extern u16 BG3PC; -extern u16 BG3PD; -extern u16 BG3X_L; -extern u16 BG3X_H; -extern u16 BG3Y_L; -extern u16 BG3Y_H; -extern u16 WIN0H; -extern u16 WIN1H; -extern u16 WIN0V; -extern u16 WIN1V; -extern u16 WININ; -extern u16 WINOUT; -extern u16 MOSAIC; -extern u16 BLDMOD; -extern u16 COLEV; -extern u16 COLY; -extern u16 DM0SAD_L; -extern u16 DM0SAD_H; -extern u16 DM0DAD_L; -extern u16 DM0DAD_H; -extern u16 DM0CNT_L; -extern u16 DM0CNT_H; -extern u16 DM1SAD_L; -extern u16 DM1SAD_H; -extern u16 DM1DAD_L; -extern u16 DM1DAD_H; -extern u16 DM1CNT_L; -extern u16 DM1CNT_H; -extern u16 DM2SAD_L; -extern u16 DM2SAD_H; -extern u16 DM2DAD_L; -extern u16 DM2DAD_H; -extern u16 DM2CNT_L; -extern u16 DM2CNT_H; -extern u16 DM3SAD_L; -extern u16 DM3SAD_H; -extern u16 DM3DAD_L; -extern u16 DM3DAD_H; -extern u16 DM3CNT_L; -extern u16 DM3CNT_H; -extern u16 TM0D; -extern u16 TM0CNT; -extern u16 TM1D; -extern u16 TM1CNT; -extern u16 TM2D; -extern u16 TM2CNT; -extern u16 TM3D; -extern u16 TM3CNT; -extern u16 P1; -extern u16 IE; -extern u16 IF; -extern u16 IME; - -#endif // VBA_GLOBALS_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_GLOBALS_H +#define VBA_GLOBALS_H + +#define VERBOSE_SWI 1 +#define VERBOSE_UNALIGNED_MEMORY 2 +#define VERBOSE_ILLEGAL_WRITE 4 +#define VERBOSE_ILLEGAL_READ 8 +#define VERBOSE_DMA0 16 +#define VERBOSE_DMA1 32 +#define VERBOSE_DMA2 64 +#define VERBOSE_DMA3 128 +#define VERBOSE_UNDEFINED 256 +#define VERBOSE_AGBPRINT 512 + +extern reg_pair reg[45]; +extern bool ioReadable[0x400]; +extern bool N_FLAG; +extern bool C_FLAG; +extern bool Z_FLAG; +extern bool V_FLAG; +extern bool armState; +extern bool armIrqEnable; +extern u32 armNextPC; +extern int armMode; +extern u32 stop; +extern int saveType; +extern bool useBios; +extern bool skipBios; +extern int frameSkip; +extern bool speedup; +extern bool synchronize; +extern bool cpuDisableSfx; +extern bool cpuIsMultiBoot; +extern bool parseDebug; +extern int layerSettings; +extern int layerEnable; +extern bool speedHack; +extern int cpuSaveType; +extern bool cpuEnhancedDetection; +extern bool cheatsEnabled; + +extern u8 *bios; +extern u8 *rom; +extern u8 *internalRAM; +extern u8 *workRAM; +extern u8 *paletteRAM; +extern u8 *vram; +extern u8 *pix; +extern u8 *oam; +extern u8 *ioMem; + +extern u16 DISPCNT; +extern u16 DISPSTAT; +extern u16 VCOUNT; +extern u16 BG0CNT; +extern u16 BG1CNT; +extern u16 BG2CNT; +extern u16 BG3CNT; +extern u16 BG0HOFS; +extern u16 BG0VOFS; +extern u16 BG1HOFS; +extern u16 BG1VOFS; +extern u16 BG2HOFS; +extern u16 BG2VOFS; +extern u16 BG3HOFS; +extern u16 BG3VOFS; +extern u16 BG2PA; +extern u16 BG2PB; +extern u16 BG2PC; +extern u16 BG2PD; +extern u16 BG2X_L; +extern u16 BG2X_H; +extern u16 BG2Y_L; +extern u16 BG2Y_H; +extern u16 BG3PA; +extern u16 BG3PB; +extern u16 BG3PC; +extern u16 BG3PD; +extern u16 BG3X_L; +extern u16 BG3X_H; +extern u16 BG3Y_L; +extern u16 BG3Y_H; +extern u16 WIN0H; +extern u16 WIN1H; +extern u16 WIN0V; +extern u16 WIN1V; +extern u16 WININ; +extern u16 WINOUT; +extern u16 MOSAIC; +extern u16 BLDMOD; +extern u16 COLEV; +extern u16 COLY; +extern u16 DM0SAD_L; +extern u16 DM0SAD_H; +extern u16 DM0DAD_L; +extern u16 DM0DAD_H; +extern u16 DM0CNT_L; +extern u16 DM0CNT_H; +extern u16 DM1SAD_L; +extern u16 DM1SAD_H; +extern u16 DM1DAD_L; +extern u16 DM1DAD_H; +extern u16 DM1CNT_L; +extern u16 DM1CNT_H; +extern u16 DM2SAD_L; +extern u16 DM2SAD_H; +extern u16 DM2DAD_L; +extern u16 DM2DAD_H; +extern u16 DM2CNT_L; +extern u16 DM2CNT_H; +extern u16 DM3SAD_L; +extern u16 DM3SAD_H; +extern u16 DM3DAD_L; +extern u16 DM3DAD_H; +extern u16 DM3CNT_L; +extern u16 DM3CNT_H; +extern u16 TM0D; +extern u16 TM0CNT; +extern u16 TM1D; +extern u16 TM1CNT; +extern u16 TM2D; +extern u16 TM2CNT; +extern u16 TM3D; +extern u16 TM3CNT; +extern u16 P1; +extern u16 IE; +extern u16 IF; +extern u16 IME; + +#endif // VBA_GLOBALS_H diff --git a/source/vba/Mode0.cpp b/source/vba/Mode0.cpp index 8e82d948..b2a01872 100644 --- a/source/vba/Mode0.cpp +++ b/source/vba/Mode0.cpp @@ -1,509 +1,652 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" -#include "Globals.h" -#include "agb/GBAGfx.h" - -void mode0RenderLine() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - return; - } - - if(layerEnable & 0x0100) { - gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); - } - - if(layerEnable & 0x0200) { - gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); - } - - if(layerEnable & 0x0400) { - gfxDrawTextScreen(BG2CNT, BG2HOFS, BG2VOFS, line2); - } - - if(layerEnable & 0x0800) { - gfxDrawTextScreen(BG3CNT, BG3HOFS, BG3VOFS, line3); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - if(line0[x] < color) { - color = line0[x]; - top = 0x01; - } - - if((u8)(line1[x]>>24) < (u8)(color >> 24)) { - color = line1[x]; - top = 0x02; - } - - if((u8)(line2[x]>>24) < (u8)(color >> 24)) { - color = line2[x]; - top = 0x04; - } - - if((u8)(line3[x]>>24) < (u8)(color >> 24)) { - color = line3[x]; - top = 0x08; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if((top & 0x10) && (color & 0x00010000)) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((u8)(line0[x]>>24) < (u8)(back >> 24)) { - back = line0[x]; - top2 = 0x01; - } - - if((u8)(line1[x]>>24) < (u8)(back >> 24)) { - back = line1[x]; - top2 = 0x02; - } - - if((u8)(line2[x]>>24) < (u8)(back >> 24)) { - back = line2[x]; - top2 = 0x04; - } - - if((u8)(line3[x]>>24) < (u8)(back >> 24)) { - back = line3[x]; - top2 = 0x08; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } -} - -void mode0RenderLineNoWindow() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - return; - } - - if(layerEnable & 0x0100) { - gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); - } - - if(layerEnable & 0x0200) { - gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); - } - - if(layerEnable & 0x0400) { - gfxDrawTextScreen(BG2CNT, BG2HOFS, BG2VOFS, line2); - } - - if(layerEnable & 0x0800) { - gfxDrawTextScreen(BG3CNT, BG3HOFS, BG3VOFS, line3); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - int effect = (BLDMOD >> 6) & 3; - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - if(line0[x] < color) { - color = line0[x]; - top = 0x01; - } - - if(line1[x] < (color & 0xFF000000)) { - color = line1[x]; - top = 0x02; - } - - if(line2[x] < (color & 0xFF000000)) { - color = line2[x]; - top = 0x04; - } - - if(line3[x] < (color & 0xFF000000)) { - color = line3[x]; - top = 0x08; - } - - if(lineOBJ[x] < (color & 0xFF000000)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(!(color & 0x00010000)) { - switch(effect) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - if(line0[x] < back) { - if(top != 0x01) { - back = line0[x]; - top2 = 0x01; - } - } - - if(line1[x] < (back & 0xFF000000)) { - if(top != 0x02) { - back = line1[x]; - top2 = 0x02; - } - } - - if(line2[x] < (back & 0xFF000000)) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if(line3[x] < (back & 0xFF000000)) { - if(top != 0x08) { - back = line3[x]; - top2 = 0x08; - } - } - - if(lineOBJ[x] < (back & 0xFF000000)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } else { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if(line0[x] < back) { - back = line0[x]; - top2 = 0x01; - } - - if(line1[x] < (back & 0xFF000000)) { - back = line1[x]; - top2 = 0x02; - } - - if(line2[x] < (back & 0xFF000000)) { - back = line2[x]; - top2 = 0x04; - } - - if(line3[x] < (back & 0xFF000000)) { - back = line3[x]; - top2 = 0x08; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } -} - -void mode0RenderLineAll() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - return; - } - - bool inWindow0 = false; - bool inWindow1 = false; - - if(layerEnable & 0x2000) { - u8 v0 = WIN0V >> 8; - u8 v1 = WIN0V & 255; - inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); - } - if(layerEnable & 0x4000) { - u8 v0 = WIN1V >> 8; - u8 v1 = WIN1V & 255; - inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); - } - - if((layerEnable & 0x0100)) { - gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); - } - - if((layerEnable & 0x0200)) { - gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); - } - - if((layerEnable & 0x0400)) { - gfxDrawTextScreen(BG2CNT, BG2HOFS, BG2VOFS, line2); - } - - if((layerEnable & 0x0800)) { - gfxDrawTextScreen(BG3CNT, BG3HOFS, BG3VOFS, line3); - } - - gfxDrawSprites(lineOBJ); - gfxDrawOBJWin(lineOBJWin); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - u8 inWin0Mask = WININ & 0xFF; - u8 inWin1Mask = WININ >> 8; - u8 outMask = WINOUT & 0xFF; - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - u8 mask = outMask; - - if(!(lineOBJWin[x] & 0x80000000)) { - mask = WINOUT >> 8; - } - - if(inWindow1) { - if(gfxInWin1[x]) - mask = inWin1Mask; - } - - if(inWindow0) { - if(gfxInWin0[x]) { - mask = inWin0Mask; - } - } - - if((mask & 1) && (line0[x] < color)) { - color = line0[x]; - top = 0x01; - } - - if((mask & 2) && ((u8)(line1[x]>>24) < (u8)(color >> 24))) { - color = line1[x]; - top = 0x02; - } - - if((mask & 4) && ((u8)(line2[x]>>24) < (u8)(color >> 24))) { - color = line2[x]; - top = 0x04; - } - - if((mask & 8) && ((u8)(line3[x]>>24) < (u8)(color >> 24))) { - color = line3[x]; - top = 0x08; - } - - if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >> 24))) { - color = lineOBJ[x]; - top = 0x10; - } - - if(color & 0x00010000) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((mask & 1) && ((u8)(line0[x]>>24) < (u8)(back >> 24))) { - back = line0[x]; - top2 = 0x01; - } - - if((mask & 2) && ((u8)(line1[x]>>24) < (u8)(back >> 24))) { - back = line1[x]; - top2 = 0x02; - } - - if((mask & 4) && ((u8)(line2[x]>>24) < (u8)(back >> 24))) { - back = line2[x]; - top2 = 0x04; - } - - if((mask & 8) && ((u8)(line3[x]>>24) < (u8)(back >> 24))) { - back = line3[x]; - top2 = 0x08; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } else if(mask & 32) { - // special FX on in the window - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - if((mask & 1) && (u8)(line0[x]>>24) < (u8)(back >> 24)) { - if(top != 0x01) { - back = line0[x]; - top2 = 0x01; - } - } - - if((mask & 2) && (u8)(line1[x]>>24) < (u8)(back >> 24)) { - if(top != 0x02) { - back = line1[x]; - top2 = 0x02; - } - } - - if((mask & 4) && (u8)(line2[x]>>24) < (u8)(back >> 24)) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((mask & 8) && (u8)(line3[x]>>24) < (u8)(back >> 24)) { - if(top != 0x08) { - back = line3[x]; - top2 = 0x08; - } - } - - if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - - lineMix[x] = color; - } -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "Globals.h" +#include "Gfx.h" + +void mode0RenderLine() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + return; + } + + if(layerEnable & 0x0100) + { + gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); + } + + if(layerEnable & 0x0200) + { + gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); + } + + if(layerEnable & 0x0400) + { + gfxDrawTextScreen(BG2CNT, BG2HOFS, BG2VOFS, line2); + } + + if(layerEnable & 0x0800) + { + gfxDrawTextScreen(BG3CNT, BG3HOFS, BG3VOFS, line3); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + if(line0[x] < color) + { + color = line0[x]; + top = 0x01; + } + + if((u8)(line1[x]>>24) < (u8)(color >> 24)) + { + color = line1[x]; + top = 0x02; + } + + if((u8)(line2[x]>>24) < (u8)(color >> 24)) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(line3[x]>>24) < (u8)(color >> 24)) + { + color = line3[x]; + top = 0x08; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if((top & 0x10) && (color & 0x00010000)) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((u8)(line0[x]>>24) < (u8)(back >> 24)) + { + back = line0[x]; + top2 = 0x01; + } + + if((u8)(line1[x]>>24) < (u8)(back >> 24)) + { + back = line1[x]; + top2 = 0x02; + } + + if((u8)(line2[x]>>24) < (u8)(back >> 24)) + { + back = line2[x]; + top2 = 0x04; + } + + if((u8)(line3[x]>>24) < (u8)(back >> 24)) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } +} + +void mode0RenderLineNoWindow() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + return; + } + + if(layerEnable & 0x0100) + { + gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); + } + + if(layerEnable & 0x0200) + { + gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); + } + + if(layerEnable & 0x0400) + { + gfxDrawTextScreen(BG2CNT, BG2HOFS, BG2VOFS, line2); + } + + if(layerEnable & 0x0800) + { + gfxDrawTextScreen(BG3CNT, BG3HOFS, BG3VOFS, line3); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + int effect = (BLDMOD >> 6) & 3; + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + if(line0[x] < color) + { + color = line0[x]; + top = 0x01; + } + + if(line1[x] < (color & 0xFF000000)) + { + color = line1[x]; + top = 0x02; + } + + if(line2[x] < (color & 0xFF000000)) + { + color = line2[x]; + top = 0x04; + } + + if(line3[x] < (color & 0xFF000000)) + { + color = line3[x]; + top = 0x08; + } + + if(lineOBJ[x] < (color & 0xFF000000)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(!(color & 0x00010000)) + { + switch(effect) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + if(line0[x] < back) + { + if(top != 0x01) + { + back = line0[x]; + top2 = 0x01; + } + } + + if(line1[x] < (back & 0xFF000000)) + { + if(top != 0x02) + { + back = line1[x]; + top2 = 0x02; + } + } + + if(line2[x] < (back & 0xFF000000)) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if(line3[x] < (back & 0xFF000000)) + { + if(top != 0x08) + { + back = line3[x]; + top2 = 0x08; + } + } + + if(lineOBJ[x] < (back & 0xFF000000)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if(line0[x] < back) + { + back = line0[x]; + top2 = 0x01; + } + + if(line1[x] < (back & 0xFF000000)) + { + back = line1[x]; + top2 = 0x02; + } + + if(line2[x] < (back & 0xFF000000)) + { + back = line2[x]; + top2 = 0x04; + } + + if(line3[x] < (back & 0xFF000000)) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } +} + +void mode0RenderLineAll() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + return; + } + + bool inWindow0 = false; + bool inWindow1 = false; + + if(layerEnable & 0x2000) + { + u8 v0 = WIN0V >> 8; + u8 v1 = WIN0V & 255; + inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); + } + if(layerEnable & 0x4000) + { + u8 v0 = WIN1V >> 8; + u8 v1 = WIN1V & 255; + inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); + } + + if((layerEnable & 0x0100)) + { + gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); + } + + if((layerEnable & 0x0200)) + { + gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); + } + + if((layerEnable & 0x0400)) + { + gfxDrawTextScreen(BG2CNT, BG2HOFS, BG2VOFS, line2); + } + + if((layerEnable & 0x0800)) + { + gfxDrawTextScreen(BG3CNT, BG3HOFS, BG3VOFS, line3); + } + + gfxDrawSprites(lineOBJ); + gfxDrawOBJWin(lineOBJWin); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + u8 inWin0Mask = WININ & 0xFF; + u8 inWin1Mask = WININ >> 8; + u8 outMask = WINOUT & 0xFF; + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + u8 mask = outMask; + + if(!(lineOBJWin[x] & 0x80000000)) + { + mask = WINOUT >> 8; + } + + if(inWindow1) + { + if(gfxInWin1[x]) + mask = inWin1Mask; + } + + if(inWindow0) + { + if(gfxInWin0[x]) + { + mask = inWin0Mask; + } + } + + if((mask & 1) && (line0[x] < color)) + { + color = line0[x]; + top = 0x01; + } + + if((mask & 2) && ((u8)(line1[x]>>24) < (u8)(color >> 24))) + { + color = line1[x]; + top = 0x02; + } + + if((mask & 4) && ((u8)(line2[x]>>24) < (u8)(color >> 24))) + { + color = line2[x]; + top = 0x04; + } + + if((mask & 8) && ((u8)(line3[x]>>24) < (u8)(color >> 24))) + { + color = line3[x]; + top = 0x08; + } + + if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >> 24))) + { + color = lineOBJ[x]; + top = 0x10; + } + + // special FX on in the window + if(mask & 32) + { + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + if((mask & 1) && (u8)(line0[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x01) + { + back = line0[x]; + top2 = 0x01; + } + } + + if((mask & 2) && (u8)(line1[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x02) + { + back = line1[x]; + top2 = 0x02; + } + } + + if((mask & 4) && (u8)(line2[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((mask & 8) && (u8)(line3[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x08) + { + back = line3[x]; + top2 = 0x08; + } + } + + if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 1) && ((u8)(line0[x]>>24) < (u8)(back >> 24))) + { + back = line0[x]; + top2 = 0x01; + } + + if((mask & 2) && ((u8)(line1[x]>>24) < (u8)(back >> 24))) + { + back = line1[x]; + top2 = 0x02; + } + + if((mask & 4) && ((u8)(line2[x]>>24) < (u8)(back >> 24))) + { + back = line2[x]; + top2 = 0x04; + } + + if((mask & 8) && ((u8)(line3[x]>>24) < (u8)(back >> 24))) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + } + else if(color & 0x00010000) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 1) && ((u8)(line0[x]>>24) < (u8)(back >> 24))) + { + back = line0[x]; + top2 = 0x01; + } + + if((mask & 2) && ((u8)(line1[x]>>24) < (u8)(back >> 24))) + { + back = line1[x]; + top2 = 0x02; + } + + if((mask & 4) && ((u8)(line2[x]>>24) < (u8)(back >> 24))) + { + back = line2[x]; + top2 = 0x04; + } + + if((mask & 8) && ((u8)(line3[x]>>24) < (u8)(back >> 24))) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } +} diff --git a/source/vba/Mode1.cpp b/source/vba/Mode1.cpp index 9da41fcf..f1ccdbff 100644 --- a/source/vba/Mode1.cpp +++ b/source/vba/Mode1.cpp @@ -1,476 +1,599 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" -#include "Globals.h" -#include "agb/GBAGfx.h" - -void mode1RenderLine() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x0100) { - gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); - } - - if(layerEnable & 0x0200) { - gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, line2); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - if(line0[x] < color) { - color = line0[x]; - top = 0x01; - } - - if((u8)(line1[x]>>24) < (u8)(color >> 24)) { - color = line1[x]; - top = 0x02; - } - - if((u8)(line2[x]>>24) < (u8)(color >> 24)) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if((top & 0x10) && (color & 0x00010000)) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((u8)(line0[x]>>24) < (u8)(back >> 24)) { - back = line0[x]; - top2 = 0x01; - } - - if((u8)(line1[x]>>24) < (u8)(back >> 24)) { - back = line1[x]; - top2 = 0x02; - } - - if((u8)(line2[x]>>24) < (u8)(back >> 24)) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode1RenderLineNoWindow() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x0100) { - gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); - } - - - if(layerEnable & 0x0200) { - gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, line2); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - if(line0[x] < color) { - color = line0[x]; - top = 0x01; - } - - if((u8)(line1[x]>>24) < (u8)(color >> 24)) { - color = line1[x]; - top = 0x02; - } - - if((u8)(line2[x]>>24) < (u8)(color >> 24)) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(!(color & 0x00010000)) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - if((u8)(line0[x]>>24) < (u8)(back >> 24)) { - if(top != 0x01) { - back = line0[x]; - top2 = 0x01; - } - } - - if((u8)(line1[x]>>24) < (u8)(back >> 24)) { - if(top != 0x02) { - back = line1[x]; - top2 = 0x02; - } - } - - if((u8)(line2[x]>>24) < (u8)(back >> 24)) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } else { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((u8)(line0[x]>>24) < (u8)(back >> 24)) { - back = line0[x]; - top2 = 0x01; - } - - if((u8)(line1[x]>>24) < (u8)(back >> 24)) { - back = line1[x]; - top2 = 0x02; - } - - if((u8)(line2[x]>>24) < (u8)(back >> 24)) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode1RenderLineAll() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - bool inWindow0 = false; - bool inWindow1 = false; - - if(layerEnable & 0x2000) { - u8 v0 = WIN0V >> 8; - u8 v1 = WIN0V & 255; - inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); - } - if(layerEnable & 0x4000) { - u8 v0 = WIN1V >> 8; - u8 v1 = WIN1V & 255; - inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); - } - - if(layerEnable & 0x0100) { - gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); - } - - if(layerEnable & 0x0200) { - gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, line2); - } - - gfxDrawSprites(lineOBJ); - gfxDrawOBJWin(lineOBJWin); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - u8 inWin0Mask = WININ & 0xFF; - u8 inWin1Mask = WININ >> 8; - u8 outMask = WINOUT & 0xFF; - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - u8 mask = outMask; - - if(!(lineOBJWin[x] & 0x80000000)) { - mask = WINOUT >> 8; - } - - if(inWindow1) { - if(gfxInWin1[x]) - mask = inWin1Mask; - } - - if(inWindow0) { - if(gfxInWin0[x]) { - mask = inWin0Mask; - } - } - - if(line0[x] < color && (mask & 1)) { - color = line0[x]; - top = 0x01; - } - - if((u8)(line1[x]>>24) < (u8)(color >> 24) && (mask & 2)) { - color = line1[x]; - top = 0x02; - } - - if((u8)(line2[x]>>24) < (u8)(color >> 24) && (mask & 4)) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24) && (mask & 16)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(color & 0x00010000) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((mask & 1) && (u8)(line0[x]>>24) < (u8)(back >> 24)) { - back = line0[x]; - top2 = 0x01; - } - - if((mask & 2) && (u8)(line1[x]>>24) < (u8)(back >> 24)) { - back = line1[x]; - top2 = 0x02; - } - - if((mask & 4) && (u8)(line2[x]>>24) < (u8)(back >> 24)) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } else if(mask & 32) { - // special FX on the window - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - - if((mask & 1) && (u8)(line0[x]>>24) < (u8)(back >> 24)) { - if(top != 0x01) { - back = line0[x]; - top2 = 0x01; - } - } - - if((mask & 2) && (u8)(line1[x]>>24) < (u8)(back >> 24)) { - if(top != 0x02) { - back = line1[x]; - top2 = 0x02; - } - } - - if((mask & 4) && (u8)(line2[x]>>24) < (u8)(back >> 24)) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "Globals.h" +#include "Gfx.h" + +void mode1RenderLine() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x0100) + { + gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); + } + + if(layerEnable & 0x0200) + { + gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, line2); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + if(line0[x] < color) + { + color = line0[x]; + top = 0x01; + } + + if((u8)(line1[x]>>24) < (u8)(color >> 24)) + { + color = line1[x]; + top = 0x02; + } + + if((u8)(line2[x]>>24) < (u8)(color >> 24)) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if((top & 0x10) && (color & 0x00010000)) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((u8)(line0[x]>>24) < (u8)(back >> 24)) + { + back = line0[x]; + top2 = 0x01; + } + + if((u8)(line1[x]>>24) < (u8)(back >> 24)) + { + back = line1[x]; + top2 = 0x02; + } + + if((u8)(line2[x]>>24) < (u8)(back >> 24)) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode1RenderLineNoWindow() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x0100) + { + gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); + } + + + if(layerEnable & 0x0200) + { + gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, line2); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + if(line0[x] < color) + { + color = line0[x]; + top = 0x01; + } + + if((u8)(line1[x]>>24) < (u8)(color >> 24)) + { + color = line1[x]; + top = 0x02; + } + + if((u8)(line2[x]>>24) < (u8)(color >> 24)) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + if((u8)(line0[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x01) + { + back = line0[x]; + top2 = 0x01; + } + } + + if((u8)(line1[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x02) + { + back = line1[x]; + top2 = 0x02; + } + } + + if((u8)(line2[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((u8)(line0[x]>>24) < (u8)(back >> 24)) + { + back = line0[x]; + top2 = 0x01; + } + + if((u8)(line1[x]>>24) < (u8)(back >> 24)) + { + back = line1[x]; + top2 = 0x02; + } + + if((u8)(line2[x]>>24) < (u8)(back >> 24)) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode1RenderLineAll() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + bool inWindow0 = false; + bool inWindow1 = false; + + if(layerEnable & 0x2000) + { + u8 v0 = WIN0V >> 8; + u8 v1 = WIN0V & 255; + inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); + } + if(layerEnable & 0x4000) + { + u8 v0 = WIN1V >> 8; + u8 v1 = WIN1V & 255; + inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); + } + + if(layerEnable & 0x0100) + { + gfxDrawTextScreen(BG0CNT, BG0HOFS, BG0VOFS, line0); + } + + if(layerEnable & 0x0200) + { + gfxDrawTextScreen(BG1CNT, BG1HOFS, BG1VOFS, line1); + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, line2); + } + + gfxDrawSprites(lineOBJ); + gfxDrawOBJWin(lineOBJWin); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + u8 inWin0Mask = WININ & 0xFF; + u8 inWin1Mask = WININ >> 8; + u8 outMask = WINOUT & 0xFF; + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + u8 mask = outMask; + + if(!(lineOBJWin[x] & 0x80000000)) + { + mask = WINOUT >> 8; + } + + if(inWindow1) + { + if(gfxInWin1[x]) + mask = inWin1Mask; + } + + if(inWindow0) + { + if(gfxInWin0[x]) + { + mask = inWin0Mask; + } + } + + if(line0[x] < color && (mask & 1)) + { + color = line0[x]; + top = 0x01; + } + + if((u8)(line1[x]>>24) < (u8)(color >> 24) && (mask & 2)) + { + color = line1[x]; + top = 0x02; + } + + if((u8)(line2[x]>>24) < (u8)(color >> 24) && (mask & 4)) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24) && (mask & 16)) + { + color = lineOBJ[x]; + top = 0x10; + } + + // special FX on the window + if(mask & 32) + { + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + if((mask & 1) && (u8)(line0[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x01) + { + back = line0[x]; + top2 = 0x01; + } + } + + if((mask & 2) && (u8)(line1[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x02) + { + back = line1[x]; + top2 = 0x02; + } + } + + if((mask & 4) && (u8)(line2[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 1) && (u8)(line0[x]>>24) < (u8)(back >> 24)) + { + back = line0[x]; + top2 = 0x01; + } + + if((mask & 2) && (u8)(line1[x]>>24) < (u8)(back >> 24)) + { + back = line1[x]; + top2 = 0x02; + } + + if((mask & 4) && (u8)(line2[x]>>24) < (u8)(back >> 24)) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + } + else if(color & 0x00010000) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 1) && (u8)(line0[x]>>24) < (u8)(back >> 24)) + { + back = line0[x]; + top2 = 0x01; + } + + if((mask & 2) && (u8)(line1[x]>>24) < (u8)(back >> 24)) + { + back = line1[x]; + top2 = 0x02; + } + + if((mask & 4) && (u8)(line2[x]>>24) < (u8)(back >> 24)) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} diff --git a/source/vba/Mode2.cpp b/source/vba/Mode2.cpp index 9b3bb520..e2954cb3 100644 --- a/source/vba/Mode2.cpp +++ b/source/vba/Mode2.cpp @@ -1,446 +1,550 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" -#include "Globals.h" -#include "agb/GBAGfx.h" - -void mode2RenderLine() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, gfxBG2X, gfxBG2Y, - changed, line2); - } - - if(layerEnable & 0x0800) { - int changed = gfxBG3Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen(BG3CNT, BG3X_L, BG3X_H, BG3Y_L, BG3Y_H, - BG3PA, BG3PB, BG3PC, BG3PD, gfxBG3X, gfxBG3Y, - changed, line3); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - - if((u8)(line2[x]>>24) < (u8)(color >> 24)) { - color = line2[x]; - top = 0x04; - } - - if((u8)(line3[x]>>24) < (u8)(color >> 24)) { - color = line3[x]; - top = 0x08; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if((top & 0x10) && (color & 0x00010000)) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((u8)(line2[x]>>24) < (u8)(back >> 24)) { - back = line2[x]; - top2 = 0x04; - } - - if((u8)(line3[x]>>24) < (u8)(back >> 24)) { - back = line3[x]; - top2 = 0x08; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxBG3Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode2RenderLineNoWindow() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, gfxBG2X, gfxBG2Y, - changed, line2); - } - - if(layerEnable & 0x0800) { - int changed = gfxBG3Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen(BG3CNT, BG3X_L, BG3X_H, BG3Y_L, BG3Y_H, - BG3PA, BG3PB, BG3PC, BG3PD, gfxBG3X, gfxBG3Y, - changed, line3); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - - if((u8)(line2[x]>>24) < (u8)(color >> 24)) { - color = line2[x]; - top = 0x04; - } - - if((u8)(line3[x]>>24) < (u8)(color >> 24)) { - color = line3[x]; - top = 0x08; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(!(color & 0x00010000)) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - - if((u8)(line2[x]>>24) < (u8)(back >> 24)) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((u8)(line3[x]>>24) < (u8)(back >> 24)) { - if(top != 0x08) { - back = line3[x]; - top2 = 0x08; - } - } - - if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } else { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((u8)(line2[x]>>24) < (u8)(back >> 24)) { - back = line2[x]; - top2 = 0x04; - } - - if((u8)(line3[x]>>24) < (u8)(back >> 24)) { - back = line3[x]; - top2 = 0x08; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxBG3Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode2RenderLineAll() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - bool inWindow0 = false; - bool inWindow1 = false; - - if(layerEnable & 0x2000) { - u8 v0 = WIN0V >> 8; - u8 v1 = WIN0V & 255; - inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); - } - if(layerEnable & 0x4000) { - u8 v0 = WIN1V >> 8; - u8 v1 = WIN1V & 255; - inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, gfxBG2X, gfxBG2Y, - changed, line2); - } - - if(layerEnable & 0x0800) { - int changed = gfxBG3Changed; - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen(BG3CNT, BG3X_L, BG3X_H, BG3Y_L, BG3Y_H, - BG3PA, BG3PB, BG3PC, BG3PD, gfxBG3X, gfxBG3Y, - changed, line3); - } - - gfxDrawSprites(lineOBJ); - gfxDrawOBJWin(lineOBJWin); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - u8 inWin0Mask = WININ & 0xFF; - u8 inWin1Mask = WININ >> 8; - u8 outMask = WINOUT & 0xFF; - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - u8 mask = outMask; - - if(!(lineOBJWin[x] & 0x80000000)) { - mask = WINOUT >> 8; - } - - if(inWindow1) { - if(gfxInWin1[x]) - mask = inWin1Mask; - } - - if(inWindow0) { - if(gfxInWin0[x]) { - mask = inWin0Mask; - } - } - - if(line2[x] < color && (mask & 4)) { - color = line2[x]; - top = 0x04; - } - - if((u8)(line3[x]>>24) < (u8)(color >> 24) && (mask & 8)) { - color = line3[x]; - top = 0x08; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24) && (mask & 16)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(color & 0x00010000) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if((mask & 8) && (u8)(line3[x]>>24) < (u8)(back >> 24)) { - back = line3[x]; - top2 = 0x08; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } else if(mask & 32) { - // special FX on the window - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((mask & 8) && (u8)(line3[x]>>24) < (u8)(back >> 24)) { - if(top != 0x08) { - back = line3[x]; - top2 = 0x08; - } - } - - if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxBG3Changed = 0; - gfxLastVCOUNT = VCOUNT; -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "Globals.h" +#include "Gfx.h" + +void mode2RenderLine() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, gfxBG2X, gfxBG2Y, + changed, line2); + } + + if(layerEnable & 0x0800) + { + int changed = gfxBG3Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen(BG3CNT, BG3X_L, BG3X_H, BG3Y_L, BG3Y_H, + BG3PA, BG3PB, BG3PC, BG3PD, gfxBG3X, gfxBG3Y, + changed, line3); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + + if((u8)(line2[x]>>24) < (u8)(color >> 24)) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(line3[x]>>24) < (u8)(color >> 24)) + { + color = line3[x]; + top = 0x08; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if((top & 0x10) && (color & 0x00010000)) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((u8)(line2[x]>>24) < (u8)(back >> 24)) + { + back = line2[x]; + top2 = 0x04; + } + + if((u8)(line3[x]>>24) < (u8)(back >> 24)) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxBG3Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode2RenderLineNoWindow() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, gfxBG2X, gfxBG2Y, + changed, line2); + } + + if(layerEnable & 0x0800) + { + int changed = gfxBG3Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen(BG3CNT, BG3X_L, BG3X_H, BG3Y_L, BG3Y_H, + BG3PA, BG3PB, BG3PC, BG3PD, gfxBG3X, gfxBG3Y, + changed, line3); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + + if((u8)(line2[x]>>24) < (u8)(color >> 24)) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(line3[x]>>24) < (u8)(color >> 24)) + { + color = line3[x]; + top = 0x08; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + + if((u8)(line2[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((u8)(line3[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x08) + { + back = line3[x]; + top2 = 0x08; + } + } + + if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((u8)(line2[x]>>24) < (u8)(back >> 24)) + { + back = line2[x]; + top2 = 0x04; + } + + if((u8)(line3[x]>>24) < (u8)(back >> 24)) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxBG3Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode2RenderLineAll() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + bool inWindow0 = false; + bool inWindow1 = false; + + if(layerEnable & 0x2000) + { + u8 v0 = WIN0V >> 8; + u8 v1 = WIN0V & 255; + inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); + } + if(layerEnable & 0x4000) + { + u8 v0 = WIN1V >> 8; + u8 v1 = WIN1V & 255; + inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, gfxBG2X, gfxBG2Y, + changed, line2); + } + + if(layerEnable & 0x0800) + { + int changed = gfxBG3Changed; + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen(BG3CNT, BG3X_L, BG3X_H, BG3Y_L, BG3Y_H, + BG3PA, BG3PB, BG3PC, BG3PD, gfxBG3X, gfxBG3Y, + changed, line3); + } + + gfxDrawSprites(lineOBJ); + gfxDrawOBJWin(lineOBJWin); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + u8 inWin0Mask = WININ & 0xFF; + u8 inWin1Mask = WININ >> 8; + u8 outMask = WINOUT & 0xFF; + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + u8 mask = outMask; + + if(!(lineOBJWin[x] & 0x80000000)) + { + mask = WINOUT >> 8; + } + + if(inWindow1) + { + if(gfxInWin1[x]) + mask = inWin1Mask; + } + + if(inWindow0) + { + if(gfxInWin0[x]) + { + mask = inWin0Mask; + } + } + + if(line2[x] < color && (mask & 4)) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(line3[x]>>24) < (u8)(color >> 24) && (mask & 8)) + { + color = line3[x]; + top = 0x08; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24) && (mask & 16)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(mask & 32) + { + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((mask & 8) && (u8)(line3[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x08) + { + back = line3[x]; + top2 = 0x08; + } + } + + if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if((mask & 8) && (u8)(line3[x]>>24) < (u8)(back >> 24)) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + } + else if(color & 0x00010000) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if((mask & 8) && (u8)(line3[x]>>24) < (u8)(back >> 24)) + { + back = line3[x]; + top2 = 0x08; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxBG3Changed = 0; + gfxLastVCOUNT = VCOUNT; +} diff --git a/source/vba/Mode3.cpp b/source/vba/Mode3.cpp index 74766c66..8a61021a 100644 --- a/source/vba/Mode3.cpp +++ b/source/vba/Mode3.cpp @@ -1,377 +1,463 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" -#include "Globals.h" -#include "agb/GBAGfx.h" - -void mode3RenderLine() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen16Bit(BG2CNT, BG2X_L, BG2X_H, - BG2Y_L, BG2Y_H, BG2PA, BG2PB, - BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - - u32 background = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = background; - u8 top = 0x20; - - if(line2[x] < color) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if((top & 0x10) && (color & 0x00010000)) { - // semi-transparent OBJ - u32 back = background; - u8 top2 = 0x20; - - if(line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode3RenderLineNoWindow() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen16Bit(BG2CNT, BG2X_L, BG2X_H, - BG2Y_L, BG2Y_H, BG2PA, BG2PB, - BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - - u32 background = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = background; - u8 top = 0x20; - - if(line2[x] < color) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(!(color & 0x00010000)) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = background; - u8 top2 = 0x20; - - if(line2[x] < back) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } else { - // semi-transparent OBJ - u32 back = background; - u8 top2 = 0x20; - - if(line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode3RenderLineAll() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x80) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - bool inWindow0 = false; - bool inWindow1 = false; - - if(layerEnable & 0x2000) { - u8 v0 = WIN0V >> 8; - u8 v1 = WIN0V & 255; - inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); - } - if(layerEnable & 0x4000) { - u8 v0 = WIN1V >> 8; - u8 v1 = WIN1V & 255; - inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); - } - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen16Bit(BG2CNT, BG2X_L, BG2X_H, - BG2Y_L, BG2Y_H, BG2PA, BG2PB, - BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - gfxDrawOBJWin(lineOBJWin); - - u8 inWin0Mask = WININ & 0xFF; - u8 inWin1Mask = WININ >> 8; - u8 outMask = WINOUT & 0xFF; - - u32 background = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = background; - u8 top = 0x20; - u8 mask = outMask; - - if(!(lineOBJWin[x] & 0x80000000)) { - mask = WINOUT >> 8; - } - - if(inWindow1) { - if(gfxInWin1[x]) - mask = inWin1Mask; - } - - if(inWindow0) { - if(gfxInWin0[x]) { - mask = inWin0Mask; - } - } - - if((mask & 4) && (line2[x] < color)) { - color = line2[x]; - top = 0x04; - } - - if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >>24))) { - color = lineOBJ[x]; - top = 0x10; - } - - if(color & 0x00010000) { - // semi-transparent OBJ - u32 back = background; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } else if(mask & 32) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = background; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "Globals.h" +#include "Gfx.h" + +void mode3RenderLine() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen16Bit(BG2CNT, BG2X_L, BG2X_H, + BG2Y_L, BG2Y_H, BG2PA, BG2PB, + BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + + u32 background = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = background; + u8 top = 0x20; + + if(line2[x] < color) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if((top & 0x10) && (color & 0x00010000)) + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if(line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode3RenderLineNoWindow() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen16Bit(BG2CNT, BG2X_L, BG2X_H, + BG2Y_L, BG2Y_H, BG2PA, BG2PB, + BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + + u32 background = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = background; + u8 top = 0x20; + + if(line2[x] < color) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = background; + u8 top2 = 0x20; + + if(line2[x] < back) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if(line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode3RenderLineAll() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x80) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + bool inWindow0 = false; + bool inWindow1 = false; + + if(layerEnable & 0x2000) + { + u8 v0 = WIN0V >> 8; + u8 v1 = WIN0V & 255; + inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); + } + if(layerEnable & 0x4000) + { + u8 v0 = WIN1V >> 8; + u8 v1 = WIN1V & 255; + inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); + } + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen16Bit(BG2CNT, BG2X_L, BG2X_H, + BG2Y_L, BG2Y_H, BG2PA, BG2PB, + BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + gfxDrawOBJWin(lineOBJWin); + + u8 inWin0Mask = WININ & 0xFF; + u8 inWin1Mask = WININ >> 8; + u8 outMask = WINOUT & 0xFF; + + u32 background = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = background; + u8 top = 0x20; + u8 mask = outMask; + + if(!(lineOBJWin[x] & 0x80000000)) + { + mask = WINOUT >> 8; + } + + if(inWindow1) + { + if(gfxInWin1[x]) + mask = inWin1Mask; + } + + if(inWindow0) + { + if(gfxInWin0[x]) + { + mask = inWin0Mask; + } + } + + if((mask & 4) && (line2[x] < color)) + { + color = line2[x]; + top = 0x04; + } + + if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >>24))) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(mask & 32) + { + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = background; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + } + else if(color & 0x00010000) + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} diff --git a/source/vba/Mode4.cpp b/source/vba/Mode4.cpp index 957592cc..a4511729 100644 --- a/source/vba/Mode4.cpp +++ b/source/vba/Mode4.cpp @@ -1,374 +1,460 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" -#include "agb/GBAGfx.h" -#include "Globals.h" - -void mode4RenderLine() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x0080) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen256(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - if(line2[x] < color) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if((top & 0x10) && (color & 0x00010000)) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if(line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode4RenderLineNoWindow() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x0080) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - if(layerEnable & 0x400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen256(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - - if(line2[x] < color) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(!(color & 0x00010000)) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - - if(line2[x] < back) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } else { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if(line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode4RenderLineAll() -{ - u16 *palette = (u16 *)paletteRAM; - - if(DISPCNT & 0x0080) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - bool inWindow0 = false; - bool inWindow1 = false; - - if(layerEnable & 0x2000) { - u8 v0 = WIN0V >> 8; - u8 v1 = WIN0V & 255; - inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); - } - if(layerEnable & 0x4000) { - u8 v0 = WIN1V >> 8; - u8 v1 = WIN1V & 255; - inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); - } - - if(layerEnable & 0x400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen256(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, - BG2PA, BG2PB, BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - gfxDrawOBJWin(lineOBJWin); - - u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); - - u8 inWin0Mask = WININ & 0xFF; - u8 inWin1Mask = WININ >> 8; - u8 outMask = WINOUT & 0xFF; - - for(int x = 0; x < 240; x++) { - u32 color = backdrop; - u8 top = 0x20; - u8 mask = outMask; - - if(!(lineOBJWin[x] & 0x80000000)) { - mask = WINOUT >> 8; - } - - if(inWindow1) { - if(gfxInWin1[x]) - mask = inWin1Mask; - } - - if(inWindow0) { - if(gfxInWin0[x]) { - mask = inWin0Mask; - } - } - - if((mask & 4) && (line2[x] < color)) { - color = line2[x]; - top = 0x04; - } - - if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >>24))) { - color = lineOBJ[x]; - top = 0x10; - } - - if(color & 0x00010000) { - // semi-transparent OBJ - u32 back = backdrop; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } else if(mask & 32) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = backdrop; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "Gfx.h" +#include "Globals.h" + +void mode4RenderLine() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x0080) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen256(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + if(line2[x] < color) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if((top & 0x10) && (color & 0x00010000)) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if(line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode4RenderLineNoWindow() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x0080) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + if(layerEnable & 0x400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen256(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + + if(line2[x] < color) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >> 24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + + if(line2[x] < back) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if(line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode4RenderLineAll() +{ + u16 *palette = (u16 *)paletteRAM; + + if(DISPCNT & 0x0080) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + bool inWindow0 = false; + bool inWindow1 = false; + + if(layerEnable & 0x2000) + { + u8 v0 = WIN0V >> 8; + u8 v1 = WIN0V & 255; + inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); + } + if(layerEnable & 0x4000) + { + u8 v0 = WIN1V >> 8; + u8 v1 = WIN1V & 255; + inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); + } + + if(layerEnable & 0x400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen256(BG2CNT, BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, + BG2PA, BG2PB, BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + gfxDrawOBJWin(lineOBJWin); + + u32 backdrop = (READ16LE(&palette[0]) | 0x30000000); + + u8 inWin0Mask = WININ & 0xFF; + u8 inWin1Mask = WININ >> 8; + u8 outMask = WINOUT & 0xFF; + + for(int x = 0; x < 240; x++) + { + u32 color = backdrop; + u8 top = 0x20; + u8 mask = outMask; + + if(!(lineOBJWin[x] & 0x80000000)) + { + mask = WINOUT >> 8; + } + + if(inWindow1) + { + if(gfxInWin1[x]) + mask = inWin1Mask; + } + + if(inWindow0) + { + if(gfxInWin0[x]) + { + mask = inWin0Mask; + } + } + + if((mask & 4) && (line2[x] < color)) + { + color = line2[x]; + top = 0x04; + } + + if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >>24))) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(mask & 32) + { + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + } + else if(color & 0x00010000) + { + // semi-transparent OBJ + u32 back = backdrop; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} diff --git a/source/vba/Mode5.cpp b/source/vba/Mode5.cpp index 2b996618..83c43907 100644 --- a/source/vba/Mode5.cpp +++ b/source/vba/Mode5.cpp @@ -1,377 +1,463 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" -#include "Globals.h" -#include "agb/GBAGfx.h" - -void mode5RenderLine() -{ - if(DISPCNT & 0x0080) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - u16 *palette = (u16 *)paletteRAM; - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen16Bit160(BG2CNT, BG2X_L, BG2X_H, - BG2Y_L, BG2Y_H, BG2PA, BG2PB, - BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - - u32 background = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = background; - u8 top = 0x20; - - if(line2[x] < color) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if((top & 0x10) && (color & 0x00010000)) { - // semi-transparent OBJ - u32 back = background; - u8 top2 = 0x20; - - if(line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode5RenderLineNoWindow() -{ - if(DISPCNT & 0x0080) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - u16 *palette = (u16 *)paletteRAM; - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen16Bit160(BG2CNT, BG2X_L, BG2X_H, - BG2Y_L, BG2Y_H, BG2PA, BG2PB, - BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - - u32 background = ( READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = background; - u8 top = 0x20; - - if(line2[x] < color) { - color = line2[x]; - top = 0x04; - } - - if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) { - color = lineOBJ[x]; - top = 0x10; - } - - if(!(color & 0x00010000)) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = background; - u8 top2 = 0x20; - - if(line2[x] < back) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } else { - // semi-transparent OBJ - u32 back = background; - u8 top2 = 0x20; - - if(line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} - -void mode5RenderLineAll() -{ - if(DISPCNT & 0x0080) { - for(int x = 0; x < 240; x++) { - lineMix[x] = 0x7fff; - } - gfxLastVCOUNT = VCOUNT; - return; - } - - u16 *palette = (u16 *)paletteRAM; - - if(layerEnable & 0x0400) { - int changed = gfxBG2Changed; - - if(gfxLastVCOUNT > VCOUNT) - changed = 3; - - gfxDrawRotScreen16Bit160(BG2CNT, BG2X_L, BG2X_H, - BG2Y_L, BG2Y_H, BG2PA, BG2PB, - BG2PC, BG2PD, - gfxBG2X, gfxBG2Y, changed, - line2); - } - - gfxDrawSprites(lineOBJ); - gfxDrawOBJWin(lineOBJWin); - - bool inWindow0 = false; - bool inWindow1 = false; - - if(layerEnable & 0x2000) { - u8 v0 = WIN0V >> 8; - u8 v1 = WIN0V & 255; - inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); - } - if(layerEnable & 0x4000) { - u8 v0 = WIN1V >> 8; - u8 v1 = WIN1V & 255; - inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); - if(v1 >= v0) - inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); - else - inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); - } - - u8 inWin0Mask = WININ & 0xFF; - u8 inWin1Mask = WININ >> 8; - u8 outMask = WINOUT & 0xFF; - - u32 background = (READ16LE(&palette[0]) | 0x30000000); - - for(int x = 0; x < 240; x++) { - u32 color = background; - u8 top = 0x20; - u8 mask = outMask; - - if(!(lineOBJWin[x] & 0x80000000)) { - mask = WINOUT >> 8; - } - - if(inWindow1) { - if(gfxInWin1[x]) - mask = inWin1Mask; - } - - if(inWindow0) { - if(gfxInWin0[x]) { - mask = inWin0Mask; - } - } - - if((mask & 4) && (line2[x] < color)) { - color = line2[x]; - top = 0x04; - } - - if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >>24))) { - color = lineOBJ[x]; - top = 0x10; - } - - if(color & 0x00010000) { - // semi-transparent OBJ - u32 back = background; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - back = line2[x]; - top2 = 0x04; - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - else { - switch((BLDMOD >> 6) & 3) { - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - } else if(mask & 32) { - switch((BLDMOD >> 6) & 3) { - case 0: - break; - case 1: - { - if(top & BLDMOD) { - u32 back = background; - u8 top2 = 0x20; - - if((mask & 4) && line2[x] < back) { - if(top != 0x04) { - back = line2[x]; - top2 = 0x04; - } - } - - if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) { - if(top != 0x10) { - back = lineOBJ[x]; - top2 = 0x10; - } - } - - if(top2 & (BLDMOD>>8)) - color = gfxAlphaBlend(color, back, - coeff[COLEV & 0x1F], - coeff[(COLEV >> 8) & 0x1F]); - - } - } - break; - case 2: - if(BLDMOD & top) - color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); - break; - case 3: - if(BLDMOD & top) - color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); - break; - } - } - - lineMix[x] = color; - } - gfxBG2Changed = 0; - gfxLastVCOUNT = VCOUNT; -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "Globals.h" +#include "Gfx.h" + +void mode5RenderLine() +{ + if(DISPCNT & 0x0080) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + u16 *palette = (u16 *)paletteRAM; + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen16Bit160(BG2CNT, BG2X_L, BG2X_H, + BG2Y_L, BG2Y_H, BG2PA, BG2PB, + BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + + u32 background = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = background; + u8 top = 0x20; + + if(line2[x] < color) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if((top & 0x10) && (color & 0x00010000)) + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if(line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode5RenderLineNoWindow() +{ + if(DISPCNT & 0x0080) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + u16 *palette = (u16 *)paletteRAM; + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen16Bit160(BG2CNT, BG2X_L, BG2X_H, + BG2Y_L, BG2Y_H, BG2PA, BG2PB, + BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + + u32 background = ( READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = background; + u8 top = 0x20; + + if(line2[x] < color) + { + color = line2[x]; + top = 0x04; + } + + if((u8)(lineOBJ[x]>>24) < (u8)(color >>24)) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = background; + u8 top2 = 0x20; + + if(line2[x] < back) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if(line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} + +void mode5RenderLineAll() +{ + if(DISPCNT & 0x0080) + { + for(int x = 0; x < 240; x++) + { + lineMix[x] = 0x7fff; + } + gfxLastVCOUNT = VCOUNT; + return; + } + + u16 *palette = (u16 *)paletteRAM; + + if(layerEnable & 0x0400) + { + int changed = gfxBG2Changed; + + if(gfxLastVCOUNT > VCOUNT) + changed = 3; + + gfxDrawRotScreen16Bit160(BG2CNT, BG2X_L, BG2X_H, + BG2Y_L, BG2Y_H, BG2PA, BG2PB, + BG2PC, BG2PD, + gfxBG2X, gfxBG2Y, changed, + line2); + } + + gfxDrawSprites(lineOBJ); + gfxDrawOBJWin(lineOBJWin); + + bool inWindow0 = false; + bool inWindow1 = false; + + if(layerEnable & 0x2000) + { + u8 v0 = WIN0V >> 8; + u8 v1 = WIN0V & 255; + inWindow0 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow0 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow0 |= (VCOUNT >= v0 || VCOUNT < v1); + } + if(layerEnable & 0x4000) + { + u8 v0 = WIN1V >> 8; + u8 v1 = WIN1V & 255; + inWindow1 = ((v0 == v1) && (v0 >= 0xe8)); + if(v1 >= v0) + inWindow1 |= (VCOUNT >= v0 && VCOUNT < v1); + else + inWindow1 |= (VCOUNT >= v0 || VCOUNT < v1); + } + + u8 inWin0Mask = WININ & 0xFF; + u8 inWin1Mask = WININ >> 8; + u8 outMask = WINOUT & 0xFF; + + u32 background = (READ16LE(&palette[0]) | 0x30000000); + + for(int x = 0; x < 240; x++) + { + u32 color = background; + u8 top = 0x20; + u8 mask = outMask; + + if(!(lineOBJWin[x] & 0x80000000)) + { + mask = WINOUT >> 8; + } + + if(inWindow1) + { + if(gfxInWin1[x]) + mask = inWin1Mask; + } + + if(inWindow0) + { + if(gfxInWin0[x]) + { + mask = inWin0Mask; + } + } + + if((mask & 4) && (line2[x] < color)) + { + color = line2[x]; + top = 0x04; + } + + if((mask & 16) && ((u8)(lineOBJ[x]>>24) < (u8)(color >>24))) + { + color = lineOBJ[x]; + top = 0x10; + } + + if(mask & 32) + { + if(!(color & 0x00010000)) + { + switch((BLDMOD >> 6) & 3) + { + case 0: + break; + case 1: + { + if(top & BLDMOD) + { + u32 back = background; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + if(top != 0x04) + { + back = line2[x]; + top2 = 0x04; + } + } + + if((mask & 16) && (u8)(lineOBJ[x]>>24) < (u8)(back >> 24)) + { + if(top != 0x10) + { + back = lineOBJ[x]; + top2 = 0x10; + } + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + + } + } + break; + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + else + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + } + else if(color & 0x00010000) + { + // semi-transparent OBJ + u32 back = background; + u8 top2 = 0x20; + + if((mask & 4) && line2[x] < back) + { + back = line2[x]; + top2 = 0x04; + } + + if(top2 & (BLDMOD>>8)) + color = gfxAlphaBlend(color, back, + coeff[COLEV & 0x1F], + coeff[(COLEV >> 8) & 0x1F]); + else + { + switch((BLDMOD >> 6) & 3) + { + case 2: + if(BLDMOD & top) + color = gfxIncreaseBrightness(color, coeff[COLY & 0x1F]); + break; + case 3: + if(BLDMOD & top) + color = gfxDecreaseBrightness(color, coeff[COLY & 0x1F]); + break; + } + } + } + + lineMix[x] = color; + } + gfxBG2Changed = 0; + gfxLastVCOUNT = VCOUNT; +} diff --git a/source/vba/NLS.h b/source/vba/NLS.h index 44b7ff0b..ca024def 100644 --- a/source/vba/NLS.h +++ b/source/vba/NLS.h @@ -1,64 +1,62 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#define N_(String) (String) - -#define MSG_UNSUPPORTED_VBA_SGM 1 -#define MSG_CANNOT_LOAD_SGM 2 -#define MSG_SAVE_GAME_NOT_USING_BIOS 3 -#define MSG_SAVE_GAME_USING_BIOS 4 -#define MSG_UNSUPPORTED_SAVE_TYPE 5 -#define MSG_CANNOT_OPEN_FILE 6 -#define MSG_BAD_ZIP_FILE 7 -#define MSG_NO_IMAGE_ON_ZIP 8 -#define MSG_ERROR_OPENING_IMAGE 9 -#define MSG_ERROR_READING_IMAGE 10 -#define MSG_UNSUPPORTED_BIOS_FUNCTION 11 -#define MSG_INVALID_BIOS_FILE_SIZE 12 -#define MSG_INVALID_CHEAT_CODE 13 -#define MSG_UNKNOWN_ARM_OPCODE 14 -#define MSG_UNKNOWN_THUMB_OPCODE 15 -#define MSG_ERROR_CREATING_FILE 16 -#define MSG_FAILED_TO_READ_SGM 17 -#define MSG_FAILED_TO_READ_RTC 18 -#define MSG_UNSUPPORTED_VB_SGM 19 -#define MSG_CANNOT_LOAD_SGM_FOR 20 -#define MSG_ERROR_OPENING_IMAGE_FROM 21 -#define MSG_ERROR_READING_IMAGE_FROM 22 -#define MSG_UNSUPPORTED_ROM_SIZE 23 -#define MSG_UNSUPPORTED_RAM_SIZE 24 -#define MSG_UNKNOWN_CARTRIDGE_TYPE 25 -#define MSG_MAXIMUM_NUMBER_OF_CHEATS 26 -#define MSG_INVALID_GAMESHARK_CODE 27 -#define MSG_INVALID_GAMEGENIE_CODE 28 -#define MSG_INVALID_CHEAT_TO_REMOVE 29 -#define MSG_INVALID_CHEAT_CODE_ADDRESS 30 -#define MSG_UNSUPPORTED_CHEAT_LIST_VERSION 31 -#define MSG_UNSUPPORTED_CHEAT_LIST_TYPE 32 -#define MSG_INVALID_GSA_CODE 33 -#define MSG_CANNOT_IMPORT_SNAPSHOT_FOR 34 -#define MSG_UNSUPPORTED_SNAPSHOT_FILE 35 -#define MSG_UNSUPPORTED_ARM_MODE 36 -#define MSG_UNSUPPORTED_CODE_FILE 37 -#define MSG_GBA_CODE_WARNING 38 -#define MSG_INVALID_CBA_CODE 39 -#define MSG_CBA_CODE_WARNING 40 -#define MSG_OUT_OF_MEMORY 41 -#define MSG_WRONG_GAMESHARK_CODE 42 -#define MSG_UNSUPPORTED_GAMESHARK_CODE 43 +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#define N_(String) (String) + +#define MSG_UNSUPPORTED_VBA_SGM 1 +#define MSG_CANNOT_LOAD_SGM 2 +#define MSG_SAVE_GAME_NOT_USING_BIOS 3 +#define MSG_SAVE_GAME_USING_BIOS 4 +#define MSG_UNSUPPORTED_SAVE_TYPE 5 +#define MSG_CANNOT_OPEN_FILE 6 +#define MSG_BAD_ZIP_FILE 7 +#define MSG_NO_IMAGE_ON_ZIP 8 +#define MSG_ERROR_OPENING_IMAGE 9 +#define MSG_ERROR_READING_IMAGE 10 +#define MSG_UNSUPPORTED_BIOS_FUNCTION 11 +#define MSG_INVALID_BIOS_FILE_SIZE 12 +#define MSG_INVALID_CHEAT_CODE 13 +#define MSG_UNKNOWN_ARM_OPCODE 14 +#define MSG_UNKNOWN_THUMB_OPCODE 15 +#define MSG_ERROR_CREATING_FILE 16 +#define MSG_FAILED_TO_READ_SGM 17 +#define MSG_FAILED_TO_READ_RTC 18 +#define MSG_UNSUPPORTED_VB_SGM 19 +#define MSG_CANNOT_LOAD_SGM_FOR 20 +#define MSG_ERROR_OPENING_IMAGE_FROM 21 +#define MSG_ERROR_READING_IMAGE_FROM 22 +#define MSG_UNSUPPORTED_ROM_SIZE 23 +#define MSG_UNSUPPORTED_RAM_SIZE 24 +#define MSG_UNKNOWN_CARTRIDGE_TYPE 25 +#define MSG_MAXIMUM_NUMBER_OF_CHEATS 26 +#define MSG_INVALID_GAMESHARK_CODE 27 +#define MSG_INVALID_GAMEGENIE_CODE 28 +#define MSG_INVALID_CHEAT_TO_REMOVE 29 +#define MSG_INVALID_CHEAT_CODE_ADDRESS 30 +#define MSG_UNSUPPORTED_CHEAT_LIST_VERSION 31 +#define MSG_UNSUPPORTED_CHEAT_LIST_TYPE 32 +#define MSG_INVALID_GSA_CODE 33 +#define MSG_CANNOT_IMPORT_SNAPSHOT_FOR 34 +#define MSG_UNSUPPORTED_SNAPSHOT_FILE 35 +#define MSG_UNSUPPORTED_ARM_MODE 36 +#define MSG_UNSUPPORTED_CODE_FILE 37 +#define MSG_GBA_CODE_WARNING 38 +#define MSG_INVALID_CBA_CODE 39 +#define MSG_CBA_CODE_WARNING 40 +#define MSG_OUT_OF_MEMORY 41 diff --git a/source/vba/Port.h b/source/vba/Port.h index db76d558..b5c2cc4f 100644 --- a/source/vba/Port.h +++ b/source/vba/Port.h @@ -1,75 +1,77 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_PORT_H -#define VBA_PORT_H - -// swaps a 16-bit value -static inline u16 swap16(u16 v) -{ - return (v<<8)|(v>>8); -} - -// swaps a 32-bit value -static inline u32 swap32(u32 v) -{ - return (v<<24)|((v<<8)&0xff0000)|((v>>8)&0xff00)|(v>>24); -} - -#ifdef WORDS_BIGENDIAN -#if defined(__GNUC__) && defined(__ppc__) - -#define READ16LE(base) \ - ({ unsigned short lhbrxResult; \ - __asm__ ("lhbrx %0, 0, %1" : "=r" (lhbrxResult) : "r" (base) : "memory"); \ - lhbrxResult; }) - -#define READ32LE(base) \ - ({ unsigned long lwbrxResult; \ - __asm__ ("lwbrx %0, 0, %1" : "=r" (lwbrxResult) : "r" (base) : "memory"); \ - lwbrxResult; }) - -#define WRITE16LE(base, value) \ - __asm__ ("sthbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory") - -#define WRITE32LE(base, value) \ - __asm__ ("stwbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory") - -#else -#define READ16LE(x) \ - swap16(*((u16 *)(x))) -#define READ32LE(x) \ - swap32(*((u32 *)(x))) -#define WRITE16LE(x,v) \ - *((u16 *)x) = swap16((v)) -#define WRITE32LE(x,v) \ - *((u32 *)x) = swap32((v)) -#endif -#else -#define READ16LE(x) \ - *((u16 *)x) -#define READ32LE(x) \ - *((u32 *)x) -#define WRITE16LE(x,v) \ - *((u16 *)x) = (v) -#define WRITE32LE(x,v) \ - *((u32 *)x) = (v) -#endif - -#endif +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_PORT_H +#define VBA_PORT_H + +// swaps a 16-bit value +static inline u16 swap16(u16 v) +{ + return (v<<8)|(v>>8); +} + +// swaps a 32-bit value +static inline u32 swap32(u32 v) +{ + return (v<<24)|((v<<8)&0xff0000)|((v>>8)&0xff00)|(v>>24); +} + +#ifdef WORDS_BIGENDIAN +#define __ppc__ + +#if defined(__GNUC__) && defined(__ppc__) + +#define READ16LE(base) \ + ({ unsigned short lhbrxResult; \ + __asm__ ("lhbrx %0, 0, %1" : "=r" (lhbrxResult) : "r" (base) : "memory"); \ + lhbrxResult; }) + +#define READ32LE(base) \ + ({ unsigned long lwbrxResult; \ + __asm__ ("lwbrx %0, 0, %1" : "=r" (lwbrxResult) : "r" (base) : "memory"); \ + lwbrxResult; }) + +#define WRITE16LE(base, value) \ + __asm__ ("sthbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory") + +#define WRITE32LE(base, value) \ + __asm__ ("stwbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory") + +#else +#define READ16LE(x) \ + swap16(*((u16 *)(x))) +#define READ32LE(x) \ + swap32(*((u32 *)(x))) +#define WRITE16LE(x,v) \ + *((u16 *)x) = swap16((v)) +#define WRITE32LE(x,v) \ + *((u32 *)x) = swap32((v)) +#endif +#else +#define READ16LE(x) \ + *((u16 *)x) +#define READ32LE(x) \ + *((u32 *)x) +#define WRITE16LE(x,v) \ + *((u16 *)x) = (v) +#define WRITE32LE(x,v) \ + *((u32 *)x) = (v) +#endif + +#endif diff --git a/source/vba/RTC.cpp b/source/vba/RTC.cpp index 93d139a5..6b76558f 100644 --- a/source/vba/RTC.cpp +++ b/source/vba/RTC.cpp @@ -1,230 +1,245 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "System.h" -#include "agb/GBA.h" -#include "Globals.h" -#include "Port.h" -#include "Util.h" -#include "NLS.h" -#include "vmmem.h" - -#include -#include - -enum RTCSTATE { IDLE, COMMAND, DATA, READDATA }; - -typedef struct { - u8 byte0; - u8 byte1; - u8 byte2; - u8 command; - int dataLen; - int bits; - RTCSTATE state; - u8 data[12]; - // reserved variables for future - u8 reserved[12]; - bool reserved2; - u32 reserved3; -} RTCCLOCKDATA; - -static RTCCLOCKDATA rtcClockData; -static bool rtcEnabled = false; - -void rtcEnable(bool e) -{ - rtcEnabled = e; -} - -bool rtcIsEnabled() -{ - return rtcEnabled; -} - -u16 rtcRead(u32 address) -{ - if(rtcEnabled) { - switch(address){ - case 0x80000c8: - return rtcClockData.byte2; - break; - case 0x80000c6: - return rtcClockData.byte1; - break; - case 0x80000c4: - return rtcClockData.byte0; - break; - } - } -#ifdef USE_VM - return VMRead16( address & 0x1FFFFFE ); -#else - return READ16LE((&rom[address & 0x1FFFFFE])); -#endif -} - -static u8 toBCD(u8 value) -{ - value = value % 100; - int l = value % 10; - int h = value / 10; - return h * 16 + l; -} - -bool rtcWrite(u32 address, u16 value) -{ - if(!rtcEnabled) - return false; - - if(address == 0x80000c8) { - rtcClockData.byte2 = (u8)value; // enable ? - } else if(address == 0x80000c6) { - rtcClockData.byte1 = (u8)value; // read/write - } else if(address == 0x80000c4) { - if(rtcClockData.byte2 & 1) { - if(rtcClockData.state == IDLE && rtcClockData.byte0 == 1 && value == 5) { - rtcClockData.state = COMMAND; - rtcClockData.bits = 0; - rtcClockData.command = 0; - } else if(!(rtcClockData.byte0 & 1) && (value & 1)) { // bit transfer - rtcClockData.byte0 = (u8)value; - switch(rtcClockData.state) { - case COMMAND: - rtcClockData.command |= ((value & 2) >> 1) << (7-rtcClockData.bits); - rtcClockData.bits++; - if(rtcClockData.bits == 8) { - rtcClockData.bits = 0; - switch(rtcClockData.command) { - case 0x60: - // not sure what this command does but it doesn't take parameters - // maybe it is a reset or stop - rtcClockData.state = IDLE; - rtcClockData.bits = 0; - break; - case 0x62: - // this sets the control state but not sure what those values are - rtcClockData.state = READDATA; - rtcClockData.dataLen = 1; - break; - case 0x63: - rtcClockData.dataLen = 1; - rtcClockData.data[0] = 0x40; - rtcClockData.state = DATA; - break; - case 0x64: - break; - case 0x65: - { - struct tm *newtime; - time_t long_time; - - time( &long_time ); /* Get time as long integer. */ - newtime = localtime( &long_time ); /* Convert to local time. */ - - rtcClockData.dataLen = 7; - rtcClockData.data[0] = toBCD(newtime->tm_year); - rtcClockData.data[1] = toBCD(newtime->tm_mon+1); - rtcClockData.data[2] = toBCD(newtime->tm_mday); - rtcClockData.data[3] = toBCD(newtime->tm_wday); - rtcClockData.data[4] = toBCD(newtime->tm_hour); - rtcClockData.data[5] = toBCD(newtime->tm_min); - rtcClockData.data[6] = toBCD(newtime->tm_sec); - rtcClockData.state = DATA; - } - break; - case 0x67: - { - struct tm *newtime; - time_t long_time; - - time( &long_time ); /* Get time as long integer. */ - newtime = localtime( &long_time ); /* Convert to local time. */ - - rtcClockData.dataLen = 3; - rtcClockData.data[0] = toBCD(newtime->tm_hour); - rtcClockData.data[1] = toBCD(newtime->tm_min); - rtcClockData.data[2] = toBCD(newtime->tm_sec); - rtcClockData.state = DATA; - } - break; - default: - systemMessage(0, N_("Unknown RTC command %02x"), rtcClockData.command); - rtcClockData.state = IDLE; - break; - } - } - break; - case DATA: - if(rtcClockData.byte1 & 2) { - } else { - rtcClockData.byte0 = (rtcClockData.byte0 & ~2) | - ((rtcClockData.data[rtcClockData.bits >> 3] >> - (rtcClockData.bits & 7)) & 1)*2; - rtcClockData.bits++; - if(rtcClockData.bits == 8*rtcClockData.dataLen) { - rtcClockData.bits = 0; - rtcClockData.state = IDLE; - } - } - break; - case READDATA: - if(!(rtcClockData.byte1 & 2)) { - } else { - rtcClockData.data[rtcClockData.bits >> 3] = - (rtcClockData.data[rtcClockData.bits >> 3] >> 1) | - ((value << 6) & 128); - rtcClockData.bits++; - if(rtcClockData.bits == 8*rtcClockData.dataLen) { - rtcClockData.bits = 0; - rtcClockData.state = IDLE; - } - } - break; - default: - break; - } - } else - rtcClockData.byte0 = (u8)value; - } - } - return true; -} - -void rtcReset() -{ - memset(&rtcClockData, 0, sizeof(rtcClockData)); - - rtcClockData.byte0 = 0; - rtcClockData.byte1 = 0; - rtcClockData.byte2 = 0; - rtcClockData.command = 0; - rtcClockData.dataLen = 0; - rtcClockData.bits = 0; - rtcClockData.state = IDLE; -} - -void rtcSaveGame(gzFile gzFile) -{ - utilGzWrite(gzFile, &rtcClockData, sizeof(rtcClockData)); -} - -void rtcReadGame(gzFile gzFile) -{ - utilGzRead(gzFile, &rtcClockData, sizeof(rtcClockData)); -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "System.h" +#include "GBA.h" +#include "Globals.h" +#include "Port.h" +#include "Util.h" +#include "NLS.h" +#include "vmmem.h" + +#include +#include + +enum RTCSTATE { IDLE, COMMAND, DATA, READDATA }; + +typedef struct + { + u8 byte0; + u8 byte1; + u8 byte2; + u8 command; + int dataLen; + int bits; + RTCSTATE state; + u8 data[12]; + // reserved variables for future + u8 reserved[12]; + bool reserved2; + u32 reserved3; + } +RTCCLOCKDATA; + +static RTCCLOCKDATA rtcClockData; +static bool rtcEnabled = false; + +void rtcEnable(bool e) +{ + rtcEnabled = e; +} + +bool rtcIsEnabled() +{ + return rtcEnabled; +} + +u16 rtcRead(u32 address) +{ + if(rtcEnabled) + { + if(address == 0x80000c8) + return rtcClockData.byte2; + else if(address == 0x80000c6) + return rtcClockData.byte1; + else if(address == 0x80000c4) + { + return rtcClockData.byte0; + } + } + + //return READ16LE((&rom[address & 0x1FFFFFE])); + return VMRead16( address & 0x1FFFFFE ); +} + +static u8 toBCD(u8 value) +{ + value = value % 100; + int l = value % 10; + int h = value / 10; + return h * 16 + l; +} + +bool rtcWrite(u32 address, u16 value) +{ + if(!rtcEnabled) + return false; + + if(address == 0x80000c8) + { + rtcClockData.byte2 = (u8)value; // enable ? + } + else if(address == 0x80000c6) + { + rtcClockData.byte1 = (u8)value; // read/write + } + else if(address == 0x80000c4) + { + if(rtcClockData.byte2 & 1) + { + if(rtcClockData.state == IDLE && rtcClockData.byte0 == 1 && value == 5) + { + rtcClockData.state = COMMAND; + rtcClockData.bits = 0; + rtcClockData.command = 0; + } + else if(!(rtcClockData.byte0 & 1) && (value & 1)) + { // bit transfer + rtcClockData.byte0 = (u8)value; + switch(rtcClockData.state) + { + case COMMAND: + rtcClockData.command |= ((value & 2) >> 1) << (7-rtcClockData.bits); + rtcClockData.bits++; + if(rtcClockData.bits == 8) + { + rtcClockData.bits = 0; + switch(rtcClockData.command) + { + case 0x60: + // not sure what this command does but it doesn't take parameters + // maybe it is a reset or stop + rtcClockData.state = IDLE; + rtcClockData.bits = 0; + break; + case 0x62: + // this sets the control state but not sure what those values are + rtcClockData.state = READDATA; + rtcClockData.dataLen = 1; + break; + case 0x63: + rtcClockData.dataLen = 1; + rtcClockData.data[0] = 0x40; + rtcClockData.state = DATA; + break; + case 0x65: + { + struct tm *newtime; + time_t long_time; + + time( &long_time ); /* Get time as long integer. */ + newtime = localtime( &long_time ); /* Convert to local time. */ + + rtcClockData.dataLen = 7; + rtcClockData.data[0] = toBCD(newtime->tm_year); + rtcClockData.data[1] = toBCD(newtime->tm_mon+1); + rtcClockData.data[2] = toBCD(newtime->tm_mday); + rtcClockData.data[3] = 0; + rtcClockData.data[4] = toBCD(newtime->tm_hour); + rtcClockData.data[5] = toBCD(newtime->tm_min); + rtcClockData.data[6] = toBCD(newtime->tm_sec); + rtcClockData.state = DATA; + } + break; + case 0x67: + { + struct tm *newtime; + time_t long_time; + + time( &long_time ); /* Get time as long integer. */ + newtime = localtime( &long_time ); /* Convert to local time. */ + + rtcClockData.dataLen = 3; + rtcClockData.data[0] = toBCD(newtime->tm_hour); + rtcClockData.data[1] = toBCD(newtime->tm_min); + rtcClockData.data[2] = toBCD(newtime->tm_sec); + rtcClockData.state = DATA; + } + break; + default: + systemMessage(0, N_("Unknown RTC command %02x"), rtcClockData.command); + rtcClockData.state = IDLE; + break; + } + } + break; + case DATA: + if(rtcClockData.byte1 & 2) + {} + else + { + rtcClockData.byte0 = (rtcClockData.byte0 & ~2) | + ((rtcClockData.data[rtcClockData.bits >> 3] >> + (rtcClockData.bits & 7)) & 1)*2; + rtcClockData.bits++; + if(rtcClockData.bits == 8*rtcClockData.dataLen) + { + rtcClockData.bits = 0; + rtcClockData.state = IDLE; + } + } + break; + case READDATA: + if(!(rtcClockData.byte1 & 2)) + {} + else + { + rtcClockData.data[rtcClockData.bits >> 3] = + (rtcClockData.data[rtcClockData.bits >> 3] >> 1) | + ((value << 6) & 128); + rtcClockData.bits++; + if(rtcClockData.bits == 8*rtcClockData.dataLen) + { + rtcClockData.bits = 0; + rtcClockData.state = IDLE; + } + } + break; + default: + break; + } + } + else + rtcClockData.byte0 = (u8)value; + } + } + return true; +} + +void rtcReset() +{ + memset(&rtcClockData, 0, sizeof(rtcClockData)); + + rtcClockData.byte0 = 0; + rtcClockData.byte1 = 0; + rtcClockData.byte2 = 0; + rtcClockData.command = 0; + rtcClockData.dataLen = 0; + rtcClockData.bits = 0; + rtcClockData.state = IDLE; +} + +void rtcSaveGame(gzFile gzFile) +{ + utilGzWrite(gzFile, &rtcClockData, sizeof(rtcClockData)); +} + +void rtcReadGame(gzFile gzFile) +{ + utilGzRead(gzFile, &rtcClockData, sizeof(rtcClockData)); +} diff --git a/source/vba/RTC.h b/source/vba/RTC.h index baac9589..acbd3f6a 100644 --- a/source/vba/RTC.h +++ b/source/vba/RTC.h @@ -1,31 +1,31 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_RTC_H -#define VBA_RTC_H -extern u16 rtcRead(u32 address); -extern bool rtcWrite(u32 address, u16 value); -extern void rtcEnable(bool); -extern bool rtcIsEnabled(); -extern void rtcReset(); - -extern void rtcReadGame(gzFile gzFile); -extern void rtcSaveGame(gzFile gzFile); - -#endif +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_RTC_H +#define VBA_RTC_H +extern u16 rtcRead(u32 address); +extern bool rtcWrite(u32 address, u16 value); +extern void rtcEnable(bool); +extern bool rtcIsEnabled(); +extern void rtcReset(); + +extern void rtcReadGame(gzFile gzFile); +extern void rtcSaveGame(gzFile gzFile); + +#endif diff --git a/source/vba/Sound.cpp b/source/vba/Sound.cpp index 7bb3c5e0..3ad89065 100644 --- a/source/vba/Sound.cpp +++ b/source/vba/Sound.cpp @@ -1,7 +1,6 @@ // VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. // Copyright (C) 1999-2003 Forgotten // Copyright (C) 2004 Forgotten and the VBA development team -// Copyright (C) 2004-2006 VBA development team // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -19,83 +18,82 @@ #include -#include "Sound.h" - -#include "agb/GBA.h" +#include "GBA.h" #include "Globals.h" +#include "Sound.h" #include "Util.h" #define USE_TICKS_AS 380 #define SOUND_MAGIC 0x60000000 #define SOUND_MAGIC_2 0x30000000 -#define NOISE_MAGIC 5 +#define NOISE_MAGIC 5 extern bool stopState; u8 soundWavePattern[4][32] = { - {0x01,0x01,0x01,0x01, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff}, - {0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff}, - {0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff}, - {0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01, - 0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff} -}; + {0x01,0x01,0x01,0x01, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff}, + {0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff}, + {0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff}, + {0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01, + 0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff} + }; int soundFreqRatio[8] = { - 1048576, // 0 - 524288, // 1 - 262144, // 2 - 174763, // 3 - 131072, // 4 - 104858, // 5 - 87381, // 6 - 74898 // 7 -}; + 1048576, // 0 + 524288, // 1 + 262144, // 2 + 174763, // 3 + 131072, // 4 + 104858, // 5 + 87381, // 6 + 74898 // 7 + }; int soundShiftClock[16]= { - 2, // 0 - 4, // 1 - 8, // 2 - 16, // 3 - 32, // 4 - 64, // 5 - 128, // 6 - 256, // 7 - 512, // 8 - 1024, // 9 - 2048, // 10 - 4096, // 11 - 8192, // 12 - 16384, // 13 - 1, // 14 - 1 // 15 -}; + 2, // 0 + 4, // 1 + 8, // 2 + 16, // 3 + 32, // 4 + 64, // 5 + 128, // 6 + 256, // 7 + 512, // 8 + 1024, // 9 + 2048, // 10 + 4096, // 11 + 8192, // 12 + 16384, // 13 + 1, // 14 + 1 // 15 + }; int soundVolume = 0; @@ -204,398 +202,422 @@ bool soundLowPass = false; bool soundReverse = false; variable_desc soundSaveStruct[] = { - { &soundPaused, sizeof(int) }, - { &soundPlay, sizeof(int) }, - { &soundTicks, sizeof(int) }, - { &SOUND_CLOCK_TICKS, sizeof(int) }, - { &soundLevel1, sizeof(int) }, - { &soundLevel2, sizeof(int) }, - { &soundBalance, sizeof(int) }, - { &soundMasterOn, sizeof(int) }, - { &soundIndex, sizeof(int) }, - { &sound1On, sizeof(int) }, - { &sound1ATL, sizeof(int) }, - { &sound1Skip, sizeof(int) }, - { &sound1Index, sizeof(int) }, - { &sound1Continue, sizeof(int) }, - { &sound1EnvelopeVolume, sizeof(int) }, - { &sound1EnvelopeATL, sizeof(int) }, - { &sound1EnvelopeATLReload, sizeof(int) }, - { &sound1EnvelopeUpDown, sizeof(int) }, - { &sound1SweepATL, sizeof(int) }, - { &sound1SweepATLReload, sizeof(int) }, - { &sound1SweepSteps, sizeof(int) }, - { &sound1SweepUpDown, sizeof(int) }, - { &sound1SweepStep, sizeof(int) }, - { &sound2On, sizeof(int) }, - { &sound2ATL, sizeof(int) }, - { &sound2Skip, sizeof(int) }, - { &sound2Index, sizeof(int) }, - { &sound2Continue, sizeof(int) }, - { &sound2EnvelopeVolume, sizeof(int) }, - { &sound2EnvelopeATL, sizeof(int) }, - { &sound2EnvelopeATLReload, sizeof(int) }, - { &sound2EnvelopeUpDown, sizeof(int) }, - { &sound3On, sizeof(int) }, - { &sound3ATL, sizeof(int) }, - { &sound3Skip, sizeof(int) }, - { &sound3Index, sizeof(int) }, - { &sound3Continue, sizeof(int) }, - { &sound3OutputLevel, sizeof(int) }, - { &sound4On, sizeof(int) }, - { &sound4ATL, sizeof(int) }, - { &sound4Skip, sizeof(int) }, - { &sound4Index, sizeof(int) }, - { &sound4Clock, sizeof(int) }, - { &sound4ShiftRight, sizeof(int) }, - { &sound4ShiftSkip, sizeof(int) }, - { &sound4ShiftIndex, sizeof(int) }, - { &sound4NSteps, sizeof(int) }, - { &sound4CountDown, sizeof(int) }, - { &sound4Continue, sizeof(int) }, - { &sound4EnvelopeVolume, sizeof(int) }, - { &sound4EnvelopeATL, sizeof(int) }, - { &sound4EnvelopeATLReload, sizeof(int) }, - { &sound4EnvelopeUpDown, sizeof(int) }, - { &soundEnableFlag, sizeof(int) }, - { &soundControl, sizeof(int) }, - { &soundDSFifoAIndex, sizeof(int) }, - { &soundDSFifoACount, sizeof(int) }, - { &soundDSFifoAWriteIndex, sizeof(int) }, - { &soundDSAEnabled, sizeof(bool) }, - { &soundDSATimer, sizeof(int) }, - { &soundDSFifoA[0], 32 }, - { &soundDSAValue, sizeof(u8) }, - { &soundDSFifoBIndex, sizeof(int) }, - { &soundDSFifoBCount, sizeof(int) }, - { &soundDSFifoBWriteIndex, sizeof(int) }, - { &soundDSBEnabled, sizeof(int) }, - { &soundDSBTimer, sizeof(int) }, - { &soundDSFifoB[0], 32 }, - { &soundDSBValue, sizeof(int) }, - { &soundBuffer[0][0], 6*735 }, - { &soundFinalWave[0], 2*735 }, - { NULL, 0 } -}; + { &soundPaused, sizeof(int) }, + { &soundPlay, sizeof(int) }, + { &soundTicks, sizeof(int) }, + { &SOUND_CLOCK_TICKS, sizeof(int) }, + { &soundLevel1, sizeof(int) }, + { &soundLevel2, sizeof(int) }, + { &soundBalance, sizeof(int) }, + { &soundMasterOn, sizeof(int) }, + { &soundIndex, sizeof(int) }, + { &sound1On, sizeof(int) }, + { &sound1ATL, sizeof(int) }, + { &sound1Skip, sizeof(int) }, + { &sound1Index, sizeof(int) }, + { &sound1Continue, sizeof(int) }, + { &sound1EnvelopeVolume, sizeof(int) }, + { &sound1EnvelopeATL, sizeof(int) }, + { &sound1EnvelopeATLReload, sizeof(int) }, + { &sound1EnvelopeUpDown, sizeof(int) }, + { &sound1SweepATL, sizeof(int) }, + { &sound1SweepATLReload, sizeof(int) }, + { &sound1SweepSteps, sizeof(int) }, + { &sound1SweepUpDown, sizeof(int) }, + { &sound1SweepStep, sizeof(int) }, + { &sound2On, sizeof(int) }, + { &sound2ATL, sizeof(int) }, + { &sound2Skip, sizeof(int) }, + { &sound2Index, sizeof(int) }, + { &sound2Continue, sizeof(int) }, + { &sound2EnvelopeVolume, sizeof(int) }, + { &sound2EnvelopeATL, sizeof(int) }, + { &sound2EnvelopeATLReload, sizeof(int) }, + { &sound2EnvelopeUpDown, sizeof(int) }, + { &sound3On, sizeof(int) }, + { &sound3ATL, sizeof(int) }, + { &sound3Skip, sizeof(int) }, + { &sound3Index, sizeof(int) }, + { &sound3Continue, sizeof(int) }, + { &sound3OutputLevel, sizeof(int) }, + { &sound4On, sizeof(int) }, + { &sound4ATL, sizeof(int) }, + { &sound4Skip, sizeof(int) }, + { &sound4Index, sizeof(int) }, + { &sound4Clock, sizeof(int) }, + { &sound4ShiftRight, sizeof(int) }, + { &sound4ShiftSkip, sizeof(int) }, + { &sound4ShiftIndex, sizeof(int) }, + { &sound4NSteps, sizeof(int) }, + { &sound4CountDown, sizeof(int) }, + { &sound4Continue, sizeof(int) }, + { &sound4EnvelopeVolume, sizeof(int) }, + { &sound4EnvelopeATL, sizeof(int) }, + { &sound4EnvelopeATLReload, sizeof(int) }, + { &sound4EnvelopeUpDown, sizeof(int) }, + { &soundEnableFlag, sizeof(int) }, + { &soundControl, sizeof(int) }, + { &soundDSFifoAIndex, sizeof(int) }, + { &soundDSFifoACount, sizeof(int) }, + { &soundDSFifoAWriteIndex, sizeof(int) }, + { &soundDSAEnabled, sizeof(bool) }, + { &soundDSATimer, sizeof(int) }, + { &soundDSFifoA[0], 32 }, + { &soundDSAValue, sizeof(u8) }, + { &soundDSFifoBIndex, sizeof(int) }, + { &soundDSFifoBCount, sizeof(int) }, + { &soundDSFifoBWriteIndex, sizeof(int) }, + { &soundDSBEnabled, sizeof(int) }, + { &soundDSBTimer, sizeof(int) }, + { &soundDSFifoB[0], 32 }, + { &soundDSBValue, sizeof(int) }, + { &soundBuffer[0][0], 6*735 }, + { &soundFinalWave[0], 2*735 }, + { NULL, 0 } + }; variable_desc soundSaveStructV2[] = { - { &sound3WaveRam[0], 0x20 }, - { &sound3Bank, sizeof(int) }, - { &sound3DataSize, sizeof(int) }, - { &sound3ForcedOutput, sizeof(int) }, - { NULL, 0 } -}; + { &sound3WaveRam[0], 0x20 }, + { &sound3Bank, sizeof(int) }, + { &sound3DataSize, sizeof(int) }, + { &sound3ForcedOutput, sizeof(int) }, + { NULL, 0 } + }; void soundEvent(u32 address, u8 data) { int freq = 0; - switch(address) { - case NR10: - data &= 0x7f; - sound1SweepATL = sound1SweepATLReload = 344 * ((data >> 4) & 7); - sound1SweepSteps = data & 7; - sound1SweepUpDown = data & 0x08; - sound1SweepStep = 0; - ioMem[address] = data; - break; - case NR11: - sound1Wave = soundWavePattern[data >> 6]; - sound1ATL = 172 * (64 - (data & 0x3f)); - ioMem[address] = data; - break; - case NR12: - sound1EnvelopeUpDown = data & 0x08; - sound1EnvelopeATLReload = 689 * (data & 7); - if((data & 0xF8) == 0) - sound1EnvelopeVolume = 0; - ioMem[address] = data; - break; - case NR13: - freq = (((int)(ioMem[NR14] & 7)) << 8) | data; - sound1ATL = 172 * (64 - (ioMem[NR11] & 0x3f)); - freq = 2048 - freq; - if(freq) { - sound1Skip = SOUND_MAGIC / freq; - } else - sound1Skip = 0; - ioMem[address] = data; - break; - case NR14: - data &= 0xC7; - freq = (((int)(data&7) << 8) | ioMem[NR13]); - freq = 2048 - freq; - sound1ATL = 172 * (64 - (ioMem[NR11] & 0x3f)); - sound1Continue = data & 0x40; - if(freq) { - sound1Skip = SOUND_MAGIC / freq; - } else - sound1Skip = 0; - if(data & 0x80) { - ioMem[NR52] |= 1; - sound1EnvelopeVolume = ioMem[NR12] >> 4; - sound1EnvelopeUpDown = ioMem[NR12] & 0x08; - sound1ATL = 172 * (64 - (ioMem[NR11] & 0x3f)); - sound1EnvelopeATLReload = sound1EnvelopeATL = 689 * (ioMem[NR12] & 7); - sound1SweepATL = sound1SweepATLReload = 344 * ((ioMem[NR10] >> 4) & 7); - sound1SweepSteps = ioMem[NR10] & 7; - sound1SweepUpDown = ioMem[NR10] & 0x08; + switch(address) + { + case NR10: + data &= 0x7f; + sound1SweepATL = sound1SweepATLReload = 344 * ((data >> 4) & 7); + sound1SweepSteps = data & 7; + sound1SweepUpDown = data & 0x08; sound1SweepStep = 0; - - sound1Index = 0; - sound1On = 1; - } - ioMem[address] = data; - break; - case NR21: - sound2Wave = soundWavePattern[data >> 6]; - sound2ATL = 172 * (64 - (data & 0x3f)); - ioMem[address] = data; - break; - case NR22: - sound2EnvelopeUpDown = data & 0x08; - sound2EnvelopeATLReload = 689 * (data & 7); - if((data & 0xF8) == 0) - sound2EnvelopeVolume = 0; - ioMem[address] = data; - break; - case NR23: - freq = (((int)(ioMem[NR24] & 7)) << 8) | data; - sound2ATL = 172 * (64 - (ioMem[NR21] & 0x3f)); - freq = 2048 - freq; - if(freq) { - sound2Skip = SOUND_MAGIC / freq; - } else - sound2Skip = 0; - ioMem[address] = data; - break; - case NR24: - data &= 0xC7; - freq = (((int)(data&7) << 8) | ioMem[NR23]); - freq = 2048 - freq; - sound2ATL = 172 * (64 - (ioMem[NR21] & 0x3f)); - sound2Continue = data & 0x40; - if(freq) { - sound2Skip = SOUND_MAGIC / freq; - } else - sound2Skip = 0; - if(data & 0x80) { - ioMem[NR52] |= 2; - sound2EnvelopeVolume = ioMem[NR22] >> 4; - sound2EnvelopeUpDown = ioMem[NR22] & 0x08; + ioMem[address] = data; + break; + case NR11: + sound1Wave = soundWavePattern[data >> 6]; + sound1ATL = 172 * (64 - (data & 0x3f)); + ioMem[address] = data; + break; + case NR12: + sound1EnvelopeUpDown = data & 0x08; + sound1EnvelopeATLReload = 689 * (data & 7); + if((data & 0xF8) == 0) + sound1EnvelopeVolume = 0; + ioMem[address] = data; + break; + case NR13: + freq = (((int)(ioMem[NR14] & 7)) << 8) | data; + sound1ATL = 172 * (64 - (ioMem[NR11] & 0x3f)); + freq = 2048 - freq; + if(freq) + { + sound1Skip = SOUND_MAGIC / freq; + } + else + sound1Skip = 0; + ioMem[address] = data; + break; + case NR14: + data &= 0xC7; + freq = (((int)(data&7) << 8) | ioMem[NR13]); + freq = 2048 - freq; + sound1ATL = 172 * (64 - (ioMem[NR11] & 0x3f)); + sound1Continue = data & 0x40; + if(freq) + { + sound1Skip = SOUND_MAGIC / freq; + } + else + sound1Skip = 0; + if(data & 0x80) + { + ioMem[NR52] |= 1; + sound1EnvelopeVolume = ioMem[NR12] >> 4; + sound1EnvelopeUpDown = ioMem[NR12] & 0x08; + sound1ATL = 172 * (64 - (ioMem[NR11] & 0x3f)); + sound1EnvelopeATLReload = sound1EnvelopeATL = 689 * (ioMem[NR12] & 7); + sound1SweepATL = sound1SweepATLReload = 344 * ((ioMem[NR10] >> 4) & 7); + sound1SweepSteps = ioMem[NR10] & 7; + sound1SweepUpDown = ioMem[NR10] & 0x08; + sound1SweepStep = 0; + + sound1Index = 0; + sound1On = 1; + } + ioMem[address] = data; + break; + case NR21: + sound2Wave = soundWavePattern[data >> 6]; + sound2ATL = 172 * (64 - (data & 0x3f)); + ioMem[address] = data; + break; + case NR22: + sound2EnvelopeUpDown = data & 0x08; + sound2EnvelopeATLReload = 689 * (data & 7); + if((data & 0xF8) == 0) + sound2EnvelopeVolume = 0; + ioMem[address] = data; + break; + case NR23: + freq = (((int)(ioMem[NR24] & 7)) << 8) | data; sound2ATL = 172 * (64 - (ioMem[NR21] & 0x3f)); - sound2EnvelopeATLReload = sound2EnvelopeATL = 689 * (ioMem[NR22] & 7); - - sound2Index = 0; - sound2On = 1; - } - ioMem[address] = data; - break; - case NR30: - data &= 0xe0; - if(!(data & 0x80)) { - ioMem[NR52] &= 0xfb; - sound3On = 0; - } - if(((data >> 6) & 1) != sound3Bank) - memcpy(&ioMem[0x90], &sound3WaveRam[(((data >> 6) & 1) * 0x10)^0x10], - 0x10); - sound3Bank = (data >> 6) & 1; - sound3DataSize = (data >> 5) & 1; - ioMem[address] = data; - break; - case NR31: - sound3ATL = 172 * (256-data); - ioMem[address] = data; - break; - case NR32: - data &= 0xe0; - sound3OutputLevel = (data >> 5) & 3; - sound3ForcedOutput = (data >> 7) & 1; - ioMem[address] = data; - break; - case NR33: - freq = 2048 - (((int)(ioMem[NR34]&7) << 8) | data); - if(freq) { - sound3Skip = SOUND_MAGIC_2 / freq; - } else - sound3Skip = 0; - ioMem[address] = data; - break; - case NR34: - data &= 0xc7; - freq = 2048 - (((data &7) << 8) | (int)ioMem[NR33]); - if(freq) { - sound3Skip = SOUND_MAGIC_2 / freq; - } else { - sound3Skip = 0; - } - sound3Continue = data & 0x40; - if((data & 0x80) && (ioMem[NR30] & 0x80)) { - ioMem[NR52] |= 4; - sound3ATL = 172 * (256 - ioMem[NR31]); - sound3Index = 0; - sound3On = 1; - } - ioMem[address] = data; - break; - case NR41: - data &= 0x3f; - sound4ATL = 172 * (64 - (data & 0x3f)); - ioMem[address] = data; - break; - case NR42: - sound4EnvelopeUpDown = data & 0x08; - sound4EnvelopeATLReload = 689 * (data & 7); - if((data & 0xF8) == 0) - sound4EnvelopeVolume = 0; - ioMem[address] = data; - break; - case NR43: - freq = soundFreqRatio[data & 7]; - sound4NSteps = data & 0x08; - - sound4Skip = (freq << 8) / NOISE_MAGIC; - - sound4Clock = data >> 4; - - freq = freq / soundShiftClock[sound4Clock]; - - sound4ShiftSkip = (freq << 8) / NOISE_MAGIC; - ioMem[address] = data; - break; - case NR44: - data &= 0xc0; - sound4Continue = data & 0x40; - if(data & 0x80) { - ioMem[NR52] |= 8; - sound4EnvelopeVolume = ioMem[NR42] >> 4; - sound4EnvelopeUpDown = ioMem[NR42] & 0x08; - sound4ATL = 172 * (64 - (ioMem[NR41] & 0x3f)); - sound4EnvelopeATLReload = sound4EnvelopeATL = 689 * (ioMem[NR42] & 7); - - sound4On = 1; - - sound4Index = 0; - sound4ShiftIndex = 0; - - freq = soundFreqRatio[ioMem[NR43] & 7]; + freq = 2048 - freq; + if(freq) + { + sound2Skip = SOUND_MAGIC / freq; + } + else + sound2Skip = 0; + ioMem[address] = data; + break; + case NR24: + data &= 0xC7; + freq = (((int)(data&7) << 8) | ioMem[NR23]); + freq = 2048 - freq; + sound2ATL = 172 * (64 - (ioMem[NR21] & 0x3f)); + sound2Continue = data & 0x40; + if(freq) + { + sound2Skip = SOUND_MAGIC / freq; + } + else + sound2Skip = 0; + if(data & 0x80) + { + ioMem[NR52] |= 2; + sound2EnvelopeVolume = ioMem[NR22] >> 4; + sound2EnvelopeUpDown = ioMem[NR22] & 0x08; + sound2ATL = 172 * (64 - (ioMem[NR21] & 0x3f)); + sound2EnvelopeATLReload = sound2EnvelopeATL = 689 * (ioMem[NR22] & 7); + + sound2Index = 0; + sound2On = 1; + } + break; + ioMem[address] = data; + case NR30: + data &= 0xe0; + if(!(data & 0x80)) + { + ioMem[NR52] &= 0xfb; + sound3On = 0; + } + if(((data >> 6) & 1) != sound3Bank) + memcpy(&ioMem[0x90], &sound3WaveRam[(((data >> 6) & 1) * 0x10)^0x10], + 0x10); + sound3Bank = (data >> 6) & 1; + sound3DataSize = (data >> 5) & 1; + ioMem[address] = data; + break; + case NR31: + sound3ATL = 172 * (256-data); + ioMem[address] = data; + break; + case NR32: + data &= 0xe0; + sound3OutputLevel = (data >> 5) & 3; + sound3ForcedOutput = (data >> 7) & 1; + ioMem[address] = data; + break; + case NR33: + freq = 2048 - (((int)(ioMem[NR34]&7) << 8) | data); + if(freq) + { + sound3Skip = SOUND_MAGIC_2 / freq; + } + else + sound3Skip = 0; + ioMem[address] = data; + break; + case NR34: + data &= 0xc7; + freq = 2048 - (((data &7) << 8) | (int)ioMem[NR33]); + if(freq) + { + sound3Skip = SOUND_MAGIC_2 / freq; + } + else + { + sound3Skip = 0; + } + sound3Continue = data & 0x40; + if((data & 0x80) && (ioMem[NR30] & 0x80)) + { + ioMem[NR52] |= 4; + sound3ATL = 172 * (256 - ioMem[NR31]); + sound3Index = 0; + sound3On = 1; + } + ioMem[address] = data; + break; + case NR41: + data &= 0x3f; + sound4ATL = 172 * (64 - (data & 0x3f)); + ioMem[address] = data; + break; + case NR42: + sound4EnvelopeUpDown = data & 0x08; + sound4EnvelopeATLReload = 689 * (data & 7); + if((data & 0xF8) == 0) + sound4EnvelopeVolume = 0; + ioMem[address] = data; + break; + case NR43: + freq = soundFreqRatio[data & 7]; + sound4NSteps = data & 0x08; sound4Skip = (freq << 8) / NOISE_MAGIC; - - sound4NSteps = ioMem[NR43] & 0x08; - - freq = freq / soundShiftClock[ioMem[NR43] >> 4]; + + sound4Clock = data >> 4; + + freq = freq / soundShiftClock[sound4Clock]; sound4ShiftSkip = (freq << 8) / NOISE_MAGIC; - if(sound4NSteps) - sound4ShiftRight = 0x7fff; - else - sound4ShiftRight = 0x7f; - } - ioMem[address] = data; - break; - case NR50: - data &= 0x77; - soundLevel1 = data & 7; - soundLevel2 = (data >> 4) & 7; - ioMem[address] = data; - break; - case NR51: - soundBalance = (data & soundEnableFlag); - ioMem[address] = data; - break; - case NR52: - data &= 0x80; - data |= ioMem[NR52] & 15; - soundMasterOn = data & 0x80; - if(!(data & 0x80)) { - sound1On = 0; - sound2On = 0; - sound3On = 0; - sound4On = 0; + ioMem[address] = data; + break; + case NR44: + data &= 0xc0; + sound4Continue = data & 0x40; + if(data & 0x80) + { + ioMem[NR52] |= 8; + sound4EnvelopeVolume = ioMem[NR42] >> 4; + sound4EnvelopeUpDown = ioMem[NR42] & 0x08; + sound4ATL = 172 * (64 - (ioMem[NR41] & 0x3f)); + sound4EnvelopeATLReload = sound4EnvelopeATL = 689 * (ioMem[NR42] & 7); + + sound4On = 1; + + sound4Index = 0; + sound4ShiftIndex = 0; + + freq = soundFreqRatio[ioMem[NR43] & 7]; + + sound4Skip = (freq << 8) / NOISE_MAGIC; + + sound4NSteps = ioMem[NR43] & 0x08; + + freq = freq / soundShiftClock[ioMem[NR43] >> 4]; + + sound4ShiftSkip = (freq << 8) / NOISE_MAGIC; + if(sound4NSteps) + sound4ShiftRight = 0x7fff; + else + sound4ShiftRight = 0x7f; + } + ioMem[address] = data; + break; + case NR50: + data &= 0x77; + soundLevel1 = data & 7; + soundLevel2 = (data >> 4) & 7; + ioMem[address] = data; + break; + case NR51: + soundBalance = (data & soundEnableFlag); + ioMem[address] = data; + break; + case NR52: + data &= 0x80; + data |= ioMem[NR52] & 15; + soundMasterOn = data & 0x80; + if(!(data & 0x80)) + { + sound1On = 0; + sound2On = 0; + sound3On = 0; + sound4On = 0; + } + ioMem[address] = data; + break; + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9a: + case 0x9b: + case 0x9c: + case 0x9d: + case 0x9e: + case 0x9f: + sound3WaveRam[(sound3Bank*0x10)^0x10+(address&15)] = data; + break; } - ioMem[address] = data; - break; - case 0x90: - case 0x91: - case 0x92: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - case 0x98: - case 0x99: - case 0x9a: - case 0x9b: - case 0x9c: - case 0x9d: - case 0x9e: - case 0x9f: - sound3WaveRam[(sound3Bank*0x10)^0x10+(address&15)] = data; - break; - } } void soundEvent(u32 address, u16 data) { - switch(address) { - case SGCNT0_H: - data &= 0xFF0F; - soundControl = data & 0x770F; - if(data & 0x0800) { - soundDSFifoAWriteIndex = 0; - soundDSFifoAIndex = 0; - soundDSFifoACount = 0; - soundDSAValue = 0; - memset(soundDSFifoA, 0, 32); - } - soundDSAEnabled = (data & 0x0300) ? true : false; - soundDSATimer = (data & 0x0400) ? 1 : 0; - if(data & 0x8000) { - soundDSFifoBWriteIndex = 0; - soundDSFifoBIndex = 0; - soundDSFifoBCount = 0; - soundDSBValue = 0; - memset(soundDSFifoB, 0, 32); + switch(address) + { + case SGCNT0_H: + data &= 0xFF0F; + soundControl = data & 0x770F; + ; + if(data & 0x0800) + { + soundDSFifoAWriteIndex = 0; + soundDSFifoAIndex = 0; + soundDSFifoACount = 0; + soundDSAValue = 0; + memset(soundDSFifoA, 0, 32); + } + soundDSAEnabled = (data & 0x0300) ? true : false; + soundDSATimer = (data & 0x0400) ? 1 : 0; + if(data & 0x8000) + { + soundDSFifoBWriteIndex = 0; + soundDSFifoBIndex = 0; + soundDSFifoBCount = 0; + soundDSBValue = 0; + memset(soundDSFifoB, 0, 32); + } + soundDSBEnabled = (data & 0x3000) ? true : false; + soundDSBTimer = (data & 0x4000) ? 1 : 0; + *((u16 *)&ioMem[address]) = data; + break; + case FIFOA_L: + case FIFOA_H: + soundDSFifoA[soundDSFifoAWriteIndex++] = data & 0xFF; + soundDSFifoA[soundDSFifoAWriteIndex++] = data >> 8; + soundDSFifoACount += 2; + soundDSFifoAWriteIndex &= 31; + *((u16 *)&ioMem[address]) = data; + break; + case FIFOB_L: + case FIFOB_H: + soundDSFifoB[soundDSFifoBWriteIndex++] = data & 0xFF; + soundDSFifoB[soundDSFifoBWriteIndex++] = data >> 8; + soundDSFifoBCount += 2; + soundDSFifoBWriteIndex &= 31; + *((u16 *)&ioMem[address]) = data; + break; + case 0x88: + data &= 0xC3FF; + *((u16 *)&ioMem[address]) = data; + break; + case 0x90: + case 0x92: + case 0x94: + case 0x96: + case 0x98: + case 0x9a: + case 0x9c: + case 0x9e: + *((u16 *)&sound3WaveRam[(sound3Bank*0x10)^0x10+(address&14)]) = data; + *((u16 *)&ioMem[address]) = data; + break; } - soundDSBEnabled = (data & 0x3000) ? true : false; - soundDSBTimer = (data & 0x4000) ? 1 : 0; - *((u16 *)&ioMem[address]) = soundControl; - break; - case FIFOA_L: - case FIFOA_H: - soundDSFifoA[soundDSFifoAWriteIndex++] = data & 0xFF; - soundDSFifoA[soundDSFifoAWriteIndex++] = data >> 8; - soundDSFifoACount += 2; - soundDSFifoAWriteIndex &= 31; - *((u16 *)&ioMem[address]) = data; - break; - case FIFOB_L: - case FIFOB_H: - soundDSFifoB[soundDSFifoBWriteIndex++] = data & 0xFF; - soundDSFifoB[soundDSFifoBWriteIndex++] = data >> 8; - soundDSFifoBCount += 2; - soundDSFifoBWriteIndex &= 31; - *((u16 *)&ioMem[address]) = data; - break; - case 0x88: - data &= 0xC3FF; - *((u16 *)&ioMem[address]) = data; - break; - case 0x90: - case 0x92: - case 0x94: - case 0x96: - case 0x98: - case 0x9a: - case 0x9c: - case 0x9e: - *((u16 *)&sound3WaveRam[(sound3Bank*0x10)^0x10+(address&14)]) = data; - *((u16 *)&ioMem[address]) = data; - break; - } } void soundChannel1() @@ -604,78 +626,96 @@ void soundChannel1() int freq = 0; int value = 0; - - if(sound1On && (sound1ATL || !sound1Continue)) { - sound1Index += soundQuality*sound1Skip; - sound1Index &= 0x1fffffff; - value = ((s8)sound1Wave[sound1Index>>24]) * vol; - } + if(sound1On && (sound1ATL || !sound1Continue)) + { + sound1Index += soundQuality*sound1Skip; + sound1Index &= 0x1fffffff; + + value = ((s8)sound1Wave[sound1Index>>24]) * vol; + } soundBuffer[0][soundIndex] = value; - - if(sound1On) { - if(sound1ATL) { - sound1ATL-=soundQuality; - - if(sound1ATL <=0 && sound1Continue) { - ioMem[NR52] &= 0xfe; - sound1On = 0; - } - } - - if(sound1EnvelopeATL) { - sound1EnvelopeATL-=soundQuality; - - if(sound1EnvelopeATL<=0) { - if(sound1EnvelopeUpDown) { - if(sound1EnvelopeVolume < 15) - sound1EnvelopeVolume++; - } else { - if(sound1EnvelopeVolume) - sound1EnvelopeVolume--; + + if(sound1On) + { + if(sound1ATL) + { + sound1ATL-=soundQuality; + + if(sound1ATL <=0 && sound1Continue) + { + ioMem[NR52] &= 0xfe; + sound1On = 0; + } } - - sound1EnvelopeATL += sound1EnvelopeATLReload; - } - } - - if(sound1SweepATL) { - sound1SweepATL-=soundQuality; - - if(sound1SweepATL<=0) { - freq = (((int)(ioMem[NR14]&7) << 8) | ioMem[NR13]); - - int updown = 1; - - if(sound1SweepUpDown) - updown = -1; - - int newfreq = 0; - if(sound1SweepSteps) { - newfreq = freq + updown * freq / (1 << sound1SweepSteps); - if(newfreq == freq) - newfreq = 0; - } else - newfreq = freq; - - if(newfreq < 0) { - sound1SweepATL += sound1SweepATLReload; - } else if(newfreq > 2047) { - sound1SweepATL = 0; - sound1On = 0; - ioMem[NR52] &= 0xfe; - } else { - sound1SweepATL += sound1SweepATLReload; - sound1Skip = SOUND_MAGIC/(2048 - newfreq); - - ioMem[NR13] = newfreq & 0xff; - ioMem[NR14] = (ioMem[NR14] & 0xf8) |((newfreq >> 8) & 7); + + if(sound1EnvelopeATL) + { + sound1EnvelopeATL-=soundQuality; + + if(sound1EnvelopeATL<=0) + { + if(sound1EnvelopeUpDown) + { + if(sound1EnvelopeVolume < 15) + sound1EnvelopeVolume++; + } + else + { + if(sound1EnvelopeVolume) + sound1EnvelopeVolume--; + } + + sound1EnvelopeATL += sound1EnvelopeATLReload; + } + } + + if(sound1SweepATL) + { + sound1SweepATL-=soundQuality; + + if(sound1SweepATL<=0) + { + freq = (((int)(ioMem[NR14]&7) << 8) | ioMem[NR13]); + + int updown = 1; + + if(sound1SweepUpDown) + updown = -1; + + int newfreq = 0; + if(sound1SweepSteps) + { + newfreq = freq + updown * freq / (1 << sound1SweepSteps); + if(newfreq == freq) + newfreq = 0; + } + else + newfreq = freq; + + if(newfreq < 0) + { + sound1SweepATL += sound1SweepATLReload; + } + else if(newfreq > 2047) + { + sound1SweepATL = 0; + sound1On = 0; + ioMem[NR52] &= 0xfe; + } + else + { + sound1SweepATL += sound1SweepATLReload; + sound1Skip = SOUND_MAGIC/(2048 - newfreq); + + ioMem[NR13] = newfreq & 0xff; + ioMem[NR14] = (ioMem[NR14] & 0xf8) |((newfreq >> 8) & 7); + } + } } - } } - } } void soundChannel2() @@ -684,98 +724,122 @@ void soundChannel2() int vol = sound2EnvelopeVolume; int value = 0; - - if(sound2On && (sound2ATL || !sound2Continue)) { - sound2Index += soundQuality*sound2Skip; - sound2Index &= 0x1fffffff; - - value = ((s8)sound2Wave[sound2Index>>24]) * vol; - } - - soundBuffer[1][soundIndex] = value; - - if(sound2On) { - if(sound2ATL) { - sound2ATL-=soundQuality; - - if(sound2ATL <= 0 && sound2Continue) { - ioMem[NR52] &= 0xfd; - sound2On = 0; - } + + if(sound2On && (sound2ATL || !sound2Continue)) + { + sound2Index += soundQuality*sound2Skip; + sound2Index &= 0x1fffffff; + + value = ((s8)sound2Wave[sound2Index>>24]) * vol; } - - if(sound2EnvelopeATL) { - sound2EnvelopeATL-=soundQuality; - - if(sound2EnvelopeATL <= 0) { - if(sound2EnvelopeUpDown) { - if(sound2EnvelopeVolume < 15) - sound2EnvelopeVolume++; - } else { - if(sound2EnvelopeVolume) - sound2EnvelopeVolume--; + + soundBuffer[1][soundIndex] = value; + + if(sound2On) + { + if(sound2ATL) + { + sound2ATL-=soundQuality; + + if(sound2ATL <= 0 && sound2Continue) + { + ioMem[NR52] &= 0xfd; + sound2On = 0; + } + } + + if(sound2EnvelopeATL) + { + sound2EnvelopeATL-=soundQuality; + + if(sound2EnvelopeATL <= 0) + { + if(sound2EnvelopeUpDown) + { + if(sound2EnvelopeVolume < 15) + sound2EnvelopeVolume++; + } + else + { + if(sound2EnvelopeVolume) + sound2EnvelopeVolume--; + } + sound2EnvelopeATL += sound2EnvelopeATLReload; + } } - sound2EnvelopeATL += sound2EnvelopeATLReload; - } } - } -} +} void soundChannel3() { int value = sound3Last; - - if(sound3On && (sound3ATL || !sound3Continue)) { - sound3Index += soundQuality*sound3Skip; - if(sound3DataSize) { - sound3Index &= 0x3fffffff; - value = sound3WaveRam[sound3Index>>25]; - } else { - sound3Index &= 0x1fffffff; - value = sound3WaveRam[sound3Bank*0x10 + (sound3Index>>25)]; - } - - if( (sound3Index & 0x01000000)) { - value &= 0x0f; - } else { - value >>= 4; - } - value -= 8; - value *= 2; - - if(sound3ForcedOutput) { - value = ((value >> 1) + value) >> 1; - } else { - switch(sound3OutputLevel) { - case 0: - value = 0; - break; - case 1: - break; - case 2: - value = (value >> 1); - break; - case 3: - value = (value >> 2); - break; - } + if(sound3On && (sound3ATL || !sound3Continue)) + { + sound3Index += soundQuality*sound3Skip; + if(sound3DataSize) + { + sound3Index &= 0x3fffffff; + value = sound3WaveRam[sound3Index>>25]; + } + else + { + sound3Index &= 0x1fffffff; + value = sound3WaveRam[sound3Bank*0x10 + (sound3Index>>25)]; + } + + if( (sound3Index & 0x01000000)) + { + value &= 0x0f; + } + else + { + value >>= 4; + } + + value -= 8; + //value *= 2; + value <<= 1; + + if(sound3ForcedOutput) + { + value = ((value >> 1) + value) >> 1; + } + else + { + switch(sound3OutputLevel) + { + case 0: + value = 0; + break; + case 1: + break; + case 2: + value = (value >> 1); + break; + case 3: + value = (value >> 2); + break; + } + } + sound3Last = value; } - sound3Last = value; - } - + soundBuffer[2][soundIndex] = value; - - if(sound3On) { - if(sound3ATL) { - sound3ATL-=soundQuality; - - if(sound3ATL <= 0 && sound3Continue) { - ioMem[NR52] &= 0xfb; - sound3On = 0; - } + + if(sound3On) + { + if(sound3ATL) + { + sound3ATL-=soundQuality; + + if(sound3ATL <= 0 && sound3Continue) + { + ioMem[NR52] &= 0xfb; + sound3On = 0; + } + } } - } } void soundChannel4() @@ -784,64 +848,81 @@ void soundChannel4() int value = 0; - if(sound4Clock <= 0x0c) { - if(sound4On && (sound4ATL || !sound4Continue)) { - sound4Index += soundQuality*sound4Skip; - sound4ShiftIndex += soundQuality*sound4ShiftSkip; - - if(sound4NSteps) { - while(sound4ShiftIndex > 0x1fffff) { - sound4ShiftRight = (((sound4ShiftRight << 6) ^ - (sound4ShiftRight << 5)) & 0x40) | - (sound4ShiftRight >> 1); - sound4ShiftIndex -= 0x200000; + if(sound4Clock <= 0x0c) + { + if(sound4On && (sound4ATL || !sound4Continue)) + { + sound4Index += soundQuality*sound4Skip; + sound4ShiftIndex += soundQuality*sound4ShiftSkip; + + if(sound4NSteps) + { + while(sound4ShiftIndex > 0x1fffff) + { + sound4ShiftRight = (((sound4ShiftRight << 6) ^ + (sound4ShiftRight << 5)) & 0x40) | + (sound4ShiftRight >> 1); + sound4ShiftIndex -= 0x200000; + } + } + else + { + while(sound4ShiftIndex > 0x1fffff) + { + sound4ShiftRight = (((sound4ShiftRight << 14) ^ + (sound4ShiftRight << 13)) & 0x4000) | + (sound4ShiftRight >> 1); + + sound4ShiftIndex -= 0x200000; + } + } + + sound4Index &= 0x1fffff; + sound4ShiftIndex &= 0x1fffff; + + value = ((sound4ShiftRight & 1)*2-1) * vol; } - } else { - while(sound4ShiftIndex > 0x1fffff) { - sound4ShiftRight = (((sound4ShiftRight << 14) ^ - (sound4ShiftRight << 13)) & 0x4000) | - (sound4ShiftRight >> 1); - - sound4ShiftIndex -= 0x200000; + else + { + value = 0; } - } - - sound4Index &= 0x1fffff; - sound4ShiftIndex &= 0x1fffff; - - value = ((sound4ShiftRight & 1)*2-1) * vol; - } else { - value = 0; } - } - + soundBuffer[3][soundIndex] = value; - if(sound4On) { - if(sound4ATL) { - sound4ATL-=soundQuality; - - if(sound4ATL <= 0 && sound4Continue) { - ioMem[NR52] &= 0xfd; - sound4On = 0; - } - } - - if(sound4EnvelopeATL) { - sound4EnvelopeATL-=soundQuality; - - if(sound4EnvelopeATL <= 0) { - if(sound4EnvelopeUpDown) { - if(sound4EnvelopeVolume < 15) - sound4EnvelopeVolume++; - } else { - if(sound4EnvelopeVolume) - sound4EnvelopeVolume--; + if(sound4On) + { + if(sound4ATL) + { + sound4ATL-=soundQuality; + + if(sound4ATL <= 0 && sound4Continue) + { + ioMem[NR52] &= 0xfd; + sound4On = 0; + } + } + + if(sound4EnvelopeATL) + { + sound4EnvelopeATL-=soundQuality; + + if(sound4EnvelopeATL <= 0) + { + if(sound4EnvelopeUpDown) + { + if(sound4EnvelopeVolume < 15) + sound4EnvelopeVolume++; + } + else + { + if(sound4EnvelopeVolume) + sound4EnvelopeVolume--; + } + sound4EnvelopeATL += sound4EnvelopeATLReload; + } } - sound4EnvelopeATL += sound4EnvelopeATLReload; - } } - } } void soundDirectSoundA() @@ -851,25 +932,29 @@ void soundDirectSoundA() void soundDirectSoundATimer() { - if(soundDSAEnabled) { - if(soundDSFifoACount <= 16) { - CPUCheckDMA(3, 2); - if(soundDSFifoACount <= 16) { - soundEvent(FIFOA_L, (u16)0); - soundEvent(FIFOA_H, (u16)0); - soundEvent(FIFOA_L, (u16)0); - soundEvent(FIFOA_H, (u16)0); - soundEvent(FIFOA_L, (u16)0); - soundEvent(FIFOA_H, (u16)0); - soundEvent(FIFOA_L, (u16)0); - soundEvent(FIFOA_H, (u16)0); - } + if(soundDSAEnabled) + { + if(soundDSFifoACount <= 16) + { + CPUCheckDMA(3, 2); + if(soundDSFifoACount <= 16) + { + soundEvent(FIFOA_L, (u16)0); + soundEvent(FIFOA_H, (u16)0); + soundEvent(FIFOA_L, (u16)0); + soundEvent(FIFOA_H, (u16)0); + soundEvent(FIFOA_L, (u16)0); + soundEvent(FIFOA_H, (u16)0); + soundEvent(FIFOA_L, (u16)0); + soundEvent(FIFOA_H, (u16)0); + } + } + + soundDSAValue = (soundDSFifoA[soundDSFifoAIndex]); + soundDSFifoAIndex = (++soundDSFifoAIndex) & 31; + soundDSFifoACount--; } - - soundDSAValue = (soundDSFifoA[soundDSFifoAIndex]); - soundDSFifoAIndex = (soundDSFifoAIndex + 1) & 31; - soundDSFifoACount--; - } else + else soundDSAValue = 0; } @@ -880,37 +965,44 @@ void soundDirectSoundB() void soundDirectSoundBTimer() { - if(soundDSBEnabled) { - if(soundDSFifoBCount <= 16) { - CPUCheckDMA(3, 4); - if(soundDSFifoBCount <= 16) { - soundEvent(FIFOB_L, (u16)0); - soundEvent(FIFOB_H, (u16)0); - soundEvent(FIFOB_L, (u16)0); - soundEvent(FIFOB_H, (u16)0); - soundEvent(FIFOB_L, (u16)0); - soundEvent(FIFOB_H, (u16)0); - soundEvent(FIFOB_L, (u16)0); - soundEvent(FIFOB_H, (u16)0); - } + if(soundDSBEnabled) + { + if(soundDSFifoBCount <= 16) + { + CPUCheckDMA(3, 4); + if(soundDSFifoBCount <= 16) + { + soundEvent(FIFOB_L, (u16)0); + soundEvent(FIFOB_H, (u16)0); + soundEvent(FIFOB_L, (u16)0); + soundEvent(FIFOB_H, (u16)0); + soundEvent(FIFOB_L, (u16)0); + soundEvent(FIFOB_H, (u16)0); + soundEvent(FIFOB_L, (u16)0); + soundEvent(FIFOB_H, (u16)0); + } + } + + soundDSBValue = (soundDSFifoB[soundDSFifoBIndex]); + soundDSFifoBIndex = (++soundDSFifoBIndex) & 31; + soundDSFifoBCount--; + } + else + { + soundDSBValue = 0; } - - soundDSBValue = (soundDSFifoB[soundDSFifoBIndex]); - soundDSFifoBIndex = (soundDSFifoBIndex + 1) & 31; - soundDSFifoBCount--; - } else { - soundDSBValue = 0; - } } void soundTimerOverflow(int timer) { - if(soundDSAEnabled && (soundDSATimer == timer)) { - soundDirectSoundATimer(); - } - if(soundDSBEnabled && (soundDSBTimer == timer)) { - soundDirectSoundBTimer(); - } + if(soundDSAEnabled && (soundDSATimer == timer)) + { + soundDirectSoundATimer(); + } + if(soundDSBEnabled && (soundDSBTimer == timer)) + { + soundDirectSoundBTimer(); + } } #ifndef max @@ -924,83 +1016,93 @@ void soundMix() int ratio = ioMem[0x82] & 3; int dsaRatio = ioMem[0x82] & 4; int dsbRatio = ioMem[0x82] & 8; - - if(soundBalance & 16) { - cgbRes = ((s8)soundBuffer[0][soundIndex]); - } - if(soundBalance & 32) { - cgbRes += ((s8)soundBuffer[1][soundIndex]); - } - if(soundBalance & 64) { - cgbRes += ((s8)soundBuffer[2][soundIndex]); - } - if(soundBalance & 128) { - cgbRes += ((s8)soundBuffer[3][soundIndex]); - } - - if((soundControl & 0x0200) && (soundEnableFlag & 0x100)){ - if(!dsaRatio) - res = ((s8)soundBuffer[4][soundIndex])>>1; - else - res = ((s8)soundBuffer[4][soundIndex]); - } - - if((soundControl & 0x2000) && (soundEnableFlag & 0x200)){ - if(!dsbRatio) - res += ((s8)soundBuffer[5][soundIndex])>>1; - else - res += ((s8)soundBuffer[5][soundIndex]); - } - + + if(soundBalance & 16) + { + cgbRes = ((s8)soundBuffer[0][soundIndex]); + } + if(soundBalance & 32) + { + cgbRes += ((s8)soundBuffer[1][soundIndex]); + } + if(soundBalance & 64) + { + cgbRes += ((s8)soundBuffer[2][soundIndex]); + } + if(soundBalance & 128) + { + cgbRes += ((s8)soundBuffer[3][soundIndex]); + } + + if((soundControl & 0x0200) && (soundEnableFlag & 0x100)) + { + if(!dsaRatio) + res = ((s8)soundBuffer[4][soundIndex])>>1; + else + res = ((s8)soundBuffer[4][soundIndex]); + } + + if((soundControl & 0x2000) && (soundEnableFlag & 0x200)) + { + if(!dsbRatio) + res += ((s8)soundBuffer[5][soundIndex])>>1; + else + res += ((s8)soundBuffer[5][soundIndex]); + } + res = (res * 170); cgbRes = (cgbRes * 52 * soundLevel1); - switch(ratio) { - case 0: - case 3: // prohibited, but 25% - cgbRes >>= 2; - break; - case 1: - cgbRes >>= 1; - break; - case 2: - break; - } + switch(ratio) + { + case 0: + case 3: // prohibited, but 25% + cgbRes >>= 2; + break; + case 1: + cgbRes >>= 1; + break; + case 2: + break; + } res += cgbRes; - if(soundEcho) { - res *= 2; - res += soundFilter[soundEchoIndex]; - res /= 2; - soundFilter[soundEchoIndex++] = res; - } - - if(soundLowPass) { - soundLeft[4] = soundLeft[3]; - soundLeft[3] = soundLeft[2]; - soundLeft[2] = soundLeft[1]; - soundLeft[1] = soundLeft[0]; - soundLeft[0] = res; - res = (soundLeft[4] + 2*soundLeft[3] + 8*soundLeft[2] + 2*soundLeft[1] + - soundLeft[0])/14; - } - - switch(soundVolume) { - case 0: - case 1: - case 2: - case 3: - res *= (soundVolume+1); - break; - case 4: - res >>= 2; - break; - case 5: - res >>= 1; - break; - } - + if(soundEcho) + { + res *= 2; + res += soundFilter[soundEchoIndex]; + res /= 2; + soundFilter[soundEchoIndex++] = res; + } + + if(soundLowPass) + { + soundLeft[4] = soundLeft[3]; + soundLeft[3] = soundLeft[2]; + soundLeft[2] = soundLeft[1]; + soundLeft[1] = soundLeft[0]; + soundLeft[0] = res; + res = (soundLeft[4] + 2*soundLeft[3] + 8*soundLeft[2] + 2*soundLeft[1] + + soundLeft[0])/14; + } + + switch(soundVolume) + { + case 0: + case 1: + case 2: + case 3: + res *= (soundVolume+1); + break; + case 4: + res >>= 2; + break; + case 5: + res >>= 1; + break; + } + if(res > 32767) res = 32767; if(res < -32768) @@ -1010,94 +1112,104 @@ void soundMix() soundFinalWave[++soundBufferIndex] = res; else soundFinalWave[soundBufferIndex++] = res; - + res = 0; cgbRes = 0; - - if(soundBalance & 1) { - cgbRes = ((s8)soundBuffer[0][soundIndex]); - } - if(soundBalance & 2) { - cgbRes += ((s8)soundBuffer[1][soundIndex]); - } - if(soundBalance & 4) { - cgbRes += ((s8)soundBuffer[2][soundIndex]); - } - if(soundBalance & 8) { - cgbRes += ((s8)soundBuffer[3][soundIndex]); - } - - if((soundControl & 0x0100) && (soundEnableFlag & 0x100)){ - if(!dsaRatio) - res = ((s8)soundBuffer[4][soundIndex])>>1; - else - res = ((s8)soundBuffer[4][soundIndex]); - } - - if((soundControl & 0x1000) && (soundEnableFlag & 0x200)){ - if(!dsbRatio) - res += ((s8)soundBuffer[5][soundIndex])>>1; - else - res += ((s8)soundBuffer[5][soundIndex]); - } + + if(soundBalance & 1) + { + cgbRes = ((s8)soundBuffer[0][soundIndex]); + } + if(soundBalance & 2) + { + cgbRes += ((s8)soundBuffer[1][soundIndex]); + } + if(soundBalance & 4) + { + cgbRes += ((s8)soundBuffer[2][soundIndex]); + } + if(soundBalance & 8) + { + cgbRes += ((s8)soundBuffer[3][soundIndex]); + } + + if((soundControl & 0x0100) && (soundEnableFlag & 0x100)) + { + if(!dsaRatio) + res = ((s8)soundBuffer[4][soundIndex])>>1; + else + res = ((s8)soundBuffer[4][soundIndex]); + } + + if((soundControl & 0x1000) && (soundEnableFlag & 0x200)) + { + if(!dsbRatio) + res += ((s8)soundBuffer[5][soundIndex])>>1; + else + res += ((s8)soundBuffer[5][soundIndex]); + } res = (res * 170); cgbRes = (cgbRes * 52 * soundLevel1); - - switch(ratio) { - case 0: - case 3: // prohibited, but 25% - cgbRes >>= 2; - break; - case 1: - cgbRes >>= 1; - break; - case 2: - break; - } + + switch(ratio) + { + case 0: + case 3: // prohibited, but 25% + cgbRes >>= 2; + break; + case 1: + cgbRes >>= 1; + break; + case 2: + break; + } res += cgbRes; - - if(soundEcho) { - res *= 2; - res += soundFilter[soundEchoIndex]; - res /= 2; - soundFilter[soundEchoIndex++] = res; - - if(soundEchoIndex >= 4000) - soundEchoIndex = 0; - } - - if(soundLowPass) { - soundRight[4] = soundRight[3]; - soundRight[3] = soundRight[2]; - soundRight[2] = soundRight[1]; - soundRight[1] = soundRight[0]; - soundRight[0] = res; - res = (soundRight[4] + 2*soundRight[3] + 8*soundRight[2] + 2*soundRight[1] + - soundRight[0])/14; - } - - switch(soundVolume) { - case 0: - case 1: - case 2: - case 3: - res *= (soundVolume+1); - break; - case 4: - res >>= 2; - break; - case 5: - res >>= 1; - break; - } - + + if(soundEcho) + { + res *= 2; + res += soundFilter[soundEchoIndex]; + res /= 2; + soundFilter[soundEchoIndex++] = res; + + if(soundEchoIndex >= 4000) + soundEchoIndex = 0; + } + + if(soundLowPass) + { + soundRight[4] = soundRight[3]; + soundRight[3] = soundRight[2]; + soundRight[2] = soundRight[1]; + soundRight[1] = soundRight[0]; + soundRight[0] = res; + res = (soundRight[4] + 2*soundRight[3] + 8*soundRight[2] + 2*soundRight[1] + + soundRight[0])/14; + } + + switch(soundVolume) + { + case 0: + case 1: + case 2: + case 3: + res *= (soundVolume+1); + break; + case 4: + res >>= 2; + break; + case 5: + res >>= 1; + break; + } + if(res > 32767) res = 32767; if(res < -32768) res = -32768; - + if(soundReverse) soundFinalWave[-1+soundBufferIndex++] = res; else @@ -1106,34 +1218,41 @@ void soundMix() void soundTick() { - if(systemSoundOn) { - if(soundMasterOn && !stopState) { - soundChannel1(); - soundChannel2(); - soundChannel3(); - soundChannel4(); - soundDirectSoundA(); - soundDirectSoundB(); - soundMix(); - } else { - soundFinalWave[soundBufferIndex++] = 0; - soundFinalWave[soundBufferIndex++] = 0; - } - - soundIndex++; - - if(2*soundBufferIndex >= soundBufferLen) { - if(systemSoundOn) { - if(soundPaused) { - soundResume(); - } - - systemWriteDataToSoundBuffer(); - } - soundIndex = 0; - soundBufferIndex = 0; + if(systemSoundOn) + { + if(soundMasterOn && !stopState) + { + soundChannel1(); + soundChannel2(); + soundChannel3(); + soundChannel4(); + soundDirectSoundA(); + soundDirectSoundB(); + soundMix(); + } + else + { + soundFinalWave[soundBufferIndex++] = 0; + soundFinalWave[soundBufferIndex++] = 0; + } + + soundIndex++; + + if(2*soundBufferIndex >= soundBufferLen) + { + if(systemSoundOn) + { + if(soundPaused) + { + soundResume(); + } + + systemWriteDataToSoundBuffer(); + } + soundIndex = 0; + soundBufferIndex = 0; + } } - } } void soundShutdown() @@ -1156,7 +1275,7 @@ void soundResume() void soundEnable(int channels) { int c = channels & 0x0f; - + soundEnableFlag |= ((channels & 0x30f) |c | (c << 4)); if(ioMem) soundBalance = (ioMem[NR51] & soundEnableFlag); @@ -1165,7 +1284,7 @@ void soundEnable(int channels) void soundDisable(int channels) { int c = channels & 0x0f; - + soundEnableFlag &= (~((channels & 0x30f)|c|(c<<4))); if(ioMem) soundBalance = (ioMem[NR51] & soundEnableFlag); @@ -1182,7 +1301,7 @@ void soundReset() soundPaused = 1; soundPlay = 0; - SOUND_CLOCK_TICKS = soundQuality * USE_TICKS_AS; + SOUND_CLOCK_TICKS = soundQuality * USE_TICKS_AS; soundTicks = SOUND_CLOCK_TICKS; soundNextPosition = 0; soundMasterOn = 1; @@ -1190,7 +1309,7 @@ void soundReset() soundBufferIndex = 0; soundLevel1 = 7; soundLevel2 = 7; - + sound1On = 0; sound1ATL = 0; sound1Skip = 0; @@ -1206,7 +1325,7 @@ void soundReset() sound1SweepUpDown = 0; sound1SweepStep = 0; sound1Wave = soundWavePattern[2]; - + sound2On = 0; sound2ATL = 0; sound2Skip = 0; @@ -1217,7 +1336,7 @@ void soundReset() sound2EnvelopeUpDown = 0; sound2EnvelopeATLReload = 0; sound2Wave = soundWavePattern[2]; - + sound3On = 0; sound3ATL = 0; sound3Skip = 0; @@ -1228,7 +1347,7 @@ void soundReset() sound3Bank = 0; sound3DataSize = 0; sound3ForcedOutput = 0; - + sound4On = 0; sound4Clock = 0; sound4ATL = 0; @@ -1247,19 +1366,21 @@ void soundReset() sound2On = 0; sound3On = 0; sound4On = 0; - + int addr = 0x90; - while(addr < 0xA0) { - ioMem[addr++] = 0x00; - ioMem[addr++] = 0xff; - } + while(addr < 0xA0) + { + ioMem[addr++] = 0x00; + ioMem[addr++] = 0xff; + } addr = 0; - while(addr < 0x20) { - sound3WaveRam[addr++] = 0x00; - sound3WaveRam[addr++] = 0xff; - } + while(addr < 0x20) + { + sound3WaveRam[addr++] = 0x00; + sound3WaveRam[addr++] = 0xff; + } memset(soundFinalWave, 0, soundBufferLen); @@ -1269,67 +1390,74 @@ void soundReset() bool soundInit() { - if(systemSoundInit()) { - memset(soundBuffer[0], 0, 735*2); - memset(soundBuffer[1], 0, 735*2); - memset(soundBuffer[2], 0, 735*2); - memset(soundBuffer[3], 0, 735*2); - - memset(soundFinalWave, 0, soundBufferLen); - - soundPaused = true; - return true; - } + if(systemSoundInit()) + { + memset(soundBuffer[0], 0, 735*2); + memset(soundBuffer[1], 0, 735*2); + memset(soundBuffer[2], 0, 735*2); + memset(soundBuffer[3], 0, 735*2); + + memset(soundFinalWave, 0, soundBufferLen); + + soundPaused = true; + return true; + } return false; -} +} void soundSetQuality(int quality) { - if(soundQuality != quality && systemCanChangeSoundQuality()) { - if(!soundOffFlag) - soundShutdown(); - soundQuality = quality; - soundNextPosition = 0; - if(!soundOffFlag) - soundInit(); - SOUND_CLOCK_TICKS = USE_TICKS_AS * soundQuality; - soundIndex = 0; - soundBufferIndex = 0; - } else if(soundQuality != quality) { - soundNextPosition = 0; - SOUND_CLOCK_TICKS = USE_TICKS_AS * soundQuality; - soundIndex = 0; - soundBufferIndex = 0; - } + if(soundQuality != quality && systemCanChangeSoundQuality()) + { + if(!soundOffFlag) + soundShutdown(); + soundQuality = quality; + soundNextPosition = 0; + if(!soundOffFlag) + soundInit(); + SOUND_CLOCK_TICKS = USE_TICKS_AS * soundQuality; + soundIndex = 0; + soundBufferIndex = 0; + } + else if(soundQuality != quality) + { + soundNextPosition = 0; + SOUND_CLOCK_TICKS = USE_TICKS_AS * soundQuality; + soundIndex = 0; + soundBufferIndex = 0; + } } void soundSaveGame(gzFile gzFile) { utilWriteData(gzFile, soundSaveStruct); utilWriteData(gzFile, soundSaveStructV2); - + utilGzWrite(gzFile, &soundQuality, sizeof(int)); } void soundReadGame(gzFile gzFile, int version) { utilReadData(gzFile, soundSaveStruct); - if(version >= SAVE_GAME_VERSION_3) { - utilReadData(gzFile, soundSaveStructV2); - } else { - sound3Bank = (ioMem[NR30] >> 6) & 1; - sound3DataSize = (ioMem[NR30] >> 5) & 1; - sound3ForcedOutput = (ioMem[NR32] >> 7) & 1; - // nothing better to do here... - memcpy(&sound3WaveRam[0x00], &ioMem[0x90], 0x10); - memcpy(&sound3WaveRam[0x10], &ioMem[0x90], 0x10); - } + if(version >= SAVE_GAME_VERSION_3) + { + utilReadData(gzFile, soundSaveStructV2); + } + else + { + sound3Bank = (ioMem[NR30] >> 6) & 1; + sound3DataSize = (ioMem[NR30] >> 5) & 1; + sound3ForcedOutput = (ioMem[NR32] >> 7) & 1; + // nothing better to do here... + memcpy(&sound3WaveRam[0x00], &ioMem[0x90], 0x10); + memcpy(&sound3WaveRam[0x10], &ioMem[0x90], 0x10); + } soundBufferIndex = soundIndex * 2; - + int quality = 1; utilGzRead(gzFile, &quality, sizeof(int)); soundSetQuality(quality); - + sound1Wave = soundWavePattern[ioMem[NR11] >> 6]; sound2Wave = soundWavePattern[ioMem[NR21] >> 6]; } diff --git a/source/vba/Sound.h b/source/vba/Sound.h index 47a4b3f2..4e1dac7f 100644 --- a/source/vba/Sound.h +++ b/source/vba/Sound.h @@ -1,84 +1,82 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team -// Copyright (C) 2004-2006 VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_SOUND_H -#define VBA_SOUND_H - -#include "System.h" - -#define NR10 0x60 -#define NR11 0x62 -#define NR12 0x63 -#define NR13 0x64 -#define NR14 0x65 -#define NR21 0x68 -#define NR22 0x69 -#define NR23 0x6c -#define NR24 0x6d -#define NR30 0x70 -#define NR31 0x72 -#define NR32 0x73 -#define NR33 0x74 -#define NR34 0x75 -#define NR41 0x78 -#define NR42 0x79 -#define NR43 0x7c -#define NR44 0x7d -#define NR50 0x80 -#define NR51 0x81 -#define NR52 0x84 -#define SGCNT0_H 0x82 -#define FIFOA_L 0xa0 -#define FIFOA_H 0xa2 -#define FIFOB_L 0xa4 -#define FIFOB_H 0xa6 - -void soundTick(); -void soundShutdown(); -bool soundInit(); -void soundPause(); -void soundResume(); -void soundEnable(int); -void soundDisable(int); -int soundGetEnable(); -void soundReset(); -void soundSaveGame(gzFile); -void soundReadGame(gzFile, int); -void soundEvent(u32, u8); -void soundEvent(u32, u16); -void soundTimerOverflow(int); -void soundSetQuality(int); - -extern int SOUND_CLOCK_TICKS; -extern int soundTicks; -extern int soundPaused; -extern bool soundOffFlag; -extern int soundQuality; -extern int soundBufferLen; -extern int soundBufferTotalLen; -extern u32 soundNextPosition; -extern u16 soundFinalWave[1470]; -extern int soundVolume; - -extern bool soundEcho; -extern bool soundLowPass; -extern bool soundReverse; - -#endif // VBA_SOUND_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_SOUND_H +#define VBA_SOUND_H + +#define NR10 0x60 +#define NR11 0x62 +#define NR12 0x63 +#define NR13 0x64 +#define NR14 0x65 +#define NR21 0x68 +#define NR22 0x69 +#define NR23 0x6c +#define NR24 0x6d +#define NR30 0x70 +#define NR31 0x72 +#define NR32 0x73 +#define NR33 0x74 +#define NR34 0x75 +#define NR41 0x78 +#define NR42 0x79 +#define NR43 0x7c +#define NR44 0x7d +#define NR50 0x80 +#define NR51 0x81 +#define NR52 0x84 +#define SGCNT0_H 0x82 +#define FIFOA_L 0xa0 +#define FIFOA_H 0xa2 +#define FIFOB_L 0xa4 +#define FIFOB_H 0xa6 + +extern void soundTick(); +extern void soundShutdown(); +extern bool soundInit(); +extern void soundPause(); +extern void soundResume(); +extern void soundEnable(int); +extern void soundDisable(int); +extern int soundGetEnable(); +extern void soundReset(); +extern void soundSaveGame(gzFile); +extern void soundReadGame(gzFile, int); +extern void soundEvent(u32, u8); +extern void soundEvent(u32, u16); +extern void soundTimerOverflow(int); +extern void soundSetQuality(int); + +//extern int SOUND_TICKS; +extern int SOUND_CLOCK_TICKS; +extern int soundTicks; +extern int soundPaused; +extern bool soundOffFlag; +extern int soundQuality; +extern int soundBufferLen; +extern int soundBufferTotalLen; +extern u32 soundNextPosition; +extern u16 soundFinalWave[1470]; +extern int soundVolume; + +extern bool soundEcho; +extern bool soundLowPass; +extern bool soundReverse; + +#endif // VBA_SOUND_H diff --git a/source/vba/Sram.cpp b/source/vba/Sram.cpp index dae6be3c..1a460970 100644 --- a/source/vba/Sram.cpp +++ b/source/vba/Sram.cpp @@ -1,39 +1,32 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "agb/GBA.h" -#include "Globals.h" -#include "Flash.h" -#include "Sram.h" - -u8 sramRead(u32 address) -{ - return flashSaveMemory[address & 0xFFFF]; -} -void sramDelayedWrite(u32 address, u8 byte) -{ - saveType = 1; - cpuSaveGameFunc = sramWrite; - sramWrite(address, byte); -} - -void sramWrite(u32 address, u8 byte) -{ - flashSaveMemory[address & 0xFFFF] = byte; - systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "GBA.h" +#include "Flash.h" +#include "Sram.h" + +u8 sramRead(u32 address) +{ + return flashSaveMemory[address & 0xFFFF]; +} + +void sramWrite(u32 address, u8 byte) +{ + flashSaveMemory[address & 0xFFFF] = byte; + systemSaveUpdateCounter = SYSTEM_SAVE_UPDATED; +} diff --git a/source/vba/Sram.h b/source/vba/Sram.h index 85536eec..f33f4c8c 100644 --- a/source/vba/Sram.h +++ b/source/vba/Sram.h @@ -1,27 +1,26 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_SRAM_H -#define VBA_SRAM_H - -extern u8 sramRead(u32 address); -extern void sramWrite(u32 address, u8 byte); -extern void sramDelayedWrite(u32 address, u8 byte); - -#endif // VBA_SRAM_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_SRAM_H +#define VBA_SRAM_H + +extern u8 sramRead(u32 address); +extern void sramWrite(u32 address, u8 byte); + +#endif // VBA_SRAM_H diff --git a/source/vba/System.h b/source/vba/System.h index f321dbcf..c58a0fba 100644 --- a/source/vba/System.h +++ b/source/vba/System.h @@ -1,135 +1,127 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_SYSTEM_H -#define VBA_SYSTEM_H - -#include -#include "unzip.h" - -#ifndef NULL -#define NULL 0 -#endif - - -typedef uint8_t u8; -typedef uint16_t u16; -typedef uint32_t u32; -typedef uint64_t u64; - -typedef int8_t s8; -typedef int16_t s16; -typedef int32_t s32; -typedef int64_t s64; - - - -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; - -struct EmulatedSystem { - // main emulation function - void (*emuMain)(int); - // reset emulator - void (*emuReset)(); - // clean up memory - void (*emuCleanUp)(); - // load battery file - bool (*emuReadBattery)(const char *); - // write battery file - bool (*emuWriteBattery)(const char *); - // load state - bool (*emuReadState)(const char *); - // save state - bool (*emuWriteState)(const char *); - // load memory state (rewind) - bool (*emuReadMemState)(char *, int); - // write memory state (rewind) - bool (*emuWriteMemState)(char *, int); - // write PNG file - bool (*emuWritePNG)(const char *); - // write BMP file - bool (*emuWriteBMP)(const char *); - // emulator update CPSR (ARM only) - void (*emuUpdateCPSR)(); - // emulator has debugger - bool emuHasDebugger; - // clock ticks to emulate - int emuCount; -}; - -extern void log(const char *,...); - -extern bool systemPauseOnFrame(); -extern void systemGbPrint(u8 *,int,int,int,int); -extern void systemScreenCapture(int); -extern void systemDrawScreen(); -// updates the joystick data -extern bool systemReadJoypads(); -// return information about the given joystick, -1 for default joystick -extern u32 systemReadJoypad(int); -extern u32 systemGetClock(); -extern void systemMessage(int, const char *, ...); -extern void systemSetTitle(const char *); -extern void systemWriteDataToSoundBuffer(); -extern void systemSoundShutdown(); -extern void systemSoundPause(); -extern void systemSoundResume(); -extern void systemSoundReset(); -extern bool systemSoundInit(); -extern void systemScreenMessage(const char *); -extern void systemUpdateMotionSensor(); -extern int systemGetSensorX(); -extern int systemGetSensorY(); -extern bool systemCanChangeSoundQuality(); -extern void systemShowSpeed(int); -extern void system10Frames(int); -extern void systemFrame(); -extern void systemGbBorderOn(); - -extern void Sm60FPS_Init(); -extern bool Sm60FPS_CanSkipFrame(); -extern void Sm60FPS_Sleep(); -extern void DbgMsg(const char *msg, ...); -extern void winlog(const char *,...); - -extern void (*dbgOutput)(const char *s, u32 addr); -extern void (*dbgSignal)(int sig,int number); - -extern bool systemSoundOn; // old sound system -extern u16 systemColorMap16[0x10000]; -//extern u32 systemColorMap32[0x10000]; -extern u32 *systemColorMap32; -extern u16 systemGbPalette[24]; -extern int systemRedShift; -extern int systemGreenShift; -extern int systemBlueShift; -extern int systemColorDepth; -extern int systemDebug; -extern int systemVerbose; -extern int systemFrameSkip; -extern int systemSaveUpdateCounter; -extern int systemSpeed; -extern int systemThrottle; - -#define SYSTEM_SAVE_UPDATED 30 -#define SYSTEM_SAVE_NOT_UPDATED 0 - -#endif //VBA_SYSTEM_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_SYSTEM_H +#define VBA_SYSTEM_H + +#include "unzip.h" + +#ifndef NULL +#define NULL 0 +#endif + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; + +#ifdef _MSC_VER +typedef unsigned __int64 u64; +#else +typedef unsigned long long u64; +#endif + +typedef signed char s8; +typedef signed short s16; +typedef signed int s32; + +#ifdef _MSC_VER +typedef signed __int64 s64; +#else +typedef signed long long s64; +#endif + +struct EmulatedSystem + { + // main emulation function + void (*emuMain)(int); + // reset emulator + void (*emuReset)(); + // clean up memory + void (*emuCleanUp)(); + // load battery file + bool (*emuReadBattery)(const char *); + // write battery file + bool (*emuWriteBattery)(const char *); + // load state + bool (*emuReadState)(const char *); + // save state + bool (*emuWriteState)(const char *); + // load memory state (rewind) + bool (*emuReadMemState)(char *, int); + // write memory state (rewind) + bool (*emuWriteMemState)(char *, int); + // write PNG file + bool (*emuWritePNG)(const char *); + // write BMP file + bool (*emuWriteBMP)(const char *); + // emulator update CPSR (ARM only) + void (*emuUpdateCPSR)(); + // emulator has debugger + bool emuHasDebugger; + // clock ticks to emulate + int emuCount; + }; + +extern void log(const char *,...); + +extern bool systemPauseOnFrame(); +extern void systemGbPrint(u8 *,int,int,int,int); +extern void systemScreenCapture(int); +extern void systemDrawScreen(); +// updates the joystick data +extern bool systemReadJoypads(); +// return information about the given joystick, -1 for default joystick +extern u32 systemReadJoypad(int); +extern u32 systemGetClock(); +extern void systemMessage(int, const char *, ...); +extern void systemSetTitle(const char *); +extern void systemWriteDataToSoundBuffer(); +extern void systemSoundShutdown(); +extern void systemSoundPause(); +extern void systemSoundResume(); +extern void systemSoundReset(); +extern bool systemSoundInit(); +extern void systemScreenMessage(const char *); +extern void systemUpdateMotionSensor(); +extern int systemGetSensorX(); +extern int systemGetSensorY(); +extern bool systemCanChangeSoundQuality(); +extern void systemShowSpeed(int); +extern void system10Frames(int); +extern void systemFrame(); +extern void systemGbBorderOn(); + +extern bool systemSoundOn; +extern u16 systemColorMap16[0x10000]; +//extern u32 systemColorMap32[0x10000]; +extern u32 *systemColorMap32; +extern u16 systemGbPalette[24]; +extern int systemRedShift; +extern int systemGreenShift; +extern int systemBlueShift; +extern int systemColorDepth; +extern int systemDebug; +extern int systemVerbose; +extern int systemFrameSkip; +extern int systemSaveUpdateCounter; + +#define SYSTEM_SAVE_UPDATED 30 +#define SYSTEM_SAVE_NOT_UPDATED 0 + +#endif //VBA_SYSTEM_H diff --git a/source/vba/Text.cpp b/source/vba/Text.cpp new file mode 100644 index 00000000..e9925ea2 --- /dev/null +++ b/source/vba/Text.cpp @@ -0,0 +1,180 @@ +/* FCE Ultra - NES/Famicom Emulator + * + * Copyright notice for this file: + * Copyright (C) 2002 Ben Parnell + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* Code originally from fceu/drawing.h file, adapted by Forgotten + */ +#include "System.h" + +extern int RGB_LOW_BITS_MASK; + +static const u8 fontdata2[2048] = + { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x81,0xa5,0x81,0xbd,0x99,0x81,0x7e,0x7e,0xff,0xdb,0xff,0xc3,0xe7,0xff,0x7e,0x36,0x7f,0x7f,0x7f,0x3e,0x1c,0x08,0x00,0x08,0x1c,0x3e,0x7f,0x3e,0x1c,0x08,0x00,0x1c,0x3e,0x1c,0x7f,0x7f,0x3e,0x1c,0x3e,0x08,0x08,0x1c,0x3e,0x7f,0x3e,0x1c,0x3e,0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,0xff,0xff,0xe7,0xc3,0xc3,0xe7,0xff,0xff,0x00,0x3c,0x66,0x42,0x42,0x66,0x3c,0x00,0xff,0xc3,0x99,0xbd,0xbd,0x99,0xc3,0xff,0xf0,0xe0,0xf0,0xbe,0x33,0x33,0x33,0x1e,0x3c,0x66,0x66,0x66,0x3c,0x18,0x7e,0x18,0xfc,0xcc,0xfc,0x0c,0x0c,0x0e,0x0f,0x07,0xfe,0xc6,0xfe,0xc6,0xc6,0xe6,0x67,0x03,0x99,0x5a,0x3c,0xe7,0xe7,0x3c,0x5a,0x99,0x01,0x07,0x1f,0x7f,0x1f,0x07,0x01,0x00,0x40,0x70,0x7c,0x7f,0x7c,0x70,0x40,0x00,0x18,0x3c,0x7e,0x18,0x18,0x7e,0x3c,0x18,0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x00,0xfe,0xdb,0xdb,0xde,0xd8,0xd8,0xd8,0x00,0x7c,0xc6,0x1c,0x36,0x36,0x1c,0x33,0x1e,0x00,0x00,0x00,0x00,0x7e,0x7e,0x7e,0x00,0x18,0x3c,0x7e,0x18,0x7e,0x3c,0x18,0xff,0x18,0x3c,0x7e,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00,0x00,0x18,0x30,0x7f,0x30,0x18,0x00,0x00,0x00,0x0c,0x06,0x7f,0x06,0x0c,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x7f,0x00,0x00,0x00,0x24,0x66,0xff,0x66,0x24,0x00,0x00,0x00,0x18,0x3c,0x7e,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x7e,0x3c,0x18,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x1e,0x1e,0x0c,0x0c,0x00,0x0c,0x00,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x7f,0x36,0x7f,0x36,0x36,0x00,0x0c,0x3e,0x03,0x1e,0x30,0x1f,0x0c,0x00,0x00,0x63,0x33,0x18,0x0c,0x66,0x63,0x00,0x1c,0x36,0x1c,0x6e,0x3b,0x33,0x6e,0x00,0x06,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x18,0x0c,0x06,0x06,0x06,0x0c,0x18,0x00,0x06,0x0c,0x18,0x18,0x18,0x0c,0x06,0x00,0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,0x00,0x0c,0x0c,0x3f,0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x0c,0x00,0x60,0x30,0x18,0x0c,0x06,0x03,0x01,0x00,0x3e,0x63,0x73,0x7b,0x6f,0x67,0x3e,0x00,0x0c,0x0e,0x0c,0x0c,0x0c,0x0c,0x3f,0x00,0x1e,0x33,0x30,0x1c,0x06,0x33,0x3f,0x00,0x1e,0x33,0x30,0x1c,0x30,0x33,0x1e,0x00,0x38,0x3c,0x36,0x33,0x7f,0x30,0x78,0x00,0x3f,0x03,0x1f,0x30,0x30,0x33,0x1e,0x00,0x1c,0x06,0x03,0x1f,0x33,0x33,0x1e,0x00,0x3f,0x33,0x30,0x18,0x0c,0x0c,0x0c,0x00,0x1e,0x33,0x33,0x1e,0x33,0x33,0x1e,0x00,0x1e,0x33,0x33,0x3e,0x30,0x18,0x0e,0x00,0x00,0x0c,0x0c,0x00,0x00,0x0c,0x0c,0x00,0x00,0x0c,0x0c,0x00,0x00,0x0c,0x0c,0x06,0x18,0x0c,0x06,0x03,0x06,0x0c,0x18,0x00,0x00,0x00,0x3f,0x00,0x00,0x3f,0x00,0x00,0x06,0x0c,0x18,0x30,0x18,0x0c,0x06,0x00,0x1e,0x33,0x30,0x18,0x0c,0x00,0x0c,0x00, + 0x3e,0x63,0x7b,0x7b,0x7b,0x03,0x1e,0x00,0x0c,0x1e,0x33,0x33,0x3f,0x33,0x33,0x00,0x3f,0x66,0x66,0x3e,0x66,0x66,0x3f,0x00,0x3c,0x66,0x03,0x03,0x03,0x66,0x3c,0x00,0x1f,0x36,0x66,0x66,0x66,0x36,0x1f,0x00,0x7f,0x46,0x16,0x1e,0x16,0x46,0x7f,0x00,0x7f,0x46,0x16,0x1e,0x16,0x06,0x0f,0x00,0x3c,0x66,0x03,0x03,0x73,0x66,0x7c,0x00,0x33,0x33,0x33,0x3f,0x33,0x33,0x33,0x00,0x1e,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x78,0x30,0x30,0x30,0x33,0x33,0x1e,0x00,0x67,0x66,0x36,0x1e,0x36,0x66,0x67,0x00,0x0f,0x06,0x06,0x06,0x46,0x66,0x7f,0x00,0x63,0x77,0x7f,0x7f,0x6b,0x63,0x63,0x00,0x63,0x67,0x6f,0x7b,0x73,0x63,0x63,0x00,0x1c,0x36,0x63,0x63,0x63,0x36,0x1c,0x00,0x3f,0x66,0x66,0x3e,0x06,0x06,0x0f,0x00,0x1e,0x33,0x33,0x33,0x3b,0x1e,0x38,0x00,0x3f,0x66,0x66,0x3e,0x36,0x66,0x67,0x00,0x1e,0x33,0x07,0x0e,0x38,0x33,0x1e,0x00,0x3f,0x2d,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x33,0x33,0x33,0x33,0x33,0x33,0x3f,0x00,0x33,0x33,0x33,0x33,0x33,0x1e,0x0c,0x00,0x63,0x63,0x63,0x6b,0x7f,0x77,0x63,0x00,0x63,0x63,0x36,0x1c,0x1c,0x36,0x63,0x00,0x33,0x33,0x33,0x1e,0x0c,0x0c,0x1e,0x00,0x7f,0x63,0x31,0x18,0x4c,0x66,0x7f,0x00,0x1e,0x06,0x06,0x06,0x06,0x06,0x1e,0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0x40,0x00,0x1e,0x18,0x18,0x18,0x18,0x18,0x1e,0x00,0x08,0x1c,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, + 0x0c,0x0c,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x30,0x3e,0x33,0x6e,0x00,0x07,0x06,0x06,0x3e,0x66,0x66,0x3b,0x00,0x00,0x00,0x1e,0x33,0x03,0x33,0x1e,0x00,0x38,0x30,0x30,0x3e,0x33,0x33,0x6e,0x00,0x00,0x00,0x1e,0x33,0x3f,0x03,0x1e,0x00,0x1c,0x36,0x06,0x0f,0x06,0x06,0x0f,0x00,0x00,0x00,0x6e,0x33,0x33,0x3e,0x30,0x1f,0x07,0x06,0x36,0x6e,0x66,0x66,0x67,0x00,0x0c,0x00,0x0e,0x0c,0x0c,0x0c,0x1e,0x00,0x30,0x00,0x30,0x30,0x30,0x33,0x33,0x1e,0x07,0x06,0x66,0x36,0x1e,0x36,0x67,0x00,0x0e,0x0c,0x0c,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x33,0x7f,0x7f,0x6b,0x63,0x00,0x00,0x00,0x1f,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x1e,0x33,0x33,0x33,0x1e,0x00,0x00,0x00,0x3b,0x66,0x66,0x3e,0x06,0x0f,0x00,0x00,0x6e,0x33,0x33,0x3e,0x30,0x78,0x00,0x00,0x3b,0x6e,0x66,0x06,0x0f,0x00,0x00,0x00,0x3e,0x03,0x1e,0x30,0x1f,0x00,0x08,0x0c,0x3e,0x0c,0x0c,0x2c,0x18,0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x6e,0x00,0x00,0x00,0x33,0x33,0x33,0x1e,0x0c,0x00,0x00,0x00,0x63,0x6b,0x7f,0x7f,0x36,0x00,0x00,0x00,0x63,0x36,0x1c,0x36,0x63,0x00,0x00,0x00,0x33,0x33,0x33,0x3e,0x30,0x1f,0x00,0x00,0x3f,0x19,0x0c,0x26,0x3f,0x00,0x38,0x0c,0x0c,0x07,0x0c,0x0c,0x38,0x00,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,0x07,0x0c,0x0c,0x38,0x0c,0x0c,0x07,0x00,0x6e,0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x36,0x63,0x63,0x7f,0x00, + 0x1e,0x33,0x03,0x33,0x1e,0x18,0x30,0x1e,0x00,0x33,0x00,0x33,0x33,0x33,0x7e,0x00,0x38,0x00,0x1e,0x33,0x3f,0x03,0x1e,0x00,0x7e,0xc3,0x3c,0x60,0x7c,0x66,0xfc,0x00,0x33,0x00,0x1e,0x30,0x3e,0x33,0x7e,0x00,0x07,0x00,0x1e,0x30,0x3e,0x33,0x7e,0x00,0x0c,0x0c,0x1e,0x30,0x3e,0x33,0x7e,0x00,0x00,0x00,0x1e,0x03,0x03,0x1e,0x30,0x1c,0x7e,0xc3,0x3c,0x66,0x7e,0x06,0x3c,0x00,0x33,0x00,0x1e,0x33,0x3f,0x03,0x1e,0x00,0x07,0x00,0x1e,0x33,0x3f,0x03,0x1e,0x00,0x33,0x00,0x0e,0x0c,0x0c,0x0c,0x1e,0x00,0x3e,0x63,0x1c,0x18,0x18,0x18,0x3c,0x00,0x07,0x00,0x0e,0x0c,0x0c,0x0c,0x1e,0x00,0x63,0x1c,0x36,0x63,0x7f,0x63,0x63,0x00,0x0c,0x0c,0x00,0x1e,0x33,0x3f,0x33,0x00,0x38,0x00,0x3f,0x06,0x1e,0x06,0x3f,0x00,0x00,0x00,0xfe,0x30,0xfe,0x33,0xfe,0x00,0x7c,0x36,0x33,0x7f,0x33,0x33,0x73,0x00,0x1e,0x33,0x00,0x1e,0x33,0x33,0x1e,0x00,0x00,0x33,0x00,0x1e,0x33,0x33,0x1e,0x00,0x00,0x07,0x00,0x1e,0x33,0x33,0x1e,0x00,0x1e,0x33,0x00,0x33,0x33,0x33,0x7e,0x00,0x00,0x07,0x00,0x33,0x33,0x33,0x7e,0x00,0x00,0x33,0x00,0x33,0x33,0x3e,0x30,0x1f,0xc3,0x18,0x3c,0x66,0x66,0x3c,0x18,0x00,0x33,0x00,0x33,0x33,0x33,0x33,0x1e,0x00,0x18,0x18,0x7e,0x03,0x03,0x7e,0x18,0x18,0x1c,0x36,0x26,0x0f,0x06,0x67,0x3f,0x00,0x33,0x33,0x1e,0x3f,0x0c,0x3f,0x0c,0x0c,0x1f,0x33,0x33,0x5f,0x63,0xf3,0x63,0xe3,0x70,0xd8,0x18,0x3c,0x18,0x18,0x1b,0x0e, + 0x38,0x00,0x1e,0x30,0x3e,0x33,0x7e,0x00,0x1c,0x00,0x0e,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x38,0x00,0x1e,0x33,0x33,0x1e,0x00,0x00,0x38,0x00,0x33,0x33,0x33,0x7e,0x00,0x00,0x1f,0x00,0x1f,0x33,0x33,0x33,0x00,0x3f,0x00,0x33,0x37,0x3f,0x3b,0x33,0x00,0x3c,0x36,0x36,0x7c,0x00,0x7e,0x00,0x00,0x1c,0x36,0x36,0x1c,0x00,0x3e,0x00,0x00,0x0c,0x00,0x0c,0x06,0x03,0x33,0x1e,0x00,0x00,0x00,0x00,0x3f,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x3f,0x30,0x30,0x00,0x00,0xc3,0x63,0x33,0x7b,0xcc,0x66,0x33,0xf0,0xc3,0x63,0x33,0xdb,0xec,0xf6,0xf3,0xc0,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x00,0x00,0xcc,0x66,0x33,0x66,0xcc,0x00,0x00,0x00,0x33,0x66,0xcc,0x66,0x33,0x00,0x00,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xdb,0xee,0xdb,0x77,0xdb,0xee,0xdb,0x77,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x1f,0x18,0x18,0x18,0x6c,0x6c,0x6c,0x6c,0x6f,0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00,0x7f,0x6c,0x6c,0x6c,0x00,0x00,0x1f,0x18,0x1f,0x18,0x18,0x18,0x6c,0x6c,0x6f,0x60,0x6f,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x7f,0x60,0x6f,0x6c,0x6c,0x6c,0x6c,0x6c,0x6f,0x60,0x7f,0x00,0x00,0x00,0x6c,0x6c,0x6c,0x6c,0x7f,0x00,0x00,0x00,0x18,0x18,0x1f,0x18,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x18,0x18, + 0x18,0x18,0x18,0x18,0xf8,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0xff,0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0xf8,0x18,0x18,0x18,0x6c,0x6c,0x6c,0x6c,0xec,0x6c,0x6c,0x6c,0x6c,0x6c,0xec,0x0c,0xfc,0x00,0x00,0x00,0x00,0x00,0xfc,0x0c,0xec,0x6c,0x6c,0x6c,0x6c,0x6c,0xef,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xef,0x6c,0x6c,0x6c,0x6c,0x6c,0xec,0x0c,0xec,0x6c,0x6c,0x6c,0x00,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x6c,0x6c,0xef,0x00,0xef,0x6c,0x6c,0x6c,0x18,0x18,0xff,0x00,0xff,0x00,0x00,0x00,0x6c,0x6c,0x6c,0x6c,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0xff,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xfc,0x00,0x00,0x00,0x18,0x18,0xf8,0x18,0xf8,0x00,0x00,0x00,0x00,0x00,0xf8,0x18,0xf8,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0xfc,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xff,0x6c,0x6c,0x6c,0x18,0x18,0xff,0x18,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x18,0x18,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6e,0x3b,0x13,0x3b,0x6e,0x00,0x00,0x1e,0x33,0x1f,0x33,0x1f,0x03,0x03,0x00,0x3f,0x33,0x03,0x03,0x03,0x03,0x00,0x00,0x7f,0x36,0x36,0x36,0x36,0x36,0x00,0x3f,0x33,0x06,0x0c,0x06,0x33,0x3f,0x00,0x00,0x00,0x7e,0x1b,0x1b,0x1b,0x0e,0x00,0x00,0x66,0x66,0x66,0x66,0x3e,0x06,0x03,0x00,0x6e,0x3b,0x18,0x18,0x18,0x18,0x00,0x3f,0x0c,0x1e,0x33,0x33,0x1e,0x0c,0x3f,0x1c,0x36,0x63,0x7f,0x63,0x36,0x1c,0x00,0x1c,0x36,0x63,0x63,0x36,0x36,0x77,0x00,0x38,0x0c,0x18,0x3e,0x33,0x33,0x1e,0x00,0x00,0x00,0x7e,0xdb,0xdb,0x7e,0x00,0x00,0x60,0x30,0x7e,0xdb,0xdb,0x7e,0x06,0x03,0x1c,0x06,0x03,0x1f,0x03,0x06,0x1c,0x00,0x1e,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x3f,0x00,0x3f,0x00,0x3f,0x00,0x00,0x0c,0x0c,0x3f,0x0c,0x0c,0x00,0x3f,0x00,0x06,0x0c,0x18,0x0c,0x06,0x00,0x3f,0x00,0x18,0x0c,0x06,0x0c,0x18,0x00,0x3f,0x00,0x70,0xd8,0xd8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x0e,0x0c,0x0c,0x00,0x3f,0x00,0x0c,0x0c,0x00,0x00,0x6e,0x3b,0x00,0x6e,0x3b,0x00,0x00,0x1c,0x36,0x36,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xf0,0x30,0x30,0x30,0x37,0x36,0x3c,0x38,0x1e,0x36,0x36,0x36,0x36,0x00,0x00,0x00,0x0e,0x18,0x0c,0x06,0x1e,0x00,0x00,0x00,0x00,0x00,0x3c,0x3c,0x3c,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + }; + +static void drawTextInternal(u8 *screen, int pitch, int x, int y, + const char *string, bool trans) +{ + screen += y*pitch; + int inc = 2; + switch(systemColorDepth) + { + case 24: + inc = 3; + break; + case 32: + inc = 4; + break; + } + screen += x*inc; + + switch(systemColorDepth) + { + case 16: + { + while(*string) + { + char c = *string++; + u8 *scr = screen; + + u16 mask = ~RGB_LOW_BITS_MASK; + int h, w; + u16 *s = (u16 *)scr; + for (h = 0; h < 8; h++) + { + for (w = 0; w < 8; w++, s++) + { + int on = (fontdata2[(c<<3)+h]>>w)&1; + + if(trans) + { + if(on) + *s = ((0xf) << systemRedShift) + + ((*s & mask) >>1); + } + else + { + if(on) + *s = (0x1f) << systemRedShift; + } + } + scr += pitch; + s = (u16 *)scr; + } + screen += inc*8; + } + } + break; + case 24: + { + while(*string) + { + char c = *string++; + u8 *scr = screen; + + int h, w; + u8 *s = (u8 *)scr; + for (h = 0; h < 8; h++) + { + for (w = 0; w < 8; w++, s+=3) + { + int on = (fontdata2[(c<<3)+h]>>w)&1; + + if(trans) + { + if(on) + { + u32 color = (0x1f) << systemRedShift; + *s = ((color & 255)>>1)+(*s>>1); + *(s+1) = (((color >> 8) & 255)>>1)+(*(s+1)>>1); + *(s+2) = (((color >> 16) & 255)>>1)+(*(s+2)>>1); + } + } + else + { + if(on) + { + u32 color = (0x1f) << systemRedShift; + *s = (color & 255); + *(s+1) = (color >> 8) & 255; + *(s+2) = (color >> 16) & 255; + } + } + } + scr += pitch; + s = (u8 *)scr; + } + screen += inc*8; + } + } + break; + case 32: + { + while(*string) + { + char c = *string++; + u8 *scr = screen; + + int h, w; + u32 mask = 0xfefefe; + u32 *s = (u32 *)scr; + for (h = 0; h < 8; h++) + { + for (w = 0; w < 8; w++, s++) + { + int on = (fontdata2[(c<<3)+h]>>w)&1; + + if(trans) + { + if(on) + *s = ((0xf) << systemRedShift) + ((*s & mask)>>1); + } + else + { + if(on) + *s = (0x1f) << systemRedShift; + } + } + scr += pitch; + s = (u32 *)scr; + } + screen += inc*8; + } + } + break; + } +} + +void drawText(u8 *screen, int pitch, int x, int y, const char *string) +{ + drawTextInternal(screen, pitch, x, y, string, false); +} + +void drawTextTransp(u8 *screen, int pitch, int x, int y, const char *string) +{ + drawTextInternal(screen, pitch, x, y, string, true); +} diff --git a/source/vba/Text.h b/source/vba/Text.h new file mode 100644 index 00000000..cbfe8be8 --- /dev/null +++ b/source/vba/Text.h @@ -0,0 +1,21 @@ +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +extern void drawText(u8 *, int, int, int, const char *); +extern void drawTextTransp(u8 *, int, int, int, const char *); diff --git a/source/vba/Util.cpp b/source/vba/Util.cpp index d9f6a8a1..2823e541 100644 --- a/source/vba/Util.cpp +++ b/source/vba/Util.cpp @@ -1,1020 +1,1196 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004-2006 Forgotten and the VBA development team -// Copyright (C) 2007-2008 VBA-M development team and Shay Green -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include -#include -#include - -#ifndef NO_PNG -extern "C" { -#include -} -#endif - -#include "System.h" -#include "NLS.h" -#include "Util.h" -#include "Flash.h" -#include "agb/GBA.h" -#include "Globals.h" -#include "RTC.h" -#include "Port.h" - -extern "C" { -#include "memgzio.h" -} - -#ifndef _MSC_VER -#define _stricmp strcasecmp -#endif // ! _MSC_VER - -extern int systemColorDepth; -extern int systemRedShift; -extern int systemGreenShift; -extern int systemBlueShift; - -extern u16 systemColorMap16[0x10000]; -//extern u32 systemColorMap32[0x10000]; -extern u32 *systemColorMap32; - -static int (*utilGzWriteFunc)(gzFile, const voidp, unsigned int) = NULL; -static int (*utilGzReadFunc)(gzFile, voidp, unsigned int) = NULL; -static int (*utilGzCloseFunc)(gzFile) = NULL; -static z_off_t (*utilGzSeekFunc)(gzFile, z_off_t, int) = NULL; - -bool utilWritePNGFile(const char *fileName, int w, int h, u8 *pix) -{ -#ifndef NO_PNG - u8 writeBuffer[512 * 3]; - - FILE *fp = fopen(fileName,"wb"); - - if(!fp) { - systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), fileName); - return false; - } - - png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, - NULL, - NULL, - NULL); - if(!png_ptr) { - fclose(fp); - return false; - } - - png_infop info_ptr = png_create_info_struct(png_ptr); - - if(!info_ptr) { - png_destroy_write_struct(&png_ptr,NULL); - fclose(fp); - return false; - } - - if(setjmp(png_ptr->jmpbuf)) { - png_destroy_write_struct(&png_ptr,NULL); - fclose(fp); - return false; - } - - png_init_io(png_ptr,fp); - - png_set_IHDR(png_ptr, - info_ptr, - w, - h, - 8, - PNG_COLOR_TYPE_RGB, - PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_DEFAULT, - PNG_FILTER_TYPE_DEFAULT); - - png_write_info(png_ptr,info_ptr); - - u8 *b = writeBuffer; - - int sizeX = w; - int sizeY = h; - - switch(systemColorDepth) { - case 16: - { - u16 *p = (u16 *)(pix+(w+2)*2); // skip first black line - for(int y = 0; y < sizeY; y++) { - for(int x = 0; x < sizeX; x++) { - u16 v = *p++; - - *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R - *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G - *b++ = ((v >> systemBlueShift) & 0x01f) << 3; // B - } - p++; // skip black pixel for filters - p++; // skip black pixel for filters - png_write_row(png_ptr,writeBuffer); - - b = writeBuffer; - } - } - break; - case 24: - { - u8 *pixU8 = (u8 *)pix; - for(int y = 0; y < sizeY; y++) { - for(int x = 0; x < sizeX; x++) { - if(systemRedShift < systemBlueShift) { - *b++ = *pixU8++; // R - *b++ = *pixU8++; // G - *b++ = *pixU8++; // B - } else { - int blue = *pixU8++; - int green = *pixU8++; - int red = *pixU8++; - - *b++ = red; - *b++ = green; - *b++ = blue; - } - } - png_write_row(png_ptr,writeBuffer); - - b = writeBuffer; - } - } - break; - case 32: - { - u32 *pixU32 = (u32 *)(pix+4*(w+1)); - for(int y = 0; y < sizeY; y++) { - for(int x = 0; x < sizeX; x++) { - u32 v = *pixU32++; - - *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R - *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G - *b++ = ((v >> systemBlueShift) & 0x001f) << 3; // B - } - pixU32++; - - png_write_row(png_ptr,writeBuffer); - - b = writeBuffer; - } - } - break; - } - - png_write_end(png_ptr, info_ptr); - - png_destroy_write_struct(&png_ptr, &info_ptr); - - fclose(fp); - - return true; -#else - return false; -#endif -} - -void utilPutDword(u8 *p, u32 value) -{ - *p++ = value & 255; - *p++ = (value >> 8) & 255; - *p++ = (value >> 16) & 255; - *p = (value >> 24) & 255; -} - -void utilPutWord(u8 *p, u16 value) -{ - *p++ = value & 255; - *p = (value >> 8) & 255; -} - -bool utilWriteBMPFile(const char *fileName, int w, int h, u8 *pix) -{ - u8 writeBuffer[512 * 3]; - - FILE *fp = fopen(fileName,"wb"); - - if(!fp) { - systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), fileName); - return false; - } - - struct { - u8 ident[2]; - u8 filesize[4]; - u8 reserved[4]; - u8 dataoffset[4]; - u8 headersize[4]; - u8 width[4]; - u8 height[4]; - u8 planes[2]; - u8 bitsperpixel[2]; - u8 compression[4]; - u8 datasize[4]; - u8 hres[4]; - u8 vres[4]; - u8 colors[4]; - u8 importantcolors[4]; - // u8 pad[2]; - } bmpheader; - memset(&bmpheader, 0, sizeof(bmpheader)); - - bmpheader.ident[0] = 'B'; - bmpheader.ident[1] = 'M'; - - u32 fsz = sizeof(bmpheader) + w*h*3; - utilPutDword(bmpheader.filesize, fsz); - utilPutDword(bmpheader.dataoffset, 0x36); - utilPutDword(bmpheader.headersize, 0x28); - utilPutDword(bmpheader.width, w); - utilPutDword(bmpheader.height, h); - utilPutDword(bmpheader.planes, 1); - utilPutDword(bmpheader.bitsperpixel, 24); - utilPutDword(bmpheader.datasize, 3*w*h); - - fwrite(&bmpheader, 1, sizeof(bmpheader), fp); - - u8 *b = writeBuffer; - - int sizeX = w; - int sizeY = h; - - switch(systemColorDepth) { - case 16: - { - u16 *p = (u16 *)(pix+(w+2)*(h)*2); // skip first black line - for(int y = 0; y < sizeY; y++) { - for(int x = 0; x < sizeX; x++) { - u16 v = *p++; - - *b++ = ((v >> systemBlueShift) & 0x01f) << 3; // B - *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G - *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R - } - p++; // skip black pixel for filters - p++; // skip black pixel for filters - p -= 2*(w+2); - fwrite(writeBuffer, 1, 3*w, fp); - - b = writeBuffer; - } - } - break; - case 24: - { - u8 *pixU8 = (u8 *)pix+3*w*(h-1); - for(int y = 0; y < sizeY; y++) { - for(int x = 0; x < sizeX; x++) { - if(systemRedShift > systemBlueShift) { - *b++ = *pixU8++; // B - *b++ = *pixU8++; // G - *b++ = *pixU8++; // R - } else { - int red = *pixU8++; - int green = *pixU8++; - int blue = *pixU8++; - - *b++ = blue; - *b++ = green; - *b++ = red; - } - } - pixU8 -= 2*3*w; - fwrite(writeBuffer, 1, 3*w, fp); - - b = writeBuffer; - } - } - break; - case 32: - { - u32 *pixU32 = (u32 *)(pix+4*(w+1)*(h)); - for(int y = 0; y < sizeY; y++) { - for(int x = 0; x < sizeX; x++) { - u32 v = *pixU32++; - - *b++ = ((v >> systemBlueShift) & 0x001f) << 3; // B - *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G - *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R - } - pixU32++; - pixU32 -= 2*(w+1); - - fwrite(writeBuffer, 1, 3*w, fp); - - b = writeBuffer; - } - } - break; - } - - fclose(fp); - - return true; -} - -static int utilReadInt2(FILE *f) -{ - int res = 0; - int c = fgetc(f); - if(c == EOF) - return -1; - res = c; - c = fgetc(f); - if(c == EOF) - return -1; - return c + (res<<8); -} - -static int utilReadInt3(FILE *f) -{ - int res = 0; - int c = fgetc(f); - if(c == EOF) - return -1; - res = c; - c = fgetc(f); - if(c == EOF) - return -1; - res = c + (res<<8); - c = fgetc(f); - if(c == EOF) - return -1; - return c + (res<<8); -} - -void utilApplyIPS(const char *ips, u8 **r, int *s) -{ - // from the IPS spec at http://zerosoft.zophar.net/ips.htm - FILE *f = fopen(ips, "rb"); - if(!f) - return; - u8 *rom = *r; - int size = *s; - if(fgetc(f) == 'P' && - fgetc(f) == 'A' && - fgetc(f) == 'T' && - fgetc(f) == 'C' && - fgetc(f) == 'H') { - int b; - int offset; - int len; - for(;;) { - // read offset - offset = utilReadInt3(f); - // if offset == EOF, end of patch - if(offset == 0x454f46) - break; - // read length - len = utilReadInt2(f); - if(!len) { - // len == 0, RLE block - len = utilReadInt2(f); - // byte to fill - int c = fgetc(f); - if(c == -1) - break; - b = (u8)c; - } else - b= -1; - // check if we need to reallocate our ROM - if((offset + len) >= size) { - size *= 2; - rom = (u8 *)realloc(rom, size); - *r = rom; - *s = size; - } - if(b == -1) { - // normal block, just read the data - if(fread(&rom[offset], 1, len, f) != (uint)len) - break; - } else { - // fill the region with the given byte - while(len--) { - rom[offset++] = b; - } - } - } - } - // close the file - fclose(f); -} - -//TODO: Modify ZSNES code for this -void utilApplyUPS(const char *ips, u8 **r, int *s) -{ -} - -extern bool cpuIsMultiBoot; - -bool utilIsGBAImage(const char * file) -{ - cpuIsMultiBoot = false; - if(strlen(file) > 4) { - const char * p = strrchr(file,'.'); - - if(p != NULL) { - if((_stricmp(p, ".agb") == 0) || - (_stricmp(p, ".gba") == 0) || - (_stricmp(p, ".bin") == 0) || - (_stricmp(p, ".elf") == 0)) - return true; - if(_stricmp(p, ".mb") == 0) { - cpuIsMultiBoot = true; - return true; - } - } - } - - return false; -} - -bool utilIsGBImage(const char * file) -{ - if(strlen(file) > 4) { - const char * p = strrchr(file,'.'); - - if(p != NULL) { - if((_stricmp(p, ".dmg") == 0) || - (_stricmp(p, ".gb") == 0) || - (_stricmp(p, ".gbc") == 0) || - (_stricmp(p, ".cgb") == 0) || - (_stricmp(p, ".sgb") == 0)) - return true; - } - } - - return false; -} - -bool utilIsZipFile(const char *file) -{ - if(strlen(file) > 4) - { - char * p = strrchr(file,'.'); - - if(p != NULL) - { - if(_stricmp(p, ".zip") == 0) - return true; - } - } - - return false; -} -bool utilIsGzipFile(const char *file) -{ - if(strlen(file) > 3) { - const char * p = strrchr(file,'.'); - - if(p != NULL) { - if(_stricmp(p, ".gz") == 0) - return true; - if(_stricmp(p, ".z") == 0) - return true; - } - } - - return false; -} - -// strip .gz or .z off end -void utilStripDoubleExtension(const char *file, char *buffer) -{ - if(buffer != file) // allows conversion in place - strcpy(buffer, file); - - if(utilIsGzipFile(file)) { - char *p = strrchr(buffer, '.'); - - if(p) - *p = 0; - } -} - -static bool utilIsImage(const char *file) -{ - return utilIsGBAImage(file) || utilIsGBImage(file); -} - - -IMAGE_TYPE utilFindType(const char *file) -{ - char buffer[2048]; - - if(utilIsZipFile(file)) - { - unzFile unz = unzOpen(file); - - if(unz == NULL) - { - systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), file); - return IMAGE_UNKNOWN; - } - - int r = unzGoToFirstFile(unz); - - if(r != UNZ_OK) - - { - unzClose(unz); - systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); - return IMAGE_UNKNOWN; - - } - - IMAGE_TYPE found = IMAGE_UNKNOWN; - - unz_file_info info; - - while(true) - - { - r = unzGetCurrentFileInfo(unz, - &info, - buffer, - sizeof(buffer), - NULL, - 0, - NULL, - 0); - - if(r != UNZ_OK) - - - { - unzClose(unz); - systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); - - - return IMAGE_UNKNOWN; - } - - if(utilIsGBAImage(buffer)) - { - found = IMAGE_GBA; - break; - } - - if(utilIsGBImage(buffer)) - { - found = IMAGE_GB; - break; - } - - r = unzGoToNextFile(unz); - - if(r != UNZ_OK) - break; - } - unzClose(unz); - - if(found == IMAGE_UNKNOWN) - { - systemMessage(MSG_NO_IMAGE_ON_ZIP, - N_("No image found on ZIP file %s"), file); - return found; - } - return found; - } - else - { - if(utilIsGzipFile(file)) - utilStripDoubleExtension(file, buffer); - else - strcpy(buffer, file); - - if(utilIsGBAImage(buffer)) - return IMAGE_GBA; - if(utilIsGBImage(buffer)) - return IMAGE_GB; - } - return IMAGE_UNKNOWN; -} - -int utilGetSize(int size) -{ - int res = 1; - while(res < size) - res <<= 1; - return res; -} - -static u8 *utilLoadFromZip(const char *file, - - bool (*accept)(const char *), - u8 *data, - int &size) -{ - - char buffer[2048]; - - unzFile unz = unzOpen(file); - - if(unz == NULL) - { - systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), file); - return NULL; - } - int r = unzGoToFirstFile(unz); - - if(r != UNZ_OK) - { - unzClose(unz); - systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); - return NULL; - } - - bool found = false; - - unz_file_info info; - - while(true) - { - r = unzGetCurrentFileInfo(unz, - &info, - buffer, - sizeof(buffer), - NULL, - 0, - NULL, - 0); - - if(r != UNZ_OK) - { - unzClose(unz); - systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); - return NULL; - } - - if(accept(buffer)) - { - found = true; - break; - } - - r = unzGoToNextFile(unz); - - if(r != UNZ_OK) - break; - } - - if(!found) - { - unzClose(unz); - systemMessage(MSG_NO_IMAGE_ON_ZIP, - N_("No image found on ZIP file %s"), file); - return NULL; - } - - int fileSize = info.uncompressed_size; - if(size == 0) - size = fileSize; - r = unzOpenCurrentFile(unz); - - if(r != UNZ_OK) - { - unzClose(unz); - systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), buffer); - return NULL; - } - - u8 *image = data; - - if(image == NULL) - { - image = (u8 *)malloc(utilGetSize(size)); - if(image == NULL) - { - unzCloseCurrentFile(unz); - unzClose(unz); - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "data"); - return NULL; - } - size = fileSize; - } - int read = fileSize <= size ? fileSize : size; - r = unzReadCurrentFile(unz, - image, - read); - - unzCloseCurrentFile(unz); - unzClose(unz); - - if(r != (int)read) - { - systemMessage(MSG_ERROR_READING_IMAGE, - N_("Error reading image %s"), buffer); - if(data == NULL) - free(image); - return NULL; - } - - size = fileSize; - - return image; -} - -static u8 *utilLoadGzipFile(const char *file, - bool (*accept)(const char *), - u8 *data, - int &size) -{ - FILE* f = fopen(file, "rb"); - - if(f == NULL) - { - systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), file); - - - return NULL; - } - - fseek(f, -4, SEEK_END); - int fileSize = fgetc(f) | (fgetc(f) << 8) | (fgetc(f) << 16) | (fgetc(f) << 24); - fclose(f); - - - if(size == 0) - size = fileSize; - - gzFile gz = gzopen(file, "rb"); - - if(gz == NULL) - { - // should not happen, but who knows? - systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), file); - return NULL; - } - - u8 *image = data; - - if(image == NULL) - { - image = (u8 *)malloc(utilGetSize(size)); - if(image == NULL) - { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "data"); - fclose(f); - return NULL; - } - size = fileSize; - } - int read = fileSize <= size ? fileSize : size; - int r = gzread(gz, image, read); - gzclose(gz); - - if(r != (int)read) - { - systemMessage(MSG_ERROR_READING_IMAGE, - N_("Error reading image %s"), file); - if(data == NULL) - free(image); - return NULL; - } - - size = fileSize; - - return image; -} - -u8 *utilLoad(const char *file, - bool (*accept)(const char *), - u8 *data, - int &size) -{ - if(utilIsZipFile(file)) - { - return utilLoadFromZip(file, accept, data, size); - } - if(utilIsGzipFile(file)) - { - return utilLoadGzipFile(file, accept, data, size); - } - - u8 *image = data; - - FILE* f = fopen(file, "rb"); - - if(!f) - { - systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), file); - return NULL; - } - - fseek(f,0,SEEK_END); - int fileSize = ftell(f); - - fseek(f,0,SEEK_SET); - if(size == 0) - size = fileSize; - - if(image == NULL) - { - - - image = (u8 *)malloc(utilGetSize(size)); - if(image == NULL) - { - - - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "data"); - fclose(f); - return NULL; - } - size = fileSize; - } - int read = fileSize <= size ? fileSize : size; - int r = fread(image, 1, read, f); - fclose(f); - - if(r != (int)read) - { - - - - - - systemMessage(MSG_ERROR_READING_IMAGE, - N_("Error reading image %s"), file); - if(data == NULL) - free(image); - return NULL; - } - - size = fileSize; - - return image; -} - -void utilWriteInt(gzFile gzFile, int i) -{ - utilGzWrite(gzFile, &i, sizeof(int)); -} - -int utilReadInt(gzFile gzFile) -{ - int i = 0; - utilGzRead(gzFile, &i, sizeof(int)); - return i; -} - -void utilReadData(gzFile gzFile, variable_desc* data) -{ - while(data->address) { - utilGzRead(gzFile, data->address, data->size); - data++; - } -} - -void utilReadDataSkip(gzFile gzFile, variable_desc* data) -{ - while(data->address) { - utilGzSeek(gzFile, data->size, SEEK_CUR); - data++; - } -} - -void utilWriteData(gzFile gzFile, variable_desc *data) -{ - while(data->address) { - utilGzWrite(gzFile, data->address, data->size); - data++; - } -} - -gzFile utilGzOpen(const char *file, const char *mode) -{ - utilGzWriteFunc = (int (*)(void *,void * const, unsigned int))gzwrite; - utilGzReadFunc = gzread; - utilGzCloseFunc = gzclose; - utilGzSeekFunc = gzseek; - - return gzopen(file, mode); -} - -gzFile utilMemGzOpen(char *memory, int available, const char *mode) -{ - utilGzWriteFunc = memgzwrite; - utilGzReadFunc = memgzread; - utilGzCloseFunc = memgzclose; - - return memgzopen(memory, available, mode); -} - -int utilGzWrite(gzFile file, const voidp buffer, unsigned int len) -{ - return utilGzWriteFunc(file, buffer, len); -} - -int utilGzRead(gzFile file, voidp buffer, unsigned int len) -{ - return utilGzReadFunc(file, buffer, len); -} - -int utilGzClose(gzFile file) -{ - return utilGzCloseFunc(file); -} - -z_off_t utilGzSeek(gzFile file, z_off_t offset, int whence) -{ - return utilGzSeekFunc(file, offset, whence); -} - -long utilGzMemTell(gzFile file) -{ - return memtell(file); -} - -void utilGBAFindSave(const u8 *data, const int size) -{ - u32 *p = (u32 *)data; - u32 *end = (u32 *)(data + size); - int saveType = 0; - int flashSize = 0x10000; - bool rtcFound = false; - - while(p < end) { - u32 d = READ32LE(p); - - if(d == 0x52504545) { - if(memcmp(p, "EEPROM_", 7) == 0) { - if(saveType == 0) - saveType = 3; - } - } else if (d == 0x4D415253) { - if(memcmp(p, "SRAM_", 5) == 0) { - if(saveType == 0) - saveType = 1; - } - } else if (d == 0x53414C46) { - if(memcmp(p, "FLASH1M_", 8) == 0) { - if(saveType == 0) { - saveType = 2; - flashSize = 0x20000; - } - } else if(memcmp(p, "FLASH", 5) == 0) { - if(saveType == 0) { - saveType = 2; - flashSize = 0x10000; - } - } - } else if (d == 0x52494953) { - if(memcmp(p, "SIIRTC_V", 8) == 0) - rtcFound = true; - } - p++; - } - // if no matches found, then set it to NONE - if(saveType == 0) { - saveType = 5; - } - rtcEnable(rtcFound); - cpuSaveType = saveType; - flashSetSize(flashSize); -} - -void utilUpdateSystemColorMaps() -{ - switch(systemColorDepth) { - case 16: - { - for(int i = 0; i < 0x10000; i++) { - systemColorMap16[i] = ((i & 0x1f) << systemRedShift) | - (((i & 0x3e0) >> 5) << systemGreenShift) | - (((i & 0x7c00) >> 10) << systemBlueShift); - } - } - break; - case 24: - case 32: - { - for(int i = 0; i < 0x10000; i++) { - systemColorMap32[i] = ((i & 0x1f) << systemRedShift) | - (((i & 0x3e0) >> 5) << systemGreenShift) | - (((i & 0x7c00) >> 10) << systemBlueShift); - } - } - break; - } -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "sdfileio.h" +#include +#include +#include +#include + +extern "C" + { +#include + } + +#if 0 +#include "unrarlib.h" +#endif + +#include "System.h" +#include "NLS.h" +#include "Util.h" +#include "Flash.h" +#include "GBA.h" +#include "Globals.h" +#include "RTC.h" +#include "Port.h" + + +extern "C" + { +#include "memgzio.h" + } + +#ifndef _MSC_VER +#define _stricmp strcasecmp +#endif // ! _MSC_VER + +static int (*utilGzWriteFunc)(gzFile, const voidp, unsigned int) = NULL; +static int (*utilGzReadFunc)(gzFile, voidp, unsigned int) = NULL; +static int (*utilGzCloseFunc)(gzFile) = NULL; + +bool utilWritePNGFile(const char *fileName, int w, int h, u8 *pix) +{ +#if 0 + u8 writeBuffer[512 * 3]; + + FILE* fp = gen_fopen(fileName,"wb"); + + if(!fp) + { + systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), fileName); + return false; + } + + png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + NULL, + NULL, + NULL); + if(!png_ptr) + { + gen_fclose(fp); + return false; + } + + png_infop info_ptr = png_create_info_struct(png_ptr); + + if(!info_ptr) + { + png_destroy_write_struct(&png_ptr,NULL); + gen_fclose(fp); + return false; + } + + if(setjmp(png_ptr->jmpbuf)) + { + png_destroy_write_struct(&png_ptr,NULL); + gen_fclose(fp); + return false; + } + + png_init_io(png_ptr,fp); + + png_set_IHDR(png_ptr, + info_ptr, + w, + h, + 8, + PNG_COLOR_TYPE_RGB, + PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, + PNG_FILTER_TYPE_DEFAULT); + + png_write_info(png_ptr,info_ptr); + + u8 *b = writeBuffer; + + int sizeX = w; + int sizeY = h; + + switch(systemColorDepth) + { + case 16: + { + u16 *p = (u16 *)(pix+(w+2)*2); // skip first black line + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + u16 v = *p++; + + *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R + *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G + *b++ = ((v >> systemBlueShift) & 0x01f) << 3; // B + } + p++; // skip black pixel for filters + p++; // skip black pixel for filters + png_write_row(png_ptr,writeBuffer); + + b = writeBuffer; + } + } + break; + case 24: + { + u8 *pixU8 = (u8 *)pix; + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + if(systemRedShift < systemBlueShift) + { + *b++ = *pixU8++; // R + *b++ = *pixU8++; // G + *b++ = *pixU8++; // B + } + else + { + int blue = *pixU8++; + int green = *pixU8++; + int red = *pixU8++; + + *b++ = red; + *b++ = green; + *b++ = blue; + } + } + png_write_row(png_ptr,writeBuffer); + + b = writeBuffer; + } + } + break; + case 32: + { + u32 *pixU32 = (u32 *)(pix+4*(w+1)); + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + u32 v = *pixU32++; + + *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R + *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G + *b++ = ((v >> systemBlueShift) & 0x001f) << 3; // B + } + pixU32++; + + png_write_row(png_ptr,writeBuffer); + + b = writeBuffer; + } + } + break; + } + + png_write_end(png_ptr, info_ptr); + + png_destroy_write_struct(&png_ptr, &info_ptr); + + gen_fclose(fp); + +#endif + return true; +} + +void utilPutDword(u8 *p, u32 value) +{ + *p++ = value & 255; + *p++ = (value >> 8) & 255; + *p++ = (value >> 16) & 255; + *p = (value >> 24) & 255; +} + +void utilPutWord(u8 *p, u16 value) +{ + *p++ = value & 255; + *p = (value >> 8) & 255; +} + +void utilWriteBMP(char *buf, int w, int h, u8 *pix) +{ + u8 *b = (u8 *)buf; + + int sizeX = w; + int sizeY = h; + + switch(systemColorDepth) + { + case 16: + { + u16 *p = (u16 *)(pix+(w+2)*(h)*2); // skip first black line + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + u16 v = *p++; + + *b++ = ((v >> systemBlueShift) & 0x01f) << 3; // B + *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G + *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R + } + p++; // skip black pixel for filters + p++; // skip black pixel for filters + p -= 2*(w+2); + } + } + break; + case 24: + { + u8 *pixU8 = (u8 *)pix+3*w*(h-1); + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + if(systemRedShift > systemBlueShift) + { + *b++ = *pixU8++; // B + *b++ = *pixU8++; // G + *b++ = *pixU8++; // R + } + else + { + int red = *pixU8++; + int green = *pixU8++; + int blue = *pixU8++; + + *b++ = blue; + *b++ = green; + *b++ = red; + } + } + pixU8 -= 2*3*w; + } + } + break; + case 32: + { + u32 *pixU32 = (u32 *)(pix+4*(w+1)*(h)); + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + u32 v = *pixU32++; + + *b++ = ((v >> systemBlueShift) & 0x001f) << 3; // B + *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G + *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R + } + pixU32++; + pixU32 -= 2*(w+1); + } + } + break; + } +} + +bool utilWriteBMPFile(const char *fileName, int w, int h, u8 *pix) +{ + u8 writeBuffer[512 * 3]; + + FILE* fp = gen_fopen(fileName,"wb"); + + if(!fp) + { + systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), fileName); + return false; + } + + struct + { + u8 ident[2]; + u8 filesize[4]; + u8 reserved[4]; + u8 dataoffset[4]; + u8 headersize[4]; + u8 width[4]; + u8 height[4]; + u8 planes[2]; + u8 bitsperpixel[2]; + u8 compression[4]; + u8 datasize[4]; + u8 hres[4]; + u8 vres[4]; + u8 colors[4]; + u8 importantcolors[4]; + // u8 pad[2]; + } + bmpheader; + memset(&bmpheader, 0, sizeof(bmpheader)); + + bmpheader.ident[0] = 'B'; + bmpheader.ident[1] = 'M'; + + u32 fsz = sizeof(bmpheader) + w*h*3; + utilPutDword(bmpheader.filesize, fsz); + utilPutDword(bmpheader.dataoffset, 0x36); + utilPutDword(bmpheader.headersize, 0x28); + utilPutDword(bmpheader.width, w); + utilPutDword(bmpheader.height, h); + utilPutDword(bmpheader.planes, 1); + utilPutDword(bmpheader.bitsperpixel, 24); + utilPutDword(bmpheader.datasize, 3*w*h); + + gen_fwrite(&bmpheader, 1, sizeof(bmpheader), fp); + + u8 *b = writeBuffer; + + int sizeX = w; + int sizeY = h; + + switch(systemColorDepth) + { + case 16: + { + u16 *p = (u16 *)(pix+(w+2)*(h)*2); // skip first black line + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + u16 v = *p++; + + *b++ = ((v >> systemBlueShift) & 0x01f) << 3; // B + *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G + *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R + } + p++; // skip black pixel for filters + p++; // skip black pixel for filters + p -= 2*(w+2); + gen_fwrite(writeBuffer, 1, 3*w, fp); + + b = writeBuffer; + } + } + break; + case 24: + { + u8 *pixU8 = (u8 *)pix+3*w*(h-1); + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + if(systemRedShift > systemBlueShift) + { + *b++ = *pixU8++; // B + *b++ = *pixU8++; // G + *b++ = *pixU8++; // R + } + else + { + int red = *pixU8++; + int green = *pixU8++; + int blue = *pixU8++; + + *b++ = blue; + *b++ = green; + *b++ = red; + } + } + pixU8 -= 2*3*w; + gen_fwrite(writeBuffer, 1, 3*w, fp); + + b = writeBuffer; + } + } + break; + case 32: + { + u32 *pixU32 = (u32 *)(pix+4*(w+1)*(h)); + for(int y = 0; y < sizeY; y++) + { + for(int x = 0; x < sizeX; x++) + { + u32 v = *pixU32++; + + *b++ = ((v >> systemBlueShift) & 0x001f) << 3; // B + *b++ = ((v >> systemGreenShift) & 0x001f) << 3; // G + *b++ = ((v >> systemRedShift) & 0x001f) << 3; // R + } + pixU32++; + pixU32 -= 2*(w+1); + + gen_fwrite(writeBuffer, 1, 3*w, fp); + + b = writeBuffer; + } + } + break; + } + + gen_fclose(fp); + + return true; +} + +static int utilReadInt2(FILE* f) +{ + int res = 0; + int c = gen_fgetc(f); + if(c == EOF) + return -1; + res = c; + c = gen_fgetc(f); + if(c == EOF) + return -1; + return c + (res<<8); +} + +static int utilReadInt3(FILE* f) +{ + int res = 0; + int c = gen_fgetc(f); + if(c == EOF) + return -1; + res = c; + c = gen_fgetc(f); + if(c == EOF) + return -1; + res = c + (res<<8); + c = gen_fgetc(f); + if(c == EOF) + return -1; + return c + (res<<8); +} + +void utilApplyIPS(const char *ips, u8 **r, int *s) +{ + // from the IPS spec at http://zerosoft.zophar.net/ips.htm + FILE* f = gen_fopen(ips, "rb"); + if(!f) + return; + u8 *rom = *r; + int size = *s; + if(gen_fgetc(f) == 'P' && + gen_fgetc(f) == 'A' && + gen_fgetc(f) == 'T' && + gen_fgetc(f) == 'C' && + gen_fgetc(f) == 'H') + { + int b; + int offset; + int len; + for(;;) + { + // read offset + offset = utilReadInt3(f); + // if offset == EOF, end of patch + if(offset == 0x454f46) + break; + // read length + len = utilReadInt2(f); + if(!len) + { + // len == 0, RLE block + len = utilReadInt2(f); + // byte to fill + int c = gen_fgetc(f); + if(c == -1) + break; + b = (u8)c; + } + else + b= -1; + // check if we need to reallocate our ROM + if((offset + len) >= size) + { + size *= 2; + rom = (u8 *)realloc(rom, size); + *r = rom; + *s = size; + } + if(b == -1) + { + // normal block, just read the data + //if(gen_fread(&rom[offset], 1, len, f) != (size_t)len) + if(gen_fread(&rom[offset], 1, len, f) != (int)len) + break; + } + else + { + // fill the region with the given byte + while(len--) + { + rom[offset++] = b; + } + } + } + } + // close the file + gen_fclose(f); +} + +extern bool cpuIsMultiBoot; + +bool utilIsGBAImage(const char * file) +{ + cpuIsMultiBoot = false; + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".gba") == 0) + return true; + if(_stricmp(p, ".agb") == 0) + return true; + if(_stricmp(p, ".bin") == 0) + return true; + if(_stricmp(p, ".elf") == 0) + return true; + if(_stricmp(p, ".mb") == 0) + { + cpuIsMultiBoot = true; + return true; + } + } + } + + return false; +} + +bool utilIsGBImage(const char * file) +{ + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".gb") == 0) + return true; + if(_stricmp(p, ".gbc") == 0) + return true; + if(_stricmp(p, ".cgb") == 0) + return true; + if(_stricmp(p, ".sgb") == 0) + return true; + } + } + + return false; +} + +bool utilIsZipFile(const char *file) +{ + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".zip") == 0) + return true; + } + } + + return false; +} + +#if 0 +bool utilIsRarFile(const char *file) +{ + if(strlen(file) > 4) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".rar") == 0) + return true; + } + } + + return false; +} +#endif + +bool utilIsGzipFile(const char *file) +{ + if(strlen(file) > 3) + { + char * p = strrchr(file,'.'); + + if(p != NULL) + { + if(_stricmp(p, ".gz") == 0) + return true; + if(_stricmp(p, ".z") == 0) + return true; + } + } + + return false; +} + +void utilGetBaseName(const char *file, char *buffer) +{ + strcpy(buffer, file); + + if(utilIsGzipFile(file)) + { + char *p = strrchr(buffer, '.'); + + if(p) + *p = 0; + } +} + +IMAGE_TYPE utilFindType(const char *file) +{ + char buffer[2048]; + + if(utilIsZipFile(file)) + { + unzFile unz = unzOpen(file); + + if(unz == NULL) + { + systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), file); + return IMAGE_UNKNOWN; + } + + int r = unzGoToFirstFile(unz); + + if(r != UNZ_OK) + { + unzClose(unz); + systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); + return IMAGE_UNKNOWN; + } + + IMAGE_TYPE found = IMAGE_UNKNOWN; + + unz_file_info info; + + while(true) + { + r = unzGetCurrentFileInfo(unz, + &info, + buffer, + sizeof(buffer), + NULL, + 0, + NULL, + 0); + + if(r != UNZ_OK) + { + unzClose(unz); + systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); + return IMAGE_UNKNOWN; + } + + if(utilIsGBAImage(buffer)) + { + found = IMAGE_GBA; + break; + } + + if(utilIsGBImage(buffer)) + { + found = IMAGE_GB; + break; + } + + r = unzGoToNextFile(unz); + + if(r != UNZ_OK) + break; + } + unzClose(unz); + + if(found == IMAGE_UNKNOWN) + { + systemMessage(MSG_NO_IMAGE_ON_ZIP, + N_("No image found on ZIP file %s"), file); + return found; + } + return found; +#if 0 + } + else if(utilIsRarFile(file)) + { + IMAGE_TYPE found = IMAGE_UNKNOWN; + + ArchiveList_struct *rarList = NULL; + if(urarlib_list((void *)file, (ArchiveList_struct *)&rarList)) + { + ArchiveList_struct *p = rarList; + + while(p) + { + if(utilIsGBAImage(p->item.Name)) + { + found = IMAGE_GBA; + break; + } + + if(utilIsGBImage(p->item.Name)) + { + found = IMAGE_GB; + break; + } + p = p->next; + } + + urarlib_freelist(rarList); + } + return found; +#endif + } + else + { + if(utilIsGzipFile(file)) + utilGetBaseName(file, buffer); + else + strcpy(buffer, file); + + if(utilIsGBAImage(buffer)) + return IMAGE_GBA; + if(utilIsGBImage(buffer)) + return IMAGE_GB; + } + return IMAGE_UNKNOWN; +} + +static int utilGetSize(int size) +{ + int res = 1; + while(res < size) + res <<= 1; + return res; +} + +static u8 *utilLoadFromZip(const char *file, + bool (*accept)(const char *), + u8 *data, + int &size) +{ + char buffer[2048]; + + unzFile unz = unzOpen(file); + + if(unz == NULL) + { + systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), file); + return NULL; + } + int r = unzGoToFirstFile(unz); + + if(r != UNZ_OK) + { + unzClose(unz); + systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); + return NULL; + } + + bool found = false; + + unz_file_info info; + + while(true) + { + r = unzGetCurrentFileInfo(unz, + &info, + buffer, + sizeof(buffer), + NULL, + 0, + NULL, + 0); + + if(r != UNZ_OK) + { + unzClose(unz); + systemMessage(MSG_BAD_ZIP_FILE, N_("Bad ZIP file %s"), file); + return NULL; + } + + if(accept(buffer)) + { + found = true; + break; + } + + r = unzGoToNextFile(unz); + + if(r != UNZ_OK) + break; + } + + if(!found) + { + unzClose(unz); + systemMessage(MSG_NO_IMAGE_ON_ZIP, + N_("No image found on ZIP file %s"), file); + return NULL; + } + + int fileSize = info.uncompressed_size; + if(size == 0) + size = fileSize; + r = unzOpenCurrentFile(unz); + + if(r != UNZ_OK) + { + unzClose(unz); + systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), buffer); + return NULL; + } + + u8 *image = data; + + if(image == NULL) + { + image = (u8 *)malloc(utilGetSize(size)); + if(image == NULL) + { + unzCloseCurrentFile(unz); + unzClose(unz); + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "data"); + return NULL; + } + size = fileSize; + } + int read = fileSize <= size ? fileSize : size; + r = unzReadCurrentFile(unz, + image, + read); + + unzCloseCurrentFile(unz); + unzClose(unz); + + if(r != (int)read) + { + systemMessage(MSG_ERROR_READING_IMAGE, + N_("Error reading image %s"), buffer); + if(data == NULL) + free(image); + return NULL; + } + + size = fileSize; + + return image; +} + +static u8 *utilLoadGzipFile(const char *file, + bool (*accept)(const char *), + u8 *data, + int &size) +{ + FILE* f = gen_fopen(file, "rb"); + + if(f == NULL) + { + systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), file); + return NULL; + } + + gen_fseek(f, -4, SEEK_END); + int fileSize = gen_fgetc(f) | (gen_fgetc(f) << 8) | (gen_fgetc(f) << 16) | (gen_fgetc(f) << 24); + gen_fclose(f); + if(size == 0) + size = fileSize; + + gzFile gz = gzopen(file, "rb"); + + if(gz == NULL) + { + // should not happen, but who knows? + systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), file); + return NULL; + } + + u8 *image = data; + + if(image == NULL) + { + image = (u8 *)malloc(utilGetSize(size)); + if(image == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "data"); + gen_fclose(f); + return NULL; + } + size = fileSize; + } + int read = fileSize <= size ? fileSize : size; + int r = gzread(gz, image, read); + gzclose(gz); + + if(r != (int)read) + { + systemMessage(MSG_ERROR_READING_IMAGE, + N_("Error reading image %s"), file); + if(data == NULL) + free(image); + return NULL; + } + + size = fileSize; + + return image; +} + +#if 0 +static u8 *utilLoadRarFile(const char *file, + bool (*accept)(const char *), + u8 *data, + int &size) +{ + char buffer[2048]; + + ArchiveList_struct *rarList = NULL; + if(urarlib_list((void *)file, (ArchiveList_struct *)&rarList)) + { + ArchiveList_struct *p = rarList; + + bool found = false; + while(p) + { + if(accept(p->item.Name)) + { + strcpy(buffer, p->item.Name); + found = true; + break; + } + p = p->next; + } + if(found) + { + void *memory = NULL; + unsigned long lsize = 0; + size = p->item.UnpSize; + int r = urarlib_get((void *)&memory, &lsize, buffer, (void *)file, ""); + if(!r) + { + systemMessage(MSG_ERROR_READING_IMAGE, + N_("Error reading image %s"), buffer); + urarlib_freelist(rarList); + return NULL; + } + u8 *image = (u8 *)memory; + if(data != NULL) + { + memcpy(image, data, size); + } + urarlib_freelist(rarList); + return image; + } + systemMessage(MSG_NO_IMAGE_ON_ZIP, + N_("No image found on RAR file %s"), file); + urarlib_freelist(rarList); + return NULL; + } + // nothing found + return NULL; +} +#endif + +u8 *utilLoad(const char *file, + bool (*accept)(const char *), + u8 *data, + int &size) +{ + if(utilIsZipFile(file)) + { + return utilLoadFromZip(file, accept, data, size); + } + if(utilIsGzipFile(file)) + { + return utilLoadGzipFile(file, accept, data, size); + } +#if 0 + if(utilIsRarFile(file)) + { + return utilLoadRarFile(file, accept, data, size); + } +#endif + + u8 *image = data; + + FILE* f = gen_fopen(file, "rb"); + + if(!f) + { + systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), file); + return NULL; + } + + gen_fseek(f,0,SEEK_END); + int fileSize = ftell(f); + + gen_fseek(f,0,SEEK_SET); + if(size == 0) + size = fileSize; + + if(image == NULL) + { + image = (u8 *)malloc(utilGetSize(size)); + if(image == NULL) + { + systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), + "data"); + gen_fclose(f); + return NULL; + } + size = fileSize; + } + int read = fileSize <= size ? fileSize : size; + int r = gen_fread(image, 1, read, f); + gen_fclose(f); + + if(r != (int)read) + { + systemMessage(MSG_ERROR_READING_IMAGE, + N_("Error reading image %s"), file); + if(data == NULL) + free(image); + return NULL; + } + + size = fileSize; + + return image; +} + +void utilWriteInt(gzFile gzFile, int i) +{ + utilGzWrite(gzFile, &i, sizeof(int)); +} + +int utilReadInt(gzFile gzFile) +{ + int i = 0; + utilGzRead(gzFile, &i, sizeof(int)); + return i; +} + +void utilReadData(gzFile gzFile, variable_desc* data) +{ + while(data->address) + { + utilGzRead(gzFile, data->address, data->size); + data++; + } +} + +void utilWriteData(gzFile gzFile, variable_desc *data) +{ + while(data->address) + { + utilGzWrite(gzFile, data->address, data->size); + data++; + } +} + +gzFile utilGzOpen(const char *file, const char *mode) +{ + utilGzWriteFunc = (int (*)(void *,void * const, unsigned int))gzwrite; + utilGzReadFunc = gzread; + utilGzCloseFunc = gzclose; + + return gzopen(file, mode); +} + +gzFile utilMemGzOpen(char *memory, int available, char *mode) +{ + utilGzWriteFunc = memgzwrite; + utilGzReadFunc = memgzread; + utilGzCloseFunc = memgzclose; + + return memgzopen(memory, available, mode); +} + +int utilGzWrite(gzFile file, const voidp buffer, unsigned int len) +{ + return utilGzWriteFunc(file, buffer, len); +} + +int utilGzRead(gzFile file, voidp buffer, unsigned int len) +{ + return utilGzReadFunc(file, buffer, len); +} + +int utilGzClose(gzFile file) +{ + return utilGzCloseFunc(file); +} + +long utilGzMemTell(gzFile file) +{ + return memtell(file); +} + +void utilGBAFindSave(const u8 *data, const int size) +{ + u32 *p = (u32 *)data; + u32 *end = (u32 *)(data + size); + int saveType = 0; + int flashSize = 0x10000; + bool rtcFound = false; + + while(p < end) + { + u32 d = READ32LE(p); + + if(d == 0x52504545) + { + if(memcmp(p, "EEPROM_", 7) == 0) + { + if(saveType == 0) + saveType = 1; + } + } + else if (d == 0x4D415253) + { + if(memcmp(p, "SRAM_", 5) == 0) + { + if(saveType == 0) + saveType = 2; + } + } + else if (d == 0x53414C46) + { + if(memcmp(p, "FLASH1M_", 8) == 0) + { + if(saveType == 0) + { + saveType = 3; + flashSize = 0x20000; + } + } + else if(memcmp(p, "FLASH", 5) == 0) + { + if(saveType == 0) + { + saveType = 3; + flashSize = 0x10000; + } + } + } + else if (d == 0x52494953) + { + if(memcmp(p, "SIIRTC_V", 8) == 0) + rtcFound = true; + } + p++; + } + // if no matches found, then set it to NONE + if(saveType == 0) + { + saveType = 5; + } + rtcEnable(rtcFound); + cpuSaveType = saveType; + flashSetSize(flashSize); +} diff --git a/source/vba/Util.h b/source/vba/Util.h index 0d462d3f..66a08075 100644 --- a/source/vba/Util.h +++ b/source/vba/Util.h @@ -19,9 +19,6 @@ #ifndef VBA_UTIL_H #define VBA_UTIL_H - -#include "System.h" - enum IMAGE_TYPE { IMAGE_UNKNOWN = -1, IMAGE_GBA = 0, @@ -30,40 +27,40 @@ enum IMAGE_TYPE { // save game -typedef struct { - void *address; - int size; -} variable_desc; +typedef struct + { + void *address; + int size; + } +variable_desc; -extern int utilGetSize(int size); extern bool utilWritePNGFile(const char *, int, int, u8 *); extern bool utilWriteBMPFile(const char *, int, int, u8 *); extern void utilApplyIPS(const char *ips, u8 **rom, int *size); +extern void utilWriteBMP(char *, int, int, u8 *); extern bool utilIsGBAImage(const char *); extern bool utilIsGBImage(const char *); -extern bool utilIsGzipFile(const char *); extern bool utilIsZipFile(const char *); -extern void utilStripDoubleExtension(const char *, char *); +extern bool utilIsGzipFile(const char *); +extern bool utilIsRarFile(const char *); +extern void utilGetBaseName(const char *, char *); extern IMAGE_TYPE utilFindType(const char *); extern u8 *utilLoad(const char *, - bool (*)(const char*), - u8 *, - int &); + bool (*)(const char*), + u8 *, + int &); extern void utilPutDword(u8 *, u32); extern void utilPutWord(u8 *, u16); extern void utilWriteData(gzFile, variable_desc *); extern void utilReadData(gzFile, variable_desc *); -extern void utilReadDataSkip(gzFile, variable_desc *); extern int utilReadInt(gzFile); extern void utilWriteInt(gzFile, int); extern gzFile utilGzOpen(const char *file, const char *mode); -extern gzFile utilMemGzOpen(char *memory, int available, const char *mode); +extern gzFile utilMemGzOpen(char *memory, int available, char *mode); extern int utilGzWrite(gzFile file, const voidp buffer, unsigned int len); extern int utilGzRead(gzFile file, voidp buffer, unsigned int len); extern int utilGzClose(gzFile file); -extern z_off_t utilGzSeek(gzFile file, z_off_t offset, int whence); extern long utilGzMemTell(gzFile file); extern void utilGBAFindSave(const u8 *, const int); -extern void utilUpdateSystemColorMaps(); #endif diff --git a/source/vba/admame.cpp b/source/vba/admame.cpp new file mode 100644 index 00000000..afb8202c --- /dev/null +++ b/source/vba/admame.cpp @@ -0,0 +1,1033 @@ +/* + * This file is part of the Advance project. + * + * Copyright (C) 1999-2002 Andrea Mazzoleni + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * In addition, as a special exception, Andrea Mazzoleni + * gives permission to link the code of this program with + * the MAME library (or with modified versions of MAME that use the + * same license as MAME), and distribute linked combinations including + * the two. You must obey the GNU General Public License in all + * respects for all of the code used other than MAME. If you modify + * this file, you may extend this exception to your version of the + * file, but you are not obligated to do so. If you do not wish to + * do so, delete this exception statement from your version. + */ + +/* + * Alternatively at the previous license terms, you are allowed to use this + * code in your program with these conditions: + * - the program is not used in commercial activities. + * - the whole source code of the program is released with the binary. + */ + +#include "System.h" + +#ifdef MMX +extern "C" bool cpu_mmx; +#endif + +static void internal_scale2x_16_def(u16 *dst, const u16* src0, const u16* src1, const u16* src2, unsigned count) +{ + /* first pixel */ + dst[0] = src1[0]; + if (src1[1] == src0[0] && src2[0] != src0[0]) + dst[1] = src0[0]; + else + dst[1] = src1[0]; + ++src0; + ++src1; + ++src2; + dst += 2; + + /* central pixels */ + count -= 2; + while (count) + { + if (src0[0] != src2[0] && src1[-1] != src1[1]) + { + dst[0] = src1[-1] == src0[0] ? src0[0] : src1[0]; + dst[1] = src1[1] == src0[0] ? src0[0] : src1[0]; + } + else + { + dst[0] = src1[0]; + dst[1] = src1[0]; + } + + ++src0; + ++src1; + ++src2; + dst += 2; + --count; + } + + /* last pixel */ + if (src1[-1] == src0[0] && src2[0] != src0[0]) + dst[0] = src0[0]; + else + dst[0] = src1[0]; + dst[1] = src1[0]; +} + +static void internal_scale2x_32_def(u32* dst, + const u32* src0, + const u32* src1, + const u32* src2, + unsigned count) +{ + /* first pixel */ + dst[0] = src1[0]; + if (src1[1] == src0[0] && src2[0] != src0[0]) + dst[1] = src0[0]; + else + dst[1] = src1[0]; + ++src0; + ++src1; + ++src2; + dst += 2; + + /* central pixels */ + count -= 2; + while (count) + { + if (src0[0] != src2[0] && src1[-1] != src1[1]) + { + dst[0] = src1[-1] == src0[0] ? src0[0] : src1[0]; + dst[1] = src1[1] == src0[0] ? src0[0] : src1[0]; + } + else + { + dst[0] = src1[0]; + dst[1] = src1[0]; + } + + ++src0; + ++src1; + ++src2; + dst += 2; + --count; + } + + /* last pixel */ + if (src1[-1] == src0[0] && src2[0] != src0[0]) + dst[0] = src0[0]; + else + dst[0] = src1[0]; + dst[1] = src1[0]; +} + +#ifdef MMX +static void internal_scale2x_16_mmx_single(u16* dst, const u16* src0, const u16* src1, const u16* src2, unsigned count) +{ + /* always do the first and last run */ + count -= 2*4; + +#ifdef __GNUC__ + __asm__ __volatile__( + /* first run */ + /* set the current, current_pre, current_next registers */ + "movq 0(%1), %%mm0\n" + "movq 0(%1),%%mm7\n" + "movq 8(%1),%%mm1\n" + "psllq $48,%%mm0\n" + "psllq $48,%%mm1\n" + "psrlq $48, %%mm0\n" + "movq %%mm7,%%mm2\n" + "movq %%mm7,%%mm3\n" + "psllq $16,%%mm2\n" + "psrlq $16,%%mm3\n" + "por %%mm2,%%mm0\n" + "por %%mm3,%%mm1\n" + + /* current_upper */ + "movq (%0),%%mm6\n" + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "movq %%mm0,%%mm3\n" + "movq %%mm1,%%mm5\n" + "pcmpeqw %%mm6,%%mm2\n" + "pcmpeqw %%mm6,%%mm4\n" + "pcmpeqw (%2),%%mm3\n" + "pcmpeqw (%2),%%mm5\n" + "pandn %%mm2,%%mm3\n" + "pandn %%mm4,%%mm5\n" + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "pcmpeqw %%mm1,%%mm2\n" + "pcmpeqw %%mm0,%%mm4\n" + "pandn %%mm3,%%mm2\n" + "pandn %%mm5,%%mm4\n" + "movq %%mm2,%%mm3\n" + "movq %%mm4,%%mm5\n" + "pand %%mm6,%%mm2\n" + "pand %%mm6,%%mm4\n" + "pandn %%mm7,%%mm3\n" + "pandn %%mm7,%%mm5\n" + "por %%mm3,%%mm2\n" + "por %%mm5,%%mm4\n" + + /* set *dst */ + "movq %%mm2,%%mm3\n" + "punpcklwd %%mm4,%%mm2\n" + "punpckhwd %%mm4,%%mm3\n" + "movq %%mm2,(%3)\n" + "movq %%mm3,8(%3)\n" + + /* next */ + "addl $8,%0\n" + "addl $8,%1\n" + "addl $8,%2\n" + "addl $16,%3\n" + + /* central runs */ + "shrl $2,%4\n" + "jz 1f\n" + + "0:\n" + + /* set the current, current_pre, current_next registers */ + "movq -8(%1),%%mm0\n" + "movq (%1),%%mm7\n" + "movq 8(%1),%%mm1\n" + "psrlq $48,%%mm0\n" + "psllq $48,%%mm1\n" + "movq %%mm7,%%mm2\n" + "movq %%mm7,%%mm3\n" + "psllq $16,%%mm2\n" + "psrlq $16,%%mm3\n" + "por %%mm2,%%mm0\n" + "por %%mm3,%%mm1\n" + + /* current_upper */ + "movq (%0),%%mm6\n" + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "movq %%mm0,%%mm3\n" + "movq %%mm1,%%mm5\n" + "pcmpeqw %%mm6,%%mm2\n" + "pcmpeqw %%mm6,%%mm4\n" + "pcmpeqw (%2),%%mm3\n" + "pcmpeqw (%2),%%mm5\n" + "pandn %%mm2,%%mm3\n" + "pandn %%mm4,%%mm5\n" + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "pcmpeqw %%mm1,%%mm2\n" + "pcmpeqw %%mm0,%%mm4\n" + "pandn %%mm3,%%mm2\n" + "pandn %%mm5,%%mm4\n" + "movq %%mm2,%%mm3\n" + "movq %%mm4,%%mm5\n" + "pand %%mm6,%%mm2\n" + "pand %%mm6,%%mm4\n" + "pandn %%mm7,%%mm3\n" + "pandn %%mm7,%%mm5\n" + "por %%mm3,%%mm2\n" + "por %%mm5,%%mm4\n" + + /* set *dst */ + "movq %%mm2,%%mm3\n" + "punpcklwd %%mm4,%%mm2\n" + "punpckhwd %%mm4,%%mm3\n" + "movq %%mm2,(%3)\n" + "movq %%mm3,8(%3)\n" + + /* next */ + "addl $8,%0\n" + "addl $8,%1\n" + "addl $8,%2\n" + "addl $16,%3\n" + + "decl %4\n" + "jnz 0b\n" + "1:\n" + + /* final run */ + /* set the current, current_pre, current_next registers */ + "movq (%1),%%mm1\n" + "movq (%1),%%mm7\n" + "movq -8(%1),%%mm0\n" + "psrlq $48,%%mm1\n" + "psrlq $48,%%mm0\n" + "psllq $48,%%mm1\n" + "movq %%mm7,%%mm2\n" + "movq %%mm7,%%mm3\n" + "psllq $16,%%mm2\n" + "psrlq $16,%%mm3\n" + "por %%mm2,%%mm0\n" + "por %%mm3,%%mm1\n" + + /* current_upper */ + "movq (%0),%%mm6\n" + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "movq %%mm0,%%mm3\n" + "movq %%mm1,%%mm5\n" + "pcmpeqw %%mm6,%%mm2\n" + "pcmpeqw %%mm6,%%mm4\n" + "pcmpeqw (%2),%%mm3\n" + "pcmpeqw (%2),%%mm5\n" + "pandn %%mm2,%%mm3\n" + "pandn %%mm4,%%mm5\n" + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "pcmpeqw %%mm1,%%mm2\n" + "pcmpeqw %%mm0,%%mm4\n" + "pandn %%mm3,%%mm2\n" + "pandn %%mm5,%%mm4\n" + "movq %%mm2,%%mm3\n" + "movq %%mm4,%%mm5\n" + "pand %%mm6,%%mm2\n" + "pand %%mm6,%%mm4\n" + "pandn %%mm7,%%mm3\n" + "pandn %%mm7,%%mm5\n" + "por %%mm3,%%mm2\n" + "por %%mm5,%%mm4\n" + + /* set *dst */ + "movq %%mm2,%%mm3\n" + "punpcklwd %%mm4,%%mm2\n" + "punpckhwd %%mm4,%%mm3\n" + "movq %%mm2,(%3)\n" + "movq %%mm3,8(%3)\n" + "emms\n" + + : "+r" (src0), "+r" (src1), "+r" (src2), "+r" (dst), "+r" (count) + : + : "cc" + ); +#else + __asm { + mov eax, src0; + mov ebx, src1; + mov ecx, src2; + mov edx, dst; + mov esi, count; + + /* first run */ + /* set the current, current_pre, current_next registers */ + movq mm0, qword ptr [ebx]; + movq mm7, qword ptr [ebx]; + movq mm1, qword ptr [ebx + 8]; + psllq mm0, 48; + psllq mm1, 48; + psrlq mm0, 48; + movq mm2, mm7; + movq mm3, mm7; + psllq mm2, 16; + psrlq mm3, 16; + por mm0, mm2; + por mm1, mm3; + + /* current_upper */ + movq mm6, qword ptr [eax]; + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + movq mm2, mm0; + movq mm4, mm1; + movq mm3, mm0; + movq mm5, mm1; + pcmpeqw mm2, mm6; + pcmpeqw mm4, mm6; + pcmpeqw mm3, qword ptr [ecx]; + pcmpeqw mm5, qword ptr [ecx]; + pandn mm3,mm2; + pandn mm5,mm4; + movq mm2,mm0; + movq mm4,mm1; + pcmpeqw mm2,mm1; + pcmpeqw mm4,mm0; + pandn mm2,mm3; + pandn mm4,mm5; + movq mm3,mm2; + movq mm5,mm4; + pand mm2,mm6; + pand mm4,mm6; + pandn mm3,mm7; + pandn mm5,mm7; + por mm2,mm3; + por mm4,mm5; + + /* set *dst0 */ + movq mm3,mm2; + punpcklwd mm2,mm4; + punpckhwd mm3,mm4; + movq qword ptr [edx], mm2; + movq qword ptr [edx + 8], mm3; + + /* next */ + add eax, 8; + add ebx, 8; + add ecx, 8; + add edx, 16; + + /* central runs */ + shr esi, 2; + jz label1; + align 4; + label0: + + /* set the current, current_pre, current_next registers */ + movq mm0, qword ptr [ebx-8]; + movq mm7, qword ptr [ebx]; + movq mm1, qword ptr [ebx+8]; + psrlq mm0,48; + psllq mm1,48; + movq mm2,mm7; + movq mm3,mm7; + psllq mm2,16; + psrlq mm3,16; + por mm0,mm2; + por mm1,mm3; + + /* current_upper */ + movq mm6, qword ptr [eax]; + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + movq mm2,mm0; + movq mm4,mm1; + movq mm3,mm0; + movq mm5,mm1; + pcmpeqw mm2,mm6; + pcmpeqw mm4,mm6; + pcmpeqw mm3, qword ptr [ecx]; + pcmpeqw mm5, qword ptr [ecx]; + pandn mm3,mm2; + pandn mm5,mm4; + movq mm2,mm0; + movq mm4,mm1; + pcmpeqw mm2,mm1; + pcmpeqw mm4,mm0; + pandn mm2,mm3; + pandn mm4,mm5; + movq mm3,mm2; + movq mm5,mm4; + pand mm2,mm6; + pand mm4,mm6; + pandn mm3,mm7; + pandn mm5,mm7; + por mm2,mm3; + por mm4,mm5; + + /* set *dst */ + movq mm3,mm2; + punpcklwd mm2,mm4; + punpckhwd mm3,mm4; + movq qword ptr [edx], mm2; + movq qword ptr [edx+8], mm3; + + /* next */ + add eax,8; + add ebx,8; + add ecx,8; + add edx,16; + + dec esi; + jnz label0; + label1: + + /* final run */ + /* set the current, current_pre, current_next registers */ + movq mm1, qword ptr [ebx]; + movq mm7, qword ptr [ebx]; + movq mm0, qword ptr [ebx-8]; + psrlq mm1,48; + psrlq mm0,48; + psllq mm1,48; + movq mm2,mm7; + movq mm3,mm7; + psllq mm2,16; + psrlq mm3,16; + por mm0,mm2; + por mm1,mm3; + + /* current_upper */ + movq mm6, qword ptr [eax]; + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + movq mm2,mm0; + movq mm4,mm1; + movq mm3,mm0; + movq mm5,mm1; + pcmpeqw mm2,mm6; + pcmpeqw mm4,mm6; + pcmpeqw mm3, qword ptr [ecx]; + pcmpeqw mm5, qword ptr [ecx]; + pandn mm3,mm2; + pandn mm5,mm4; + movq mm2,mm0; + movq mm4,mm1; + pcmpeqw mm2,mm1; + pcmpeqw mm4,mm0; + pandn mm2,mm3; + pandn mm4,mm5; + movq mm3,mm2; + movq mm5,mm4; + pand mm2,mm6; + pand mm4,mm6; + pandn mm3,mm7; + pandn mm5,mm7; + por mm2,mm3; + por mm4,mm5; + + /* set *dst */ + movq mm3,mm2; + punpcklwd mm2,mm4; + punpckhwd mm3,mm4; + movq qword ptr [edx], mm2; + movq qword ptr [edx+8], mm3; + + mov src0, eax; + mov src1, ebx; + mov src2, ecx; + mov dst, edx; + mov count, esi; + + emms; + } +#endif +} + +static void internal_scale2x_32_mmx_single(u32* dst, const u32* src0, const u32* src1, const u32* src2, unsigned count) +{ + /* always do the first and last run */ + count -= 2*2; + +#ifdef __GNUC__ + __asm__ __volatile__( + /* first run */ + /* set the current, current_pre, current_next registers */ + "movq 0(%1),%%mm0\n" + "movq 0(%1),%%mm7\n" + "movq 8(%1),%%mm1\n" + "psllq $32,%%mm0\n" + "psllq $32,%%mm1\n" + "psrlq $32,%%mm0\n" + "movq %%mm7,%%mm2\n" + "movq %%mm7,%%mm3\n" + "psllq $32,%%mm2\n" + "psrlq $32,%%mm3\n" + "por %%mm2,%%mm0\n" + "por %%mm3,%%mm1\n" + + /* current_upper */ + "movq (%0),%%mm6\n" + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "movq %%mm0,%%mm3\n" + "movq %%mm1,%%mm5\n" + "pcmpeqd %%mm6,%%mm2\n" + "pcmpeqd %%mm6,%%mm4\n" + "pcmpeqd (%2),%%mm3\n" + "pcmpeqd (%2),%%mm5\n" + "pandn %%mm2,%%mm3\n" + "pandn %%mm4,%%mm5\n" + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "pcmpeqd %%mm1,%%mm2\n" + "pcmpeqd %%mm0,%%mm4\n" + "pandn %%mm3,%%mm2\n" + "pandn %%mm5,%%mm4\n" + "movq %%mm2,%%mm3\n" + "movq %%mm4,%%mm5\n" + "pand %%mm6,%%mm2\n" + "pand %%mm6,%%mm4\n" + "pandn %%mm7,%%mm3\n" + "pandn %%mm7,%%mm5\n" + "por %%mm3,%%mm2\n" + "por %%mm5,%%mm4\n" + + /* set *dst */ + "movq %%mm2,%%mm3\n" + "punpckldq %%mm4,%%mm2\n" + "punpckhdq %%mm4,%%mm3\n" + "movq %%mm2,(%3)\n" + "movq %%mm3, 8(%3)\n" + + /* next */ + "addl $8,%0\n" + "addl $8,%1\n" + "addl $8,%2\n" + "addl $16,%3\n" + + /* central runs */ + "shrl $1,%4\n" + "jz 1f\n" + + "0:\n" + + /* set the current, current_pre, current_next registers */ + "movq -8(%1),%%mm0\n" + "movq (%1),%%mm7\n" + "movq 8(%1),%%mm1\n" + "psrlq $32,%%mm0\n" + "psllq $32,%%mm1\n" + "movq %%mm7,%%mm2\n" + "movq %%mm7,%%mm3\n" + "psllq $32,%%mm2\n" + "psrlq $32,%%mm3\n" + "por %%mm2,%%mm0\n" + "por %%mm3,%%mm1\n" + + /* current_upper */ + "movq (%0),%%mm6\n" + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "movq %%mm0,%%mm3\n" + "movq %%mm1,%%mm5\n" + "pcmpeqd %%mm6,%%mm2\n" + "pcmpeqd %%mm6,%%mm4\n" + "pcmpeqd (%2),%%mm3\n" + "pcmpeqd (%2),%%mm5\n" + "pandn %%mm2,%%mm3\n" + "pandn %%mm4,%%mm5\n" + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "pcmpeqd %%mm1,%%mm2\n" + "pcmpeqd %%mm0,%%mm4\n" + "pandn %%mm3,%%mm2\n" + "pandn %%mm5,%%mm4\n" + "movq %%mm2,%%mm3\n" + "movq %%mm4,%%mm5\n" + "pand %%mm6,%%mm2\n" + "pand %%mm6,%%mm4\n" + "pandn %%mm7,%%mm3\n" + "pandn %%mm7,%%mm5\n" + "por %%mm3,%%mm2\n" + "por %%mm5,%%mm4\n" + + /* set *dst */ + "movq %%mm2,%%mm3\n" + "punpckldq %%mm4,%%mm2\n" + "punpckhdq %%mm4,%%mm3\n" + "movq %%mm2,(%3)\n" + "movq %%mm3,8(%3)\n" + + /* next */ + "addl $8,%0\n" + "addl $8,%1\n" + "addl $8,%2\n" + "addl $16,%3\n" + + "decl %4\n" + "jnz 0b\n" + "1:\n" + + /* final run */ + /* set the current, current_pre, current_next registers */ + "movq (%1),%%mm1\n" + "movq (%1),%%mm7\n" + "movq -8(%1), %%mm0\n" + "psrlq $32,%%mm1\n" + "psrlq $32,%%mm0\n" + "psllq $32,%%mm1\n" + "movq %%mm7,%%mm2\n" + "movq %%mm7,%%mm3\n" + "psllq $32,%%mm2\n" + "psrlq $32,%%mm3\n" + "por %%mm2,%%mm0\n" + "por %%mm3,%%mm1\n" + + /* current_upper */ + "movq (%0),%%mm6\n" + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "movq %%mm0,%%mm3\n" + "movq %%mm1,%%mm5\n" + "pcmpeqd %%mm6,%%mm2\n" + "pcmpeqd %%mm6,%%mm4\n" + "pcmpeqd (%2),%%mm3\n" + "pcmpeqd (%2),%%mm5\n" + "pandn %%mm2,%%mm3\n" + "pandn %%mm4,%%mm5\n" + "movq %%mm0,%%mm2\n" + "movq %%mm1,%%mm4\n" + "pcmpeqd %%mm1,%%mm2\n" + "pcmpeqd %%mm0,%%mm4\n" + "pandn %%mm3,%%mm2\n" + "pandn %%mm5,%%mm4\n" + "movq %%mm2,%%mm3\n" + "movq %%mm4,%%mm5\n" + "pand %%mm6,%%mm2\n" + "pand %%mm6,%%mm4\n" + "pandn %%mm7,%%mm3\n" + "pandn %%mm7,%%mm5\n" + "por %%mm3,%%mm2\n" + "por %%mm5,%%mm4\n" + + /* set *dst */ + "movq %%mm2,%%mm3\n" + "punpckldq %%mm4,%%mm2\n" + "punpckhdq %%mm4,%%mm3\n" + "movq %%mm2,(%3)\n" + "movq %%mm3,8(%3)\n" + "emms\n" + + : "+r" (src0), "+r" (src1), "+r" (src2), "+r" (dst), "+r" (count) + : + : "cc" + ); +#else + __asm { + mov eax, src0; + mov ebx, src1; + mov ecx, src2; + mov edx, dst; + mov esi, count; + + /* first run */ + /* set the current, current_pre, current_next registers */ + movq mm0,qword ptr [ebx]; + movq mm7,qword ptr [ebx]; + movq mm1,qword ptr [ebx + 8]; + psllq mm0,32; + psllq mm1,32; + psrlq mm0,32; + movq mm2,mm7; + movq mm3,mm7; + psllq mm2,32; + psrlq mm3,32; + por mm0,mm2; + por mm1,mm3; + + /* current_upper */ + movq mm6,qword ptr [eax]; + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + movq mm2,mm0; + movq mm4,mm1; + movq mm3,mm0; + movq mm5,mm1; + pcmpeqd mm2,mm6; + pcmpeqd mm4,mm6; + pcmpeqd mm3,qword ptr [ecx]; + pcmpeqd mm5,qword ptr [ecx]; + pandn mm3,mm2; + pandn mm5,mm4; + movq mm2,mm0; + movq mm4,mm1; + pcmpeqd mm2,mm1; + pcmpeqd mm4,mm0; + pandn mm2,mm3; + pandn mm4,mm5; + movq mm3,mm2; + movq mm5,mm4; + pand mm2,mm6; + pand mm4,mm6; + pandn mm3,mm7; + pandn mm5,mm7; + por mm2,mm3; + por mm4,mm5; + + /* set *dst */ + movq mm3,mm2; + punpckldq mm2,mm4; + punpckhdq mm3,mm4; + movq qword ptr [edx],mm2; + movq qword ptr [edx+8],mm3; + + /* next */ + add eax,8; + add ebx,8; + add ecx,8; + add edx,16; + + /* central runs */ + shr esi,1; + jz label1; + label0: + + /* set the current, current_pre, current_next registers */ + movq mm0,qword ptr [ebx-8]; + movq mm7,qword ptr [ebx]; + movq mm1,qword ptr [ebx+8]; + psrlq mm0,32; + psllq mm1,32; + movq mm2,mm7; + movq mm3,mm7; + psllq mm2,32; + psrlq mm3,32; + por mm0,mm2; + por mm1,mm3; + + /* current_upper */ + movq mm6,qword ptr[eax]; + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + movq mm2,mm0; + movq mm4,mm1; + movq mm3,mm0; + movq mm5,mm1; + pcmpeqd mm2,mm6; + pcmpeqd mm4,mm6; + pcmpeqd mm3,qword ptr[ecx]; + pcmpeqd mm5,qword ptr[ecx]; + pandn mm3,mm2; + pandn mm5,mm4; + movq mm2,mm0; + movq mm4,mm1; + pcmpeqd mm2,mm1; + pcmpeqd mm4,mm0; + pandn mm2,mm3; + pandn mm4,mm5; + movq mm3,mm2; + movq mm5,mm4; + pand mm2,mm6; + pand mm4,mm6; + pandn mm3,mm7; + pandn mm5,mm7; + por mm2,mm3; + por mm4,mm5; + + /* set *dst */ + movq mm3,mm2; + punpckldq mm2,mm4; + punpckhdq mm3,mm4; + movq qword ptr [edx],mm2; + movq qword ptr [edx+8],mm3; + + /* next */ + add eax,8; + add ebx,8; + add ecx,8; + add edx,16; + + dec esi; + jnz label0; + label1: + + /* final run */ + /* set the current, current_pre, current_next registers */ + movq mm1,qword ptr [ebx]; + movq mm7,qword ptr [ebx]; + movq mm0,qword ptr [ebx-8]; + psrlq mm1,32; + psrlq mm0,32; + psllq mm1,32; + movq mm2,mm7; + movq mm3,mm7; + psllq mm2,32; + psrlq mm3,32; + por mm0,mm2; + por mm1,mm3; + + /* current_upper */ + movq mm6,qword ptr [eax]; + + /* compute the upper-left pixel for dst on %%mm2 */ + /* compute the upper-right pixel for dst on %%mm4 */ + movq mm2,mm0; + movq mm4,mm1; + movq mm3,mm0; + movq mm5,mm1; + pcmpeqd mm2,mm6; + pcmpeqd mm4,mm6; + pcmpeqd mm3,qword ptr [ecx]; + pcmpeqd mm5,qword ptr [ecx]; + pandn mm3,mm2; + pandn mm5,mm4; + movq mm2,mm0; + movq mm4,mm1; + pcmpeqd mm2,mm1; + pcmpeqd mm4,mm0; + pandn mm2,mm3; + pandn mm4,mm5; + movq mm3,mm2; + movq mm5,mm4; + pand mm2,mm6; + pand mm4,mm6; + pandn mm3,mm7; + pandn mm5,mm7; + por mm2,mm3; + por mm4,mm5; + + /* set *dst */ + movq mm3,mm2; + punpckldq mm2,mm4; + punpckhdq mm3,mm4; + movq qword ptr [edx],mm2; + movq qword ptr [edx+8],mm3; + + mov src0, eax; + mov src1, ebx; + mov src2, ecx; + mov dst, edx; + mov count, esi; + + emms; + } +#endif +} + +static void internal_scale2x_16_mmx(u16* dst0, u16* dst1, const u16* src0, const u16* src1, const u16* src2, unsigned count) +{ + // assert( count >= 2*4 ); + internal_scale2x_16_mmx_single(dst0, src0, src1, src2, count); + internal_scale2x_16_mmx_single(dst1, src2, src1, src0, count); +} + +static void internal_scale2x_32_mmx(u32* dst0, u32* dst1, const u32* src0, const u32* src1, const u32* src2, unsigned count) +{ + // assert( count >= 2*2 ); + internal_scale2x_32_mmx_single(dst0, src0, src1, src2, count); + internal_scale2x_32_mmx_single(dst1, src2, src1, src0, count); +} +#endif + +void AdMame2x(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u16 *dst0 = (u16 *)dstPtr; + u16 *dst1 = dst0 + (dstPitch >> 1); + + u16 *src0 = (u16 *)srcPtr; + u16 *src1 = src0 + (srcPitch >> 1); + u16 *src2 = src1 + (srcPitch >> 1); +#ifdef MMX + if(cpu_mmx) + { + internal_scale2x_16_mmx(dst0, dst1, src0, src0, src1, width); + + int count = height; + + count -= 2; + while(count) + { + dst0 += dstPitch; + dst1 += dstPitch; + internal_scale2x_16_mmx(dst0, dst1, src0, src1, src2, width); + src0 = src1; + src1 = src2; + src2 += srcPitch >> 1; + --count; + } + dst0 += dstPitch; + dst1 += dstPitch; + internal_scale2x_16_mmx(dst0, dst1, src0, src1, src1, width); + } + else + { +#endif + internal_scale2x_16_def(dst0, src0, src0, src1, width); + internal_scale2x_16_def(dst1, src1, src0, src0, width); + + int count = height; + + count -= 2; + while(count) + { + dst0 += dstPitch; + dst1 += dstPitch; + internal_scale2x_16_def(dst0, src0, src1, src2, width); + internal_scale2x_16_def(dst1, src2, src1, src0, width); + src0 = src1; + src1 = src2; + src2 += srcPitch >> 1; + --count; + } + dst0 += dstPitch; + dst1 += dstPitch; + internal_scale2x_16_def(dst0, src0, src1, src1, width); + internal_scale2x_16_def(dst1, src1, src1, src0, width); +#ifdef MMX + } +#endif +} + +void AdMame2x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u32 *dst0 = (u32 *)dstPtr; + u32 *dst1 = dst0 + (dstPitch >> 2); + + u32 *src0 = (u32 *)srcPtr; + u32 *src1 = src0 + (srcPitch >> 2); + u32 *src2 = src1 + (srcPitch >> 2); +#ifdef MMX + if(cpu_mmx) + { + internal_scale2x_32_mmx(dst0, dst1, src0, src0, src1, width); + + int count = height; + + count -= 2; + while(count) + { + dst0 += dstPitch >> 1; + dst1 += dstPitch >> 1; + internal_scale2x_32_mmx(dst0, dst1, src0, src1, src2, width); + src0 = src1; + src1 = src2; + src2 += srcPitch >> 2; + --count; + } + dst0 += dstPitch >> 1; + dst1 += dstPitch >> 1; + internal_scale2x_32_mmx(dst0, dst1, src0, src1, src1, width); + } + else + { +#endif + internal_scale2x_32_def(dst0, src0, src0, src1, width); + internal_scale2x_32_def(dst1, src1, src0, src0, width); + + int count = height; + + count -= 2; + while(count) + { + dst0 += dstPitch >> 1; + dst1 += dstPitch >> 1; + internal_scale2x_32_def(dst0, src0, src1, src2, width); + internal_scale2x_32_def(dst1, src2, src1, src0, width); + src0 = src1; + src1 = src2; + src2 += srcPitch >> 2; + --count; + } + dst0 += dstPitch >> 1; + dst1 += dstPitch >> 1; + internal_scale2x_32_def(dst0, src0, src1, src1, width); + internal_scale2x_32_def(dst1, src1, src1, src0, width); +#ifdef MMX + } +#endif +} diff --git a/source/vba/agb/GBA-arm.cpp b/source/vba/agb/GBA-arm.cpp deleted file mode 100644 index 4e320aa5..00000000 --- a/source/vba/agb/GBA-arm.cpp +++ /dev/null @@ -1,2967 +0,0 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005-2006 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include -#include -#include - -#include "GBA.h" -#include "GBAcpu.h" -#include "GBAinline.h" -#include "../Globals.h" -#include "../EEprom.h" -#include "../Flash.h" -#include "../Sound.h" -#include "../Sram.h" -#include "../bios.h" -#include "../Cheats.h" -#include "../NLS.h" -#include "../elf.h" -#include "../Util.h" -#include "../Port.h" -#include "../System.h" -#include "agbprint.h" -#ifdef PROFILING -#include "prof/prof.h" -#endif - -#ifdef _MSC_VER - // Disable "empty statement" warnings - #pragma warning(disable: 4390) - // Visual C's inline assembler treats "offset" as a reserved word, so we - // tell it otherwise. If you want to use it, write "OFFSET" in capitals. - #define offset offset_ -#endif - -/////////////////////////////////////////////////////////////////////////// - -static int clockTicks; - -static INSN_REGPARM void armUnknownInsn(u32 opcode) -{ -#ifdef GBA_LOGGING - if (systemVerbose & VERBOSE_UNDEFINED) { - log("Undefined ARM instruction %08x at %08x\n", opcode, - armNextPC-4); - } -#endif - CPUUndefinedException(); -} - -#ifdef BKPT_SUPPORT -static INSN_REGPARM void armBreakpoint(u32 opcode) -{ - reg[15].I -= 4; - armNextPC -= 4; - dbgSignal(5, (opcode & 0x0f) | ((opcode>>4) & 0xfff0)); - clockTicks = -1; -} -#endif - - -// Subroutine to count instructions (for debugging/optimizing) -//#define INSN_COUNTER // comment out if you don't want it -#ifdef INSN_COUNTER -static void count(u32 opcode, int cond_res) -{ - static int insncount = 0; // number of insns seen - static int executed = 0; // number of insns executed - static int mergewith[4096]; // map instructions to routines - static int count[4096]; // count of each 12-bit code - int index = ((opcode>>16)&0xFF0) | ((opcode>>4)&0x0F); - static FILE *outfile = NULL; - - if (!insncount) { - for (int i = 0; i < 4096; i++) { - for (int j = 0; j < i; j++) { - if (armInsnTable[i] == armInsnTable[j]) - break; - } - mergewith[i] = j; - } - outfile = fopen("VBA-armcount.txt", "w"); - } - if (cond_res) { - count[mergewith[index]]++; - executed++; - } - insncount++; - if (outfile && insncount%1000000 == 0) { - fprintf(outfile, "Total instructions: %d\n", insncount); - fprintf(outfile, "Instructions executed: %d\n", executed); - for (int i = 0; i < 4096; i++) { - if (count[i]) - fprintf(outfile, "arm%03X: %d\n", i, count[i]); - } - } -} -#endif - -// Common macros ////////////////////////////////////////////////////////// - -#ifdef BKPT_SUPPORT -#define CONSOLE_OUTPUT(a,b) do { \ - if ((opcode == 0xe0000000) && (reg[0].I == 0xC0DED00D)) { \ - dbgOutput((a), (b)); \ -} while (0) -#else -#define CONSOLE_OUTPUT(a,b) /* nothing */ -#endif - -#define NEG(i) ((i) >> 31) -#define POS(i) ((~(i)) >> 31) - -// The following macros are used for optimization; any not defined for a -// particular compiler/CPU combination default to the C core versions. -// -// ALU_INIT_C: Used at the beginning of ALU instructions (AND/EOR/...). -// (ALU_INIT_NC) Can consist of variable declarations, like the C core, -// or the start of a continued assembly block, like the -// x86-optimized version. The _C version is used when the -// carry flag from the shift operation is needed (logical -// operations that set condition codes, like ANDS); the -// _NC version is used when the carry result is ignored. -// VALUE_XXX: Retrieve the second operand's value for an ALU instruction. -// The _C and _NC versions are used the same way as ALU_INIT. -// OP_XXX: ALU operations. XXX is the instruction name. -// ALU_FINISH: Appended to all ALU instructions. Usually empty, but if -// ALU_INIT started a block ALU_FINISH can be used to end it -// (as with the asm(...) statement in the x86 core). -// SETCOND_NONE: Used in multiply instructions in place of SETCOND_MUL -// when the condition codes are not set. Usually empty. -// SETCOND_MUL: Used in multiply instructions to set the condition codes. -// ROR_IMM_MSR: Used to rotate the immediate operand for MSR. -// ROR_OFFSET: Used to rotate the `offset' parameter for LDR and STR -// instructions. -// RRX_OFFSET: Used to rotate (RRX) the `offset' parameter for LDR and -// STR instructions. - -#ifndef C_CORE - -#if 0 // definitions have changed -//#ifdef __POWERPC__ - #define OP_SUBS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define OP_RSBS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subfco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define OP_ADDS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("addco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define OP_ADCS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("mtspr xer, %4\n" \ - "addeo. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value), \ - "r" (C_FLAG << 29) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define OP_SBCS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("mtspr xer, %4\n" \ - "subfeo. %0, %3, %2\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value), \ - "r" (C_FLAG << 29) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define OP_RSCS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("mtspr xer, %4\n" \ - "subfeo. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value), \ - "r" (C_FLAG << 29) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define OP_CMP \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value) \ - ); \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define OP_CMN \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("addco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[base].I), \ - "r" (value) \ - ); \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - -#else // !__POWERPC__ - -// Macros to emit instructions in the format used by the particular compiler. -// We use GNU assembler syntax: "op src, dest" rather than "op dest, src" - -#ifdef __GNUC__ - #define ALU_HEADER asm("mov %%ecx, %%edi; " - #define ALU_TRAILER : "=D" (opcode) : "c" (opcode) : "eax", "ebx", "edx", "esi") - #define EMIT0(op) #op"; " - #define EMIT1(op,arg) #op" "arg"; " - #define EMIT2(op,src,dest) #op" "src", "dest"; " - #define CONST(val) "$"#val - #define ASMVAR(cvar) ASMVAR2 (__USER_LABEL_PREFIX__, cvar) - #define ASMVAR2(prefix,cvar) STRING (prefix) cvar - #define STRING(x) #x - #define VAR(var) ASMVAR(#var) - #define VARL(var) ASMVAR(#var) - #define REGREF1(index) ASMVAR("reg("index")") - #define REGREF2(index,scale) ASMVAR("reg(,"index","#scale")") - #define LABEL(n) #n": " - #define LABELREF(n,dir) #n#dir - #define al "%%al" - #define ah "%%ah" - #define eax "%%eax" - #define bl "%%bl" - #define bh "%%bh" - #define ebx "%%ebx" - #define cl "%%cl" - #define ch "%%ch" - #define ecx "%%ecx" - #define dl "%%dl" - #define dh "%%dh" - #define edx "%%edx" - #define esp "%%esp" - #define ebp "%%ebp" - #define esi "%%esi" - #define edi "%%edi" - #define movzx movzb -#else - #define ALU_HEADER __asm { __asm mov ecx, opcode - #define ALU_TRAILER } - #define EMIT0(op) __asm op - #define EMIT1(op,arg) __asm op arg - #define EMIT2(op,src,dest) __asm op dest, src - #define CONST(val) val - #define VAR(var) var - #define VARL(var) dword ptr var - #define REGREF1(index) reg[index] - #define REGREF2(index,scale) reg[index*scale] - #define LABEL(n) __asm l##n: - #define LABELREF(n,dir) l##n -#endif - -//X//#ifndef _MSC_VER -// ALU op register usage: -// EAX -> 2nd operand value, result (RSB/RSC) -// EBX -> C_OUT (carry flag from shift/rotate) -// ECX -> opcode (input), shift/rotate count -// EDX -> Rn (base) value, result (all except RSB/RSC) -// ESI -> Rd (destination) index * 4 - -// Helper macros for loading value / shift count -#define VALUE_LOAD_IMM \ - EMIT2(and, CONST(0x0F), eax) \ - EMIT2(mov, REGREF2(eax,4), eax) \ - EMIT2(shr, CONST(7), ecx) \ - EMIT2(and, CONST(0x1F), ecx) -#define VALUE_LOAD_REG \ - EMIT2(and, CONST(0x0F), eax) \ - EMIT2(mov, REGREF2(eax,4), eax) \ - EMIT2(movzx, ch, ecx) \ - EMIT2(and, CONST(0x0F), ecx) \ - EMIT2(mov, REGREF2(ecx,4), ecx) - -// Helper macros for setting flags -#define SETCOND_LOGICAL \ - EMIT1(sets, VAR(N_FLAG)) \ - EMIT1(setz, VAR(Z_FLAG)) \ - EMIT2(mov, bl, VAR(C_FLAG)) -#define SETCOND_ADD \ - EMIT1(sets, VAR(N_FLAG)) \ - EMIT1(setz, VAR(Z_FLAG)) \ - EMIT1(seto, VAR(V_FLAG)) \ - EMIT1(setc, VAR(C_FLAG)) -#define SETCOND_SUB \ - EMIT1(sets, VAR(N_FLAG)) \ - EMIT1(setz, VAR(Z_FLAG)) \ - EMIT1(seto, VAR(V_FLAG)) \ - EMIT1(setnc, VAR(C_FLAG)) - -// ALU initialization -#define ALU_INIT(LOAD_C_FLAG) \ - ALU_HEADER \ - LOAD_C_FLAG \ - EMIT2(mov, ecx, edx) \ - EMIT2(shr, CONST(14), edx) \ - EMIT2(mov, ecx, eax) \ - EMIT2(mov, ecx, esi) \ - EMIT2(shr, CONST(10), esi) \ - EMIT2(and, CONST(0x3C), edx) \ - EMIT2(mov, REGREF1(edx), edx) \ - EMIT2(and, CONST(0x3C), esi) - -#define LOAD_C_FLAG_YES EMIT2(mov, VAR(C_FLAG), bl) -#define LOAD_C_FLAG_NO /*nothing*/ -#define ALU_INIT_C ALU_INIT(LOAD_C_FLAG_YES) -#define ALU_INIT_NC ALU_INIT(LOAD_C_FLAG_NO) - -// Macros to load the value operand for an ALU op; these all set N/Z -// according to the value - -// OP Rd,Rb,Rm LSL # -#define VALUE_LSL_IMM_C \ - VALUE_LOAD_IMM \ - EMIT1(jnz, LABELREF(1,f)) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(shl, cl, eax) \ - EMIT1(setc, bl) \ - LABEL(0) -#define VALUE_LSL_IMM_NC \ - VALUE_LOAD_IMM \ - EMIT2(shl, cl, eax) - -// OP Rd,Rb,Rm LSL Rs -#define VALUE_LSL_REG_C \ - VALUE_LOAD_REG \ - EMIT2(test, cl, cl) \ - EMIT1(jz, LABELREF(0,f)) \ - EMIT2(cmp, CONST(0x20), cl) \ - EMIT1(je, LABELREF(1,f)) \ - EMIT1(ja, LABELREF(2,f)) \ - EMIT2(shl, cl, eax) \ - EMIT1(setc, bl) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(test, CONST(1), al) \ - EMIT1(setnz, bl) \ - EMIT2(xor, eax, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(2) \ - EMIT2(xor, ebx, ebx) \ - EMIT2(xor, eax, eax) \ - LABEL(0) -#define VALUE_LSL_REG_NC \ - VALUE_LOAD_REG \ - EMIT2(cmp, CONST(0x20), cl) \ - EMIT1(jae, LABELREF(1,f)) \ - EMIT2(shl, cl, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(xor, eax, eax) \ - LABEL(0) - -// OP Rd,Rb,Rm LSR # -#define VALUE_LSR_IMM_C \ - VALUE_LOAD_IMM \ - EMIT1(jz, LABELREF(1,f)) \ - EMIT2(shr, cl, eax) \ - EMIT1(setc, bl) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(test, eax, eax) \ - EMIT1(sets, bl) \ - EMIT2(xor, eax, eax) \ - LABEL(0) -#define VALUE_LSR_IMM_NC \ - VALUE_LOAD_IMM \ - EMIT1(jz, LABELREF(1,f)) \ - EMIT2(shr, cl, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(xor, eax, eax) \ - LABEL(0) - -// OP Rd,Rb,Rm LSR Rs -#define VALUE_LSR_REG_C \ - VALUE_LOAD_REG \ - EMIT2(test, cl, cl) \ - EMIT1(jz, LABELREF(0,f)) \ - EMIT2(cmp, CONST(0x20), cl) \ - EMIT1(je, LABELREF(1,f)) \ - EMIT1(ja, LABELREF(2,f)) \ - EMIT2(shr, cl, eax) \ - EMIT1(setc, bl) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(test, eax, eax) \ - EMIT1(sets, bl) \ - EMIT2(xor, eax, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(2) \ - EMIT2(xor, ebx, ebx) \ - EMIT2(xor, eax, eax) \ - LABEL(0) -#define VALUE_LSR_REG_NC \ - VALUE_LOAD_REG \ - EMIT2(cmp, CONST(0x20), cl) \ - EMIT1(jae, LABELREF(1,f)) \ - EMIT2(shr, cl, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(xor, eax, eax) \ - LABEL(0) - -// OP Rd,Rb,Rm ASR # -#define VALUE_ASR_IMM_C \ - VALUE_LOAD_IMM \ - EMIT1(jz, LABELREF(1,f)) \ - EMIT2(sar, cl, eax) \ - EMIT1(setc, bl) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(sar, CONST(31), eax) \ - EMIT1(sets, bl) \ - LABEL(0) -#define VALUE_ASR_IMM_NC \ - VALUE_LOAD_IMM \ - EMIT1(jz, LABELREF(1,f)) \ - EMIT2(sar, cl, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(sar, CONST(31), eax) \ - LABEL(0) - -// OP Rd,Rb,Rm ASR Rs -#define VALUE_ASR_REG_C \ - VALUE_LOAD_REG \ - EMIT2(test, cl, cl) \ - EMIT1(jz, LABELREF(0,f)) \ - EMIT2(cmp, CONST(0x20), cl) \ - EMIT1(jae, LABELREF(1,f)) \ - EMIT2(sar, cl, eax) \ - EMIT1(setc, bl) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(sar, CONST(31), eax) \ - EMIT1(sets, bl) \ - LABEL(0) -#define VALUE_ASR_REG_NC \ - VALUE_LOAD_REG \ - EMIT2(cmp, CONST(0x20), cl) \ - EMIT1(jae, LABELREF(1,f)) \ - EMIT2(sar, cl, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(sar, CONST(31), eax) \ - LABEL(0) - -// OP Rd,Rb,Rm ROR # -#define VALUE_ROR_IMM_C \ - VALUE_LOAD_IMM \ - EMIT1(jz, LABELREF(1,f)) \ - EMIT2(ror, cl, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(bt, CONST(0), ebx) \ - EMIT2(rcr, CONST(1), eax) \ - LABEL(0) \ - EMIT1(setc, bl) -#define VALUE_ROR_IMM_NC \ - VALUE_LOAD_IMM \ - EMIT1(jz, LABELREF(1,f)) \ - EMIT2(ror, cl, eax) \ - EMIT1(jmp, LABELREF(0,f)) \ - LABEL(1) \ - EMIT2(bt, CONST(0), VARL(C_FLAG)) \ - EMIT2(rcr, CONST(1), eax) \ - LABEL(0) - -// OP Rd,Rb,Rm ROR Rs -#define VALUE_ROR_REG_C \ - VALUE_LOAD_REG \ - EMIT2(bt, CONST(0), ebx) \ - EMIT2(ror, cl, eax) \ - EMIT1(setc, bl) -#define VALUE_ROR_REG_NC \ - VALUE_LOAD_REG \ - EMIT2(ror, cl, eax) - -// OP Rd,Rb,# ROR # -#define VALUE_IMM_C \ - EMIT2(movzx, ch, ecx) \ - EMIT2(add, ecx, ecx) \ - EMIT2(movzx, al, eax) \ - EMIT2(bt, CONST(0), ebx) \ - EMIT2(ror, cl, eax) \ - EMIT1(setc, bl) -#define VALUE_IMM_NC \ - EMIT2(movzx, ch, ecx) \ - EMIT2(add, ecx, ecx) \ - EMIT2(movzx, al, eax) \ - EMIT2(ror, cl, eax) - -// Macros to perform ALU ops - -// Set condition codes iff the destination register is not R15 (PC) -#define CHECK_PC(OP, SETCOND) \ - EMIT2(cmp, CONST(0x3C), esi) \ - EMIT1(je, LABELREF(8,f)) \ - OP SETCOND \ - EMIT1(jmp, LABELREF(9,f)) \ - LABEL(8) \ - OP \ - LABEL(9) - -#define OP_AND \ - EMIT2(and, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_ANDS CHECK_PC(OP_AND, SETCOND_LOGICAL) -#define OP_EOR \ - EMIT2(xor, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_EORS CHECK_PC(OP_EOR, SETCOND_LOGICAL) -#define OP_SUB \ - EMIT2(sub, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_SUBS CHECK_PC(OP_SUB, SETCOND_SUB) -#define OP_RSB \ - EMIT2(sub, edx, eax) \ - EMIT2(mov, eax, REGREF1(esi)) -#define OP_RSBS CHECK_PC(OP_RSB, SETCOND_SUB) -#define OP_ADD \ - EMIT2(add, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_ADDS CHECK_PC(OP_ADD, SETCOND_ADD) -#define OP_ADC \ - EMIT2(bt, CONST(0), VARL(C_FLAG)) \ - EMIT2(adc, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_ADCS CHECK_PC(OP_ADC, SETCOND_ADD) -#define OP_SBC \ - EMIT2(bt, CONST(0), VARL(C_FLAG)) \ - EMIT0(cmc) \ - EMIT2(sbb, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_SBCS CHECK_PC(OP_SBC, SETCOND_SUB) -#define OP_RSC \ - EMIT2(bt, CONST(0), VARL(C_FLAG)) \ - EMIT0(cmc) \ - EMIT2(sbb, edx, eax) \ - EMIT2(mov, eax, REGREF1(esi)) -#define OP_RSCS CHECK_PC(OP_RSC, SETCOND_SUB) -#define OP_TST \ - EMIT2(and, eax, edx) \ - SETCOND_LOGICAL -#define OP_TEQ \ - EMIT2(xor, eax, edx) \ - SETCOND_LOGICAL -#define OP_CMP \ - EMIT2(sub, eax, edx) \ - SETCOND_SUB -#define OP_CMN \ - EMIT2(add, eax, edx) \ - SETCOND_ADD -#define OP_ORR \ - EMIT2(or, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_ORRS CHECK_PC(OP_ORR, SETCOND_LOGICAL) -#define OP_MOV \ - EMIT2(mov, eax, REGREF1(esi)) -#define OP_MOVS CHECK_PC(EMIT2(test,eax,eax) EMIT2(mov,eax,REGREF1(esi)), SETCOND_LOGICAL) -#define OP_BIC \ - EMIT1(not, eax) \ - EMIT2(and, eax, edx) \ - EMIT2(mov, edx, REGREF1(esi)) -#define OP_BICS CHECK_PC(OP_BIC, SETCOND_LOGICAL) -#define OP_MVN \ - EMIT1(not, eax) \ - EMIT2(mov, eax, REGREF1(esi)) -#define OP_MVNS CHECK_PC(OP_MVN, SETCOND_LOGICAL) - -// ALU cleanup macro -#define ALU_FINISH ALU_TRAILER - -// End of ALU macros -//X//#endif //_MSC_VER - -#ifdef __GNUC__ - -#define ROR_IMM_MSR \ - asm ("ror %%cl, %%eax;" \ - : "=a" (value) \ - : "a" (opcode & 0xFF), "c" (shift)); - -#define ROR_OFFSET \ - asm("ror %%cl, %0" \ - : "=r" (offset) \ - : "0" (offset), "c" (shift)); - -#define RRX_OFFSET \ - asm(EMIT2(btl,CONST(0),VAR(C_FLAG)) \ - "rcr $1, %0" \ - : "=r" (offset) \ - : "0" (offset)); - -#else // !__GNUC__, i.e. Visual C++ - -#define ROR_IMM_MSR \ - __asm { \ - __asm mov ecx, shift \ - __asm ror value, cl \ - } - - -#define ROR_OFFSET \ - __asm { \ - __asm mov ecx, shift \ - __asm ror offset, cl \ - } - -#define RRX_OFFSET \ - __asm { \ - __asm bt dword ptr C_FLAG, 0 \ - __asm rcr offset, 1 \ - } - -#endif // !__GNUC__ - -#endif // !__POWERPC__ -#endif // !C_CORE - -// C core - -#define C_SETCOND_LOGICAL \ - N_FLAG = ((s32)res < 0) ? true : false; \ - Z_FLAG = (res == 0) ? true : false; \ - C_FLAG = C_OUT; -#define C_SETCOND_ADD \ - N_FLAG = ((s32)res < 0) ? true : false; \ - Z_FLAG = (res == 0) ? true : false; \ - V_FLAG = ((NEG(lhs) & NEG(rhs) & POS(res)) | \ - (POS(lhs) & POS(rhs) & NEG(res))) ? true : false;\ - C_FLAG = ((NEG(lhs) & NEG(rhs)) | \ - (NEG(lhs) & POS(res)) | \ - (NEG(rhs) & POS(res))) ? true : false; -#define C_SETCOND_SUB \ - N_FLAG = ((s32)res < 0) ? true : false; \ - Z_FLAG = (res == 0) ? true : false; \ - V_FLAG = ((NEG(lhs) & POS(rhs) & POS(res)) | \ - (POS(lhs) & NEG(rhs) & NEG(res))) ? true : false;\ - C_FLAG = ((NEG(lhs) & POS(rhs)) | \ - (NEG(lhs) & POS(res)) | \ - (POS(rhs) & POS(res))) ? true : false; - -#ifndef ALU_INIT_C - #define ALU_INIT_C \ - int dest = (opcode>>12) & 15; \ - bool C_OUT = C_FLAG; \ - u32 value; -#endif -// OP Rd,Rb,Rm LSL # -#ifndef VALUE_LSL_IMM_C - #define VALUE_LSL_IMM_C \ - unsigned int shift = (opcode >> 7) & 0x1F; \ - if (LIKELY(!shift)) { /* LSL #0 most common? */ \ - value = reg[opcode & 0x0F].I; \ - } else { \ - u32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (32 - shift)) & 1 ? true : false; \ - value = v << shift; \ - } -#endif -// OP Rd,Rb,Rm LSL Rs -#ifndef VALUE_LSL_REG_C - #define VALUE_LSL_REG_C \ - unsigned int shift = reg[(opcode >> 8)&15].B.B0; \ - if (LIKELY(shift)) { \ - if (shift == 32) { \ - value = 0; \ - C_OUT = (reg[opcode & 0x0F].I & 1 ? true : false);\ - } else if (LIKELY(shift < 32)) { \ - u32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (32 - shift)) & 1 ? true : false;\ - value = v << shift; \ - } else { \ - value = 0; \ - C_OUT = false; \ - } \ - } else { \ - value = reg[opcode & 0x0F].I; \ - } -#endif -// OP Rd,Rb,Rm LSR # -#ifndef VALUE_LSR_IMM_C - #define VALUE_LSR_IMM_C \ - unsigned int shift = (opcode >> 7) & 0x1F; \ - if (LIKELY(shift)) { \ - u32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (shift - 1)) & 1 ? true : false; \ - value = v >> shift; \ - } else { \ - value = 0; \ - C_OUT = (reg[opcode & 0x0F].I & 0x80000000) ? true : false;\ - } -#endif -// OP Rd,Rb,Rm LSR Rs -#ifndef VALUE_LSR_REG_C - #define VALUE_LSR_REG_C \ - unsigned int shift = reg[(opcode >> 8)&15].B.B0; \ - if (LIKELY(shift)) { \ - if (shift == 32) { \ - value = 0; \ - C_OUT = (reg[opcode & 0x0F].I & 0x80000000 ? true : false);\ - } else if (LIKELY(shift < 32)) { \ - u32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (shift - 1)) & 1 ? true : false;\ - value = v >> shift; \ - } else { \ - value = 0; \ - C_OUT = false; \ - } \ - } else { \ - value = reg[opcode & 0x0F].I; \ - } -#endif -// OP Rd,Rb,Rm ASR # -#ifndef VALUE_ASR_IMM_C - #define VALUE_ASR_IMM_C \ - unsigned int shift = (opcode >> 7) & 0x1F; \ - if (LIKELY(shift)) { \ - /* VC++ BUG: u32 v; (s32)v>>n is optimized to shr! */ \ - s32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (int)(shift - 1)) & 1 ? true : false;\ - value = v >> (int)shift; \ - } else { \ - if (reg[opcode & 0x0F].I & 0x80000000) { \ - value = 0xFFFFFFFF; \ - C_OUT = true; \ - } else { \ - value = 0; \ - C_OUT = false; \ - } \ - } -#endif -// OP Rd,Rb,Rm ASR Rs -#ifndef VALUE_ASR_REG_C - #define VALUE_ASR_REG_C \ - unsigned int shift = reg[(opcode >> 8)&15].B.B0; \ - if (LIKELY(shift < 32)) { \ - if (LIKELY(shift)) { \ - s32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (int)(shift - 1)) & 1 ? true : false;\ - value = v >> (int)shift; \ - } else { \ - value = reg[opcode & 0x0F].I; \ - } \ - } else { \ - if (reg[opcode & 0x0F].I & 0x80000000) { \ - value = 0xFFFFFFFF; \ - C_OUT = true; \ - } else { \ - value = 0; \ - C_OUT = false; \ - } \ - } -#endif -// OP Rd,Rb,Rm ROR # -#ifndef VALUE_ROR_IMM_C - #define VALUE_ROR_IMM_C \ - unsigned int shift = (opcode >> 7) & 0x1F; \ - if (LIKELY(shift)) { \ - u32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (shift - 1)) & 1 ? true : false; \ - value = ((v << (32 - shift)) | \ - (v >> shift)); \ - } else { \ - u32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v & 1) ? true : false; \ - value = ((v >> 1) | \ - (C_FLAG << 31)); \ - } -#endif -// OP Rd,Rb,Rm ROR Rs -#ifndef VALUE_ROR_REG_C - #define VALUE_ROR_REG_C \ - unsigned int shift = reg[(opcode >> 8)&15].B.B0; \ - if (LIKELY(shift & 0x1F)) { \ - u32 v = reg[opcode & 0x0F].I; \ - C_OUT = (v >> (shift - 1)) & 1 ? true : false; \ - value = ((v << (32 - shift)) | \ - (v >> shift)); \ - } else { \ - value = reg[opcode & 0x0F].I; \ - if (shift) \ - C_OUT = (value & 0x80000000 ? true : false);\ - } -#endif -// OP Rd,Rb,# ROR # -#ifndef VALUE_IMM_C - #define VALUE_IMM_C \ - int shift = (opcode & 0xF00) >> 7; \ - if (UNLIKELY(shift)) { \ - u32 v = opcode & 0xFF; \ - C_OUT = (v >> (shift - 1)) & 1 ? true : false; \ - value = ((v << (32 - shift)) | \ - (v >> shift)); \ - } else { \ - value = opcode & 0xFF; \ - } -#endif - -// Make the non-carry versions default to the carry versions -// (this is fine for C--the compiler will optimize the dead code out) -#ifndef ALU_INIT_NC - #define ALU_INIT_NC ALU_INIT_C -#endif -#ifndef VALUE_LSL_IMM_NC - #define VALUE_LSL_IMM_NC VALUE_LSL_IMM_C -#endif -#ifndef VALUE_LSL_REG_NC - #define VALUE_LSL_REG_NC VALUE_LSL_REG_C -#endif -#ifndef VALUE_LSR_IMM_NC - #define VALUE_LSR_IMM_NC VALUE_LSR_IMM_C -#endif -#ifndef VALUE_LSR_REG_NC - #define VALUE_LSR_REG_NC VALUE_LSR_REG_C -#endif -#ifndef VALUE_ASR_IMM_NC - #define VALUE_ASR_IMM_NC VALUE_ASR_IMM_C -#endif -#ifndef VALUE_ASR_REG_NC - #define VALUE_ASR_REG_NC VALUE_ASR_REG_C -#endif -#ifndef VALUE_ROR_IMM_NC - #define VALUE_ROR_IMM_NC VALUE_ROR_IMM_C -#endif -#ifndef VALUE_ROR_REG_NC - #define VALUE_ROR_REG_NC VALUE_ROR_REG_C -#endif -#ifndef VALUE_IMM_NC - #define VALUE_IMM_NC VALUE_IMM_C -#endif - -#define C_CHECK_PC(SETCOND) if (LIKELY(dest != 15)) { SETCOND } -#ifndef OP_AND - #define OP_AND \ - u32 res = reg[(opcode>>16)&15].I & value; \ - reg[dest].I = res; -#endif -#ifndef OP_ANDS - #define OP_ANDS OP_AND C_CHECK_PC(C_SETCOND_LOGICAL) -#endif -#ifndef OP_EOR - #define OP_EOR \ - u32 res = reg[(opcode>>16)&15].I ^ value; \ - reg[dest].I = res; -#endif -#ifndef OP_EORS - #define OP_EORS OP_EOR C_CHECK_PC(C_SETCOND_LOGICAL) -#endif -#ifndef OP_SUB - #define OP_SUB \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = lhs - rhs; \ - reg[dest].I = res; -#endif -#ifndef OP_SUBS - #define OP_SUBS OP_SUB C_CHECK_PC(C_SETCOND_SUB) -#endif -#ifndef OP_RSB - #define OP_RSB \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = rhs - lhs; \ - reg[dest].I = res; -#endif -#ifndef OP_RSBS - #define OP_RSBS OP_RSB C_CHECK_PC(C_SETCOND_SUB) -#endif -#ifndef OP_ADD - #define OP_ADD \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = lhs + rhs; \ - reg[dest].I = res; -#endif -#ifndef OP_ADDS - #define OP_ADDS OP_ADD C_CHECK_PC(C_SETCOND_ADD) -#endif -#ifndef OP_ADC - #define OP_ADC \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = lhs + rhs + (u32)C_FLAG; \ - reg[dest].I = res; -#endif -#ifndef OP_ADCS - #define OP_ADCS OP_ADC C_CHECK_PC(C_SETCOND_ADD) -#endif -#ifndef OP_SBC - #define OP_SBC \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = lhs - rhs - !((u32)C_FLAG); \ - reg[dest].I = res; -#endif -#ifndef OP_SBCS - #define OP_SBCS OP_SBC C_CHECK_PC(C_SETCOND_SUB) -#endif -#ifndef OP_RSC - #define OP_RSC \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = rhs - lhs - !((u32)C_FLAG); \ - reg[dest].I = res; -#endif -#ifndef OP_RSCS - #define OP_RSCS OP_RSC C_CHECK_PC(C_SETCOND_SUB) -#endif -#ifndef OP_TST - #define OP_TST \ - u32 res = reg[(opcode >> 16) & 0x0F].I & value; \ - C_SETCOND_LOGICAL; -#endif -#ifndef OP_TEQ - #define OP_TEQ \ - u32 res = reg[(opcode >> 16) & 0x0F].I ^ value; \ - C_SETCOND_LOGICAL; -#endif -#ifndef OP_CMP - #define OP_CMP \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = lhs - rhs; \ - C_SETCOND_SUB; -#endif -#ifndef OP_CMN - #define OP_CMN \ - u32 lhs = reg[(opcode>>16)&15].I; \ - u32 rhs = value; \ - u32 res = lhs + rhs; \ - C_SETCOND_ADD; -#endif -#ifndef OP_ORR - #define OP_ORR \ - u32 res = reg[(opcode >> 16) & 0x0F].I | value; \ - reg[dest].I = res; -#endif -#ifndef OP_ORRS - #define OP_ORRS OP_ORR C_CHECK_PC(C_SETCOND_LOGICAL) -#endif -#ifndef OP_MOV - #define OP_MOV \ - u32 res = value; \ - reg[dest].I = res; -#endif -#ifndef OP_MOVS - #define OP_MOVS OP_MOV C_CHECK_PC(C_SETCOND_LOGICAL) -#endif -#ifndef OP_BIC - #define OP_BIC \ - u32 res = reg[(opcode >> 16) & 0x0F].I & (~value); \ - reg[dest].I = res; -#endif -#ifndef OP_BICS - #define OP_BICS OP_BIC C_CHECK_PC(C_SETCOND_LOGICAL) -#endif -#ifndef OP_MVN - #define OP_MVN \ - u32 res = ~value; \ - reg[dest].I = res; -#endif -#ifndef OP_MVNS - #define OP_MVNS OP_MVN C_CHECK_PC(C_SETCOND_LOGICAL) -#endif - -#ifndef SETCOND_NONE - #define SETCOND_NONE /*nothing*/ -#endif -#ifndef SETCOND_MUL - #define SETCOND_MUL \ - N_FLAG = ((s32)reg[dest].I < 0) ? true : false; \ - Z_FLAG = reg[dest].I ? false : true; -#endif -#ifndef SETCOND_MULL - #define SETCOND_MULL \ - N_FLAG = (reg[dest].I & 0x80000000) ? true : false;\ - Z_FLAG = reg[dest].I || reg[acc].I ? false : true; -#endif - -#ifndef ALU_FINISH - #define ALU_FINISH /*nothing*/ -#endif - -#ifndef ROR_IMM_MSR - #define ROR_IMM_MSR \ - u32 v = opcode & 0xff; \ - value = ((v << (32 - shift)) | (v >> shift)); -#endif -#ifndef ROR_OFFSET - #define ROR_OFFSET \ - offset = ((offset << (32 - shift)) | (offset >> shift)); -#endif -#ifndef RRX_OFFSET - #define RRX_OFFSET \ - offset = ((offset >> 1) | ((int)C_FLAG << 31)); -#endif - -// ALU ops (except multiply) ////////////////////////////////////////////// - -// ALU_INIT: init code (ALU_INIT_C or ALU_INIT_NC) -// GETVALUE: load value and shift/rotate (VALUE_XXX) -// OP: ALU operation (OP_XXX) -// MODECHANGE: MODECHANGE_NO or MODECHANGE_YES -// ISREGSHIFT: 1 for insns of the form ...,Rn LSL/etc Rs; 0 otherwise -// ALU_INIT, GETVALUE, OP, and ALU_FINISH are concatenated in order. -#define ALU_INSN(ALU_INIT, GETVALUE, OP, MODECHANGE, ISREGSHIFT) \ - ALU_INIT GETVALUE OP ALU_FINISH; \ - if (LIKELY((opcode & 0x0000F000) != 0x0000F000)) { \ - clockTicks = 1 + ISREGSHIFT \ - + codeTicksAccessSeq32(armNextPC); \ - } else { \ - MODECHANGE; \ - if (armState) { \ - reg[15].I &= 0xFFFFFFFC; \ - armNextPC = reg[15].I; \ - reg[15].I += 4; \ - ARM_PREFETCH; \ - } else { \ - reg[15].I &= 0xFFFFFFFE; \ - armNextPC = reg[15].I; \ - reg[15].I += 2; \ - THUMB_PREFETCH; \ - } \ - clockTicks = 3 + ISREGSHIFT \ - + codeTicksAccess32(armNextPC) \ - + codeTicksAccessSeq32(armNextPC) \ - + codeTicksAccessSeq32(armNextPC); \ - } - -#define MODECHANGE_NO /*nothing*/ -#define MODECHANGE_YES CPUSwitchMode(reg[17].I & 0x1f, false); - -#define DEFINE_ALU_INSN_C(CODE1, CODE2, OP, MODECHANGE) \ - static INSN_REGPARM void arm##CODE1##0(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_LSL_IMM_C, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##1(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_LSL_REG_C, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE1##2(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_LSR_IMM_C, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##3(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_LSR_REG_C, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE1##4(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_ASR_IMM_C, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##5(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_ASR_REG_C, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE1##6(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_ROR_IMM_C, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##7(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_ROR_REG_C, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE2##0(u32 opcode) { ALU_INSN(ALU_INIT_C, VALUE_IMM_C, OP_##OP, MODECHANGE_##MODECHANGE, 0); } -#define DEFINE_ALU_INSN_NC(CODE1, CODE2, OP, MODECHANGE) \ - static INSN_REGPARM void arm##CODE1##0(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_LSL_IMM_NC, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##1(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_LSL_REG_NC, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE1##2(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_LSR_IMM_NC, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##3(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_LSR_REG_NC, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE1##4(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_ASR_IMM_NC, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##5(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_ASR_REG_NC, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE1##6(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_ROR_IMM_NC, OP_##OP, MODECHANGE_##MODECHANGE, 0); }\ - static INSN_REGPARM void arm##CODE1##7(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_ROR_REG_NC, OP_##OP, MODECHANGE_##MODECHANGE, 1); }\ - static INSN_REGPARM void arm##CODE2##0(u32 opcode) { ALU_INSN(ALU_INIT_NC, VALUE_IMM_NC, OP_##OP, MODECHANGE_##MODECHANGE, 0); } - -// AND -DEFINE_ALU_INSN_NC(00, 20, AND, NO) -// ANDS -DEFINE_ALU_INSN_C (01, 21, ANDS, YES) - -// EOR -DEFINE_ALU_INSN_NC(02, 22, EOR, NO) -// EORS -DEFINE_ALU_INSN_C (03, 23, EORS, YES) - -// SUB -DEFINE_ALU_INSN_NC(04, 24, SUB, NO) -// SUBS -DEFINE_ALU_INSN_NC(05, 25, SUBS, YES) - -// RSB -DEFINE_ALU_INSN_NC(06, 26, RSB, NO) -// RSBS -DEFINE_ALU_INSN_NC(07, 27, RSBS, YES) - -// ADD -DEFINE_ALU_INSN_NC(08, 28, ADD, NO) -// ADDS -DEFINE_ALU_INSN_NC(09, 29, ADDS, YES) - -// ADC -DEFINE_ALU_INSN_NC(0A, 2A, ADC, NO) -// ADCS -DEFINE_ALU_INSN_NC(0B, 2B, ADCS, YES) - -// SBC -DEFINE_ALU_INSN_NC(0C, 2C, SBC, NO) -// SBCS -DEFINE_ALU_INSN_NC(0D, 2D, SBCS, YES) - -// RSC -DEFINE_ALU_INSN_NC(0E, 2E, RSC, NO) -// RSCS -DEFINE_ALU_INSN_NC(0F, 2F, RSCS, YES) - -// TST -DEFINE_ALU_INSN_C (11, 31, TST, NO) - -// TEQ -DEFINE_ALU_INSN_C (13, 33, TEQ, NO) - -// CMP -DEFINE_ALU_INSN_NC(15, 35, CMP, NO) - -// CMN -DEFINE_ALU_INSN_NC(17, 37, CMN, NO) - -// ORR -DEFINE_ALU_INSN_NC(18, 38, ORR, NO) -// ORRS -DEFINE_ALU_INSN_C (19, 39, ORRS, YES) - -// MOV -DEFINE_ALU_INSN_NC(1A, 3A, MOV, NO) -// MOVS -DEFINE_ALU_INSN_C (1B, 3B, MOVS, YES) - -// BIC -DEFINE_ALU_INSN_NC(1C, 3C, BIC, NO) -// BICS -DEFINE_ALU_INSN_C (1D, 3D, BICS, YES) - -// MVN -DEFINE_ALU_INSN_NC(1E, 3E, MVN, NO) -// MVNS -DEFINE_ALU_INSN_C (1F, 3F, MVNS, YES) - -// Multiply instructions ////////////////////////////////////////////////// - -// OP: OP_MUL, OP_MLA etc. -// SETCOND: SETCOND_NONE, SETCOND_MUL, or SETCOND_MULL -// CYCLES: base cycle count (1, 2, or 3) -#define MUL_INSN(OP, SETCOND, CYCLES) \ - int mult = (opcode & 0x0F); \ - u32 rs = reg[(opcode >> 8) & 0x0F].I; \ - int acc = (opcode >> 12) & 0x0F; /* or destLo */ \ - int dest = (opcode >> 16) & 0x0F; /* or destHi */ \ - OP; \ - SETCOND; \ - if ((s32)rs < 0) \ - rs = ~rs; \ - if ((rs & 0xFFFFFF00) == 0) \ - clockTicks += 0; \ - else if ((rs & 0xFFFF0000) == 0) \ - clockTicks += 1; \ - else if ((rs & 0xFF000000) == 0) \ - clockTicks += 2; \ - else \ - clockTicks += 3; \ - if (busPrefetchCount == 0) \ - busPrefetchCount = ((busPrefetchCount+1)<> 32); -#define OP_MLAL(SIGN) \ - SIGN##64 res = ((SIGN##64)reg[dest].I<<32 | reg[acc].I)\ - + ((SIGN##64)(SIGN##32)reg[mult].I \ - * (SIGN##64)(SIGN##32)rs); \ - reg[acc].I = (u32)res; \ - reg[dest].I = (u32)(res >> 32); -#define OP_UMULL OP_MULL(u) -#define OP_UMLAL OP_MLAL(u) -#define OP_SMULL OP_MULL(s) -#define OP_SMLAL OP_MLAL(s) - -// MUL Rd, Rm, Rs -static INSN_REGPARM void arm009(u32 opcode) { MUL_INSN(OP_MUL, SETCOND_NONE, 1); } -// MULS Rd, Rm, Rs -static INSN_REGPARM void arm019(u32 opcode) { MUL_INSN(OP_MUL, SETCOND_MUL, 1); } - -// MLA Rd, Rm, Rs, Rn -static INSN_REGPARM void arm029(u32 opcode) { MUL_INSN(OP_MLA, SETCOND_NONE, 2); } -// MLAS Rd, Rm, Rs, Rn -static INSN_REGPARM void arm039(u32 opcode) { MUL_INSN(OP_MLA, SETCOND_MUL, 2); } - -// UMULL RdLo, RdHi, Rn, Rs -static INSN_REGPARM void arm089(u32 opcode) { MUL_INSN(OP_UMULL, SETCOND_NONE, 2); } -// UMULLS RdLo, RdHi, Rn, Rs -static INSN_REGPARM void arm099(u32 opcode) { MUL_INSN(OP_UMULL, SETCOND_MULL, 2); } - -// UMLAL RdLo, RdHi, Rn, Rs -static INSN_REGPARM void arm0A9(u32 opcode) { MUL_INSN(OP_UMLAL, SETCOND_NONE, 3); } -// UMLALS RdLo, RdHi, Rn, Rs -static INSN_REGPARM void arm0B9(u32 opcode) { MUL_INSN(OP_UMLAL, SETCOND_MULL, 3); } - -// SMULL RdLo, RdHi, Rm, Rs -static INSN_REGPARM void arm0C9(u32 opcode) { MUL_INSN(OP_SMULL, SETCOND_NONE, 2); } -// SMULLS RdLo, RdHi, Rm, Rs -static INSN_REGPARM void arm0D9(u32 opcode) { MUL_INSN(OP_SMULL, SETCOND_MULL, 2); } - -// SMLAL RdLo, RdHi, Rm, Rs -static INSN_REGPARM void arm0E9(u32 opcode) { MUL_INSN(OP_SMLAL, SETCOND_NONE, 3); } -// SMLALS RdLo, RdHi, Rm, Rs -static INSN_REGPARM void arm0F9(u32 opcode) { MUL_INSN(OP_SMLAL, SETCOND_MULL, 3); } - -// Misc instructions ////////////////////////////////////////////////////// - -// SWP Rd, Rm, [Rn] -static INSN_REGPARM void arm109(u32 opcode) -{ - u32 address = reg[(opcode >> 16) & 15].I; - u32 temp = CPUReadMemory(address); - CPUWriteMemory(address, reg[opcode&15].I); - reg[(opcode >> 12) & 15].I = temp; - clockTicks = 4 + dataTicksAccess32(address) + dataTicksAccess32(address) - + codeTicksAccess32(armNextPC); -} - -// SWPB Rd, Rm, [Rn] -static INSN_REGPARM void arm149(u32 opcode) -{ - u32 address = reg[(opcode >> 16) & 15].I; - u32 temp = CPUReadByte(address); - CPUWriteByte(address, reg[opcode&15].B.B0); - reg[(opcode>>12)&15].I = temp; - clockTicks = 4 + dataTicksAccess32(address) + dataTicksAccess32(address) - + codeTicksAccess32(armNextPC); -} - -// MRS Rd, CPSR -static INSN_REGPARM void arm100(u32 opcode) -{ - if (LIKELY((opcode & 0x0FFF0FFF) == 0x010F0000)) { - CPUUpdateCPSR(); - reg[(opcode >> 12) & 0x0F].I = reg[16].I; - } else { - armUnknownInsn(opcode); - } -} - -// MRS Rd, SPSR -static INSN_REGPARM void arm140(u32 opcode) -{ - if (LIKELY((opcode & 0x0FFF0FFF) == 0x014F0000)) { - reg[(opcode >> 12) & 0x0F].I = reg[17].I; - } else { - armUnknownInsn(opcode); - } -} - -// MSR CPSR_fields, Rm -static INSN_REGPARM void arm120(u32 opcode) -{ - if (LIKELY((opcode & 0x0FF0FFF0) == 0x0120F000)) { - CPUUpdateCPSR(); - u32 value = reg[opcode & 15].I; - u32 newValue = reg[16].I; - if (armMode > 0x10) { - if (opcode & 0x00010000) - newValue = (newValue & 0xFFFFFF00) | (value & 0x000000FF); - if (opcode & 0x00020000) - newValue = (newValue & 0xFFFF00FF) | (value & 0x0000FF00); - if (opcode & 0x00040000) - newValue = (newValue & 0xFF00FFFF) | (value & 0x00FF0000); - } - if (opcode & 0x00080000) - newValue = (newValue & 0x00FFFFFF) | (value & 0xFF000000); - newValue |= 0x10; - CPUSwitchMode(newValue & 0x1F, false); - reg[16].I = newValue; - CPUUpdateFlags(); - if (!armState) { // this should not be allowed, but it seems to work - THUMB_PREFETCH; - reg[15].I = armNextPC + 2; - } - } else { - armUnknownInsn(opcode); - } -} - -// MSR SPSR_fields, Rm -static INSN_REGPARM void arm160(u32 opcode) -{ - if (LIKELY((opcode & 0x0FF0FFF0) == 0x0160F000)) { - u32 value = reg[opcode & 15].I; - if (armMode > 0x10 && armMode < 0x1F) { - if (opcode & 0x00010000) - reg[17].I = (reg[17].I & 0xFFFFFF00) | (value & 0x000000FF); - if (opcode & 0x00020000) - reg[17].I = (reg[17].I & 0xFFFF00FF) | (value & 0x0000FF00); - if (opcode & 0x00040000) - reg[17].I = (reg[17].I & 0xFF00FFFF) | (value & 0x00FF0000); - if (opcode & 0x00080000) - reg[17].I = (reg[17].I & 0x00FFFFFF) | (value & 0xFF000000); - } - } else { - armUnknownInsn(opcode); - } -} - -// MSR CPSR_fields, # -static INSN_REGPARM void arm320(u32 opcode) -{ - if (LIKELY((opcode & 0x0FF0F000) == 0x0320F000)) { - CPUUpdateCPSR(); - u32 value = opcode & 0xFF; - int shift = (opcode & 0xF00) >> 7; - if (shift) { - ROR_IMM_MSR; - } - u32 newValue = reg[16].I; - if (armMode > 0x10) { - if (opcode & 0x00010000) - newValue = (newValue & 0xFFFFFF00) | (value & 0x000000FF); - if (opcode & 0x00020000) - newValue = (newValue & 0xFFFF00FF) | (value & 0x0000FF00); - if (opcode & 0x00040000) - newValue = (newValue & 0xFF00FFFF) | (value & 0x00FF0000); - } - if (opcode & 0x00080000) - newValue = (newValue & 0x00FFFFFF) | (value & 0xFF000000); - - newValue |= 0x10; - - CPUSwitchMode(newValue & 0x1F, false); - reg[16].I = newValue; - CPUUpdateFlags(); - if (!armState) { // this should not be allowed, but it seems to work - THUMB_PREFETCH; - reg[15].I = armNextPC + 2; - } - } else { - armUnknownInsn(opcode); - } -} - -// MSR SPSR_fields, # -static INSN_REGPARM void arm360(u32 opcode) -{ - if (LIKELY((opcode & 0x0FF0F000) == 0x0360F000)) { - if (armMode > 0x10 && armMode < 0x1F) { - u32 value = opcode & 0xFF; - int shift = (opcode & 0xF00) >> 7; - if (shift) { - ROR_IMM_MSR; - } - if (opcode & 0x00010000) - reg[17].I = (reg[17].I & 0xFFFFFF00) | (value & 0x000000FF); - if (opcode & 0x00020000) - reg[17].I = (reg[17].I & 0xFFFF00FF) | (value & 0x0000FF00); - if (opcode & 0x00040000) - reg[17].I = (reg[17].I & 0xFF00FFFF) | (value & 0x00FF0000); - if (opcode & 0x00080000) - reg[17].I = (reg[17].I & 0x00FFFFFF) | (value & 0xFF000000); - } - } else { - armUnknownInsn(opcode); - } -} - -// BX Rm -static INSN_REGPARM void arm121(u32 opcode) -{ - if (LIKELY((opcode & 0x0FFFFFF0) == 0x012FFF10)) { - int base = opcode & 0x0F; - busPrefetchCount = 0; - armState = reg[base].I & 1 ? false : true; - if (armState) { - reg[15].I = reg[base].I & 0xFFFFFFFC; - armNextPC = reg[15].I; - reg[15].I += 4; - ARM_PREFETCH; - clockTicks = 3 + codeTicksAccessSeq32(armNextPC) - + codeTicksAccessSeq32(armNextPC) - + codeTicksAccess32(armNextPC); - } else { - reg[15].I = reg[base].I & 0xFFFFFFFE; - armNextPC = reg[15].I; - reg[15].I += 2; - THUMB_PREFETCH; - clockTicks = 3 + codeTicksAccessSeq16(armNextPC) - + codeTicksAccessSeq16(armNextPC) - + codeTicksAccess16(armNextPC); - } - } else { - armUnknownInsn(opcode); - } -} - -// Load/store ///////////////////////////////////////////////////////////// - -#define OFFSET_IMM \ - int offset = opcode & 0xFFF; -#define OFFSET_IMM8 \ - int offset = ((opcode & 0x0F) | ((opcode>>4) & 0xF0)); -#define OFFSET_REG \ - int offset = reg[opcode & 15].I; -#define OFFSET_LSL \ - int offset = reg[opcode & 15].I << ((opcode>>7) & 31); -#define OFFSET_LSR \ - int shift = (opcode >> 7) & 31; \ - int offset = shift ? reg[opcode & 15].I >> shift : 0; -#define OFFSET_ASR \ - int shift = (opcode >> 7) & 31; \ - int offset; \ - if (shift) \ - offset = (int)((s32)reg[opcode & 15].I >> shift);\ - else if (reg[opcode & 15].I & 0x80000000) \ - offset = 0xFFFFFFFF; \ - else \ - offset = 0; -#define OFFSET_ROR \ - int shift = (opcode >> 7) & 31; \ - u32 offset = reg[opcode & 15].I; \ - if (shift) { \ - ROR_OFFSET; \ - } else { \ - RRX_OFFSET; \ - } - -#define ADDRESS_POST (reg[base].I) -#define ADDRESS_PREDEC (reg[base].I - offset) -#define ADDRESS_PREINC (reg[base].I + offset) - -#define OP_STR CPUWriteMemory(address, reg[dest].I) -#define OP_STRH CPUWriteHalfWord(address, reg[dest].W.W0) -#define OP_STRB CPUWriteByte(address, reg[dest].B.B0) -#define OP_LDR reg[dest].I = CPUReadMemory(address) -#define OP_LDRH reg[dest].I = CPUReadHalfWord(address) -#define OP_LDRB reg[dest].I = CPUReadByte(address) -#define OP_LDRSH reg[dest].I = (s16)CPUReadHalfWordSigned(address) -#define OP_LDRSB reg[dest].I = (s8)CPUReadByte(address) - -#define WRITEBACK_NONE /*nothing*/ -#define WRITEBACK_PRE reg[base].I = address -#define WRITEBACK_POSTDEC reg[base].I = address - offset -#define WRITEBACK_POSTINC reg[base].I = address + offset - -#define LDRSTR_INIT(CALC_OFFSET, CALC_ADDRESS) \ - if (busPrefetchCount == 0) \ - busPrefetch = busPrefetchEnable; \ - int dest = (opcode >> 12) & 15; \ - int base = (opcode >> 16) & 15; \ - CALC_OFFSET; \ - u32 address = CALC_ADDRESS; - -#define STR(CALC_OFFSET, CALC_ADDRESS, STORE_DATA, WRITEBACK1, WRITEBACK2, SIZE) \ - LDRSTR_INIT(CALC_OFFSET, CALC_ADDRESS); \ - WRITEBACK1; \ - STORE_DATA; \ - WRITEBACK2; \ - clockTicks = 2 + dataTicksAccess##SIZE(address) \ - + codeTicksAccess32(armNextPC); -#define LDR(CALC_OFFSET, CALC_ADDRESS, LOAD_DATA, WRITEBACK, SIZE) \ - LDRSTR_INIT(CALC_OFFSET, CALC_ADDRESS); \ - LOAD_DATA; \ - if (dest != base) \ - { \ - WRITEBACK; \ - } \ - clockTicks = 0; \ - if (dest == 15) { \ - reg[15].I &= 0xFFFFFFFC; \ - armNextPC = reg[15].I; \ - reg[15].I += 4; \ - ARM_PREFETCH; \ - clockTicks += 2 + dataTicksAccessSeq32(address) \ - + dataTicksAccessSeq32(address);\ - } \ - clockTicks += 3 + dataTicksAccess##SIZE(address) \ - + codeTicksAccess32(armNextPC); -#define STR_POSTDEC(CALC_OFFSET, STORE_DATA, SIZE) \ - STR(CALC_OFFSET, ADDRESS_POST, STORE_DATA, WRITEBACK_NONE, WRITEBACK_POSTDEC, SIZE) -#define STR_POSTINC(CALC_OFFSET, STORE_DATA, SIZE) \ - STR(CALC_OFFSET, ADDRESS_POST, STORE_DATA, WRITEBACK_NONE, WRITEBACK_POSTINC, SIZE) -#define STR_PREDEC(CALC_OFFSET, STORE_DATA, SIZE) \ - STR(CALC_OFFSET, ADDRESS_PREDEC, STORE_DATA, WRITEBACK_NONE, WRITEBACK_NONE, SIZE) -#define STR_PREDEC_WB(CALC_OFFSET, STORE_DATA, SIZE) \ - STR(CALC_OFFSET, ADDRESS_PREDEC, STORE_DATA, WRITEBACK_PRE, WRITEBACK_NONE, SIZE) -#define STR_PREINC(CALC_OFFSET, STORE_DATA, SIZE) \ - STR(CALC_OFFSET, ADDRESS_PREINC, STORE_DATA, WRITEBACK_NONE, WRITEBACK_NONE, SIZE) -#define STR_PREINC_WB(CALC_OFFSET, STORE_DATA, SIZE) \ - STR(CALC_OFFSET, ADDRESS_PREINC, STORE_DATA, WRITEBACK_PRE, WRITEBACK_NONE, SIZE) -#define LDR_POSTDEC(CALC_OFFSET, LOAD_DATA, SIZE) \ - LDR(CALC_OFFSET, ADDRESS_POST, LOAD_DATA, WRITEBACK_POSTDEC, SIZE) -#define LDR_POSTINC(CALC_OFFSET, LOAD_DATA, SIZE) \ - LDR(CALC_OFFSET, ADDRESS_POST, LOAD_DATA, WRITEBACK_POSTINC, SIZE) -#define LDR_PREDEC(CALC_OFFSET, LOAD_DATA, SIZE) \ - LDR(CALC_OFFSET, ADDRESS_PREDEC, LOAD_DATA, WRITEBACK_NONE, SIZE) -#define LDR_PREDEC_WB(CALC_OFFSET, LOAD_DATA, SIZE) \ - LDR(CALC_OFFSET, ADDRESS_PREDEC, LOAD_DATA, WRITEBACK_PRE, SIZE) -#define LDR_PREINC(CALC_OFFSET, LOAD_DATA, SIZE) \ - LDR(CALC_OFFSET, ADDRESS_PREINC, LOAD_DATA, WRITEBACK_NONE, SIZE) -#define LDR_PREINC_WB(CALC_OFFSET, LOAD_DATA, SIZE) \ - LDR(CALC_OFFSET, ADDRESS_PREINC, LOAD_DATA, WRITEBACK_PRE, SIZE) - -// STRH Rd, [Rn], -Rm -static INSN_REGPARM void arm00B(u32 opcode) { STR_POSTDEC(OFFSET_REG, OP_STRH, 16); } -// STRH Rd, [Rn], #-offset -static INSN_REGPARM void arm04B(u32 opcode) { STR_POSTDEC(OFFSET_IMM8, OP_STRH, 16); } -// STRH Rd, [Rn], Rm -static INSN_REGPARM void arm08B(u32 opcode) { STR_POSTINC(OFFSET_REG, OP_STRH, 16); } -// STRH Rd, [Rn], #offset -static INSN_REGPARM void arm0CB(u32 opcode) { STR_POSTINC(OFFSET_IMM8, OP_STRH, 16); } -// STRH Rd, [Rn, -Rm] -static INSN_REGPARM void arm10B(u32 opcode) { STR_PREDEC(OFFSET_REG, OP_STRH, 16); } -// STRH Rd, [Rn, -Rm]! -static INSN_REGPARM void arm12B(u32 opcode) { STR_PREDEC_WB(OFFSET_REG, OP_STRH, 16); } -// STRH Rd, [Rn, -#offset] -static INSN_REGPARM void arm14B(u32 opcode) { STR_PREDEC(OFFSET_IMM8, OP_STRH, 16); } -// STRH Rd, [Rn, -#offset]! -static INSN_REGPARM void arm16B(u32 opcode) { STR_PREDEC_WB(OFFSET_IMM8, OP_STRH, 16); } -// STRH Rd, [Rn, Rm] -static INSN_REGPARM void arm18B(u32 opcode) { STR_PREINC(OFFSET_REG, OP_STRH, 16); } -// STRH Rd, [Rn, Rm]! -static INSN_REGPARM void arm1AB(u32 opcode) { STR_PREINC_WB(OFFSET_REG, OP_STRH, 16); } -// STRH Rd, [Rn, #offset] -static INSN_REGPARM void arm1CB(u32 opcode) { STR_PREINC(OFFSET_IMM8, OP_STRH, 16); } -// STRH Rd, [Rn, #offset]! -static INSN_REGPARM void arm1EB(u32 opcode) { STR_PREINC_WB(OFFSET_IMM8, OP_STRH, 16); } - -// LDRH Rd, [Rn], -Rm -static INSN_REGPARM void arm01B(u32 opcode) { LDR_POSTDEC(OFFSET_REG, OP_LDRH, 16); } -// LDRH Rd, [Rn], #-offset -static INSN_REGPARM void arm05B(u32 opcode) { LDR_POSTDEC(OFFSET_IMM8, OP_LDRH, 16); } -// LDRH Rd, [Rn], Rm -static INSN_REGPARM void arm09B(u32 opcode) { LDR_POSTINC(OFFSET_REG, OP_LDRH, 16); } -// LDRH Rd, [Rn], #offset -static INSN_REGPARM void arm0DB(u32 opcode) { LDR_POSTINC(OFFSET_IMM8, OP_LDRH, 16); } -// LDRH Rd, [Rn, -Rm] -static INSN_REGPARM void arm11B(u32 opcode) { LDR_PREDEC(OFFSET_REG, OP_LDRH, 16); } -// LDRH Rd, [Rn, -Rm]! -static INSN_REGPARM void arm13B(u32 opcode) { LDR_PREDEC_WB(OFFSET_REG, OP_LDRH, 16); } -// LDRH Rd, [Rn, -#offset] -static INSN_REGPARM void arm15B(u32 opcode) { LDR_PREDEC(OFFSET_IMM8, OP_LDRH, 16); } -// LDRH Rd, [Rn, -#offset]! -static INSN_REGPARM void arm17B(u32 opcode) { LDR_PREDEC_WB(OFFSET_IMM8, OP_LDRH, 16); } -// LDRH Rd, [Rn, Rm] -static INSN_REGPARM void arm19B(u32 opcode) { LDR_PREINC(OFFSET_REG, OP_LDRH, 16); } -// LDRH Rd, [Rn, Rm]! -static INSN_REGPARM void arm1BB(u32 opcode) { LDR_PREINC_WB(OFFSET_REG, OP_LDRH, 16); } -// LDRH Rd, [Rn, #offset] -static INSN_REGPARM void arm1DB(u32 opcode) { LDR_PREINC(OFFSET_IMM8, OP_LDRH, 16); } -// LDRH Rd, [Rn, #offset]! -static INSN_REGPARM void arm1FB(u32 opcode) { LDR_PREINC_WB(OFFSET_IMM8, OP_LDRH, 16); } - -// LDRSB Rd, [Rn], -Rm -static INSN_REGPARM void arm01D(u32 opcode) { LDR_POSTDEC(OFFSET_REG, OP_LDRSB, 16); } -// LDRSB Rd, [Rn], #-offset -static INSN_REGPARM void arm05D(u32 opcode) { LDR_POSTDEC(OFFSET_IMM8, OP_LDRSB, 16); } -// LDRSB Rd, [Rn], Rm -static INSN_REGPARM void arm09D(u32 opcode) { LDR_POSTINC(OFFSET_REG, OP_LDRSB, 16); } -// LDRSB Rd, [Rn], #offset -static INSN_REGPARM void arm0DD(u32 opcode) { LDR_POSTINC(OFFSET_IMM8, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, -Rm] -static INSN_REGPARM void arm11D(u32 opcode) { LDR_PREDEC(OFFSET_REG, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, -Rm]! -static INSN_REGPARM void arm13D(u32 opcode) { LDR_PREDEC_WB(OFFSET_REG, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, -#offset] -static INSN_REGPARM void arm15D(u32 opcode) { LDR_PREDEC(OFFSET_IMM8, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, -#offset]! -static INSN_REGPARM void arm17D(u32 opcode) { LDR_PREDEC_WB(OFFSET_IMM8, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, Rm] -static INSN_REGPARM void arm19D(u32 opcode) { LDR_PREINC(OFFSET_REG, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, Rm]! -static INSN_REGPARM void arm1BD(u32 opcode) { LDR_PREINC_WB(OFFSET_REG, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, #offset] -static INSN_REGPARM void arm1DD(u32 opcode) { LDR_PREINC(OFFSET_IMM8, OP_LDRSB, 16); } -// LDRSB Rd, [Rn, #offset]! -static INSN_REGPARM void arm1FD(u32 opcode) { LDR_PREINC_WB(OFFSET_IMM8, OP_LDRSB, 16); } - -// LDRSH Rd, [Rn], -Rm -static INSN_REGPARM void arm01F(u32 opcode) { LDR_POSTDEC(OFFSET_REG, OP_LDRSH, 16); } -// LDRSH Rd, [Rn], #-offset -static INSN_REGPARM void arm05F(u32 opcode) { LDR_POSTDEC(OFFSET_IMM8, OP_LDRSH, 16); } -// LDRSH Rd, [Rn], Rm -static INSN_REGPARM void arm09F(u32 opcode) { LDR_POSTINC(OFFSET_REG, OP_LDRSH, 16); } -// LDRSH Rd, [Rn], #offset -static INSN_REGPARM void arm0DF(u32 opcode) { LDR_POSTINC(OFFSET_IMM8, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, -Rm] -static INSN_REGPARM void arm11F(u32 opcode) { LDR_PREDEC(OFFSET_REG, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, -Rm]! -static INSN_REGPARM void arm13F(u32 opcode) { LDR_PREDEC_WB(OFFSET_REG, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, -#offset] -static INSN_REGPARM void arm15F(u32 opcode) { LDR_PREDEC(OFFSET_IMM8, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, -#offset]! -static INSN_REGPARM void arm17F(u32 opcode) { LDR_PREDEC_WB(OFFSET_IMM8, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, Rm] -static INSN_REGPARM void arm19F(u32 opcode) { LDR_PREINC(OFFSET_REG, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, Rm]! -static INSN_REGPARM void arm1BF(u32 opcode) { LDR_PREINC_WB(OFFSET_REG, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, #offset] -static INSN_REGPARM void arm1DF(u32 opcode) { LDR_PREINC(OFFSET_IMM8, OP_LDRSH, 16); } -// LDRSH Rd, [Rn, #offset]! -static INSN_REGPARM void arm1FF(u32 opcode) { LDR_PREINC_WB(OFFSET_IMM8, OP_LDRSH, 16); } - -// STR[T] Rd, [Rn], -# -// Note: STR and STRT do the same thing on the GBA (likewise for LDR/LDRT etc) -static INSN_REGPARM void arm400(u32 opcode) { STR_POSTDEC(OFFSET_IMM, OP_STR, 32); } -// LDR[T] Rd, [Rn], -# -static INSN_REGPARM void arm410(u32 opcode) { LDR_POSTDEC(OFFSET_IMM, OP_LDR, 32); } -// STRB[T] Rd, [Rn], -# -static INSN_REGPARM void arm440(u32 opcode) { STR_POSTDEC(OFFSET_IMM, OP_STRB, 16); } -// LDRB[T] Rd, [Rn], -# -static INSN_REGPARM void arm450(u32 opcode) { LDR_POSTDEC(OFFSET_IMM, OP_LDRB, 16); } -// STR[T] Rd, [Rn], # -static INSN_REGPARM void arm480(u32 opcode) { STR_POSTINC(OFFSET_IMM, OP_STR, 32); } -// LDR Rd, [Rn], # -static INSN_REGPARM void arm490(u32 opcode) { LDR_POSTINC(OFFSET_IMM, OP_LDR, 32); } -// STRB[T] Rd, [Rn], # -static INSN_REGPARM void arm4C0(u32 opcode) { STR_POSTINC(OFFSET_IMM, OP_STRB, 16); } -// LDRB[T] Rd, [Rn], # -static INSN_REGPARM void arm4D0(u32 opcode) { LDR_POSTINC(OFFSET_IMM, OP_LDRB, 16); } -// STR Rd, [Rn, -#] -static INSN_REGPARM void arm500(u32 opcode) { STR_PREDEC(OFFSET_IMM, OP_STR, 32); } -// LDR Rd, [Rn, -#] -static INSN_REGPARM void arm510(u32 opcode) { LDR_PREDEC(OFFSET_IMM, OP_LDR, 32); } -// STR Rd, [Rn, -#]! -static INSN_REGPARM void arm520(u32 opcode) { STR_PREDEC_WB(OFFSET_IMM, OP_STR, 32); } -// LDR Rd, [Rn, -#]! -static INSN_REGPARM void arm530(u32 opcode) { LDR_PREDEC_WB(OFFSET_IMM, OP_LDR, 32); } -// STRB Rd, [Rn, -#] -static INSN_REGPARM void arm540(u32 opcode) { STR_PREDEC(OFFSET_IMM, OP_STRB, 16); } -// LDRB Rd, [Rn, -#] -static INSN_REGPARM void arm550(u32 opcode) { LDR_PREDEC(OFFSET_IMM, OP_LDRB, 16); } -// STRB Rd, [Rn, -#]! -static INSN_REGPARM void arm560(u32 opcode) { STR_PREDEC_WB(OFFSET_IMM, OP_STRB, 16); } -// LDRB Rd, [Rn, -#]! -static INSN_REGPARM void arm570(u32 opcode) { LDR_PREDEC_WB(OFFSET_IMM, OP_LDRB, 16); } -// STR Rd, [Rn, #] -static INSN_REGPARM void arm580(u32 opcode) { STR_PREINC(OFFSET_IMM, OP_STR, 32); } -// LDR Rd, [Rn, #] -static INSN_REGPARM void arm590(u32 opcode) { LDR_PREINC(OFFSET_IMM, OP_LDR, 32); } -// STR Rd, [Rn, #]! -static INSN_REGPARM void arm5A0(u32 opcode) { STR_PREINC_WB(OFFSET_IMM, OP_STR, 32); } -// LDR Rd, [Rn, #]! -static INSN_REGPARM void arm5B0(u32 opcode) { LDR_PREINC_WB(OFFSET_IMM, OP_LDR, 32); } -// STRB Rd, [Rn, #] -static INSN_REGPARM void arm5C0(u32 opcode) { STR_PREINC(OFFSET_IMM, OP_STRB, 16); } -// LDRB Rd, [Rn, #] -static INSN_REGPARM void arm5D0(u32 opcode) { LDR_PREINC(OFFSET_IMM, OP_LDRB, 16); } -// STRB Rd, [Rn, #]! -static INSN_REGPARM void arm5E0(u32 opcode) { STR_PREINC_WB(OFFSET_IMM, OP_STRB, 16); } -// LDRB Rd, [Rn, #]! -static INSN_REGPARM void arm5F0(u32 opcode) { LDR_PREINC_WB(OFFSET_IMM, OP_LDRB, 16); } - -// STR[T] Rd, [Rn], -Rm, LSL # -static INSN_REGPARM void arm600(u32 opcode) { STR_POSTDEC(OFFSET_LSL, OP_STR, 32); } -// STR[T] Rd, [Rn], -Rm, LSR # -static INSN_REGPARM void arm602(u32 opcode) { STR_POSTDEC(OFFSET_LSR, OP_STR, 32); } -// STR[T] Rd, [Rn], -Rm, ASR # -static INSN_REGPARM void arm604(u32 opcode) { STR_POSTDEC(OFFSET_ASR, OP_STR, 32); } -// STR[T] Rd, [Rn], -Rm, ROR # -static INSN_REGPARM void arm606(u32 opcode) { STR_POSTDEC(OFFSET_ROR, OP_STR, 32); } -// LDR[T] Rd, [Rn], -Rm, LSL # -static INSN_REGPARM void arm610(u32 opcode) { LDR_POSTDEC(OFFSET_LSL, OP_LDR, 32); } -// LDR[T] Rd, [Rn], -Rm, LSR # -static INSN_REGPARM void arm612(u32 opcode) { LDR_POSTDEC(OFFSET_LSR, OP_LDR, 32); } -// LDR[T] Rd, [Rn], -Rm, ASR # -static INSN_REGPARM void arm614(u32 opcode) { LDR_POSTDEC(OFFSET_ASR, OP_LDR, 32); } -// LDR[T] Rd, [Rn], -Rm, ROR # -static INSN_REGPARM void arm616(u32 opcode) { LDR_POSTDEC(OFFSET_ROR, OP_LDR, 32); } -// STRB[T] Rd, [Rn], -Rm, LSL # -static INSN_REGPARM void arm640(u32 opcode) { STR_POSTDEC(OFFSET_LSL, OP_STRB, 16); } -// STRB[T] Rd, [Rn], -Rm, LSR # -static INSN_REGPARM void arm642(u32 opcode) { STR_POSTDEC(OFFSET_LSR, OP_STRB, 16); } -// STRB[T] Rd, [Rn], -Rm, ASR # -static INSN_REGPARM void arm644(u32 opcode) { STR_POSTDEC(OFFSET_ASR, OP_STRB, 16); } -// STRB[T] Rd, [Rn], -Rm, ROR # -static INSN_REGPARM void arm646(u32 opcode) { STR_POSTDEC(OFFSET_ROR, OP_STRB, 16); } -// LDRB[T] Rd, [Rn], -Rm, LSL # -static INSN_REGPARM void arm650(u32 opcode) { LDR_POSTDEC(OFFSET_LSL, OP_LDRB, 16); } -// LDRB[T] Rd, [Rn], -Rm, LSR # -static INSN_REGPARM void arm652(u32 opcode) { LDR_POSTDEC(OFFSET_LSR, OP_LDRB, 16); } -// LDRB[T] Rd, [Rn], -Rm, ASR # -static INSN_REGPARM void arm654(u32 opcode) { LDR_POSTDEC(OFFSET_ASR, OP_LDRB, 16); } -// LDRB Rd, [Rn], -Rm, ROR # -static INSN_REGPARM void arm656(u32 opcode) { LDR_POSTDEC(OFFSET_ROR, OP_LDRB, 16); } -// STR[T] Rd, [Rn], Rm, LSL # -static INSN_REGPARM void arm680(u32 opcode) { STR_POSTINC(OFFSET_LSL, OP_STR, 32); } -// STR[T] Rd, [Rn], Rm, LSR # -static INSN_REGPARM void arm682(u32 opcode) { STR_POSTINC(OFFSET_LSR, OP_STR, 32); } -// STR[T] Rd, [Rn], Rm, ASR # -static INSN_REGPARM void arm684(u32 opcode) { STR_POSTINC(OFFSET_ASR, OP_STR, 32); } -// STR[T] Rd, [Rn], Rm, ROR # -static INSN_REGPARM void arm686(u32 opcode) { STR_POSTINC(OFFSET_ROR, OP_STR, 32); } -// LDR[T] Rd, [Rn], Rm, LSL # -static INSN_REGPARM void arm690(u32 opcode) { LDR_POSTINC(OFFSET_LSL, OP_LDR, 32); } -// LDR[T] Rd, [Rn], Rm, LSR # -static INSN_REGPARM void arm692(u32 opcode) { LDR_POSTINC(OFFSET_LSR, OP_LDR, 32); } -// LDR[T] Rd, [Rn], Rm, ASR # -static INSN_REGPARM void arm694(u32 opcode) { LDR_POSTINC(OFFSET_ASR, OP_LDR, 32); } -// LDR[T] Rd, [Rn], Rm, ROR # -static INSN_REGPARM void arm696(u32 opcode) { LDR_POSTINC(OFFSET_ROR, OP_LDR, 32); } -// STRB[T] Rd, [Rn], Rm, LSL # -static INSN_REGPARM void arm6C0(u32 opcode) { STR_POSTINC(OFFSET_LSL, OP_STRB, 16); } -// STRB[T] Rd, [Rn], Rm, LSR # -static INSN_REGPARM void arm6C2(u32 opcode) { STR_POSTINC(OFFSET_LSR, OP_STRB, 16); } -// STRB[T] Rd, [Rn], Rm, ASR # -static INSN_REGPARM void arm6C4(u32 opcode) { STR_POSTINC(OFFSET_ASR, OP_STRB, 16); } -// STRB[T] Rd, [Rn], Rm, ROR # -static INSN_REGPARM void arm6C6(u32 opcode) { STR_POSTINC(OFFSET_ROR, OP_STRB, 16); } -// LDRB[T] Rd, [Rn], Rm, LSL # -static INSN_REGPARM void arm6D0(u32 opcode) { LDR_POSTINC(OFFSET_LSL, OP_LDRB, 16); } -// LDRB[T] Rd, [Rn], Rm, LSR # -static INSN_REGPARM void arm6D2(u32 opcode) { LDR_POSTINC(OFFSET_LSR, OP_LDRB, 16); } -// LDRB[T] Rd, [Rn], Rm, ASR # -static INSN_REGPARM void arm6D4(u32 opcode) { LDR_POSTINC(OFFSET_ASR, OP_LDRB, 16); } -// LDRB[T] Rd, [Rn], Rm, ROR # -static INSN_REGPARM void arm6D6(u32 opcode) { LDR_POSTINC(OFFSET_ROR, OP_LDRB, 16); } -// STR Rd, [Rn, -Rm, LSL #] -static INSN_REGPARM void arm700(u32 opcode) { STR_PREDEC(OFFSET_LSL, OP_STR, 32); } -// STR Rd, [Rn, -Rm, LSR #] -static INSN_REGPARM void arm702(u32 opcode) { STR_PREDEC(OFFSET_LSR, OP_STR, 32); } -// STR Rd, [Rn, -Rm, ASR #] -static INSN_REGPARM void arm704(u32 opcode) { STR_PREDEC(OFFSET_ASR, OP_STR, 32); } -// STR Rd, [Rn, -Rm, ROR #] -static INSN_REGPARM void arm706(u32 opcode) { STR_PREDEC(OFFSET_ROR, OP_STR, 32); } -// LDR Rd, [Rn, -Rm, LSL #] -static INSN_REGPARM void arm710(u32 opcode) { LDR_PREDEC(OFFSET_LSL, OP_LDR, 32); } -// LDR Rd, [Rn, -Rm, LSR #] -static INSN_REGPARM void arm712(u32 opcode) { LDR_PREDEC(OFFSET_LSR, OP_LDR, 32); } -// LDR Rd, [Rn, -Rm, ASR #] -static INSN_REGPARM void arm714(u32 opcode) { LDR_PREDEC(OFFSET_ASR, OP_LDR, 32); } -// LDR Rd, [Rn, -Rm, ROR #] -static INSN_REGPARM void arm716(u32 opcode) { LDR_PREDEC(OFFSET_ROR, OP_LDR, 32); } -// STR Rd, [Rn, -Rm, LSL #]! -static INSN_REGPARM void arm720(u32 opcode) { STR_PREDEC_WB(OFFSET_LSL, OP_STR, 32); } -// STR Rd, [Rn, -Rm, LSR #]! -static INSN_REGPARM void arm722(u32 opcode) { STR_PREDEC_WB(OFFSET_LSR, OP_STR, 32); } -// STR Rd, [Rn, -Rm, ASR #]! -static INSN_REGPARM void arm724(u32 opcode) { STR_PREDEC_WB(OFFSET_ASR, OP_STR, 32); } -// STR Rd, [Rn, -Rm, ROR #]! -static INSN_REGPARM void arm726(u32 opcode) { STR_PREDEC_WB(OFFSET_ROR, OP_STR, 32); } -// LDR Rd, [Rn, -Rm, LSL #]! -static INSN_REGPARM void arm730(u32 opcode) { LDR_PREDEC_WB(OFFSET_LSL, OP_LDR, 32); } -// LDR Rd, [Rn, -Rm, LSR #]! -static INSN_REGPARM void arm732(u32 opcode) { LDR_PREDEC_WB(OFFSET_LSR, OP_LDR, 32); } -// LDR Rd, [Rn, -Rm, ASR #]! -static INSN_REGPARM void arm734(u32 opcode) { LDR_PREDEC_WB(OFFSET_ASR, OP_LDR, 32); } -// LDR Rd, [Rn, -Rm, ROR #]! -static INSN_REGPARM void arm736(u32 opcode) { LDR_PREDEC_WB(OFFSET_ROR, OP_LDR, 32); } -// STRB Rd, [Rn, -Rm, LSL #] -static INSN_REGPARM void arm740(u32 opcode) { STR_PREDEC(OFFSET_LSL, OP_STRB, 16); } -// STRB Rd, [Rn, -Rm, LSR #] -static INSN_REGPARM void arm742(u32 opcode) { STR_PREDEC(OFFSET_LSR, OP_STRB, 16); } -// STRB Rd, [Rn, -Rm, ASR #] -static INSN_REGPARM void arm744(u32 opcode) { STR_PREDEC(OFFSET_ASR, OP_STRB, 16); } -// STRB Rd, [Rn, -Rm, ROR #] -static INSN_REGPARM void arm746(u32 opcode) { STR_PREDEC(OFFSET_ROR, OP_STRB, 16); } -// LDRB Rd, [Rn, -Rm, LSL #] -static INSN_REGPARM void arm750(u32 opcode) { LDR_PREDEC(OFFSET_LSL, OP_LDRB, 16); } -// LDRB Rd, [Rn, -Rm, LSR #] -static INSN_REGPARM void arm752(u32 opcode) { LDR_PREDEC(OFFSET_LSR, OP_LDRB, 16); } -// LDRB Rd, [Rn, -Rm, ASR #] -static INSN_REGPARM void arm754(u32 opcode) { LDR_PREDEC(OFFSET_ASR, OP_LDRB, 16); } -// LDRB Rd, [Rn, -Rm, ROR #] -static INSN_REGPARM void arm756(u32 opcode) { LDR_PREDEC(OFFSET_ROR, OP_LDRB, 16); } -// STRB Rd, [Rn, -Rm, LSL #]! -static INSN_REGPARM void arm760(u32 opcode) { STR_PREDEC_WB(OFFSET_LSL, OP_STRB, 16); } -// STRB Rd, [Rn, -Rm, LSR #]! -static INSN_REGPARM void arm762(u32 opcode) { STR_PREDEC_WB(OFFSET_LSR, OP_STRB, 16); } -// STRB Rd, [Rn, -Rm, ASR #]! -static INSN_REGPARM void arm764(u32 opcode) { STR_PREDEC_WB(OFFSET_ASR, OP_STRB, 16); } -// STRB Rd, [Rn, -Rm, ROR #]! -static INSN_REGPARM void arm766(u32 opcode) { STR_PREDEC_WB(OFFSET_ROR, OP_STRB, 16); } -// LDRB Rd, [Rn, -Rm, LSL #]! -static INSN_REGPARM void arm770(u32 opcode) { LDR_PREDEC_WB(OFFSET_LSL, OP_LDRB, 16); } -// LDRB Rd, [Rn, -Rm, LSR #]! -static INSN_REGPARM void arm772(u32 opcode) { LDR_PREDEC_WB(OFFSET_LSR, OP_LDRB, 16); } -// LDRB Rd, [Rn, -Rm, ASR #]! -static INSN_REGPARM void arm774(u32 opcode) { LDR_PREDEC_WB(OFFSET_ASR, OP_LDRB, 16); } -// LDRB Rd, [Rn, -Rm, ROR #]! -static INSN_REGPARM void arm776(u32 opcode) { LDR_PREDEC_WB(OFFSET_ROR, OP_LDRB, 16); } -// STR Rd, [Rn, Rm, LSL #] -static INSN_REGPARM void arm780(u32 opcode) { STR_PREINC(OFFSET_LSL, OP_STR, 32); } -// STR Rd, [Rn, Rm, LSR #] -static INSN_REGPARM void arm782(u32 opcode) { STR_PREINC(OFFSET_LSR, OP_STR, 32); } -// STR Rd, [Rn, Rm, ASR #] -static INSN_REGPARM void arm784(u32 opcode) { STR_PREINC(OFFSET_ASR, OP_STR, 32); } -// STR Rd, [Rn, Rm, ROR #] -static INSN_REGPARM void arm786(u32 opcode) { STR_PREINC(OFFSET_ROR, OP_STR, 32); } -// LDR Rd, [Rn, Rm, LSL #] -static INSN_REGPARM void arm790(u32 opcode) { LDR_PREINC(OFFSET_LSL, OP_LDR, 32); } -// LDR Rd, [Rn, Rm, LSR #] -static INSN_REGPARM void arm792(u32 opcode) { LDR_PREINC(OFFSET_LSR, OP_LDR, 32); } -// LDR Rd, [Rn, Rm, ASR #] -static INSN_REGPARM void arm794(u32 opcode) { LDR_PREINC(OFFSET_ASR, OP_LDR, 32); } -// LDR Rd, [Rn, Rm, ROR #] -static INSN_REGPARM void arm796(u32 opcode) { LDR_PREINC(OFFSET_ROR, OP_LDR, 32); } -// STR Rd, [Rn, Rm, LSL #]! -static INSN_REGPARM void arm7A0(u32 opcode) { STR_PREINC_WB(OFFSET_LSL, OP_STR, 32); } -// STR Rd, [Rn, Rm, LSR #]! -static INSN_REGPARM void arm7A2(u32 opcode) { STR_PREINC_WB(OFFSET_LSR, OP_STR, 32); } -// STR Rd, [Rn, Rm, ASR #]! -static INSN_REGPARM void arm7A4(u32 opcode) { STR_PREINC_WB(OFFSET_ASR, OP_STR, 32); } -// STR Rd, [Rn, Rm, ROR #]! -static INSN_REGPARM void arm7A6(u32 opcode) { STR_PREINC_WB(OFFSET_ROR, OP_STR, 32); } -// LDR Rd, [Rn, Rm, LSL #]! -static INSN_REGPARM void arm7B0(u32 opcode) { LDR_PREINC_WB(OFFSET_LSL, OP_LDR, 32); } -// LDR Rd, [Rn, Rm, LSR #]! -static INSN_REGPARM void arm7B2(u32 opcode) { LDR_PREINC_WB(OFFSET_LSR, OP_LDR, 32); } -// LDR Rd, [Rn, Rm, ASR #]! -static INSN_REGPARM void arm7B4(u32 opcode) { LDR_PREINC_WB(OFFSET_ASR, OP_LDR, 32); } -// LDR Rd, [Rn, Rm, ROR #]! -static INSN_REGPARM void arm7B6(u32 opcode) { LDR_PREINC_WB(OFFSET_ROR, OP_LDR, 32); } -// STRB Rd, [Rn, Rm, LSL #] -static INSN_REGPARM void arm7C0(u32 opcode) { STR_PREINC(OFFSET_LSL, OP_STRB, 16); } -// STRB Rd, [Rn, Rm, LSR #] -static INSN_REGPARM void arm7C2(u32 opcode) { STR_PREINC(OFFSET_LSR, OP_STRB, 16); } -// STRB Rd, [Rn, Rm, ASR #] -static INSN_REGPARM void arm7C4(u32 opcode) { STR_PREINC(OFFSET_ASR, OP_STRB, 16); } -// STRB Rd, [Rn, Rm, ROR #] -static INSN_REGPARM void arm7C6(u32 opcode) { STR_PREINC(OFFSET_ROR, OP_STRB, 16); } -// LDRB Rd, [Rn, Rm, LSL #] -static INSN_REGPARM void arm7D0(u32 opcode) { LDR_PREINC(OFFSET_LSL, OP_LDRB, 16); } -// LDRB Rd, [Rn, Rm, LSR #] -static INSN_REGPARM void arm7D2(u32 opcode) { LDR_PREINC(OFFSET_LSR, OP_LDRB, 16); } -// LDRB Rd, [Rn, Rm, ASR #] -static INSN_REGPARM void arm7D4(u32 opcode) { LDR_PREINC(OFFSET_ASR, OP_LDRB, 16); } -// LDRB Rd, [Rn, Rm, ROR #] -static INSN_REGPARM void arm7D6(u32 opcode) { LDR_PREINC(OFFSET_ROR, OP_LDRB, 16); } -// STRB Rd, [Rn, Rm, LSL #]! -static INSN_REGPARM void arm7E0(u32 opcode) { STR_PREINC_WB(OFFSET_LSL, OP_STRB, 16); } -// STRB Rd, [Rn, Rm, LSR #]! -static INSN_REGPARM void arm7E2(u32 opcode) { STR_PREINC_WB(OFFSET_LSR, OP_STRB, 16); } -// STRB Rd, [Rn, Rm, ASR #]! -static INSN_REGPARM void arm7E4(u32 opcode) { STR_PREINC_WB(OFFSET_ASR, OP_STRB, 16); } -// STRB Rd, [Rn, Rm, ROR #]! -static INSN_REGPARM void arm7E6(u32 opcode) { STR_PREINC_WB(OFFSET_ROR, OP_STRB, 16); } -// LDRB Rd, [Rn, Rm, LSL #]! -static INSN_REGPARM void arm7F0(u32 opcode) { LDR_PREINC_WB(OFFSET_LSL, OP_LDRB, 16); } -// LDRB Rd, [Rn, Rm, LSR #]! -static INSN_REGPARM void arm7F2(u32 opcode) { LDR_PREINC_WB(OFFSET_LSR, OP_LDRB, 16); } -// LDRB Rd, [Rn, Rm, ASR #]! -static INSN_REGPARM void arm7F4(u32 opcode) { LDR_PREINC_WB(OFFSET_ASR, OP_LDRB, 16); } -// LDRB Rd, [Rn, Rm, ROR #]! -static INSN_REGPARM void arm7F6(u32 opcode) { LDR_PREINC_WB(OFFSET_ROR, OP_LDRB, 16); } - -// STM/LDM //////////////////////////////////////////////////////////////// - -#define STM_REG(bit,num) \ - if (opcode & (1U<<(bit))) { \ - CPUWriteMemory(address, reg[(num)].I); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address);\ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address);\ - } \ - count++; \ - address += 4; \ - } -#define STMW_REG(bit,num) \ - if (opcode & (1U<<(bit))) { \ - CPUWriteMemory(address, reg[(num)].I); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address);\ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address);\ - } \ - reg[base].I = temp; \ - count++; \ - address += 4; \ - } -#define LDM_REG(bit,num) \ - if (opcode & (1U<<(bit))) { \ - reg[(num)].I = CPUReadMemory(address); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address);\ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address);\ - } \ - count++; \ - address += 4; \ - } -#define STM_LOW(STORE_REG) \ - STORE_REG(0, 0); \ - STORE_REG(1, 1); \ - STORE_REG(2, 2); \ - STORE_REG(3, 3); \ - STORE_REG(4, 4); \ - STORE_REG(5, 5); \ - STORE_REG(6, 6); \ - STORE_REG(7, 7); -#define STM_HIGH(STORE_REG) \ - STORE_REG(8, 8); \ - STORE_REG(9, 9); \ - STORE_REG(10, 10); \ - STORE_REG(11, 11); \ - STORE_REG(12, 12); \ - STORE_REG(13, 13); \ - STORE_REG(14, 14); -#define STM_HIGH_2(STORE_REG) \ - if (armMode == 0x11) { \ - STORE_REG(8, R8_FIQ); \ - STORE_REG(9, R9_FIQ); \ - STORE_REG(10, R10_FIQ); \ - STORE_REG(11, R11_FIQ); \ - STORE_REG(12, R12_FIQ); \ - } else { \ - STORE_REG(8, 8); \ - STORE_REG(9, 9); \ - STORE_REG(10, 10); \ - STORE_REG(11, 11); \ - STORE_REG(12, 12); \ - } \ - if (armMode != 0x10 && armMode != 0x1F) { \ - STORE_REG(13, R13_USR); \ - STORE_REG(14, R14_USR); \ - } else { \ - STORE_REG(13, 13); \ - STORE_REG(14, 14); \ - } -#define STM_PC \ - if (opcode & (1U<<15)) { \ - CPUWriteMemory(address, reg[15].I+4); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address);\ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address);\ - } \ - count++; \ - } -#define STMW_PC \ - if (opcode & (1U<<15)) { \ - CPUWriteMemory(address, reg[15].I+4); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address);\ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address);\ - } \ - reg[base].I = temp; \ - count++; \ - } -#define LDM_LOW \ - LDM_REG(0, 0); \ - LDM_REG(1, 1); \ - LDM_REG(2, 2); \ - LDM_REG(3, 3); \ - LDM_REG(4, 4); \ - LDM_REG(5, 5); \ - LDM_REG(6, 6); \ - LDM_REG(7, 7); -#define LDM_HIGH \ - LDM_REG(8, 8); \ - LDM_REG(9, 9); \ - LDM_REG(10, 10); \ - LDM_REG(11, 11); \ - LDM_REG(12, 12); \ - LDM_REG(13, 13); \ - LDM_REG(14, 14); -#define LDM_HIGH_2 \ - if (armMode == 0x11) { \ - LDM_REG(8, R8_FIQ); \ - LDM_REG(9, R9_FIQ); \ - LDM_REG(10, R10_FIQ); \ - LDM_REG(11, R11_FIQ); \ - LDM_REG(12, R12_FIQ); \ - } else { \ - LDM_REG(8, 8); \ - LDM_REG(9, 9); \ - LDM_REG(10, 10); \ - LDM_REG(11, 11); \ - LDM_REG(12, 12); \ - } \ - if (armMode != 0x10 && armMode != 0x1F) { \ - LDM_REG(13, R13_USR); \ - LDM_REG(14, R14_USR); \ - } else { \ - LDM_REG(13, 13); \ - LDM_REG(14, 14); \ - } -#define STM_ALL \ - STM_LOW(STM_REG); \ - STM_HIGH(STM_REG); \ - STM_PC; -#define STMW_ALL \ - STM_LOW(STMW_REG); \ - STM_HIGH(STMW_REG); \ - STMW_PC; -#define LDM_ALL \ - LDM_LOW; \ - LDM_HIGH; \ - if (opcode & (1U<<15)) { \ - reg[15].I = CPUReadMemory(address); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address);\ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address);\ - } \ - count++; \ - } \ - if (opcode & (1U<<15)) { \ - armNextPC = reg[15].I; \ - reg[15].I += 4; \ - ARM_PREFETCH; \ - clockTicks += 1 + codeTicksAccessSeq32(armNextPC);\ - } -#define STM_ALL_2 \ - STM_LOW(STM_REG); \ - STM_HIGH_2(STM_REG); \ - STM_PC; -#define STMW_ALL_2 \ - STM_LOW(STMW_REG); \ - STM_HIGH_2(STMW_REG); \ - STMW_PC; -#define LDM_ALL_2 \ - LDM_LOW; \ - if (opcode & (1U<<15)) { \ - LDM_HIGH; \ - reg[15].I = CPUReadMemory(address); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address); \ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address); \ - } \ - count++; \ - } else { \ - LDM_HIGH_2; \ - } -#define LDM_ALL_2B \ - if (opcode & (1U<<15)) { \ - CPUSwitchMode(reg[17].I & 0x1F, false); \ - if (armState) { \ - armNextPC = reg[15].I & 0xFFFFFFFC; \ - reg[15].I = armNextPC + 4; \ - ARM_PREFETCH; \ - } else { \ - armNextPC = reg[15].I & 0xFFFFFFFE; \ - reg[15].I = armNextPC + 2; \ - THUMB_PREFETCH; \ - } \ - clockTicks += 1 + codeTicksAccessSeq32(armNextPC);\ - } - - -// STMDA Rn, {Rlist} -static INSN_REGPARM void arm800(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp + 4) & 0xFFFFFFFC; - int count = 0; - STM_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDA Rn, {Rlist} -static INSN_REGPARM void arm810(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp + 4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMDA Rn!, {Rlist} -static INSN_REGPARM void arm820(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp+4) & 0xFFFFFFFC; - int count = 0; - STMW_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDA Rn!, {Rlist} -static INSN_REGPARM void arm830(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp + 4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); - if (!(opcode & (1U << base))) - reg[base].I = temp; -} - -// STMDA Rn, {Rlist}^ -static INSN_REGPARM void arm840(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp+4) & 0xFFFFFFFC; - int count = 0; - STM_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDA Rn, {Rlist}^ -static INSN_REGPARM void arm850(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp + 4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMDA Rn!, {Rlist}^ -static INSN_REGPARM void arm860(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp+4) & 0xFFFFFFFC; - int count = 0; - STMW_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDA Rn!, {Rlist}^ -static INSN_REGPARM void arm870(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (temp + 4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - if (!(opcode & (1U << base))) - reg[base].I = temp; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMIA Rn, {Rlist} -static INSN_REGPARM void arm880(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - STM_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIA Rn, {Rlist} -static INSN_REGPARM void arm890(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMIA Rn!, {Rlist} -static INSN_REGPARM void arm8A0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 0xFF] + cpuBitsSet[(opcode >> 8) & 255]); - STMW_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIA Rn!, {Rlist} -static INSN_REGPARM void arm8B0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); - if (!(opcode & (1U << base))) - reg[base].I = temp; -} - -// STMIA Rn, {Rlist}^ -static INSN_REGPARM void arm8C0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - STM_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIA Rn, {Rlist}^ -static INSN_REGPARM void arm8D0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMIA Rn!, {Rlist}^ -static INSN_REGPARM void arm8E0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 0xFF] + cpuBitsSet[(opcode >> 8) & 255]); - STMW_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIA Rn!, {Rlist}^ -static INSN_REGPARM void arm8F0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = reg[base].I & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - if (!(opcode & (1U << base))) - reg[base].I = temp; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMDB Rn, {Rlist} -static INSN_REGPARM void arm900(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - STM_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDB Rn, {Rlist} -static INSN_REGPARM void arm910(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMDB Rn!, {Rlist} -static INSN_REGPARM void arm920(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - STMW_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDB Rn!, {Rlist} -static INSN_REGPARM void arm930(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); - if (!(opcode & (1U << base))) - reg[base].I = temp; -} - -// STMDB Rn, {Rlist}^ -static INSN_REGPARM void arm940(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - STM_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDB Rn, {Rlist}^ -static INSN_REGPARM void arm950(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMDB Rn!, {Rlist}^ -static INSN_REGPARM void arm960(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - STMW_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMDB Rn!, {Rlist}^ -static INSN_REGPARM void arm970(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I - - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = temp & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - if (!(opcode & (1U << base))) - reg[base].I = temp; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMIB Rn, {Rlist} -static INSN_REGPARM void arm980(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - STM_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIB Rn, {Rlist} -static INSN_REGPARM void arm990(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMIB Rn!, {Rlist} -static INSN_REGPARM void arm9A0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 0xFF] + cpuBitsSet[(opcode >> 8) & 255]); - STMW_ALL; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIB Rn!, {Rlist} -static INSN_REGPARM void arm9B0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL; - clockTicks += 2 + codeTicksAccess32(armNextPC); - if (!(opcode & (1U << base))) - reg[base].I = temp; -} - -// STMIB Rn, {Rlist}^ -static INSN_REGPARM void arm9C0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - STM_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIB Rn, {Rlist}^ -static INSN_REGPARM void arm9D0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// STMIB Rn!, {Rlist}^ -static INSN_REGPARM void arm9E0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 0xFF] + cpuBitsSet[(opcode >> 8) & 255]); - STMW_ALL_2; - clockTicks += 1 + codeTicksAccess32(armNextPC); -} - -// LDMIB Rn!, {Rlist}^ -static INSN_REGPARM void arm9F0(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int base = (opcode & 0x000F0000) >> 16; - u32 temp = reg[base].I + - 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); - u32 address = (reg[base].I+4) & 0xFFFFFFFC; - int count = 0; - LDM_ALL_2; - if (!(opcode & (1U << base))) - reg[base].I = temp; - LDM_ALL_2B; - clockTicks += 2 + codeTicksAccess32(armNextPC); -} - -// B/BL/SWI and (unimplemented) coproc support //////////////////////////// - -// B -static INSN_REGPARM void armA00(u32 opcode) -{ - int offset = opcode & 0x00FFFFFF; - if (offset & 0x00800000) - offset |= 0xFF000000; // negative offset - reg[15].I += offset<<2; - armNextPC = reg[15].I; - reg[15].I += 4; - ARM_PREFETCH; - clockTicks = codeTicksAccessSeq32(armNextPC) + 1; - clockTicks += 2 + codeTicksAccess32(armNextPC) - + codeTicksAccessSeq32(armNextPC); - busPrefetchCount = 0; -} - -// BL -static INSN_REGPARM void armB00(u32 opcode) -{ - int offset = opcode & 0x00FFFFFF; - if (offset & 0x00800000) - offset |= 0xFF000000; // negative offset - reg[14].I = reg[15].I - 4; - reg[15].I += offset<<2; - armNextPC = reg[15].I; - reg[15].I += 4; - ARM_PREFETCH; - clockTicks = codeTicksAccessSeq32(armNextPC) + 1; - clockTicks += 2 + codeTicksAccess32(armNextPC) - + codeTicksAccessSeq32(armNextPC); - busPrefetchCount = 0; -} - - -#ifdef GP_SUPPORT -// MRC -static INSN_REGPARM void armE01(u32 opcode) -{ -} -#else - #define armE01 armUnknownInsn -#endif - - -// SWI -static INSN_REGPARM void armF00(u32 opcode) -{ - clockTicks = codeTicksAccessSeq32(armNextPC) + 1; - clockTicks += 2 + codeTicksAccess32(armNextPC) - + codeTicksAccessSeq32(armNextPC); - busPrefetchCount = 0; - CPUSoftwareInterrupt(opcode & 0x00FFFFFF); -} - -// Instruction table ////////////////////////////////////////////////////// - -typedef INSN_REGPARM void (*insnfunc_t)(u32 opcode); -#define REP16(insn) \ - insn,insn,insn,insn,insn,insn,insn,insn,\ - insn,insn,insn,insn,insn,insn,insn,insn -#define REP256(insn) \ - REP16(insn),REP16(insn),REP16(insn),REP16(insn),\ - REP16(insn),REP16(insn),REP16(insn),REP16(insn),\ - REP16(insn),REP16(insn),REP16(insn),REP16(insn),\ - REP16(insn),REP16(insn),REP16(insn),REP16(insn) -#define arm_UI armUnknownInsn -#ifdef BKPT_SUPPORT - #define arm_BP armBreakpoint -#else - #define arm_BP armUnknownInsn -#endif -static insnfunc_t armInsnTable[4096] = { - arm000,arm001,arm002,arm003,arm004,arm005,arm006,arm007, // 000 - arm000,arm009,arm002,arm00B,arm004,arm_UI,arm006,arm_UI, // 008 - arm010,arm011,arm012,arm013,arm014,arm015,arm016,arm017, // 010 - arm010,arm019,arm012,arm01B,arm014,arm01D,arm016,arm01F, // 018 - arm020,arm021,arm022,arm023,arm024,arm025,arm026,arm027, // 020 - arm020,arm029,arm022,arm_UI,arm024,arm_UI,arm026,arm_UI, // 028 - arm030,arm031,arm032,arm033,arm034,arm035,arm036,arm037, // 030 - arm030,arm039,arm032,arm_UI,arm034,arm01D,arm036,arm01F, // 038 - arm040,arm041,arm042,arm043,arm044,arm045,arm046,arm047, // 040 - arm040,arm_UI,arm042,arm04B,arm044,arm_UI,arm046,arm_UI, // 048 - arm050,arm051,arm052,arm053,arm054,arm055,arm056,arm057, // 050 - arm050,arm_UI,arm052,arm05B,arm054,arm05D,arm056,arm05F, // 058 - arm060,arm061,arm062,arm063,arm064,arm065,arm066,arm067, // 060 - arm060,arm_UI,arm062,arm_UI,arm064,arm_UI,arm066,arm_UI, // 068 - arm070,arm071,arm072,arm073,arm074,arm075,arm076,arm077, // 070 - arm070,arm_UI,arm072,arm_UI,arm074,arm05D,arm076,arm05F, // 078 - arm080,arm081,arm082,arm083,arm084,arm085,arm086,arm087, // 080 - arm080,arm089,arm082,arm08B,arm084,arm_UI,arm086,arm_UI, // 088 - arm090,arm091,arm092,arm093,arm094,arm095,arm096,arm097, // 090 - arm090,arm099,arm092,arm09B,arm094,arm09D,arm096,arm09F, // 098 - arm0A0,arm0A1,arm0A2,arm0A3,arm0A4,arm0A5,arm0A6,arm0A7, // 0A0 - arm0A0,arm0A9,arm0A2,arm_UI,arm0A4,arm_UI,arm0A6,arm_UI, // 0A8 - arm0B0,arm0B1,arm0B2,arm0B3,arm0B4,arm0B5,arm0B6,arm0B7, // 0B0 - arm0B0,arm0B9,arm0B2,arm_UI,arm0B4,arm09D,arm0B6,arm09F, // 0B8 - arm0C0,arm0C1,arm0C2,arm0C3,arm0C4,arm0C5,arm0C6,arm0C7, // 0C0 - arm0C0,arm0C9,arm0C2,arm0CB,arm0C4,arm_UI,arm0C6,arm_UI, // 0C8 - arm0D0,arm0D1,arm0D2,arm0D3,arm0D4,arm0D5,arm0D6,arm0D7, // 0D0 - arm0D0,arm0D9,arm0D2,arm0DB,arm0D4,arm0DD,arm0D6,arm0DF, // 0D8 - arm0E0,arm0E1,arm0E2,arm0E3,arm0E4,arm0E5,arm0E6,arm0E7, // 0E0 - arm0E0,arm0E9,arm0E2,arm_UI,arm0E4,arm_UI,arm0E6,arm_UI, // 0E8 - arm0F0,arm0F1,arm0F2,arm0F3,arm0F4,arm0F5,arm0F6,arm0F7, // 0F0 - arm0F0,arm0F9,arm0F2,arm_UI,arm0F4,arm0DD,arm0F6,arm0DF, // 0F8 - - arm100,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI, // 100 - arm_UI,arm109,arm_UI,arm10B,arm_UI,arm_UI,arm_UI,arm_UI, // 108 - arm110,arm111,arm112,arm113,arm114,arm115,arm116,arm117, // 110 - arm110,arm_UI,arm112,arm11B,arm114,arm11D,arm116,arm11F, // 118 - arm120,arm121,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI,arm_BP, // 120 - arm_UI,arm_UI,arm_UI,arm12B,arm_UI,arm_UI,arm_UI,arm_UI, // 128 - arm130,arm131,arm132,arm133,arm134,arm135,arm136,arm137, // 130 - arm130,arm_UI,arm132,arm13B,arm134,arm13D,arm136,arm13F, // 138 - arm140,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI, // 140 - arm_UI,arm149,arm_UI,arm14B,arm_UI,arm_UI,arm_UI,arm_UI, // 148 - arm150,arm151,arm152,arm153,arm154,arm155,arm156,arm157, // 150 - arm150,arm_UI,arm152,arm15B,arm154,arm15D,arm156,arm15F, // 158 - arm160,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI,arm_UI, // 160 - arm_UI,arm_UI,arm_UI,arm16B,arm_UI,arm_UI,arm_UI,arm_UI, // 168 - arm170,arm171,arm172,arm173,arm174,arm175,arm176,arm177, // 170 - arm170,arm_UI,arm172,arm17B,arm174,arm17D,arm176,arm17F, // 178 - arm180,arm181,arm182,arm183,arm184,arm185,arm186,arm187, // 180 - arm180,arm_UI,arm182,arm18B,arm184,arm_UI,arm186,arm_UI, // 188 - arm190,arm191,arm192,arm193,arm194,arm195,arm196,arm197, // 190 - arm190,arm_UI,arm192,arm19B,arm194,arm19D,arm196,arm19F, // 198 - arm1A0,arm1A1,arm1A2,arm1A3,arm1A4,arm1A5,arm1A6,arm1A7, // 1A0 - arm1A0,arm_UI,arm1A2,arm1AB,arm1A4,arm_UI,arm1A6,arm_UI, // 1A8 - arm1B0,arm1B1,arm1B2,arm1B3,arm1B4,arm1B5,arm1B6,arm1B7, // 1B0 - arm1B0,arm_UI,arm1B2,arm1BB,arm1B4,arm1BD,arm1B6,arm1BF, // 1B8 - arm1C0,arm1C1,arm1C2,arm1C3,arm1C4,arm1C5,arm1C6,arm1C7, // 1C0 - arm1C0,arm_UI,arm1C2,arm1CB,arm1C4,arm_UI,arm1C6,arm_UI, // 1C8 - arm1D0,arm1D1,arm1D2,arm1D3,arm1D4,arm1D5,arm1D6,arm1D7, // 1D0 - arm1D0,arm_UI,arm1D2,arm1DB,arm1D4,arm1DD,arm1D6,arm1DF, // 1D8 - arm1E0,arm1E1,arm1E2,arm1E3,arm1E4,arm1E5,arm1E6,arm1E7, // 1E0 - arm1E0,arm_UI,arm1E2,arm1EB,arm1E4,arm_UI,arm1E6,arm_UI, // 1E8 - arm1F0,arm1F1,arm1F2,arm1F3,arm1F4,arm1F5,arm1F6,arm1F7, // 1F0 - arm1F0,arm_UI,arm1F2,arm1FB,arm1F4,arm1FD,arm1F6,arm1FF, // 1F8 - - REP16(arm200),REP16(arm210),REP16(arm220),REP16(arm230), // 200 - REP16(arm240),REP16(arm250),REP16(arm260),REP16(arm270), // 240 - REP16(arm280),REP16(arm290),REP16(arm2A0),REP16(arm2B0), // 280 - REP16(arm2C0),REP16(arm2D0),REP16(arm2E0),REP16(arm2F0), // 2C0 - REP16(arm_UI),REP16(arm310),REP16(arm320),REP16(arm330), // 300 - REP16(arm_UI),REP16(arm350),REP16(arm360),REP16(arm370), // 340 - REP16(arm380),REP16(arm390),REP16(arm3A0),REP16(arm3B0), // 380 - REP16(arm3C0),REP16(arm3D0),REP16(arm3E0),REP16(arm3F0), // 3C0 - - REP16(arm400),REP16(arm410),REP16(arm400),REP16(arm410), // 400 - REP16(arm440),REP16(arm450),REP16(arm440),REP16(arm450), // 440 - REP16(arm480),REP16(arm490),REP16(arm480),REP16(arm490), // 480 - REP16(arm4C0),REP16(arm4D0),REP16(arm4C0),REP16(arm4D0), // 4C0 - REP16(arm500),REP16(arm510),REP16(arm520),REP16(arm530), // 500 - REP16(arm540),REP16(arm550),REP16(arm560),REP16(arm570), // 540 - REP16(arm580),REP16(arm590),REP16(arm5A0),REP16(arm5B0), // 580 - REP16(arm5C0),REP16(arm5D0),REP16(arm5E0),REP16(arm5F0), // 5C0 - - arm600,arm_UI,arm602,arm_UI,arm604,arm_UI,arm606,arm_UI, // 600 - arm600,arm_UI,arm602,arm_UI,arm604,arm_UI,arm606,arm_UI, // 608 - arm610,arm_UI,arm612,arm_UI,arm614,arm_UI,arm616,arm_UI, // 610 - arm610,arm_UI,arm612,arm_UI,arm614,arm_UI,arm616,arm_UI, // 618 - arm600,arm_UI,arm602,arm_UI,arm604,arm_UI,arm606,arm_UI, // 620 - arm600,arm_UI,arm602,arm_UI,arm604,arm_UI,arm606,arm_UI, // 628 - arm610,arm_UI,arm612,arm_UI,arm614,arm_UI,arm616,arm_UI, // 630 - arm610,arm_UI,arm612,arm_UI,arm614,arm_UI,arm616,arm_UI, // 638 - arm640,arm_UI,arm642,arm_UI,arm644,arm_UI,arm646,arm_UI, // 640 - arm640,arm_UI,arm642,arm_UI,arm644,arm_UI,arm646,arm_UI, // 648 - arm650,arm_UI,arm652,arm_UI,arm654,arm_UI,arm656,arm_UI, // 650 - arm650,arm_UI,arm652,arm_UI,arm654,arm_UI,arm656,arm_UI, // 658 - arm640,arm_UI,arm642,arm_UI,arm644,arm_UI,arm646,arm_UI, // 660 - arm640,arm_UI,arm642,arm_UI,arm644,arm_UI,arm646,arm_UI, // 668 - arm650,arm_UI,arm652,arm_UI,arm654,arm_UI,arm656,arm_UI, // 670 - arm650,arm_UI,arm652,arm_UI,arm654,arm_UI,arm656,arm_UI, // 678 - arm680,arm_UI,arm682,arm_UI,arm684,arm_UI,arm686,arm_UI, // 680 - arm680,arm_UI,arm682,arm_UI,arm684,arm_UI,arm686,arm_UI, // 688 - arm690,arm_UI,arm692,arm_UI,arm694,arm_UI,arm696,arm_UI, // 690 - arm690,arm_UI,arm692,arm_UI,arm694,arm_UI,arm696,arm_UI, // 698 - arm680,arm_UI,arm682,arm_UI,arm684,arm_UI,arm686,arm_UI, // 6A0 - arm680,arm_UI,arm682,arm_UI,arm684,arm_UI,arm686,arm_UI, // 6A8 - arm690,arm_UI,arm692,arm_UI,arm694,arm_UI,arm696,arm_UI, // 6B0 - arm690,arm_UI,arm692,arm_UI,arm694,arm_UI,arm696,arm_UI, // 6B8 - arm6C0,arm_UI,arm6C2,arm_UI,arm6C4,arm_UI,arm6C6,arm_UI, // 6C0 - arm6C0,arm_UI,arm6C2,arm_UI,arm6C4,arm_UI,arm6C6,arm_UI, // 6C8 - arm6D0,arm_UI,arm6D2,arm_UI,arm6D4,arm_UI,arm6D6,arm_UI, // 6D0 - arm6D0,arm_UI,arm6D2,arm_UI,arm6D4,arm_UI,arm6D6,arm_UI, // 6D8 - arm6C0,arm_UI,arm6C2,arm_UI,arm6C4,arm_UI,arm6C6,arm_UI, // 6E0 - arm6C0,arm_UI,arm6C2,arm_UI,arm6C4,arm_UI,arm6C6,arm_UI, // 6E8 - arm6D0,arm_UI,arm6D2,arm_UI,arm6D4,arm_UI,arm6D6,arm_UI, // 6F0 - arm6D0,arm_UI,arm6D2,arm_UI,arm6D4,arm_UI,arm6D6,arm_UI, // 6F8 - - arm700,arm_UI,arm702,arm_UI,arm704,arm_UI,arm706,arm_UI, // 700 - arm700,arm_UI,arm702,arm_UI,arm704,arm_UI,arm706,arm_UI, // 708 - arm710,arm_UI,arm712,arm_UI,arm714,arm_UI,arm716,arm_UI, // 710 - arm710,arm_UI,arm712,arm_UI,arm714,arm_UI,arm716,arm_UI, // 718 - arm720,arm_UI,arm722,arm_UI,arm724,arm_UI,arm726,arm_UI, // 720 - arm720,arm_UI,arm722,arm_UI,arm724,arm_UI,arm726,arm_UI, // 728 - arm730,arm_UI,arm732,arm_UI,arm734,arm_UI,arm736,arm_UI, // 730 - arm730,arm_UI,arm732,arm_UI,arm734,arm_UI,arm736,arm_UI, // 738 - arm740,arm_UI,arm742,arm_UI,arm744,arm_UI,arm746,arm_UI, // 740 - arm740,arm_UI,arm742,arm_UI,arm744,arm_UI,arm746,arm_UI, // 748 - arm750,arm_UI,arm752,arm_UI,arm754,arm_UI,arm756,arm_UI, // 750 - arm750,arm_UI,arm752,arm_UI,arm754,arm_UI,arm756,arm_UI, // 758 - arm760,arm_UI,arm762,arm_UI,arm764,arm_UI,arm766,arm_UI, // 760 - arm760,arm_UI,arm762,arm_UI,arm764,arm_UI,arm766,arm_UI, // 768 - arm770,arm_UI,arm772,arm_UI,arm774,arm_UI,arm776,arm_UI, // 770 - arm770,arm_UI,arm772,arm_UI,arm774,arm_UI,arm776,arm_UI, // 778 - arm780,arm_UI,arm782,arm_UI,arm784,arm_UI,arm786,arm_UI, // 780 - arm780,arm_UI,arm782,arm_UI,arm784,arm_UI,arm786,arm_UI, // 788 - arm790,arm_UI,arm792,arm_UI,arm794,arm_UI,arm796,arm_UI, // 790 - arm790,arm_UI,arm792,arm_UI,arm794,arm_UI,arm796,arm_UI, // 798 - arm7A0,arm_UI,arm7A2,arm_UI,arm7A4,arm_UI,arm7A6,arm_UI, // 7A0 - arm7A0,arm_UI,arm7A2,arm_UI,arm7A4,arm_UI,arm7A6,arm_UI, // 7A8 - arm7B0,arm_UI,arm7B2,arm_UI,arm7B4,arm_UI,arm7B6,arm_UI, // 7B0 - arm7B0,arm_UI,arm7B2,arm_UI,arm7B4,arm_UI,arm7B6,arm_UI, // 7B8 - arm7C0,arm_UI,arm7C2,arm_UI,arm7C4,arm_UI,arm7C6,arm_UI, // 7C0 - arm7C0,arm_UI,arm7C2,arm_UI,arm7C4,arm_UI,arm7C6,arm_UI, // 7C8 - arm7D0,arm_UI,arm7D2,arm_UI,arm7D4,arm_UI,arm7D6,arm_UI, // 7D0 - arm7D0,arm_UI,arm7D2,arm_UI,arm7D4,arm_UI,arm7D6,arm_UI, // 7D8 - arm7E0,arm_UI,arm7E2,arm_UI,arm7E4,arm_UI,arm7E6,arm_UI, // 7E0 - arm7E0,arm_UI,arm7E2,arm_UI,arm7E4,arm_UI,arm7E6,arm_UI, // 7E8 - arm7F0,arm_UI,arm7F2,arm_UI,arm7F4,arm_UI,arm7F6,arm_UI, // 7F0 - arm7F0,arm_UI,arm7F2,arm_UI,arm7F4,arm_UI,arm7F6,arm_BP, // 7F8 - - REP16(arm800),REP16(arm810),REP16(arm820),REP16(arm830), // 800 - REP16(arm840),REP16(arm850),REP16(arm860),REP16(arm870), // 840 - REP16(arm880),REP16(arm890),REP16(arm8A0),REP16(arm8B0), // 880 - REP16(arm8C0),REP16(arm8D0),REP16(arm8E0),REP16(arm8F0), // 8C0 - REP16(arm900),REP16(arm910),REP16(arm920),REP16(arm930), // 900 - REP16(arm940),REP16(arm950),REP16(arm960),REP16(arm970), // 940 - REP16(arm980),REP16(arm990),REP16(arm9A0),REP16(arm9B0), // 980 - REP16(arm9C0),REP16(arm9D0),REP16(arm9E0),REP16(arm9F0), // 9C0 - - REP256(armA00), // A00 - REP256(armB00), // B00 - REP256(arm_UI), // C00 - REP256(arm_UI), // D00 - - arm_UI,armE01,arm_UI,armE01,arm_UI,armE01,arm_UI,armE01, // E00 - arm_UI,armE01,arm_UI,armE01,arm_UI,armE01,arm_UI,armE01, // E08 - arm_UI,armE01,arm_UI,armE01,arm_UI,armE01,arm_UI,armE01, // E10 - arm_UI,armE01,arm_UI,armE01,arm_UI,armE01,arm_UI,armE01, // E18 - REP16(arm_UI), // E20 - REP16(arm_UI), // E30 - REP16(arm_UI),REP16(arm_UI),REP16(arm_UI),REP16(arm_UI), // E40 - REP16(arm_UI),REP16(arm_UI),REP16(arm_UI),REP16(arm_UI), // E80 - REP16(arm_UI),REP16(arm_UI),REP16(arm_UI),REP16(arm_UI), // EC0 - - REP256(armF00), // F00 -}; - -// Wrapper routine (execution loop) /////////////////////////////////////// - -#include -static void tester(void) { - static int ran=0;if(ran)return;ran=1; - FILE*f=fopen("p:\\timing.txt","w");if(!f)return; - for (int op=/*0*/9; op> 28; - bool cond_res = true; - if (UNLIKELY(cond != 0x0E)) { // most opcodes are AL (always) - switch(cond) { - case 0x00: // EQ - cond_res = Z_FLAG; - break; - case 0x01: // NE - cond_res = !Z_FLAG; - break; - case 0x02: // CS - cond_res = C_FLAG; - break; - case 0x03: // CC - cond_res = !C_FLAG; - break; - case 0x04: // MI - cond_res = N_FLAG; - break; - case 0x05: // PL - cond_res = !N_FLAG; - break; - case 0x06: // VS - cond_res = V_FLAG; - break; - case 0x07: // VC - cond_res = !V_FLAG; - break; - case 0x08: // HI - cond_res = C_FLAG && !Z_FLAG; - break; - case 0x09: // LS - cond_res = !C_FLAG || Z_FLAG; - break; - case 0x0A: // GE - cond_res = N_FLAG == V_FLAG; - break; - case 0x0B: // LT - cond_res = N_FLAG != V_FLAG; - break; - case 0x0C: // GT - cond_res = !Z_FLAG &&(N_FLAG == V_FLAG); - break; - case 0x0D: // LE - cond_res = Z_FLAG || (N_FLAG != V_FLAG); - break; - case 0x0E: // AL (impossible, checked above) - cond_res = true; - break; - case 0x0F: - default: - // ??? - cond_res = false; - break; - } - } - - if (cond_res) - (*armInsnTable[((opcode>>16)&0xFF0) | ((opcode>>4)&0x0F)])(opcode); -#ifdef INSN_COUNTER - count(opcode, cond_res); -#endif - if (clockTicks < 0) - return 0; - if (clockTicks == 0) - clockTicks = 1 + codeTicksAccessSeq32(oldArmNextPC); - cpuTotalTicks += clockTicks; - - } while (cpuTotalTicks -#include -//#include -#include -#include - -#include "GBA.h" -#include "GBAcpu.h" -#include "GBAinline.h" -#include "../Globals.h" -#include "../EEprom.h" -#include "../Flash.h" -#include "../Sound.h" -#include "../Sram.h" -#include "../bios.h" -#include "../Cheats.h" -#include "../NLS.h" -#include "../elf.h" -#include "../Util.h" -#include "../Port.h" -#include "../System.h" -#include "agbprint.h" -#ifdef PROFILING -#include "prof/prof.h" -#endif - -#ifdef _MSC_VER -#define snprintf _snprintf -#endif - - -static int clockTicks; - -static INSN_REGPARM void thumbUnknownInsn(u32 opcode) -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_UNDEFINED) - log("Undefined THUMB instruction %04x at %08x\n", opcode, armNextPC-2); -#endif - CPUUndefinedException(); -} - -#ifdef BKPT_SUPPORT -static INSN_REGPARM void thumbBreakpoint(u32 opcode) -{ - reg[15].I -= 2; - armNextPC -= 2; - dbgSignal(5, opcode & 255); - clockTicks = -1; -} -#endif - -// Common macros ////////////////////////////////////////////////////////// - -#ifdef BKPT_SUPPORT -# define THUMB_CONSOLE_OUTPUT(a,b) do { \ - if ((opcode == 0x4000) && (reg[0].I == 0xC0DED00D)) { \ - dbgOutput((a), (b)); \ - } \ -} while (0) -# define UPDATE_OLDREG do { \ - if (debugger_last) { \ - snprintf(oldbuffer, sizeof(oldbuffer), "%08X", \ - armState ? reg[15].I - 4 : reg[15].I - 2); \ - int i; \ - for (i = 0; i < 18; i++) { \ - oldreg[i] = reg[i].I; \ - } \ - } \ -} while (0) -#else -# define THUMB_CONSOLE_OUTPUT(a,b) -# define UPDATE_OLDREG -#endif - -#define NEG(i) ((i) >> 31) -#define POS(i) ((~(i)) >> 31) - -#if 1 // Wii port override -//#ifndef C_CORE -#ifdef __GNUC__ -#ifdef __POWERPC__ - #define ADD_RD_RS_RN(N) \ - { \ - register int Flags; \ - register int Result; \ - asm volatile("addco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[source].I), \ - "r" (reg[N].I) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define ADD_RD_RS_O3(N) \ - { \ - register int Flags; \ - register int Result; \ - asm volatile("addco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[source].I), \ - "r" (N) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define ADD_RD_RS_O3_0 ADD_RD_RS_O3 - #define ADD_RN_O8(d) \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("addco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[(d)].I), \ - "r" (opcode & 255) \ - ); \ - reg[(d)].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define CMN_RD_RS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("addco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[dest].I), \ - "r" (value) \ - ); \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } -// Wii port - doesn't compile! -/* #define ADC_RD_RS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("mtspr xer, %4\n" \ - "addeo. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[dest].I), \ - "r" (value), \ - "r" (C_FLAG << 29) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - }*/ - #define SUB_RD_RS_RN(N) \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[source].I), \ - "r" (reg[N].I) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define SUB_RD_RS_O3(N) \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[source].I), \ - "r" (N) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define SUB_RD_RS_O3_0 SUB_RD_RS_O3 - #define SUB_RN_O8(d) \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[(d)].I), \ - "r" (opcode & 255) \ - ); \ - reg[(d)].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define CMP_RN_O8(d) \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[(d)].I), \ - "r" (opcode & 255) \ - ); \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } -// Wii port - doesn't compile for some reason -/* #define SBC_RD_RS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("mtspr xer, %4\n" \ - "subfeo. %0, %3, %2\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[dest].I), \ - "r" (value), \ - "r" (C_FLAG << 29) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - }*/ - #define NEG_RD_RS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subfco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[source].I), \ - "r" (0) \ - ); \ - reg[dest].I = Result; \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } - #define CMP_RD_RS \ - {\ - register int Flags; \ - register int Result; \ - asm volatile("subco. %0, %2, %3\n" \ - "mcrxr cr1\n" \ - "mfcr %1\n" \ - : "=r" (Result), \ - "=r" (Flags) \ - : "r" (reg[dest].I), \ - "r" (value) \ - ); \ - Z_FLAG = (Flags >> 29) & 1; \ - N_FLAG = (Flags >> 31) & 1; \ - C_FLAG = (Flags >> 25) & 1; \ - V_FLAG = (Flags >> 26) & 1; \ - } -#else - #define EMIT1(op,arg) #op" "arg"; " - #define EMIT2(op,src,dest) #op" "src", "dest"; " - #define CONST(val) "$"#val - #define ASMVAR(cvar) ASMVAR2 (__USER_LABEL_PREFIX__, cvar) - #define ASMVAR2(prefix,cvar) STRING (prefix) cvar - #define STRING(x) #x - #define VAR(var) ASMVAR(#var) - #define REGREF1(index) ASMVAR("reg("index")") - #define REGREF2(index,scale) ASMVAR("reg(,"index","#scale")") - #define eax "%%eax" - #define ecx "%%ecx" - #define edx "%%edx" - #define ADD_RN_O8(d) \ - asm ("andl $0xFF, %%eax;"\ - "addl %%eax, %0;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setcb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : "=m" (reg[(d)].I)); - #define CMN_RD_RS \ - asm ("add %0, %1;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setcb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : \ - : "r" (value), "r" (reg[dest].I):"1"); - #define ADC_RD_RS \ - asm (EMIT2(bt,CONST(0),VAR(C_FLAG)) \ - "adc %1, %%ebx;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setcb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : "=b" (reg[dest].I)\ - : "r" (value), "b" (reg[dest].I)); - #define SUB_RN_O8(d) \ - asm ("andl $0xFF, %%eax;"\ - "subl %%eax, %0;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setncb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : "=m" (reg[(d)].I)); - #define MOV_RN_O8(d) \ - asm ("andl $0xFF, %%eax;"\ - EMIT2(movb,CONST(0),VAR(N_FLAG)) \ - "movl %%eax, %0;"\ - EMIT1(setzb, VAR(Z_FLAG)) \ - : "=m" (reg[(d)].I)); - #define CMP_RN_O8(d) \ - asm ("andl $0xFF, %%eax;"\ - "cmpl %%eax, %0;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setncb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : \ - : "m" (reg[(d)].I)); - #define SBC_RD_RS \ - asm volatile (EMIT2(bt,CONST(0),VAR(C_FLAG)) \ - "cmc;"\ - "sbb %1, %%ebx;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setncb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : "=b" (reg[dest].I)\ - : "r" (value), "b" (reg[dest].I) : "cc", "memory"); - #define LSL_RD_RS \ - asm ("shl %%cl, %%eax;"\ - EMIT1(setcb, VAR(C_FLAG)) \ - : "=a" (value)\ - : "a" (reg[dest].I), "c" (value)); - #define LSR_RD_RS \ - asm ("shr %%cl, %%eax;"\ - EMIT1(setcb, VAR(C_FLAG)) \ - : "=a" (value)\ - : "a" (reg[dest].I), "c" (value)); - #define ASR_RD_RS \ - asm ("sar %%cl, %%eax;"\ - EMIT1(setcb, VAR(C_FLAG)) \ - : "=a" (value)\ - : "a" (reg[dest].I), "c" (value)); - #define ROR_RD_RS \ - asm ("ror %%cl, %%eax;"\ - EMIT1(setcb, VAR(C_FLAG)) \ - : "=a" (value)\ - : "a" (reg[dest].I), "c" (value)); - #define NEG_RD_RS \ - asm ("neg %%ebx;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setncb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : "=b" (reg[dest].I)\ - : "b" (reg[source].I)); - #define CMP_RD_RS \ - asm ("sub %0, %1;"\ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT1(setncb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) \ - : \ - : "r" (value), "r" (reg[dest].I):"1"); - #define IMM5_INSN(OP,N) \ - asm("movl %%eax,%%ecx;" \ - "shrl $1,%%eax;" \ - "andl $7,%%ecx;" \ - "andl $0x1C,%%eax;" \ - EMIT2(movl, REGREF1(eax), edx) \ - OP \ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT2(movl, edx, REGREF2(ecx,4)) \ - : : "i" (N)) - #define IMM5_INSN_0(OP) \ - asm("movl %%eax,%%ecx;" \ - "shrl $1,%%eax;" \ - "andl $7,%%ecx;" \ - "andl $0x1C,%%eax;" \ - EMIT2(movl, REGREF1(eax), edx) \ - OP \ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT2(movl, edx, REGREF2(ecx,4)) \ - : : ) - #define IMM5_LSL \ - "shll %0,%%edx;"\ - EMIT1(setcb, VAR(C_FLAG)) - #define IMM5_LSL_0 \ - "testl %%edx,%%edx;" - #define IMM5_LSR \ - "shrl %0,%%edx;"\ - EMIT1(setcb, VAR(C_FLAG)) - #define IMM5_LSR_0 \ - "testl %%edx,%%edx;"\ - EMIT1(setsb, VAR(C_FLAG)) \ - "xorl %%edx,%%edx;" - #define IMM5_ASR \ - "sarl %0,%%edx;"\ - EMIT1(setcb, VAR(C_FLAG)) - #define IMM5_ASR_0 \ - "sarl $31,%%edx;"\ - EMIT1(setsb, VAR(C_FLAG)) - #define THREEARG_INSN(OP,N) \ - asm("movl %%eax,%%edx;" \ - "shrl $1,%%edx;" \ - "andl $0x1C,%%edx;" \ - "andl $7,%%eax;" \ - EMIT2(movl, REGREF1(edx), ecx) \ - OP(N) \ - EMIT1(setsb, VAR(N_FLAG)) \ - EMIT1(setzb, VAR(Z_FLAG)) \ - EMIT2(movl, ecx, REGREF2(eax,4)) \ - : : ) - #define ADD_RD_RS_RN(N) \ - EMIT2(add,VAR(reg)"+"#N"*4",ecx) \ - EMIT1(setcb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) - #define ADD_RD_RS_O3(N) \ - "add $"#N",%%ecx;" \ - EMIT1(setcb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) - #define ADD_RD_RS_O3_0(N) \ - EMIT2(movb,CONST(0),VAR(C_FLAG)) \ - "add $0,%%ecx;" \ - EMIT2(movb,CONST(0),VAR(V_FLAG)) - #define SUB_RD_RS_RN(N) \ - EMIT2(sub,VAR(reg)"+"#N"*4",ecx) \ - EMIT1(setncb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) - #define SUB_RD_RS_O3(N) \ - "sub $"#N",%%ecx;" \ - EMIT1(setncb, VAR(C_FLAG)) \ - EMIT1(setob, VAR(V_FLAG)) - #define SUB_RD_RS_O3_0(N) \ - EMIT2(movb,CONST(1),VAR(C_FLAG)) \ - "sub $0,%%ecx;" \ - EMIT2(movb,CONST(0),VAR(V_FLAG)) -#endif -#else // !__GNUC__ - #define ADD_RD_RS_RN(N) \ - {\ - __asm mov eax, source\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm add ebx, dword ptr [OFFSET reg+4*N]\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define ADD_RD_RS_O3(N) \ - {\ - __asm mov eax, source\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm add ebx, N\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define ADD_RD_RS_O3_0 \ - {\ - __asm mov eax, source\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm add ebx, 0\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm mov byte ptr C_FLAG, 0\ - __asm mov byte ptr V_FLAG, 0\ - } - #define ADD_RN_O8(d) \ - {\ - __asm mov ebx, opcode\ - __asm and ebx, 255\ - __asm add dword ptr [OFFSET reg+4*(d)], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define CMN_RD_RS \ - {\ - __asm mov eax, dest\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm add ebx, value\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define ADC_RD_RS \ - {\ - __asm mov ebx, dest\ - __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ - __asm bt word ptr C_FLAG, 0\ - __asm adc ebx, value\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define SUB_RD_RS_RN(N) \ - {\ - __asm mov eax, source\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm sub ebx, dword ptr [OFFSET reg+4*N]\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setnc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define SUB_RD_RS_O3(N) \ - {\ - __asm mov eax, source\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm sub ebx, N\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setnc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define SUB_RD_RS_O3_0 \ - {\ - __asm mov eax, source\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm sub ebx, 0\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm mov byte ptr C_FLAG, 1\ - __asm mov byte ptr V_FLAG, 0\ - } - #define SUB_RN_O8(d) \ - {\ - __asm mov ebx, opcode\ - __asm and ebx, 255\ - __asm sub dword ptr [OFFSET reg + 4*(d)], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setnc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define MOV_RN_O8(d) \ - {\ - __asm mov eax, opcode\ - __asm and eax, 255\ - __asm mov dword ptr [OFFSET reg+4*(d)], eax\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - } - #define CMP_RN_O8(d) \ - {\ - __asm mov eax, dword ptr [OFFSET reg+4*(d)]\ - __asm mov ebx, opcode\ - __asm and ebx, 255\ - __asm sub eax, ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setnc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define SBC_RD_RS \ - {\ - __asm mov ebx, dest\ - __asm mov ebx, dword ptr [OFFSET reg + 4*ebx]\ - __asm mov eax, value\ - __asm bt word ptr C_FLAG, 0\ - __asm cmc\ - __asm sbb ebx, eax\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg + 4*eax], ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setnc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define LSL_RD_RM_I5 \ - {\ - __asm mov eax, source\ - __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ - __asm mov cl, byte ptr shift\ - __asm shl eax, cl\ - __asm mov value, eax\ - __asm setc byte ptr C_FLAG\ - } - #define LSL_RD_RS \ - {\ - __asm mov eax, dest\ - __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ - __asm mov cl, byte ptr value\ - __asm shl eax, cl\ - __asm mov value, eax\ - __asm setc byte ptr C_FLAG\ - } - #define LSR_RD_RM_I5 \ - {\ - __asm mov eax, source\ - __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ - __asm mov cl, byte ptr shift\ - __asm shr eax, cl\ - __asm mov value, eax\ - __asm setc byte ptr C_FLAG\ - } - #define LSR_RD_RS \ - {\ - __asm mov eax, dest\ - __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ - __asm mov cl, byte ptr value\ - __asm shr eax, cl\ - __asm mov value, eax\ - __asm setc byte ptr C_FLAG\ - } - #define ASR_RD_RM_I5 \ - {\ - __asm mov eax, source\ - __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ - __asm mov cl, byte ptr shift\ - __asm sar eax, cl\ - __asm mov value, eax\ - __asm setc byte ptr C_FLAG\ - } - #define ASR_RD_RS \ - {\ - __asm mov eax, dest\ - __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ - __asm mov cl, byte ptr value\ - __asm sar eax, cl\ - __asm mov value, eax\ - __asm setc byte ptr C_FLAG\ - } - #define ROR_RD_RS \ - {\ - __asm mov eax, dest\ - __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ - __asm mov cl, byte ptr value\ - __asm ror eax, cl\ - __asm mov value, eax\ - __asm setc byte ptr C_FLAG\ - } - #define NEG_RD_RS \ - {\ - __asm mov ebx, source\ - __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ - __asm neg ebx\ - __asm mov eax, dest\ - __asm mov dword ptr [OFFSET reg+4*eax],ebx\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setnc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } - #define CMP_RD_RS \ - {\ - __asm mov eax, dest\ - __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ - __asm sub ebx, value\ - __asm sets byte ptr N_FLAG\ - __asm setz byte ptr Z_FLAG\ - __asm setnc byte ptr C_FLAG\ - __asm seto byte ptr V_FLAG\ - } -#endif -#endif - -// C core -#ifndef ADDCARRY - #define ADDCARRY(a, b, c) \ - C_FLAG = ((NEG(a) & NEG(b)) |\ - (NEG(a) & POS(c)) |\ - (NEG(b) & POS(c))) ? true : false; -#endif -#ifndef ADDOVERFLOW - #define ADDOVERFLOW(a, b, c) \ - V_FLAG = ((NEG(a) & NEG(b) & POS(c)) |\ - (POS(a) & POS(b) & NEG(c))) ? true : false; -#endif -#ifndef SUBCARRY - #define SUBCARRY(a, b, c) \ - C_FLAG = ((NEG(a) & POS(b)) |\ - (NEG(a) & POS(c)) |\ - (POS(b) & POS(c))) ? true : false; -#endif -#ifndef SUBOVERFLOW - #define SUBOVERFLOW(a, b, c)\ - V_FLAG = ((NEG(a) & POS(b) & POS(c)) |\ - (POS(a) & NEG(b) & NEG(c))) ? true : false; -#endif -#ifndef ADD_RD_RS_RN - #define ADD_RD_RS_RN(N) \ - {\ - u32 lhs = reg[source].I;\ - u32 rhs = reg[N].I;\ - u32 res = lhs + rhs;\ - reg[dest].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - ADDCARRY(lhs, rhs, res);\ - ADDOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef ADD_RD_RS_O3 - #define ADD_RD_RS_O3(N) \ - {\ - u32 lhs = reg[source].I;\ - u32 rhs = N;\ - u32 res = lhs + rhs;\ - reg[dest].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - ADDCARRY(lhs, rhs, res);\ - ADDOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef ADD_RD_RS_O3_0 -# define ADD_RD_RS_O3_0 ADD_RD_RS_O3 -#endif -#ifndef ADD_RN_O8 - #define ADD_RN_O8(d) \ - {\ - u32 lhs = reg[(d)].I;\ - u32 rhs = (opcode & 255);\ - u32 res = lhs + rhs;\ - reg[(d)].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - ADDCARRY(lhs, rhs, res);\ - ADDOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef CMN_RD_RS - #define CMN_RD_RS \ - {\ - u32 lhs = reg[dest].I;\ - u32 rhs = value;\ - u32 res = lhs + rhs;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - ADDCARRY(lhs, rhs, res);\ - ADDOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef ADC_RD_RS - #define ADC_RD_RS \ - {\ - u32 lhs = reg[dest].I;\ - u32 rhs = value;\ - u32 res = lhs + rhs + (u32)C_FLAG;\ - reg[dest].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - ADDCARRY(lhs, rhs, res);\ - ADDOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef SUB_RD_RS_RN - #define SUB_RD_RS_RN(N) \ - {\ - u32 lhs = reg[source].I;\ - u32 rhs = reg[N].I;\ - u32 res = lhs - rhs;\ - reg[dest].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - SUBCARRY(lhs, rhs, res);\ - SUBOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef SUB_RD_RS_O3 - #define SUB_RD_RS_O3(N) \ - {\ - u32 lhs = reg[source].I;\ - u32 rhs = N;\ - u32 res = lhs - rhs;\ - reg[dest].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - SUBCARRY(lhs, rhs, res);\ - SUBOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef SUB_RD_RS_O3_0 -# define SUB_RD_RS_O3_0 SUB_RD_RS_O3 -#endif -#ifndef SUB_RN_O8 - #define SUB_RN_O8(d) \ - {\ - u32 lhs = reg[(d)].I;\ - u32 rhs = (opcode & 255);\ - u32 res = lhs - rhs;\ - reg[(d)].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - SUBCARRY(lhs, rhs, res);\ - SUBOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef MOV_RN_O8 - #define MOV_RN_O8(d) \ - {\ - reg[d].I = opcode & 255;\ - N_FLAG = false;\ - Z_FLAG = (reg[d].I ? false : true);\ - } -#endif -#ifndef CMP_RN_O8 - #define CMP_RN_O8(d) \ - {\ - u32 lhs = reg[(d)].I;\ - u32 rhs = (opcode & 255);\ - u32 res = lhs - rhs;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - SUBCARRY(lhs, rhs, res);\ - SUBOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef SBC_RD_RS - #define SBC_RD_RS \ - {\ - u32 lhs = reg[dest].I;\ - u32 rhs = value;\ - u32 res = lhs - rhs - !((u32)C_FLAG);\ - reg[dest].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - SUBCARRY(lhs, rhs, res);\ - SUBOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef LSL_RD_RM_I5 - #define LSL_RD_RM_I5 \ - {\ - C_FLAG = (reg[source].I >> (32 - shift)) & 1 ? true : false;\ - value = reg[source].I << shift;\ - } -#endif -#ifndef LSL_RD_RS - #define LSL_RD_RS \ - {\ - C_FLAG = (reg[dest].I >> (32 - value)) & 1 ? true : false;\ - value = reg[dest].I << value;\ - } -#endif -#ifndef LSR_RD_RM_I5 - #define LSR_RD_RM_I5 \ - {\ - C_FLAG = (reg[source].I >> (shift - 1)) & 1 ? true : false;\ - value = reg[source].I >> shift;\ - } -#endif -#ifndef LSR_RD_RS - #define LSR_RD_RS \ - {\ - C_FLAG = (reg[dest].I >> (value - 1)) & 1 ? true : false;\ - value = reg[dest].I >> value;\ - } -#endif -#ifndef ASR_RD_RM_I5 - #define ASR_RD_RM_I5 \ - {\ - C_FLAG = ((s32)reg[source].I >> (int)(shift - 1)) & 1 ? true : false;\ - value = (s32)reg[source].I >> (int)shift;\ - } -#endif -#ifndef ASR_RD_RS - #define ASR_RD_RS \ - {\ - C_FLAG = ((s32)reg[dest].I >> (int)(value - 1)) & 1 ? true : false;\ - value = (s32)reg[dest].I >> (int)value;\ - } -#endif -#ifndef ROR_RD_RS - #define ROR_RD_RS \ - {\ - C_FLAG = (reg[dest].I >> (value - 1)) & 1 ? true : false;\ - value = ((reg[dest].I << (32 - value)) |\ - (reg[dest].I >> value));\ - } -#endif -#ifndef NEG_RD_RS - #define NEG_RD_RS \ - {\ - u32 lhs = reg[source].I;\ - u32 rhs = 0;\ - u32 res = rhs - lhs;\ - reg[dest].I = res;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - SUBCARRY(rhs, lhs, res);\ - SUBOVERFLOW(rhs, lhs, res);\ - } -#endif -#ifndef CMP_RD_RS - #define CMP_RD_RS \ - {\ - u32 lhs = reg[dest].I;\ - u32 rhs = value;\ - u32 res = lhs - rhs;\ - Z_FLAG = (res == 0) ? true : false;\ - N_FLAG = NEG(res) ? true : false;\ - SUBCARRY(lhs, rhs, res);\ - SUBOVERFLOW(lhs, rhs, res);\ - } -#endif -#ifndef IMM5_INSN - #define IMM5_INSN(OP,N) \ - int dest = opcode & 0x07;\ - int source = (opcode >> 3) & 0x07;\ - u32 value;\ - OP(N);\ - reg[dest].I = value;\ - N_FLAG = (value & 0x80000000 ? true : false);\ - Z_FLAG = (value ? false : true); - #define IMM5_INSN_0(OP) \ - int dest = opcode & 0x07;\ - int source = (opcode >> 3) & 0x07;\ - u32 value;\ - OP;\ - reg[dest].I = value;\ - N_FLAG = (value & 0x80000000 ? true : false);\ - Z_FLAG = (value ? false : true); - #define IMM5_LSL(N) \ - int shift = N;\ - LSL_RD_RM_I5; - #define IMM5_LSL_0 \ - value = reg[source].I; - #define IMM5_LSR(N) \ - int shift = N;\ - LSR_RD_RM_I5; - #define IMM5_LSR_0 \ - C_FLAG = reg[source].I & 0x80000000 ? true : false;\ - value = 0; - #define IMM5_ASR(N) \ - int shift = N;\ - ASR_RD_RM_I5; - #define IMM5_ASR_0 \ - if(reg[source].I & 0x80000000) {\ - value = 0xFFFFFFFF;\ - C_FLAG = true;\ - } else {\ - value = 0;\ - C_FLAG = false;\ - } -#endif -#ifndef THREEARG_INSN - #define THREEARG_INSN(OP,N) \ - int dest = opcode & 0x07; \ - int source = (opcode >> 3) & 0x07; \ - OP(N); -#endif - -// Shift instructions ///////////////////////////////////////////////////// - -#define DEFINE_IMM5_INSN(OP,BASE) \ - static INSN_REGPARM void thumb##BASE##_00(u32 opcode) { IMM5_INSN_0(OP##_0); } \ - static INSN_REGPARM void thumb##BASE##_01(u32 opcode) { IMM5_INSN(OP, 1); } \ - static INSN_REGPARM void thumb##BASE##_02(u32 opcode) { IMM5_INSN(OP, 2); } \ - static INSN_REGPARM void thumb##BASE##_03(u32 opcode) { IMM5_INSN(OP, 3); } \ - static INSN_REGPARM void thumb##BASE##_04(u32 opcode) { IMM5_INSN(OP, 4); } \ - static INSN_REGPARM void thumb##BASE##_05(u32 opcode) { IMM5_INSN(OP, 5); } \ - static INSN_REGPARM void thumb##BASE##_06(u32 opcode) { IMM5_INSN(OP, 6); } \ - static INSN_REGPARM void thumb##BASE##_07(u32 opcode) { IMM5_INSN(OP, 7); } \ - static INSN_REGPARM void thumb##BASE##_08(u32 opcode) { IMM5_INSN(OP, 8); } \ - static INSN_REGPARM void thumb##BASE##_09(u32 opcode) { IMM5_INSN(OP, 9); } \ - static INSN_REGPARM void thumb##BASE##_0A(u32 opcode) { IMM5_INSN(OP,10); } \ - static INSN_REGPARM void thumb##BASE##_0B(u32 opcode) { IMM5_INSN(OP,11); } \ - static INSN_REGPARM void thumb##BASE##_0C(u32 opcode) { IMM5_INSN(OP,12); } \ - static INSN_REGPARM void thumb##BASE##_0D(u32 opcode) { IMM5_INSN(OP,13); } \ - static INSN_REGPARM void thumb##BASE##_0E(u32 opcode) { IMM5_INSN(OP,14); } \ - static INSN_REGPARM void thumb##BASE##_0F(u32 opcode) { IMM5_INSN(OP,15); } \ - static INSN_REGPARM void thumb##BASE##_10(u32 opcode) { IMM5_INSN(OP,16); } \ - static INSN_REGPARM void thumb##BASE##_11(u32 opcode) { IMM5_INSN(OP,17); } \ - static INSN_REGPARM void thumb##BASE##_12(u32 opcode) { IMM5_INSN(OP,18); } \ - static INSN_REGPARM void thumb##BASE##_13(u32 opcode) { IMM5_INSN(OP,19); } \ - static INSN_REGPARM void thumb##BASE##_14(u32 opcode) { IMM5_INSN(OP,20); } \ - static INSN_REGPARM void thumb##BASE##_15(u32 opcode) { IMM5_INSN(OP,21); } \ - static INSN_REGPARM void thumb##BASE##_16(u32 opcode) { IMM5_INSN(OP,22); } \ - static INSN_REGPARM void thumb##BASE##_17(u32 opcode) { IMM5_INSN(OP,23); } \ - static INSN_REGPARM void thumb##BASE##_18(u32 opcode) { IMM5_INSN(OP,24); } \ - static INSN_REGPARM void thumb##BASE##_19(u32 opcode) { IMM5_INSN(OP,25); } \ - static INSN_REGPARM void thumb##BASE##_1A(u32 opcode) { IMM5_INSN(OP,26); } \ - static INSN_REGPARM void thumb##BASE##_1B(u32 opcode) { IMM5_INSN(OP,27); } \ - static INSN_REGPARM void thumb##BASE##_1C(u32 opcode) { IMM5_INSN(OP,28); } \ - static INSN_REGPARM void thumb##BASE##_1D(u32 opcode) { IMM5_INSN(OP,29); } \ - static INSN_REGPARM void thumb##BASE##_1E(u32 opcode) { IMM5_INSN(OP,30); } \ - static INSN_REGPARM void thumb##BASE##_1F(u32 opcode) { IMM5_INSN(OP,31); } - -// LSL Rd, Rm, #Imm 5 -DEFINE_IMM5_INSN(IMM5_LSL,00) -// LSR Rd, Rm, #Imm 5 -DEFINE_IMM5_INSN(IMM5_LSR,08) -// ASR Rd, Rm, #Imm 5 -DEFINE_IMM5_INSN(IMM5_ASR,10) - -// 3-argument ADD/SUB ///////////////////////////////////////////////////// - -#define DEFINE_REG3_INSN(OP,BASE) \ - static INSN_REGPARM void thumb##BASE##_0(u32 opcode) { THREEARG_INSN(OP,0); } \ - static INSN_REGPARM void thumb##BASE##_1(u32 opcode) { THREEARG_INSN(OP,1); } \ - static INSN_REGPARM void thumb##BASE##_2(u32 opcode) { THREEARG_INSN(OP,2); } \ - static INSN_REGPARM void thumb##BASE##_3(u32 opcode) { THREEARG_INSN(OP,3); } \ - static INSN_REGPARM void thumb##BASE##_4(u32 opcode) { THREEARG_INSN(OP,4); } \ - static INSN_REGPARM void thumb##BASE##_5(u32 opcode) { THREEARG_INSN(OP,5); } \ - static INSN_REGPARM void thumb##BASE##_6(u32 opcode) { THREEARG_INSN(OP,6); } \ - static INSN_REGPARM void thumb##BASE##_7(u32 opcode) { THREEARG_INSN(OP,7); } - -#define DEFINE_IMM3_INSN(OP,BASE) \ - static INSN_REGPARM void thumb##BASE##_0(u32 opcode) { THREEARG_INSN(OP##_0,0); } \ - static INSN_REGPARM void thumb##BASE##_1(u32 opcode) { THREEARG_INSN(OP,1); } \ - static INSN_REGPARM void thumb##BASE##_2(u32 opcode) { THREEARG_INSN(OP,2); } \ - static INSN_REGPARM void thumb##BASE##_3(u32 opcode) { THREEARG_INSN(OP,3); } \ - static INSN_REGPARM void thumb##BASE##_4(u32 opcode) { THREEARG_INSN(OP,4); } \ - static INSN_REGPARM void thumb##BASE##_5(u32 opcode) { THREEARG_INSN(OP,5); } \ - static INSN_REGPARM void thumb##BASE##_6(u32 opcode) { THREEARG_INSN(OP,6); } \ - static INSN_REGPARM void thumb##BASE##_7(u32 opcode) { THREEARG_INSN(OP,7); } - -// ADD Rd, Rs, Rn -DEFINE_REG3_INSN(ADD_RD_RS_RN,18) -// SUB Rd, Rs, Rn -DEFINE_REG3_INSN(SUB_RD_RS_RN,1A) -// ADD Rd, Rs, #Offset3 -DEFINE_IMM3_INSN(ADD_RD_RS_O3,1C) -// SUB Rd, Rs, #Offset3 -DEFINE_IMM3_INSN(SUB_RD_RS_O3,1E) - -// MOV/CMP/ADD/SUB immediate ////////////////////////////////////////////// - -// MOV R0, #Offset8 -static INSN_REGPARM void thumb20(u32 opcode) { MOV_RN_O8(0); } -// MOV R1, #Offset8 -static INSN_REGPARM void thumb21(u32 opcode) { MOV_RN_O8(1); } -// MOV R2, #Offset8 -static INSN_REGPARM void thumb22(u32 opcode) { MOV_RN_O8(2); } -// MOV R3, #Offset8 -static INSN_REGPARM void thumb23(u32 opcode) { MOV_RN_O8(3); } -// MOV R4, #Offset8 -static INSN_REGPARM void thumb24(u32 opcode) { MOV_RN_O8(4); } -// MOV R5, #Offset8 -static INSN_REGPARM void thumb25(u32 opcode) { MOV_RN_O8(5); } -// MOV R6, #Offset8 -static INSN_REGPARM void thumb26(u32 opcode) { MOV_RN_O8(6); } -// MOV R7, #Offset8 -static INSN_REGPARM void thumb27(u32 opcode) { MOV_RN_O8(7); } - -// CMP R0, #Offset8 -static INSN_REGPARM void thumb28(u32 opcode) { CMP_RN_O8(0); } -// CMP R1, #Offset8 -static INSN_REGPARM void thumb29(u32 opcode) { CMP_RN_O8(1); } -// CMP R2, #Offset8 -static INSN_REGPARM void thumb2A(u32 opcode) { CMP_RN_O8(2); } -// CMP R3, #Offset8 -static INSN_REGPARM void thumb2B(u32 opcode) { CMP_RN_O8(3); } -// CMP R4, #Offset8 -static INSN_REGPARM void thumb2C(u32 opcode) { CMP_RN_O8(4); } -// CMP R5, #Offset8 -static INSN_REGPARM void thumb2D(u32 opcode) { CMP_RN_O8(5); } -// CMP R6, #Offset8 -static INSN_REGPARM void thumb2E(u32 opcode) { CMP_RN_O8(6); } -// CMP R7, #Offset8 -static INSN_REGPARM void thumb2F(u32 opcode) { CMP_RN_O8(7); } - -// ADD R0,#Offset8 -static INSN_REGPARM void thumb30(u32 opcode) { ADD_RN_O8(0); } -// ADD R1,#Offset8 -static INSN_REGPARM void thumb31(u32 opcode) { ADD_RN_O8(1); } -// ADD R2,#Offset8 -static INSN_REGPARM void thumb32(u32 opcode) { ADD_RN_O8(2); } -// ADD R3,#Offset8 -static INSN_REGPARM void thumb33(u32 opcode) { ADD_RN_O8(3); } -// ADD R4,#Offset8 -static INSN_REGPARM void thumb34(u32 opcode) { ADD_RN_O8(4); } -// ADD R5,#Offset8 -static INSN_REGPARM void thumb35(u32 opcode) { ADD_RN_O8(5); } -// ADD R6,#Offset8 -static INSN_REGPARM void thumb36(u32 opcode) { ADD_RN_O8(6); } -// ADD R7,#Offset8 -static INSN_REGPARM void thumb37(u32 opcode) { ADD_RN_O8(7); } - -// SUB R0,#Offset8 -static INSN_REGPARM void thumb38(u32 opcode) { SUB_RN_O8(0); } -// SUB R1,#Offset8 -static INSN_REGPARM void thumb39(u32 opcode) { SUB_RN_O8(1); } -// SUB R2,#Offset8 -static INSN_REGPARM void thumb3A(u32 opcode) { SUB_RN_O8(2); } -// SUB R3,#Offset8 -static INSN_REGPARM void thumb3B(u32 opcode) { SUB_RN_O8(3); } -// SUB R4,#Offset8 -static INSN_REGPARM void thumb3C(u32 opcode) { SUB_RN_O8(4); } -// SUB R5,#Offset8 -static INSN_REGPARM void thumb3D(u32 opcode) { SUB_RN_O8(5); } -// SUB R6,#Offset8 -static INSN_REGPARM void thumb3E(u32 opcode) { SUB_RN_O8(6); } -// SUB R7,#Offset8 -static INSN_REGPARM void thumb3F(u32 opcode) { SUB_RN_O8(7); } - -// ALU operations ///////////////////////////////////////////////////////// - -// AND Rd, Rs -static INSN_REGPARM void thumb40_0(u32 opcode) -{ - int dest = opcode & 7; - reg[dest].I &= reg[(opcode >> 3)&7].I; - N_FLAG = reg[dest].I & 0x80000000 ? true : false; - Z_FLAG = reg[dest].I ? false : true; - THUMB_CONSOLE_OUTPUT(NULL, reg[2].I); -} - -// EOR Rd, Rs -static INSN_REGPARM void thumb40_1(u32 opcode) -{ - int dest = opcode & 7; - reg[dest].I ^= reg[(opcode >> 3)&7].I; - N_FLAG = reg[dest].I & 0x80000000 ? true : false; - Z_FLAG = reg[dest].I ? false : true; -} - -// LSL Rd, Rs -static INSN_REGPARM void thumb40_2(u32 opcode) -{ - int dest = opcode & 7; - u32 value = reg[(opcode >> 3)&7].B.B0; - if(value) { - if(value == 32) { - value = 0; - C_FLAG = (reg[dest].I & 1 ? true : false); - } else if(value < 32) { - LSL_RD_RS; - } else { - value = 0; - C_FLAG = false; - } - reg[dest].I = value; - } - N_FLAG = reg[dest].I & 0x80000000 ? true : false; - Z_FLAG = reg[dest].I ? false : true; - clockTicks = codeTicksAccess16(armNextPC)+2; -} - -// LSR Rd, Rs -static INSN_REGPARM void thumb40_3(u32 opcode) -{ - int dest = opcode & 7; - u32 value = reg[(opcode >> 3)&7].B.B0; - if(value) { - if(value == 32) { - value = 0; - C_FLAG = (reg[dest].I & 0x80000000 ? true : false); - } else if(value < 32) { - LSR_RD_RS; - } else { - value = 0; - C_FLAG = false; - } - reg[dest].I = value; - } - N_FLAG = reg[dest].I & 0x80000000 ? true : false; - Z_FLAG = reg[dest].I ? false : true; - clockTicks = codeTicksAccess16(armNextPC)+2; -} - -// ASR Rd, Rs -static INSN_REGPARM void thumb41_0(u32 opcode) -{ - int dest = opcode & 7; - u32 value = reg[(opcode >> 3)&7].B.B0; - if(value) { - if(value < 32) { - ASR_RD_RS; - reg[dest].I = value; - } else { - if(reg[dest].I & 0x80000000){ - reg[dest].I = 0xFFFFFFFF; - C_FLAG = true; - } else { - reg[dest].I = 0x00000000; - C_FLAG = false; - } - } - } - N_FLAG = reg[dest].I & 0x80000000 ? true : false; - Z_FLAG = reg[dest].I ? false : true; - clockTicks = codeTicksAccess16(armNextPC)+2; -} - -// ADC Rd, Rs -static INSN_REGPARM void thumb41_1(u32 opcode) -{ - int dest = opcode & 0x07; - u32 value = reg[(opcode >> 3)&7].I; - ADC_RD_RS; -} - -// SBC Rd, Rs -static INSN_REGPARM void thumb41_2(u32 opcode) -{ - int dest = opcode & 0x07; - u32 value = reg[(opcode >> 3)&7].I; - SBC_RD_RS; -} - -// ROR Rd, Rs -static INSN_REGPARM void thumb41_3(u32 opcode) -{ - int dest = opcode & 7; - u32 value = reg[(opcode >> 3)&7].B.B0; - - if(value) { - value = value & 0x1f; - if(value == 0) { - C_FLAG = (reg[dest].I & 0x80000000 ? true : false); - } else { - ROR_RD_RS; - reg[dest].I = value; - } - } - clockTicks = codeTicksAccess16(armNextPC)+2; - N_FLAG = reg[dest].I & 0x80000000 ? true : false; - Z_FLAG = reg[dest].I ? false : true; -} - -// TST Rd, Rs -static INSN_REGPARM void thumb42_0(u32 opcode) -{ - u32 value = reg[opcode & 7].I & reg[(opcode >> 3) & 7].I; - N_FLAG = value & 0x80000000 ? true : false; - Z_FLAG = value ? false : true; -} - -// NEG Rd, Rs -static INSN_REGPARM void thumb42_1(u32 opcode) -{ - int dest = opcode & 7; - int source = (opcode >> 3) & 7; - NEG_RD_RS; -} - -// CMP Rd, Rs -static INSN_REGPARM void thumb42_2(u32 opcode) -{ - int dest = opcode & 7; - u32 value = reg[(opcode >> 3)&7].I; - CMP_RD_RS; -} - -// CMN Rd, Rs -static INSN_REGPARM void thumb42_3(u32 opcode) -{ - int dest = opcode & 7; - u32 value = reg[(opcode >> 3)&7].I; - CMN_RD_RS; -} - -// ORR Rd, Rs -static INSN_REGPARM void thumb43_0(u32 opcode) -{ - int dest = opcode & 7; - reg[dest].I |= reg[(opcode >> 3) & 7].I; - Z_FLAG = reg[dest].I ? false : true; - N_FLAG = reg[dest].I & 0x80000000 ? true : false; -} - -// MUL Rd, Rs -static INSN_REGPARM void thumb43_1(u32 opcode) -{ - clockTicks = 1; - int dest = opcode & 7; - u32 rm = reg[dest].I; - reg[dest].I = reg[(opcode >> 3) & 7].I * rm; - if (((s32)rm) < 0) - rm = ~rm; - if ((rm & 0xFFFFFF00) == 0) - clockTicks += 0; - else if ((rm & 0xFFFF0000) == 0) - clockTicks += 1; - else if ((rm & 0xFF000000) == 0) - clockTicks += 2; - else - clockTicks += 3; - busPrefetchCount = (busPrefetchCount<>(8-clockTicks)); - clockTicks += codeTicksAccess16(armNextPC) + 1; - Z_FLAG = reg[dest].I ? false : true; - N_FLAG = reg[dest].I & 0x80000000 ? true : false; -} - -// BIC Rd, Rs -static INSN_REGPARM void thumb43_2(u32 opcode) -{ - int dest = opcode & 7; - reg[dest].I &= (~reg[(opcode >> 3) & 7].I); - Z_FLAG = reg[dest].I ? false : true; - N_FLAG = reg[dest].I & 0x80000000 ? true : false; -} - -// MVN Rd, Rs -static INSN_REGPARM void thumb43_3(u32 opcode) -{ - int dest = opcode & 7; - reg[dest].I = ~reg[(opcode >> 3) & 7].I; - Z_FLAG = reg[dest].I ? false : true; - N_FLAG = reg[dest].I & 0x80000000 ? true : false; -} - -// High-register instructions and BX ////////////////////////////////////// - -// ADD Rd, Hs -static INSN_REGPARM void thumb44_1(u32 opcode) -{ - reg[opcode&7].I += reg[((opcode>>3)&7)+8].I; -} - -// ADD Hd, Rs -static INSN_REGPARM void thumb44_2(u32 opcode) -{ - reg[(opcode&7)+8].I += reg[(opcode>>3)&7].I; - if((opcode&7) == 7) { - reg[15].I &= 0xFFFFFFFE; - armNextPC = reg[15].I; - reg[15].I += 2; - THUMB_PREFETCH; - clockTicks = codeTicksAccessSeq16(armNextPC)*2 - + codeTicksAccess16(armNextPC) + 3; - } -} - -// ADD Hd, Hs -static INSN_REGPARM void thumb44_3(u32 opcode) -{ - reg[(opcode&7)+8].I += reg[((opcode>>3)&7)+8].I; - if((opcode&7) == 7) { - reg[15].I &= 0xFFFFFFFE; - armNextPC = reg[15].I; - reg[15].I += 2; - THUMB_PREFETCH; - clockTicks = codeTicksAccessSeq16(armNextPC)*2 - + codeTicksAccess16(armNextPC) + 3; - } -} - -// CMP Rd, Hs -static INSN_REGPARM void thumb45_1(u32 opcode) -{ - int dest = opcode & 7; - u32 value = reg[((opcode>>3)&7)+8].I; - CMP_RD_RS; -} - -// CMP Hd, Rs -static INSN_REGPARM void thumb45_2(u32 opcode) -{ - int dest = (opcode & 7) + 8; - u32 value = reg[(opcode>>3)&7].I; - CMP_RD_RS; -} - -// CMP Hd, Hs -static INSN_REGPARM void thumb45_3(u32 opcode) -{ - int dest = (opcode & 7) + 8; - u32 value = reg[((opcode>>3)&7)+8].I; - CMP_RD_RS; -} - -// MOV Rd, Hs -static INSN_REGPARM void thumb46_1(u32 opcode) -{ - reg[opcode&7].I = reg[((opcode>>3)&7)+8].I; -} - -// MOV Hd, Rs -static INSN_REGPARM void thumb46_2(u32 opcode) -{ - reg[(opcode&7)+8].I = reg[(opcode>>3)&7].I; - if((opcode&7) == 7) { - UPDATE_OLDREG; - reg[15].I &= 0xFFFFFFFE; - armNextPC = reg[15].I; - reg[15].I += 2; - THUMB_PREFETCH; - clockTicks = codeTicksAccessSeq16(armNextPC)*2 - + codeTicksAccess16(armNextPC) + 3; - } -} - -// MOV Hd, Hs -static INSN_REGPARM void thumb46_3(u32 opcode) -{ - reg[(opcode&7)+8].I = reg[((opcode>>3)&7)+8].I; - if((opcode&7) == 7) { - UPDATE_OLDREG; - reg[15].I &= 0xFFFFFFFE; - armNextPC = reg[15].I; - reg[15].I += 2; - THUMB_PREFETCH; - clockTicks = codeTicksAccessSeq16(armNextPC)*2 - + codeTicksAccess16(armNextPC) + 3; - } -} - - -// BX Rs -static INSN_REGPARM void thumb47(u32 opcode) -{ - int base = (opcode >> 3) & 15; - busPrefetchCount=0; - UPDATE_OLDREG; - reg[15].I = reg[base].I; - if(reg[base].I & 1) { - armState = false; - reg[15].I &= 0xFFFFFFFE; - armNextPC = reg[15].I; - reg[15].I += 2; - THUMB_PREFETCH; - clockTicks = codeTicksAccessSeq16(armNextPC) - + codeTicksAccessSeq16(armNextPC) + codeTicksAccess16(armNextPC) + 3; - } else { - armState = true; - reg[15].I &= 0xFFFFFFFC; - armNextPC = reg[15].I; - reg[15].I += 4; - ARM_PREFETCH; - clockTicks = codeTicksAccessSeq32(armNextPC) - + codeTicksAccessSeq32(armNextPC) + codeTicksAccess32(armNextPC) + 3; - } -} - -// Load/store instructions //////////////////////////////////////////////// - -// LDR R0~R7,[PC, #Imm] -static INSN_REGPARM void thumb48(u32 opcode) -{ - u8 regist = (opcode >> 8) & 7; - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); - reg[regist].I = CPUReadMemoryQuick(address); - busPrefetchCount=0; - clockTicks = 3 + dataTicksAccess32(address) + codeTicksAccess16(armNextPC); -} - -// STR Rd, [Rs, Rn] -static INSN_REGPARM void thumb50(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; - CPUWriteMemory(address, reg[opcode & 7].I); - clockTicks = dataTicksAccess32(address) + codeTicksAccess16(armNextPC) + 2; -} - -// STRH Rd, [Rs, Rn] -static INSN_REGPARM void thumb52(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; - CPUWriteHalfWord(address, reg[opcode&7].W.W0); - clockTicks = dataTicksAccess16(address) + codeTicksAccess16(armNextPC) + 2; -} - -// STRB Rd, [Rs, Rn] -static INSN_REGPARM void thumb54(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode >>6)&7].I; - CPUWriteByte(address, reg[opcode & 7].B.B0); - clockTicks = dataTicksAccess16(address) + codeTicksAccess16(armNextPC) + 2; -} - -// LDSB Rd, [Rs, Rn] -static INSN_REGPARM void thumb56(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; - reg[opcode&7].I = (s8)CPUReadByte(address); - clockTicks = 3 + dataTicksAccess16(address) + codeTicksAccess16(armNextPC); -} - -// LDR Rd, [Rs, Rn] -static INSN_REGPARM void thumb58(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; - reg[opcode&7].I = CPUReadMemory(address); - clockTicks = 3 + dataTicksAccess32(address) + codeTicksAccess16(armNextPC); -} - -// LDRH Rd, [Rs, Rn] -static INSN_REGPARM void thumb5A(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; - reg[opcode&7].I = CPUReadHalfWord(address); - clockTicks = 3 + dataTicksAccess32(address) + codeTicksAccess16(armNextPC); -} - -// LDRB Rd, [Rs, Rn] -static INSN_REGPARM void thumb5C(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; - reg[opcode&7].I = CPUReadByte(address); - clockTicks = 3 + dataTicksAccess16(address) + codeTicksAccess16(armNextPC); -} - -// LDSH Rd, [Rs, Rn] -static INSN_REGPARM void thumb5E(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; - reg[opcode&7].I = (s16)CPUReadHalfWordSigned(address); - clockTicks = 3 + dataTicksAccess16(address) + codeTicksAccess16(armNextPC); -} - -// STR Rd, [Rs, #Imm] -static INSN_REGPARM void thumb60(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<2); - CPUWriteMemory(address, reg[opcode&7].I); - clockTicks = dataTicksAccess32(address) + codeTicksAccess16(armNextPC) + 2; -} - -// LDR Rd, [Rs, #Imm] -static INSN_REGPARM void thumb68(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<2); - reg[opcode&7].I = CPUReadMemory(address); - clockTicks = 3 + dataTicksAccess32(address) + codeTicksAccess16(armNextPC); -} - -// STRB Rd, [Rs, #Imm] -static INSN_REGPARM void thumb70(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)); - CPUWriteByte(address, reg[opcode&7].B.B0); - clockTicks = dataTicksAccess16(address) + codeTicksAccess16(armNextPC) + 2; -} - -// LDRB Rd, [Rs, #Imm] -static INSN_REGPARM void thumb78(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)); - reg[opcode&7].I = CPUReadByte(address); - clockTicks = 3 + dataTicksAccess16(address) + codeTicksAccess16(armNextPC); -} - -// STRH Rd, [Rs, #Imm] -static INSN_REGPARM void thumb80(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<1); - CPUWriteHalfWord(address, reg[opcode&7].W.W0); - clockTicks = dataTicksAccess16(address) + codeTicksAccess16(armNextPC) + 2; -} - -// LDRH Rd, [Rs, #Imm] -static INSN_REGPARM void thumb88(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<1); - reg[opcode&7].I = CPUReadHalfWord(address); - clockTicks = 3 + dataTicksAccess16(address) + codeTicksAccess16(armNextPC); -} - -// STR R0~R7, [SP, #Imm] -static INSN_REGPARM void thumb90(u32 opcode) -{ - u8 regist = (opcode >> 8) & 7; - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[13].I + ((opcode&255)<<2); - CPUWriteMemory(address, reg[regist].I); - clockTicks = dataTicksAccess32(address) + codeTicksAccess16(armNextPC) + 2; -} - -// LDR R0~R7, [SP, #Imm] -static INSN_REGPARM void thumb98(u32 opcode) -{ - u8 regist = (opcode >> 8) & 7; - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[13].I + ((opcode&255)<<2); - reg[regist].I = CPUReadMemoryQuick(address); - clockTicks = 3 + dataTicksAccess32(address) + codeTicksAccess16(armNextPC); -} - -// PC/stack-related /////////////////////////////////////////////////////// - -// ADD R0~R7, PC, Imm -static INSN_REGPARM void thumbA0(u32 opcode) -{ - u8 regist = (opcode >> 8) & 7; - reg[regist].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); -} - -// ADD R0~R7, SP, Imm -static INSN_REGPARM void thumbA8(u32 opcode) -{ - u8 regist = (opcode >> 8) & 7; - reg[regist].I = reg[13].I + ((opcode&255)<<2); -} - -// ADD SP, Imm -static INSN_REGPARM void thumbB0(u32 opcode) -{ - int offset = (opcode & 127) << 2; - if(opcode & 0x80) - offset = -offset; - reg[13].I += offset; -} - -// Push and pop /////////////////////////////////////////////////////////// - -#define PUSH_REG(val, r) \ - if (opcode & (val)) { \ - CPUWriteMemory(address, reg[(r)].I); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address); \ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address); \ - } \ - count++; \ - address += 4; \ - } - -#define POP_REG(val, r) \ - if (opcode & (val)) { \ - reg[(r)].I = CPUReadMemory(address); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address); \ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address); \ - } \ - count++; \ - address += 4; \ - } - -// PUSH {Rlist} -static INSN_REGPARM void thumbB4(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int count = 0; - u32 temp = reg[13].I - 4 * cpuBitsSet[opcode & 0xff]; - u32 address = temp & 0xFFFFFFFC; - PUSH_REG(1, 0); - PUSH_REG(2, 1); - PUSH_REG(4, 2); - PUSH_REG(8, 3); - PUSH_REG(16, 4); - PUSH_REG(32, 5); - PUSH_REG(64, 6); - PUSH_REG(128, 7); - clockTicks += 1 + codeTicksAccess16(armNextPC); - reg[13].I = temp; -} - -// PUSH {Rlist, LR} -static INSN_REGPARM void thumbB5(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int count = 0; - u32 temp = reg[13].I - 4 - 4 * cpuBitsSet[opcode & 0xff]; - u32 address = temp & 0xFFFFFFFC; - PUSH_REG(1, 0); - PUSH_REG(2, 1); - PUSH_REG(4, 2); - PUSH_REG(8, 3); - PUSH_REG(16, 4); - PUSH_REG(32, 5); - PUSH_REG(64, 6); - PUSH_REG(128, 7); - PUSH_REG(256, 14); - clockTicks += 1 + codeTicksAccess16(armNextPC); - reg[13].I = temp; -} - -// POP {Rlist} -static INSN_REGPARM void thumbBC(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int count = 0; - u32 address = reg[13].I & 0xFFFFFFFC; - u32 temp = reg[13].I + 4*cpuBitsSet[opcode & 0xFF]; - POP_REG(1, 0); - POP_REG(2, 1); - POP_REG(4, 2); - POP_REG(8, 3); - POP_REG(16, 4); - POP_REG(32, 5); - POP_REG(64, 6); - POP_REG(128, 7); - reg[13].I = temp; - clockTicks = 2 + codeTicksAccess16(armNextPC); -} - -// POP {Rlist, PC} -static INSN_REGPARM void thumbBD(u32 opcode) -{ - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - int count = 0; - u32 address = reg[13].I & 0xFFFFFFFC; - u32 temp = reg[13].I + 4 + 4*cpuBitsSet[opcode & 0xFF]; - POP_REG(1, 0); - POP_REG(2, 1); - POP_REG(4, 2); - POP_REG(8, 3); - POP_REG(16, 4); - POP_REG(32, 5); - POP_REG(64, 6); - POP_REG(128, 7); - reg[15].I = (CPUReadMemory(address) & 0xFFFFFFFE); - if (!count) { - clockTicks += 1 + dataTicksAccess32(address); - } else { - clockTicks += 1 + dataTicksAccessSeq32(address); - } - count++; - armNextPC = reg[15].I; - reg[15].I += 2; - reg[13].I = temp; - THUMB_PREFETCH; - busPrefetchCount = 0; - clockTicks += 3 + codeTicksAccess16(armNextPC) + codeTicksAccess16(armNextPC); -} - -// Load/store multiple //////////////////////////////////////////////////// - -#define THUMB_STM_REG(val,r,b) \ - if(opcode & (val)) { \ - CPUWriteMemory(address, reg[(r)].I); \ - reg[(b)].I = temp; \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address); \ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address); \ - } \ - count++; \ - address += 4; \ - } - -#define THUMB_LDM_REG(val,r) \ - if(opcode & (val)) { \ - reg[(r)].I = CPUReadMemory(address); \ - if (!count) { \ - clockTicks += 1 + dataTicksAccess32(address); \ - } else { \ - clockTicks += 1 + dataTicksAccessSeq32(address); \ - } \ - count++; \ - address += 4; \ - } - -// STM R0~7!, {Rlist} -static INSN_REGPARM void thumbC0(u32 opcode) -{ - u8 regist = (opcode >> 8) & 7; - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[regist].I & 0xFFFFFFFC; - u32 temp = reg[regist].I + 4*cpuBitsSet[opcode & 0xff]; - int count = 0; - // store - THUMB_STM_REG(1, 0, regist); - THUMB_STM_REG(2, 1, regist); - THUMB_STM_REG(4, 2, regist); - THUMB_STM_REG(8, 3, regist); - THUMB_STM_REG(16, 4, regist); - THUMB_STM_REG(32, 5, regist); - THUMB_STM_REG(64, 6, regist); - THUMB_STM_REG(128, 7, regist); - clockTicks = 1 + codeTicksAccess16(armNextPC); -} - -// LDM R0~R7!, {Rlist} -static INSN_REGPARM void thumbC8(u32 opcode) -{ - u8 regist = (opcode >> 8) & 7; - if (busPrefetchCount == 0) - busPrefetch = busPrefetchEnable; - u32 address = reg[regist].I & 0xFFFFFFFC; - u32 temp = reg[regist].I + 4*cpuBitsSet[opcode & 0xFF]; - int count = 0; - // load - THUMB_LDM_REG(1, 0); - THUMB_LDM_REG(2, 1); - THUMB_LDM_REG(4, 2); - THUMB_LDM_REG(8, 3); - THUMB_LDM_REG(16, 4); - THUMB_LDM_REG(32, 5); - THUMB_LDM_REG(64, 6); - THUMB_LDM_REG(128, 7); - clockTicks = 2 + codeTicksAccess16(armNextPC); - if(!(opcode & (1<>6])(opcode); - - if (clockTicks < 0) - return 0; - if (clockTicks==0) - clockTicks = codeTicksAccessSeq16(oldArmNextPC) + 1; - cpuTotalTicks += clockTicks; - - } while (cpuTotalTicks < cpuNextEvent && !armState && !holdState && !SWITicks); - return 1; -} diff --git a/source/vba/agb/GBA.cpp b/source/vba/agb/GBA.cpp deleted file mode 100644 index 95f2e1af..00000000 --- a/source/vba/agb/GBA.cpp +++ /dev/null @@ -1,3997 +0,0 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005-2006 Forgotten and the VBA development team -// Copyright (C) VBA-M development team -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include -#include -#include -#include "GBA.h" -#include "GBAcpu.h" -#include "GBAinline.h" -#include "../Globals.h" -#include "GBAGfx.h" -#include "../EEprom.h" -#include "../Flash.h" -#include "../Sound.h" -#include "../Sram.h" -#include "../bios.h" -#include "../Cheats.h" -#include "../NLS.h" -#include "../elf.h" -#include "../Util.h" -#include "../Port.h" -#include "../System.h" -#include "agbprint.h" -#ifdef PROFILING -#include "prof/prof.h" -#endif - -#ifdef __GNUC__ -#define _stricmp strcasecmp -#endif - - -extern int emulating; -#ifdef LINK_EMULATION -extern int linktime; -extern void StartLink(u16); -extern void StartJOYLink(u16); -extern void StartGPLink(u16); -extern void LinkSSend(u16); -extern void LinkUpdate(int); -extern int linktime2; -#endif -int SWITicks = 0; -int IRQTicks = 0; - -u32 mastercode = 0; -int layerEnableDelay = 0; -bool busPrefetch = false; -bool busPrefetchEnable = false; -u32 busPrefetchCount = 0; -int cpuDmaTicksToUpdate = 0; -int cpuDmaCount = 0; -bool cpuDmaHack = false; -u32 cpuDmaLast = 0; -int dummyAddress = 0; - -bool cpuBreakLoop = false; -int cpuNextEvent = 0; - -int gbaSaveType = 0; // used to remember the save type on reset -bool intState = false; -bool stopState = false; -bool holdState = false; -int holdType = 0; -bool cpuSramEnabled = true; -bool cpuFlashEnabled = true; -bool cpuEEPROMEnabled = true; -bool cpuEEPROMSensorEnabled = false; - -u32 cpuPrefetch[2]; - -int cpuTotalTicks = 0; -#ifdef PROFILING -int profilingTicks = 0; -int profilingTicksReload = 0; -static profile_segment *profilSegment = NULL; -#endif - -#ifdef BKPT_SUPPORT -u8 freezeWorkRAM[0x40000]; -u8 freezeInternalRAM[0x8000]; -u8 freezeVRAM[0x18000]; -u8 freezePRAM[0x400]; -u8 freezeOAM[0x400]; -bool debugger_last; -#endif - -int lcdTicks = (useBios && !skipBios) ? 1008 : 208; -u8 timerOnOffDelay = 0; -u16 timer0Value = 0; -bool timer0On = false; -int timer0Ticks = 0; -int timer0Reload = 0; -int timer0ClockReload = 0; -u16 timer1Value = 0; -bool timer1On = false; -int timer1Ticks = 0; -int timer1Reload = 0; -int timer1ClockReload = 0; -u16 timer2Value = 0; -bool timer2On = false; -int timer2Ticks = 0; -int timer2Reload = 0; -int timer2ClockReload = 0; -u16 timer3Value = 0; -bool timer3On = false; -int timer3Ticks = 0; -int timer3Reload = 0; -int timer3ClockReload = 0; -u32 dma0Source = 0; -u32 dma0Dest = 0; -u32 dma1Source = 0; -u32 dma1Dest = 0; -u32 dma2Source = 0; -u32 dma2Dest = 0; -u32 dma3Source = 0; -u32 dma3Dest = 0; -void (*cpuSaveGameFunc)(u32,u8) = flashSaveDecide; -void (*renderLine)() = mode0RenderLine; -bool fxOn = false; -bool windowOn = false; -int frameCount = 0; -char buffer[1024]; -FILE *out = NULL; -u32 lastTime = 0; -int count = 0; - -int capture = 0; -int capturePrevious = 0; -int captureNumber = 0; - -const int TIMER_TICKS[4] = { - 0, - 6, - 8, - 10 -}; - -const u32 objTilesAddress [3] = {0x010000, 0x014000, 0x014000}; -const u8 gamepakRamWaitState[4] = { 4, 3, 2, 8 }; -const u8 gamepakWaitState[4] = { 4, 3, 2, 8 }; -const u8 gamepakWaitState0[2] = { 2, 1 }; -const u8 gamepakWaitState1[2] = { 4, 1 }; -const u8 gamepakWaitState2[2] = { 8, 1 }; -const bool isInRom [16]= - { false, false, false, false, false, false, false, false, - true, true, true, true, true, true, false, false }; - -u8 memoryWait[16] = - { 0, 0, 2, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0 }; -u8 memoryWait32[16] = - { 0, 0, 5, 0, 0, 1, 1, 0, 7, 7, 9, 9, 13, 13, 4, 0 }; -u8 memoryWaitSeq[16] = - { 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 4, 4, 8, 8, 4, 0 }; -u8 memoryWaitSeq32[16] = - { 0, 0, 5, 0, 0, 1, 1, 0, 5, 5, 9, 9, 17, 17, 4, 0 }; - -// The videoMemoryWait constants are used to add some waitstates -// if the opcode access video memory data outside of vblank/hblank -// It seems to happen on only one ticks for each pixel. -// Not used for now (too problematic with current code). -//const u8 videoMemoryWait[16] = -// {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - - -u8 biosProtected[4]; - -#ifdef WORDS_BIGENDIAN -bool cpuBiosSwapped = false; -#endif - -u32 myROM[] = { -0xEA000006, -0xEA000093, -0xEA000006, -0x00000000, -0x00000000, -0x00000000, -0xEA000088, -0x00000000, -0xE3A00302, -0xE1A0F000, -0xE92D5800, -0xE55EC002, -0xE28FB03C, -0xE79BC10C, -0xE14FB000, -0xE92D0800, -0xE20BB080, -0xE38BB01F, -0xE129F00B, -0xE92D4004, -0xE1A0E00F, -0xE12FFF1C, -0xE8BD4004, -0xE3A0C0D3, -0xE129F00C, -0xE8BD0800, -0xE169F00B, -0xE8BD5800, -0xE1B0F00E, -0x0000009C, -0x0000009C, -0x0000009C, -0x0000009C, -0x000001F8, -0x000001F0, -0x000000AC, -0x000000A0, -0x000000FC, -0x00000168, -0xE12FFF1E, -0xE1A03000, -0xE1A00001, -0xE1A01003, -0xE2113102, -0x42611000, -0xE033C040, -0x22600000, -0xE1B02001, -0xE15200A0, -0x91A02082, -0x3AFFFFFC, -0xE1500002, -0xE0A33003, -0x20400002, -0xE1320001, -0x11A020A2, -0x1AFFFFF9, -0xE1A01000, -0xE1A00003, -0xE1B0C08C, -0x22600000, -0x42611000, -0xE12FFF1E, -0xE92D0010, -0xE1A0C000, -0xE3A01001, -0xE1500001, -0x81A000A0, -0x81A01081, -0x8AFFFFFB, -0xE1A0000C, -0xE1A04001, -0xE3A03000, -0xE1A02001, -0xE15200A0, -0x91A02082, -0x3AFFFFFC, -0xE1500002, -0xE0A33003, -0x20400002, -0xE1320001, -0x11A020A2, -0x1AFFFFF9, -0xE0811003, -0xE1B010A1, -0xE1510004, -0x3AFFFFEE, -0xE1A00004, -0xE8BD0010, -0xE12FFF1E, -0xE0010090, -0xE1A01741, -0xE2611000, -0xE3A030A9, -0xE0030391, -0xE1A03743, -0xE2833E39, -0xE0030391, -0xE1A03743, -0xE2833C09, -0xE283301C, -0xE0030391, -0xE1A03743, -0xE2833C0F, -0xE28330B6, -0xE0030391, -0xE1A03743, -0xE2833C16, -0xE28330AA, -0xE0030391, -0xE1A03743, -0xE2833A02, -0xE2833081, -0xE0030391, -0xE1A03743, -0xE2833C36, -0xE2833051, -0xE0030391, -0xE1A03743, -0xE2833CA2, -0xE28330F9, -0xE0000093, -0xE1A00840, -0xE12FFF1E, -0xE3A00001, -0xE3A01001, -0xE92D4010, -0xE3A03000, -0xE3A04001, -0xE3500000, -0x1B000004, -0xE5CC3301, -0xEB000002, -0x0AFFFFFC, -0xE8BD4010, -0xE12FFF1E, -0xE3A0C301, -0xE5CC3208, -0xE15C20B8, -0xE0110002, -0x10222000, -0x114C20B8, -0xE5CC4208, -0xE12FFF1E, -0xE92D500F, -0xE3A00301, -0xE1A0E00F, -0xE510F004, -0xE8BD500F, -0xE25EF004, -0xE59FD044, -0xE92D5000, -0xE14FC000, -0xE10FE000, -0xE92D5000, -0xE3A0C302, -0xE5DCE09C, -0xE35E00A5, -0x1A000004, -0x05DCE0B4, -0x021EE080, -0xE28FE004, -0x159FF018, -0x059FF018, -0xE59FD018, -0xE8BD5000, -0xE169F00C, -0xE8BD5000, -0xE25EF004, -0x03007FF0, -0x09FE2000, -0x09FFC000, -0x03007FE0 -}; - -variable_desc saveGameStruct[] = { - { &DISPCNT , sizeof(u16) }, - { &DISPSTAT , sizeof(u16) }, - { &VCOUNT , sizeof(u16) }, - { &BG0CNT , sizeof(u16) }, - { &BG1CNT , sizeof(u16) }, - { &BG2CNT , sizeof(u16) }, - { &BG3CNT , sizeof(u16) }, - { &BG0HOFS , sizeof(u16) }, - { &BG0VOFS , sizeof(u16) }, - { &BG1HOFS , sizeof(u16) }, - { &BG1VOFS , sizeof(u16) }, - { &BG2HOFS , sizeof(u16) }, - { &BG2VOFS , sizeof(u16) }, - { &BG3HOFS , sizeof(u16) }, - { &BG3VOFS , sizeof(u16) }, - { &BG2PA , sizeof(u16) }, - { &BG2PB , sizeof(u16) }, - { &BG2PC , sizeof(u16) }, - { &BG2PD , sizeof(u16) }, - { &BG2X_L , sizeof(u16) }, - { &BG2X_H , sizeof(u16) }, - { &BG2Y_L , sizeof(u16) }, - { &BG2Y_H , sizeof(u16) }, - { &BG3PA , sizeof(u16) }, - { &BG3PB , sizeof(u16) }, - { &BG3PC , sizeof(u16) }, - { &BG3PD , sizeof(u16) }, - { &BG3X_L , sizeof(u16) }, - { &BG3X_H , sizeof(u16) }, - { &BG3Y_L , sizeof(u16) }, - { &BG3Y_H , sizeof(u16) }, - { &WIN0H , sizeof(u16) }, - { &WIN1H , sizeof(u16) }, - { &WIN0V , sizeof(u16) }, - { &WIN1V , sizeof(u16) }, - { &WININ , sizeof(u16) }, - { &WINOUT , sizeof(u16) }, - { &MOSAIC , sizeof(u16) }, - { &BLDMOD , sizeof(u16) }, - { &COLEV , sizeof(u16) }, - { &COLY , sizeof(u16) }, - { &DM0SAD_L , sizeof(u16) }, - { &DM0SAD_H , sizeof(u16) }, - { &DM0DAD_L , sizeof(u16) }, - { &DM0DAD_H , sizeof(u16) }, - { &DM0CNT_L , sizeof(u16) }, - { &DM0CNT_H , sizeof(u16) }, - { &DM1SAD_L , sizeof(u16) }, - { &DM1SAD_H , sizeof(u16) }, - { &DM1DAD_L , sizeof(u16) }, - { &DM1DAD_H , sizeof(u16) }, - { &DM1CNT_L , sizeof(u16) }, - { &DM1CNT_H , sizeof(u16) }, - { &DM2SAD_L , sizeof(u16) }, - { &DM2SAD_H , sizeof(u16) }, - { &DM2DAD_L , sizeof(u16) }, - { &DM2DAD_H , sizeof(u16) }, - { &DM2CNT_L , sizeof(u16) }, - { &DM2CNT_H , sizeof(u16) }, - { &DM3SAD_L , sizeof(u16) }, - { &DM3SAD_H , sizeof(u16) }, - { &DM3DAD_L , sizeof(u16) }, - { &DM3DAD_H , sizeof(u16) }, - { &DM3CNT_L , sizeof(u16) }, - { &DM3CNT_H , sizeof(u16) }, - { &TM0D , sizeof(u16) }, - { &TM0CNT , sizeof(u16) }, - { &TM1D , sizeof(u16) }, - { &TM1CNT , sizeof(u16) }, - { &TM2D , sizeof(u16) }, - { &TM2CNT , sizeof(u16) }, - { &TM3D , sizeof(u16) }, - { &TM3CNT , sizeof(u16) }, - { &P1 , sizeof(u16) }, - { &IE , sizeof(u16) }, - { &IF , sizeof(u16) }, - { &IME , sizeof(u16) }, - { &holdState, sizeof(bool) }, - { &holdType, sizeof(int) }, - { &lcdTicks, sizeof(int) }, - { &timer0On , sizeof(bool) }, - { &timer0Ticks , sizeof(int) }, - { &timer0Reload , sizeof(int) }, - { &timer0ClockReload , sizeof(int) }, - { &timer1On , sizeof(bool) }, - { &timer1Ticks , sizeof(int) }, - { &timer1Reload , sizeof(int) }, - { &timer1ClockReload , sizeof(int) }, - { &timer2On , sizeof(bool) }, - { &timer2Ticks , sizeof(int) }, - { &timer2Reload , sizeof(int) }, - { &timer2ClockReload , sizeof(int) }, - { &timer3On , sizeof(bool) }, - { &timer3Ticks , sizeof(int) }, - { &timer3Reload , sizeof(int) }, - { &timer3ClockReload , sizeof(int) }, - { &dma0Source , sizeof(u32) }, - { &dma0Dest , sizeof(u32) }, - { &dma1Source , sizeof(u32) }, - { &dma1Dest , sizeof(u32) }, - { &dma2Source , sizeof(u32) }, - { &dma2Dest , sizeof(u32) }, - { &dma3Source , sizeof(u32) }, - { &dma3Dest , sizeof(u32) }, - { &fxOn, sizeof(bool) }, - { &windowOn, sizeof(bool) }, - { &N_FLAG , sizeof(bool) }, - { &C_FLAG , sizeof(bool) }, - { &Z_FLAG , sizeof(bool) }, - { &V_FLAG , sizeof(bool) }, - { &armState , sizeof(bool) }, - { &armIrqEnable , sizeof(bool) }, - { &armNextPC , sizeof(u32) }, - { &armMode , sizeof(int) }, - { &saveType , sizeof(int) }, - { NULL, 0 } -}; - -static int romSize = 0x2000000; - -#ifdef PROFILING -void cpuProfil(profile_segment *seg) -{ - profilSegment = seg; -} - -void cpuEnableProfiling(int hz) -{ - if(hz == 0) - hz = 100; - profilingTicks = profilingTicksReload = 16777216 / hz; - profSetHertz(hz); -} -#endif - - -inline int CPUUpdateTicks() -{ - int cpuLoopTicks = lcdTicks; - - if(soundTicks < cpuLoopTicks) - cpuLoopTicks = soundTicks; - - if(timer0On && (timer0Ticks < cpuLoopTicks)) { - cpuLoopTicks = timer0Ticks; - } - if(timer1On && !(TM1CNT & 4) && (timer1Ticks < cpuLoopTicks)) { - cpuLoopTicks = timer1Ticks; - } - if(timer2On && !(TM2CNT & 4) && (timer2Ticks < cpuLoopTicks)) { - cpuLoopTicks = timer2Ticks; - } - if(timer3On && !(TM3CNT & 4) && (timer3Ticks < cpuLoopTicks)) { - cpuLoopTicks = timer3Ticks; - } -#ifdef PROFILING - if(profilingTicksReload != 0) { - if(profilingTicks < cpuLoopTicks) { - cpuLoopTicks = profilingTicks; - } - } -#endif - - if (SWITicks) { - if (SWITicks < cpuLoopTicks) - cpuLoopTicks = SWITicks; - } - - if (IRQTicks) { - if (IRQTicks < cpuLoopTicks) - cpuLoopTicks = IRQTicks; - } - - return cpuLoopTicks; -} - -void CPUUpdateWindow0() -{ - int x00 = WIN0H>>8; - int x01 = WIN0H & 255; - - if(x00 <= x01) { - for(int i = 0; i < 240; i++) { - gfxInWin0[i] = (i >= x00 && i < x01); - } - } else { - for(int i = 0; i < 240; i++) { - gfxInWin0[i] = (i >= x00 || i < x01); - } - } -} - -void CPUUpdateWindow1() -{ - int x00 = WIN1H>>8; - int x01 = WIN1H & 255; - - if(x00 <= x01) { - for(int i = 0; i < 240; i++) { - gfxInWin1[i] = (i >= x00 && i < x01); - } - } else { - for(int i = 0; i < 240; i++) { - gfxInWin1[i] = (i >= x00 || i < x01); - } - } -} - -extern u32 line0[240]; -extern u32 line1[240]; -extern u32 line2[240]; -extern u32 line3[240]; - -#define CLEAR_ARRAY(a) \ - {\ - u32 *array = (a);\ - for(int i = 0; i < 240; i++) {\ - *array++ = 0x80000000;\ - }\ - }\ - -void CPUUpdateRenderBuffers(bool force) -{ - if(!(layerEnable & 0x0100) || force) { - CLEAR_ARRAY(line0); - } - if(!(layerEnable & 0x0200) || force) { - CLEAR_ARRAY(line1); - } - if(!(layerEnable & 0x0400) || force) { - CLEAR_ARRAY(line2); - } - if(!(layerEnable & 0x0800) || force) { - CLEAR_ARRAY(line3); - } -} - -static bool CPUWriteState(gzFile gzFile) -{ - utilWriteInt(gzFile, SAVE_GAME_VERSION); - - utilGzWrite(gzFile, &rom[0xa0], 16); - - utilWriteInt(gzFile, useBios); - - utilGzWrite(gzFile, ®[0], sizeof(reg)); - - utilWriteData(gzFile, saveGameStruct); - - // new to version 0.7.1 - utilWriteInt(gzFile, stopState); - // new to version 0.8 - utilWriteInt(gzFile, IRQTicks); - - utilGzWrite(gzFile, internalRAM, 0x8000); - utilGzWrite(gzFile, paletteRAM, 0x400); - utilGzWrite(gzFile, workRAM, 0x40000); - utilGzWrite(gzFile, vram, 0x20000); - utilGzWrite(gzFile, oam, 0x400); - utilGzWrite(gzFile, pix, 4*241*162); - utilGzWrite(gzFile, ioMem, 0x400); - - eepromSaveGame(gzFile); - flashSaveGame(gzFile); - soundSaveGame(gzFile); - - cheatsSaveGame(gzFile); - - // version 1.5 - rtcSaveGame(gzFile); - - return true; -} - -bool CPUWriteState(const char *file) -{ - gzFile gzFile = utilGzOpen(file, "wb"); - - if(gzFile == NULL) { - systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), file); - return false; - } - - bool res = CPUWriteState(gzFile); - - utilGzClose(gzFile); - - return res; -} - -extern void SetFileBytesWritten(int bytes); // Tantric - Wii/GameCube addition - store # bytes written - -bool CPUWriteMemState(char *memory, int available) -{ - gzFile gzFile = utilMemGzOpen(memory, available, "w"); - - if(gzFile == NULL) { - return false; - } - - bool res = CPUWriteState(gzFile); - - long pos = utilGzMemTell(gzFile)+8; - - if(pos >= (available)) - res = false; - - SetFileBytesWritten((int)pos); // Tantric - Wii/GameCube addition - store # bytes written - - utilGzClose(gzFile); - - return res; -} - -static bool CPUReadState(gzFile gzFile) -{ - int version = utilReadInt(gzFile); - - if(version > SAVE_GAME_VERSION || version < SAVE_GAME_VERSION_1) { - systemMessage(MSG_UNSUPPORTED_VBA_SGM, - N_("Unsupported VisualBoyAdvance save game version %d"), - version); - return false; - } - - u8 romname[17]; - - utilGzRead(gzFile, romname, 16); - - if(memcmp(&rom[0xa0], romname, 16) != 0) { - romname[16]=0; - for(int i = 0; i < 16; i++) - if(romname[i] < 32) - romname[i] = 32; - systemMessage(MSG_CANNOT_LOAD_SGM, N_("Cannot load save game for %s"), romname); - return false; - } - - bool ub = utilReadInt(gzFile) ? true : false; - - if(ub != useBios) { - if(useBios) - systemMessage(MSG_SAVE_GAME_NOT_USING_BIOS, - N_("Save game is not using the BIOS files")); - else - systemMessage(MSG_SAVE_GAME_USING_BIOS, - N_("Save game is using the BIOS file")); - return false; - } - - utilGzRead(gzFile, ®[0], sizeof(reg)); - - utilReadData(gzFile, saveGameStruct); - - if(version < SAVE_GAME_VERSION_3) - stopState = false; - else - stopState = utilReadInt(gzFile) ? true : false; - - if(version < SAVE_GAME_VERSION_4) - { - IRQTicks = 0; - intState = false; - } - else - { - IRQTicks = utilReadInt(gzFile); - if (IRQTicks>0) - intState = true; - else - { - intState = false; - IRQTicks = 0; - } - } - - utilGzRead(gzFile, internalRAM, 0x8000); - utilGzRead(gzFile, paletteRAM, 0x400); - utilGzRead(gzFile, workRAM, 0x40000); - utilGzRead(gzFile, vram, 0x20000); - utilGzRead(gzFile, oam, 0x400); - if(version < SAVE_GAME_VERSION_6) - utilGzRead(gzFile, pix, 4*240*160); - else - utilGzRead(gzFile, pix, 4*241*162); - utilGzRead(gzFile, ioMem, 0x400); - - if(skipSaveGameBattery) { - // skip eeprom data - eepromReadGameSkip(gzFile, version); - // skip flash data - flashReadGameSkip(gzFile, version); - } else { - eepromReadGame(gzFile, version); - flashReadGame(gzFile, version); - } - soundReadGame(gzFile, version); - - if(version > SAVE_GAME_VERSION_1) { - cheatsReadGame(gzFile, version); - } - if(version > SAVE_GAME_VERSION_6) { - rtcReadGame(gzFile); - } - - if(version <= SAVE_GAME_VERSION_7) { - u32 temp; -#define SWAP(a,b,c) \ - temp = (a);\ - (a) = (b)<<16|(c);\ - (b) = (temp) >> 16;\ - (c) = (temp) & 0xFFFF; - - SWAP(dma0Source, DM0SAD_H, DM0SAD_L); - SWAP(dma0Dest, DM0DAD_H, DM0DAD_L); - SWAP(dma1Source, DM1SAD_H, DM1SAD_L); - SWAP(dma1Dest, DM1DAD_H, DM1DAD_L); - SWAP(dma2Source, DM2SAD_H, DM2SAD_L); - SWAP(dma2Dest, DM2DAD_H, DM2DAD_L); - SWAP(dma3Source, DM3SAD_H, DM3SAD_L); - SWAP(dma3Dest, DM3DAD_H, DM3DAD_L); - } - - if(version <= SAVE_GAME_VERSION_8) { - timer0ClockReload = TIMER_TICKS[TM0CNT & 3]; - timer1ClockReload = TIMER_TICKS[TM1CNT & 3]; - timer2ClockReload = TIMER_TICKS[TM2CNT & 3]; - timer3ClockReload = TIMER_TICKS[TM3CNT & 3]; - - timer0Ticks = ((0x10000 - TM0D) << timer0ClockReload) - timer0Ticks; - timer1Ticks = ((0x10000 - TM1D) << timer1ClockReload) - timer1Ticks; - timer2Ticks = ((0x10000 - TM2D) << timer2ClockReload) - timer2Ticks; - timer3Ticks = ((0x10000 - TM3D) << timer3ClockReload) - timer3Ticks; -// interp_rate(); - } - - // set pointers! - layerEnable = layerSettings & DISPCNT; - - CPUUpdateRender(); - CPUUpdateRenderBuffers(true); - CPUUpdateWindow0(); - CPUUpdateWindow1(); - gbaSaveType = 0; - switch(saveType) { - case 0: - cpuSaveGameFunc = flashSaveDecide; - break; - case 1: - cpuSaveGameFunc = sramWrite; - gbaSaveType = 1; - break; - case 2: - cpuSaveGameFunc = flashWrite; - gbaSaveType = 2; - break; - case 3: - break; - case 5: - gbaSaveType = 5; - break; - default: - systemMessage(MSG_UNSUPPORTED_SAVE_TYPE, - N_("Unsupported save type %d"), saveType); - break; - } - if(eepromInUse) - gbaSaveType = 3; - - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; - if(armState) { - ARM_PREFETCH; - } else { - THUMB_PREFETCH; - } - - CPUUpdateRegister(0x204, CPUReadHalfWordQuick(0x4000204)); - - return true; -} - -bool CPUReadMemState(char *memory, int available) -{ - gzFile gzFile = utilMemGzOpen(memory, available, "r"); - - bool res = CPUReadState(gzFile); - - utilGzClose(gzFile); - - return res; -} - -bool CPUReadState(const char * file) -{ - gzFile gzFile = utilGzOpen(file, "rb"); - - if(gzFile == NULL) - return false; - - bool res = CPUReadState(gzFile); - - utilGzClose(gzFile); - - return res; -} - -bool CPUExportEepromFile(const char *fileName) -{ - if(eepromInUse) { - FILE *file = fopen(fileName, "wb"); - - if(!file) { - systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), - fileName); - return false; - } - - for(int i = 0; i < eepromSize;) { - for(int j = 0; j < 8; j++) { - if(fwrite(&eepromData[i+7-j], 1, 1, file) != 1) { - fclose(file); - return false; - } - } - i += 8; - } - fclose(file); - } - return true; -} - -bool CPUWriteBatteryFile(const char *fileName) -{ - if(gbaSaveType == 0) { - if(eepromInUse) - gbaSaveType = 3; - else switch(saveType) { - case 1: - gbaSaveType = 1; - break; - case 2: - gbaSaveType = 2; - break; - } - } - - if((gbaSaveType) && (gbaSaveType!=5)) { - FILE *file = fopen(fileName, "wb"); - - if(!file) { - systemMessage(MSG_ERROR_CREATING_FILE, N_("Error creating file %s"), - fileName); - return false; - } - - // only save if Flash/Sram in use or EEprom in use - if(gbaSaveType != 3) { - if(gbaSaveType == 2) { - if(fwrite(flashSaveMemory, 1, flashSize, file) != (size_t)flashSize) { - fclose(file); - return false; - } - } else { - if(fwrite(flashSaveMemory, 1, 0x10000, file) != 0x10000) { - fclose(file); - return false; - } - } - } else { - if(fwrite(eepromData, 1, eepromSize, file) != (size_t)eepromSize) { - fclose(file); - return false; - } - } - fclose(file); - } - return true; -} - -bool CPUReadGSASnapshot(const char *fileName) -{ - int i; - FILE *file = fopen(fileName, "rb"); - - if(!file) { - systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), fileName); - return false; - } - - // check file size to know what we should read - fseek(file, 0, SEEK_END); - - // long size = ftell(file); - fseek(file, 0x0, SEEK_SET); - fread(&i, 1, 4, file); - fseek(file, i, SEEK_CUR); // Skip SharkPortSave - fseek(file, 4, SEEK_CUR); // skip some sort of flag - fread(&i, 1, 4, file); // name length - fseek(file, i, SEEK_CUR); // skip name - fread(&i, 1, 4, file); // desc length - fseek(file, i, SEEK_CUR); // skip desc - fread(&i, 1, 4, file); // notes length - fseek(file, i, SEEK_CUR); // skip notes - int saveSize; - fread(&saveSize, 1, 4, file); // read length - saveSize -= 0x1c; // remove header size - char buffer[17]; - char buffer2[17]; - fread(buffer, 1, 16, file); - buffer[16] = 0; - for(i = 0; i < 16; i++) - if(buffer[i] < 32) - buffer[i] = 32; - memcpy(buffer2, &rom[0xa0], 16); - buffer2[16] = 0; - for(i = 0; i < 16; i++) - if(buffer2[i] < 32) - buffer2[i] = 32; - if(memcmp(buffer, buffer2, 16)) { - systemMessage(MSG_CANNOT_IMPORT_SNAPSHOT_FOR, - N_("Cannot import snapshot for %s. Current game is %s"), - buffer, - buffer2); - fclose(file); - return false; - } - fseek(file, 12, SEEK_CUR); // skip some flags - if(saveSize >= 65536) { - if(fread(flashSaveMemory, 1, saveSize, file) != (size_t)saveSize) { - fclose(file); - return false; - } - } else { - systemMessage(MSG_UNSUPPORTED_SNAPSHOT_FILE, - N_("Unsupported snapshot file %s"), - fileName); - fclose(file); - return false; - } - fclose(file); - CPUReset(); - return true; -} - -bool CPUWriteGSASnapshot(const char *fileName, - const char *title, - const char *desc, - const char *notes) -{ - FILE *file = fopen(fileName, "wb"); - - if(!file) { - systemMessage(MSG_CANNOT_OPEN_FILE, N_("Cannot open file %s"), fileName); - return false; - } - - u8 buffer[17]; - - utilPutDword(buffer, 0x0d); // SharkPortSave length - fwrite(buffer, 1, 4, file); - fwrite("SharkPortSave", 1, 0x0d, file); - utilPutDword(buffer, 0x000f0000); - fwrite(buffer, 1, 4, file); // save type 0x000f0000 = GBA save - utilPutDword(buffer, (u32)strlen(title)); - fwrite(buffer, 1, 4, file); // title length - fwrite(title, 1, strlen(title), file); - utilPutDword(buffer, (u32)strlen(desc)); - fwrite(buffer, 1, 4, file); // desc length - fwrite(desc, 1, strlen(desc), file); - utilPutDword(buffer, (u32)strlen(notes)); - fwrite(buffer, 1, 4, file); // notes length - fwrite(notes, 1, strlen(notes), file); - int saveSize = 0x10000; - if(gbaSaveType == 2) - saveSize = flashSize; - int totalSize = saveSize + 0x1c; - - utilPutDword(buffer, totalSize); // length of remainder of save - CRC - fwrite(buffer, 1, 4, file); - - char temp[0x2001c]; - memset(temp, 0, 28); - memcpy(temp, &rom[0xa0], 16); // copy internal name - temp[0x10] = rom[0xbe]; // reserved area (old checksum) - temp[0x11] = rom[0xbf]; // reserved area (old checksum) - temp[0x12] = rom[0xbd]; // complement check - temp[0x13] = rom[0xb0]; // maker - temp[0x14] = 1; // 1 save ? - memcpy(&temp[0x1c], flashSaveMemory, saveSize); // copy save - fwrite(temp, 1, totalSize, file); // write save + header - u32 crc = 0; - - for(int i = 0; i < totalSize; i++) { - crc += ((u32)temp[i] << (crc % 0x18)); - } - - utilPutDword(buffer, crc); - fwrite(buffer, 1, 4, file); // CRC? - - fclose(file); - return true; -} - -bool CPUImportEepromFile(const char *fileName) -{ - FILE *file = fopen(fileName, "rb"); - - if(!file) - return false; - - // check file size to know what we should read - fseek(file, 0, SEEK_END); - - long size = ftell(file); - fseek(file, 0, SEEK_SET); - if(size == 512 || size == 0x2000) { - if(fread(eepromData, 1, size, file) != (size_t)size) { - fclose(file); - return false; - } - for(int i = 0; i < size;) { - u8 tmp = eepromData[i]; - eepromData[i] = eepromData[7-i]; - eepromData[7-i] = tmp; - i++; - tmp = eepromData[i]; - eepromData[i] = eepromData[7-i]; - eepromData[7-i] = tmp; - i++; - tmp = eepromData[i]; - eepromData[i] = eepromData[7-i]; - eepromData[7-i] = tmp; - i++; - tmp = eepromData[i]; - eepromData[i] = eepromData[7-i]; - eepromData[7-i] = tmp; - i++; - i += 4; - } - } else - return false; - fclose(file); - return true; -} - -bool CPUReadBatteryFile(const char *fileName) -{ - FILE *file = fopen(fileName, "rb"); - - if(!file) - return false; - - // check file size to know what we should read - fseek(file, 0, SEEK_END); - - long size = ftell(file); - fseek(file, 0, SEEK_SET); - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; - - if(size == 512 || size == 0x2000) { - if(fread(eepromData, 1, size, file) != (size_t)size) { - fclose(file); - return false; - } - } else { - if(size == 0x20000) { - if(fread(flashSaveMemory, 1, 0x20000, file) != 0x20000) { - fclose(file); - return false; - } - flashSetSize(0x20000); - } else { - if(fread(flashSaveMemory, 1, 0x10000, file) != 0x10000) { - fclose(file); - return false; - } - flashSetSize(0x10000); - } - } - fclose(file); - return true; -} - -bool CPUWritePNGFile(const char *fileName) -{ - return utilWritePNGFile(fileName, 240, 160, pix); -} - -bool CPUWriteBMPFile(const char *fileName) -{ - return utilWriteBMPFile(fileName, 240, 160, pix); -} - -bool CPUIsZipFile(const char * file) -{ - if(strlen(file) > 4) { - const char * p = strrchr(file,'.'); - - if(p != NULL) { - if(_stricmp(p, ".zip") == 0) - return true; - } - } - - return false; -} - -bool CPUIsGBAImage(const char * file) -{ - cpuIsMultiBoot = false; - if(strlen(file) > 4) { - const char * p = strrchr(file,'.'); - - if(p != NULL) { - if(_stricmp(p, ".gba") == 0) - return true; - if(_stricmp(p, ".agb") == 0) - return true; - if(_stricmp(p, ".bin") == 0) - return true; - if(_stricmp(p, ".elf") == 0) - return true; - if(_stricmp(p, ".mb") == 0) { - cpuIsMultiBoot = true; - return true; - } - } - } - - return false; -} - -bool CPUIsGBABios(const char * file) -{ - if(strlen(file) > 4) { - const char * p = strrchr(file,'.'); - - if(p != NULL) { - if(_stricmp(p, ".gba") == 0) - return true; - if(_stricmp(p, ".agb") == 0) - return true; - if(_stricmp(p, ".bin") == 0) - return true; - if(_stricmp(p, ".bios") == 0) - return true; - if(_stricmp(p, ".rom") == 0) - return true; - } - } - - return false; -} - -bool CPUIsELF(const char *file) -{ - if(strlen(file) > 4) { - const char * p = strrchr(file,'.'); - - if(p != NULL) { - if(_stricmp(p, ".elf") == 0) - return true; - } - } - return false; -} - -void CPUCleanUp() -{ -#ifdef PROFILING - if(profilingTicksReload) { - profCleanup(); - } -#endif - - if(rom != NULL) { - free(rom); - rom = NULL; - } - - if(vram != NULL) { - free(vram); - vram = NULL; - } - - if(paletteRAM != NULL) { - free(paletteRAM); - paletteRAM = NULL; - } - - if(internalRAM != NULL) { - free(internalRAM); - internalRAM = NULL; - } - - if(workRAM != NULL) { - free(workRAM); - workRAM = NULL; - } - - if(bios != NULL) { - free(bios); - bios = NULL; - } - - if(pix != NULL) { - free(pix); - pix = NULL; - } - - if(oam != NULL) { - free(oam); - oam = NULL; - } - - if(ioMem != NULL) { - free(ioMem); - ioMem = NULL; - } - -#ifndef NO_DEBUGGER - elfCleanUp(); -#endif //NO_DEBUGGER - - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; - - emulating = 0; -} - -int CPULoadRom(const char *szFile) -{ - romSize = 0x2000000; - if(rom != NULL) { - CPUCleanUp(); - } - - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; - - rom = (u8 *)malloc(0x2000000); - if(rom == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "ROM"); - return 0; - } - workRAM = (u8 *)calloc(1, 0x40000); - if(workRAM == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "WRAM"); - return 0; - } - - u8 *whereToLoad = cpuIsMultiBoot ? workRAM : rom; - -#ifndef NO_DEBUGGER - if(CPUIsELF(szFile)) { - FILE *f = fopen(szFile, "rb"); - if(!f) { - systemMessage(MSG_ERROR_OPENING_IMAGE, N_("Error opening image %s"), - szFile); - free(rom); - rom = NULL; - free(workRAM); - workRAM = NULL; - return 0; - } - bool res = elfRead(szFile, romSize, f); - if(!res || romSize == 0) { - free(rom); - rom = NULL; - free(workRAM); - workRAM = NULL; - elfCleanUp(); - return 0; - } - } else -#endif //NO_DEBUGGER - if(!utilLoad(szFile, - utilIsGBAImage, - whereToLoad, - romSize)) { - free(rom); - rom = NULL; - free(workRAM); - workRAM = NULL; - return 0; - } - - u16 *temp = (u16 *)(rom+((romSize+1)&~1)); - int i; - for(i = (romSize+1)&~1; i < 0x2000000; i+=2) { - WRITE16LE(temp, (i >> 1) & 0xFFFF); - temp++; - } - - bios = (u8 *)calloc(1,0x4000); - if(bios == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "BIOS"); - CPUCleanUp(); - return 0; - } - internalRAM = (u8 *)calloc(1,0x8000); - if(internalRAM == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "IRAM"); - CPUCleanUp(); - return 0; - } - paletteRAM = (u8 *)calloc(1,0x400); - if(paletteRAM == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "PRAM"); - CPUCleanUp(); - return 0; - } - vram = (u8 *)calloc(1, 0x20000); - if(vram == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "VRAM"); - CPUCleanUp(); - return 0; - } - oam = (u8 *)calloc(1, 0x400); - if(oam == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "OAM"); - CPUCleanUp(); - return 0; - } - pix = (u8 *)calloc(1, 4 * 241 * 162); - if(pix == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "PIX"); - CPUCleanUp(); - return 0; - } - ioMem = (u8 *)calloc(1, 0x400); - if(ioMem == NULL) { - systemMessage(MSG_OUT_OF_MEMORY, N_("Failed to allocate memory for %s"), - "IO"); - CPUCleanUp(); - return 0; - } - - flashInit(); - eepromInit(); - - CPUUpdateRenderBuffers(true); - - return romSize; -} - -void doMirroring (bool b) -{ - u32 mirroredRomSize = (((romSize)>>20) & 0x3F)<<20; - u32 mirroredRomAddress = romSize; - if ((mirroredRomSize <=0x800000) && (b)) - { - mirroredRomAddress = mirroredRomSize; - if (mirroredRomSize==0) - mirroredRomSize=0x100000; - while (mirroredRomAddress<0x01000000) - { - memcpy ((u16 *)(rom+mirroredRomAddress), (u16 *)(rom), mirroredRomSize); - mirroredRomAddress+=mirroredRomSize; - } - } -} - -void CPUUpdateRender() -{ - switch(DISPCNT & 7) { - case 0: - if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || - cpuDisableSfx) - renderLine = mode0RenderLine; - else if(fxOn && !windowOn && !(layerEnable & 0x8000)) - renderLine = mode0RenderLineNoWindow; - else - renderLine = mode0RenderLineAll; - break; - case 1: - if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || - cpuDisableSfx) - renderLine = mode1RenderLine; - else if(fxOn && !windowOn && !(layerEnable & 0x8000)) - renderLine = mode1RenderLineNoWindow; - else - renderLine = mode1RenderLineAll; - break; - case 2: - if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || - cpuDisableSfx) - renderLine = mode2RenderLine; - else if(fxOn && !windowOn && !(layerEnable & 0x8000)) - renderLine = mode2RenderLineNoWindow; - else - renderLine = mode2RenderLineAll; - break; - case 3: - if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || - cpuDisableSfx) - renderLine = mode3RenderLine; - else if(fxOn && !windowOn && !(layerEnable & 0x8000)) - renderLine = mode3RenderLineNoWindow; - else - renderLine = mode3RenderLineAll; - break; - case 4: - if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || - cpuDisableSfx) - renderLine = mode4RenderLine; - else if(fxOn && !windowOn && !(layerEnable & 0x8000)) - renderLine = mode4RenderLineNoWindow; - else - renderLine = mode4RenderLineAll; - break; - case 5: - if((!fxOn && !windowOn && !(layerEnable & 0x8000)) || - cpuDisableSfx) - renderLine = mode5RenderLine; - else if(fxOn && !windowOn && !(layerEnable & 0x8000)) - renderLine = mode5RenderLineNoWindow; - else - renderLine = mode5RenderLineAll; - default: - break; - } -} - -void CPUUpdateCPSR() -{ - u32 CPSR = reg[16].I & 0x40; - if(N_FLAG) - CPSR |= 0x80000000; - if(Z_FLAG) - CPSR |= 0x40000000; - if(C_FLAG) - CPSR |= 0x20000000; - if(V_FLAG) - CPSR |= 0x10000000; - if(!armState) - CPSR |= 0x00000020; - if(!armIrqEnable) - CPSR |= 0x80; - CPSR |= (armMode & 0x1F); - reg[16].I = CPSR; -} - -void CPUUpdateFlags(bool breakLoop) -{ - u32 CPSR = reg[16].I; - - N_FLAG = (CPSR & 0x80000000) ? true: false; - Z_FLAG = (CPSR & 0x40000000) ? true: false; - C_FLAG = (CPSR & 0x20000000) ? true: false; - V_FLAG = (CPSR & 0x10000000) ? true: false; - armState = (CPSR & 0x20) ? false : true; - armIrqEnable = (CPSR & 0x80) ? false : true; - if(breakLoop) { - if (armIrqEnable && (IF & IE) && (IME & 1)) - cpuNextEvent = cpuTotalTicks; - } -} - -void CPUUpdateFlags() -{ - CPUUpdateFlags(true); -} - -#ifdef WORDS_BIGENDIAN -static void CPUSwap(volatile u32 *a, volatile u32 *b) -{ - volatile u32 c = *b; - *b = *a; - *a = c; -} -#else -static void CPUSwap(u32 *a, u32 *b) -{ - u32 c = *b; - *b = *a; - *a = c; -} -#endif - -void CPUSwitchMode(int mode, bool saveState, bool breakLoop) -{ - // if(armMode == mode) - // return; - - CPUUpdateCPSR(); - - switch(armMode) { - case 0x10: - case 0x1F: - reg[R13_USR].I = reg[13].I; - reg[R14_USR].I = reg[14].I; - reg[17].I = reg[16].I; - break; - case 0x11: - CPUSwap(®[R8_FIQ].I, ®[8].I); - CPUSwap(®[R9_FIQ].I, ®[9].I); - CPUSwap(®[R10_FIQ].I, ®[10].I); - CPUSwap(®[R11_FIQ].I, ®[11].I); - CPUSwap(®[R12_FIQ].I, ®[12].I); - reg[R13_FIQ].I = reg[13].I; - reg[R14_FIQ].I = reg[14].I; - reg[SPSR_FIQ].I = reg[17].I; - break; - case 0x12: - reg[R13_IRQ].I = reg[13].I; - reg[R14_IRQ].I = reg[14].I; - reg[SPSR_IRQ].I = reg[17].I; - break; - case 0x13: - reg[R13_SVC].I = reg[13].I; - reg[R14_SVC].I = reg[14].I; - reg[SPSR_SVC].I = reg[17].I; - break; - case 0x17: - reg[R13_ABT].I = reg[13].I; - reg[R14_ABT].I = reg[14].I; - reg[SPSR_ABT].I = reg[17].I; - break; - case 0x1b: - reg[R13_UND].I = reg[13].I; - reg[R14_UND].I = reg[14].I; - reg[SPSR_UND].I = reg[17].I; - break; - } - - u32 CPSR = reg[16].I; - u32 SPSR = reg[17].I; - - switch(mode) { - case 0x10: - case 0x1F: - reg[13].I = reg[R13_USR].I; - reg[14].I = reg[R14_USR].I; - reg[16].I = SPSR; - break; - case 0x11: - CPUSwap(®[8].I, ®[R8_FIQ].I); - CPUSwap(®[9].I, ®[R9_FIQ].I); - CPUSwap(®[10].I, ®[R10_FIQ].I); - CPUSwap(®[11].I, ®[R11_FIQ].I); - CPUSwap(®[12].I, ®[R12_FIQ].I); - reg[13].I = reg[R13_FIQ].I; - reg[14].I = reg[R14_FIQ].I; - if(saveState) - reg[17].I = CPSR; - else - reg[17].I = reg[SPSR_FIQ].I; - break; - case 0x12: - reg[13].I = reg[R13_IRQ].I; - reg[14].I = reg[R14_IRQ].I; - reg[16].I = SPSR; - if(saveState) - reg[17].I = CPSR; - else - reg[17].I = reg[SPSR_IRQ].I; - break; - case 0x13: - reg[13].I = reg[R13_SVC].I; - reg[14].I = reg[R14_SVC].I; - reg[16].I = SPSR; - if(saveState) - reg[17].I = CPSR; - else - reg[17].I = reg[SPSR_SVC].I; - break; - case 0x17: - reg[13].I = reg[R13_ABT].I; - reg[14].I = reg[R14_ABT].I; - reg[16].I = SPSR; - if(saveState) - reg[17].I = CPSR; - else - reg[17].I = reg[SPSR_ABT].I; - break; - case 0x1b: - reg[13].I = reg[R13_UND].I; - reg[14].I = reg[R14_UND].I; - reg[16].I = SPSR; - if(saveState) - reg[17].I = CPSR; - else - reg[17].I = reg[SPSR_UND].I; - break; - default: - systemMessage(MSG_UNSUPPORTED_ARM_MODE, N_("Unsupported ARM mode %02x"), mode); - break; - } - armMode = mode; - CPUUpdateFlags(breakLoop); - CPUUpdateCPSR(); -} - -void CPUSwitchMode(int mode, bool saveState) -{ - CPUSwitchMode(mode, saveState, true); -} - -void CPUUndefinedException() -{ - u32 PC = reg[15].I; - bool savedArmState = armState; - CPUSwitchMode(0x1b, true, false); - reg[14].I = PC - (savedArmState ? 4 : 2); - reg[15].I = 0x04; - armState = true; - armIrqEnable = false; - armNextPC = 0x04; - ARM_PREFETCH; - reg[15].I += 4; -} - -void CPUSoftwareInterrupt() -{ - u32 PC = reg[15].I; - bool savedArmState = armState; - CPUSwitchMode(0x13, true, false); - reg[14].I = PC - (savedArmState ? 4 : 2); - reg[15].I = 0x08; - armState = true; - armIrqEnable = false; - armNextPC = 0x08; - ARM_PREFETCH; - reg[15].I += 4; -} - -void CPUSoftwareInterrupt(int comment) -{ - static bool disableMessage = false; - if(armState) comment >>= 16; -#ifdef BKPT_SUPPORT - if(comment == 0xff) { - dbgOutput(NULL, reg[0].I); - return; - } -#endif -#ifdef PROFILING - if(comment == 0xfe) { - profStartup(reg[0].I, reg[1].I); - return; - } - if(comment == 0xfd) { - profControl(reg[0].I); - return; - } - if(comment == 0xfc) { - profCleanup(); - return; - } - if(comment == 0xfb) { - profCount(); - return; - } -#endif - if(comment == 0xfa) { - agbPrintFlush(); - return; - } -#ifdef SDL - if(comment == 0xf9) { - emulating = 0; - cpuNextEvent = cpuTotalTicks; - cpuBreakLoop = true; - return; - } -#endif - if(useBios) { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("SWI: %08x at %08x (0x%08x,0x%08x,0x%08x,VCOUNT = %2d)\n", comment, - armState ? armNextPC - 4: armNextPC -2, - reg[0].I, - reg[1].I, - reg[2].I, - VCOUNT); - } -#endif - CPUSoftwareInterrupt(); - return; - } - // This would be correct, but it causes problems if uncommented - // else { - // biosProtected = 0xe3a02004; - // } - - switch(comment) { - case 0x00: - BIOS_SoftReset(); - ARM_PREFETCH; - break; - case 0x01: - BIOS_RegisterRamReset(); - break; - case 0x02: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Halt: (VCOUNT = %2d)\n", - VCOUNT); - } -#endif - holdState = true; - holdType = -1; - cpuNextEvent = cpuTotalTicks; - break; - case 0x03: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Stop: (VCOUNT = %2d)\n", - VCOUNT); - } -#endif - holdState = true; - holdType = -1; - stopState = true; - cpuNextEvent = cpuTotalTicks; - break; - case 0x04: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("IntrWait: 0x%08x,0x%08x (VCOUNT = %2d)\n", - reg[0].I, - reg[1].I, - VCOUNT); - } -#endif - CPUSoftwareInterrupt(); - break; - case 0x05: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("VBlankIntrWait: (VCOUNT = %2d)\n", - VCOUNT); - } -#endif - CPUSoftwareInterrupt(); - break; - case 0x06: - CPUSoftwareInterrupt(); - break; - case 0x07: - CPUSoftwareInterrupt(); - break; - case 0x08: - BIOS_Sqrt(); - break; - case 0x09: - BIOS_ArcTan(); - break; - case 0x0A: - BIOS_ArcTan2(); - break; - case 0x0B: - { - int len = (reg[2].I & 0x1FFFFF) >>1; - if (!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + len) & 0xe000000) == 0)) - { - if ((reg[2].I >> 24) & 1) - { - if ((reg[2].I >> 26) & 1) - SWITicks = (7 + memoryWait32[(reg[1].I>>24) & 0xF]) * (len>>1); - else - SWITicks = (8 + memoryWait[(reg[1].I>>24) & 0xF]) * (len); - } - else - { - if ((reg[2].I >> 26) & 1) - SWITicks = (10 + memoryWait32[(reg[0].I>>24) & 0xF] + - memoryWait32[(reg[1].I>>24) & 0xF]) * (len>>1); - else - SWITicks = (11 + memoryWait[(reg[0].I>>24) & 0xF] + - memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - } - } - BIOS_CpuSet(); - break; - case 0x0C: - { - int len = (reg[2].I & 0x1FFFFF) >>5; - if (!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + len) & 0xe000000) == 0)) - { - if ((reg[2].I >> 24) & 1) - SWITicks = (6 + memoryWait32[(reg[1].I>>24) & 0xF] + - 7 * (memoryWaitSeq32[(reg[1].I>>24) & 0xF] + 1)) * len; - else - SWITicks = (9 + memoryWait32[(reg[0].I>>24) & 0xF] + - memoryWait32[(reg[1].I>>24) & 0xF] + - 7 * (memoryWaitSeq32[(reg[0].I>>24) & 0xF] + - memoryWaitSeq32[(reg[1].I>>24) & 0xF] + 2)) * len; - } - } - BIOS_CpuFastSet(); - break; - case 0x0D: - BIOS_GetBiosChecksum(); - break; - case 0x0E: - BIOS_BgAffineSet(); - break; - case 0x0F: - BIOS_ObjAffineSet(); - break; - case 0x10: - { - int len = CPUReadHalfWord(reg[2].I); - if (!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + len) & 0xe000000) == 0)) - SWITicks = (32 + memoryWait[(reg[0].I>>24) & 0xF]) * len; - } - BIOS_BitUnPack(); - break; - case 0x11: - { - u32 len = CPUReadMemory(reg[0].I) >> 8; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (9 + memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - BIOS_LZ77UnCompWram(); - break; - case 0x12: - { - u32 len = CPUReadMemory(reg[0].I) >> 8; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (19 + memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - BIOS_LZ77UnCompVram(); - break; - case 0x13: - { - u32 len = CPUReadMemory(reg[0].I) >> 8; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (29 + (memoryWait[(reg[0].I>>24) & 0xF]<<1)) * len; - } - BIOS_HuffUnComp(); - break; - case 0x14: - { - u32 len = CPUReadMemory(reg[0].I) >> 8; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (11 + memoryWait[(reg[0].I>>24) & 0xF] + - memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - BIOS_RLUnCompWram(); - break; - case 0x15: - { - u32 len = CPUReadMemory(reg[0].I) >> 9; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (34 + (memoryWait[(reg[0].I>>24) & 0xF] << 1) + - memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - BIOS_RLUnCompVram(); - break; - case 0x16: - { - u32 len = CPUReadMemory(reg[0].I) >> 8; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (13 + memoryWait[(reg[0].I>>24) & 0xF] + - memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - BIOS_Diff8bitUnFilterWram(); - break; - case 0x17: - { - u32 len = CPUReadMemory(reg[0].I) >> 9; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (39 + (memoryWait[(reg[0].I>>24) & 0xF]<<1) + - memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - BIOS_Diff8bitUnFilterVram(); - break; - case 0x18: - { - u32 len = CPUReadMemory(reg[0].I) >> 9; - if(!(((reg[0].I & 0xe000000) == 0) || - ((reg[0].I + (len & 0x1fffff)) & 0xe000000) == 0)) - SWITicks = (13 + memoryWait[(reg[0].I>>24) & 0xF] + - memoryWait[(reg[1].I>>24) & 0xF]) * len; - } - BIOS_Diff16bitUnFilter(); - break; - case 0x19: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("SoundBiasSet: 0x%08x (VCOUNT = %2d)\n", - reg[0].I, - VCOUNT); - } -#endif - if(reg[0].I) - systemSoundPause(); - else - systemSoundResume(); - break; - case 0x1F: - BIOS_MidiKey2Freq(); - break; - case 0x2A: - BIOS_SndDriverJmpTableCopy(); - // let it go, because we don't really emulate this function - default: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("SWI: %08x at %08x (0x%08x,0x%08x,0x%08x,VCOUNT = %2d)\n", comment, - armState ? armNextPC - 4: armNextPC -2, - reg[0].I, - reg[1].I, - reg[2].I, - VCOUNT); - } -#endif - - if(!disableMessage) { - systemMessage(MSG_UNSUPPORTED_BIOS_FUNCTION, - N_("Unsupported BIOS function %02x called from %08x. A BIOS file is needed in order to get correct behaviour."), - comment, - armMode ? armNextPC - 4: armNextPC - 2); - disableMessage = true; - } - break; - } -} - -void CPUCompareVCOUNT() -{ - if(VCOUNT == (DISPSTAT >> 8)) { - DISPSTAT |= 4; - UPDATE_REG(0x04, DISPSTAT); - - if(DISPSTAT & 0x20) { - IF |= 4; - UPDATE_REG(0x202, IF); - } - } else { - DISPSTAT &= 0xFFFB; - UPDATE_REG(0x4, DISPSTAT); - } - if (layerEnableDelay>0) - { - layerEnableDelay--; - if (layerEnableDelay==1) - layerEnable = layerSettings & DISPCNT; - } - -} - -void doDMA(u32 &s, u32 &d, u32 si, u32 di, u32 c, int transfer32) -{ - int sm = s >> 24; - int dm = d >> 24; - int sw = 0; - int dw = 0; - int sc = c; - - cpuDmaCount = c; - // This is done to get the correct waitstates. - if (sm>15) - sm=15; - if (dm>15) - dm=15; - - //if ((sm>=0x05) && (sm<=0x07) || (dm>=0x05) && (dm <=0x07)) - // blank = (((DISPSTAT | ((DISPSTAT>>1)&1))==1) ? true : false); - - if(transfer32) { - s &= 0xFFFFFFFC; - if(s < 0x02000000 && (reg[15].I >> 24)) { - while(c != 0) { - CPUWriteMemory(d, 0); - d += di; - c--; - } - } else { - while(c != 0) { - cpuDmaLast = CPUReadMemory(s); - CPUWriteMemory(d, cpuDmaLast); - d += di; - s += si; - c--; - } - } - } else { - s &= 0xFFFFFFFE; - si = (int)si >> 1; - di = (int)di >> 1; - if(s < 0x02000000 && (reg[15].I >> 24)) { - while(c != 0) { - CPUWriteHalfWord(d, 0); - d += di; - c--; - } - } else { - while(c != 0) { - cpuDmaLast = CPUReadHalfWord(s); - CPUWriteHalfWord(d, cpuDmaLast); - cpuDmaLast |= (cpuDmaLast<<16); - d += di; - s += si; - c--; - } - } - } - - cpuDmaCount = 0; - - int totalTicks = 0; - - if(transfer32) { - sw =1+memoryWaitSeq32[sm & 15]; - dw =1+memoryWaitSeq32[dm & 15]; - totalTicks = (sw+dw)*(sc-1) + 6 + memoryWait32[sm & 15] + - memoryWaitSeq32[dm & 15]; - } - else - { - sw = 1+memoryWaitSeq[sm & 15]; - dw = 1+memoryWaitSeq[dm & 15]; - totalTicks = (sw+dw)*(sc-1) + 6 + memoryWait[sm & 15] + - memoryWaitSeq[dm & 15]; - } - - cpuDmaTicksToUpdate += totalTicks; - -} - -void CPUCheckDMA(int reason, int dmamask) -{ - // DMA 0 - if((DM0CNT_H & 0x8000) && (dmamask & 1)) { - if(((DM0CNT_H >> 12) & 3) == reason) { - u32 sourceIncrement = 4; - u32 destIncrement = 4; - switch((DM0CNT_H >> 7) & 3) { - case 0: - break; - case 1: - sourceIncrement = (u32)-4; - break; - case 2: - sourceIncrement = 0; - break; - } - switch((DM0CNT_H >> 5) & 3) { - case 0: - break; - case 1: - destIncrement = (u32)-4; - break; - case 2: - destIncrement = 0; - break; - } -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_DMA0) { - int count = (DM0CNT_L ? DM0CNT_L : 0x4000) << 1; - if(DM0CNT_H & 0x0400) - count <<= 1; - log("DMA0: s=%08x d=%08x c=%04x count=%08x\n", dma0Source, dma0Dest, - DM0CNT_H, - count); - } -#endif - doDMA(dma0Source, dma0Dest, sourceIncrement, destIncrement, - DM0CNT_L ? DM0CNT_L : 0x4000, - DM0CNT_H & 0x0400); - cpuDmaHack = true; - - if(DM0CNT_H & 0x4000) { - IF |= 0x0100; - UPDATE_REG(0x202, IF); - cpuNextEvent = cpuTotalTicks; - } - - if(((DM0CNT_H >> 5) & 3) == 3) { - dma0Dest = DM0DAD_L | (DM0DAD_H << 16); - } - - if(!(DM0CNT_H & 0x0200) || (reason == 0)) { - DM0CNT_H &= 0x7FFF; - UPDATE_REG(0xBA, DM0CNT_H); - } - } - } - - // DMA 1 - if((DM1CNT_H & 0x8000) && (dmamask & 2)) { - if(((DM1CNT_H >> 12) & 3) == reason) { - u32 sourceIncrement = 4; - u32 destIncrement = 4; - switch((DM1CNT_H >> 7) & 3) { - case 0: - break; - case 1: - sourceIncrement = (u32)-4; - break; - case 2: - sourceIncrement = 0; - break; - } - switch((DM1CNT_H >> 5) & 3) { - case 0: - break; - case 1: - destIncrement = (u32)-4; - break; - case 2: - destIncrement = 0; - break; - } - if(reason == 3) { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_DMA1) { - log("DMA1: s=%08x d=%08x c=%04x count=%08x\n", dma1Source, dma1Dest, - DM1CNT_H, - 16); - } -#endif - doDMA(dma1Source, dma1Dest, sourceIncrement, 0, 4, - 0x0400); - } else { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_DMA1) { - int count = (DM1CNT_L ? DM1CNT_L : 0x4000) << 1; - if(DM1CNT_H & 0x0400) - count <<= 1; - log("DMA1: s=%08x d=%08x c=%04x count=%08x\n", dma1Source, dma1Dest, - DM1CNT_H, - count); - } -#endif - doDMA(dma1Source, dma1Dest, sourceIncrement, destIncrement, - DM1CNT_L ? DM1CNT_L : 0x4000, - DM1CNT_H & 0x0400); - } - cpuDmaHack = true; - - if(DM1CNT_H & 0x4000) { - IF |= 0x0200; - UPDATE_REG(0x202, IF); - cpuNextEvent = cpuTotalTicks; - } - - if(((DM1CNT_H >> 5) & 3) == 3) { - dma1Dest = DM1DAD_L | (DM1DAD_H << 16); - } - - if(!(DM1CNT_H & 0x0200) || (reason == 0)) { - DM1CNT_H &= 0x7FFF; - UPDATE_REG(0xC6, DM1CNT_H); - } - } - } - - // DMA 2 - if((DM2CNT_H & 0x8000) && (dmamask & 4)) { - if(((DM2CNT_H >> 12) & 3) == reason) { - u32 sourceIncrement = 4; - u32 destIncrement = 4; - switch((DM2CNT_H >> 7) & 3) { - case 0: - break; - case 1: - sourceIncrement = (u32)-4; - break; - case 2: - sourceIncrement = 0; - break; - } - switch((DM2CNT_H >> 5) & 3) { - case 0: - break; - case 1: - destIncrement = (u32)-4; - break; - case 2: - destIncrement = 0; - break; - } - if(reason == 3) { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_DMA2) { - int count = (4) << 2; - log("DMA2: s=%08x d=%08x c=%04x count=%08x\n", dma2Source, dma2Dest, - DM2CNT_H, - count); - } -#endif - doDMA(dma2Source, dma2Dest, sourceIncrement, 0, 4, - 0x0400); - } else { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_DMA2) { - int count = (DM2CNT_L ? DM2CNT_L : 0x4000) << 1; - if(DM2CNT_H & 0x0400) - count <<= 1; - log("DMA2: s=%08x d=%08x c=%04x count=%08x\n", dma2Source, dma2Dest, - DM2CNT_H, - count); - } -#endif - doDMA(dma2Source, dma2Dest, sourceIncrement, destIncrement, - DM2CNT_L ? DM2CNT_L : 0x4000, - DM2CNT_H & 0x0400); - } - cpuDmaHack = true; - - if(DM2CNT_H & 0x4000) { - IF |= 0x0400; - UPDATE_REG(0x202, IF); - cpuNextEvent = cpuTotalTicks; - } - - if(((DM2CNT_H >> 5) & 3) == 3) { - dma2Dest = DM2DAD_L | (DM2DAD_H << 16); - } - - if(!(DM2CNT_H & 0x0200) || (reason == 0)) { - DM2CNT_H &= 0x7FFF; - UPDATE_REG(0xD2, DM2CNT_H); - } - } - } - - // DMA 3 - if((DM3CNT_H & 0x8000) && (dmamask & 8)) { - if(((DM3CNT_H >> 12) & 3) == reason) { - u32 sourceIncrement = 4; - u32 destIncrement = 4; - switch((DM3CNT_H >> 7) & 3) { - case 0: - break; - case 1: - sourceIncrement = (u32)-4; - break; - case 2: - sourceIncrement = 0; - break; - } - switch((DM3CNT_H >> 5) & 3) { - case 0: - break; - case 1: - destIncrement = (u32)-4; - break; - case 2: - destIncrement = 0; - break; - } -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_DMA3) { - int count = (DM3CNT_L ? DM3CNT_L : 0x10000) << 1; - if(DM3CNT_H & 0x0400) - count <<= 1; - log("DMA3: s=%08x d=%08x c=%04x count=%08x\n", dma3Source, dma3Dest, - DM3CNT_H, - count); - } -#endif - doDMA(dma3Source, dma3Dest, sourceIncrement, destIncrement, - DM3CNT_L ? DM3CNT_L : 0x10000, - DM3CNT_H & 0x0400); - if(DM3CNT_H & 0x4000) { - IF |= 0x0800; - UPDATE_REG(0x202, IF); - cpuNextEvent = cpuTotalTicks; - } - - if(((DM3CNT_H >> 5) & 3) == 3) { - dma3Dest = DM3DAD_L | (DM3DAD_H << 16); - } - - if(!(DM3CNT_H & 0x0200) || (reason == 0)) { - DM3CNT_H &= 0x7FFF; - UPDATE_REG(0xDE, DM3CNT_H); - } - } - } -} - -void CPUUpdateRegister(u32 address, u16 value) -{ - switch(address) { - case 0x00: - { - if ((value & 7) >5) - DISPCNT = (value &7); - bool change = ((DISPCNT ^ value) & 0x80) ? true : false; - bool changeBG = ((DISPCNT ^ value) & 0x0F00) ? true : false; - u16 changeBGon = (((~DISPCNT) & value) & 0x0F00); - DISPCNT = (value & 0xFFF7); - UPDATE_REG(0x00, DISPCNT); - - if (changeBGon) - { - layerEnableDelay=4; - layerEnable = layerSettings & value & (~changeBGon); - } - else - layerEnable = layerSettings & value; - // CPUUpdateTicks(); - - windowOn = (layerEnable & 0x6000) ? true : false; - if(change && !((value & 0x80))) { - if(!(DISPSTAT & 1)) { - lcdTicks = 1008; - // VCOUNT = 0; - // UPDATE_REG(0x06, VCOUNT); - DISPSTAT &= 0xFFFC; - UPDATE_REG(0x04, DISPSTAT); - CPUCompareVCOUNT(); - } - // (*renderLine)(); - } - CPUUpdateRender(); - // we only care about changes in BG0-BG3 - if(changeBG) - CPUUpdateRenderBuffers(false); - } - break; - case 0x04: - DISPSTAT = (value & 0xFF38) | (DISPSTAT & 7); - UPDATE_REG(0x04, DISPSTAT); - break; - case 0x06: - // not writable - break; - case 0x08: - BG0CNT = (value & 0xDFCF); - UPDATE_REG(0x08, BG0CNT); - break; - case 0x0A: - BG1CNT = (value & 0xDFCF); - UPDATE_REG(0x0A, BG1CNT); - break; - case 0x0C: - BG2CNT = (value & 0xFFCF); - UPDATE_REG(0x0C, BG2CNT); - break; - case 0x0E: - BG3CNT = (value & 0xFFCF); - UPDATE_REG(0x0E, BG3CNT); - break; - case 0x10: - BG0HOFS = value & 511; - UPDATE_REG(0x10, BG0HOFS); - break; - case 0x12: - BG0VOFS = value & 511; - UPDATE_REG(0x12, BG0VOFS); - break; - case 0x14: - BG1HOFS = value & 511; - UPDATE_REG(0x14, BG1HOFS); - break; - case 0x16: - BG1VOFS = value & 511; - UPDATE_REG(0x16, BG1VOFS); - break; - case 0x18: - BG2HOFS = value & 511; - UPDATE_REG(0x18, BG2HOFS); - break; - case 0x1A: - BG2VOFS = value & 511; - UPDATE_REG(0x1A, BG2VOFS); - break; - case 0x1C: - BG3HOFS = value & 511; - UPDATE_REG(0x1C, BG3HOFS); - break; - case 0x1E: - BG3VOFS = value & 511; - UPDATE_REG(0x1E, BG3VOFS); - break; - case 0x20: - BG2PA = value; - UPDATE_REG(0x20, BG2PA); - break; - case 0x22: - BG2PB = value; - UPDATE_REG(0x22, BG2PB); - break; - case 0x24: - BG2PC = value; - UPDATE_REG(0x24, BG2PC); - break; - case 0x26: - BG2PD = value; - UPDATE_REG(0x26, BG2PD); - break; - case 0x28: - BG2X_L = value; - UPDATE_REG(0x28, BG2X_L); - gfxBG2Changed |= 1; - break; - case 0x2A: - BG2X_H = (value & 0xFFF); - UPDATE_REG(0x2A, BG2X_H); - gfxBG2Changed |= 1; - break; - case 0x2C: - BG2Y_L = value; - UPDATE_REG(0x2C, BG2Y_L); - gfxBG2Changed |= 2; - break; - case 0x2E: - BG2Y_H = value & 0xFFF; - UPDATE_REG(0x2E, BG2Y_H); - gfxBG2Changed |= 2; - break; - case 0x30: - BG3PA = value; - UPDATE_REG(0x30, BG3PA); - break; - case 0x32: - BG3PB = value; - UPDATE_REG(0x32, BG3PB); - break; - case 0x34: - BG3PC = value; - UPDATE_REG(0x34, BG3PC); - break; - case 0x36: - BG3PD = value; - UPDATE_REG(0x36, BG3PD); - break; - case 0x38: - BG3X_L = value; - UPDATE_REG(0x38, BG3X_L); - gfxBG3Changed |= 1; - break; - case 0x3A: - BG3X_H = value & 0xFFF; - UPDATE_REG(0x3A, BG3X_H); - gfxBG3Changed |= 1; - break; - case 0x3C: - BG3Y_L = value; - UPDATE_REG(0x3C, BG3Y_L); - gfxBG3Changed |= 2; - break; - case 0x3E: - BG3Y_H = value & 0xFFF; - UPDATE_REG(0x3E, BG3Y_H); - gfxBG3Changed |= 2; - break; - case 0x40: - WIN0H = value; - UPDATE_REG(0x40, WIN0H); - CPUUpdateWindow0(); - break; - case 0x42: - WIN1H = value; - UPDATE_REG(0x42, WIN1H); - CPUUpdateWindow1(); - break; - case 0x44: - WIN0V = value; - UPDATE_REG(0x44, WIN0V); - break; - case 0x46: - WIN1V = value; - UPDATE_REG(0x46, WIN1V); - break; - case 0x48: - WININ = value & 0x3F3F; - UPDATE_REG(0x48, WININ); - break; - case 0x4A: - WINOUT = value & 0x3F3F; - UPDATE_REG(0x4A, WINOUT); - break; - case 0x4C: - MOSAIC = value; - UPDATE_REG(0x4C, MOSAIC); - break; - case 0x50: - BLDMOD = value & 0x3FFF; - UPDATE_REG(0x50, BLDMOD); - fxOn = ((BLDMOD>>6)&3) != 0; - CPUUpdateRender(); - break; - case 0x52: - COLEV = value & 0x1F1F; - UPDATE_REG(0x52, COLEV); - break; - case 0x54: - COLY = value & 0x1F; - UPDATE_REG(0x54, COLY); - break; - case 0x60: - case 0x62: - case 0x64: - case 0x68: - case 0x6c: - case 0x70: - case 0x72: - case 0x74: - case 0x78: - case 0x7c: - case 0x80: - case 0x84: - soundEvent(address&0xFF, (u8)(value & 0xFF)); - soundEvent((address&0xFF)+1, (u8)(value>>8)); - break; - case 0x82: - case 0x88: - case 0xa0: - case 0xa2: - case 0xa4: - case 0xa6: - case 0x90: - case 0x92: - case 0x94: - case 0x96: - case 0x98: - case 0x9a: - case 0x9c: - case 0x9e: - soundEvent(address&0xFF, value); - break; - case 0xB0: - DM0SAD_L = value; - UPDATE_REG(0xB0, DM0SAD_L); - break; - case 0xB2: - DM0SAD_H = value & 0x07FF; - UPDATE_REG(0xB2, DM0SAD_H); - break; - case 0xB4: - DM0DAD_L = value; - UPDATE_REG(0xB4, DM0DAD_L); - break; - case 0xB6: - DM0DAD_H = value & 0x07FF; - UPDATE_REG(0xB6, DM0DAD_H); - break; - case 0xB8: - DM0CNT_L = value & 0x3FFF; - UPDATE_REG(0xB8, 0); - break; - case 0xBA: - { - bool start = ((DM0CNT_H ^ value) & 0x8000) ? true : false; - value &= 0xF7E0; - - DM0CNT_H = value; - UPDATE_REG(0xBA, DM0CNT_H); - - if(start && (value & 0x8000)) { - dma0Source = DM0SAD_L | (DM0SAD_H << 16); - dma0Dest = DM0DAD_L | (DM0DAD_H << 16); - CPUCheckDMA(0, 1); - } - } - break; - case 0xBC: - DM1SAD_L = value; - UPDATE_REG(0xBC, DM1SAD_L); - break; - case 0xBE: - DM1SAD_H = value & 0x0FFF; - UPDATE_REG(0xBE, DM1SAD_H); - break; - case 0xC0: - DM1DAD_L = value; - UPDATE_REG(0xC0, DM1DAD_L); - break; - case 0xC2: - DM1DAD_H = value & 0x07FF; - UPDATE_REG(0xC2, DM1DAD_H); - break; - case 0xC4: - DM1CNT_L = value & 0x3FFF; - UPDATE_REG(0xC4, 0); - break; - case 0xC6: - { - bool start = ((DM1CNT_H ^ value) & 0x8000) ? true : false; - value &= 0xF7E0; - - DM1CNT_H = value; - UPDATE_REG(0xC6, DM1CNT_H); - - if(start && (value & 0x8000)) { - dma1Source = DM1SAD_L | (DM1SAD_H << 16); - dma1Dest = DM1DAD_L | (DM1DAD_H << 16); - CPUCheckDMA(0, 2); - } - } - break; - case 0xC8: - DM2SAD_L = value; - UPDATE_REG(0xC8, DM2SAD_L); - break; - case 0xCA: - DM2SAD_H = value & 0x0FFF; - UPDATE_REG(0xCA, DM2SAD_H); - break; - case 0xCC: - DM2DAD_L = value; - UPDATE_REG(0xCC, DM2DAD_L); - break; - case 0xCE: - DM2DAD_H = value & 0x07FF; - UPDATE_REG(0xCE, DM2DAD_H); - break; - case 0xD0: - DM2CNT_L = value & 0x3FFF; - UPDATE_REG(0xD0, 0); - break; - case 0xD2: - { - bool start = ((DM2CNT_H ^ value) & 0x8000) ? true : false; - - value &= 0xF7E0; - - DM2CNT_H = value; - UPDATE_REG(0xD2, DM2CNT_H); - - if(start && (value & 0x8000)) { - dma2Source = DM2SAD_L | (DM2SAD_H << 16); - dma2Dest = DM2DAD_L | (DM2DAD_H << 16); - - CPUCheckDMA(0, 4); - } - } - break; - case 0xD4: - DM3SAD_L = value; - UPDATE_REG(0xD4, DM3SAD_L); - break; - case 0xD6: - DM3SAD_H = value & 0x0FFF; - UPDATE_REG(0xD6, DM3SAD_H); - break; - case 0xD8: - DM3DAD_L = value; - UPDATE_REG(0xD8, DM3DAD_L); - break; - case 0xDA: - DM3DAD_H = value & 0x0FFF; - UPDATE_REG(0xDA, DM3DAD_H); - break; - case 0xDC: - DM3CNT_L = value; - UPDATE_REG(0xDC, 0); - break; - case 0xDE: - { - bool start = ((DM3CNT_H ^ value) & 0x8000) ? true : false; - - value &= 0xFFE0; - - DM3CNT_H = value; - UPDATE_REG(0xDE, DM3CNT_H); - - if(start && (value & 0x8000)) { - dma3Source = DM3SAD_L | (DM3SAD_H << 16); - dma3Dest = DM3DAD_L | (DM3DAD_H << 16); - CPUCheckDMA(0,8); - } - } - break; - case 0x100: - timer0Reload = value; -// interp_rate(); - break; - case 0x102: - timer0Value = value; - timerOnOffDelay|=1; - cpuNextEvent = cpuTotalTicks; - break; - case 0x104: - timer1Reload = value; -// interp_rate(); - break; - case 0x106: - timer1Value = value; - timerOnOffDelay|=2; - cpuNextEvent = cpuTotalTicks; - break; - case 0x108: - timer2Reload = value; - break; - case 0x10A: - timer2Value = value; - timerOnOffDelay|=4; - cpuNextEvent = cpuTotalTicks; - break; - case 0x10C: - timer3Reload = value; - break; - case 0x10E: - timer3Value = value; - timerOnOffDelay|=8; - cpuNextEvent = cpuTotalTicks; - break; - case 0x128: - #ifdef LINK_EMULATION - if (linkenable) - { - StartLink(value); - } - else -#endif - { - if(value & 0x80) { - value &= 0xff7f; - if(value & 1 && (value & 0x4000)) { - UPDATE_REG(0x12a, 0xFF); - IF |= 0x80; - UPDATE_REG(0x202, IF); - value &= 0x7f7f; - } - } - UPDATE_REG(0x128, value); - } - break; - case 0x12a: - #ifdef LINK_EMULATION - if(linkenable && lspeed) - LinkSSend(value); - #endif - { - UPDATE_REG(0x134, value); - } - break; - case 0x130: - P1 |= (value & 0x3FF); - UPDATE_REG(0x130, P1); - break; - case 0x132: - UPDATE_REG(0x132, value & 0xC3FF); - break; - case 0x134: -#ifdef LINK_EMULATION - if (linkenable) - StartGPLink(value); - else -#endif - UPDATE_REG(0x134, value); - - break; - case 0x140: -#ifdef LINK_EMULATION - if (linkenable) - StartJOYLink(value); - else -#endif - UPDATE_REG(0x140, value); - - break; - case 0x200: - IE = value & 0x3FFF; - UPDATE_REG(0x200, IE); - if ((IME & 1) && (IF & IE) && armIrqEnable) - cpuNextEvent = cpuTotalTicks; - break; - case 0x202: - IF ^= (value & IF); - UPDATE_REG(0x202, IF); - break; - case 0x204: - { - memoryWait[0x0e] = memoryWaitSeq[0x0e] = gamepakRamWaitState[value & 3]; - - if(!speedHack) { - memoryWait[0x08] = memoryWait[0x09] = gamepakWaitState[(value >> 2) & 3]; - memoryWaitSeq[0x08] = memoryWaitSeq[0x09] = - gamepakWaitState0[(value >> 4) & 1]; - - memoryWait[0x0a] = memoryWait[0x0b] = gamepakWaitState[(value >> 5) & 3]; - memoryWaitSeq[0x0a] = memoryWaitSeq[0x0b] = - gamepakWaitState1[(value >> 7) & 1]; - - memoryWait[0x0c] = memoryWait[0x0d] = gamepakWaitState[(value >> 8) & 3]; - memoryWaitSeq[0x0c] = memoryWaitSeq[0x0d] = - gamepakWaitState2[(value >> 10) & 1]; - } else { - memoryWait[0x08] = memoryWait[0x09] = 3; - memoryWaitSeq[0x08] = memoryWaitSeq[0x09] = 1; - - memoryWait[0x0a] = memoryWait[0x0b] = 3; - memoryWaitSeq[0x0a] = memoryWaitSeq[0x0b] = 1; - - memoryWait[0x0c] = memoryWait[0x0d] = 3; - memoryWaitSeq[0x0c] = memoryWaitSeq[0x0d] = 1; - } - - for(int i = 8; i < 15; i++) { - memoryWait32[i] = memoryWait[i] + memoryWaitSeq[i] + 1; - memoryWaitSeq32[i] = memoryWaitSeq[i]*2 + 1; - } - - if((value & 0x4000) == 0x4000) { - busPrefetchEnable = true; - busPrefetch = false; - busPrefetchCount = 0; - } else { - busPrefetchEnable = false; - busPrefetch = false; - busPrefetchCount = 0; - } - UPDATE_REG(0x204, value & 0x7FFF); - - } - break; - case 0x208: - IME = value & 1; - UPDATE_REG(0x208, IME); - if ((IME & 1) && (IF & IE) && armIrqEnable) - cpuNextEvent = cpuTotalTicks; - break; - case 0x300: - if(value != 0) - value &= 0xFFFE; - UPDATE_REG(0x300, value); - break; - default: - UPDATE_REG(address&0x3FE, value); - break; - } -} - -void applyTimer () -{ - if (timerOnOffDelay & 1) - { - timer0ClockReload = TIMER_TICKS[timer0Value & 3]; - if(!timer0On && (timer0Value & 0x80)) { - // reload the counter - TM0D = timer0Reload; - timer0Ticks = (0x10000 - TM0D) << timer0ClockReload; - UPDATE_REG(0x100, TM0D); - } - timer0On = timer0Value & 0x80 ? true : false; - TM0CNT = timer0Value & 0xC7; -// interp_rate(); - UPDATE_REG(0x102, TM0CNT); - // CPUUpdateTicks(); - } - if (timerOnOffDelay & 2) - { - timer1ClockReload = TIMER_TICKS[timer1Value & 3]; - if(!timer1On && (timer1Value & 0x80)) { - // reload the counter - TM1D = timer1Reload; - timer1Ticks = (0x10000 - TM1D) << timer1ClockReload; - UPDATE_REG(0x104, TM1D); - } - timer1On = timer1Value & 0x80 ? true : false; - TM1CNT = timer1Value & 0xC7; -// interp_rate(); - UPDATE_REG(0x106, TM1CNT); - } - if (timerOnOffDelay & 4) - { - timer2ClockReload = TIMER_TICKS[timer2Value & 3]; - if(!timer2On && (timer2Value & 0x80)) { - // reload the counter - TM2D = timer2Reload; - timer2Ticks = (0x10000 - TM2D) << timer2ClockReload; - UPDATE_REG(0x108, TM2D); - } - timer2On = timer2Value & 0x80 ? true : false; - TM2CNT = timer2Value & 0xC7; - UPDATE_REG(0x10A, TM2CNT); - } - if (timerOnOffDelay & 8) - { - timer3ClockReload = TIMER_TICKS[timer3Value & 3]; - if(!timer3On && (timer3Value & 0x80)) { - // reload the counter - TM3D = timer3Reload; - timer3Ticks = (0x10000 - TM3D) << timer3ClockReload; - UPDATE_REG(0x10C, TM3D); - } - timer3On = timer3Value & 0x80 ? true : false; - TM3CNT = timer3Value & 0xC7; - UPDATE_REG(0x10E, TM3CNT); - } - cpuNextEvent = CPUUpdateTicks(); - timerOnOffDelay = 0; -} - -u8 cpuBitsSet[256]; -u8 cpuLowestBitSet[256]; - -void CPUInit(const char *biosFileName, bool useBiosFile) -{ -#ifdef WORDS_BIGENDIAN - if(!cpuBiosSwapped) { - for(unsigned int i = 0; i < sizeof(myROM)/4; i++) { - WRITE32LE(&myROM[i], myROM[i]); - } - cpuBiosSwapped = true; - } -#endif - gbaSaveType = 0; - eepromInUse = 0; - saveType = 0; - useBios = false; - - if(useBiosFile) { - int size = 0x4000; - if(utilLoad(biosFileName, - CPUIsGBABios, - bios, - size)) { - if(size == 0x4000) - useBios = true; - else - systemMessage(MSG_INVALID_BIOS_FILE_SIZE, N_("Invalid BIOS file size")); - } - } - - if(!useBios) { - memcpy(bios, myROM, sizeof(myROM)); - } - - int i = 0; - - biosProtected[0] = 0x00; - biosProtected[1] = 0xf0; - biosProtected[2] = 0x29; - biosProtected[3] = 0xe1; - - for(i = 0; i < 256; i++) { - int count = 0; - int j; - for(j = 0; j < 8; j++) - if(i & (1 << j)) - count++; - cpuBitsSet[i] = count; - - for(j = 0; j < 8; j++) - if(i & (1 << j)) - break; - cpuLowestBitSet[i] = j; - } - - for(i = 0; i < 0x400; i++) - ioReadable[i] = true; - for(i = 0x10; i < 0x48; i++) - ioReadable[i] = false; - for(i = 0x4c; i < 0x50; i++) - ioReadable[i] = false; - for(i = 0x54; i < 0x60; i++) - ioReadable[i] = false; - for(i = 0x8c; i < 0x90; i++) - ioReadable[i] = false; - for(i = 0xa0; i < 0xb8; i++) - ioReadable[i] = false; - for(i = 0xbc; i < 0xc4; i++) - ioReadable[i] = false; - for(i = 0xc8; i < 0xd0; i++) - ioReadable[i] = false; - for(i = 0xd4; i < 0xdc; i++) - ioReadable[i] = false; - for(i = 0xe0; i < 0x100; i++) - ioReadable[i] = false; - for(i = 0x110; i < 0x120; i++) - ioReadable[i] = false; - for(i = 0x12c; i < 0x130; i++) - ioReadable[i] = false; - for(i = 0x138; i < 0x140; i++) - ioReadable[i] = false; - for(i = 0x144; i < 0x150; i++) - ioReadable[i] = false; - for(i = 0x15c; i < 0x200; i++) - ioReadable[i] = false; - for(i = 0x20c; i < 0x300; i++) - ioReadable[i] = false; - for(i = 0x304; i < 0x400; i++) - ioReadable[i] = false; - - if(romSize < 0x1fe2000) { - *((u16 *)&rom[0x1fe209c]) = 0xdffa; // SWI 0xFA - *((u16 *)&rom[0x1fe209e]) = 0x4770; // BX LR - } else { - agbPrintEnable(false); - } -} - -void CPUReset() -{ - if(gbaSaveType == 0) { - if(eepromInUse) - gbaSaveType = 3; - else - switch(saveType) { - case 1: - gbaSaveType = 1; - break; - case 2: - gbaSaveType = 2; - break; - } - } - rtcReset(); - // clean registers - memset(®[0], 0, sizeof(reg)); - // clean OAM - memset(oam, 0, 0x400); - // clean palette - memset(paletteRAM, 0, 0x400); - // clean picture - memset(pix, 0, 4*160*240); - // clean vram - memset(vram, 0, 0x20000); - // clean io memory - memset(ioMem, 0, 0x400); - - DISPCNT = 0x0080; - DISPSTAT = 0x0000; - VCOUNT = (useBios && !skipBios) ? 0 :0x007E; - BG0CNT = 0x0000; - BG1CNT = 0x0000; - BG2CNT = 0x0000; - BG3CNT = 0x0000; - BG0HOFS = 0x0000; - BG0VOFS = 0x0000; - BG1HOFS = 0x0000; - BG1VOFS = 0x0000; - BG2HOFS = 0x0000; - BG2VOFS = 0x0000; - BG3HOFS = 0x0000; - BG3VOFS = 0x0000; - BG2PA = 0x0100; - BG2PB = 0x0000; - BG2PC = 0x0000; - BG2PD = 0x0100; - BG2X_L = 0x0000; - BG2X_H = 0x0000; - BG2Y_L = 0x0000; - BG2Y_H = 0x0000; - BG3PA = 0x0100; - BG3PB = 0x0000; - BG3PC = 0x0000; - BG3PD = 0x0100; - BG3X_L = 0x0000; - BG3X_H = 0x0000; - BG3Y_L = 0x0000; - BG3Y_H = 0x0000; - WIN0H = 0x0000; - WIN1H = 0x0000; - WIN0V = 0x0000; - WIN1V = 0x0000; - WININ = 0x0000; - WINOUT = 0x0000; - MOSAIC = 0x0000; - BLDMOD = 0x0000; - COLEV = 0x0000; - COLY = 0x0000; - DM0SAD_L = 0x0000; - DM0SAD_H = 0x0000; - DM0DAD_L = 0x0000; - DM0DAD_H = 0x0000; - DM0CNT_L = 0x0000; - DM0CNT_H = 0x0000; - DM1SAD_L = 0x0000; - DM1SAD_H = 0x0000; - DM1DAD_L = 0x0000; - DM1DAD_H = 0x0000; - DM1CNT_L = 0x0000; - DM1CNT_H = 0x0000; - DM2SAD_L = 0x0000; - DM2SAD_H = 0x0000; - DM2DAD_L = 0x0000; - DM2DAD_H = 0x0000; - DM2CNT_L = 0x0000; - DM2CNT_H = 0x0000; - DM3SAD_L = 0x0000; - DM3SAD_H = 0x0000; - DM3DAD_L = 0x0000; - DM3DAD_H = 0x0000; - DM3CNT_L = 0x0000; - DM3CNT_H = 0x0000; - TM0D = 0x0000; - TM0CNT = 0x0000; - TM1D = 0x0000; - TM1CNT = 0x0000; - TM2D = 0x0000; - TM2CNT = 0x0000; - TM3D = 0x0000; - TM3CNT = 0x0000; - P1 = 0x03FF; - IE = 0x0000; - IF = 0x0000; - IME = 0x0000; - - armMode = 0x1F; - - if(cpuIsMultiBoot) { - reg[13].I = 0x03007F00; - reg[15].I = 0x02000000; - reg[16].I = 0x00000000; - reg[R13_IRQ].I = 0x03007FA0; - reg[R13_SVC].I = 0x03007FE0; - armIrqEnable = true; - } else { - if(useBios && !skipBios) { - reg[15].I = 0x00000000; - armMode = 0x13; - armIrqEnable = false; - } else { - reg[13].I = 0x03007F00; - reg[15].I = 0x08000000; - reg[16].I = 0x00000000; - reg[R13_IRQ].I = 0x03007FA0; - reg[R13_SVC].I = 0x03007FE0; - armIrqEnable = true; - } - } - armState = true; - C_FLAG = V_FLAG = N_FLAG = Z_FLAG = false; - UPDATE_REG(0x00, DISPCNT); - UPDATE_REG(0x06, VCOUNT); - UPDATE_REG(0x20, BG2PA); - UPDATE_REG(0x26, BG2PD); - UPDATE_REG(0x30, BG3PA); - UPDATE_REG(0x36, BG3PD); - UPDATE_REG(0x130, P1); - UPDATE_REG(0x88, 0x200); - - // disable FIQ - reg[16].I |= 0x40; - - CPUUpdateCPSR(); - - armNextPC = reg[15].I; - reg[15].I += 4; - - // reset internal state - holdState = false; - holdType = 0; - - biosProtected[0] = 0x00; - biosProtected[1] = 0xf0; - biosProtected[2] = 0x29; - biosProtected[3] = 0xe1; - - lcdTicks = (useBios && !skipBios) ? 1008 : 208; - timer0On = false; - timer0Ticks = 0; - timer0Reload = 0; - timer0ClockReload = 0; - timer1On = false; - timer1Ticks = 0; - timer1Reload = 0; - timer1ClockReload = 0; - timer2On = false; - timer2Ticks = 0; - timer2Reload = 0; - timer2ClockReload = 0; - timer3On = false; - timer3Ticks = 0; - timer3Reload = 0; - timer3ClockReload = 0; - dma0Source = 0; - dma0Dest = 0; - dma1Source = 0; - dma1Dest = 0; - dma2Source = 0; - dma2Dest = 0; - dma3Source = 0; - dma3Dest = 0; - cpuSaveGameFunc = flashSaveDecide; - renderLine = mode0RenderLine; - fxOn = false; - windowOn = false; - frameCount = 0; - saveType = 0; - layerEnable = DISPCNT & layerSettings; - - CPUUpdateRenderBuffers(true); - - for(int i = 0; i < 256; i++) { - map[i].address = (u8 *)&dummyAddress; - map[i].mask = 0; - } - - map[0].address = bios; - map[0].mask = 0x3FFF; - map[2].address = workRAM; - map[2].mask = 0x3FFFF; - map[3].address = internalRAM; - map[3].mask = 0x7FFF; - map[4].address = ioMem; - map[4].mask = 0x3FF; - map[5].address = paletteRAM; - map[5].mask = 0x3FF; - map[6].address = vram; - map[6].mask = 0x1FFFF; - map[7].address = oam; - map[7].mask = 0x3FF; - map[8].address = rom; - map[8].mask = 0x1FFFFFF; - map[9].address = rom; - map[9].mask = 0x1FFFFFF; - map[10].address = rom; - map[10].mask = 0x1FFFFFF; - map[12].address = rom; - map[12].mask = 0x1FFFFFF; - map[14].address = flashSaveMemory; - map[14].mask = 0xFFFF; - - eepromReset(); - flashReset(); - - soundReset(); - - CPUUpdateWindow0(); - CPUUpdateWindow1(); - - // make sure registers are correctly initialized if not using BIOS - if(!useBios) { - if(cpuIsMultiBoot) - BIOS_RegisterRamReset(0xfe); - else - BIOS_RegisterRamReset(0xff); - } else { - if(cpuIsMultiBoot) - BIOS_RegisterRamReset(0xfe); - } - - switch(cpuSaveType) { - case 0: // automatic - cpuSramEnabled = true; - cpuFlashEnabled = true; - cpuEEPROMEnabled = true; - cpuEEPROMSensorEnabled = false; - saveType = gbaSaveType = 0; - break; - case 1: // EEPROM - cpuSramEnabled = false; - cpuFlashEnabled = false; - cpuEEPROMEnabled = true; - cpuEEPROMSensorEnabled = false; - saveType = gbaSaveType = 3; - // EEPROM usage is automatically detected - break; - case 2: // SRAM - cpuSramEnabled = true; - cpuFlashEnabled = false; - cpuEEPROMEnabled = false; - cpuEEPROMSensorEnabled = false; - cpuSaveGameFunc = sramDelayedWrite; // to insure we detect the write - saveType = gbaSaveType = 1; - break; - case 3: // FLASH - cpuSramEnabled = false; - cpuFlashEnabled = true; - cpuEEPROMEnabled = false; - cpuEEPROMSensorEnabled = false; - cpuSaveGameFunc = flashDelayedWrite; // to insure we detect the write - saveType = gbaSaveType = 2; - break; - case 4: // EEPROM+Sensor - cpuSramEnabled = false; - cpuFlashEnabled = false; - cpuEEPROMEnabled = true; - cpuEEPROMSensorEnabled = true; - // EEPROM usage is automatically detected - saveType = gbaSaveType = 3; - break; - case 5: // NONE - cpuSramEnabled = false; - cpuFlashEnabled = false; - cpuEEPROMEnabled = false; - cpuEEPROMSensorEnabled = false; - // no save at all - saveType = gbaSaveType = 5; - break; - } - - ARM_PREFETCH; - - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; - - cpuDmaHack = false; - - //lastTime = systemGetClock(); - - SWITicks = 0; -} - -void CPUInterrupt() -{ - u32 PC = reg[15].I; - bool savedState = armState; - CPUSwitchMode(0x12, true, false); - reg[14].I = PC; - if(!savedState) - reg[14].I += 2; - reg[15].I = 0x18; - armState = true; - armIrqEnable = false; - - armNextPC = reg[15].I; - reg[15].I += 4; - ARM_PREFETCH; - - // if(!holdState) - biosProtected[0] = 0x02; - biosProtected[1] = 0xc0; - biosProtected[2] = 0x5e; - biosProtected[3] = 0xe5; -} - -#ifdef SDL -void log(const char *defaultMsg, ...) -{ - char buffer[2048]; - va_list valist; - - va_start(valist, defaultMsg); - vsprintf(buffer, defaultMsg, valist); - - if(out == NULL) { - out = fopen("trace.log","w"); - } - - fputs(buffer, out); - - va_end(valist); -} -#else -extern void winlog(const char *, ...); -#endif - -void CPULoop(int ticks) -{ - int clockTicks; - int timerOverflow = 0; - // variable used by the CPU core - cpuTotalTicks = 0; -#ifdef LINK_EMULATION - if(linkenable) - cpuNextEvent = 1; -#endif - cpuBreakLoop = false; - cpuNextEvent = CPUUpdateTicks(); - if(cpuNextEvent > ticks) - cpuNextEvent = ticks; - - - for(;;) { -#ifndef FINAL_VERSION - if(systemDebug) { - if(systemDebug >= 10 && !holdState) { - CPUUpdateCPSR(); -#ifdef BKPT_SUPPORT - if (debugger_last) - { - sprintf(buffer, "R00=%08x R01=%08x R02=%08x R03=%08x R04=%08x R05=%08x R06=%08x R07=%08x R08=%08x R09=%08x R10=%08x R11=%08x R12=%08x R13=%08x R14=%08x R15=%08x R16=%08x R17=%08x\n", - oldreg[0], oldreg[1], oldreg[2], oldreg[3], oldreg[4], oldreg[5], - oldreg[6], oldreg[7], oldreg[8], oldreg[9], oldreg[10], oldreg[11], - oldreg[12], oldreg[13], oldreg[14], oldreg[15], oldreg[16], - oldreg[17]); - } -#endif - sprintf(buffer, "R00=%08x R01=%08x R02=%08x R03=%08x R04=%08x R05=%08x R06=%08x R07=%08x R08=%08x R09=%08x R10=%08x R11=%08x R12=%08x R13=%08x R14=%08x R15=%08x R16=%08x R17=%08x\n", - reg[0].I, reg[1].I, reg[2].I, reg[3].I, reg[4].I, reg[5].I, - reg[6].I, reg[7].I, reg[8].I, reg[9].I, reg[10].I, reg[11].I, - reg[12].I, reg[13].I, reg[14].I, reg[15].I, reg[16].I, - reg[17].I); -#ifdef SDL - log(buffer); -#else - winlog(buffer); -#endif - } else if(!holdState) { - sprintf(buffer, "PC=%08x\n", armNextPC); -#ifdef SDL - log(buffer); -#else - winlog(buffer); -#endif - } - } -#endif /* FINAL_VERSION */ - - if(!holdState && !SWITicks) { - if(armState) { - if (!armExecute()) - return; - } else { - if (!thumbExecute()) - return; - } - clockTicks = 0; - } else - clockTicks = CPUUpdateTicks(); - - cpuTotalTicks += clockTicks; - - - if(cpuTotalTicks >= cpuNextEvent) { - int remainingTicks = cpuTotalTicks - cpuNextEvent; - - if (SWITicks) - { - SWITicks-=clockTicks; - if (SWITicks<0) - SWITicks = 0; - } - - clockTicks = cpuNextEvent; - cpuTotalTicks = 0; - cpuDmaHack = false; - - updateLoop: - - if (IRQTicks) - { - IRQTicks -= clockTicks; - if (IRQTicks<0) - IRQTicks = 0; - } - - lcdTicks -= clockTicks; - - - if(lcdTicks <= 0) { - if(DISPSTAT & 1) { // V-BLANK - // if in V-Blank mode, keep computing... - if(DISPSTAT & 2) { - lcdTicks += 1008; - VCOUNT++; - UPDATE_REG(0x06, VCOUNT); - DISPSTAT &= 0xFFFD; - UPDATE_REG(0x04, DISPSTAT); - CPUCompareVCOUNT(); - } else { - lcdTicks += 224; - DISPSTAT |= 2; - UPDATE_REG(0x04, DISPSTAT); - if(DISPSTAT & 16) { - IF |= 2; - UPDATE_REG(0x202, IF); - } - } - - if(VCOUNT >= 228) { //Reaching last line - DISPSTAT &= 0xFFFC; - UPDATE_REG(0x04, DISPSTAT); - VCOUNT = 0; - UPDATE_REG(0x06, VCOUNT); - CPUCompareVCOUNT(); - } - } else { - int framesToSkip = systemFrameSkip; - if(speedup) - framesToSkip = 9; // try 6 FPS during speedup - - if(DISPSTAT & 2) { - // if in H-Blank, leave it and move to drawing mode - VCOUNT++; - UPDATE_REG(0x06, VCOUNT); - - lcdTicks += 1008; - DISPSTAT &= 0xFFFD; - if(VCOUNT == 160) { - count++; - systemFrame(); - - if((count % 10) == 0) { - system10Frames(60); - } - if(count == 60) { - /*u32 time = systemGetClock(); - if(time != lastTime) { - u32 t = 100000/(time - lastTime); - systemShowSpeed(t); - } else - systemShowSpeed(0); - lastTime = time;*/ - count = 0; - } - u32 joy = 0; - // update joystick information - if(systemReadJoypads()) - // read default joystick - joy = systemReadJoypad(-1); - P1 = 0x03FF ^ (joy & 0x3FF); - if(cpuEEPROMSensorEnabled) - systemUpdateMotionSensor(); - UPDATE_REG(0x130, P1); - u16 P1CNT = READ16LE(((u16 *)&ioMem[0x132])); - // this seems wrong, but there are cases where the game - // can enter the stop state without requesting an IRQ from - // the joypad. - if((P1CNT & 0x4000) || stopState) { - u16 p1 = (0x3FF ^ P1) & 0x3FF; - if(P1CNT & 0x8000) { - if(p1 == (P1CNT & 0x3FF)) { - IF |= 0x1000; - UPDATE_REG(0x202, IF); - } - } else { - if(p1 & P1CNT) { - IF |= 0x1000; - UPDATE_REG(0x202, IF); - } - } - } - - u32 ext = (joy >> 10); - // If no (m) code is enabled, apply the cheats at each LCDline - if((cheatsEnabled) && (mastercode==0)) - remainingTicks += cheatsCheckKeys(P1^0x3FF, ext); - speedup = (ext & 1) ? true : false; - capture = (ext & 2) ? true : false; - - if(capture && !capturePrevious) { - captureNumber++; - systemScreenCapture(captureNumber); - } - capturePrevious = capture; - - DISPSTAT |= 1; - DISPSTAT &= 0xFFFD; - UPDATE_REG(0x04, DISPSTAT); - if(DISPSTAT & 0x0008) { - IF |= 1; - UPDATE_REG(0x202, IF); - } - CPUCheckDMA(1, 0x0f); - if(frameCount >= framesToSkip) { - systemDrawScreen(); - frameCount = 0; - } else - frameCount++; - if(systemPauseOnFrame()) - ticks = 0; - } - - UPDATE_REG(0x04, DISPSTAT); - CPUCompareVCOUNT(); - - } else { - if(frameCount >= framesToSkip) - { - (*renderLine)(); - switch(systemColorDepth) { - case 16: - { - u16 *dest = (u16 *)pix + 242 * (VCOUNT+1); - for(int x = -1; x < 240;) { - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - *dest++ = systemColorMap16[lineMix[++x]&0xFFFF]; - } - // for filters that read past the screen - *dest = 0; - } - break; - case 24: - { - u8 *dest = (u8 *)pix + 240 * VCOUNT * 3; - for(int x = -1; x < 240;) { - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - dest += 3; - *((u32 *)dest) = systemColorMap32[lineMix[++x] & 0xFFFF]; - } - } - break; - case 32: - { - u32 *dest = (u32 *)pix + 241 * (VCOUNT+1); - for(int x = -1; x < 240; ) { - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest++ = systemColorMap32[lineMix[++x] & 0xFFFF]; - *dest = systemColorMap32[lineMix[++x] & 0xFFFF]; - } - } - break; - } - } - // entering H-Blank - DISPSTAT |= 2; - UPDATE_REG(0x04, DISPSTAT); - lcdTicks += 224; - CPUCheckDMA(2, 0x0f); - if(DISPSTAT & 16) { - IF |= 2; - UPDATE_REG(0x202, IF); - } - } - } - } - - // we shouldn't be doing sound in stop state, but we loose synchronization - // if sound is disabled, so in stop state, soundTick will just produce - // mute sound - soundTicks -= clockTicks; - if(soundTicks <= 0) { - soundTick(); // psoundTickfn(); - soundTicks += SOUND_CLOCK_TICKS; - } - - if(!stopState) { - if(timer0On) { - timer0Ticks -= clockTicks; - if(timer0Ticks <= 0) { - timer0Ticks += (0x10000 - timer0Reload) << timer0ClockReload; - timerOverflow |= 1; - soundTimerOverflow(0); - if(TM0CNT & 0x40) { - IF |= 0x08; - UPDATE_REG(0x202, IF); - } - } - TM0D = 0xFFFF - (timer0Ticks >> timer0ClockReload); - UPDATE_REG(0x100, TM0D); - } - - if(timer1On) { - if(TM1CNT & 4) { - if(timerOverflow & 1) { - TM1D++; - if(TM1D == 0) { - TM1D += timer1Reload; - timerOverflow |= 2; - soundTimerOverflow(1); - if(TM1CNT & 0x40) { - IF |= 0x10; - UPDATE_REG(0x202, IF); - } - } - UPDATE_REG(0x104, TM1D); - } - } else { - timer1Ticks -= clockTicks; - if(timer1Ticks <= 0) { - timer1Ticks += (0x10000 - timer1Reload) << timer1ClockReload; - timerOverflow |= 2; - soundTimerOverflow(1); - if(TM1CNT & 0x40) { - IF |= 0x10; - UPDATE_REG(0x202, IF); - } - } - TM1D = 0xFFFF - (timer1Ticks >> timer1ClockReload); - UPDATE_REG(0x104, TM1D); - } - } - - if(timer2On) { - if(TM2CNT & 4) { - if(timerOverflow & 2) { - TM2D++; - if(TM2D == 0) { - TM2D += timer2Reload; - timerOverflow |= 4; - if(TM2CNT & 0x40) { - IF |= 0x20; - UPDATE_REG(0x202, IF); - } - } - UPDATE_REG(0x108, TM2D); - } - } else { - timer2Ticks -= clockTicks; - if(timer2Ticks <= 0) { - timer2Ticks += (0x10000 - timer2Reload) << timer2ClockReload; - timerOverflow |= 4; - if(TM2CNT & 0x40) { - IF |= 0x20; - UPDATE_REG(0x202, IF); - } - } - TM2D = 0xFFFF - (timer2Ticks >> timer2ClockReload); - UPDATE_REG(0x108, TM2D); - } - } - - if(timer3On) { - if(TM3CNT & 4) { - if(timerOverflow & 4) { - TM3D++; - if(TM3D == 0) { - TM3D += timer3Reload; - if(TM3CNT & 0x40) { - IF |= 0x40; - UPDATE_REG(0x202, IF); - } - } - UPDATE_REG(0x10C, TM3D); - } - } else { - timer3Ticks -= clockTicks; - if(timer3Ticks <= 0) { - timer3Ticks += (0x10000 - timer3Reload) << timer3ClockReload; - if(TM3CNT & 0x40) { - IF |= 0x40; - UPDATE_REG(0x202, IF); - } - } - TM3D = 0xFFFF - (timer3Ticks >> timer3ClockReload); - UPDATE_REG(0x10C, TM3D); - } - } - } - - timerOverflow = 0; - - - -#ifdef PROFILING - profilingTicks -= clockTicks; - if(profilingTicks <= 0) { - profilingTicks += profilingTicksReload; - if(profilSegment) { - profile_segment *seg = profilSegment; - do { - u16 *b = (u16 *)seg->sbuf; - int pc = ((reg[15].I - seg->s_lowpc) * seg->s_scale)/0x10000; - if(pc >= 0 && pc < seg->ssiz) { - b[pc]++; - break; - } - - seg = seg->next; - } while(seg); - } - } -#endif - - ticks -= clockTicks; -#ifdef LINK_EMULATION - if (linkenable) - LinkUpdate(clockTicks); -#endif - cpuNextEvent = CPUUpdateTicks(); - - if(cpuDmaTicksToUpdate > 0) { - if(cpuDmaTicksToUpdate > cpuNextEvent) - clockTicks = cpuNextEvent; - else - clockTicks = cpuDmaTicksToUpdate; - cpuDmaTicksToUpdate -= clockTicks; - if(cpuDmaTicksToUpdate < 0) - cpuDmaTicksToUpdate = 0; - cpuDmaHack = true; - goto updateLoop; - } -#ifdef LINK_EMULATION - if(linkenable) - cpuNextEvent = 1; -#endif - if(IF && (IME & 1) && armIrqEnable) { - int res = IF & IE; - if(stopState) - res &= 0x3080; - if(res) { - if (intState) - { - if (!IRQTicks) - { - CPUInterrupt(); - intState = false; - holdState = false; - stopState = false; - holdType = 0; - } - } - else - { - if (!holdState) - { - intState = true; - IRQTicks=7; - if (cpuNextEvent> IRQTicks) - cpuNextEvent = IRQTicks; - } - else - { - CPUInterrupt(); - holdState = false; - stopState = false; - holdType = 0; - } - } - - // Stops the SWI Ticks emulation if an IRQ is executed - //(to avoid problems with nested IRQ/SWI) - if (SWITicks) - SWITicks = 0; - } - } - - if(remainingTicks > 0) { - if(remainingTicks > cpuNextEvent) - clockTicks = cpuNextEvent; - else - clockTicks = remainingTicks; - remainingTicks -= clockTicks; - if(remainingTicks < 0) - remainingTicks = 0; - goto updateLoop; - } - - if (timerOnOffDelay) - applyTimer(); - - if(cpuNextEvent > ticks) - cpuNextEvent = ticks; - - if(ticks <= 0 || cpuBreakLoop) - break; - - } - } -} - - - -struct EmulatedSystem GBASystem = { - // emuMain - CPULoop, - // emuReset - CPUReset, - // emuCleanUp - CPUCleanUp, - // emuReadBattery - CPUReadBatteryFile, - // emuWriteBattery - CPUWriteBatteryFile, - // emuReadState - CPUReadState, - // emuWriteState - CPUWriteState, - // emuReadMemState - CPUReadMemState, - // emuWriteMemState - CPUWriteMemState, - // emuWritePNG - CPUWritePNGFile, - // emuWriteBMP - CPUWriteBMPFile, - // emuUpdateCPSR - CPUUpdateCPSR, - // emuHasDebugger - true, - // emuCount -#ifdef FINAL_VERSION - 250000 -#else - 5000 -#endif -}; diff --git a/source/vba/agb/GBAGfx.h b/source/vba/agb/GBAGfx.h deleted file mode 100644 index 73f1dd46..00000000 --- a/source/vba/agb/GBAGfx.h +++ /dev/null @@ -1,1601 +0,0 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team -// Copyright (C) 2008 VBA-M development team -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_GFX_H -#define VBA_GFX_H - -#include "GBA.h" -#include "../Globals.h" - -#include "../Port.h" - -//#define SPRITE_DEBUG - -static void gfxDrawTextScreen(u16, u16, u16, u32 *); -static void gfxDrawRotScreen(u16, - u16, u16, - u16, u16, - u16, u16, - u16, u16, - int&, int&, - int, - u32*); -static void gfxDrawRotScreen16Bit(u16, - u16, u16, - u16, u16, - u16, u16, - u16, u16, - int&, int&, - int, - u32*); -static void gfxDrawRotScreen256(u16, - u16, u16, - u16, u16, - u16, u16, - u16, u16, - int&, int&, - int, - u32*); -static void gfxDrawRotScreen16Bit160(u16, - u16, u16, - u16, u16, - u16, u16, - u16, u16, - int&, int&, - int, - u32*); -static void gfxDrawSprites(u32 *); -static void gfxIncreaseBrightness(u32 *line, int coeff); -static void gfxDecreaseBrightness(u32 *line, int coeff); -static void gfxAlphaBlend(u32 *ta, u32 *tb, int ca, int cb); - -void mode0RenderLine(); -void mode0RenderLineNoWindow(); -void mode0RenderLineAll(); - -void mode1RenderLine(); -void mode1RenderLineNoWindow(); -void mode1RenderLineAll(); - -void mode2RenderLine(); -void mode2RenderLineNoWindow(); -void mode2RenderLineAll(); - -void mode3RenderLine(); -void mode3RenderLineNoWindow(); -void mode3RenderLineAll(); - -void mode4RenderLine(); -void mode4RenderLineNoWindow(); -void mode4RenderLineAll(); - -void mode5RenderLine(); -void mode5RenderLineNoWindow(); -void mode5RenderLineAll(); - -extern int coeff[32]; -extern u32 line0[240]; -extern u32 line1[240]; -extern u32 line2[240]; -extern u32 line3[240]; -extern u32 lineOBJ[240]; -extern u32 lineOBJWin[240]; -extern u32 lineMix[240]; -extern bool gfxInWin0[240]; -extern bool gfxInWin1[240]; -extern int lineOBJpixleft[128]; - -extern int gfxBG2Changed; -extern int gfxBG3Changed; - -extern int gfxBG2X; -extern int gfxBG2Y; -extern int gfxBG2LastX; -extern int gfxBG2LastY; -extern int gfxBG3X; -extern int gfxBG3Y; -extern int gfxBG3LastX; -extern int gfxBG3LastY; -extern int gfxLastVCOUNT; - -static inline void gfxClearArray(u32 *array) -{ - for(int i = 0; i < 240; i++) { - *array++ = 0x80000000; - } -} - -static inline void gfxDrawTextScreen(u16 control, u16 hofs, u16 vofs, - u32 *line) -{ - u16 *palette = (u16 *)paletteRAM; - u8 *charBase = &vram[((control >> 2) & 0x03) * 0x4000]; - u16 *screenBase = (u16 *)&vram[((control >> 8) & 0x1f) * 0x800]; - u32 prio = ((control & 3)<<25) + 0x1000000; - int sizeX = 256; - int sizeY = 256; - switch((control >> 14) & 3) { - case 0: - break; - case 1: - sizeX = 512; - break; - case 2: - sizeY = 512; - break; - case 3: - sizeX = 512; - sizeY = 512; - break; - } - - int maskX = sizeX-1; - int maskY = sizeY-1; - - bool mosaicOn = (control & 0x40) ? true : false; - - int xxx = hofs & maskX; - int yyy = (vofs + VCOUNT) & maskY; - int mosaicX = (MOSAIC & 0x000F)+1; - int mosaicY = ((MOSAIC & 0x00F0)>>4)+1; - - if(mosaicOn) { - if((VCOUNT % mosaicY) != 0) { - mosaicY = VCOUNT - (VCOUNT % mosaicY); - yyy = (vofs + mosaicY) & maskY; - } - } - - if(yyy > 255 && sizeY > 256) { - yyy &= 255; - screenBase += 0x400; - if(sizeX > 256) - screenBase += 0x400; - } - - int yshift = ((yyy>>3)<<5); - if((control) & 0x80) { - u16 *screenSource = screenBase + 0x400 * (xxx>>8) + ((xxx & 255)>>3) + yshift; - for(int x = 0; x < 240; x++) { - u16 data = READ16LE(screenSource); - - int tile = data & 0x3FF; - int tileX = (xxx & 7); - int tileY = yyy & 7; - - if(tileX == 7) - screenSource++; - - if(data & 0x0400) - tileX = 7 - tileX; - if(data & 0x0800) - tileY = 7 - tileY; - - u8 color = charBase[tile * 64 + tileY * 8 + tileX]; - - line[x] = color ? (READ16LE(&palette[color]) | prio): 0x80000000; - - xxx++; - if(xxx == 256) { - if(sizeX > 256) - screenSource = screenBase + 0x400 + yshift; - else { - screenSource = screenBase + yshift; - xxx = 0; - } - } else if(xxx >= sizeX) { - xxx = 0; - screenSource = screenBase + yshift; - } - } - } else { - u16 *screenSource = screenBase + 0x400*(xxx>>8)+((xxx&255)>>3) + - yshift; - for(int x = 0; x < 240; x++) { - u16 data = READ16LE(screenSource); - - int tile = data & 0x3FF; - int tileX = (xxx & 7); - int tileY = yyy & 7; - - if(tileX == 7) - screenSource++; - - if(data & 0x0400) - tileX = 7 - tileX; - if(data & 0x0800) - tileY = 7 - tileY; - - u8 color = charBase[(tile<<5) + (tileY<<2) + (tileX>>1)]; - - if(tileX & 1) { - color = (color >> 4); - } else { - color &= 0x0F; - } - - int pal = (data>>8) & 0xF0; - line[x] = color ? (READ16LE(&palette[pal + color])|prio): 0x80000000; - - xxx++; - if(xxx == 256) { - if(sizeX > 256) - screenSource = screenBase + 0x400 + yshift; - else { - screenSource = screenBase + yshift; - xxx = 0; - } - } else if(xxx >= sizeX) { - xxx = 0; - screenSource = screenBase + yshift; - } - } - } - if(mosaicOn) { - if(mosaicX > 1) { - int m = 1; - for(int i = 0; i < 239; i++) { - line[i+1] = line[i]; - m++; - if(m == mosaicX) { - m = 1; - i++; - } - } - } - } -} - -static inline void gfxDrawRotScreen(u16 control, - u16 x_l, u16 x_h, - u16 y_l, u16 y_h, - u16 pa, u16 pb, - u16 pc, u16 pd, - int& currentX, int& currentY, - int changed, - u32 *line) -{ - u16 *palette = (u16 *)paletteRAM; - u8 *charBase = &vram[((control >> 2) & 0x03) * 0x4000]; - u8 *screenBase = (u8 *)&vram[((control >> 8) & 0x1f) * 0x800]; - int prio = ((control & 3) << 25) + 0x1000000; - - int sizeX = 128; - int sizeY = 128; - switch((control >> 14) & 3) { - case 0: - break; - case 1: - sizeX = sizeY = 256; - break; - case 2: - sizeX = sizeY = 512; - break; - case 3: - sizeX = sizeY = 1024; - break; - } - - int maskX = sizeX-1; - int maskY = sizeY-1; - - int yshift = ((control >> 14) & 3)+4; - - int dx = pa & 0x7FFF; - if(pa & 0x8000) - dx |= 0xFFFF8000; - int dmx = pb & 0x7FFF; - if(pb & 0x8000) - dmx |= 0xFFFF8000; - int dy = pc & 0x7FFF; - if(pc & 0x8000) - dy |= 0xFFFF8000; - int dmy = pd & 0x7FFF; - if(pd & 0x8000) - dmy |= 0xFFFF8000; - - if(VCOUNT == 0) - changed = 3; - - if(changed & 1) { - currentX = (x_l) | ((x_h & 0x07FF)<<16); - if(x_h & 0x0800) - currentX |= 0xF8000000; - } else { - currentX += dmx; - } - - if(changed & 2) { - currentY = (y_l) | ((y_h & 0x07FF)<<16); - if(y_h & 0x0800) - currentY |= 0xF8000000; - } else { - currentY += dmy; - } - - int realX = currentX; - int realY = currentY; - - if(control & 0x40) { - int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; - int y = (VCOUNT % mosaicY); - realX -= y*dmx; - realY -= y*dmy; - } - - if(control & 0x2000) { - for(int x = 0; x < 240; x++) { - int xxx = (realX >> 8) & maskX; - int yyy = (realY >> 8) & maskY; - - int tile = screenBase[(xxx>>3) + ((yyy>>3)<> 8); - int yyy = (realY >> 8); - - if(xxx < 0 || - yyy < 0 || - xxx >= sizeX || - yyy >= sizeY) { - line[x] = 0x80000000; - } else { - int tile = screenBase[(xxx>>3) + ((yyy>>3)< 1) { - int m = 1; - for(int i = 0; i < 239; i++) { - line[i+1] = line[i]; - m++; - if(m == mosaicX) { - m = 1; - i++; - } - } - } - } -} - -static inline void gfxDrawRotScreen16Bit(u16 control, - u16 x_l, u16 x_h, - u16 y_l, u16 y_h, - u16 pa, u16 pb, - u16 pc, u16 pd, - int& currentX, int& currentY, - int changed, - u32 *line) -{ - u16 *screenBase = (u16 *)&vram[0]; - int prio = ((control & 3) << 25) + 0x1000000; - int sizeX = 240; - int sizeY = 160; - - int startX = (x_l) | ((x_h & 0x07FF)<<16); - if(x_h & 0x0800) - startX |= 0xF8000000; - int startY = (y_l) | ((y_h & 0x07FF)<<16); - if(y_h & 0x0800) - startY |= 0xF8000000; - - int dx = pa & 0x7FFF; - if(pa & 0x8000) - dx |= 0xFFFF8000; - int dmx = pb & 0x7FFF; - if(pb & 0x8000) - dmx |= 0xFFFF8000; - int dy = pc & 0x7FFF; - if(pc & 0x8000) - dy |= 0xFFFF8000; - int dmy = pd & 0x7FFF; - if(pd & 0x8000) - dmy |= 0xFFFF8000; - - if(VCOUNT == 0) - changed = 3; - - if(changed & 1) { - currentX = (x_l) | ((x_h & 0x07FF)<<16); - if(x_h & 0x0800) - currentX |= 0xF8000000; - } else - currentX += dmx; - - if(changed & 2) { - currentY = (y_l) | ((y_h & 0x07FF)<<16); - if(y_h & 0x0800) - currentY |= 0xF8000000; - } else { - currentY += dmy; - } - - int realX = currentX; - int realY = currentY; - - if(control & 0x40) { - int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; - int y = (VCOUNT % mosaicY); - realX -= y*dmx; - realY -= y*dmy; - } - - int xxx = (realX >> 8); - int yyy = (realY >> 8); - - for(int x = 0; x < 240; x++) { - if(xxx < 0 || - yyy < 0 || - xxx >= sizeX || - yyy >= sizeY) { - line[x] = 0x80000000; - } else { - line[x] = (READ16LE(&screenBase[yyy * sizeX + xxx]) | prio); - } - realX += dx; - realY += dy; - - xxx = (realX >> 8); - yyy = (realY >> 8); - } - - if(control & 0x40) { - int mosaicX = (MOSAIC & 0xF) + 1; - if(mosaicX > 1) { - int m = 1; - for(int i = 0; i < 239; i++) { - line[i+1] = line[i]; - m++; - if(m == mosaicX) { - m = 1; - i++; - } - } - } - } -} - -static inline void gfxDrawRotScreen256(u16 control, - u16 x_l, u16 x_h, - u16 y_l, u16 y_h, - u16 pa, u16 pb, - u16 pc, u16 pd, - int ¤tX, int& currentY, - int changed, - u32 *line) -{ - u16 *palette = (u16 *)paletteRAM; - u8 *screenBase = (DISPCNT & 0x0010) ? &vram[0xA000] : &vram[0x0000]; - int prio = ((control & 3) << 25) + 0x1000000; - int sizeX = 240; - int sizeY = 160; - - int startX = (x_l) | ((x_h & 0x07FF)<<16); - if(x_h & 0x0800) - startX |= 0xF8000000; - int startY = (y_l) | ((y_h & 0x07FF)<<16); - if(y_h & 0x0800) - startY |= 0xF8000000; - - int dx = pa & 0x7FFF; - if(pa & 0x8000) - dx |= 0xFFFF8000; - int dmx = pb & 0x7FFF; - if(pb & 0x8000) - dmx |= 0xFFFF8000; - int dy = pc & 0x7FFF; - if(pc & 0x8000) - dy |= 0xFFFF8000; - int dmy = pd & 0x7FFF; - if(pd & 0x8000) - dmy |= 0xFFFF8000; - - if(VCOUNT == 0) - changed = 3; - - if(changed & 1) { - currentX = (x_l) | ((x_h & 0x07FF)<<16); - if(x_h & 0x0800) - currentX |= 0xF8000000; - } else { - currentX += dmx; - } - - if(changed & 2) { - currentY = (y_l) | ((y_h & 0x07FF)<<16); - if(y_h & 0x0800) - currentY |= 0xF8000000; - } else { - currentY += dmy; - } - - int realX = currentX; - int realY = currentY; - - if(control & 0x40) { - int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; - int y = VCOUNT - (VCOUNT % mosaicY); - realX = startX + y*dmx; - realY = startY + y*dmy; - } - - int xxx = (realX >> 8); - int yyy = (realY >> 8); - - for(int x = 0; x < 240; x++) { - if(xxx < 0 || - yyy < 0 || - xxx >= sizeX || - yyy >= sizeY) { - line[x] = 0x80000000; - } else { - u8 color = screenBase[yyy * 240 + xxx]; - - line[x] = color ? (READ16LE(&palette[color])|prio): 0x80000000; - } - realX += dx; - realY += dy; - - xxx = (realX >> 8); - yyy = (realY >> 8); - } - - if(control & 0x40) { - int mosaicX = (MOSAIC & 0xF) + 1; - if(mosaicX > 1) { - int m = 1; - for(int i = 0; i < 239; i++) { - line[i+1] = line[i]; - m++; - if(m == mosaicX) { - m = 1; - i++; - } - } - } - } -} - -static inline void gfxDrawRotScreen16Bit160(u16 control, - u16 x_l, u16 x_h, - u16 y_l, u16 y_h, - u16 pa, u16 pb, - u16 pc, u16 pd, - int& currentX, int& currentY, - int changed, - u32 *line) -{ - u16 *screenBase = (DISPCNT & 0x0010) ? (u16 *)&vram[0xa000] : - (u16 *)&vram[0]; - int prio = ((control & 3) << 25) + 0x1000000; - int sizeX = 160; - int sizeY = 128; - - int startX = (x_l) | ((x_h & 0x07FF)<<16); - if(x_h & 0x0800) - startX |= 0xF8000000; - int startY = (y_l) | ((y_h & 0x07FF)<<16); - if(y_h & 0x0800) - startY |= 0xF8000000; - - int dx = pa & 0x7FFF; - if(pa & 0x8000) - dx |= 0xFFFF8000; - int dmx = pb & 0x7FFF; - if(pb & 0x8000) - dmx |= 0xFFFF8000; - int dy = pc & 0x7FFF; - if(pc & 0x8000) - dy |= 0xFFFF8000; - int dmy = pd & 0x7FFF; - if(pd & 0x8000) - dmy |= 0xFFFF8000; - - if(VCOUNT == 0) - changed = 3; - - if(changed & 1) { - currentX = (x_l) | ((x_h & 0x07FF)<<16); - if(x_h & 0x0800) - currentX |= 0xF8000000; - } else { - currentX += dmx; - } - - if(changed & 2) { - currentY = (y_l) | ((y_h & 0x07FF)<<16); - if(y_h & 0x0800) - currentY |= 0xF8000000; - } else { - currentY += dmy; - } - - int realX = currentX; - int realY = currentY; - - if(control & 0x40) { - int mosaicY = ((MOSAIC & 0xF0)>>4) + 1; - int y = VCOUNT - (VCOUNT % mosaicY); - realX = startX + y*dmx; - realY = startY + y*dmy; - } - - int xxx = (realX >> 8); - int yyy = (realY >> 8); - - for(int x = 0; x < 240; x++) { - if(xxx < 0 || - yyy < 0 || - xxx >= sizeX || - yyy >= sizeY) { - line[x] = 0x80000000; - } else { - line[x] = (READ16LE(&screenBase[yyy * sizeX + xxx]) | prio); - } - realX += dx; - realY += dy; - - xxx = (realX >> 8); - yyy = (realY >> 8); - } - - if(control & 0x40) { - int mosaicX = (MOSAIC & 0xF) + 1; - if(mosaicX > 1) { - int m = 1; - for(int i = 0; i < 239; i++) { - line[i+1] = line[i]; - m++; - if(m == mosaicX) { - m = 1; - i++; - } - } - } - } -} - -static inline void gfxDrawSprites(u32 *lineOBJ) -{ - // lineOBJpix is used to keep track of the drawn OBJs - // and to stop drawing them if the 'maximum number of OBJ per line' - // has been reached. - int lineOBJpix = (DISPCNT & 0x20) ? 954 : 1226; - int m=0; - gfxClearArray(lineOBJ); - if(layerEnable & 0x1000) { - u16 *sprites = (u16 *)oam; - u16 *spritePalette = &((u16 *)paletteRAM)[256]; - int mosaicY = ((MOSAIC & 0xF000)>>12) + 1; - int mosaicX = ((MOSAIC & 0xF00)>>8) + 1; - for(int x = 0; x < 128 ; x++) { - u16 a0 = READ16LE(sprites++); - u16 a1 = READ16LE(sprites++); - u16 a2 = READ16LE(sprites++); - sprites++; - - lineOBJpixleft[x]=lineOBJpix; - - lineOBJpix-=2; - if (lineOBJpix<=0) - continue; - - if ((a0 & 0x0c00) == 0x0c00) - a0 &=0xF3FF; - - if ((a0>>14) == 3) - { - a0 &= 0x3FFF; - a1 &= 0x3FFF; - } - - int sizeX = 8<<(a1>>14); - int sizeY = sizeX; - - if ((a0>>14) & 1) - { - if (sizeX<32) - sizeX<<=1; - if (sizeY>8) - sizeY>>=1; - } - else if ((a0>>14) & 2) - { - if (sizeX>8) - sizeX>>=1; - if (sizeY<32) - sizeY<<=1; - } - -#ifdef SPRITE_DEBUG - int maskX = sizeX-1; - int maskY = sizeY-1; -#endif - - int sy = (a0 & 255); - int sx = (a1 & 0x1FF); - - // computes ticks used by OBJ-WIN if OBJWIN is enabled - if (((a0 & 0x0c00) == 0x0800) && (layerEnable & 0x8000)) - { - if ((a0 & 0x0300) == 0x0300) - { - sizeX<<=1; - sizeY<<=1; - } - if((sy+sizeY) > 256) - sy -= 256; - if ((sx+sizeX)> 512) - sx-=512; - if (sx<0) - { - sizeX+=sx; - sx = 0; - } - else if ((sx+sizeX)>240) - sizeX=240-sx; - if ((VCOUNT>=sy) && (VCOUNT 256) - sy -= 256; - int t = VCOUNT - sy; - if((t >= 0) && (t < fieldY)) { - int startpix = 0; - if ((sx+fieldX)> 512) - { - startpix=512-sx; - } - if (lineOBJpix>0) - if((sx < 240) || startpix) { - lineOBJpix-=8; - // int t2 = t - (fieldY >> 1); - int rot = (a1 >> 9) & 0x1F; - u16 *OAM = (u16 *)oam; - int dx = READ16LE(&OAM[3 + (rot << 4)]); - if(dx & 0x8000) - dx |= 0xFFFF8000; - int dmx = READ16LE(&OAM[7 + (rot << 4)]); - if(dmx & 0x8000) - dmx |= 0xFFFF8000; - int dy = READ16LE(&OAM[11 + (rot << 4)]); - if(dy & 0x8000) - dy |= 0xFFFF8000; - int dmy = READ16LE(&OAM[15 + (rot << 4)]); - if(dmy & 0x8000) - dmy |= 0xFFFF8000; - - if(a0 & 0x1000) { - t -= (t % mosaicY); - } - - int realX = ((sizeX) << 7) - (fieldX >> 1)*dx - (fieldY>>1)*dmx - + t * dmx; - int realY = ((sizeY) << 7) - (fieldX >> 1)*dy - (fieldY>>1)*dmy - + t * dmy; - - u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); - - if(a0 & 0x2000) { - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - int inc = 32; - if(DISPCNT & 0x40) - inc = sizeX >> 2; - else - c &= 0x3FE; - for(int x = 0; x < fieldX; x++) { - if (x >= startpix) - lineOBJpix-=2; - if (lineOBJpix<0) - continue; - int xxx = realX >> 8; - int yyy = realY >> 8; - - if(xxx < 0 || xxx >= sizeX || - yyy < 0 || yyy >= sizeY || - sx >= 240); - else { - u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) - + ((yyy & 7)<<3) + ((xxx >> 3)<<6) + - (xxx & 7))&0x7FFF)]; - if ((color==0) && (((prio >> 25)&3) < - ((lineOBJ[sx]>>25)&3))) { - lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) { - lineOBJ[sx] = READ16LE(&spritePalette[color]) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } - - if (a0 & 0x1000) { - m++; - if (m==mosaicX) - m=0; - } -#ifdef SPRITE_DEBUG - if(t == 0 || t == maskY || x == 0 || x == maskX) - lineOBJ[sx] = 0x001F; -#endif - } - sx = (sx+1)&511; - realX += dx; - realY += dy; - } - } else { - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - - int inc = 32; - if(DISPCNT & 0x40) - inc = sizeX >> 3; - int palette = (a2 >> 8) & 0xF0; - for(int x = 0; x < fieldX; x++) { - if (x >= startpix) - lineOBJpix-=2; - if (lineOBJpix<0) - continue; - int xxx = realX >> 8; - int yyy = realY >> 8; - if(xxx < 0 || xxx >= sizeX || - yyy < 0 || yyy >= sizeY || - sx >= 240); - else { - u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) - + ((yyy & 7)<<2) + ((xxx >> 3)<<5) + - ((xxx & 7)>>1))&0x7FFF)]; - if(xxx & 1) - color >>= 4; - else - color &= 0x0F; - - if ((color==0) && (((prio >> 25)&3) < - ((lineOBJ[sx]>>25)&3))) { - lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) { - lineOBJ[sx] = READ16LE(&spritePalette[palette+color]) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } - } - if((a0 & 0x1000) && m) { - m++; - if (m==mosaicX) - m=0; - } - -#ifdef SPRITE_DEBUG - if(t == 0 || t == maskY || x == 0 || x == maskX) - lineOBJ[sx] = 0x001F; -#endif - sx = (sx+1)&511; - realX += dx; - realY += dy; - - } - } - } - } - } else { - if(sy+sizeY > 256) - sy -= 256; - int t = VCOUNT - sy; - if((t >= 0) && (t < sizeY)) { - int startpix = 0; - if ((sx+sizeX)> 512) - { - startpix=512-sx; - } - if((sx < 240) || startpix) { - lineOBJpix+=2; - if(a0 & 0x2000) { - if(a1 & 0x2000) - t = sizeY - t - 1; - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - - int inc = 32; - if(DISPCNT & 0x40) { - inc = sizeX >> 2; - } else { - c &= 0x3FE; - } - int xxx = 0; - if(a1 & 0x1000) - xxx = sizeX-1; - - if(a0 & 0x1000) { - t -= (t % mosaicY); - } - - int address = 0x10000 + ((((c+ (t>>3) * inc) << 5) - + ((t & 7) << 3) + ((xxx>>3)<<6) + (xxx & 7)) & 0x7FFF); - - if(a1 & 0x1000) - xxx = 7; - u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); - - for(int xx = 0; xx < sizeX; xx++) { - if (xx >= startpix) - lineOBJpix--; - if (lineOBJpix<0) - continue; - if(sx < 240) { - u8 color = vram[address]; - if ((color==0) && (((prio >> 25)&3) < - ((lineOBJ[sx]>>25)&3))) { - lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) { - lineOBJ[sx] = READ16LE(&spritePalette[color]) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } - - if (a0 & 0x1000) { - m++; - if (m==mosaicX) - m=0; - } - -#ifdef SPRITE_DEBUG - if(t == 0 || t == maskY || xx == 0 || xx == maskX) - lineOBJ[sx] = 0x001F; -#endif - } - - sx = (sx+1) & 511; - if(a1 & 0x1000) { - xxx--; - address--; - if(xxx == -1) { - address -= 56; - xxx = 7; - } - if(address < 0x10000) - address += 0x8000; - } else { - xxx++; - address++; - if(xxx == 8) { - address += 56; - xxx = 0; - } - if(address > 0x17fff) - address -= 0x8000; - } - } - } else { - if(a1 & 0x2000) - t = sizeY - t - 1; - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - - int inc = 32; - if(DISPCNT & 0x40) { - inc = sizeX >> 3; - } - int xxx = 0; - if(a1 & 0x1000) - xxx = sizeX - 1; - - if(a0 & 0x1000) { - t -= (t % mosaicY); - } - - int address = 0x10000 + ((((c + (t>>3) * inc)<<5) - + ((t & 7)<<2) + ((xxx>>3)<<5) + ((xxx & 7) >> 1))&0x7FFF); - u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); - int palette = (a2 >> 8) & 0xF0; - if(a1 & 0x1000) { - xxx = 7; - for(int xx = sizeX - 1; xx >= 0; xx--) { - if (xx >= startpix) - lineOBJpix--; - if (lineOBJpix<0) - continue; - if(sx < 240) { - u8 color = vram[address]; - if(xx & 1) { - color = (color >> 4); - } else - color &= 0x0F; - - if ((color==0) && (((prio >> 25)&3) < - ((lineOBJ[sx]>>25)&3))) { - lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) { - lineOBJ[sx] = READ16LE(&spritePalette[palette + color]) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } - } - if (a0 & 0x1000) { - m++; - if (m==mosaicX) - m=0; - } -#ifdef SPRITE_DEBUG - if(t == 0 || t == maskY || xx == 0 || xx == maskX) - lineOBJ[sx] = 0x001F; -#endif - sx = (sx+1) & 511; - xxx--; - if(!(xx & 1)) - address--; - if(xxx == -1) { - xxx = 7; - address -= 28; - } - if(address < 0x10000) - address += 0x8000; - } - } else { - for(int xx = 0; xx < sizeX; xx++) { - if (xx >= startpix) - lineOBJpix--; - if (lineOBJpix<0) - continue; - if(sx < 240) { - u8 color = vram[address]; - if(xx & 1) { - color = (color >> 4); - } else - color &= 0x0F; - - if ((color==0) && (((prio >> 25)&3) < - ((lineOBJ[sx]>>25)&3))) { - lineOBJ[sx] = (lineOBJ[sx] & 0xF9FFFFFF) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - } else if((color) && (prio < (lineOBJ[sx]&0xFF000000))) { - lineOBJ[sx] = READ16LE(&spritePalette[palette + color]) | prio; - if((a0 & 0x1000) && m) - lineOBJ[sx]=(lineOBJ[sx-1] & 0xF9FFFFFF) | prio; - - } - } - if (a0 & 0x1000) { - m++; - if (m==mosaicX) - m=0; - } -#ifdef SPRITE_DEBUG - if(t == 0 || t == maskY || xx == 0 || xx == maskX) - lineOBJ[sx] = 0x001F; -#endif - sx = (sx+1) & 511; - xxx++; - if(xx & 1) - address++; - if(xxx == 8) { - address += 28; - xxx = 0; - } - if(address > 0x17fff) - address -= 0x8000; - } - } - } - } - } - } - } - } -} - -static inline void gfxDrawOBJWin(u32 *lineOBJWin) -{ - gfxClearArray(lineOBJWin); - if((layerEnable & 0x9000) == 0x9000) { - u16 *sprites = (u16 *)oam; - // u16 *spritePalette = &((u16 *)paletteRAM)[256]; - for(int x = 0; x < 128 ; x++) { - int lineOBJpix = lineOBJpixleft[x]; - u16 a0 = READ16LE(sprites++); - u16 a1 = READ16LE(sprites++); - u16 a2 = READ16LE(sprites++); - sprites++; - - if (lineOBJpix<=0) - continue; - - // ignores non OBJ-WIN and disabled OBJ-WIN - if(((a0 & 0x0c00) != 0x0800) || ((a0 & 0x0300) == 0x0200)) - continue; - - if ((a0 & 0x0c00) == 0x0c00) - a0 &=0xF3FF; - - if ((a0>>14) == 3) - { - a0 &= 0x3FFF; - a1 &= 0x3FFF; - } - - int sizeX = 8<<(a1>>14); - int sizeY = sizeX; - - if ((a0>>14) & 1) - { - if (sizeX<32) - sizeX<<=1; - if (sizeY>8) - sizeY>>=1; - } - else if ((a0>>14) & 2) - { - if (sizeX>8) - sizeX>>=1; - if (sizeY<32) - sizeY<<=1; - } - - int sy = (a0 & 255); - - if(a0 & 0x0100) { - int fieldX = sizeX; - int fieldY = sizeY; - if(a0 & 0x0200) { - fieldX <<= 1; - fieldY <<= 1; - } - if((sy+fieldY) > 256) - sy -= 256; - int t = VCOUNT - sy; - if((t >= 0) && (t < fieldY)) { - int sx = (a1 & 0x1FF); - int startpix = 0; - if ((sx+fieldX)> 512) - { - startpix=512-sx; - } - if((sx < 240) || startpix) { - lineOBJpix-=8; - // int t2 = t - (fieldY >> 1); - int rot = (a1 >> 9) & 0x1F; - u16 *OAM = (u16 *)oam; - int dx = READ16LE(&OAM[3 + (rot << 4)]); - if(dx & 0x8000) - dx |= 0xFFFF8000; - int dmx = READ16LE(&OAM[7 + (rot << 4)]); - if(dmx & 0x8000) - dmx |= 0xFFFF8000; - int dy = READ16LE(&OAM[11 + (rot << 4)]); - if(dy & 0x8000) - dy |= 0xFFFF8000; - int dmy = READ16LE(&OAM[15 + (rot << 4)]); - if(dmy & 0x8000) - dmy |= 0xFFFF8000; - - int realX = ((sizeX) << 7) - (fieldX >> 1)*dx - (fieldY>>1)*dmx - + t * dmx; - int realY = ((sizeY) << 7) - (fieldX >> 1)*dy - (fieldY>>1)*dmy - + t * dmy; - - // u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); - - if(a0 & 0x2000) { - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - int inc = 32; - if(DISPCNT & 0x40) - inc = sizeX >> 2; - else - c &= 0x3FE; - for(int x = 0; x < fieldX; x++) { - if (x >= startpix) - lineOBJpix-=2; - if (lineOBJpix<0) - continue; - int xxx = realX >> 8; - int yyy = realY >> 8; - - if(xxx < 0 || xxx >= sizeX || - yyy < 0 || yyy >= sizeY || - sx >= 240) { - } else { - u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) - + ((yyy & 7)<<3) + ((xxx >> 3)<<6) + - (xxx & 7))&0x7fff)]; - if(color) { - lineOBJWin[sx] = 1; - } - } - sx = (sx+1)&511; - realX += dx; - realY += dy; - } - } else { - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - - int inc = 32; - if(DISPCNT & 0x40) - inc = sizeX >> 3; - // int palette = (a2 >> 8) & 0xF0; - for(int x = 0; x < fieldX; x++) { - if (x >= startpix) - lineOBJpix-=2; - if (lineOBJpix<0) - continue; - int xxx = realX >> 8; - int yyy = realY >> 8; - - // if(x == 0 || x == (sizeX-1) || - // t == 0 || t == (sizeY-1)) { - // lineOBJ[sx] = 0x001F | prio; - // } else { - if(xxx < 0 || xxx >= sizeX || - yyy < 0 || yyy >= sizeY || - sx >= 240) { - } else { - u32 color = vram[0x10000 + ((((c + (yyy>>3) * inc)<<5) - + ((yyy & 7)<<2) + ((xxx >> 3)<<5) + - ((xxx & 7)>>1))&0x7fff)]; - if(xxx & 1) - color >>= 4; - else - color &= 0x0F; - - if(color) { - lineOBJWin[sx] = 1; - } - } - // } - sx = (sx+1)&511; - realX += dx; - realY += dy; - } - } - } - } - } else { - if((sy+sizeY) > 256) - sy -= 256; - int t = VCOUNT - sy; - if((t >= 0) && (t < sizeY)) { - int sx = (a1 & 0x1FF); - int startpix = 0; - if ((sx+sizeX)> 512) - { - startpix=512-sx; - } - if((sx < 240) || startpix) { - lineOBJpix+=2; - if(a0 & 0x2000) { - if(a1 & 0x2000) - t = sizeY - t - 1; - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - - int inc = 32; - if(DISPCNT & 0x40) { - inc = sizeX >> 2; - } else { - c &= 0x3FE; - } - int xxx = 0; - if(a1 & 0x1000) - xxx = sizeX-1; - int address = 0x10000 + ((((c+ (t>>3) * inc) << 5) - + ((t & 7) << 3) + ((xxx>>3)<<6) + (xxx & 7))&0x7fff); - if(a1 & 0x1000) - xxx = 7; - // u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); - for(int xx = 0; xx < sizeX; xx++) { - if (xx >= startpix) - lineOBJpix--; - if (lineOBJpix<0) - continue; - if(sx < 240) { - u8 color = vram[address]; - if(color) { - lineOBJWin[sx] = 1; - } - } - - sx = (sx+1) & 511; - if(a1 & 0x1000) { - xxx--; - address--; - if(xxx == -1) { - address -= 56; - xxx = 7; - } - if(address < 0x10000) - address += 0x8000; - } else { - xxx++; - address++; - if(xxx == 8) { - address += 56; - xxx = 0; - } - if(address > 0x17fff) - address -= 0x8000; - } - } - } else { - if(a1 & 0x2000) - t = sizeY - t - 1; - int c = (a2 & 0x3FF); - if((DISPCNT & 7) > 2 && (c < 512)) - continue; - - int inc = 32; - if(DISPCNT & 0x40) { - inc = sizeX >> 3; - } - int xxx = 0; - if(a1 & 0x1000) - xxx = sizeX - 1; - int address = 0x10000 + ((((c + (t>>3) * inc)<<5) - + ((t & 7)<<2) + ((xxx>>3)<<5) + ((xxx & 7) >> 1))&0x7fff); - // u32 prio = (((a2 >> 10) & 3) << 25) | ((a0 & 0x0c00)<<6); - // int palette = (a2 >> 8) & 0xF0; - if(a1 & 0x1000) { - xxx = 7; - for(int xx = sizeX - 1; xx >= 0; xx--) { - if (xx >= startpix) - lineOBJpix--; - if (lineOBJpix<0) - continue; - if(sx < 240) { - u8 color = vram[address]; - if(xx & 1) { - color = (color >> 4); - } else - color &= 0x0F; - - if(color) { - lineOBJWin[sx] = 1; - } - } - sx = (sx+1) & 511; - xxx--; - if(!(xx & 1)) - address--; - if(xxx == -1) { - xxx = 7; - address -= 28; - } - if(address < 0x10000) - address += 0x8000; - } - } else { - for(int xx = 0; xx < sizeX; xx++) { - if (xx >= startpix) - lineOBJpix--; - if (lineOBJpix<0) - continue; - if(sx < 240) { - u8 color = vram[address]; - if(xx & 1) { - color = (color >> 4); - } else - color &= 0x0F; - - if(color) { - lineOBJWin[sx] = 1; - } - } - sx = (sx+1) & 511; - xxx++; - if(xx & 1) - address++; - if(xxx == 8) { - address += 28; - xxx = 0; - } - if(address > 0x17fff) - address -= 0x8000; - } - } - } - } - } - } - } - } -} - -static inline u32 gfxIncreaseBrightness(u32 color, int coeff) -{ - color &= 0xffff; - color = ((color << 16) | color) & 0x3E07C1F; - - color = color + (((0x3E07C1F - color) * coeff) >> 4); - color &= 0x3E07C1F; - - return (color >> 16) | color; -} - -static inline void gfxIncreaseBrightness(u32 *line, int coeff) -{ - for(int x = 0; x < 240; x++) { - u32 color = *line; - int r = (color & 0x1F); - int g = ((color >> 5) & 0x1F); - int b = ((color >> 10) & 0x1F); - - r = r + (((31 - r) * coeff) >> 4); - g = g + (((31 - g) * coeff) >> 4); - b = b + (((31 - b) * coeff) >> 4); - if(r > 31) - r = 31; - if(g > 31) - g = 31; - if(b > 31) - b = 31; - *line++ = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; - } -} - -static inline u32 gfxDecreaseBrightness(u32 color, int coeff) -{ - color &= 0xffff; - color = ((color << 16) | color) & 0x3E07C1F; - - color = color - (((color * coeff) >> 4) & 0x3E07C1F); - - return (color >> 16) | color; -} - -static inline void gfxDecreaseBrightness(u32 *line, int coeff) -{ - for(int x = 0; x < 240; x++) { - u32 color = *line; - int r = (color & 0x1F); - int g = ((color >> 5) & 0x1F); - int b = ((color >> 10) & 0x1F); - - r = r - ((r * coeff) >> 4); - g = g - ((g * coeff) >> 4); - b = b - ((b * coeff) >> 4); - if(r < 0) - r = 0; - if(g < 0) - g = 0; - if(b < 0) - b = 0; - *line++ = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; - } -} - -static inline u32 gfxAlphaBlend(u32 color, u32 color2, int ca, int cb) -{ - if(color < 0x80000000) { - color&=0xffff; - color2&=0xffff; - - color = ((color << 16) | color) & 0x03E07C1F; - color2 = ((color2 << 16) | color2) & 0x03E07C1F; - color = ((color * ca) + (color2 * cb)) >> 4; - - if ((ca + cb)>16) - { - if (color & 0x20) - color |= 0x1f; - if (color & 0x8000) - color |= 0x7C00; - if (color & 0x4000000) - color |= 0x03E00000; - } - - color &= 0x03E07C1F; - color = (color >> 16) | color; - } - return color; -} - -static inline void gfxAlphaBlend(u32 *ta, u32 *tb, int ca, int cb) -{ - for(int x = 0; x < 240; x++) { - u32 color = *ta; - if(color < 0x80000000) { - int r = (color & 0x1F); - int g = ((color >> 5) & 0x1F); - int b = ((color >> 10) & 0x1F); - u32 color2 = (*tb++); - int r0 = (color2 & 0x1F); - int g0 = ((color2 >> 5) & 0x1F); - int b0 = ((color2 >> 10) & 0x1F); - - r = ((r * ca) + (r0 * cb)) >> 4; - g = ((g * ca) + (g0 * cb)) >> 4; - b = ((b * ca) + (b0 * cb)) >> 4; - - if(r > 31) - r = 31; - if(g > 31) - g = 31; - if(b > 31) - b = 31; - - *ta++ = (color & 0xFFFF0000) | (b << 10) | (g << 5) | r; - } else { - ta++; - tb++; - } - } -} - -#endif // VBA_GFX_H diff --git a/source/vba/agb/GBAcpu.h b/source/vba/agb/GBAcpu.h deleted file mode 100644 index c617b140..00000000 --- a/source/vba/agb/GBAcpu.h +++ /dev/null @@ -1,302 +0,0 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_GBAcpu_H -#define VBA_GBAcpu_H - -extern int armExecute(); -extern int thumbExecute(); - -#ifdef __GNUC__ -# define INSN_REGPARM __attribute__((regparm(1))) -# define LIKELY(x) __builtin_expect(!!(x),1) -# define UNLIKELY(x) __builtin_expect(!!(x),0) -#else -# define INSN_REGPARM /*nothing*/ -# define LIKELY(x) (x) -# define UNLIKELY(x) (x) -#endif - -#define UPDATE_REG(address, value)\ - {\ - WRITE16LE(((u16 *)&ioMem[address]),value);\ - }\ - -#define ARM_PREFETCH \ - {\ - cpuPrefetch[0] = CPUReadMemoryQuick(armNextPC);\ - cpuPrefetch[1] = CPUReadMemoryQuick(armNextPC+4);\ - } - -#define THUMB_PREFETCH \ - {\ - cpuPrefetch[0] = CPUReadHalfWordQuick(armNextPC);\ - cpuPrefetch[1] = CPUReadHalfWordQuick(armNextPC+2);\ - } - -#define ARM_PREFETCH_NEXT \ - cpuPrefetch[1] = CPUReadMemoryQuick(armNextPC+4); - -#define THUMB_PREFETCH_NEXT\ - cpuPrefetch[1] = CPUReadHalfWordQuick(armNextPC+2); - - -extern int SWITicks; -extern u32 mastercode; -extern bool busPrefetch; -extern bool busPrefetchEnable; -extern u32 busPrefetchCount; -extern int cpuNextEvent; -extern bool holdState; -extern u32 cpuPrefetch[2]; -extern int cpuTotalTicks; -extern u8 memoryWait[16]; -extern u8 memoryWait32[16]; -extern u8 memoryWaitSeq[16]; -extern u8 memoryWaitSeq32[16]; -extern u8 cpuBitsSet[256]; -extern u8 cpuLowestBitSet[256]; -extern void CPUSwitchMode(int mode, bool saveState, bool breakLoop); -extern void CPUSwitchMode(int mode, bool saveState); -extern void CPUUpdateCPSR(); -extern void CPUUpdateFlags(bool breakLoop); -extern void CPUUpdateFlags(); -extern void CPUUndefinedException(); -extern void CPUSoftwareInterrupt(); -extern void CPUSoftwareInterrupt(int comment); - - -// Waitstates when accessing data -inline int dataTicksAccess16(u32 address) // DATA 8/16bits NON SEQ -{ - int addr = (address>>24)&15; - int value = memoryWait[addr]; - - if ((addr>=0x08) || (addr < 0x02)) - { - busPrefetchCount=0; - busPrefetch=false; - } - else if (busPrefetch) - { - int waitState = value; - if (!waitState) - waitState = 1; - busPrefetchCount = ((busPrefetchCount+1)<>24)&15; - int value = memoryWait32[addr]; - - if ((addr>=0x08) || (addr < 0x02)) - { - busPrefetchCount=0; - busPrefetch=false; - } - else if (busPrefetch) - { - int waitState = value; - if (!waitState) - waitState = 1; - busPrefetchCount = ((busPrefetchCount+1)<>24)&15; - int value = memoryWaitSeq[addr]; - - if ((addr>=0x08) || (addr < 0x02)) - { - busPrefetchCount=0; - busPrefetch=false; - } - else if (busPrefetch) - { - int waitState = value; - if (!waitState) - waitState = 1; - busPrefetchCount = ((busPrefetchCount+1)<>24)&15; - int value = memoryWaitSeq32[addr]; - - if ((addr>=0x08) || (addr < 0x02)) - { - busPrefetchCount=0; - busPrefetch=false; - } - else if (busPrefetch) - { - int waitState = value; - if (!waitState) - waitState = 1; - busPrefetchCount = ((busPrefetchCount+1)<>24)&15; - - if ((addr>=0x08) && (addr<=0x0D)) - { - if (busPrefetchCount&0x1) - { - if (busPrefetchCount&0x2) - { - busPrefetchCount = ((busPrefetchCount&0xFF)>>2) | (busPrefetchCount&0xFFFFFF00); - return 0; - } - busPrefetchCount = ((busPrefetchCount&0xFF)>>1) | (busPrefetchCount&0xFFFFFF00); - return memoryWaitSeq[addr]-1; - } - else - { - busPrefetchCount=0; - return memoryWait[addr]; - } - } - else - { - busPrefetchCount = 0; - return memoryWait[addr]; - } -} - -inline int codeTicksAccess32(u32 address) // ARM NON SEQ -{ - int addr = (address>>24)&15; - - if ((addr>=0x08) && (addr<=0x0D)) - { - if (busPrefetchCount&0x1) - { - if (busPrefetchCount&0x2) - { - busPrefetchCount = ((busPrefetchCount&0xFF)>>2) | (busPrefetchCount&0xFFFFFF00); - return 0; - } - busPrefetchCount = ((busPrefetchCount&0xFF)>>1) | (busPrefetchCount&0xFFFFFF00); - return memoryWaitSeq[addr] - 1; - } - else - { - busPrefetchCount = 0; - return memoryWait32[addr]; - } - } - else - { - busPrefetchCount = 0; - return memoryWait32[addr]; - } -} - -inline int codeTicksAccessSeq16(u32 address) // THUMB SEQ -{ - int addr = (address>>24)&15; - - if ((addr>=0x08) && (addr<=0x0D)) - { - if (busPrefetchCount&0x1) - { - busPrefetchCount = ((busPrefetchCount&0xFF)>>1) | (busPrefetchCount&0xFFFFFF00); - return 0; - } - else - if (busPrefetchCount>0xFF) - { - busPrefetchCount=0; - return memoryWait[addr]; - } - else - return memoryWaitSeq[addr]; - } - else - { - busPrefetchCount = 0; - return memoryWaitSeq[addr]; - } -} - -inline int codeTicksAccessSeq32(u32 address) // ARM SEQ -{ - int addr = (address>>24)&15; - - if ((addr>=0x08) && (addr<=0x0D)) - { - if (busPrefetchCount&0x1) - { - if (busPrefetchCount&0x2) - { - busPrefetchCount = ((busPrefetchCount&0xFF)>>2) | (busPrefetchCount&0xFFFFFF00); - return 0; - } - busPrefetchCount = ((busPrefetchCount&0xFF)>>1) | (busPrefetchCount&0xFFFFFF00); - return memoryWaitSeq[addr]; - } - else - if (busPrefetchCount>0xFF) - { - busPrefetchCount=0; - return memoryWait32[addr]; - } - else - return memoryWaitSeq32[addr]; - } - else - { - return memoryWaitSeq32[addr]; - } -} - - -// Emulates the Cheat System (m) code -inline void cpuMasterCodeCheck() -{ - if((mastercode) && (mastercode == armNextPC)) - { - u32 joy = 0; - if(systemReadJoypads()) - joy = systemReadJoypad(-1); - u32 ext = (joy >> 10); - cpuTotalTicks += cheatsCheckKeys(P1^0x3FF, ext); - } -} - -#endif //VBA_GBAcpu_H diff --git a/source/vba/agb/GBAinline.h b/source/vba/agb/GBAinline.h deleted file mode 100644 index fa9322c5..00000000 --- a/source/vba/agb/GBAinline.h +++ /dev/null @@ -1,834 +0,0 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_GBAinline_H -#define VBA_GBAinline_H - -#include "../System.h" -#include "../Port.h" -#include "../RTC.h" -#include "../Sound.h" -#include "agbprint.h" -#include "vmmem.h" // Nintendo GC Virtual Memory - -extern const u32 objTilesAddress[3]; - -extern bool stopState; -extern bool holdState; -extern int holdType; -extern int cpuNextEvent; -extern bool cpuSramEnabled; -extern bool cpuFlashEnabled; -extern bool cpuEEPROMEnabled; -extern bool cpuEEPROMSensorEnabled; -extern bool cpuDmaHack; -extern u32 cpuDmaLast; -extern bool timer0On; -extern int timer0Ticks; -extern int timer0ClockReload; -extern bool timer1On; -extern int timer1Ticks; -extern int timer1ClockReload; -extern bool timer2On; -extern int timer2Ticks; -extern int timer2ClockReload; -extern bool timer3On; -extern int timer3Ticks; -extern int timer3ClockReload; -extern int cpuTotalTicks; - -/***************************************************************************** - * Nintendo GC Virtual Memory function override - * Tantric September 2008 - ****************************************************************************/ - -#define CPUReadByteQuickDef(addr) \ - map[(addr)>>24].address[(addr) & map[(addr)>>24].mask] - -#define CPUReadHalfWordQuickDef(addr) \ - READ16LE(((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -#define CPUReadMemoryQuickDef(addr) \ - READ32LE(((u32*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -u8 inline CPUReadByteQuick( u32 addr ) -{ - switch(addr >> 24 ) - { - case 8: - case 9: - case 10: - case 12: - return VMRead8( addr & 0x1FFFFFF ); - - default: - return CPUReadByteQuickDef(addr); - } - - return 0; -} - -u16 inline CPUReadHalfWordQuick( u32 addr ) -{ - switch(addr >> 24) - { - case 8: - case 9: - case 10: - case 12: - return VMRead16( addr & 0x1FFFFFF ); - default: - return CPUReadHalfWordQuickDef(addr); - } - - return 0; -} - -u32 inline CPUReadMemoryQuick( u32 addr ) -{ - switch(addr >> 24) - { - case 8: - case 9: - case 10: - case 12: - return VMRead32( addr & 0x1FFFFFF ); - default: - return CPUReadMemoryQuickDef(addr); - } - - return 0; -} - -/***************************************************************************** - * End of NGC VM override - ****************************************************************************/ - -static inline u32 CPUReadMemory(u32 address) -{ -#ifdef GBA_LOGGING - if(address & 3) { - if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) { - log("Unaligned word read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } - } -#endif - - u32 value; - switch(address >> 24) { - case 0: - if(reg[15].I >> 24) { - if(address < 0x4000) { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_READ) { - log("Illegal word read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } -#endif - - value = READ32LE(((u32 *)&biosProtected)); - } - else goto unreadable; - } else - value = READ32LE(((u32 *)&bios[address & 0x3FFC])); - break; - case 2: - value = READ32LE(((u32 *)&workRAM[address & 0x3FFFC])); - break; - case 3: - value = READ32LE(((u32 *)&internalRAM[address & 0x7ffC])); - break; - case 4: - if((address < 0x4000400) && ioReadable[address & 0x3fc]) { - if(ioReadable[(address & 0x3fc) + 2]) - value = READ32LE(((u32 *)&ioMem[address & 0x3fC])); - else - value = READ16LE(((u16 *)&ioMem[address & 0x3fc])); - } else goto unreadable; - break; - case 5: - value = READ32LE(((u32 *)&paletteRAM[address & 0x3fC])); - break; - case 6: - address = (address & 0x1fffc); - if (((DISPCNT & 7) >2) && ((address & 0x1C000) == 0x18000)) - { - value = 0; - break; - } - if ((address & 0x18000) == 0x18000) - address &= 0x17fff; - value = READ32LE(((u32 *)&vram[address])); - break; - case 7: - value = READ32LE(((u32 *)&oam[address & 0x3FC])); - break; - case 8: - case 9: - case 10: - case 11: - case 12: -#ifdef USE_VM // Nintendo GC Virtual Memory - value = VMRead32( address & 0x1FFFFFC ); -#else - value = READ32LE(((u32 *)&rom[address&0x1FFFFFC])); -#endif - break; - case 13: - if(cpuEEPROMEnabled) - // no need to swap this - return eepromRead(address); - goto unreadable; - case 14: - if(cpuFlashEnabled | cpuSramEnabled) - // no need to swap this - return flashRead(address); - // default - default: - unreadable: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_READ) { - log("Illegal word read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } -#endif - - if(cpuDmaHack) { - value = cpuDmaLast; - } else { - if(armState) { -#ifdef USE_VM // Nintendo GC Virtual Memory - value = CPUReadMemoryQuick(reg[15].I); -#else - value = CPUReadMemoryQuickDef(reg[15].I); -#endif - } else { -#ifdef USE_VM // Nintendo GC Virtual Memory - value = CPUReadHalfWordQuick(reg[15].I) | - CPUReadHalfWordQuick(reg[15].I) << 16; -#else - value = CPUReadHalfWordQuickDef(reg[15].I) | - CPUReadHalfWordQuickDef(reg[15].I) << 16; -#endif - } - } - } - - if(address & 3) { -#ifdef C_CORE - int shift = (address & 3) << 3; - value = (value >> shift) | (value << (32 - shift)); -#else -#ifdef __GNUC__ - asm("and $3, %%ecx;" - "shl $3 ,%%ecx;" - "ror %%cl, %0" - : "=r" (value) - : "r" (value), "c" (address)); -#else - __asm { - mov ecx, address; - and ecx, 3; - shl ecx, 3; - ror [dword ptr value], cl; - } -#endif -#endif - } - return value; -} - -extern u32 myROM[]; - -static inline u32 CPUReadHalfWord(u32 address) -{ -#ifdef GBA_LOGGING - if(address & 1) { - if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) { - log("Unaligned halfword read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } - } -#endif - - u32 value; - - switch(address >> 24) { - case 0: - if (reg[15].I >> 24) { - if(address < 0x4000) { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_READ) { - log("Illegal halfword read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } -#endif - value = READ16LE(((u16 *)&biosProtected[address&2])); - } else goto unreadable; - } else - value = READ16LE(((u16 *)&bios[address & 0x3FFE])); - break; - case 2: - value = READ16LE(((u16 *)&workRAM[address & 0x3FFFE])); - break; - case 3: - value = READ16LE(((u16 *)&internalRAM[address & 0x7ffe])); - break; - case 4: - if((address < 0x4000400) && ioReadable[address & 0x3fe]) - { - value = READ16LE(((u16 *)&ioMem[address & 0x3fe])); - if (((address & 0x3fe)>0xFF) && ((address & 0x3fe)<0x10E)) - { - if (((address & 0x3fe) == 0x100) && timer0On) - value = 0xFFFF - ((timer0Ticks-cpuTotalTicks) >> timer0ClockReload); - else - if (((address & 0x3fe) == 0x104) && timer1On && !(TM1CNT & 4)) - value = 0xFFFF - ((timer1Ticks-cpuTotalTicks) >> timer1ClockReload); - else - if (((address & 0x3fe) == 0x108) && timer2On && !(TM2CNT & 4)) - value = 0xFFFF - ((timer2Ticks-cpuTotalTicks) >> timer2ClockReload); - else - if (((address & 0x3fe) == 0x10C) && timer3On && !(TM3CNT & 4)) - value = 0xFFFF - ((timer3Ticks-cpuTotalTicks) >> timer3ClockReload); - } - } - else goto unreadable; - break; - case 5: - value = READ16LE(((u16 *)&paletteRAM[address & 0x3fe])); - break; - case 6: - address = (address & 0x1fffe); - if (((DISPCNT & 7) >2) && ((address & 0x1C000) == 0x18000)) - { - value = 0; - break; - } - if ((address & 0x18000) == 0x18000) - address &= 0x17fff; - value = READ16LE(((u16 *)&vram[address])); - break; - case 7: - value = READ16LE(((u16 *)&oam[address & 0x3fe])); - break; - case 8: - case 9: - case 10: - case 11: - case 12: - if(address == 0x80000c4 || address == 0x80000c6 || address == 0x80000c8) - value = rtcRead(address); - else -#ifdef USE_VM // Nintendo GC Virtual Memory - value = VMRead16( address & 0x1FFFFFE ); -#else - value = READ16LE(((u16 *)&rom[address & 0x1FFFFFE])); -#endif - break; - case 13: - if(cpuEEPROMEnabled) - // no need to swap this - return eepromRead(address); - goto unreadable; - case 14: - if(cpuFlashEnabled | cpuSramEnabled) - // no need to swap this - return flashRead(address); - // default - default: - unreadable: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_READ) { - log("Illegal halfword read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } -#endif - if(cpuDmaHack) { - value = cpuDmaLast & 0xFFFF; - } else { - if(armState) { -#ifdef USE_VM // Nintendo GC Virtual Memory - value = CPUReadHalfWordQuick(reg[15].I + (address & 2)); -#else - value = CPUReadHalfWordQuickDef(reg[15].I + (address & 2)); -#endif - } else { -#ifdef USE_VM // Nintendo GC Virtual Memory - value = CPUReadHalfWordQuick(reg[15].I); -#else - value = CPUReadHalfWordQuickDef(reg[15].I); -#endif - } - } - break; - } - - if(address & 1) { - value = (value >> 8) | (value << 24); - } - - return value; -} - -static inline u16 CPUReadHalfWordSigned(u32 address) -{ - u16 value = CPUReadHalfWord(address); - if((address & 1)) - value = (s8)value; - return value; -} - -static inline u8 CPUReadByte(u32 address) -{ - switch(address >> 24) { - case 0: - if (reg[15].I >> 24) { - if(address < 0x4000) { -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_READ) { - log("Illegal byte read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } -#endif - return biosProtected[address & 3]; - } else goto unreadable; - } - return bios[address & 0x3FFF]; - case 2: - return workRAM[address & 0x3FFFF]; - case 3: - return internalRAM[address & 0x7fff]; - case 4: - if((address < 0x4000400) && ioReadable[address & 0x3ff]) - return ioMem[address & 0x3ff]; - else goto unreadable; - case 5: - return paletteRAM[address & 0x3ff]; - case 6: - address = (address & 0x1ffff); - if (((DISPCNT & 7) >2) && ((address & 0x1C000) == 0x18000)) - return 0; - if ((address & 0x18000) == 0x18000) - address &= 0x17fff; - return vram[address]; - case 7: - return oam[address & 0x3ff]; - case 8: - case 9: - case 10: - case 11: - case 12: -#ifdef USE_VM // Nintendo GC Virtual Memory - return VMRead8( address & 0x1FFFFFF ); -#else - return rom[address & 0x1FFFFFF]; -#endif - case 13: - if(cpuEEPROMEnabled) - return eepromRead(address); - goto unreadable; - case 14: - if(cpuSramEnabled | cpuFlashEnabled) - return flashRead(address); - if(cpuEEPROMSensorEnabled) { - switch(address & 0x00008f00) { - case 0x8200: - return systemGetSensorX() & 255; - case 0x8300: - return (systemGetSensorX() >> 8)|0x80; - case 0x8400: - return systemGetSensorY() & 255; - case 0x8500: - return systemGetSensorY() >> 8; - } - } - // default - default: - unreadable: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_READ) { - log("Illegal byte read: %08x at %08x\n", address, armMode ? - armNextPC - 4 : armNextPC - 2); - } -#endif - if(cpuDmaHack) { - return cpuDmaLast & 0xFF; - } else { - if(armState) { -#ifdef USE_VM // Nintendo GC Virtual Memory - return CPUReadByteQuick(reg[15].I+(address & 3)); -#else - return CPUReadByteQuickDef(reg[15].I+(address & 3)); -#endif - } else { -#ifdef USE_VM // Nintendo GC Virtual Memory - return CPUReadByteQuick(reg[15].I+(address & 1)); -#else - return CPUReadByteQuickDef(reg[15].I+(address & 1)); -#endif - } - } - break; - } -} - -static inline void CPUWriteMemory(u32 address, u32 value) -{ - -#ifdef GBA_LOGGING - if(address & 3) { - if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) { - log("Unaligned word write: %08x to %08x from %08x\n", - value, - address, - armMode ? armNextPC - 4 : armNextPC - 2); - } - } -#endif - - switch(address >> 24) { - case 0x02: -#ifdef BKPT_SUPPORT - if(*((u32 *)&freezeWorkRAM[address & 0x3FFFC])) - cheatsWriteMemory(address & 0x203FFFC, - value); - else -#endif - WRITE32LE(((u32 *)&workRAM[address & 0x3FFFC]), value); - break; - case 0x03: -#ifdef BKPT_SUPPORT - if(*((u32 *)&freezeInternalRAM[address & 0x7ffc])) - cheatsWriteMemory(address & 0x3007FFC, - value); - else -#endif - WRITE32LE(((u32 *)&internalRAM[address & 0x7ffC]), value); - break; - case 0x04: - if(address < 0x4000400) { - CPUUpdateRegister((address & 0x3FC), value & 0xFFFF); - CPUUpdateRegister((address & 0x3FC) + 2, (value >> 16)); - } else goto unwritable; - break; - case 0x05: -#ifdef BKPT_SUPPORT - if(*((u32 *)&freezePRAM[address & 0x3fc])) - cheatsWriteMemory(address & 0x70003FC, - value); - else -#endif - WRITE32LE(((u32 *)&paletteRAM[address & 0x3FC]), value); - break; - case 0x06: - address = (address & 0x1fffc); - if (((DISPCNT & 7) >2) && ((address & 0x1C000) == 0x18000)) - return; - if ((address & 0x18000) == 0x18000) - address &= 0x17fff; - -#ifdef BKPT_SUPPORT - if(*((u32 *)&freezeVRAM[address])) - cheatsWriteMemory(address + 0x06000000, value); - else -#endif - - WRITE32LE(((u32 *)&vram[address]), value); - break; - case 0x07: -#ifdef BKPT_SUPPORT - if(*((u32 *)&freezeOAM[address & 0x3fc])) - cheatsWriteMemory(address & 0x70003FC, - value); - else -#endif - WRITE32LE(((u32 *)&oam[address & 0x3fc]), value); - break; - case 0x0D: - if(cpuEEPROMEnabled) { - eepromWrite(address, value); - break; - } - goto unwritable; - case 0x0E: - if(!eepromInUse | cpuSramEnabled | cpuFlashEnabled) { - (*cpuSaveGameFunc)(address, (u8)value); - break; - } - // default - default: - unwritable: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_WRITE) { - log("Illegal word write: %08x to %08x from %08x\n", - value, - address, - armMode ? armNextPC - 4 : armNextPC - 2); - } -#endif - break; - } -} - -static inline void CPUWriteHalfWord(u32 address, u16 value) -{ -#ifdef GBA_LOGGING - if(address & 1) { - if(systemVerbose & VERBOSE_UNALIGNED_MEMORY) { - log("Unaligned halfword write: %04x to %08x from %08x\n", - value, - address, - armMode ? armNextPC - 4 : armNextPC - 2); - } - } -#endif - - switch(address >> 24) { - case 2: -#ifdef BKPT_SUPPORT - if(*((u16 *)&freezeWorkRAM[address & 0x3FFFE])) - cheatsWriteHalfWord(address & 0x203FFFE, - value); - else -#endif - WRITE16LE(((u16 *)&workRAM[address & 0x3FFFE]),value); - break; - case 3: -#ifdef BKPT_SUPPORT - if(*((u16 *)&freezeInternalRAM[address & 0x7ffe])) - cheatsWriteHalfWord(address & 0x3007ffe, - value); - else -#endif - WRITE16LE(((u16 *)&internalRAM[address & 0x7ffe]), value); - break; - case 4: - if(address < 0x4000400) - CPUUpdateRegister(address & 0x3fe, value); - else goto unwritable; - break; - case 5: -#ifdef BKPT_SUPPORT - if(*((u16 *)&freezePRAM[address & 0x03fe])) - cheatsWriteHalfWord(address & 0x70003fe, - value); - else -#endif - WRITE16LE(((u16 *)&paletteRAM[address & 0x3fe]), value); - break; - case 6: - address = (address & 0x1fffe); - if (((DISPCNT & 7) >2) && ((address & 0x1C000) == 0x18000)) - return; - if ((address & 0x18000) == 0x18000) - address &= 0x17fff; -#ifdef BKPT_SUPPORT - if(*((u16 *)&freezeVRAM[address])) - cheatsWriteHalfWord(address + 0x06000000, - value); - else -#endif - WRITE16LE(((u16 *)&vram[address]), value); - break; - case 7: -#ifdef BKPT_SUPPORT - if(*((u16 *)&freezeOAM[address & 0x03fe])) - cheatsWriteHalfWord(address & 0x70003fe, - value); - else -#endif - WRITE16LE(((u16 *)&oam[address & 0x3fe]), value); - break; - case 8: - case 9: - if(address == 0x80000c4 || address == 0x80000c6 || address == 0x80000c8) { - if(!rtcWrite(address, value)) - goto unwritable; - } else if(!agbPrintWrite(address, value)) goto unwritable; - break; - case 13: - if(cpuEEPROMEnabled) { - eepromWrite(address, (u8)value); - break; - } - goto unwritable; - case 14: - if(!eepromInUse | cpuSramEnabled | cpuFlashEnabled) { - (*cpuSaveGameFunc)(address, (u8)value); - break; - } - goto unwritable; - default: - unwritable: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_WRITE) { - log("Illegal halfword write: %04x to %08x from %08x\n", - value, - address, - armMode ? armNextPC - 4 : armNextPC - 2); - } -#endif - break; - } -} - -static inline void CPUWriteByte(u32 address, u8 b) -{ - switch(address >> 24) { - case 2: -#ifdef BKPT_SUPPORT - if(freezeWorkRAM[address & 0x3FFFF]) - cheatsWriteByte(address & 0x203FFFF, b); - else -#endif - workRAM[address & 0x3FFFF] = b; - break; - case 3: -#ifdef BKPT_SUPPORT - if(freezeInternalRAM[address & 0x7fff]) - cheatsWriteByte(address & 0x3007fff, b); - else -#endif - internalRAM[address & 0x7fff] = b; - break; - case 4: - if(address < 0x4000400) { - switch(address & 0x3FF) { - case 0x301: - if(b == 0x80) - stopState = true; - holdState = 1; - holdType = -1; - cpuNextEvent = cpuTotalTicks; - break; - case 0x60: - case 0x61: - case 0x62: - case 0x63: - case 0x64: - case 0x65: - case 0x68: - case 0x69: - case 0x6c: - case 0x6d: - case 0x70: - case 0x71: - case 0x72: - case 0x73: - case 0x74: - case 0x75: - case 0x78: - case 0x79: - case 0x7c: - case 0x7d: - case 0x80: - case 0x81: - case 0x84: - case 0x85: - case 0x90: - case 0x91: - case 0x92: - case 0x93: - case 0x94: - case 0x95: - case 0x96: - case 0x97: - case 0x98: - case 0x99: - case 0x9a: - case 0x9b: - case 0x9c: - case 0x9d: - case 0x9e: - case 0x9f: - soundEvent(address&0xFF, b); - break; - default: - if(address & 1) - CPUUpdateRegister(address & 0x3fe, - ((READ16LE(((u16 *)&ioMem[address & 0x3fe]))) - & 0x00FF) | - b<<8); - else - CPUUpdateRegister(address & 0x3fe, - ((READ16LE(((u16 *)&ioMem[address & 0x3fe])) & 0xFF00) | b)); - } - break; - } else goto unwritable; - break; - case 5: - // no need to switch - *((u16 *)&paletteRAM[address & 0x3FE]) = (b << 8) | b; - break; - case 6: - address = (address & 0x1fffe); - if (((DISPCNT & 7) >2) && ((address & 0x1C000) == 0x18000)) - return; - if ((address & 0x18000) == 0x18000) - address &= 0x17fff; - - // no need to switch - // byte writes to OBJ VRAM are ignored - if ((address) < objTilesAddress[((DISPCNT&7)+1)>>2]) - { -#ifdef BKPT_SUPPORT - if(freezeVRAM[address]) - cheatsWriteByte(address + 0x06000000, b); - else -#endif - *((u16 *)&vram[address]) = (b << 8) | b; - } - break; - case 7: - // no need to switch - // byte writes to OAM are ignored - // *((u16 *)&oam[address & 0x3FE]) = (b << 8) | b; - break; - case 13: - if(cpuEEPROMEnabled) { - eepromWrite(address, b); - break; - } - goto unwritable; - case 14: - if (!(saveType == 5) && (!eepromInUse | cpuSramEnabled | cpuFlashEnabled)) { - - //if(!cpuEEPROMEnabled && (cpuSramEnabled | cpuFlashEnabled)) { - - (*cpuSaveGameFunc)(address, b); - break; - } - // default - default: - unwritable: -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_ILLEGAL_WRITE) { - log("Illegal byte write: %02x to %08x from %08x\n", - b, - address, - armMode ? armNextPC - 4 : armNextPC -2 ); - } -#endif - break; - } -} - -#endif //VBA_GBAinline_H diff --git a/source/vba/agb/agbprint.cpp b/source/vba/agbprint.cpp similarity index 61% rename from source/vba/agb/agbprint.cpp rename to source/vba/agbprint.cpp index 71043185..f1db198c 100644 --- a/source/vba/agb/agbprint.cpp +++ b/source/vba/agbprint.cpp @@ -1,98 +1,106 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include - -#include "GBA.h" -#include "Globals.h" -#include "Port.h" -#include "System.h" - -#define debuggerWriteHalfWord(addr, value) \ - WRITE16LE((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask], (value)) - -#define debuggerReadHalfWord(addr) \ - READ16LE(((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -static bool agbPrintEnabled = false; -static bool agbPrintProtect = false; - -bool agbPrintWrite(u32 address, u16 value) -{ - if(agbPrintEnabled) { - if(address == 0x9fe2ffe) { // protect - agbPrintProtect = (value != 0); - debuggerWriteHalfWord(address, value); - return true; - } else { - if(agbPrintProtect && - ((address >= 0x9fe20f8 && address <= 0x9fe20ff) // control structure - || (address >= 0x8fd0000 && address <= 0x8fdffff) - || (address >= 0x9fd0000 && address <= 0x9fdffff))) { - debuggerWriteHalfWord(address, value); - return true; - } - } - } - return false; -} - -void agbPrintReset() -{ - agbPrintProtect = false; -} - -void agbPrintEnable(bool enable) -{ - agbPrintEnabled = enable; -} - -bool agbPrintIsEnabled() -{ - return agbPrintEnabled; -} - -void agbPrintFlush() -{ - u16 get = debuggerReadHalfWord(0x9fe20fc); - u16 put = debuggerReadHalfWord(0x9fe20fe); - - u32 address = (debuggerReadHalfWord(0x9fe20fa) << 16); - if(address != 0xfd0000 && address != 0x1fd0000) { - dbgOutput("Did you forget to call AGBPrintInit?\n", 0); - // get rid of the text otherwise we will continue to be called - debuggerWriteHalfWord(0x9fe20fc, put); - return; - } - - u8 *data = &rom[address]; - - while(get != put) { - char c = data[get++]; - char s[2]; - s[0] = c; - s[1] = 0; - - if(systemVerbose & VERBOSE_AGBPRINT) - dbgOutput(s, 0); - if(c == '\n') - break; - } - debuggerWriteHalfWord(0x9fe20fc, get); -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include +#include + +#include "GBA.h" +#include "Globals.h" +#include "Port.h" + +#define debuggerWriteHalfWord(addr, value) \ + WRITE16LE((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask], (value)) + +#define debuggerReadHalfWord(addr) \ + READ16LE(((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) + +static bool agbPrintEnabled = false; +static bool agbPrintProtect = false; + +bool agbPrintWrite(u32 address, u16 value) +{ + if(agbPrintEnabled) + { + if(address == 0x9fe2ffe) + { // protect + agbPrintProtect = (value != 0); + debuggerWriteHalfWord(address, value); + return true; + } + else + { + if(agbPrintProtect && + ((address >= 0x9fe20f8 && address <= 0x9fe20ff) // control structure + || (address >= 0x8fd0000 && address <= 0x8fdffff) + || (address >= 0x9fd0000 && address <= 0x9fdffff))) + { + debuggerWriteHalfWord(address, value); + return true; + } + } + } + return false; +} + +void agbPrintReset() +{ + agbPrintProtect = false; +} + +void agbPrintEnable(bool enable) +{ + agbPrintEnabled = enable; +} + +bool agbPrintIsEnabled() +{ + return agbPrintEnabled; +} + +extern void (*dbgOutput)(char *, u32); + +void agbPrintFlush() +{ + u16 get = debuggerReadHalfWord(0x9fe20fc); + u16 put = debuggerReadHalfWord(0x9fe20fe); + + u32 address = (debuggerReadHalfWord(0x9fe20fa) << 16); + if(address != 0xfd0000 && address != 0x1fd0000) + { + dbgOutput("Did you forget to call AGBPrintInit?\n", 0); + // get rid of the text otherwise we will continue to be called + debuggerWriteHalfWord(0x9fe20fc, put); + return; + } + + u8 *data = &rom[address]; + + while(get != put) + { + char c = data[get++]; + char s[2]; + s[0] = c; + s[1] = 0; + + if(systemVerbose & VERBOSE_AGBPRINT) + dbgOutput(s, 0); + if(c == '\n') + break; + } + debuggerWriteHalfWord(0x9fe20fc, get); +} diff --git a/source/vba/agb/agbprint.h b/source/vba/agbprint.h similarity index 97% rename from source/vba/agb/agbprint.h rename to source/vba/agbprint.h index 7f63fa6b..d7742dee 100644 --- a/source/vba/agb/agbprint.h +++ b/source/vba/agbprint.h @@ -1,27 +1,27 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_AGBPRINT_H -#define VBA_AGBPRINT_H -extern void agbPrintEnable(bool); -extern bool agbPrintIsEnabled(); -extern void agbPrintReset(); -extern bool agbPrintWrite(u32, u16); -extern void agbPrintFlush(); -#endif +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_AGBPRINT_H +#define VBA_AGBPRINT_H +extern void agbPrintEnable(bool); +extern bool agbPrintIsEnabled(); +extern void agbPrintReset(); +extern bool agbPrintWrite(u32, u16); +extern void agbPrintFlush(); +#endif diff --git a/source/vba/arm-new.h b/source/vba/arm-new.h new file mode 100644 index 00000000..c8e769b7 --- /dev/null +++ b/source/vba/arm-new.h @@ -0,0 +1,7472 @@ +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifdef BKPT_SUPPORT +#define CONSOLE_OUTPUT(a,b) \ + extern void (*dbgOutput)(char *, u32);\ + if((opcode == 0xe0000000) && (reg[0].I == 0xC0DED00D)) {\ + dbgOutput((a), (b));\ + } +#else +#define CONSOLE_OUTPUT(a,b) +#endif + +#define OP_AND \ + reg[dest].I = reg[(opcode>>16)&15].I & value;\ + CONSOLE_OUTPUT(NULL,reg[2].I); + +#define OP_ANDS \ + reg[dest].I = reg[(opcode>>16)&15].I & value;\ + \ + N_FLAG = (reg[dest].I & 0x80000000) ? true : false;\ + Z_FLAG = (reg[dest].I) ? false : true;\ + C_FLAG = C_OUT; + +#define OP_EOR \ + reg[dest].I = reg[(opcode>>16)&15].I ^ value; + +#define OP_EORS \ + reg[dest].I = reg[(opcode>>16)&15].I ^ value;\ + \ + N_FLAG = (reg[dest].I & 0x80000000) ? true : false;\ + Z_FLAG = (reg[dest].I) ? false : true;\ + C_FLAG = C_OUT; +#ifdef C_CORE +#define NEG(i) ((i) >> 31) +#define POS(i) ((~(i)) >> 31) +#define ADDCARRY(a, b, c) \ + C_FLAG = ((NEG(a) & NEG(b)) |\ + (NEG(a) & POS(c)) |\ + (NEG(b) & POS(c))) ? true : false; +#define ADDOVERFLOW(a, b, c) \ + V_FLAG = ((NEG(a) & NEG(b) & POS(c)) |\ + (POS(a) & POS(b) & NEG(c))) ? true : false; +#define SUBCARRY(a, b, c) \ + C_FLAG = ((NEG(a) & POS(b)) |\ + (NEG(a) & POS(c)) |\ + (POS(b) & POS(c))) ? true : false; +#define SUBOVERFLOW(a, b, c)\ + V_FLAG = ((NEG(a) & POS(b) & POS(c)) |\ + (POS(a) & NEG(b) & NEG(c))) ? true : false; +#define OP_SUB \ + {\ + reg[dest].I = reg[base].I - value;\ + } +#define OP_SUBS \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = lhs - rhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define OP_RSB \ + {\ + reg[dest].I = value - reg[base].I;\ + } +#define OP_RSBS \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = rhs - lhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(rhs, lhs, res);\ + SUBOVERFLOW(rhs, lhs, res);\ + } +#define OP_ADD \ + {\ + reg[dest].I = reg[base].I + value;\ + } +#define OP_ADDS \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = lhs + rhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } +#define OP_ADC \ + {\ + reg[dest].I = reg[base].I + value + (u32)C_FLAG;\ + } +#define OP_ADCS \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = lhs + rhs + (u32)C_FLAG;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } +#define OP_SBC \ + {\ + reg[dest].I = reg[base].I - value - !((u32)C_FLAG);\ + } +#define OP_SBCS \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = lhs - rhs - !((u32)C_FLAG);\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define OP_RSC \ + {\ + reg[dest].I = value - reg[base].I - !((u32)C_FLAG);\ + } +#define OP_RSCS \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = rhs - lhs - !((u32)C_FLAG);\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(rhs, lhs, res);\ + SUBOVERFLOW(rhs, lhs, res);\ + } +#define OP_CMP \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = lhs - rhs;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define OP_CMN \ + {\ + u32 lhs = reg[base].I;\ + u32 rhs = value;\ + u32 res = lhs + rhs;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } + +#define LOGICAL_LSL_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = (v >> (32 - shift)) & 1 ? true : false;\ + value = v << shift;\ + } +#define LOGICAL_LSR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = (v >> (shift - 1)) & 1 ? true : false;\ + value = v >> shift;\ + } +#define LOGICAL_ASR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = ((s32)v >> (int)(shift - 1)) & 1 ? true : false;\ + value = (s32)v >> (int)shift;\ + } +#define LOGICAL_ROR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = (v >> (shift - 1)) & 1 ? true : false;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define LOGICAL_RRX_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + shift = (int)C_FLAG;\ + C_OUT = (v & 1) ? true : false;\ + value = ((v >> 1) |\ + (shift << 31));\ + } +#define LOGICAL_ROR_IMM \ + {\ + u32 v = opcode & 0xff;\ + C_OUT = (v >> (shift - 1)) & 1 ? true : false;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ARITHMETIC_LSL_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = v << shift;\ + } +#define ARITHMETIC_LSR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = v >> shift;\ + } +#define ARITHMETIC_ASR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = (s32)v >> (int)shift;\ + } +#define ARITHMETIC_ROR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ARITHMETIC_RRX_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + shift = (int)C_FLAG;\ + value = ((v >> 1) |\ + (shift << 31));\ + } +#define ARITHMETIC_ROR_IMM \ + {\ + u32 v = opcode & 0xff;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ROR_IMM_MSR \ + {\ + u32 v = opcode & 0xff;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ROR_VALUE \ + {\ + value = ((value << (32 - shift)) |\ + (value >> shift));\ + } +#define RCR_VALUE \ + {\ + shift = (int)C_FLAG;\ + value = ((value >> 1) |\ + (shift << 31));\ + } +#else +#ifdef __GNUC__ +#ifdef __POWERPC__ +#define OP_SUB \ + {\ + reg[dest].I = reg[base].I - value;\ + } +#define OP_SUBS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#define OP_RSB \ + {\ + reg[dest].I = value - reg[base].I;\ + } +#define OP_RSBS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subfco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#define OP_ADD \ + {\ + reg[dest].I = reg[base].I + value;\ + } + +#define OP_ADDS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("addco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#define OP_ADC \ + {\ + reg[dest].I = reg[base].I + value + (u32)C_FLAG;\ + } +#define OP_ADCS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("mtspr xer, %4\n" \ + "addeo. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value), \ + "r" (C_FLAG << 29) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#define OP_SBC \ + {\ + reg[dest].I = reg[base].I - value - (C_FLAG^1);\ + } +#define OP_SBCS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("mtspr xer, %4\n" \ + "subfeo. %0, %3, %2\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value), \ + "r" (C_FLAG << 29) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#define OP_RSC \ + {\ + reg[dest].I = value - reg[base].I - (C_FLAG^1);\ + } +#define OP_RSCS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("mtspr xer, %4\n" \ + "subfeo. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value), \ + "r" (C_FLAG << 29) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#define OP_CMP \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value) \ + ); \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#define OP_CMN \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("addco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[base].I), \ + "r" (value) \ + ); \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + +#define LOGICAL_LSL_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = (v >> (32 - shift)) & 1 ? true : false;\ + value = v << shift;\ + } +#define LOGICAL_LSR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = (v >> (shift - 1)) & 1 ? true : false;\ + value = v >> shift;\ + } +#define LOGICAL_ASR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = ((s32)v >> (int)(shift - 1)) & 1 ? true : false;\ + value = (s32)v >> (int)shift;\ + } +#define LOGICAL_ROR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + C_OUT = (v >> (shift - 1)) & 1 ? true : false;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define LOGICAL_RRX_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + shift = (int)C_FLAG;\ + C_OUT = (v & 1) ? true : false;\ + value = ((v >> 1) |\ + (shift << 31));\ + } +#define LOGICAL_ROR_IMM \ + {\ + u32 v = opcode & 0xff;\ + C_OUT = (v >> (shift - 1)) & 1 ? true : false;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ARITHMETIC_LSL_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = v << shift;\ + } +#define ARITHMETIC_LSR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = v >> shift;\ + } +#define ARITHMETIC_ASR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = (s32)v >> (int)shift;\ + } +#define ARITHMETIC_ROR_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ARITHMETIC_RRX_REG \ + {\ + u32 v = reg[opcode & 0x0f].I;\ + shift = (int)C_FLAG;\ + value = ((v >> 1) |\ + (shift << 31));\ + } +#define ARITHMETIC_ROR_IMM \ + {\ + u32 v = opcode & 0xff;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ROR_IMM_MSR \ + {\ + u32 v = opcode & 0xff;\ + value = ((v << (32 - shift)) |\ + (v >> shift));\ + } +#define ROR_VALUE \ + {\ + value = ((value << (32 - shift)) |\ + (value >> shift));\ + } +#define RCR_VALUE \ + {\ + shift = (int)C_FLAG;\ + value = ((value >> 1) |\ + (shift << 31));\ + } +#else +#define OP_SUB \ + asm ("sub %1, %%ebx;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); + +#define OP_SUBS \ + asm ("sub %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); + +#define OP_RSB \ + asm ("sub %1, %%ebx;"\ + : "=b" (reg[dest].I)\ + : "r" (reg[base].I), "b" (value)); + +#define OP_RSBS \ + asm ("sub %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (reg[base].I), "b" (value)); + +#define OP_ADD \ + asm ("add %1, %%ebx;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); + +#define OP_ADDS \ + asm ("add %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); + +#define OP_ADC \ + asm ("bt $0, C_FLAG;"\ + "adc %1, %%ebx;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); + +#define OP_ADCS \ + asm ("bt $0, C_FLAG;"\ + "adc %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); + +#define OP_SBC \ + asm ("bt $0, C_FLAG;"\ + "cmc;"\ + "sbb %1, %%ebx;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); + +#define OP_SBCS \ + asm ("bt $0, C_FLAG;"\ + "cmc;"\ + "sbb %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[base].I)); +#define OP_RSC \ + asm ("bt $0, C_FLAG;"\ + "cmc;"\ + "sbb %1, %%ebx;"\ + : "=b" (reg[dest].I)\ + : "r" (reg[base].I), "b" (value)); + +#define OP_RSCS \ + asm ("bt $0, C_FLAG;"\ + "cmc;"\ + "sbb %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (reg[base].I), "b" (value)); +#define OP_CMP \ + asm ("sub %0, %1;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + :\ + : "r" (value), "r" (reg[base].I)); + +#define OP_CMN \ + asm ("add %0, %1;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : \ + : "r" (value), "r" (reg[base].I)); +#define LOGICAL_LSL_REG \ + asm("shl %%cl, %%eax;"\ + "setcb %%cl;"\ + : "=a" (value), "=c" (C_OUT)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define LOGICAL_LSR_REG \ + asm("shr %%cl, %%eax;"\ + "setcb %%cl;"\ + : "=a" (value), "=c" (C_OUT)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define LOGICAL_ASR_REG \ + asm("sar %%cl, %%eax;"\ + "setcb %%cl;"\ + : "=a" (value), "=c" (C_OUT)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define LOGICAL_ROR_REG \ + asm("ror %%cl, %%eax;"\ + "setcb %%cl;"\ + : "=a" (value), "=c" (C_OUT)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define LOGICAL_RRX_REG \ + asm("bt $0, C_FLAG;"\ + "rcr $1, %%eax;"\ + "setcb %%cl;"\ + : "=a" (value), "=c" (C_OUT)\ + : "a" (reg[opcode & 0x0f].I)); + +#define LOGICAL_ROR_IMM \ + asm("ror %%cl, %%eax;"\ + "setcb %%cl;"\ + : "=a" (value), "=c" (C_OUT)\ + : "a" (opcode & 0xff), "c" (shift)); +#define ARITHMETIC_LSL_REG \ + asm("\ + shl %%cl, %%eax;"\ + : "=a" (value)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define ARITHMETIC_LSR_REG \ + asm("\ + shr %%cl, %%eax;"\ + : "=a" (value)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define ARITHMETIC_ASR_REG \ + asm("\ + sar %%cl, %%eax;"\ + : "=a" (value)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define ARITHMETIC_ROR_REG \ + asm("\ + ror %%cl, %%eax;"\ + : "=a" (value)\ + : "a" (reg[opcode & 0x0f].I), "c" (shift)); + +#define ARITHMETIC_RRX_REG \ + asm("\ + bt $0, C_FLAG;\ + rcr $1, %%eax;"\ + : "=a" (value)\ + : "a" (reg[opcode & 0x0f].I)); + +#define ARITHMETIC_ROR_IMM \ + asm("\ + ror %%cl, %%eax;"\ + : "=a" (value)\ + : "a" (opcode & 0xff), "c" (shift)); +#define ROR_IMM_MSR \ + asm ("ror %%cl, %%eax;"\ + : "=a" (value)\ + : "a" (opcode & 0xFF), "c" (shift)); +#define ROR_VALUE \ + asm("ror %%cl, %0"\ + : "=r" (value)\ + : "r" (value), "c" (shift)); +#define RCR_VALUE \ + asm("bt $0, C_FLAG;"\ + "rcr $1, %0"\ + : "=r" (value)\ + : "r" (value)); +#endif +#else +#define OP_SUB \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm sub ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + } + +#define OP_SUBS \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm sub ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } + +#define OP_RSB \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm mov eax, value\ + __asm sub eax, ebx\ + __asm mov ebx, dest\ + __asm mov dword ptr [OFFSET reg+4*ebx], eax\ + } + +#define OP_RSBS \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm mov eax, value\ + __asm sub eax, ebx\ + __asm mov ebx, dest\ + __asm mov dword ptr [OFFSET reg+4*ebx], eax\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } + +#define OP_ADD \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm add ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + } + +#define OP_ADDS \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm add ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } + +#define OP_ADC \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm bt word ptr C_FLAG, 0\ + __asm adc ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + } + +#define OP_ADCS \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm bt word ptr C_FLAG, 0\ + __asm adc ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } + +#define OP_SBC \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg + 4*ebx]\ + __asm mov eax, value\ + __asm bt word ptr C_FLAG, 0\ + __asm cmc\ + __asm sbb ebx, eax\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg + 4*eax], ebx\ + } + +#define OP_SBCS \ + {\ + __asm mov ebx, base\ + __asm mov ebx, dword ptr [OFFSET reg + 4*ebx]\ + __asm mov eax, value\ + __asm bt word ptr C_FLAG, 0\ + __asm cmc\ + __asm sbb ebx, eax\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg + 4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define OP_RSC \ + {\ + __asm mov ebx, value\ + __asm mov eax, base\ + __asm mov eax, dword ptr[OFFSET reg + 4*eax]\ + __asm bt word ptr C_FLAG, 0\ + __asm cmc\ + __asm sbb ebx, eax\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg + 4*eax], ebx\ + } + +#define OP_RSCS \ + {\ + __asm mov ebx, value\ + __asm mov eax, base\ + __asm mov eax, dword ptr[OFFSET reg + 4*eax]\ + __asm bt word ptr C_FLAG, 0\ + __asm cmc\ + __asm sbb ebx, eax\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg + 4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define OP_CMP \ + {\ + __asm mov eax, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm sub ebx, value\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } + +#define OP_CMN \ + {\ + __asm mov eax, base\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm add ebx, value\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define LOGICAL_LSL_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0f\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm shl eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_OUT + +#define LOGICAL_LSR_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0f\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm shr eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_OUT + +#define LOGICAL_ASR_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0f\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm sar eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_OUT + +#define LOGICAL_ROR_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0F\ + __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ + __asm mov cl, byte ptr shift\ + __asm ror eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_OUT + +#define LOGICAL_RRX_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0F\ + __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ + __asm bt word ptr C_OUT, 0\ + __asm rcr eax, 1\ + __asm mov value, eax\ + __asm setc byte ptr C_OUT + +#define LOGICAL_ROR_IMM \ + __asm mov eax, opcode\ + __asm and eax, 0xff\ + __asm mov cl, byte ptr shift\ + __asm ror eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_OUT +#define ARITHMETIC_LSL_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0f\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm shl eax, cl\ + __asm mov value, eax + +#define ARITHMETIC_LSR_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0f\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm shr eax, cl\ + __asm mov value, eax + +#define ARITHMETIC_ASR_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0f\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm sar eax, cl\ + __asm mov value, eax + +#define ARITHMETIC_ROR_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0F\ + __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ + __asm mov cl, byte ptr shift\ + __asm ror eax, cl\ + __asm mov value, eax + +#define ARITHMETIC_RRX_REG \ + __asm mov eax, opcode\ + __asm and eax, 0x0F\ + __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ + __asm bt word ptr C_FLAG, 0\ + __asm rcr eax, 1\ + __asm mov value, eax + +#define ARITHMETIC_ROR_IMM \ + __asm mov eax, opcode\ + __asm and eax, 0xff\ + __asm mov cl, byte ptr shift\ + __asm ror eax, cl\ + __asm mov value, eax +#define ROR_IMM_MSR \ + {\ + __asm mov eax, opcode\ + __asm and eax, 0xff\ + __asm mov cl, byte ptr shift\ + __asm ror eax, CL\ + __asm mov value, eax\ + } +#define ROR_VALUE \ + {\ + __asm mov cl, byte ptr shift\ + __asm ror dword ptr value, cl\ + } +#define RCR_VALUE \ + {\ + __asm mov cl, byte ptr shift\ + __asm bt word ptr C_FLAG, 0\ + __asm rcr dword ptr value, 1\ + } +#endif +#endif + +#define OP_TST \ + u32 res = reg[base].I & value;\ + N_FLAG = (res & 0x80000000) ? true : false;\ + Z_FLAG = (res) ? false : true;\ + C_FLAG = C_OUT; + +#define OP_TEQ \ + u32 res = reg[base].I ^ value;\ + N_FLAG = (res & 0x80000000) ? true : false;\ + Z_FLAG = (res) ? false : true;\ + C_FLAG = C_OUT; + +#define OP_ORR \ + reg[dest].I = reg[base].I | value; + +#define OP_ORRS \ + reg[dest].I = reg[base].I | value;\ + N_FLAG = (reg[dest].I & 0x80000000) ? true : false;\ + Z_FLAG = (reg[dest].I) ? false : true;\ + C_FLAG = C_OUT; + +#define OP_MOV \ + reg[dest].I = value; + +#define OP_MOVS \ + reg[dest].I = value;\ + N_FLAG = (reg[dest].I & 0x80000000) ? true : false;\ + Z_FLAG = (reg[dest].I) ? false : true;\ + C_FLAG = C_OUT; + +#define OP_BIC \ + reg[dest].I = reg[base].I & (~value); + +#define OP_BICS \ + reg[dest].I = reg[base].I & (~value);\ + N_FLAG = (reg[dest].I & 0x80000000) ? true : false;\ + Z_FLAG = (reg[dest].I) ? false : true;\ + C_FLAG = C_OUT; + +#define OP_MVN \ + reg[dest].I = ~value; + +#define OP_MVNS \ + reg[dest].I = ~value; \ + N_FLAG = (reg[dest].I & 0x80000000) ? true : false;\ + Z_FLAG = (reg[dest].I) ? false : true;\ + C_FLAG = C_OUT; + +#define CASE_16(BASE) \ + case BASE:\ + case BASE+1:\ + case BASE+2:\ + case BASE+3:\ + case BASE+4:\ + case BASE+5:\ + case BASE+6:\ + case BASE+7:\ + case BASE+8:\ + case BASE+9:\ + case BASE+10:\ + case BASE+11:\ + case BASE+12:\ + case BASE+13:\ + case BASE+14:\ + case BASE+15: + +#define CASE_256(BASE) \ + CASE_16(BASE)\ + CASE_16(BASE+0x10)\ + CASE_16(BASE+0x20)\ + CASE_16(BASE+0x30)\ + CASE_16(BASE+0x40)\ + CASE_16(BASE+0x50)\ + CASE_16(BASE+0x60)\ + CASE_16(BASE+0x70)\ + CASE_16(BASE+0x80)\ + CASE_16(BASE+0x90)\ + CASE_16(BASE+0xa0)\ + CASE_16(BASE+0xb0)\ + CASE_16(BASE+0xc0)\ + CASE_16(BASE+0xd0)\ + CASE_16(BASE+0xe0)\ + CASE_16(BASE+0xf0) + +#define LOGICAL_DATA_OPCODE(OPCODE, OPCODE2, BASE) \ + case BASE: \ + case BASE+8:\ + {\ + /* OP Rd,Rb,Rm LSL # */ \ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + \ + if(shift) {\ + LOGICAL_LSL_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+2:\ + case BASE+10:\ + {\ + /* OP Rd,Rb,Rm LSR # */ \ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_LSR_REG\ + } else {\ + value = 0;\ + C_OUT = (reg[opcode & 0x0F].I & 0x80000000) ? true : false;\ + }\ + \ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+4:\ + case BASE+12:\ + {\ + /* OP Rd,Rb,Rm ASR # */\ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_ASR_REG\ + } else {\ + if(reg[opcode & 0x0F].I & 0x80000000){\ + value = 0xFFFFFFFF;\ + C_OUT = true;\ + } else {\ + value = 0;\ + C_OUT = false;\ + } \ + }\ + \ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+6:\ + case BASE+14:\ + {\ + /* OP Rd,Rb,Rm ROR # */\ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_ROR_REG\ + } else {\ + LOGICAL_RRX_REG\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+1:\ + {\ + /* OP Rd,Rb,Rm LSL Rs */\ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + if(shift == 32) {\ + value = 0;\ + C_OUT = (reg[opcode & 0x0F].I & 1 ? true : false);\ + } else if(shift < 32) {\ + LOGICAL_LSL_REG\ + } else {\ + value = 0;\ + C_OUT = false;\ + }\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+3:\ + {\ + /* OP Rd,Rb,Rm LSR Rs */ \ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + if(shift == 32) {\ + value = 0;\ + C_OUT = (reg[opcode & 0x0F].I & 0x80000000 ? true : false);\ + } else if(shift < 32) {\ + LOGICAL_LSR_REG\ + } else {\ + value = 0;\ + C_OUT = false;\ + }\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+5:\ + {\ + /* OP Rd,Rb,Rm ASR Rs */ \ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift < 32) {\ + if(shift) {\ + LOGICAL_ASR_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + } else {\ + if(reg[opcode & 0x0F].I & 0x80000000){\ + value = 0xFFFFFFFF;\ + C_OUT = true;\ + } else {\ + value = 0;\ + C_OUT = false;\ + }\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+7:\ + {\ + /* OP Rd,Rb,Rm ROR Rs */\ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + shift &= 0x1f;\ + if(shift) {\ + LOGICAL_ROR_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + C_OUT = (value & 0x80000000 ? true : false);\ + }\ + } else {\ + value = reg[opcode & 0x0F].I;\ + C_OUT = (value & 0x80000000 ? true : false);\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+0x200:\ + case BASE+0x201:\ + case BASE+0x202:\ + case BASE+0x203:\ + case BASE+0x204:\ + case BASE+0x205:\ + case BASE+0x206:\ + case BASE+0x207:\ + case BASE+0x208:\ + case BASE+0x209:\ + case BASE+0x20a:\ + case BASE+0x20b:\ + case BASE+0x20c:\ + case BASE+0x20d:\ + case BASE+0x20e:\ + case BASE+0x20f:\ + {\ + int shift = (opcode & 0xF00) >> 7;\ + int base = (opcode >> 16) & 0x0F;\ + int dest = (opcode >> 12) & 0x0F;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_ROR_IMM\ + } else {\ + value = opcode & 0xff;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break; + +#define LOGICAL_DATA_OPCODE_WITHOUT_base(OPCODE, OPCODE2, BASE) \ + case BASE: \ + case BASE+8:\ + {\ + /* OP Rd,Rb,Rm LSL # */ \ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + \ + if(shift) {\ + LOGICAL_LSL_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+2:\ + case BASE+10:\ + {\ + /* OP Rd,Rb,Rm LSR # */ \ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_LSR_REG\ + } else {\ + value = 0;\ + C_OUT = (reg[opcode & 0x0F].I & 0x80000000) ? true : false;\ + }\ + \ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+4:\ + case BASE+12:\ + {\ + /* OP Rd,Rb,Rm ASR # */\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_ASR_REG\ + } else {\ + if(reg[opcode & 0x0F].I & 0x80000000){\ + value = 0xFFFFFFFF;\ + C_OUT = true;\ + } else {\ + value = 0;\ + C_OUT = false;\ + } \ + }\ + \ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+6:\ + case BASE+14:\ + {\ + /* OP Rd,Rb,Rm ROR # */\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_ROR_REG\ + } else {\ + LOGICAL_RRX_REG\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+1:\ + {\ + /* OP Rd,Rb,Rm LSL Rs */\ + clockTicks++;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + if(shift == 32) {\ + value = 0;\ + C_OUT = (reg[opcode & 0x0F].I & 1 ? true : false);\ + } else if(shift < 32) {\ + LOGICAL_LSL_REG\ + } else {\ + value = 0;\ + C_OUT = false;\ + }\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+3:\ + {\ + /* OP Rd,Rb,Rm LSR Rs */ \ + clockTicks++;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + if(shift == 32) {\ + value = 0;\ + C_OUT = (reg[opcode & 0x0F].I & 0x80000000 ? true : false);\ + } else if(shift < 32) {\ + LOGICAL_LSR_REG\ + } else {\ + value = 0;\ + C_OUT = false;\ + }\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+5:\ + {\ + /* OP Rd,Rb,Rm ASR Rs */ \ + clockTicks++;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift < 32) {\ + if(shift) {\ + LOGICAL_ASR_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + } else {\ + if(reg[opcode & 0x0F].I & 0x80000000){\ + value = 0xFFFFFFFF;\ + C_OUT = true;\ + } else {\ + value = 0;\ + C_OUT = false;\ + }\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+7:\ + {\ + /* OP Rd,Rb,Rm ROR Rs */\ + clockTicks++;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + shift &= 0x1f;\ + if(shift) {\ + LOGICAL_ROR_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + C_OUT = (value & 0x80000000 ? true : false);\ + }\ + } else {\ + value = reg[opcode & 0x0F].I;\ + C_OUT = (value & 0x80000000 ? true : false);\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+0x200:\ + case BASE+0x201:\ + case BASE+0x202:\ + case BASE+0x203:\ + case BASE+0x204:\ + case BASE+0x205:\ + case BASE+0x206:\ + case BASE+0x207:\ + case BASE+0x208:\ + case BASE+0x209:\ + case BASE+0x20a:\ + case BASE+0x20b:\ + case BASE+0x20c:\ + case BASE+0x20d:\ + case BASE+0x20e:\ + case BASE+0x20f:\ + {\ + int shift = (opcode & 0xF00) >> 7;\ + int dest = (opcode >> 12) & 0x0F;\ + bool C_OUT = C_FLAG;\ + u32 value;\ + if(shift) {\ + LOGICAL_ROR_IMM\ + } else {\ + value = opcode & 0xff;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break; + +#define ARITHMETIC_DATA_OPCODE(OPCODE, OPCODE2, BASE) \ + case BASE:\ + case BASE+8:\ + {\ + /* OP Rd,Rb,Rm LSL # */\ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift) {\ + ARITHMETIC_LSL_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+2:\ + case BASE+10:\ + {\ + /* OP Rd,Rb,Rm LSR # */\ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift) {\ + ARITHMETIC_LSR_REG\ + } else {\ + value = 0;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+4:\ + case BASE+12:\ + {\ + /* OP Rd,Rb,Rm ASR # */\ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift) {\ + ARITHMETIC_ASR_REG\ + } else {\ + if(reg[opcode & 0x0F].I & 0x80000000){\ + value = 0xFFFFFFFF;\ + } else value = 0;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+6:\ + case BASE+14:\ + {\ + /* OP Rd,Rb,Rm ROR # */\ + int base = (opcode >> 16) & 0x0F;\ + int shift = (opcode >> 7) & 0x1F;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift) {\ + ARITHMETIC_ROR_REG\ + } else {\ + ARITHMETIC_RRX_REG\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+1:\ + {\ + /* OP Rd,Rb,Rm LSL Rs */\ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift) {\ + if(shift == 32) {\ + value = 0;\ + } else if(shift < 32) {\ + ARITHMETIC_LSL_REG\ + } else value = 0;\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+3:\ + {\ + /* OP Rd,Rb,Rm LSR Rs */\ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift) {\ + if(shift == 32) {\ + value = 0;\ + } else if(shift < 32) {\ + ARITHMETIC_LSR_REG\ + } else value = 0;\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+5:\ + {\ + /* OP Rd,Rb,Rm ASR Rs */\ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift < 32) {\ + if(shift) {\ + ARITHMETIC_ASR_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + } else {\ + if(reg[opcode & 0x0F].I & 0x80000000){\ + value = 0xFFFFFFFF;\ + } else value = 0;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+7:\ + {\ + /* OP Rd,Rb,Rm ROR Rs */\ + clockTicks++;\ + int base = (opcode >> 16) & 0x0F;\ + int shift = reg[(opcode >> 8)&15].B.B0;\ + int dest = (opcode>>12) & 15;\ + u32 value;\ + if(shift) {\ + shift &= 0x1f;\ + if(shift) {\ + ARITHMETIC_ROR_REG\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + } else {\ + value = reg[opcode & 0x0F].I;\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break;\ + case BASE+0x200:\ + case BASE+0x201:\ + case BASE+0x202:\ + case BASE+0x203:\ + case BASE+0x204:\ + case BASE+0x205:\ + case BASE+0x206:\ + case BASE+0x207:\ + case BASE+0x208:\ + case BASE+0x209:\ + case BASE+0x20a:\ + case BASE+0x20b:\ + case BASE+0x20c:\ + case BASE+0x20d:\ + case BASE+0x20e:\ + case BASE+0x20f:\ + {\ + int shift = (opcode & 0xF00) >> 7;\ + int base = (opcode >> 16) & 0x0F;\ + int dest = (opcode >> 12) & 0x0F;\ + u32 value;\ + {\ + ARITHMETIC_ROR_IMM\ + }\ + if(dest == 15) {\ + OPCODE2\ + /* todo */\ + if(opcode & 0x00100000) {\ + clockTicks++;\ + CPUSwitchMode(reg[17].I & 0x1f, false);\ + }\ + if(armState) {\ + reg[15].I &= 0xFFFFFFFC;\ + armNextPC = reg[15].I;\ + reg[15].I += 4;\ + } else {\ + reg[15].I &= 0xFFFFFFFE;\ + armNextPC = reg[15].I;\ + reg[15].I += 2;\ + }\ + } else {\ + OPCODE \ + }\ + }\ + break; + +u32 opcode = CPUReadMemoryQuick(armNextPC); + +clockTicks = memoryWaitFetch32[(armNextPC >> 24) & 15]; + +#ifndef FINAL_VERSION +if(armNextPC == stop) + { + armNextPC++; + } +#endif + +armNextPC = reg[15].I; +reg[15].I += 4; +int cond = opcode >> 28; +// suggested optimization for frequent cases +bool cond_res; +if(cond == 0x0e) + { + cond_res = true; + } +else + { + switch(cond) + { + case 0x00: // EQ + cond_res = Z_FLAG; + break; + case 0x01: // NE + cond_res = !Z_FLAG; + break; + case 0x02: // CS + cond_res = C_FLAG; + break; + case 0x03: // CC + cond_res = !C_FLAG; + break; + case 0x04: // MI + cond_res = N_FLAG; + break; + case 0x05: // PL + cond_res = !N_FLAG; + break; + case 0x06: // VS + cond_res = V_FLAG; + break; + case 0x07: // VC + cond_res = !V_FLAG; + break; + case 0x08: // HI + cond_res = C_FLAG && !Z_FLAG; + break; + case 0x09: // LS + cond_res = !C_FLAG || Z_FLAG; + break; + case 0x0A: // GE + cond_res = N_FLAG == V_FLAG; + break; + case 0x0B: // LT + cond_res = N_FLAG != V_FLAG; + break; + case 0x0C: // GT + cond_res = !Z_FLAG &&(N_FLAG == V_FLAG); + break; + case 0x0D: // LE + cond_res = Z_FLAG || (N_FLAG != V_FLAG); + break; + case 0x0E: + cond_res = true; + break; + case 0x0F: + default: + // ??? + cond_res = false; + break; + } + } + +if(cond_res) + { + switch(((opcode>>16)&0xFF0) | ((opcode>>4)&0x0F)) + { + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_AND, OP_AND, 0x000); + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_ANDS, OP_AND, 0x010); + case 0x009: + { + // MUL Rd, Rm, Rs + int dest = (opcode >> 16) & 0x0F; + int mult = (opcode & 0x0F); + u32 rs = reg[(opcode >> 8) & 0x0F].I; + reg[dest].I = reg[mult].I * rs; + if(((s32)rs)<0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 2; + else if ((rs & 0xFFFF0000) == 0) + clockTicks += 3; + else if ((rs & 0xFF000000) == 0) + clockTicks += 4; + else + clockTicks += 5; + } + break; + case 0x019: + { + // MULS Rd, Rm, Rs + int dest = (opcode >> 16) & 0x0F; + int mult = (opcode & 0x0F); + u32 rs = reg[(opcode >> 8) & 0x0F].I; + reg[dest].I = reg[mult].I * rs; + N_FLAG = (reg[dest].I & 0x80000000) ? true : false; + Z_FLAG = (reg[dest].I) ? false : true; + if(((s32)rs)<0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 2; + else if ((rs & 0xFFFF0000) == 0) + clockTicks += 3; + else if ((rs & 0xFF000000) == 0) + clockTicks += 4; + else + clockTicks += 5; + } + break; + case 0x00b: + case 0x02b: + { + // STRH Rd, [Rn], -Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + address -= offset; + reg[base].I = address; + } + break; + case 0x04b: + case 0x06b: + { + // STRH Rd, [Rn], #-offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + address -= offset; + reg[base].I = address; + } + break; + case 0x08b: + case 0x0ab: + { + // STRH Rd, [Rn], Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + address += offset; + reg[base].I = address; + } + break; + case 0x0cb: + case 0x0eb: + { + // STRH Rd, [Rn], #offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + address += offset; + reg[base].I = address; + } + break; + case 0x10b: + { + // STRH Rd, [Rn, -Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + } + break; + case 0x12b: + { + // STRH Rd, [Rn, -Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + reg[base].I = address; + } + break; + case 0x14b: + { + // STRH Rd, [Rn, -#offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + } + break; + case 0x16b: + { + // STRH Rd, [Rn, -#offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + reg[base].I = address; + } + break; + case 0x18b: + { + // STRH Rd, [Rn, Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + } + break; + case 0x1ab: + { + // STRH Rd, [Rn, Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + reg[base].I = address; + } + break; + case 0x1cb: + { + // STRH Rd, [Rn, #offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + } + break; + case 0x1eb: + { + // STRH Rd, [Rn, #offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 4 + CPUUpdateTicksAccess16(address); + CPUWriteHalfWord(address, reg[dest].W.W0); + reg[base].I = address; + } + break; + case 0x01b: + case 0x03b: + { + // LDRH Rd, [Rn], -Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + { + address -= offset; + reg[base].I = address; + } + } + break; + case 0x05b: + case 0x07b: + { + // LDRH Rd, [Rn], #-offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + { + address -= offset; + reg[base].I = address; + } + } + break; + case 0x09b: + case 0x0bb: + { + // LDRH Rd, [Rn], Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + { + address += offset; + reg[base].I = address; + } + } + break; + case 0x0db: + case 0x0fb: + { + // LDRH Rd, [Rn], #offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + { + address += offset; + reg[base].I = address; + } + } + break; + case 0x11b: + { + // LDRH Rd, [Rn, -Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + } + break; + case 0x13b: + { + // LDRH Rd, [Rn, -Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x15b: + { + // LDRH Rd, [Rn, -#offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + } + break; + case 0x17b: + { + // LDRH Rd, [Rn, -#offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x19b: + { + // LDRH Rd, [Rn, Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + } + break; + case 0x1bb: + { + // LDRH Rd, [Rn, Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x1db: + { + // LDRH Rd, [Rn, #offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + } + break; + case 0x1fb: + { + // LDRH Rd, [Rn, #offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = CPUReadHalfWord(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x01d: + case 0x03d: + { + // LDRSB Rd, [Rn], -Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + { + address -= offset; + reg[base].I = address; + } + } + break; + case 0x05d: + case 0x07d: + { + // LDRSB Rd, [Rn], #-offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + { + address -= offset; + reg[base].I = address; + } + } + break; + case 0x09d: + case 0x0bd: + { + // LDRSB Rd, [Rn], Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + { + address += offset; + reg[base].I = address; + } + } + break; + case 0x0dd: + case 0x0fd: + { + // LDRSB Rd, [Rn], #offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + { + address += offset; + reg[base].I = address; + } + } + break; + case 0x11d: + { + // LDRSB Rd, [Rn, -Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + } + break; + case 0x13d: + { + // LDRSB Rd, [Rn, -Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x15d: + { + // LDRSB Rd, [Rn, -#offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + } + break; + case 0x17d: + { + // LDRSB Rd, [Rn, -#offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x19d: + { + // LDRSB Rd, [Rn, Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + } + break; + case 0x1bd: + { + // LDRSB Rd, [Rn, Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x1dd: + { + // LDRSB Rd, [Rn, #offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + } + break; + case 0x1fd: + { + // LDRSB Rd, [Rn, #offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s8)CPUReadByte(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x01f: + case 0x03f: + { + // LDRSH Rd, [Rn], -Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + { + address -= offset; + reg[base].I = address; + } + } + break; + case 0x05f: + case 0x07f: + { + // LDRSH Rd, [Rn], #-offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + { + address -= offset; + reg[base].I = address; + } + } + break; + case 0x09f: + case 0x0bf: + { + // LDRSH Rd, [Rn], Rm + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + { + address += offset; + reg[base].I = address; + } + } + break; + case 0x0df: + case 0x0ff: + { + // LDRSH Rd, [Rn], #offset + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I; + int offset = (opcode & 0x0F) | ((opcode >> 4) & 0xF0); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + { + address += offset; + reg[base].I = address; + } + } + break; + case 0x11f: + { + // LDRSH Rd, [Rn, -Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + } + break; + case 0x13f: + { + // LDRSH Rd, [Rn, -Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x15f: + { + // LDRSH Rd, [Rn, -#offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + } + break; + case 0x17f: + { + // LDRSH Rd, [Rn, -#offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I - ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x19f: + { + // LDRSH Rd, [Rn, Rm] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + } + break; + case 0x1bf: + { + // LDRSH Rd, [Rn, Rm]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + reg[opcode & 0x0F].I; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + reg[base].I = address; + } + break; + case 0x1df: + { + // LDRSH Rd, [Rn, #offset] + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + } + break; + case 0x1ff: + { + // LDRSH Rd, [Rn, #offset]! + int base = (opcode >> 16) & 0x0F; + int dest = (opcode >> 12) & 0x0F; + u32 address = reg[base].I + ((opcode & 0x0F)|((opcode>>4)&0xF0)); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + reg[dest].I = (s16)CPUReadHalfWordSigned(address); + if(dest != base) + reg[base].I = address; + } + break; + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_EOR, OP_EOR, 0x020); + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_EORS, OP_EOR, 0x030); + case 0x029: + { + // MLA Rd, Rm, Rs, Rn + int dest = (opcode >> 16) & 0x0F; + int mult = (opcode & 0x0F); + u32 rs = reg[(opcode >> 8) & 0x0F].I; + reg[dest].I = reg[mult].I * rs + reg[(opcode>>12)&0x0f].I; + if(((s32)rs)<0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 3; + else if ((rs & 0xFFFF0000) == 0) + clockTicks += 4; + else if ((rs & 0xFF000000) == 0) + clockTicks += 5; + else + clockTicks += 6; + } + break; + case 0x039: + { + // MLAS Rd, Rm, Rs, Rn + int dest = (opcode >> 16) & 0x0F; + int mult = (opcode & 0x0F); + u32 rs = reg[(opcode >> 8) & 0x0F].I; + reg[dest].I = reg[mult].I * rs + reg[(opcode>>12)&0x0f].I; + N_FLAG = (reg[dest].I & 0x80000000) ? true : false; + Z_FLAG = (reg[dest].I) ? false : true; + if(((s32)rs)<0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 3; + else if ((rs & 0xFFFF0000) == 0) + clockTicks += 4; + else if ((rs & 0xFF000000) == 0) + clockTicks += 5; + else + clockTicks += 6; + } + break; + ARITHMETIC_DATA_OPCODE(OP_SUB, OP_SUB, 0x040); + ARITHMETIC_DATA_OPCODE(OP_SUBS, OP_SUB, 0x050); + ARITHMETIC_DATA_OPCODE(OP_RSB, OP_RSB, 0x060); + ARITHMETIC_DATA_OPCODE(OP_RSBS, OP_RSB, 0x070); + ARITHMETIC_DATA_OPCODE(OP_ADD, OP_ADD, 0x080); + ARITHMETIC_DATA_OPCODE(OP_ADDS, OP_ADD, 0x090); + case 0x089: + { + // UMULL RdLo, RdHi, Rn, Rs + u32 umult = reg[(opcode & 0x0F)].I; + u32 usource = reg[(opcode >> 8) & 0x0F].I; + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u64 uTemp = ((u64)umult)*((u64)usource); + reg[destLo].I = (u32)uTemp; + reg[destHi].I = (u32)(uTemp >> 32); + if ((usource & 0xFFFFFF00) == 0) + clockTicks += 2; + else if ((usource & 0xFFFF0000) == 0) + clockTicks += 3; + else if ((usource & 0xFF000000) == 0) + clockTicks += 4; + else + clockTicks += 5; + } + break; + case 0x099: + { + // UMULLS RdLo, RdHi, Rn, Rs + u32 umult = reg[(opcode & 0x0F)].I; + u32 usource = reg[(opcode >> 8) & 0x0F].I; + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u64 uTemp = ((u64)umult)*((u64)usource); + reg[destLo].I = (u32)uTemp; + reg[destHi].I = (u32)(uTemp >> 32); + Z_FLAG = (uTemp) ? false : true; + N_FLAG = (reg[destHi].I & 0x80000000) ? true : false; + if ((usource & 0xFFFFFF00) == 0) + clockTicks += 2; + else if ((usource & 0xFFFF0000) == 0) + clockTicks += 3; + else if ((usource & 0xFF000000) == 0) + clockTicks += 4; + else + clockTicks += 5; + } + break; + ARITHMETIC_DATA_OPCODE(OP_ADC, OP_ADC, 0x0a0); + ARITHMETIC_DATA_OPCODE(OP_ADCS, OP_ADC, 0x0b0); + case 0x0a9: + { + // UMLAL RdLo, RdHi, Rn, Rs + u32 umult = reg[(opcode & 0x0F)].I; + u32 usource = reg[(opcode >> 8) & 0x0F].I; + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u64 uTemp = (u64)reg[destHi].I; + uTemp <<= 32; + uTemp |= (u64)reg[destLo].I; + uTemp += ((u64)umult)*((u64)usource); + reg[destLo].I = (u32)uTemp; + reg[destHi].I = (u32)(uTemp >> 32); + if ((usource & 0xFFFFFF00) == 0) + clockTicks += 3; + else if ((usource & 0xFFFF0000) == 0) + clockTicks += 4; + else if ((usource & 0xFF000000) == 0) + clockTicks += 5; + else + clockTicks += 6; + } + break; + case 0x0b9: + { + // UMLALS RdLo, RdHi, Rn, Rs + u32 umult = reg[(opcode & 0x0F)].I; + u32 usource = reg[(opcode >> 8) & 0x0F].I; + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u64 uTemp = (u64)reg[destHi].I; + uTemp <<= 32; + uTemp |= (u64)reg[destLo].I; + uTemp += ((u64)umult)*((u64)usource); + reg[destLo].I = (u32)uTemp; + reg[destHi].I = (u32)(uTemp >> 32); + Z_FLAG = (uTemp) ? false : true; + N_FLAG = (reg[destHi].I & 0x80000000) ? true : false; + if ((usource & 0xFFFFFF00) == 0) + clockTicks += 3; + else if ((usource & 0xFFFF0000) == 0) + clockTicks += 4; + else if ((usource & 0xFF000000) == 0) + clockTicks += 5; + else + clockTicks += 6; + } + break; + ARITHMETIC_DATA_OPCODE(OP_SBC, OP_SBC, 0x0c0); + ARITHMETIC_DATA_OPCODE(OP_SBCS, OP_SBC, 0x0d0); + case 0x0c9: + { + // SMULL RdLo, RdHi, Rm, Rs + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u32 rs = reg[(opcode >> 8) & 0x0F].I; + s64 m = (s32)reg[(opcode & 0x0F)].I; + s64 s = (s32)rs; + s64 sTemp = m*s; + reg[destLo].I = (u32)sTemp; + reg[destHi].I = (u32)(sTemp >> 32); + if(((s32)rs) < 0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 2; + else if((rs & 0xFFFF0000) == 0) + clockTicks += 3; + else if((rs & 0xFF000000) == 0) + clockTicks += 4; + else + clockTicks += 5; + } + break; + case 0x0d9: + { + // SMULLS RdLo, RdHi, Rm, Rs + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u32 rs = reg[(opcode >> 8) & 0x0F].I; + s64 m = (s32)reg[(opcode & 0x0F)].I; + s64 s = (s32)rs; + s64 sTemp = m*s; + reg[destLo].I = (u32)sTemp; + reg[destHi].I = (u32)(sTemp >> 32); + Z_FLAG = (sTemp) ? false : true; + N_FLAG = (sTemp < 0) ? true : false; + if(((s32)rs) < 0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 2; + else if((rs & 0xFFFF0000) == 0) + clockTicks += 3; + else if((rs & 0xFF000000) == 0) + clockTicks += 4; + else + clockTicks += 5; + } + break; + ARITHMETIC_DATA_OPCODE(OP_RSC, OP_RSC, 0x0e0); + ARITHMETIC_DATA_OPCODE(OP_RSCS, OP_RSC, 0x0f0); + case 0x0e9: + { + // SMLAL RdLo, RdHi, Rm, Rs + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u32 rs = reg[(opcode >> 8) & 0x0F].I; + s64 m = (s32)reg[(opcode & 0x0F)].I; + s64 s = (s32)rs; + s64 sTemp = (u64)reg[destHi].I; + sTemp <<= 32; + sTemp |= (u64)reg[destLo].I; + sTemp += m*s; + reg[destLo].I = (u32)sTemp; + reg[destHi].I = (u32)(sTemp >> 32); + if(((s32)rs) < 0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 3; + else if((rs & 0xFFFF0000) == 0) + clockTicks += 4; + else if((rs & 0xFF000000) == 0) + clockTicks += 5; + else + clockTicks += 6; + } + break; + case 0x0f9: + { + // SMLALS RdLo, RdHi, Rm, Rs + int destLo = (opcode >> 12) & 0x0F; + int destHi = (opcode >> 16) & 0x0F; + u32 rs = reg[(opcode >> 8) & 0x0F].I; + s64 m = (s32)reg[(opcode & 0x0F)].I; + s64 s = (s32)rs; + s64 sTemp = (u64)reg[destHi].I; + sTemp <<= 32; + sTemp |= (u64)reg[destLo].I; + sTemp += m*s; + reg[destLo].I = (u32)sTemp; + reg[destHi].I = (u32)(sTemp >> 32); + Z_FLAG = (sTemp) ? false : true; + N_FLAG = (sTemp < 0) ? true : false; + if(((s32)rs) < 0) + rs = ~rs; + if((rs & 0xFFFFFF00) == 0) + clockTicks += 3; + else if((rs & 0xFFFF0000) == 0) + clockTicks += 4; + else if((rs & 0xFF000000) == 0) + clockTicks += 5; + else + clockTicks += 6; + } + break; + LOGICAL_DATA_OPCODE(OP_TST, OP_TST, 0x110); + case 0x100: + // MRS Rd, CPSR + // TODO: check if right instruction.... + CPUUpdateCPSR(); + reg[(opcode >> 12) & 0x0F].I = reg[16].I; + break; + case 0x109: + { + // SWP Rd, Rm, [Rn] + u32 address = reg[(opcode >> 16) & 15].I; + u32 temp = CPUReadMemory(address); + CPUWriteMemory(address, reg[opcode&15].I); + reg[(opcode >> 12) & 15].I = temp; + } + break; + LOGICAL_DATA_OPCODE(OP_TEQ, OP_TEQ, 0x130); + case 0x120: + { + // MSR CPSR_fields, Rm + CPUUpdateCPSR(); + u32 value = reg[opcode & 15].I; + u32 newValue = reg[16].I; + if(armMode > 0x10) + { + if(opcode & 0x00010000) + newValue = (newValue & 0xFFFFFF00) | (value & 0x000000FF); + if(opcode & 0x00020000) + newValue = (newValue & 0xFFFF00FF) | (value & 0x0000FF00); + if(opcode & 0x00040000) + newValue = (newValue & 0xFF00FFFF) | (value & 0x00FF0000); + } + if(opcode & 0x00080000) + newValue = (newValue & 0x00FFFFFF) | (value & 0xFF000000); + newValue |= 0x10; + CPUSwitchMode(newValue & 0x1f, false); + reg[16].I = newValue; + CPUUpdateFlags(); + } + break; + case 0x121: + { + // BX Rm + // TODO: check if right instruction... + clockTicks += 3; + int base = opcode & 0x0F; + armState = reg[base].I & 1 ? false : true; + if(armState) + { + reg[15].I = reg[base].I & 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + else + { + reg[15].I = reg[base].I & 0xFFFFFFFE; + armNextPC = reg[15].I; + reg[15].I += 2; + } + } + break; + ARITHMETIC_DATA_OPCODE(OP_CMP, OP_CMP, 0x150); + case 0x140: + // MRS Rd, SPSR + // TODO: check if right instruction... + reg[(opcode >> 12) & 0x0F].I = reg[17].I; + break; + case 0x149: + { + // SWPB Rd, Rm, [Rn] + u32 address = reg[(opcode >> 16) & 15].I; + u32 temp = CPUReadByte(address); + CPUWriteByte(address, reg[opcode&15].B.B0); + reg[(opcode>>12)&15].I = temp; + } + break; + ARITHMETIC_DATA_OPCODE(OP_CMN, OP_CMN, 0x170); + case 0x160: + { + // MSR SPSR_fields, Rm + u32 value = reg[opcode & 15].I; + if(armMode > 0x10 && armMode < 0x1f) + { + if(opcode & 0x00010000) + reg[17].I = (reg[17].I & 0xFFFFFF00) | (value & 0x000000FF); + if(opcode & 0x00020000) + reg[17].I = (reg[17].I & 0xFFFF00FF) | (value & 0x0000FF00); + if(opcode & 0x00040000) + reg[17].I = (reg[17].I & 0xFF00FFFF) | (value & 0x00FF0000); + if(opcode & 0x00080000) + reg[17].I = (reg[17].I & 0x00FFFFFF) | (value & 0xFF000000); + } + } + break; + LOGICAL_DATA_OPCODE (OP_ORR, OP_ORR, 0x180); + LOGICAL_DATA_OPCODE (OP_ORRS, OP_ORR, 0x190); + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_MOV, OP_MOV, 0x1a0); + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_MOVS, OP_MOV, 0x1b0); + LOGICAL_DATA_OPCODE (OP_BIC, OP_BIC, 0x1c0); + LOGICAL_DATA_OPCODE (OP_BICS, OP_BIC, 0x1d0); + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_MVN, OP_MVN, 0x1e0); + LOGICAL_DATA_OPCODE_WITHOUT_base(OP_MVNS, OP_MVN, 0x1f0); +#ifdef BKPT_SUPPORT + case 0x127: + case 0x7ff: // for GDB support + extern void (*dbgSignal)(int,int); + reg[15].I -= 4; + armNextPC -= 4; + dbgSignal(5, (opcode & 0x0f)|((opcode>>4) & 0xfff0)); + return; +#endif + case 0x320: + case 0x321: + case 0x322: + case 0x323: + case 0x324: + case 0x325: + case 0x326: + case 0x327: + case 0x328: + case 0x329: + case 0x32a: + case 0x32b: + case 0x32c: + case 0x32d: + case 0x32e: + case 0x32f: + { + // MSR CPSR_fields, # + CPUUpdateCPSR(); + u32 value = opcode & 0xFF; + int shift = (opcode & 0xF00) >> 7; + if(shift) + { + ROR_IMM_MSR; + } + u32 newValue = reg[16].I; + if(armMode > 0x10) + { + if(opcode & 0x00010000) + newValue = (newValue & 0xFFFFFF00) | (value & 0x000000FF); + if(opcode & 0x00020000) + newValue = (newValue & 0xFFFF00FF) | (value & 0x0000FF00); + if(opcode & 0x00040000) + newValue = (newValue & 0xFF00FFFF) | (value & 0x00FF0000); + } + if(opcode & 0x00080000) + newValue = (newValue & 0x00FFFFFF) | (value & 0xFF000000); + + newValue |= 0x10; + + CPUSwitchMode(newValue & 0x1f, false); + reg[16].I = newValue; + CPUUpdateFlags(); + } + break; + case 0x360: + case 0x361: + case 0x362: + case 0x363: + case 0x364: + case 0x365: + case 0x366: + case 0x367: + case 0x368: + case 0x369: + case 0x36a: + case 0x36b: + case 0x36c: + case 0x36d: + case 0x36e: + case 0x36f: + { + // MSR SPSR_fields, # + if(armMode > 0x10 && armMode < 0x1f) + { + u32 value = opcode & 0xFF; + int shift = (opcode & 0xF00) >> 7; + if(shift) + { + ROR_IMM_MSR; + } + if(opcode & 0x00010000) + reg[17].I = (reg[17].I & 0xFFFFFF00) | (value & 0x000000FF); + if(opcode & 0x00020000) + reg[17].I = (reg[17].I & 0xFFFF00FF) | (value & 0x0000FF00); + if(opcode & 0x00040000) + reg[17].I = (reg[17].I & 0xFF00FFFF) | (value & 0x00FF0000); + if(opcode & 0x00080000) + reg[17].I = (reg[17].I & 0x00FFFFFF) | (value & 0xFF000000); + } + } + break; + CASE_16(0x400) + // T versions shouldn't be different on GBA + CASE_16(0x420) + { + // STR Rd, [Rn], -# + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x480) + // T versions shouldn't be different on GBA + CASE_16(0x4a0) + { + // STR Rd, [Rn], # + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x500) + { + // STR Rd, [Rn, -#] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x520) + { + // STR Rd, [Rn, -#]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x580) + { + // STR Rd, [Rn, #] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x5a0) + { + // STR Rd, [Rn, #]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x410) + { + // LDR Rd, [Rn], -# + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I -= offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x430) + { + // LDRT Rd, [Rn], -# + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I -= offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x490) + { + // LDR Rd, [Rn], # + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I += offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x4b0) + { + // LDRT Rd, [Rn], # + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I += offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + } + break; + CASE_16(0x510) + { + // LDR Rd, [Rn, -#] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x530) + { + // LDR Rd, [Rn, -#]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x590) + { + // LDR Rd, [Rn, #] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x5b0) + { + // LDR Rd, [Rn, #]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x440) + // T versions shouldn't be different on GBA + CASE_16(0x460) + { + // STRB Rd, [Rn], -# + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x4c0) + // T versions shouldn't be different on GBA + CASE_16(0x4e0) + // STRB Rd, [Rn], # + { + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x540) + { + // STRB Rd, [Rn, -#] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x560) + { + // STRB Rd, [Rn, -#]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x5c0) + { + // STRB Rd, [Rn, #] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x5e0) + { + // STRB Rd, [Rn, #]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x450) + // T versions shouldn't be different + CASE_16(0x470) + { + // LDRB Rd, [Rn], -# + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I -= offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x4d0) + CASE_16(0x4f0) // T versions should not be different + { + // LDRB Rd, [Rn], # + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I += offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x550) + { + // LDRB Rd, [Rn, -#] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x570) + { + // LDRB Rd, [Rn, -#]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x5d0) + { + // LDRB Rd, [Rn, #] + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + CASE_16(0x5f0) + { + // LDRB Rd, [Rn, #]! + int offset = opcode & 0xFFF; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x600: + case 0x608: + // T versions are the same + case 0x620: + case 0x628: + { + // STR Rd, [Rn], -Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x602: + case 0x60a: + // T versions are the same + case 0x622: + case 0x62a: + { + // STR Rd, [Rn], -Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x604: + case 0x60c: + // T versions are the same + case 0x624: + case 0x62c: + { + // STR Rd, [Rn], -Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x606: + case 0x60e: + // T versions are the same + case 0x626: + case 0x62e: + { + // STR Rd, [Rn], -Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address - value; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x680: + case 0x688: + // T versions are the same + case 0x6a0: + case 0x6a8: + { + // STR Rd, [Rn], Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x682: + case 0x68a: + // T versions are the same + case 0x6a2: + case 0x6aa: + { + // STR Rd, [Rn], Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x684: + case 0x68c: + // T versions are the same + case 0x6a4: + case 0x6ac: + { + // STR Rd, [Rn], Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x686: + case 0x68e: + // T versions are the same + case 0x6a6: + case 0x6ae: + { + // STR Rd, [Rn], Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteMemory(address, reg[dest].I); + reg[base].I = address + value; + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x700: + case 0x708: + { + // STR Rd, [Rn, -Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x702: + case 0x70a: + { + // STR Rd, [Rn, -Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x704: + case 0x70c: + { + // STR Rd, [Rn, -Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x706: + case 0x70e: + { + // STR Rd, [Rn, -Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x720: + case 0x728: + { + // STR Rd, [Rn, -Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x722: + case 0x72a: + { + // STR Rd, [Rn, -Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x724: + case 0x72c: + { + // STR Rd, [Rn, -Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x726: + case 0x72e: + { + // STR Rd, [Rn, -Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x780: + case 0x788: + { + // STR Rd, [Rn, Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x782: + case 0x78a: + { + // STR Rd, [Rn, Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x784: + case 0x78c: + { + // STR Rd, [Rn, Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x786: + case 0x78e: + { + // STR Rd, [Rn, Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x7a0: + case 0x7a8: + { + // STR Rd, [Rn, Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x7a2: + case 0x7aa: + { + // STR Rd, [Rn, Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x7a4: + case 0x7ac: + { + // STR Rd, [Rn, Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x7a6: + case 0x7ae: + { + // STR Rd, [Rn, Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + reg[base].I = address; + CPUWriteMemory(address, reg[dest].I); + clockTicks += 2 + CPUUpdateTicksAccess32(address); + } + break; + case 0x610: + case 0x618: + // T versions are the same + case 0x630: + case 0x638: + { + // LDR Rd, [Rn], -Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address - offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x612: + case 0x61a: + // T versions are the same + case 0x632: + case 0x63a: + { + // LDR Rd, [Rn], -Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address - offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x614: + case 0x61c: + // T versions are the same + case 0x634: + case 0x63c: + { + // LDR Rd, [Rn], -Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address - offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x616: + case 0x61e: + // T versions are the same + case 0x636: + case 0x63e: + { + // LDR Rd, [Rn], -Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address - value; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x690: + case 0x698: + // T versions are the same + case 0x6b0: + case 0x6b8: + { + // LDR Rd, [Rn], Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address + offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x692: + case 0x69a: + // T versions are the same + case 0x6b2: + case 0x6ba: + { + // LDR Rd, [Rn], Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address + offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x694: + case 0x69c: + // T versions are the same + case 0x6b4: + case 0x6bc: + { + // LDR Rd, [Rn], Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address + offset; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x696: + case 0x69e: + // T versions are the same + case 0x6b6: + case 0x6be: + { + // LDR Rd, [Rn], Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address + value; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x710: + case 0x718: + { + // LDR Rd, [Rn, -Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x712: + case 0x71a: + { + // LDR Rd, [Rn, -Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x714: + case 0x71c: + { + // LDR Rd, [Rn, -Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x716: + case 0x71e: + { + // LDR Rd, [Rn, -Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x730: + case 0x738: + { + // LDR Rd, [Rn, -Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x732: + case 0x73a: + { + // LDR Rd, [Rn, -Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x734: + case 0x73c: + { + // LDR Rd, [Rn, -Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x736: + case 0x73e: + { + // LDR Rd, [Rn, -Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x790: + case 0x798: + { + // LDR Rd, [Rn, Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x792: + case 0x79a: + { + // LDR Rd, [Rn, Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x794: + case 0x79c: + { + // LDR Rd, [Rn, Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x796: + case 0x79e: + { + // LDR Rd, [Rn, Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + reg[dest].I = CPUReadMemory(address); + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x7b0: + case 0x7b8: + { + // LDR Rd, [Rn, Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x7b2: + case 0x7ba: + { + // LDR Rd, [Rn, Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x7b4: + case 0x7bc: + { + // LDR Rd, [Rn, Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x7b6: + case 0x7be: + { + // LDR Rd, [Rn, Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + reg[dest].I = CPUReadMemory(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess32(address); + if(dest == 15) + { + clockTicks += 2; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + case 0x640: + case 0x648: + // T versions are the same + case 0x660: + case 0x668: + { + // STRB Rd, [Rn], -Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x642: + case 0x64a: + // T versions are the same + case 0x662: + case 0x66a: + { + // STRB Rd, [Rn], -Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x644: + case 0x64c: + // T versions are the same + case 0x664: + case 0x66c: + { + // STRB Rd, [Rn], -Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address - offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x646: + case 0x64e: + // T versions are the same + case 0x666: + case 0x66e: + { + // STRB Rd, [Rn], -Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address - value; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6c0: + case 0x6c8: + // T versions are the same + case 0x6e0: + case 0x6e8: + { + // STRB Rd, [Rn], Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6c2: + case 0x6ca: + // T versions are the same + case 0x6e2: + case 0x6ea: + { + // STRB Rd, [Rn], Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6c4: + case 0x6cc: + // T versions are the same + case 0x6e4: + case 0x6ec: + { + // STR Rd, [Rn], Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address + offset; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6c6: + case 0x6ce: + // T versions are the same + case 0x6e6: + case 0x6ee: + { + // STRB Rd, [Rn], Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + CPUWriteByte(address, reg[dest].B.B0); + reg[base].I = address + value; + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x740: + case 0x748: + { + // STRB Rd, [Rn, -Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x742: + case 0x74a: + { + // STRB Rd, [Rn, -Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x744: + case 0x74c: + { + // STRB Rd, [Rn, -Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x746: + case 0x74e: + { + // STRB Rd, [Rn, -Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x760: + case 0x768: + { + // STRB Rd, [Rn, -Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x762: + case 0x76a: + { + // STRB Rd, [Rn, -Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x764: + case 0x76c: + { + // STRB Rd, [Rn, -Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x766: + case 0x76e: + { + // STRB Rd, [Rn, -Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7c0: + case 0x7c8: + { + // STRB Rd, [Rn, Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7c2: + case 0x7ca: + { + // STRB Rd, [Rn, Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7c4: + case 0x7cc: + { + // STRB Rd, [Rn, Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7c6: + case 0x7ce: + { + // STRB Rd, [Rn, Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7e0: + case 0x7e8: + { + // STRB Rd, [Rn, Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7e2: + case 0x7ea: + { + // STRB Rd, [Rn, Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7e4: + case 0x7ec: + { + // STRB Rd, [Rn, Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7e6: + case 0x7ee: + { + // STRB Rd, [Rn, Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + reg[base].I = address; + CPUWriteByte(address, reg[dest].B.B0); + clockTicks += 2 + CPUUpdateTicksAccess16(address); + } + break; + case 0x650: + case 0x658: + // T versions are the same + case 0x670: + case 0x678: + { + // LDRB Rd, [Rn], -Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address - offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x652: + case 0x65a: + // T versions are the same + case 0x672: + case 0x67a: + { + // LDRB Rd, [Rn], -Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address - offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x654: + case 0x65c: + // T versions are the same + case 0x674: + case 0x67c: + { + // LDRB Rd, [Rn], -Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address - offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x656: + case 0x65e: + // T versions are the same + case 0x676: + case 0x67e: + { + // LDRB Rd, [Rn], -Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address - value; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6d0: + case 0x6d8: + // T versions are the same + case 0x6f0: + case 0x6f8: + { + // LDRB Rd, [Rn], Rm, LSL # + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address + offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6d2: + case 0x6da: + // T versions are the same + case 0x6f2: + case 0x6fa: + { + // LDRB Rd, [Rn], Rm, LSR # + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address + offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6d4: + case 0x6dc: + // T versions are the same + case 0x6f4: + case 0x6fc: + { + // LDRB Rd, [Rn], Rm, ASR # + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address + offset; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x6d6: + case 0x6de: + // T versions are the same + case 0x6f6: + case 0x6fe: + { + // LDRB Rd, [Rn], Rm, ROR # + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address + value; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x750: + case 0x758: + { + // LDRB Rd, [Rn, -Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x752: + case 0x75a: + { + // LDRB Rd, [Rn, -Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x754: + case 0x75c: + { + // LDRB Rd, [Rn, -Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x756: + case 0x75e: + { + // LDRB Rd, [Rn, -Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x770: + case 0x778: + { + // LDRB Rd, [Rn, -Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x772: + case 0x77a: + { + // LDRB Rd, [Rn, -Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x774: + case 0x77c: + { + // LDRB Rd, [Rn, -Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x776: + case 0x77e: + { + // LDRB Rd, [Rn, -Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I - value; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7d0: + case 0x7d8: + { + // LDRB Rd, [Rn, Rm, LSL #] + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7d2: + case 0x7da: + { + // LDRB Rd, [Rn, Rm, LSR #] + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7d4: + case 0x7dc: + { + // LDRB Rd, [Rn, Rm, ASR #] + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7d6: + case 0x7de: + { + // LDRB Rd, [Rn, Rm, ROR #] + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + reg[dest].I = CPUReadByte(address); + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7f0: + case 0x7f8: + { + // LDRB Rd, [Rn, Rm, LSL #]! + int offset = reg[opcode & 15].I << ((opcode>>7)& 31); + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7f2: + case 0x7fa: + { + // LDRB Rd, [Rn, Rm, LSR #]! + int shift = (opcode >> 7) & 31; + int offset = shift ? reg[opcode & 15].I >> shift : 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7f4: + case 0x7fc: + { + // LDRB Rd, [Rn, Rm, ASR #]! + int shift = (opcode >> 7) & 31; + int offset; + if(shift) + offset = (int)((s32)reg[opcode & 15].I >> shift); + else if(reg[opcode & 15].I & 0x80000000) + offset = 0xFFFFFFFF; + else + offset = 0; + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + offset; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; + case 0x7f6: + case 0x7fe: + { + // LDRB Rd, [Rn, Rm, ROR #]! + int shift = (opcode >> 7) & 31; + u32 value = reg[opcode & 15].I; + if(shift) + { + ROR_VALUE; + } + else + { + RCR_VALUE; + } + int dest = (opcode >> 12) & 15; + int base = (opcode >> 16) & 15; + u32 address = reg[base].I + value; + reg[dest].I = CPUReadByte(address); + if(dest != base) + reg[base].I = address; + clockTicks += 3 + CPUUpdateTicksAccess16(address); + } + break; +#define STMW_REG(val,num) \ +if(opcode & (val)) {\ +CPUWriteMemory(address, reg[(num)].I);\ +if(!offset) {\ +reg[base].I = temp;\ +clockTicks += 1 + CPUUpdateTicksAccess32(address);\ +offset = 1;\ +} else {\ +clockTicks += 1 + CPUUpdateTicksAccessSeq32(address);\ +}\ +address += 4;\ +} +#define STM_REG(val,num) \ +if(opcode & (val)) {\ +CPUWriteMemory(address, reg[(num)].I);\ +if(!offset) {\ +clockTicks += 1 + CPUUpdateTicksAccess32(address);\ +offset = 1;\ +} else {\ +clockTicks += 1 + CPUUpdateTicksAccessSeq32(address);\ +}\ +address += 4;\ +} + + CASE_16(0x800) + // STMDA Rn, {Rlist} + { + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp + 4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + STM_REG(8192, 13); + STM_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x820) + { + // STMDA Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + STMW_REG(8192, 13); + STMW_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + reg[base].I = temp; + } + } + break; + CASE_16(0x840) + { + // STMDA Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + + if(armMode == 0x11) + { + STM_REG(256, R8_FIQ); + STM_REG(512, R9_FIQ); + STM_REG(1024, R10_FIQ); + STM_REG(2048, R11_FIQ); + STM_REG(4096, R12_FIQ); + } + else + { + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + STM_REG(8192, R13_USR); + STM_REG(16384, R14_USR); + } + else + { + STM_REG(8192, 13); + STM_REG(16384, 14); + } + + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x860) + { + // STMDA Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + + if(armMode == 0x11) + { + STMW_REG(256, R8_FIQ); + STMW_REG(512, R9_FIQ); + STMW_REG(1024, R10_FIQ); + STMW_REG(2048, R11_FIQ); + STMW_REG(4096, R12_FIQ); + } + else + { + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + STMW_REG(8192, R13_USR); + STMW_REG(16384, R14_USR); + } + else + { + STMW_REG(8192, 13); + STMW_REG(16384, 14); + } + + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + reg[base].I = temp; + } + } + break; + + CASE_16(0x880) + { + // STMIA Rn, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + STM_REG(8192, 13); + STM_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x8a0) + { + // STMIA Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + u32 temp = reg[base].I + 4*(cpuBitsSet[opcode & 0xFF] + + cpuBitsSet[(opcode >> 8) & 255]); + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + STMW_REG(8192, 13); + STMW_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + { + reg[base].I = temp; + clockTicks += 1 + CPUUpdateTicksAccess32(address); + } + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x8c0) + { + // STMIA Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + if(armMode == 0x11) + { + STM_REG(256, R8_FIQ); + STM_REG(512, R9_FIQ); + STM_REG(1024, R10_FIQ); + STM_REG(2048, R11_FIQ); + STM_REG(4096, R12_FIQ); + } + else + { + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + } + if(armMode != 0x10 && armMode != 0x1f) + { + STM_REG(8192, R13_USR); + STM_REG(16384, R14_USR); + } + else + { + STM_REG(8192, 13); + STM_REG(16384, 14); + } + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x8e0) + { + // STMIA Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + u32 temp = reg[base].I + 4*(cpuBitsSet[opcode & 0xFF] + + cpuBitsSet[(opcode >> 8) & 255]); + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + if(armMode == 0x11) + { + STMW_REG(256, R8_FIQ); + STMW_REG(512, R9_FIQ); + STMW_REG(1024, R10_FIQ); + STMW_REG(2048, R11_FIQ); + STMW_REG(4096, R12_FIQ); + } + else + { + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + } + if(armMode != 0x10 && armMode != 0x1f) + { + STMW_REG(8192, R13_USR); + STMW_REG(16384, R14_USR); + } + else + { + STMW_REG(8192, 13); + STMW_REG(16384, 14); + } + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + { + reg[base].I = temp; + clockTicks += 1 + CPUUpdateTicksAccess32(address); + } + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + + CASE_16(0x900) + { + // STMDB Rn, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + STM_REG(8192, 13); + STM_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x920) + { + // STMDB Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + STMW_REG(8192, 13); + STMW_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + reg[base].I = temp; + } + } + break; + CASE_16(0x940) + { + // STMDB Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + + if(armMode == 0x11) + { + STM_REG(256, R8_FIQ); + STM_REG(512, R9_FIQ); + STM_REG(1024, R10_FIQ); + STM_REG(2048, R11_FIQ); + STM_REG(4096, R12_FIQ); + } + else + { + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + STM_REG(8192, R13_USR); + STM_REG(16384, R14_USR); + } + else + { + STM_REG(8192, 13); + STM_REG(16384, 14); + } + + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x960) + { + // STMDB Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + + if(armMode == 0x11) + { + STMW_REG(256, R8_FIQ); + STMW_REG(512, R9_FIQ); + STMW_REG(1024, R10_FIQ); + STMW_REG(2048, R11_FIQ); + STMW_REG(4096, R12_FIQ); + } + else + { + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + STMW_REG(8192, R13_USR); + STMW_REG(16384, R14_USR); + } + else + { + STMW_REG(8192, 13); + STMW_REG(16384, 14); + } + + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + reg[base].I = temp; + } + } + break; + + CASE_16(0x980) + // STMIB Rn, {Rlist} + { + int base = (opcode & 0x000F0000) >> 16; + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + STM_REG(8192, 13); + STM_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x9a0) + { + // STMIB Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + u32 temp = reg[base].I + 4*(cpuBitsSet[opcode & 0xFF] + + cpuBitsSet[(opcode >> 8) & 255]); + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + STMW_REG(8192, 13); + STMW_REG(16384, 14); + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + { + reg[base].I = temp; + clockTicks += 1 + CPUUpdateTicksAccess32(address); + } + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x9c0) + { + // STMIB Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + STM_REG(1, 0); + STM_REG(2, 1); + STM_REG(4, 2); + STM_REG(8, 3); + STM_REG(16, 4); + STM_REG(32, 5); + STM_REG(64, 6); + STM_REG(128, 7); + if(armMode == 0x11) + { + STM_REG(256, R8_FIQ); + STM_REG(512, R9_FIQ); + STM_REG(1024, R10_FIQ); + STM_REG(2048, R11_FIQ); + STM_REG(4096, R12_FIQ); + } + else + { + STM_REG(256, 8); + STM_REG(512, 9); + STM_REG(1024, 10); + STM_REG(2048, 11); + STM_REG(4096, 12); + } + if(armMode != 0x10 && armMode != 0x1f) + { + STM_REG(8192, R13_USR); + STM_REG(16384, R14_USR); + } + else + { + STM_REG(8192, 13); + STM_REG(16384, 14); + } + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + clockTicks += 1 + CPUUpdateTicksAccess32(address); + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + CASE_16(0x9e0) + { + // STMIB Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + u32 temp = reg[base].I + 4*(cpuBitsSet[opcode & 0xFF] + + cpuBitsSet[(opcode >> 8) & 255]); + STMW_REG(1, 0); + STMW_REG(2, 1); + STMW_REG(4, 2); + STMW_REG(8, 3); + STMW_REG(16, 4); + STMW_REG(32, 5); + STMW_REG(64, 6); + STMW_REG(128, 7); + if(armMode == 0x11) + { + STMW_REG(256, R8_FIQ); + STMW_REG(512, R9_FIQ); + STMW_REG(1024, R10_FIQ); + STMW_REG(2048, R11_FIQ); + STMW_REG(4096, R12_FIQ); + } + else + { + STMW_REG(256, 8); + STMW_REG(512, 9); + STMW_REG(1024, 10); + STMW_REG(2048, 11); + STMW_REG(4096, 12); + } + if(armMode != 0x10 && armMode != 0x1f) + { + STMW_REG(8192, R13_USR); + STMW_REG(16384, R14_USR); + } + else + { + STMW_REG(8192, 13); + STMW_REG(16384, 14); + } + if(opcode & 32768) + { + CPUWriteMemory(address, reg[15].I+4); + if(!offset) + { + reg[base].I = temp; + clockTicks += 1 + CPUUpdateTicksAccess32(address); + } + else + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address); + } + } + break; + +#define LDM_REG(val,num) \ +if(opcode & (val)) {\ +reg[(num)].I = CPUReadMemory(address);\ +if(offset)\ +clockTicks += 1 + CPUUpdateTicksAccessSeq32(address);\ +else {\ +clockTicks += 1 + CPUUpdateTicksAccess32(address);\ +offset = 1;\ +}\ +address += 4;\ +} + + CASE_16(0x810) + { + // LDMDA Rn, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp + 4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x830) + { + // LDMDA Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp + 4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + break; + CASE_16(0x850) + { + // LDMDA Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp + 4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + } + } + break; + CASE_16(0x870) + { + // LDMDA Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (temp + 4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if(!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + if(!(opcode & (1 << base))) + reg[base].I = temp; + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + } + break; + + CASE_16(0x890) + { + // LDMIA Rn, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x8b0) + { + // LDMIA Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I + + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + break; + CASE_16(0x8d0) + { + // LDMIA Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + } + } + break; + CASE_16(0x8f0) + { + // LDMIA Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I + + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = reg[base].I & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if(!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + if(!(opcode & (1 << base))) + reg[base].I = temp; + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + } + break; + + CASE_16(0x910) + { + // LDMDB Rn, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x930) + { + // LDMDB Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + break; + CASE_16(0x950) + { + // LDMDB Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + } + } + break; + CASE_16(0x970) + { + // LDMDB Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I - + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = temp & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if(!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + if(!(opcode & (1 << base))) + reg[base].I = temp; + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + } + break; + + CASE_16(0x990) + { + // LDMIB Rn, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + } + break; + CASE_16(0x9b0) + { + // LDMIB Rn!, {Rlist} + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I + + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + if(opcode & 32768) + { + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + armNextPC = reg[15].I; + reg[15].I += 4; + } + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + break; + CASE_16(0x9d0) + { + // LDMIB Rn, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if (!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + } + } + break; + CASE_16(0x9f0) + { + // LDMIB Rn!, {Rlist}^ + int base = (opcode & 0x000F0000) >> 16; + u32 temp = reg[base].I + + 4 * (cpuBitsSet[opcode & 255] + cpuBitsSet[(opcode >> 8) & 255]); + u32 address = (reg[base].I+4) & 0xFFFFFFFC; + clockTicks += 2; + int offset = 0; + if(opcode & 0x8000) + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + LDM_REG(8192, 13); + LDM_REG(16384, 14); + + reg[15].I = CPUReadMemory(address); + if(!offset) + clockTicks += 2 + CPUUpdateTicksAccess32(address); + else + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address); + + if(!(opcode & (1 << base))) + reg[base].I = temp; + + CPUSwitchMode(reg[17].I & 0x1f, false); + if(armState) + { + armNextPC = reg[15].I & 0xFFFFFFFC; + reg[15].I = armNextPC + 4; + } + else + { + armNextPC = reg[15].I & 0xFFFFFFFE; + reg[15].I = armNextPC + 2; + } + } + else + { + LDM_REG(1, 0); + LDM_REG(2, 1); + LDM_REG(4, 2); + LDM_REG(8, 3); + LDM_REG(16, 4); + LDM_REG(32, 5); + LDM_REG(64, 6); + LDM_REG(128, 7); + + if(armMode == 0x11) + { + LDM_REG(256, R8_FIQ); + LDM_REG(512, R9_FIQ); + LDM_REG(1024, R10_FIQ); + LDM_REG(2048, R11_FIQ); + LDM_REG(4096, R12_FIQ); + } + else + { + LDM_REG(256, 8); + LDM_REG(512, 9); + LDM_REG(1024, 10); + LDM_REG(2048, 11); + LDM_REG(4096, 12); + } + + if(armMode != 0x10 && armMode != 0x1f) + { + LDM_REG(8192, R13_USR); + LDM_REG(16384, R14_USR); + } + else + { + LDM_REG(8192, 13); + LDM_REG(16384, 14); + } + + if(!(opcode & (1 << base))) + reg[base].I = temp; + } + } + break; + CASE_256(0xa00) + { + // B + clockTicks += 3; + int offset = opcode & 0x00FFFFFF; + if(offset & 0x00800000) + { + offset |= 0xFF000000; + } + offset <<= 2; + reg[15].I += offset; + armNextPC = reg[15].I; + reg[15].I += 4; + } + break; + CASE_256(0xb00) + { + // BL + clockTicks += 3; + int offset = opcode & 0x00FFFFFF; + if(offset & 0x00800000) + { + offset |= 0xFF000000; + } + offset <<= 2; + reg[14].I = reg[15].I - 4; + reg[15].I += offset; + armNextPC = reg[15].I; + reg[15].I += 4; + } + break; + CASE_256(0xf00) + // SWI + clockTicks += 3; + CPUSoftwareInterrupt(opcode & 0x00FFFFFF); + break; +#ifdef GP_SUPPORT + case 0xe11: + case 0xe13: + case 0xe15: + case 0xe17: + case 0xe19: + case 0xe1b: + case 0xe1d: + case 0xe1f: + // MRC + break; + case 0xe01: + case 0xe03: + case 0xe05: + case 0xe07: + case 0xe09: + case 0xe0b: + case 0xe0d: + case 0xe0f: + // MRC + break; +#endif + default: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_UNDEFINED) + log("Undefined ARM instruction %08x at %08x\n", opcode, + armNextPC-4); +#endif + CPUUndefinedException(); + break; + // END + } + } diff --git a/source/vba/armdis.cpp b/source/vba/armdis.cpp index dde2b2cc..237373f0 100644 --- a/source/vba/armdis.cpp +++ b/source/vba/armdis.cpp @@ -1,742 +1,809 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -/************************************************************************/ -/* Arm/Thumb command set disassembler */ -/************************************************************************/ -#include - -#include "System.h" -#include "Port.h" -#include "agb/GBA.h" -#include "armdis.h" -#include "elf.h" - -struct Opcodes { - u32 mask; - u32 cval; - const char *mnemonic; -}; - -#define debuggerReadMemory(addr) \ - READ32LE(((u32*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -#define debuggerReadHalfWord(addr) \ - READ16LE(((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -#define debuggerReadByte(addr) \ - map[(addr)>>24].address[(addr) & map[(addr)>>24].mask] - -const char hdig[] = "0123456789abcdef"; - -const char *decVals[16] = { - "0","1","2","3","4","5","6","7","8", - "9","10","11","12","13","14","15" -}; - -const char *regs[16] = { - "r0","r1","r2","r3","r4","r5","r6","r7", - "r8","r9","r10","r11","r12","sp","lr","pc" -}; - -const char *conditions[16] = { - "eq","ne","cs","cc","mi","pl","vs","vc", - "hi","ls","ge","lt","gt","le","","nv" -}; - -const char *shifts[5] = { - "lsl","lsr","asr","ror","rrx" -}; - -const char *armMultLoadStore[12] = { - // non-stack - "da","ia","db","ib", - // stack store - "ed","ea","fd","fa", - // stack load - "fa","fd","ea","ed" -}; - -const Opcodes thumbOpcodes[] = { - // Format 1 - {0xf800, 0x0000, "lsl %r0, %r3, %o"}, - {0xf800, 0x0800, "lsr %r0, %r3, %o"}, - {0xf800, 0x1000, "asr %r0, %r3, %o"}, - // Format 2 - {0xfe00, 0x1800, "add %r0, %r3, %r6"}, - {0xfe00, 0x1a00, "sub %r0, %r3, %r6"}, - {0xfe00, 0x1c00, "add %r0, %r3, %i"}, - {0xfe00, 0x1e00, "sub %r0, %r3, %i"}, - // Format 3 - {0xf800, 0x2000, "mov %r8, %O"}, - {0xf800, 0x2800, "cmp %r8, %O"}, - {0xf800, 0x3000, "add %r8, %O"}, - {0xf800, 0x3800, "sub %r8, %O"}, - // Format 4 - {0xffc0, 0x4000, "and %r0, %r3"}, - {0xffc0, 0x4040, "eor %r0, %r3"}, - {0xffc0, 0x4080, "lsl %r0, %r3"}, - {0xffc0, 0x40c0, "lsr %r0, %r3"}, - {0xffc0, 0x4100, "asr %r0, %r3"}, - {0xffc0, 0x4140, "adc %r0, %r3"}, - {0xffc0, 0x4180, "sbc %r0, %r3"}, - {0xffc0, 0x41c0, "ror %r0, %r3"}, - {0xffc0, 0x4200, "tst %r0, %r3"}, - {0xffc0, 0x4240, "neg %r0, %r3"}, - {0xffc0, 0x4280, "cmp %r0, %r3"}, - {0xffc0, 0x42c0, "cmn %r0, %r3"}, - {0xffc0, 0x4300, "orr %r0, %r3"}, - {0xffc0, 0x4340, "mul %r0, %r3"}, - {0xffc0, 0x4380, "bic %r0, %r3"}, - {0xffc0, 0x43c0, "mvn %r0, %r3"}, - // Format 5 - {0xff80, 0x4700, "bx %h36"}, - {0xfcc0, 0x4400, "[ ??? ]"}, - {0xff00, 0x4400, "add %h07, %h36"}, - {0xff00, 0x4500, "cmp %h07, %h36"}, - {0xff00, 0x4600, "mov %h07, %h36"}, - // Format 6 - {0xf800, 0x4800, "ldr %r8, [%I] (=%J)"}, - // Format 7 - {0xfa00, 0x5000, "str%b %r0, [%r3, %r6]"}, - {0xfa00, 0x5800, "ldr%b %r0, [%r3, %r6]"}, - // Format 8 - {0xfe00, 0x5200, "strh %r0, [%r3, %r6]"}, - {0xfe00, 0x5600, "ldsb %r0, [%r3, %r6]"}, - {0xfe00, 0x5a00, "ldrh %r0, [%r3, %r6]"}, - {0xfe00, 0x5e00, "ldsh %r0, [%r3, %r6]"}, - // Format 9 - {0xe800, 0x6000, "str%B %r0, [%r3, %p]"}, - {0xe800, 0x6800, "ldr%B %r0, [%r3, %p]"}, - // Format 10 - {0xf800, 0x8000, "strh %r0, [%r3, %e]"}, - {0xf800, 0x8800, "ldrh %r0, [%r3, %e]"}, - // Format 11 - {0xf800, 0x9000, "str %r8, [sp, %w]"}, - {0xf800, 0x9800, "ldr %r8, [sp, %w]"}, - // Format 12 - {0xf800, 0xa000, "add %r8, pc, %w (=%K)"}, - {0xf800, 0xa800, "add %r8, sp, %w"}, - // Format 13 - {0xff00, 0xb000, "add sp, %s"}, - // Format 14 - {0xffff, 0xb500, "push {lr}"}, - {0xff00, 0xb400, "push {%l}"}, - {0xff00, 0xb500, "push {%l,lr}"}, - {0xffff, 0xbd00, "pop {pc}"}, - {0xff00, 0xbd00, "pop {%l,pc}"}, - {0xff00, 0xbc00, "pop {%l}"}, - // Format 15 - {0xf800, 0xc000, "stmia %r8!, {%l}"}, - {0xf800, 0xc800, "ldmia %r8!, {%l}"}, - // Format 17 - {0xff00, 0xdf00, "swi %m"}, - // Format 16 - {0xf000, 0xd000, "b%c %W"}, - // Format 18 - {0xf800, 0xe000, "b %a"}, - // Format 19 - {0xf800, 0xf000, "bl %A"}, - {0xf800, 0xf800, "blh %Z"}, - {0xff00, 0xbe00, "bkpt %O"}, - // Unknown - {0x0000, 0x0000, "[ ??? ]"} -}; - -const Opcodes armOpcodes[] = { - // Undefined - {0x0e000010, 0x06000010, "[ undefined ]"}, - // Branch instructions - {0x0ff000f0, 0x01200010, "bx%c %r0"}, - {0x0f000000, 0x0a000000, "b%c %o"}, - {0x0f000000, 0x0b000000, "bl%c %o"}, - {0x0f000000, 0x0f000000, "swi%c %q"}, - // PSR transfer - {0x0fbf0fff, 0x010f0000, "mrs%c %r3, %p"}, - {0x0db0f000, 0x0120f000, "msr%c %p, %i"}, - // Multiply instructions - {0x0fe000f0, 0x00000090, "mul%c%s %r4, %r0, %r2"}, - {0x0fe000f0, 0x00200090, "mla%c%s %r4, %r0, %r2, %r3"}, - {0x0fa000f0, 0x00800090, "%umull%c%s %r3, %r4, %r0, %r2"}, - {0x0fa000f0, 0x00a00090, "%umlal%c%s %r3, %r4, %r0, %r2"}, - // Load/Store instructions - {0x0fb00ff0, 0x01000090, "swp%c%b %r3, %r0, [%r4]"}, - {0x0fb000f0, 0x01000090, "[ ??? ]"}, - {0x0c100000, 0x04000000, "str%c%b%t %r3, %a"}, - {0x0c100000, 0x04100000, "ldr%c%b%t %r3, %a"}, - {0x0e100090, 0x00000090, "str%c%h %r3, %a"}, - {0x0e100090, 0x00100090, "ldr%c%h %r3, %a"}, - {0x0e100000, 0x08000000, "stm%c%m %r4%l"}, - {0x0e100000, 0x08100000, "ldm%c%m %r4%l"}, - // Data processing - {0x0de00000, 0x00000000, "and%c%s %r3, %r4, %i"}, - {0x0de00000, 0x00200000, "eor%c%s %r3, %r4, %i"}, - {0x0de00000, 0x00400000, "sub%c%s %r3, %r4, %i"}, - {0x0de00000, 0x00600000, "rsb%c%s %r3, %r4, %i"}, - {0x0de00000, 0x00800000, "add%c%s %r3, %r4, %i"}, - {0x0de00000, 0x00a00000, "adc%c%s %r3, %r4, %i"}, - {0x0de00000, 0x00c00000, "sbc%c%s %r3, %r4, %i"}, - {0x0de00000, 0x00e00000, "rsc%c%s %r3, %r4, %i"}, - {0x0de00000, 0x01000000, "tst%c%s %r4, %i"}, - {0x0de00000, 0x01200000, "teq%c%s %r4, %i"}, - {0x0de00000, 0x01400000, "cmp%c%s %r4, %i"}, - {0x0de00000, 0x01600000, "cmn%c%s %r4, %i"}, - {0x0de00000, 0x01800000, "orr%c%s %r3, %r4, %i"}, - {0x0de00000, 0x01a00000, "mov%c%s %r3, %i"}, - {0x0de00000, 0x01c00000, "bic%c%s %r3, %r4, %i"}, - {0x0de00000, 0x01e00000, "mvn%c%s %r3, %i"}, - // Coprocessor operations - {0x0f000010, 0x0e000000, "cdp%c %P, %N, %r3, %R4, %R0%V"}, - {0x0e100000, 0x0c000000, "stc%c%L %P, %r3, %A"}, - {0x0f100010, 0x0e000010, "mcr%c %P, %N, %r3, %R4, %R0%V"}, - {0x0f100010, 0x0e100010, "mrc%c %P, %N, %r3, %R4, %R0%V"}, - // Unknown - {0x00000000, 0x00000000, "[ ??? ]"} -}; - -char* addStr(char *dest, const char *src){ - while (*src){ - *dest++ = *src++; - } - return dest; -} - -char* addHex(char *dest, int siz, u32 val){ - if (siz==0){ - siz = 28; - while ( (((val>>siz)&15)==0) && (siz>=4) ) - siz -= 4; - siz += 4; - } - while (siz>0){ - siz -= 4; - *dest++ = hdig[(val>>siz)&15]; - } - return dest; -} - -int disArm(u32 offset, char *dest, int flags){ - u32 opcode = debuggerReadMemory(offset); - - const Opcodes *sp = armOpcodes; - while( sp->cval != (opcode & sp->mask) ) - sp++; - - if (flags&DIS_VIEW_ADDRESS){ - dest = addHex(dest, 32, offset); - *dest++ = ' '; - } - if (flags&DIS_VIEW_CODE){ - dest = addHex(dest, 32, opcode); - *dest++ = ' '; - } - - const char *src = sp->mnemonic; - while (*src){ - if (*src!='%') - *dest++ = *src++; - else{ - src++; - switch (*src){ - case 'c': - dest = addStr(dest, conditions[opcode>>28]); - break; - case 'r': - dest = addStr(dest, regs[(opcode>>((*(++src)-'0')*4))&15]); - break; - case 'o': - { - *dest++ = '$'; - int off = opcode&0xffffff; - if (off&0x800000) - off |= 0xff000000; - off <<= 2; - dest = addHex(dest, 32, offset+8+off); - } - break; - case 'i': - if (opcode&(1<<25)){ - dest = addStr(dest, "#0x"); - int imm = opcode&0xff; - int rot = (opcode&0xf00)>>7; - int val = (imm<<(32-rot))|(imm>>rot); - dest = addHex(dest, 0, val); - } else{ - dest = addStr(dest, regs[opcode&0x0f]); - int shi = (opcode>>5)&3; - int sdw = (opcode>>7)&0x1f; - if ((sdw==0)&&(shi==3)) - shi = 4; - if ( (sdw) || (opcode&0x10) || (shi)) { - dest = addStr(dest, ", "); - dest = addStr(dest, shifts[shi]); - if (opcode&0x10){ - *dest++ = ' '; - dest = addStr(dest, regs[(opcode>>8)&15]); - } else { - if (sdw==0 && ( (shi==1) || (shi==2) )) - sdw = 32; - if(shi != 4) { - dest = addStr(dest, " #0x"); - dest = addHex(dest, 8, sdw); - } - } - } - } - break; - case 'p': - if (opcode&(1<<22)) - dest = addStr(dest, "spsr"); - else - dest = addStr(dest, "cpsr"); - if(opcode & 0x00F00000) { - *dest++ = '_'; - if(opcode & 0x00080000) - *dest++ = 'f'; - if(opcode & 0x00040000) - *dest++ = 's'; - if(opcode & 0x00020000) - *dest++ = 'x'; - if(opcode & 0x00010000) - *dest++ = 'c'; - } - break; - case 's': - if (opcode&(1<<20)) - *dest++ = 's'; - break; - case 'S': - if (opcode&(1<<22)) - *dest++ = 's'; - break; - case 'u': - if (opcode&(1<<22)) - *dest++ = 's'; - else - *dest++ = 'u'; - break; - case 'b': - if (opcode&(1<<22)) - *dest++ = 'b'; - break; - case 'a': - if ((opcode&0x076f0000)==0x004f0000){ - *dest++ = '['; - *dest++ = '$'; - int adr = offset+8; - int add = (opcode&15)|((opcode>>8)&0xf0); - if (opcode&(1<<23)) - adr += add; - else - adr -= add; - dest = addHex(dest, 32, adr); - *dest++ = ']'; - dest = addStr(dest, " (="); - *dest++ = '$'; - dest = addHex(dest ,32, debuggerReadMemory(adr)); - *dest++=')'; - } - if ((opcode&0x072f0000)==0x050f0000){ - *dest++ = '['; - *dest++ = '$'; - int adr = offset+8; - if (opcode&(1<<23)) - adr += opcode&0xfff; - else - adr -= opcode&0xfff; - dest = addHex(dest, 32, adr); - *dest++ = ']'; - dest = addStr(dest, " (="); - *dest++ = '$'; - dest = addHex(dest ,32, debuggerReadMemory(adr)); - *dest++=')'; - } else { - int reg = (opcode>>16)&15; - *dest++ = '['; - dest = addStr(dest, regs[reg]); - if (!(opcode&(1<<24))) - *dest++ = ']'; - if ( ((opcode&(1<<25))&&(opcode&(1<<26))) || (!(opcode&(1<<22))&&!(opcode&(1<<26))) ){ - dest = addStr(dest, ", "); - if (!(opcode&(1<<23))) - *dest++ = '-'; - dest = addStr(dest, regs[opcode&0x0f]); - int shi = (opcode>>5)&3; - if (opcode&(1<<26)){ - if ( ((opcode>>7)&0x1f) || (opcode&0x10) || (shi==1) || (shi==2)){ - dest = addStr(dest, ", "); - dest = addStr(dest, shifts[shi]); - if (opcode&0x10){ - *dest++ = ' '; - dest = addStr(dest, regs[(opcode>>8)&15]); - } else { - int sdw = (opcode>>7)&0x1f; - if (sdw==0 && ( (shi==1) || (shi==2) )) - sdw = 32; - dest = addStr(dest, " #0x"); - dest = addHex(dest, 8, sdw); - } - } - } - } else { - int off; - if (opcode&(1<<26)) - off = opcode&0xfff; - else - off = (opcode&15)|((opcode>>4)&0xf0); - if (off){ - dest = addStr(dest, ", "); - if (!(opcode&(1<<23))) - *dest++ = '-'; - dest = addStr(dest, "#0x"); - dest = addHex(dest, 0, off); - } - } - if (opcode&(1<<24)){ - *dest++ = ']'; - if (opcode&(1<<21)) - *dest++ = '!'; - } - } - break; - case 't': - if ((opcode&0x01200000)==0x01200000) - *dest++ = 't'; - break; - case 'h': - if (opcode&(1<<6)) - *dest++ = 's'; - if (opcode&(1<<5)) - *dest++ = 'h'; - else - *dest++ = 'b'; - break; - case 'm': - if (((opcode>>16)&15)==13) { - if(opcode & 0x00100000) - dest = addStr(dest, armMultLoadStore[8+((opcode>>23)&3)]); - else - dest = addStr(dest, armMultLoadStore[4+((opcode>>23)&3)]); - } else - dest = addStr(dest, armMultLoadStore[(opcode>>23)&3]); - break; - case 'l': - if (opcode&(1<<21)) - *dest++ = '!'; - dest = addStr(dest, ", {"); - { - int rlst = opcode&0xffff; - int msk = 0; - int not_first = 0; - while (msk<16){ - if (rlst&(1<>8)&15]); - break; - case 'N': - if (opcode&0x10) - dest = addStr(dest, decVals[(opcode>>21)&7]); - else - dest = addStr(dest, decVals[(opcode>>20)&15]); - break; - case 'R': - { - src++; - int reg = 4*(*src-'0'); - *dest++ = 'c'; - dest = addStr(dest, decVals[(opcode>>reg)&15]); - } - break; - case 'V': - { - int val = (opcode>>5)&7; - if (val){ - dest = addStr(dest, ", "); - dest = addStr(dest, decVals[val]); - } - } - break; - case 'L': - if (opcode&(1<<22)) - *dest++ = 'l'; - break; - case 'A': - if ((opcode&0x012f0000)==0x010f0000){ - int adr = offset+8; - int add = (opcode&0xff)<<2; - if (opcode&(1<<23)) - adr += add; - else - adr -= add; - *dest++ = '$'; - addHex(dest, 32, adr); - } else { - *dest++ = '['; - dest = addStr(dest, regs[(opcode>>16)&15]); - if (!(opcode&(1<<24))) - *dest++ = ']'; - int off = (opcode&0xff)<<2; - if (off){ - dest = addStr(dest, ", "); - if (!(opcode&(1<<23))) - *dest++ = '-'; - dest = addStr(dest, "#0x"); - dest = addHex(dest, 0, off); - } - if (opcode&(1<<24)){ - *dest++ = ']'; - if (opcode&(1<<21)) - *dest++ = '!'; - } - } - break; - } - src++; - } - } - *dest++ = 0; - - return 4; -} - -int disThumb(u32 offset, char *dest, int flags){ - u32 opcode = debuggerReadHalfWord(offset); - - const Opcodes *sp = thumbOpcodes; - int ret = 2; - while( sp->cval != (opcode & sp->mask) ) - sp++; - - if (flags&DIS_VIEW_ADDRESS){ - dest = addHex(dest, 32, offset); - *dest++ = ' '; - } - if (flags&DIS_VIEW_CODE){ - dest = addHex(dest, 16, opcode); - *dest++ = ' '; - } - - const char *src = sp->mnemonic; - while (*src){ - if (*src!='%') - *dest++ = *src++; - else { - src++; - switch (*src){ - case 'r': - src++; - dest = addStr(dest, regs[(opcode>>(*src-'0'))&7]); - break; - case 'o': - dest = addStr(dest, "#0x"); - { - int val = (opcode>>6)&0x1f; - dest = addHex(dest, 8, val); - } - break; - case 'p': - dest = addStr(dest, "#0x"); - { - int val = (opcode>>6)&0x1f; - if (!(opcode&(1<<12))) - val <<= 2; - dest = addHex(dest, 0, val); - } - break; - case 'e': - dest = addStr(dest, "#0x"); - dest = addHex(dest, 0, ((opcode>>6)&0x1f)<<1); - break; - case 'i': - dest = addStr(dest, "#0x"); - dest = addHex(dest, 0, (opcode>>6)&7); - break; - case 'h': - { - src++; - int reg = (opcode>>(*src-'0'))&7; - src++; - if (opcode&(1<<(*src-'0'))) - reg += 8; - dest = addStr(dest, regs[reg]); - } - break; - case 'O': - dest = addStr(dest, "#0x"); - dest = addHex(dest, 0, (opcode&0xff)); - break; - case 'I': - *dest++ = '$'; - dest = addHex(dest, 32, (offset&0xfffffffc)+4+((opcode&0xff)<<2)); - break; - case 'J': - { - u32 value = debuggerReadMemory((offset&0xfffffffc)+4+ - ((opcode & 0xff)<<2)); - *dest++ = '$'; - dest = addHex(dest, 32, value); - const char *s = elfGetAddressSymbol(value); - if(*s) { - *dest++ = ' '; - dest = addStr(dest, s); - } - } - break; - case 'K': - { - u32 value = (offset&0xfffffffc)+4+((opcode & 0xff)<<2); - *dest++ = '$'; - dest = addHex(dest, 32, value); - const char *s = elfGetAddressSymbol(value); - if(*s) { - *dest++ = ' '; - dest = addStr(dest, s); - } - } - break; - case 'b': - if (opcode&(1<<10)) - *dest++ = 'b'; - break; - case 'B': - if (opcode&(1<<12)) - *dest++ = 'b'; - break; - case 'w': - dest = addStr(dest, "#0x"); - dest = addHex(dest, 0, (opcode&0xff)<<2); - break; - case 'W': - *dest++ = '$'; - { - int add = opcode&0xff; - if (add&0x80) - add |= 0xffffff00; - dest = addHex(dest, 32, (offset&0xfffffffe)+4+(add<<1)); - } - break; - case 'c': - dest = addStr(dest, conditions[(opcode>>8)&15]); - break; - case 's': - if (opcode&(1<<7)) - *dest++ = '-'; - dest = addStr(dest, "#0x"); - dest = addHex(dest, 0, (opcode&0x7f)<<2); - break; - case 'l': - { - int rlst = opcode&0xff; - int msk = 0; - int not_first = 0; - while (msk<8){ - if (rlst&(1< + +#include "System.h" +#include "Port.h" +#include "GBA.h" +#include "armdis.h" +#include "elf.h" + +struct Opcodes + { + u32 mask; + u32 cval; + char *mnemonic; + }; + +#define debuggerReadMemory(addr) \ + READ32LE(((u32*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) + +#define debuggerReadHalfWord(addr) \ + READ16LE(((u16*)&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) + +#define debuggerReadByte(addr) \ + map[(addr)>>24].address[(addr) & map[(addr)>>24].mask] + +const char hdig[] = "0123456789abcdef"; + +const char *decVals[16] = + { + "0","1","2","3","4","5","6","7","8", + "9","10","11","12","13","14","15" + }; + +const char *regs[16] = + { + "r0","r1","r2","r3","r4","r5","r6","r7", + "r8","r9","r10","r11","r12","sp","lr","pc" + }; + +const char *conditions[16] = + { + "eq","ne","cs","cc","mi","pl","vs","vc", + "hi","ls","ge","lt","gt","le","","nv" + }; + +const char *shifts[5] = + { + "lsl","lsr","asr","ror","rrx" + }; + +const char *armMultLoadStore[12] = + { + // non-stack + "da","ia","db","ib", + // stack store + "ed","ea","fd","fa", + // stack load + "fa","fd","ea","ed" + }; + +const Opcodes thumbOpcodes[] = + { + // Format 1 + {0xf800, 0x0000, "lsl %r0, %r3, %o"}, + {0xf800, 0x0800, "lsr %r0, %r3, %o"}, + {0xf800, 0x1000, "asr %r0, %r3, %o"}, + // Format 2 + {0xfe00, 0x1800, "add %r0, %r3, %r6"}, + {0xfe00, 0x1a00, "sub %r0, %r3, %r6"}, + {0xfe00, 0x1c00, "add %r0, %r3, %i"}, + {0xfe00, 0x1e00, "sub %r0, %r3, %i"}, + // Format 3 + {0xf800, 0x2000, "mov %r8, %O"}, + {0xf800, 0x2800, "cmp %r8, %O"}, + {0xf800, 0x3000, "add %r8, %O"}, + {0xf800, 0x3800, "sub %r8, %O"}, + // Format 4 + {0xffc0, 0x4000, "and %r0, %r3"}, + {0xffc0, 0x4040, "eor %r0, %r3"}, + {0xffc0, 0x4080, "lsl %r0, %r3"}, + {0xffc0, 0x40c0, "lsr %r0, %r3"}, + {0xffc0, 0x4100, "asr %r0, %r3"}, + {0xffc0, 0x4140, "adc %r0, %r3"}, + {0xffc0, 0x4180, "sbc %r0, %r3"}, + {0xffc0, 0x41c0, "ror %r0, %r3"}, + {0xffc0, 0x4200, "tst %r0, %r3"}, + {0xffc0, 0x4240, "neg %r0, %r3"}, + {0xffc0, 0x4280, "cmp %r0, %r3"}, + {0xffc0, 0x42c0, "cmn %r0, %r3"}, + {0xffc0, 0x4300, "orr %r0, %r3"}, + {0xffc0, 0x4340, "mul %r0, %r3"}, + {0xffc0, 0x4380, "bic %r0, %r3"}, + {0xffc0, 0x43c0, "mvn %r0, %r3"}, + // Format 5 + {0xff80, 0x4700, "bx %h36"}, + {0xfcc0, 0x4400, "[ ??? ]"}, + {0xff00, 0x4400, "add %h07, %h36"}, + {0xff00, 0x4500, "cmp %h07, %h36"}, + {0xff00, 0x4600, "mov %h07, %h36"}, + // Format 6 + {0xf800, 0x4800, "ldr %r8, [%I] (=%J)"}, + // Format 7 + {0xfa00, 0x5000, "str%b %r0, [%r3, %r6]"}, + {0xfa00, 0x5800, "ldr%b %r0, [%r3, %r6]"}, + // Format 8 + {0xfe00, 0x5200, "strh %r0, [%r3, %r6]"}, + {0xfe00, 0x5600, "ldrh %r0, [%r3, %r6]"}, + {0xfe00, 0x5a00, "ldsb %r0, [%r3, %r6]"}, + {0xfe00, 0x5e00, "ldsh %r0, [%r3, %r6]"}, + // Format 9 + {0xe800, 0x6000, "str%B %r0, [%r3, %p]"}, + {0xe800, 0x6800, "ldr%B %r0, [%r3, %p]"}, + // Format 10 + {0xf800, 0x8000, "strh %r0, [%r3, %e]"}, + {0xf800, 0x8800, "ldrh %r0, [%r3, %e]"}, + // Format 11 + {0xf800, 0x9000, "str %r8, [sp, %w]"}, + {0xf800, 0x9800, "ldr %r8, [sp, %w]"}, + // Format 12 + {0xf800, 0xa000, "add %r8, pc, %w (=%K)"}, + {0xf800, 0xa800, "add %r8, sp, %w"}, + // Format 13 + {0xff00, 0xb000, "add sp, %s"}, + // Format 14 + {0xffff, 0xb500, "push {lr}"}, + {0xff00, 0xb400, "push {%l}"}, + {0xff00, 0xb500, "push {%l,lr}"}, + {0xffff, 0xbd00, "pop {pc}"}, + {0xff00, 0xbd00, "pop {%l,pc}"}, + {0xff00, 0xbc00, "pop {%l}"}, + // Format 15 + {0xf800, 0xc000, "stmia %r8!, {%l}"}, + {0xf800, 0xc800, "ldmia %r8!, {%l}"}, + // Format 17 + {0xff00, 0xdf00, "swi %m"}, + // Format 16 + {0xf000, 0xd000, "b%c %W"}, + // Format 18 + {0xf800, 0xe000, "b %a"}, + // Format 19 + {0xf800, 0xf000, "bl %A"}, + {0xf800, 0xf800, "blh %Z"}, + {0xff00, 0xbe00, "bkpt %O"}, + // Unknown + {0x0000, 0x0000, "[ ??? ]"} + }; + +const Opcodes armOpcodes[] = + { + // Undefined + {0x0e000010, 0x06000010, "[ undefined ]"}, + // Branch instructions + {0x0ff000f0, 0x01200010, "bx%c %r0"}, + {0x0f000000, 0x0a000000, "b%c %o"}, + {0x0f000000, 0x0b000000, "bl%c %o"}, + {0x0f000000, 0x0f000000, "swi%c %q"}, + // PSR transfer + {0x0fbf0fff, 0x010f0000, "mrs%c %r3, %p"}, + {0x0db0f000, 0x0120f000, "msr%c %p, %i"}, + // Multiply instructions + {0x0fe000f0, 0x00000090, "mul%c%s %r4, %r0, %r2"}, + {0x0fe000f0, 0x00200090, "mla%c%s %r4, %r0, %r2, %r3"}, + {0x0fa000f0, 0x00800090, "%umull%c%s %r3, %r4, %r0, %r2"}, + {0x0fa000f0, 0x00a00090, "%umlal%c%s %r3, %r4, %r0, %r2"}, + // Load/Store instructions + {0x0fb00ff0, 0x01000090, "swp%c%b %r3, %r0, [%r4]"}, + {0x0fb000f0, 0x01000090, "[ ??? ]"}, + {0x0c100000, 0x04000000, "str%c%b%t %r3, %a"}, + {0x0c100000, 0x04100000, "ldr%c%b%t %r3, %a"}, + {0x0e100090, 0x00000090, "str%c%h %r3, %a"}, + {0x0e100090, 0x00100090, "ldr%c%h %r3, %a"}, + {0x0e100000, 0x08000000, "stm%c%m %r4%l"}, + {0x0e100000, 0x08100000, "ldm%c%m %r4%l"}, + // Data processing + {0x0de00000, 0x00000000, "and%c%s %r3, %r4, %i"}, + {0x0de00000, 0x00200000, "eor%c%s %r3, %r4, %i"}, + {0x0de00000, 0x00400000, "sub%c%s %r3, %r4, %i"}, + {0x0de00000, 0x00600000, "rsb%c%s %r3, %r4, %i"}, + {0x0de00000, 0x00800000, "add%c%s %r3, %r4, %i"}, + {0x0de00000, 0x00a00000, "adc%c%s %r3, %r4, %i"}, + {0x0de00000, 0x00c00000, "sbc%c%s %r3, %r4, %i"}, + {0x0de00000, 0x00e00000, "rsc%c%s %r3, %r4, %i"}, + {0x0de00000, 0x01000000, "tst%c%s %r4, %i"}, + {0x0de00000, 0x01200000, "teq%c%s %r4, %i"}, + {0x0de00000, 0x01400000, "cmp%c%s %r4, %i"}, + {0x0de00000, 0x01600000, "cmn%c%s %r4, %i"}, + {0x0de00000, 0x01800000, "orr%c%s %r3, %r4, %i"}, + {0x0de00000, 0x01a00000, "mov%c%s %r3, %i"}, + {0x0de00000, 0x01c00000, "bic%c%s %r3, %r4, %i"}, + {0x0de00000, 0x01e00000, "mvn%c%s %r3, %i"}, + // Coprocessor operations + {0x0f000010, 0x0e000000, "cdp%c %P, %N, %r3, %R4, %R0%V"}, + {0x0e100000, 0x0c000000, "stc%c%L %P, %r3, %A"}, + {0x0f100010, 0x0e000010, "mcr%c %P, %N, %r3, %R4, %R0%V"}, + {0x0f100010, 0x0e100010, "mrc%c %P, %N, %r3, %R4, %R0%V"}, + // Unknown + {0x00000000, 0x00000000, "[ ??? ]"} + }; + +char* addStr(char *dest, const char *src) +{ + while (*src) + { + *dest++ = *src++; + } + return dest; +} + +char* addHex(char *dest, int siz, u32 val) +{ + if (siz==0) + { + siz = 28; + while ( (((val>>siz)&15)==0) && (siz>=4) ) + siz -= 4; + siz += 4; + } + while (siz>0) + { + siz -= 4; + *dest++ = hdig[(val>>siz)&15]; + } + return dest; +} + +int disArm(u32 offset, char *dest, int flags) +{ + u32 opcode = debuggerReadMemory(offset); + + const Opcodes *sp = armOpcodes; + while( sp->cval != (opcode & sp->mask) ) + sp++; + + if (flags&DIS_VIEW_ADDRESS) + { + dest = addHex(dest, 32, offset); + *dest++ = ' '; + } + if (flags&DIS_VIEW_CODE) + { + dest = addHex(dest, 32, opcode); + *dest++ = ' '; + } + + char *src = sp->mnemonic; + while (*src) + { + if (*src!='%') + *dest++ = *src++; + else + { + src++; + switch (*src) + { + case 'c': + dest = addStr(dest, conditions[opcode>>28]); + break; + case 'r': + dest = addStr(dest, regs[(opcode>>((*(++src)-'0')*4))&15]); + break; + case 'o': + { + *dest++ = '$'; + int off = opcode&0xffffff; + if (off&0x800000) + off |= 0xff000000; + off <<= 2; + dest = addHex(dest, 32, offset+8+off); + } + break; + case 'i': + if (opcode&(1<<25)) + { + dest = addStr(dest, "#0x"); + int imm = opcode&0xff; + int rot = (opcode&0xf00)>>7; + int val = (imm<<(32-rot))|(imm>>rot); + dest = addHex(dest, 0, val); + } + else + { + dest = addStr(dest, regs[opcode&0x0f]); + int shi = (opcode>>5)&3; + int sdw = (opcode>>7)&0x1f; + if ((sdw==0)&&(shi==3)) + shi = 4; + if ( (sdw) || (opcode&0x10) || (shi)) + { + dest = addStr(dest, ", "); + dest = addStr(dest, shifts[shi]); + if (opcode&0x10) + { + *dest++ = ' '; + dest = addStr(dest, regs[(opcode>>8)&15]); + } + else + { + if (sdw==0 && ( (shi==1) || (shi==2) )) + sdw = 32; + if(shi != 4) + { + dest = addStr(dest, " #0x"); + dest = addHex(dest, 8, sdw); + } + } + } + } + break; + case 'p': + if (opcode&(1<<22)) + dest = addStr(dest, "spsr"); + else + dest = addStr(dest, "cpsr"); + if(opcode & 0x00F00000) + { + *dest++ = '_'; + if(opcode & 0x00080000) + *dest++ = 'f'; + if(opcode & 0x00040000) + *dest++ = 's'; + if(opcode & 0x00020000) + *dest++ = 'x'; + if(opcode & 0x00010000) + *dest++ = 'c'; + } + break; + case 's': + if (opcode&(1<<20)) + *dest++ = 's'; + break; + case 'S': + if (opcode&(1<<22)) + *dest++ = 's'; + break; + case 'u': + if (opcode&(1<<22)) + *dest++ = 's'; + else + *dest++ = 'u'; + break; + case 'b': + if (opcode&(1<<22)) + *dest++ = 'b'; + break; + case 'a': + if ((opcode&0x076f0000)==0x004f0000) + { + *dest++ = '['; + *dest++ = '$'; + int adr = offset+8; + int add = (opcode&15)|((opcode>>8)&0xf0); + if (opcode&(1<<23)) + adr += add; + else + adr -= add; + dest = addHex(dest, 32, adr); + *dest++ = ']'; + dest = addStr(dest, " (="); + *dest++ = '$'; + dest = addHex(dest ,32, debuggerReadMemory(adr)); + *dest++=')'; + } + if ((opcode&0x072f0000)==0x050f0000) + { + *dest++ = '['; + *dest++ = '$'; + int adr = offset+8; + if (opcode&(1<<23)) + adr += opcode&0xfff; + else + adr -= opcode&0xfff; + dest = addHex(dest, 32, adr); + *dest++ = ']'; + dest = addStr(dest, " (="); + *dest++ = '$'; + dest = addHex(dest ,32, debuggerReadMemory(adr)); + *dest++=')'; + } + else + { + int reg = (opcode>>16)&15; + *dest++ = '['; + dest = addStr(dest, regs[reg]); + if (!(opcode&(1<<24))) + *dest++ = ']'; + if ( ((opcode&(1<<25))&&(opcode&(1<<26))) || (!(opcode&(1<<22))&&!(opcode&(1<<26))) ) + { + dest = addStr(dest, ", "); + if (!(opcode&(1<<23))) + *dest++ = '-'; + dest = addStr(dest, regs[opcode&0x0f]); + int shi = (opcode>>5)&3; + if (opcode&(1<<26)) + { + if ( ((opcode>>7)&0x1f) || (opcode&0x10) || (shi==1) || (shi==2)) + { + dest = addStr(dest, ", "); + dest = addStr(dest, shifts[shi]); + if (opcode&0x10) + { + *dest++ = ' '; + dest = addStr(dest, regs[(opcode>>8)&15]); + } + else + { + int sdw = (opcode>>7)&0x1f; + if (sdw==0 && ( (shi==1) || (shi==2) )) + sdw = 32; + dest = addStr(dest, " #0x"); + dest = addHex(dest, 8, sdw); + } + } + } + } + else + { + int off; + if (opcode&(1<<26)) + off = opcode&0xfff; + else + off = (opcode&15)|((opcode>>4)&0xf0); + if (off) + { + dest = addStr(dest, ", "); + if (!(opcode&(1<<23))) + *dest++ = '-'; + dest = addStr(dest, "#0x"); + dest = addHex(dest, 0, off); + } + } + if (opcode&(1<<24)) + { + *dest++ = ']'; + if (opcode&(1<<21)) + *dest++ = '!'; + } + } + break; + case 't': + if ((opcode&0x01200000)==0x01200000) + *dest++ = 't'; + break; + case 'h': + if (opcode&(1<<6)) + *dest++ = 's'; + if (opcode&(1<<5)) + *dest++ = 'h'; + else + *dest++ = 'b'; + break; + case 'm': + if (((opcode>>16)&15)==13) + { + if(opcode & 0x00100000) + dest = addStr(dest, armMultLoadStore[8+((opcode>>23)&3)]); + else + dest = addStr(dest, armMultLoadStore[4+((opcode>>23)&3)]); + } + else + dest = addStr(dest, armMultLoadStore[(opcode>>23)&3]); + break; + case 'l': + if (opcode&(1<<21)) + *dest++ = '!'; + dest = addStr(dest, ", {"); + { + int rlst = opcode&0xffff; + int msk = 0; + int not_first = 0; + while (msk<16) + { + if (rlst&(1<>8)&15]); + break; + case 'N': + if (opcode&0x10) + dest = addStr(dest, decVals[(opcode>>21)&7]); + else + dest = addStr(dest, decVals[(opcode>>20)&15]); + break; + case 'R': + { + src++; + int reg = 4*(*src-'0'); + *dest++ = 'c'; + dest = addStr(dest, decVals[(opcode>>reg)&15]); + } + break; + case 'V': + { + int val = (opcode>>5)&7; + if (val) + { + dest = addStr(dest, ", "); + dest = addStr(dest, decVals[val]); + } + } + break; + case 'L': + if (opcode&(1<<22)) + *dest++ = 'l'; + break; + case 'A': + if ((opcode&0x012f0000)==0x010f0000) + { + int adr = offset+8; + int add = (opcode&0xff)<<2; + if (opcode&(1<<23)) + adr += add; + else + adr -= add; + *dest++ = '$'; + addHex(dest, 32, adr); + } + else + { + *dest++ = '['; + dest = addStr(dest, regs[(opcode>>16)&15]); + if (!(opcode&(1<<24))) + *dest++ = ']'; + int off = (opcode&0xff)<<2; + if (off) + { + dest = addStr(dest, ", "); + if (!(opcode&(1<<23))) + *dest++ = '-'; + dest = addStr(dest, "#0x"); + dest = addHex(dest, 0, off); + } + if (opcode&(1<<24)) + { + *dest++ = ']'; + if (opcode&(1<<21)) + *dest++ = '!'; + } + } + break; + } + src++; + } + } + *dest++ = 0; + + return 4; +} + +int disThumb(u32 offset, char *dest, int flags) +{ + u32 opcode = debuggerReadHalfWord(offset); + + const Opcodes *sp = thumbOpcodes; + int ret = 2; + while( sp->cval != (opcode & sp->mask) ) + sp++; + + if (flags&DIS_VIEW_ADDRESS) + { + dest = addHex(dest, 32, offset); + *dest++ = ' '; + } + if (flags&DIS_VIEW_CODE) + { + dest = addHex(dest, 16, opcode); + *dest++ = ' '; + } + + char *src = sp->mnemonic; + while (*src) + { + if (*src!='%') + *dest++ = *src++; + else + { + src++; + switch (*src) + { + case 'r': + src++; + dest = addStr(dest, regs[(opcode>>(*src-'0'))&7]); + break; + case 'o': + dest = addStr(dest, "#0x"); + { + int val = (opcode>>6)&0x1f; + dest = addHex(dest, 8, val); + } + break; + case 'p': + dest = addStr(dest, "#0x"); + { + int val = (opcode>>6)&0x1f; + if (!(opcode&(1<<12))) + val <<= 2; + dest = addHex(dest, 0, val); + } + break; + case 'e': + dest = addStr(dest, "#0x"); + dest = addHex(dest, 0, ((opcode>>6)&0x1f)<<1); + break; + case 'i': + dest = addStr(dest, "#0x"); + dest = addHex(dest, 0, (opcode>>6)&7); + break; + case 'h': + { + src++; + int reg = (opcode>>(*src-'0'))&7; + src++; + if (opcode&(1<<(*src-'0'))) + reg += 8; + dest = addStr(dest, regs[reg]); + } + break; + case 'O': + dest = addStr(dest, "#0x"); + dest = addHex(dest, 0, (opcode&0xff)); + break; + case 'I': + *dest++ = '$'; + dest = addHex(dest, 32, (offset&0xfffffffc)+4+((opcode&0xff)<<2)); + break; + case 'J': + { + u32 value = debuggerReadMemory((offset&0xfffffffc)+4+ + ((opcode & 0xff)<<2)); + *dest++ = '$'; + dest = addHex(dest, 32, value); + char *s = elfGetAddressSymbol(value); + if(*s) + { + *dest++ = ' '; + dest = addStr(dest, s); + } + } + break; + case 'K': + { + u32 value = (offset&0xfffffffc)+4+((opcode & 0xff)<<2); + *dest++ = '$'; + dest = addHex(dest, 32, value); + char *s = elfGetAddressSymbol(value); + if(*s) + { + *dest++ = ' '; + dest = addStr(dest, s); + } + } + break; + case 'b': + if (opcode&(1<<10)) + *dest++ = 'b'; + break; + case 'B': + if (opcode&(1<<12)) + *dest++ = 'b'; + break; + case 'w': + dest = addStr(dest, "#0x"); + dest = addHex(dest, 0, (opcode&0xff)<<2); + break; + case 'W': + *dest++ = '$'; + { + int add = opcode&0xff; + if (add&0x80) + add |= 0xffffff00; + dest = addHex(dest, 32, (offset&0xfffffffe)+4+(add<<1)); + } + break; + case 'c': + dest = addStr(dest, conditions[(opcode>>8)&15]); + break; + case 's': + if (opcode&(1<<7)) + *dest++ = '-'; + dest = addStr(dest, "#0x"); + dest = addHex(dest, 0, (opcode&0x7f)<<2); + break; + case 'l': + { + int rlst = opcode&0xff; + int msk = 0; + int not_first = 0; + while (msk<8) + { + if (rlst&(1<>3) << systemRedShift |\ + ((g) >> 3) << systemGreenShift |\ + ((b) >> 3) << systemBlueShift\ + +static void fill_rgb_row_16(u16 *from, int src_width, u8 *row, int width) +{ + u8 *copy_start = row + src_width*3; + u8 *all_stop = row + width*3; + while (row < copy_start) + { + u16 color = *from++; + *row++ = ((color >> systemRedShift) & 0x1f) << 3; + *row++ = ((color >> systemGreenShift) & 0x1f) << 3; + *row++ = ((color >> systemBlueShift) & 0x1f) << 3; + } + // any remaining elements to be written to 'row' are a replica of the + // preceding pixel + u8 *p = row-3; + while (row < all_stop) + { + // we're guaranteed three elements per pixel; could unroll the loop + // further, especially with a Duff's Device, but the gains would be + // probably limited (judging by profiler output) + *row++ = *p++; + *row++ = *p++; + *row++ = *p++; + } +} + +static void fill_rgb_row_32(u32 *from, int src_width, u8 *row, int width) +{ + u8 *copy_start = row + src_width*3; + u8 *all_stop = row + width*3; + while (row < copy_start) + { + u32 color = *from++; + *row++ = ((color >> systemRedShift) & 0x1f) << 3; + *row++ = ((color >> systemGreenShift) & 0x1f) << 3; + *row++ = ((color >> systemBlueShift) & 0x1f) << 3; + } + // any remaining elements to be written to 'row' are a replica of the + // preceding pixel + u8 *p = row-3; + while (row < all_stop) + { + // we're guaranteed three elements per pixel; could unroll the loop + // further, especially with a Duff's Device, but the gains would be + // probably limited (judging by profiler output) + *row++ = *p++; + *row++ = *p++; + *row++ = *p++; + } +} + +void Bilinear(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u16 *to = (u16 *)dstPtr; + u16 *to_odd = (u16 *)(dstPtr + dstPitch); + + int from_width = width; + u16 *from = (u16 *)srcPtr; + fill_rgb_row_16(from, from_width, rgb_row_cur, width+1); + + for(int y = 0; y < height; y++) + { + u16 *from_orig = from; + u16 *to_orig = to; + + if (y+1 < height) + fill_rgb_row_16(from+width+2, from_width, rgb_row_next, + width+1); + else + fill_rgb_row_16(from, from_width, rgb_row_next, width+1); + + // every pixel in the src region, is extended to 4 pixels in the + // destination, arranged in a square 'quad'; if the current src + // pixel is 'a', then in what follows 'b' is the src pixel to the + // right, 'c' is the src pixel below, and 'd' is the src pixel to + // the right and down + u8 *cur_row = rgb_row_cur; + u8 *next_row = rgb_row_next; + u8 *ar = cur_row++; + u8 *ag = cur_row++; + u8 *ab = cur_row++; + u8 *cr = next_row++; + u8 *cg = next_row++; + u8 *cb = next_row++; + for(int x=0; x < width; x++) + { + u8 *br = cur_row++; + u8 *bg = cur_row++; + u8 *bb = cur_row++; + u8 *dr = next_row++; + u8 *dg = next_row++; + u8 *db = next_row++; + + // upper left pixel in quad: just copy it in + *to++ = RGB(*ar, *ag, *ab); + + // upper right + *to++ = RGB((*ar+*br)>>1, (*ag+*bg)>>1, (*ab+*bb)>>1); + + // lower left + *to_odd++ = RGB((*ar+*cr)>>1, (*ag+*cg)>>1, (*ab+*cb)>>1); + + // lower right + *to_odd++ = RGB((*ar+*br+*cr+*dr)>>2, + (*ag+*bg+*cg+*dg)>>2, + (*ab+*bb+*cb+*db)>>2); + + // 'b' becomes 'a', 'd' becomes 'c' + ar = br; + ag = bg; + ab = bb; + cr = dr; + cg = dg; + cb = db; + } + + // the "next" rgb row becomes the current; the old current rgb row is + // recycled and serves as the new "next" row + u8 *temp; + temp = rgb_row_cur; + rgb_row_cur = rgb_row_next; + rgb_row_next = temp; + + // update the pointers for start of next pair of lines + from = (u16 *)((u8 *)from_orig + srcPitch); + to = (u16 *)((u8 *)to_orig + (dstPitch << 1)); + to_odd = (u16 *)((u8 *)to + dstPitch); + } +} + +void BilinearPlus(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u16 *to = (u16 *)dstPtr; + u16 *to_odd = (u16 *)(dstPtr + dstPitch); + + int from_width = width; + u16 *from = (u16 *)srcPtr; + fill_rgb_row_16(from, from_width, rgb_row_cur, width+1); + + for(int y = 0; y < height; y++) + { + u16 *from_orig = from; + u16 *to_orig = to; + + if (y+1 < height) + fill_rgb_row_16(from+width+2, from_width, rgb_row_next, + width+1); + else + fill_rgb_row_16(from, from_width, rgb_row_next, width+1); + + // every pixel in the src region, is extended to 4 pixels in the + // destination, arranged in a square 'quad'; if the current src + // pixel is 'a', then in what follows 'b' is the src pixel to the + // right, 'c' is the src pixel below, and 'd' is the src pixel to + // the right and down + u8 *cur_row = rgb_row_cur; + u8 *next_row = rgb_row_next; + u8 *ar = cur_row++; + u8 *ag = cur_row++; + u8 *ab = cur_row++; + u8 *cr = next_row++; + u8 *cg = next_row++; + u8 *cb = next_row++; + for(int x=0; x < width; x++) + { + u8 *br = cur_row++; + u8 *bg = cur_row++; + u8 *bb = cur_row++; + u8 *dr = next_row++; + u8 *dg = next_row++; + u8 *db = next_row++; + + // upper left pixel in quad: just copy it in + //*to++ = manip.rgb(*ar, *ag, *ab); +#ifdef USE_ORIGINAL_BILINEAR_PLUS + *to++ = RGB( + (((*ar)<<2) +((*ar)) + (*cr+*br+*br) )>> 3, + (((*ag)<<2) +((*ag)) + (*cg+*bg+*bg) )>> 3, + (((*ab)<<2) +((*ab)) + (*cb+*bb+*bb) )>> 3); +#else + *to++ = RGB( + (((*ar)<<3) +((*ar)<<1) + (*cr+*br+*br+*cr) )>> 4, + (((*ag)<<3) +((*ag)<<1) + (*cg+*bg+*bg+*cg) )>> 4, + (((*ab)<<3) +((*ab)<<1) + (*cb+*bb+*bb+*cb) )>> 4); +#endif + + // upper right + *to++ = RGB((*ar+*br)>>1, (*ag+*bg)>>1, (*ab+*bb)>>1); + + // lower left + *to_odd++ = RGB((*ar+*cr)>>1, (*ag+*cg)>>1, (*ab+*cb)>>1); + + // lower right + *to_odd++ = RGB((*ar+*br+*cr+*dr)>>2, + (*ag+*bg+*cg+*dg)>>2, + (*ab+*bb+*cb+*db)>>2); + + // 'b' becomes 'a', 'd' becomes 'c' + ar = br; + ag = bg; + ab = bb; + cr = dr; + cg = dg; + cb = db; + } + + // the "next" rgb row becomes the current; the old current rgb row is + // recycled and serves as the new "next" row + u8 *temp; + temp = rgb_row_cur; + rgb_row_cur = rgb_row_next; + rgb_row_next = temp; + + // update the pointers for start of next pair of lines + from = (u16 *)((u8 *)from_orig + srcPitch); + to = (u16 *)((u8 *)to_orig + (dstPitch << 1)); + to_odd = (u16 *)((u8 *)to + dstPitch); + } +} + +void Bilinear32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u32 *to = (u32 *)dstPtr; + u32 *to_odd = (u32 *)(dstPtr + dstPitch); + + int from_width = width; + if(width+1 < from_width) + from_width = width+1; + u32 *from = (u32 *)srcPtr; + fill_rgb_row_32(from, from_width, rgb_row_cur, width+1); + + for(int y = 0; y < height; y++) + { + u32 *from_orig = from; + u32 *to_orig = to; + + if (y+1 < height) + fill_rgb_row_32(from+width+1, from_width, rgb_row_next, + width+1); + else + fill_rgb_row_32(from, from_width, rgb_row_next, width+1); + + // every pixel in the src region, is extended to 4 pixels in the + // destination, arranged in a square 'quad'; if the current src + // pixel is 'a', then in what follows 'b' is the src pixel to the + // right, 'c' is the src pixel below, and 'd' is the src pixel to + // the right and down + u8 *cur_row = rgb_row_cur; + u8 *next_row = rgb_row_next; + u8 *ar = cur_row++; + u8 *ag = cur_row++; + u8 *ab = cur_row++; + u8 *cr = next_row++; + u8 *cg = next_row++; + u8 *cb = next_row++; + for(int x=0; x < width; x++) + { + u8 *br = cur_row++; + u8 *bg = cur_row++; + u8 *bb = cur_row++; + u8 *dr = next_row++; + u8 *dg = next_row++; + u8 *db = next_row++; + + // upper left pixel in quad: just copy it in + *to++ = RGB(*ar, *ag, *ab); + + // upper right + *to++ = RGB((*ar+*br)>>1, (*ag+*bg)>>1, (*ab+*bb)>>1); + + // lower left + *to_odd++ = RGB((*ar+*cr)>>1, (*ag+*cg)>>1, (*ab+*cb)>>1); + + // lower right + *to_odd++ = RGB((*ar+*br+*cr+*dr)>>2, + (*ag+*bg+*cg+*dg)>>2, + (*ab+*bb+*cb+*db)>>2); + + // 'b' becomes 'a', 'd' becomes 'c' + ar = br; + ag = bg; + ab = bb; + cr = dr; + cg = dg; + cb = db; + } + + // the "next" rgb row becomes the current; the old current rgb row is + // recycled and serves as the new "next" row + u8 *temp; + temp = rgb_row_cur; + rgb_row_cur = rgb_row_next; + rgb_row_next = temp; + + // update the pointers for start of next pair of lines + from = (u32 *)((u8 *)from_orig + srcPitch); + to = (u32 *)((u8 *)to_orig + (dstPitch << 1)); + to_odd = (u32 *)((u8 *)to + dstPitch); + } +} + +void BilinearPlus32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u32 *to = (u32 *)dstPtr; + u32 *to_odd = (u32 *)(dstPtr + dstPitch); + + int from_width = width; + if(width+1 < from_width) + from_width = width+1; + u32 *from = (u32 *)srcPtr; + fill_rgb_row_32(from, from_width, rgb_row_cur, width+1); + + for(int y = 0; y < height; y++) + { + u32 *from_orig = from; + u32 *to_orig = to; + + if (y+1 < height) + fill_rgb_row_32(from+width+1, from_width, rgb_row_next, + width+1); + else + fill_rgb_row_32(from, from_width, rgb_row_next, width+1); + + // every pixel in the src region, is extended to 4 pixels in the + // destination, arranged in a square 'quad'; if the current src + // pixel is 'a', then in what follows 'b' is the src pixel to the + // right, 'c' is the src pixel below, and 'd' is the src pixel to + // the right and down + u8 *cur_row = rgb_row_cur; + u8 *next_row = rgb_row_next; + u8 *ar = cur_row++; + u8 *ag = cur_row++; + u8 *ab = cur_row++; + u8 *cr = next_row++; + u8 *cg = next_row++; + u8 *cb = next_row++; + for(int x=0; x < width; x++) + { + u8 *br = cur_row++; + u8 *bg = cur_row++; + u8 *bb = cur_row++; + u8 *dr = next_row++; + u8 *dg = next_row++; + u8 *db = next_row++; + + // upper left pixel in quad: just copy it in + //*to++ = manip.rgb(*ar, *ag, *ab); +#ifdef USE_ORIGINAL_BILINEAR_PLUS + *to++ = RGB( + (((*ar)<<2) +((*ar)) + (*cr+*br+*br) )>> 3, + (((*ag)<<2) +((*ag)) + (*cg+*bg+*bg) )>> 3, + (((*ab)<<2) +((*ab)) + (*cb+*bb+*bb) )>> 3); +#else + *to++ = RGB( + (((*ar)<<3) +((*ar)<<1) + (*cr+*br+*br+*cr) )>> 4, + (((*ag)<<3) +((*ag)<<1) + (*cg+*bg+*bg+*cg) )>> 4, + (((*ab)<<3) +((*ab)<<1) + (*cb+*bb+*bb+*cb) )>> 4); +#endif + + // upper right + *to++ = RGB((*ar+*br)>>1, (*ag+*bg)>>1, (*ab+*bb)>>1); + + // lower left + *to_odd++ = RGB((*ar+*cr)>>1, (*ag+*cg)>>1, (*ab+*cb)>>1); + + // lower right + *to_odd++ = RGB((*ar+*br+*cr+*dr)>>2, + (*ag+*bg+*cg+*dg)>>2, + (*ab+*bb+*cb+*db)>>2); + + // 'b' becomes 'a', 'd' becomes 'c' + ar = br; + ag = bg; + ab = bb; + cr = dr; + cg = dg; + cb = db; + } + + // the "next" rgb row becomes the current; the old current rgb row is + // recycled and serves as the new "next" row + u8 *temp; + temp = rgb_row_cur; + rgb_row_cur = rgb_row_next; + rgb_row_next = temp; + + // update the pointers for start of next pair of lines + from = (u32 *)((u8 *)from_orig + srcPitch); + to = (u32 *)((u8 *)to_orig + (dstPitch << 1)); + to_odd = (u32 *)((u8 *)to + dstPitch); + } +} + diff --git a/source/vba/bios.cpp b/source/vba/bios.cpp index 3e8bf3fc..9a3d5155 100644 --- a/source/vba/bios.cpp +++ b/source/vba/bios.cpp @@ -1,1165 +1,1293 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2005-2006 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include -#include - -#include "agb/GBA.h" -#include "bios.h" -#include "agb/GBAinline.h" -#include "Globals.h" - -s16 sineTable[256] = { - (s16)0x0000, (s16)0x0192, (s16)0x0323, (s16)0x04B5, (s16)0x0645, (s16)0x07D5, (s16)0x0964, (s16)0x0AF1, - (s16)0x0C7C, (s16)0x0E05, (s16)0x0F8C, (s16)0x1111, (s16)0x1294, (s16)0x1413, (s16)0x158F, (s16)0x1708, - (s16)0x187D, (s16)0x19EF, (s16)0x1B5D, (s16)0x1CC6, (s16)0x1E2B, (s16)0x1F8B, (s16)0x20E7, (s16)0x223D, - (s16)0x238E, (s16)0x24DA, (s16)0x261F, (s16)0x275F, (s16)0x2899, (s16)0x29CD, (s16)0x2AFA, (s16)0x2C21, - (s16)0x2D41, (s16)0x2E5A, (s16)0x2F6B, (s16)0x3076, (s16)0x3179, (s16)0x3274, (s16)0x3367, (s16)0x3453, - (s16)0x3536, (s16)0x3612, (s16)0x36E5, (s16)0x37AF, (s16)0x3871, (s16)0x392A, (s16)0x39DA, (s16)0x3A82, - (s16)0x3B20, (s16)0x3BB6, (s16)0x3C42, (s16)0x3CC5, (s16)0x3D3E, (s16)0x3DAE, (s16)0x3E14, (s16)0x3E71, - (s16)0x3EC5, (s16)0x3F0E, (s16)0x3F4E, (s16)0x3F84, (s16)0x3FB1, (s16)0x3FD3, (s16)0x3FEC, (s16)0x3FFB, - (s16)0x4000, (s16)0x3FFB, (s16)0x3FEC, (s16)0x3FD3, (s16)0x3FB1, (s16)0x3F84, (s16)0x3F4E, (s16)0x3F0E, - (s16)0x3EC5, (s16)0x3E71, (s16)0x3E14, (s16)0x3DAE, (s16)0x3D3E, (s16)0x3CC5, (s16)0x3C42, (s16)0x3BB6, - (s16)0x3B20, (s16)0x3A82, (s16)0x39DA, (s16)0x392A, (s16)0x3871, (s16)0x37AF, (s16)0x36E5, (s16)0x3612, - (s16)0x3536, (s16)0x3453, (s16)0x3367, (s16)0x3274, (s16)0x3179, (s16)0x3076, (s16)0x2F6B, (s16)0x2E5A, - (s16)0x2D41, (s16)0x2C21, (s16)0x2AFA, (s16)0x29CD, (s16)0x2899, (s16)0x275F, (s16)0x261F, (s16)0x24DA, - (s16)0x238E, (s16)0x223D, (s16)0x20E7, (s16)0x1F8B, (s16)0x1E2B, (s16)0x1CC6, (s16)0x1B5D, (s16)0x19EF, - (s16)0x187D, (s16)0x1708, (s16)0x158F, (s16)0x1413, (s16)0x1294, (s16)0x1111, (s16)0x0F8C, (s16)0x0E05, - (s16)0x0C7C, (s16)0x0AF1, (s16)0x0964, (s16)0x07D5, (s16)0x0645, (s16)0x04B5, (s16)0x0323, (s16)0x0192, - (s16)0x0000, (s16)0xFE6E, (s16)0xFCDD, (s16)0xFB4B, (s16)0xF9BB, (s16)0xF82B, (s16)0xF69C, (s16)0xF50F, - (s16)0xF384, (s16)0xF1FB, (s16)0xF074, (s16)0xEEEF, (s16)0xED6C, (s16)0xEBED, (s16)0xEA71, (s16)0xE8F8, - (s16)0xE783, (s16)0xE611, (s16)0xE4A3, (s16)0xE33A, (s16)0xE1D5, (s16)0xE075, (s16)0xDF19, (s16)0xDDC3, - (s16)0xDC72, (s16)0xDB26, (s16)0xD9E1, (s16)0xD8A1, (s16)0xD767, (s16)0xD633, (s16)0xD506, (s16)0xD3DF, - (s16)0xD2BF, (s16)0xD1A6, (s16)0xD095, (s16)0xCF8A, (s16)0xCE87, (s16)0xCD8C, (s16)0xCC99, (s16)0xCBAD, - (s16)0xCACA, (s16)0xC9EE, (s16)0xC91B, (s16)0xC851, (s16)0xC78F, (s16)0xC6D6, (s16)0xC626, (s16)0xC57E, - (s16)0xC4E0, (s16)0xC44A, (s16)0xC3BE, (s16)0xC33B, (s16)0xC2C2, (s16)0xC252, (s16)0xC1EC, (s16)0xC18F, - (s16)0xC13B, (s16)0xC0F2, (s16)0xC0B2, (s16)0xC07C, (s16)0xC04F, (s16)0xC02D, (s16)0xC014, (s16)0xC005, - (s16)0xC000, (s16)0xC005, (s16)0xC014, (s16)0xC02D, (s16)0xC04F, (s16)0xC07C, (s16)0xC0B2, (s16)0xC0F2, - (s16)0xC13B, (s16)0xC18F, (s16)0xC1EC, (s16)0xC252, (s16)0xC2C2, (s16)0xC33B, (s16)0xC3BE, (s16)0xC44A, - (s16)0xC4E0, (s16)0xC57E, (s16)0xC626, (s16)0xC6D6, (s16)0xC78F, (s16)0xC851, (s16)0xC91B, (s16)0xC9EE, - (s16)0xCACA, (s16)0xCBAD, (s16)0xCC99, (s16)0xCD8C, (s16)0xCE87, (s16)0xCF8A, (s16)0xD095, (s16)0xD1A6, - (s16)0xD2BF, (s16)0xD3DF, (s16)0xD506, (s16)0xD633, (s16)0xD767, (s16)0xD8A1, (s16)0xD9E1, (s16)0xDB26, - (s16)0xDC72, (s16)0xDDC3, (s16)0xDF19, (s16)0xE075, (s16)0xE1D5, (s16)0xE33A, (s16)0xE4A3, (s16)0xE611, - (s16)0xE783, (s16)0xE8F8, (s16)0xEA71, (s16)0xEBED, (s16)0xED6C, (s16)0xEEEF, (s16)0xF074, (s16)0xF1FB, - (s16)0xF384, (s16)0xF50F, (s16)0xF69C, (s16)0xF82B, (s16)0xF9BB, (s16)0xFB4B, (s16)0xFCDD, (s16)0xFE6E -}; - -void BIOS_ArcTan() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("ArcTan: %08x (VCOUNT=%2d)\n", - reg[0].I, - VCOUNT); - } -#endif - - s32 a = -(((s32)(reg[0].I*reg[0].I)) >> 14); - s32 b = ((0xA9 * a) >> 14) + 0x390; - b = ((b * a) >> 14) + 0x91C; - b = ((b * a) >> 14) + 0xFB6; - b = ((b * a) >> 14) + 0x16AA; - b = ((b * a) >> 14) + 0x2081; - b = ((b * a) >> 14) + 0x3651; - b = ((b * a) >> 14) + 0xA2F9; - a = ((s32)reg[0].I * b) >> 16; - reg[0].I = a; - -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("ArcTan: return=%08x\n", - reg[0].I); - } -#endif -} - -void BIOS_ArcTan2() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("ArcTan2: %08x,%08x (VCOUNT=%2d)\n", - reg[0].I, - reg[1].I, - VCOUNT); - } -#endif - - s32 x = reg[0].I; - s32 y = reg[1].I; - u32 res = 0; - if (y == 0) { - res = ((x>>16) & 0x8000); - } else { - if (x == 0) { - res = ((y>>16) & 0x8000) + 0x4000; - } else { - if ((abs(x) > abs(y)) || ((abs(x) == abs(y)) && (!((x<0) && (y<0))))) { - reg[1].I = x; - reg[0].I = y << 14; - BIOS_Div(); - BIOS_ArcTan(); - if (x < 0) - res = 0x8000 + reg[0].I; - else - res = (((y>>16) & 0x8000)<<1) + reg[0].I; - } else { - reg[0].I = x << 14; - BIOS_Div(); - BIOS_ArcTan(); - res = (0x4000 + ((y>>16) & 0x8000)) - reg[0].I; - } - } - } - reg[0].I = res; - -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("ArcTan2: return=%08x\n", - reg[0].I); - } -#endif -} - -void BIOS_BitUnPack() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("BitUnPack: %08x,%08x,%08x (VCOUNT=%2d)\n", - reg[0].I, - reg[1].I, - reg[2].I, - VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - u32 header = reg[2].I; - - int len = CPUReadHalfWord(header); - // check address - if(((source & 0xe000000) == 0) || - ((source + len) & 0xe000000) == 0) - return; - - int bits = CPUReadByte(header+2); - int revbits = 8 - bits; - // u32 value = 0; - u32 base = CPUReadMemory(header+4); - bool addBase = (base & 0x80000000) ? true : false; - base &= 0x7fffffff; - int dataSize = CPUReadByte(header+3); - - int data = 0; - int bitwritecount = 0; - while(1) { - len -= 1; - if(len < 0) - break; - int mask = 0xff >> revbits; - u8 b = CPUReadByte(source); - source++; - int bitcount = 0; - while(1) { - if(bitcount >= 8) - break; - u32 d = b & mask; - u32 temp = d >> bitcount; - if(d || addBase) { - temp += base; - } - data |= temp << bitwritecount; - bitwritecount += dataSize; - if(bitwritecount >= 32) { - CPUWriteMemory(dest, data); - dest += 4; - data = 0; - bitwritecount = 0; - } - mask <<= bits; - bitcount += bits; - } - } -} - -void BIOS_GetBiosChecksum() -{ - reg[0].I=0xBAAE187F; -} - -void BIOS_BgAffineSet() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("BgAffineSet: %08x,%08x,%08x (VCOUNT=%2d)\n", - reg[0].I, - reg[1].I, - reg[2].I, - VCOUNT); - } -#endif - - u32 src = reg[0].I; - u32 dest = reg[1].I; - int num = reg[2].I; - - for(int i = 0; i < num; i++) { - s32 cx = CPUReadMemory(src); - src+=4; - s32 cy = CPUReadMemory(src); - src+=4; - s16 dispx = CPUReadHalfWord(src); - src+=2; - s16 dispy = CPUReadHalfWord(src); - src+=2; - s16 rx = CPUReadHalfWord(src); - src+=2; - s16 ry = CPUReadHalfWord(src); - src+=2; - u16 theta = CPUReadHalfWord(src)>>8; - src+=4; // keep structure alignment - s32 a = sineTable[(theta+0x40)&255]; - s32 b = sineTable[theta]; - - s16 dx = (rx * a)>>14; - s16 dmx = (rx * b)>>14; - s16 dy = (ry * b)>>14; - s16 dmy = (ry * a)>>14; - - CPUWriteHalfWord(dest, dx); - dest += 2; - CPUWriteHalfWord(dest, -dmx); - dest += 2; - CPUWriteHalfWord(dest, dy); - dest += 2; - CPUWriteHalfWord(dest, dmy); - dest += 2; - - s32 startx = cx - dx * dispx + dmx * dispy; - s32 starty = cy - dy * dispx - dmy * dispy; - - CPUWriteMemory(dest, startx); - dest += 4; - CPUWriteMemory(dest, starty); - dest += 4; - } -} - -void BIOS_CpuSet() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("CpuSet: 0x%08x,0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, reg[1].I, - reg[2].I, VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - u32 cnt = reg[2].I; - - if(((source & 0xe000000) == 0) || - ((source + (((cnt << 11)>>9) & 0x1fffff)) & 0xe000000) == 0) - return; - - int count = cnt & 0x1FFFFF; - - // 32-bit ? - if((cnt >> 26) & 1) { - // needed for 32-bit mode! - source &= 0xFFFFFFFC; - dest &= 0xFFFFFFFC; - // fill ? - if((cnt >> 24) & 1) { - u32 value = (source>0x0EFFFFFF ? 0x1CAD1CAD : CPUReadMemory(source)); - while(count) { - CPUWriteMemory(dest, value); - dest += 4; - count--; - } - } else { - // copy - while(count) { - CPUWriteMemory(dest, (source>0x0EFFFFFF ? 0x1CAD1CAD : CPUReadMemory(source))); - source += 4; - dest += 4; - count--; - } - } - } else { - // 16-bit fill? - if((cnt >> 24) & 1) { - u16 value = (source>0x0EFFFFFF ? 0x1CAD : CPUReadHalfWord(source)); - while(count) { - CPUWriteHalfWord(dest, value); - dest += 2; - count--; - } - } else { - // copy - while(count) { - CPUWriteHalfWord(dest, (source>0x0EFFFFFF ? 0x1CAD : CPUReadHalfWord(source))); - source += 2; - dest += 2; - count--; - } - } - } -} - -void BIOS_CpuFastSet() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("CpuFastSet: 0x%08x,0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, reg[1].I, - reg[2].I, VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - u32 cnt = reg[2].I; - - if(((source & 0xe000000) == 0) || - ((source + (((cnt << 11)>>9) & 0x1fffff)) & 0xe000000) == 0) - return; - - // needed for 32-bit mode! - source &= 0xFFFFFFFC; - dest &= 0xFFFFFFFC; - - int count = cnt & 0x1FFFFF; - - // fill? - if((cnt >> 24) & 1) { - while(count > 0) { - // BIOS always transfers 32 bytes at a time - u32 value = (source>0x0EFFFFFF ? 0xBAFFFFFB : CPUReadMemory(source)); - for(int i = 0; i < 8; i++) { - CPUWriteMemory(dest, value); - dest += 4; - } - count -= 8; - } - } else { - // copy - while(count > 0) { - // BIOS always transfers 32 bytes at a time - for(int i = 0; i < 8; i++) { - CPUWriteMemory(dest, (source>0x0EFFFFFF ? 0xBAFFFFFB :CPUReadMemory(source))); - source += 4; - dest += 4; - } - count -= 8; - } - } -} - -void BIOS_Diff8bitUnFilterWram() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Diff8bitUnFilterWram: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, - reg[1].I, VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff) & 0xe000000) == 0)) - return; - - int len = header >> 8; - - u8 data = CPUReadByte(source++); - CPUWriteByte(dest++, data); - len--; - - while(len > 0) { - u8 diff = CPUReadByte(source++); - data += diff; - CPUWriteByte(dest++, data); - len--; - } -} - -void BIOS_Diff8bitUnFilterVram() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Diff8bitUnFilterVram: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, - reg[1].I, VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return; - - int len = header >> 8; - - u8 data = CPUReadByte(source++); - u16 writeData = data; - int shift = 8; - int bytes = 1; - - while(len >= 2) { - u8 diff = CPUReadByte(source++); - data += diff; - writeData |= (data << shift); - bytes++; - shift += 8; - if(bytes == 2) { - CPUWriteHalfWord(dest, writeData); - dest += 2; - len -= 2; - bytes = 0; - writeData = 0; - shift = 0; - } - } -} - -void BIOS_Diff16bitUnFilter() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Diff16bitUnFilter: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, - reg[1].I, VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return; - - int len = header >> 8; - - u16 data = CPUReadHalfWord(source); - source += 2; - CPUWriteHalfWord(dest, data); - dest += 2; - len -= 2; - - while(len >= 2) { - u16 diff = CPUReadHalfWord(source); - source += 2; - data += diff; - CPUWriteHalfWord(dest, data); - dest += 2; - len -= 2; - } -} - -void BIOS_Div() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Div: 0x%08x,0x%08x (VCOUNT=%d)\n", - reg[0].I, - reg[1].I, - VCOUNT); - } -#endif - - int number = reg[0].I; - int denom = reg[1].I; - - if(denom != 0) { - reg[0].I = number / denom; - reg[1].I = number % denom; - s32 temp = (s32)reg[0].I; - reg[3].I = temp < 0 ? (u32)-temp : (u32)temp; - } -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Div: return=0x%08x,0x%08x,0x%08x\n", - reg[0].I, - reg[1].I, - reg[3].I); - } -#endif -} - -void BIOS_DivARM() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("DivARM: 0x%08x, (VCOUNT=%d)\n", - reg[0].I, - VCOUNT); - } -#endif - - u32 temp = reg[0].I; - reg[0].I = reg[1].I; - reg[1].I = temp; - BIOS_Div(); -} - -void BIOS_HuffUnComp() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("HuffUnComp: 0x%08x,0x%08x (VCOUNT=%d)\n", - reg[0].I, - reg[1].I, - VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return; - - u8 treeSize = CPUReadByte(source++); - - u32 treeStart = source; - - source += ((treeSize+1)<<1)-1; // minus because we already skipped one byte - - int len = header >> 8; - - u32 mask = 0x80000000; - u32 data = CPUReadMemory(source); - source += 4; - - int pos = 0; - u8 rootNode = CPUReadByte(treeStart); - u8 currentNode = rootNode; - bool writeData = false; - int byteShift = 0; - int byteCount = 0; - u32 writeValue = 0; - - if((header & 0x0F) == 8) { - while(len > 0) { - // take left - if(pos == 0) - pos++; - else - pos += (((currentNode & 0x3F)+1)<<1); - - if(data & mask) { - // right - if(currentNode & 0x40) - writeData = true; - currentNode = CPUReadByte(treeStart+pos+1); - } else { - // left - if(currentNode & 0x80) - writeData = true; - currentNode = CPUReadByte(treeStart+pos); - } - - if(writeData) { - writeValue |= (currentNode << byteShift); - byteCount++; - byteShift += 8; - - pos = 0; - currentNode = rootNode; - writeData = false; - - if(byteCount == 4) { - byteCount = 0; - byteShift = 0; - CPUWriteMemory(dest, writeValue); - writeValue = 0; - dest += 4; - len -= 4; - } - } - mask >>= 1; - if(mask == 0) { - mask = 0x80000000; - data = CPUReadMemory(source); - source += 4; - } - } - } else { - int halfLen = 0; - int value = 0; - while(len > 0) { - // take left - if(pos == 0) - pos++; - else - pos += (((currentNode & 0x3F)+1)<<1); - - if((data & mask)) { - // right - if(currentNode & 0x40) - writeData = true; - currentNode = CPUReadByte(treeStart+pos+1); - } else { - // left - if(currentNode & 0x80) - writeData = true; - currentNode = CPUReadByte(treeStart+pos); - } - - if(writeData) { - if(halfLen == 0) - value |= currentNode; - else - value |= (currentNode<<4); - - halfLen += 4; - if(halfLen == 8) { - writeValue |= (value << byteShift); - byteCount++; - byteShift += 8; - - halfLen = 0; - value = 0; - - if(byteCount == 4) { - byteCount = 0; - byteShift = 0; - CPUWriteMemory(dest, writeValue); - dest += 4; - writeValue = 0; - len -= 4; - } - } - pos = 0; - currentNode = rootNode; - writeData = false; - } - mask >>= 1; - if(mask == 0) { - mask = 0x80000000; - data = CPUReadMemory(source); - source += 4; - } - } - } -} - -void BIOS_LZ77UnCompVram() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("LZ77UnCompVram: 0x%08x,0x%08x (VCOUNT=%d)\n", - reg[0].I, - reg[1].I, - VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return; - - int byteCount = 0; - int byteShift = 0; - u32 writeValue = 0; - - int len = header >> 8; - - while(len > 0) { - u8 d = CPUReadByte(source++); - - if(d) { - for(int i = 0; i < 8; i++) { - if(d & 0x80) { - u16 data = CPUReadByte(source++) << 8; - data |= CPUReadByte(source++); - int length = (data >> 12) + 3; - int offset = (data & 0x0FFF); - u32 windowOffset = dest + byteCount - offset - 1; - for(int i = 0; i < length; i++) { - writeValue |= (CPUReadByte(windowOffset++) << byteShift); - byteShift += 8; - byteCount++; - - if(byteCount == 2) { - CPUWriteHalfWord(dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return; - } - } else { - writeValue |= (CPUReadByte(source++) << byteShift); - byteShift += 8; - byteCount++; - if(byteCount == 2) { - CPUWriteHalfWord(dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return; - } - d <<= 1; - } - } else { - for(int i = 0; i < 8; i++) { - writeValue |= (CPUReadByte(source++) << byteShift); - byteShift += 8; - byteCount++; - if(byteCount == 2) { - CPUWriteHalfWord(dest, writeValue); - dest += 2; - byteShift = 0; - byteCount = 0; - writeValue = 0; - } - len--; - if(len == 0) - return; - } - } - } -} - -void BIOS_LZ77UnCompWram() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("LZ77UnCompWram: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, reg[1].I, - VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return; - - int len = header >> 8; - - while(len > 0) { - u8 d = CPUReadByte(source++); - - if(d) { - for(int i = 0; i < 8; i++) { - if(d & 0x80) { - u16 data = CPUReadByte(source++) << 8; - data |= CPUReadByte(source++); - int length = (data >> 12) + 3; - int offset = (data & 0x0FFF); - u32 windowOffset = dest - offset - 1; - for(int i = 0; i < length; i++) { - CPUWriteByte(dest++, CPUReadByte(windowOffset++)); - len--; - if(len == 0) - return; - } - } else { - CPUWriteByte(dest++, CPUReadByte(source++)); - len--; - if(len == 0) - return; - } - d <<= 1; - } - } else { - for(int i = 0; i < 8; i++) { - CPUWriteByte(dest++, CPUReadByte(source++)); - len--; - if(len == 0) - return; - } - } - } -} - -void BIOS_ObjAffineSet() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("ObjAffineSet: 0x%08x,0x%08x,0x%08x,0x%08x (VCOUNT=%d)\n", - reg[0].I, - reg[1].I, - reg[2].I, - reg[3].I, - VCOUNT); - } -#endif - - u32 src = reg[0].I; - u32 dest = reg[1].I; - int num = reg[2].I; - int offset = reg[3].I; - - for(int i = 0; i < num; i++) { - s16 rx = CPUReadHalfWord(src); - src+=2; - s16 ry = CPUReadHalfWord(src); - src+=2; - u16 theta = CPUReadHalfWord(src)>>8; - src+=4; // keep structure alignment - - s32 a = (s32)sineTable[(theta+0x40)&255]; - s32 b = (s32)sineTable[theta]; - - s16 dx = ((s32)rx * a)>>14; - s16 dmx = ((s32)rx * b)>>14; - s16 dy = ((s32)ry * b)>>14; - s16 dmy = ((s32)ry * a)>>14; - - CPUWriteHalfWord(dest, dx); - dest += offset; - CPUWriteHalfWord(dest, -dmx); - dest += offset; - CPUWriteHalfWord(dest, dy); - dest += offset; - CPUWriteHalfWord(dest, dmy); - dest += offset; - } -} - -void BIOS_RegisterRamReset(u32 flags) -{ - // no need to trace here. this is only called directly from GBA.cpp - // to emulate bios initialization - - CPUUpdateRegister(0x0, 0x80); - - if(flags) { - if(flags & 0x01) { - // clear work RAM - memset(workRAM, 0, 0x40000); - } - if(flags & 0x02) { - // clear internal RAM - memset(internalRAM, 0, 0x7e00); // don't clear 0x7e00-0x7fff - } - if(flags & 0x04) { - // clear palette RAM - memset(paletteRAM, 0, 0x400); - } - if(flags & 0x08) { - // clear VRAM - memset(vram, 0, 0x18000); - } - if(flags & 0x10) { - // clean OAM - memset(oam, 0, 0x400); - } - - if(flags & 0x80) { - int i; - for(i = 0; i < 0x10; i++) - CPUUpdateRegister(0x200+i*2, 0); - - for(i = 0; i < 0xF; i++) - CPUUpdateRegister(0x4+i*2, 0); - - for(i = 0; i < 0x20; i++) - CPUUpdateRegister(0x20+i*2, 0); - - for(i = 0; i < 0x18; i++) - CPUUpdateRegister(0xb0+i*2, 0); - - CPUUpdateRegister(0x130, 0); - CPUUpdateRegister(0x20, 0x100); - CPUUpdateRegister(0x30, 0x100); - CPUUpdateRegister(0x26, 0x100); - CPUUpdateRegister(0x36, 0x100); - } - - if(flags & 0x20) { - int i; - for(i = 0; i < 8; i++) - CPUUpdateRegister(0x110+i*2, 0); - CPUUpdateRegister(0x134, 0x8000); - for(i = 0; i < 7; i++) - CPUUpdateRegister(0x140+i*2, 0); - } - - if(flags & 0x40) { - int i; - CPUWriteByte(0x4000084, 0); - CPUWriteByte(0x4000084, 0x80); - CPUWriteMemory(0x4000080, 0x880e0000); - CPUUpdateRegister(0x88, CPUReadHalfWord(0x4000088)&0x3ff); - CPUWriteByte(0x4000070, 0x70); - for(i = 0; i < 8; i++) - CPUUpdateRegister(0x90+i*2, 0); - CPUWriteByte(0x4000070, 0); - for(i = 0; i < 8; i++) - CPUUpdateRegister(0x90+i*2, 0); - CPUWriteByte(0x4000084, 0); - } - } -} - -void BIOS_RegisterRamReset() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("RegisterRamReset: 0x%08x (VCOUNT=%d)\n", - reg[0].I, - VCOUNT); - } -#endif - - BIOS_RegisterRamReset(reg[0].I); -} - -void BIOS_RLUnCompVram() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("RLUnCompVram: 0x%08x,0x%08x (VCOUNT=%d)\n", - reg[0].I, - reg[1].I, - VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source & 0xFFFFFFFC); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return; - - int len = header >> 8; - int byteCount = 0; - int byteShift = 0; - u32 writeValue = 0; - - while(len > 0) { - u8 d = CPUReadByte(source++); - int l = d & 0x7F; - if(d & 0x80) { - u8 data = CPUReadByte(source++); - l += 3; - for(int i = 0;i < l; i++) { - writeValue |= (data << byteShift); - byteShift += 8; - byteCount++; - - if(byteCount == 2) { - CPUWriteHalfWord(dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return; - } - } else { - l++; - for(int i = 0; i < l; i++) { - writeValue |= (CPUReadByte(source++) << byteShift); - byteShift += 8; - byteCount++; - if(byteCount == 2) { - CPUWriteHalfWord(dest, writeValue); - dest += 2; - byteCount = 0; - byteShift = 0; - writeValue = 0; - } - len--; - if(len == 0) - return; - } - } - } -} - -void BIOS_RLUnCompWram() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("RLUnCompWram: 0x%08x,0x%08x (VCOUNT=%d)\n", - reg[0].I, - reg[1].I, - VCOUNT); - } -#endif - - u32 source = reg[0].I; - u32 dest = reg[1].I; - - u32 header = CPUReadMemory(source & 0xFFFFFFFC); - source += 4; - - if(((source & 0xe000000) == 0) || - ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) - return; - - int len = header >> 8; - - while(len > 0) { - u8 d = CPUReadByte(source++); - int l = d & 0x7F; - if(d & 0x80) { - u8 data = CPUReadByte(source++); - l += 3; - for(int i = 0;i < l; i++) { - CPUWriteByte(dest++, data); - len--; - if(len == 0) - return; - } - } else { - l++; - for(int i = 0; i < l; i++) { - CPUWriteByte(dest++, CPUReadByte(source++)); - len--; - if(len == 0) - return; - } - } - } -} - -void BIOS_SoftReset() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("SoftReset: (VCOUNT=%d)\n", VCOUNT); - } -#endif - - armState = true; - armMode = 0x1F; - armIrqEnable = false; - C_FLAG = V_FLAG = N_FLAG = Z_FLAG = false; - reg[13].I = 0x03007F00; - reg[14].I = 0x00000000; - reg[16].I = 0x00000000; - reg[R13_IRQ].I = 0x03007FA0; - reg[R14_IRQ].I = 0x00000000; - reg[SPSR_IRQ].I = 0x00000000; - reg[R13_SVC].I = 0x03007FE0; - reg[R14_SVC].I = 0x00000000; - reg[SPSR_SVC].I = 0x00000000; - u8 b = internalRAM[0x7ffa]; - - memset(&internalRAM[0x7e00], 0, 0x200); - - if(b) { - armNextPC = 0x02000000; - reg[15].I = 0x02000004; - } else { - armNextPC = 0x08000000; - reg[15].I = 0x08000004; - } -} - -void BIOS_Sqrt() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Sqrt: %08x (VCOUNT=%2d)\n", - reg[0].I, - VCOUNT); - } -#endif - reg[0].I = (u32)sqrt((double)reg[0].I); -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("Sqrt: return=%08x\n", - reg[0].I); - } -#endif -} - -void BIOS_MidiKey2Freq() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("MidiKey2Freq: WaveData=%08x mk=%08x fp=%08x\n", - reg[0].I, - reg[1].I, - reg[2].I); - } -#endif - int freq = CPUReadMemory(reg[0].I+4); - double tmp; - tmp = ((double)(180 - reg[1].I)) - ((double)reg[2].I / 256.f); - tmp = pow((double)2.f, tmp / 12.f); - reg[0].I = (int)((double)freq / tmp); - -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("MidiKey2Freq: return %08x\n", - reg[0].I); - } -#endif -} - -void BIOS_SndDriverJmpTableCopy() -{ -#ifdef GBA_LOGGING - if(systemVerbose & VERBOSE_SWI) { - log("SndDriverJmpTableCopy: dest=%08x\n", - reg[0].I); - } -#endif - for(int i = 0; i < 0x24; i++) { - CPUWriteMemory(reg[0].I, 0x9c); - reg[0].I += 4; - } -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include +#include +#include + +#include "GBA.h" +#include "bios.h" +#include "GBAinline.h" +#include "Globals.h" + +s16 sineTable[256] = { + (s16)0x0000, (s16)0x0192, (s16)0x0323, (s16)0x04B5, (s16)0x0645, (s16)0x07D5, (s16)0x0964, (s16)0x0AF1, + (s16)0x0C7C, (s16)0x0E05, (s16)0x0F8C, (s16)0x1111, (s16)0x1294, (s16)0x1413, (s16)0x158F, (s16)0x1708, + (s16)0x187D, (s16)0x19EF, (s16)0x1B5D, (s16)0x1CC6, (s16)0x1E2B, (s16)0x1F8B, (s16)0x20E7, (s16)0x223D, + (s16)0x238E, (s16)0x24DA, (s16)0x261F, (s16)0x275F, (s16)0x2899, (s16)0x29CD, (s16)0x2AFA, (s16)0x2C21, + (s16)0x2D41, (s16)0x2E5A, (s16)0x2F6B, (s16)0x3076, (s16)0x3179, (s16)0x3274, (s16)0x3367, (s16)0x3453, + (s16)0x3536, (s16)0x3612, (s16)0x36E5, (s16)0x37AF, (s16)0x3871, (s16)0x392A, (s16)0x39DA, (s16)0x3A82, + (s16)0x3B20, (s16)0x3BB6, (s16)0x3C42, (s16)0x3CC5, (s16)0x3D3E, (s16)0x3DAE, (s16)0x3E14, (s16)0x3E71, + (s16)0x3EC5, (s16)0x3F0E, (s16)0x3F4E, (s16)0x3F84, (s16)0x3FB1, (s16)0x3FD3, (s16)0x3FEC, (s16)0x3FFB, + (s16)0x4000, (s16)0x3FFB, (s16)0x3FEC, (s16)0x3FD3, (s16)0x3FB1, (s16)0x3F84, (s16)0x3F4E, (s16)0x3F0E, + (s16)0x3EC5, (s16)0x3E71, (s16)0x3E14, (s16)0x3DAE, (s16)0x3D3E, (s16)0x3CC5, (s16)0x3C42, (s16)0x3BB6, + (s16)0x3B20, (s16)0x3A82, (s16)0x39DA, (s16)0x392A, (s16)0x3871, (s16)0x37AF, (s16)0x36E5, (s16)0x3612, + (s16)0x3536, (s16)0x3453, (s16)0x3367, (s16)0x3274, (s16)0x3179, (s16)0x3076, (s16)0x2F6B, (s16)0x2E5A, + (s16)0x2D41, (s16)0x2C21, (s16)0x2AFA, (s16)0x29CD, (s16)0x2899, (s16)0x275F, (s16)0x261F, (s16)0x24DA, + (s16)0x238E, (s16)0x223D, (s16)0x20E7, (s16)0x1F8B, (s16)0x1E2B, (s16)0x1CC6, (s16)0x1B5D, (s16)0x19EF, + (s16)0x187D, (s16)0x1708, (s16)0x158F, (s16)0x1413, (s16)0x1294, (s16)0x1111, (s16)0x0F8C, (s16)0x0E05, + (s16)0x0C7C, (s16)0x0AF1, (s16)0x0964, (s16)0x07D5, (s16)0x0645, (s16)0x04B5, (s16)0x0323, (s16)0x0192, + (s16)0x0000, (s16)0xFE6E, (s16)0xFCDD, (s16)0xFB4B, (s16)0xF9BB, (s16)0xF82B, (s16)0xF69C, (s16)0xF50F, + (s16)0xF384, (s16)0xF1FB, (s16)0xF074, (s16)0xEEEF, (s16)0xED6C, (s16)0xEBED, (s16)0xEA71, (s16)0xE8F8, + (s16)0xE783, (s16)0xE611, (s16)0xE4A3, (s16)0xE33A, (s16)0xE1D5, (s16)0xE075, (s16)0xDF19, (s16)0xDDC3, + (s16)0xDC72, (s16)0xDB26, (s16)0xD9E1, (s16)0xD8A1, (s16)0xD767, (s16)0xD633, (s16)0xD506, (s16)0xD3DF, + (s16)0xD2BF, (s16)0xD1A6, (s16)0xD095, (s16)0xCF8A, (s16)0xCE87, (s16)0xCD8C, (s16)0xCC99, (s16)0xCBAD, + (s16)0xCACA, (s16)0xC9EE, (s16)0xC91B, (s16)0xC851, (s16)0xC78F, (s16)0xC6D6, (s16)0xC626, (s16)0xC57E, + (s16)0xC4E0, (s16)0xC44A, (s16)0xC3BE, (s16)0xC33B, (s16)0xC2C2, (s16)0xC252, (s16)0xC1EC, (s16)0xC18F, + (s16)0xC13B, (s16)0xC0F2, (s16)0xC0B2, (s16)0xC07C, (s16)0xC04F, (s16)0xC02D, (s16)0xC014, (s16)0xC005, + (s16)0xC000, (s16)0xC005, (s16)0xC014, (s16)0xC02D, (s16)0xC04F, (s16)0xC07C, (s16)0xC0B2, (s16)0xC0F2, + (s16)0xC13B, (s16)0xC18F, (s16)0xC1EC, (s16)0xC252, (s16)0xC2C2, (s16)0xC33B, (s16)0xC3BE, (s16)0xC44A, + (s16)0xC4E0, (s16)0xC57E, (s16)0xC626, (s16)0xC6D6, (s16)0xC78F, (s16)0xC851, (s16)0xC91B, (s16)0xC9EE, + (s16)0xCACA, (s16)0xCBAD, (s16)0xCC99, (s16)0xCD8C, (s16)0xCE87, (s16)0xCF8A, (s16)0xD095, (s16)0xD1A6, + (s16)0xD2BF, (s16)0xD3DF, (s16)0xD506, (s16)0xD633, (s16)0xD767, (s16)0xD8A1, (s16)0xD9E1, (s16)0xDB26, + (s16)0xDC72, (s16)0xDDC3, (s16)0xDF19, (s16)0xE075, (s16)0xE1D5, (s16)0xE33A, (s16)0xE4A3, (s16)0xE611, + (s16)0xE783, (s16)0xE8F8, (s16)0xEA71, (s16)0xEBED, (s16)0xED6C, (s16)0xEEEF, (s16)0xF074, (s16)0xF1FB, + (s16)0xF384, (s16)0xF50F, (s16)0xF69C, (s16)0xF82B, (s16)0xF9BB, (s16)0xFB4B, (s16)0xFCDD, (s16)0xFE6E + }; + +void BIOS_ArcTan() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("ArcTan: %08x (VCOUNT=%2d)\n", + reg[0].I, + VCOUNT); + } +#endif + + s32 a = -((s32)(reg[0].I * reg[0].I)) >> 14; + s32 b = ((0xA9 * a) >> 14) + 0x390; + b = ((b * a) >> 14) + 0x91C; + b = ((b * a) >> 14) + 0xFB6; + b = ((b * a) >> 14) + 0x16AA; + b = ((b * a) >> 14) + 0x2081; + b = ((b * a) >> 14) + 0x3651; + b = ((b * a) >> 14) + 0xA2F9; + reg[0].I = (reg[0].I * b) >> 16; + +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("ArcTan: return=%08x\n", + reg[0].I); + } +#endif +} + +void BIOS_ArcTan2() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("ArcTan2: %08x,%08x (VCOUNT=%2d)\n", + reg[0].I, + reg[1].I, + VCOUNT); + } +#endif + + s16 x = reg[0].I; + s16 y = reg[1].I; + + if (y == 0) + { + reg[0].I = 0x8000 & x; + reg[3].I = 0x170; + } + else + { + if (x == 0) + { + reg[0].I = (0x8000 & y) + 0x4000; + reg[3].I = 0x170; + } + else + { + if (abs(x) > abs(y)) + { + reg[1].I = x; + reg[0].I = y << 14; + BIOS_Div(); + BIOS_ArcTan(); + if (x < 0) + reg[0].I = 0x8000 + reg[0].I; + else + reg[0].I = ((y & 0x8000) << 1 ) + reg[0].I; + reg[3].I = 0x170; + } + else + { + reg[0].I = x << 14; + BIOS_Div(); + BIOS_ArcTan(); + reg[0].I = (0x4000 + (y & 0x8000)) - reg[0].I; + reg[3].I = 0x170; + } + } + } + +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("ArcTan2: return=%08x\n", + reg[0].I); + } +#endif +} + +void BIOS_BitUnPack() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("BitUnPack: %08x,%08x,%08x (VCOUNT=%2d)\n", + reg[0].I, + reg[1].I, + reg[2].I, + VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + u32 header = reg[2].I; + + int len = CPUReadHalfWord(header); + // check address + int bits = CPUReadByte(header+2); + int revbits = 8 - bits; + // u32 value = 0; + u32 base = CPUReadMemory(header+4); + bool addBase = (base & 0x80000000) ? true : false; + base &= 0x7fffffff; + int dataSize = CPUReadByte(header+3); + + int data = 0; + int bitwritecount = 0; + while(1) + { + len -= 1; + if(len < 0) + break; + int mask = 0xff >> revbits; + u8 b = CPUReadByte(source); + source++; + int bitcount = 0; + while(1) + { + if(bitcount >= 8) + break; + u32 d = b & mask; + u32 temp = d >> bitcount; + if(!temp && addBase) + { + temp += base; + } + data |= temp << bitwritecount; + bitwritecount += dataSize; + if(bitwritecount >= 32) + { + CPUWriteMemory(dest, data); + dest += 4; + data = 0; + bitwritecount = 0; + } + mask <<= bits; + bitcount += bits; + } + } +} + +void BIOS_BgAffineSet() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("BgAffineSet: %08x,%08x,%08x (VCOUNT=%2d)\n", + reg[0].I, + reg[1].I, + reg[2].I, + VCOUNT); + } +#endif + + u32 src = reg[0].I; + u32 dest = reg[1].I; + int num = reg[2].I; + + for(int i = 0; i < num; i++) + { + s32 cx = CPUReadMemory(src); + src+=4; + s32 cy = CPUReadMemory(src); + src+=4; + s16 dispx = CPUReadHalfWord(src); + src+=2; + s16 dispy = CPUReadHalfWord(src); + src+=2; + s16 rx = CPUReadHalfWord(src); + src+=2; + s16 ry = CPUReadHalfWord(src); + src+=2; + u16 theta = CPUReadHalfWord(src)>>8; + src+=4; // keep structure alignment + s32 a = sineTable[(theta+0x40)&255]; + s32 b = sineTable[theta]; + + s16 dx = (rx * a)>>14; + s16 dmx = (rx * b)>>14; + s16 dy = (ry * b)>>14; + s16 dmy = (ry * a)>>14; + + CPUWriteHalfWord(dest, dx); + dest += 2; + CPUWriteHalfWord(dest, -dmx); + dest += 2; + CPUWriteHalfWord(dest, dy); + dest += 2; + CPUWriteHalfWord(dest, dmy); + dest += 2; + + s32 startx = cx - dx * dispx + dmx * dispy; + s32 starty = cy - dy * dispx - dmy * dispy; + + CPUWriteMemory(dest, startx); + dest += 4; + CPUWriteMemory(dest, starty); + dest += 4; + } +} + +void BIOS_CpuSet() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("CpuSet: 0x%08x,0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, reg[1].I, + reg[2].I, VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + u32 cnt = reg[2].I; + + if(((source & 0xe000000) == 0) || + ((source + (((cnt << 11)>>9) & 0x1fffff)) & 0xe000000) == 0) + return; + + int count = cnt & 0x1FFFFF; + + // 32-bit ? + if((cnt >> 26) & 1) + { + // needed for 32-bit mode! + source &= 0xFFFFFFFC; + dest &= 0xFFFFFFFC; + // fill ? + if((cnt >> 24) & 1) + { + u32 value = CPUReadMemory(source); + while(count) + { + CPUWriteMemory(dest, value); + dest += 4; + count--; + } + } + else + { + // copy + while(count) + { + CPUWriteMemory(dest, CPUReadMemory(source)); + source += 4; + dest += 4; + count--; + } + } + } + else + { + // 16-bit fill? + if((cnt >> 24) & 1) + { + u16 value = CPUReadHalfWord(source); + while(count) + { + CPUWriteHalfWord(dest, value); + dest += 2; + count--; + } + } + else + { + // copy + while(count) + { + CPUWriteHalfWord(dest, CPUReadHalfWord(source)); + source += 2; + dest += 2; + count--; + } + } + } +} + +void BIOS_CpuFastSet() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("CpuFastSet: 0x%08x,0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, reg[1].I, + reg[2].I, VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + u32 cnt = reg[2].I; + + if(((source & 0xe000000) == 0) || + ((source + (((cnt << 11)>>9) & 0x1fffff)) & 0xe000000) == 0) + return; + + // needed for 32-bit mode! + source &= 0xFFFFFFFC; + dest &= 0xFFFFFFFC; + + int count = cnt & 0x1FFFFF; + + // fill? + if((cnt >> 24) & 1) + { + while(count > 0) + { + // BIOS always transfers 32 bytes at a time + u32 value = CPUReadMemory(source); + for(int i = 0; i < 8; i++) + { + CPUWriteMemory(dest, value); + dest += 4; + } + count -= 8; + } + } + else + { + // copy + while(count > 0) + { + // BIOS always transfers 32 bytes at a time + for(int i = 0; i < 8; i++) + { + CPUWriteMemory(dest, CPUReadMemory(source)); + source += 4; + dest += 4; + } + count -= 8; + } + } +} + +void BIOS_Diff8bitUnFilterWram() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Diff8bitUnFilterWram: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, + reg[1].I, VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff) & 0xe000000) == 0)) + return; + + int len = header >> 8; + + u8 data = CPUReadByte(source++); + CPUWriteByte(dest++, data); + len--; + + while(len > 0) + { + u8 diff = CPUReadByte(source++); + data += diff; + CPUWriteByte(dest++, data); + len--; + } +} + +void BIOS_Diff8bitUnFilterVram() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Diff8bitUnFilterVram: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, + reg[1].I, VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) + return; + + int len = header >> 8; + + u8 data = CPUReadByte(source++); + u16 writeData = data; + int shift = 8; + int bytes = 1; + + while(len >= 2) + { + u8 diff = CPUReadByte(source++); + data += diff; + writeData |= (data << shift); + bytes++; + shift += 8; + if(bytes == 2) + { + CPUWriteHalfWord(dest, writeData); + dest += 2; + len -= 2; + bytes = 0; + writeData = 0; + shift = 0; + } + } +} + +void BIOS_Diff16bitUnFilter() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Diff16bitUnFilter: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, + reg[1].I, VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) + return; + + int len = header >> 8; + + u16 data = CPUReadHalfWord(source); + source += 2; + CPUWriteHalfWord(dest, data); + dest += 2; + len -= 2; + + while(len >= 2) + { + u16 diff = CPUReadHalfWord(source); + source += 2; + data += diff; + CPUWriteHalfWord(dest, data); + dest += 2; + len -= 2; + } +} + +void BIOS_Div() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Div: 0x%08x,0x%08x (VCOUNT=%d)\n", + reg[0].I, + reg[1].I, + VCOUNT); + } +#endif + + int number = reg[0].I; + int denom = reg[1].I; + + if(denom != 0) + { + reg[0].I = number / denom; + reg[1].I = number % denom; + s32 temp = (s32)reg[0].I; + reg[3].I = temp < 0 ? (u32)-temp : (u32)temp; + } +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Div: return=0x%08x,0x%08x,0x%08x\n", + reg[0].I, + reg[1].I, + reg[3].I); + } +#endif +} + +void BIOS_DivARM() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("DivARM: 0x%08x, (VCOUNT=%d)\n", + reg[0].I, + VCOUNT); + } +#endif + + u32 temp = reg[0].I; + reg[0].I = reg[1].I; + reg[1].I = temp; + BIOS_Div(); +} + +void BIOS_HuffUnComp() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("HuffUnComp: 0x%08x,0x%08x (VCOUNT=%d)\n", + reg[0].I, + reg[1].I, + VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) + return; + + u8 treeSize = CPUReadByte(source++); + + u32 treeStart = source; + + source += (treeSize<<1) + 1; + + int len = header >> 8; + + u32 mask = 0x80000000; + u32 data = CPUReadMemory(source); + source += 4; + + int pos = 0; + u8 rootNode = CPUReadByte(treeStart); + u8 currentNode = rootNode; + bool writeData = false; + int byteShift = 0; + int byteCount = 0; + u32 writeValue = 0; + + if((header & 0x0F) == 8) + { + while(len > 0) + { + // take left + if(pos == 0) + pos++; + else + pos += (((currentNode & 0x3F)+1)<<1); + + if(data & mask) + { + // right + if(currentNode & 0x40) + writeData = true; + currentNode = CPUReadByte(treeStart+pos+1); + } + else + { + // left + if(currentNode & 0x80) + writeData = true; + currentNode = CPUReadByte(treeStart+pos); + } + + if(writeData) + { + writeValue |= (currentNode << byteShift); + byteCount++; + byteShift += 8; + + pos = 0; + currentNode = rootNode; + writeData = false; + + if(byteCount == 4) + { + byteCount = 0; + byteShift = 0; + CPUWriteMemory(dest, writeValue); + writeValue = 0; + dest += 4; + len -= 4; + } + } + mask >>= 1; + if(mask == 0) + { + mask = 0x80000000; + data = CPUReadMemory(source); + source += 4; + } + } + } + else + { + int halfLen = 0; + int value = 0; + while(len > 0) + { + // take left + if(pos == 0) + pos++; + else + pos += (((currentNode & 0x3F)+1)<<1); + + if((data & mask)) + { + // right + if(currentNode & 0x40) + writeData = true; + currentNode = CPUReadByte(treeStart+pos+1); + } + else + { + // left + if(currentNode & 0x80) + writeData = true; + currentNode = CPUReadByte(treeStart+pos); + } + + if(writeData) + { + if(halfLen == 0) + value |= currentNode; + else + value |= (currentNode<<4); + + halfLen += 4; + if(halfLen == 8) + { + writeValue |= (value << byteShift); + byteCount++; + byteShift += 8; + + halfLen = 0; + value = 0; + + if(byteCount == 4) + { + byteCount = 0; + byteShift = 0; + CPUWriteMemory(dest, writeValue); + dest += 4; + writeValue = 0; + len -= 4; + } + } + pos = 0; + currentNode = rootNode; + writeData = false; + } + mask >>= 1; + if(mask == 0) + { + mask = 0x80000000; + data = CPUReadMemory(source); + source += 4; + } + } + } +} + +void BIOS_LZ77UnCompVram() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("LZ77UnCompVram: 0x%08x,0x%08x (VCOUNT=%d)\n", + reg[0].I, + reg[1].I, + VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) + return; + + int byteCount = 0; + int byteShift = 0; + u32 writeValue = 0; + + int len = header >> 8; + + while(len > 0) + { + u8 d = CPUReadByte(source++); + + if(d) + { + for(int i = 0; i < 8; i++) + { + if(d & 0x80) + { + u16 data = CPUReadByte(source++) << 8; + data |= CPUReadByte(source++); + int length = (data >> 12) + 3; + int offset = (data & 0x0FFF); + u32 windowOffset = dest + byteCount - offset - 1; + for(int i = 0; i < length; i++) + { + writeValue |= (CPUReadByte(windowOffset++) << byteShift); + byteShift += 8; + byteCount++; + + if(byteCount == 2) + { + CPUWriteHalfWord(dest, writeValue); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + len--; + if(len == 0) + return; + } + } + else + { + writeValue |= (CPUReadByte(source++) << byteShift); + byteShift += 8; + byteCount++; + if(byteCount == 2) + { + CPUWriteHalfWord(dest, writeValue); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + len--; + if(len == 0) + return; + } + d <<= 1; + } + } + else + { + for(int i = 0; i < 8; i++) + { + writeValue |= (CPUReadByte(source++) << byteShift); + byteShift += 8; + byteCount++; + if(byteCount == 2) + { + CPUWriteHalfWord(dest, writeValue); + dest += 2; + byteShift = 0; + byteCount = 0; + writeValue = 0; + } + len--; + if(len == 0) + return; + } + } + } +} + +void BIOS_LZ77UnCompWram() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("LZ77UnCompWram: 0x%08x,0x%08x (VCOUNT=%d)\n", reg[0].I, reg[1].I, + VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) + return; + + int len = header >> 8; + + while(len > 0) + { + u8 d = CPUReadByte(source++); + + if(d) + { + for(int i = 0; i < 8; i++) + { + if(d & 0x80) + { + u16 data = CPUReadByte(source++) << 8; + data |= CPUReadByte(source++); + int length = (data >> 12) + 3; + int offset = (data & 0x0FFF); + u32 windowOffset = dest - offset - 1; + for(int i = 0; i < length; i++) + { + CPUWriteByte(dest++, CPUReadByte(windowOffset++)); + len--; + if(len == 0) + return; + } + } + else + { + CPUWriteByte(dest++, CPUReadByte(source++)); + len--; + if(len == 0) + return; + } + d <<= 1; + } + } + else + { + for(int i = 0; i < 8; i++) + { + CPUWriteByte(dest++, CPUReadByte(source++)); + len--; + if(len == 0) + return; + } + } + } +} + +void BIOS_ObjAffineSet() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("ObjAffineSet: 0x%08x,0x%08x,0x%08x,0x%08x (VCOUNT=%d)\n", + reg[0].I, + reg[1].I, + reg[2].I, + reg[3].I, + VCOUNT); + } +#endif + + u32 src = reg[0].I; + u32 dest = reg[1].I; + int num = reg[2].I; + int offset = reg[3].I; + + for(int i = 0; i < num; i++) + { + s16 rx = CPUReadHalfWord(src); + src+=2; + s16 ry = CPUReadHalfWord(src); + src+=2; + u16 theta = CPUReadHalfWord(src)>>8; + src+=4; // keep structure alignment + + s32 a = (s32)sineTable[(theta+0x40)&255]; + s32 b = (s32)sineTable[theta]; + + s16 dx = ((s32)rx * a)>>14; + s16 dmx = ((s32)rx * b)>>14; + s16 dy = ((s32)ry * b)>>14; + s16 dmy = ((s32)ry * a)>>14; + + CPUWriteHalfWord(dest, dx); + dest += offset; + CPUWriteHalfWord(dest, -dmx); + dest += offset; + CPUWriteHalfWord(dest, dy); + dest += offset; + CPUWriteHalfWord(dest, dmy); + dest += offset; + } +} + +void BIOS_RegisterRamReset(u32 flags) +{ + // no need to trace here. this is only called directly from GBA.cpp + // to emulate bios initialization + + if(flags) + { + if(flags & 0x01) + { + // clear work RAM + memset(workRAM, 0, 0x40000); + } + if(flags & 0x02) + { + // clear internal RAM + memset(internalRAM, 0, 0x7e00); // don't clear 0x7e00-0x7fff + } + if(flags & 0x04) + { + // clear palette RAM + memset(paletteRAM, 0, 0x400); + } + if(flags & 0x08) + { + // clear VRAM + memset(vram, 0, 0x18000); + } + if(flags & 0x10) + { + // clean OAM + memset(oam, 0, 0x400); + } + + if(flags & 0x80) + { + int i; + for(i = 0; i < 8; i++) + CPUUpdateRegister(0x200+i*2, 0); + + CPUUpdateRegister(0x202, 0xFFFF); + + for(i = 0; i < 8; i++) + CPUUpdateRegister(0x4+i*2, 0); + + for(i = 0; i < 16; i++) + CPUUpdateRegister(0x20+i*2, 0); + + for(i = 0; i < 24; i++) + CPUUpdateRegister(0xb0+i*2, 0); + + CPUUpdateRegister(0x130, 0); + CPUUpdateRegister(0x20, 0x100); + CPUUpdateRegister(0x30, 0x100); + CPUUpdateRegister(0x26, 0x100); + CPUUpdateRegister(0x36, 0x100); + } + + if(flags & 0x20) + { + int i; + for(i = 0; i < 8; i++) + CPUUpdateRegister(0x110+i*2, 0); + CPUUpdateRegister(0x134, 0x8000); + for(i = 0; i < 7; i++) + CPUUpdateRegister(0x140+i*2, 0); + } + + if(flags & 0x40) + { + int i; + CPUWriteByte(0x4000084, 0); + CPUWriteByte(0x4000084, 0x80); + CPUWriteMemory(0x4000080, 0x880e0000); + CPUUpdateRegister(0x88, CPUReadHalfWord(0x4000088)&0x3ff); + CPUWriteByte(0x4000070, 0x70); + for(i = 0; i < 8; i++) + CPUUpdateRegister(0x90+i*2, 0); + CPUWriteByte(0x4000070, 0); + for(i = 0; i < 8; i++) + CPUUpdateRegister(0x90+i*2, 0); + CPUWriteByte(0x4000084, 0); + } + } +} + +void BIOS_RegisterRamReset() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("RegisterRamReset: 0x%08x (VCOUNT=%d)\n", + reg[0].I, + VCOUNT); + } +#endif + + BIOS_RegisterRamReset(reg[0].I); +} + +void BIOS_RLUnCompVram() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("RLUnCompVram: 0x%08x,0x%08x (VCOUNT=%d)\n", + reg[0].I, + reg[1].I, + VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) + return; + + int len = header >> 8; + int byteCount = 0; + int byteShift = 0; + u32 writeValue = 0; + + while(len > 0) + { + u8 d = CPUReadByte(source++); + int l = d & 0x7F; + if(d & 0x80) + { + u8 data = CPUReadByte(source++); + l += 3; + for(int i = 0;i < l; i++) + { + writeValue |= (data << byteShift); + byteShift += 8; + byteCount++; + + if(byteCount == 2) + { + CPUWriteHalfWord(dest, writeValue); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + len--; + if(len == 0) + return; + } + } + else + { + l++; + for(int i = 0; i < l; i++) + { + writeValue |= (CPUReadByte(source++) << byteShift); + byteShift += 8; + byteCount++; + if(byteCount == 2) + { + CPUWriteHalfWord(dest, writeValue); + dest += 2; + byteCount = 0; + byteShift = 0; + writeValue = 0; + } + len--; + if(len == 0) + return; + } + } + } +} + +void BIOS_RLUnCompWram() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("RLUnCompWram: 0x%08x,0x%08x (VCOUNT=%d)\n", + reg[0].I, + reg[1].I, + VCOUNT); + } +#endif + + u32 source = reg[0].I; + u32 dest = reg[1].I; + + u32 header = CPUReadMemory(source); + source += 4; + + if(((source & 0xe000000) == 0) || + ((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0) + return; + + int len = header >> 8; + + while(len > 0) + { + u8 d = CPUReadByte(source++); + int l = d & 0x7F; + if(d & 0x80) + { + u8 data = CPUReadByte(source++); + l += 3; + for(int i = 0;i < l; i++) + { + CPUWriteByte(dest++, data); + len--; + if(len == 0) + return; + } + } + else + { + l++; + for(int i = 0; i < l; i++) + { + CPUWriteByte(dest++, CPUReadByte(source++)); + len--; + if(len == 0) + return; + } + } + } +} + +void BIOS_SoftReset() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("SoftReset: (VCOUNT=%d)\n", VCOUNT); + } +#endif + + armState = true; + armMode = 0x1F; + armIrqEnable = false; + C_FLAG = V_FLAG = N_FLAG = Z_FLAG = false; + reg[13].I = 0x03007F00; + reg[14].I = 0x00000000; + reg[16].I = 0x00000000; + reg[R13_IRQ].I = 0x03007FA0; + reg[R14_IRQ].I = 0x00000000; + reg[SPSR_IRQ].I = 0x00000000; + reg[R13_SVC].I = 0x03007FE0; + reg[R14_SVC].I = 0x00000000; + reg[SPSR_SVC].I = 0x00000000; + u8 b = internalRAM[0x7ffa]; + + memset(&internalRAM[0x7e00], 0, 0x200); + + if(b) + { + armNextPC = 0x02000000; + reg[15].I = 0x02000004; + } + else + { + armNextPC = 0x08000000; + reg[15].I = 0x08000004; + } +} + +void BIOS_Sqrt() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Sqrt: %08x (VCOUNT=%2d)\n", + reg[0].I, + VCOUNT); + } +#endif + reg[0].I = (u32)sqrt((double)reg[0].I); +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("Sqrt: return=%08x\n", + reg[0].I); + } +#endif +} + +void BIOS_MidiKey2Freq() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("MidiKey2Freq: WaveData=%08x mk=%08x fp=%08x\n", + reg[0].I, + reg[1].I, + reg[2].I); + } +#endif + int freq = CPUReadMemory(reg[0].I+4); + double tmp; + tmp = ((double)(180 - reg[1].I)) - ((double)reg[2].I / 256.f); + tmp = pow((double)2.f, tmp / 12.f); + reg[0].I = (int)((double)freq / tmp); + +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("MidiKey2Freq: return %08x\n", + reg[0].I); + } +#endif +} + +void BIOS_SndDriverJmpTableCopy() +{ +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_SWI) + { + log("SndDriverJmpTableCopy: dest=%08x\n", + reg[0].I); + } +#endif + for(int i = 0; i < 0x24; i++) + { + CPUWriteMemory(reg[0].I, 0x9c); + reg[0].I += 4; + } +} diff --git a/source/vba/bios.h b/source/vba/bios.h index 538a0c91..58b3417f 100644 --- a/source/vba/bios.h +++ b/source/vba/bios.h @@ -1,47 +1,46 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004-2006 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_BIOS_H -#define VBA_BIOS_H - -extern void BIOS_ArcTan(); -extern void BIOS_ArcTan2(); -extern void BIOS_BitUnPack(); -extern void BIOS_GetBiosChecksum(); -extern void BIOS_BgAffineSet(); -extern void BIOS_CpuSet(); -extern void BIOS_CpuFastSet(); -extern void BIOS_Diff8bitUnFilterWram(); -extern void BIOS_Diff8bitUnFilterVram(); -extern void BIOS_Diff16bitUnFilter(); -extern void BIOS_Div(); -extern void BIOS_DivARM(); -extern void BIOS_HuffUnComp(); -extern void BIOS_LZ77UnCompVram(); -extern void BIOS_LZ77UnCompWram(); -extern void BIOS_ObjAffineSet(); -extern void BIOS_RegisterRamReset(); -extern void BIOS_RegisterRamReset(u32); -extern void BIOS_RLUnCompVram(); -extern void BIOS_RLUnCompWram(); -extern void BIOS_SoftReset(); -extern void BIOS_Sqrt(); -extern void BIOS_MidiKey2Freq(); -extern void BIOS_SndDriverJmpTableCopy(); -#endif // VBA_BIOS_H +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_BIOS_H +#define VBA_BIOS_H + +extern void BIOS_ArcTan(); +extern void BIOS_ArcTan2(); +extern void BIOS_BitUnPack(); +extern void BIOS_BgAffineSet(); +extern void BIOS_CpuSet(); +extern void BIOS_CpuFastSet(); +extern void BIOS_Diff8bitUnFilterWram(); +extern void BIOS_Diff8bitUnFilterVram(); +extern void BIOS_Diff16bitUnFilter(); +extern void BIOS_Div(); +extern void BIOS_DivARM(); +extern void BIOS_HuffUnComp(); +extern void BIOS_LZ77UnCompVram(); +extern void BIOS_LZ77UnCompWram(); +extern void BIOS_ObjAffineSet(); +extern void BIOS_RegisterRamReset(); +extern void BIOS_RegisterRamReset(u32); +extern void BIOS_RLUnCompVram(); +extern void BIOS_RLUnCompWram(); +extern void BIOS_SoftReset(); +extern void BIOS_Sqrt(); +extern void BIOS_MidiKey2Freq(); +extern void BIOS_SndDriverJmpTableCopy(); +#endif // VBA_BIOS_H diff --git a/source/vba/elf.cpp b/source/vba/elf.cpp index da7e418c..25cce478 100644 --- a/source/vba/elf.cpp +++ b/source/vba/elf.cpp @@ -1,2994 +1,3248 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include -#include - -#include "agb/GBA.h" -#include "Port.h" -#include "elf.h" -#include "NLS.h" - -#define elfReadMemory(addr) \ - READ32LE((&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) - -#define DW_TAG_array_type 0x01 -#define DW_TAG_enumeration_type 0x04 -#define DW_TAG_formal_parameter 0x05 -#define DW_TAG_label 0x0a -#define DW_TAG_lexical_block 0x0b -#define DW_TAG_member 0x0d -#define DW_TAG_pointer_type 0x0f -#define DW_TAG_reference_type 0x10 -#define DW_TAG_compile_unit 0x11 -#define DW_TAG_structure_type 0x13 -#define DW_TAG_subroutine_type 0x15 -#define DW_TAG_typedef 0x16 -#define DW_TAG_union_type 0x17 -#define DW_TAG_unspecified_parameters 0x18 -#define DW_TAG_inheritance 0x1c -#define DW_TAG_inlined_subroutine 0x1d -#define DW_TAG_subrange_type 0x21 -#define DW_TAG_base_type 0x24 -#define DW_TAG_const_type 0x26 -#define DW_TAG_enumerator 0x28 -#define DW_TAG_subprogram 0x2e -#define DW_TAG_variable 0x34 -#define DW_TAG_volatile_type 0x35 - -#define DW_AT_sibling 0x01 -#define DW_AT_location 0x02 -#define DW_AT_name 0x03 -#define DW_AT_byte_size 0x0b -#define DW_AT_bit_offset 0x0c -#define DW_AT_bit_size 0x0d -#define DW_AT_stmt_list 0x10 -#define DW_AT_low_pc 0x11 -#define DW_AT_high_pc 0x12 -#define DW_AT_language 0x13 -#define DW_AT_compdir 0x1b -#define DW_AT_const_value 0x1c -#define DW_AT_containing_type 0x1d -#define DW_AT_inline 0x20 -#define DW_AT_producer 0x25 -#define DW_AT_prototyped 0x27 -#define DW_AT_upper_bound 0x2f -#define DW_AT_abstract_origin 0x31 -#define DW_AT_accessibility 0x32 -#define DW_AT_artificial 0x34 -#define DW_AT_data_member_location 0x38 -#define DW_AT_decl_file 0x3a -#define DW_AT_decl_line 0x3b -#define DW_AT_declaration 0x3c -#define DW_AT_encoding 0x3e -#define DW_AT_external 0x3f -#define DW_AT_frame_base 0x40 -#define DW_AT_macro_info 0x43 -#define DW_AT_specification 0x47 -#define DW_AT_type 0x49 -#define DW_AT_virtuality 0x4c -#define DW_AT_vtable_elem_location 0x4d -// DWARF 2.1/3.0 extensions -#define DW_AT_entry_pc 0x52 -#define DW_AT_ranges 0x55 -// ARM Compiler extensions -#define DW_AT_proc_body 0x2000 -#define DW_AT_save_offset 0x2001 -#define DW_AT_user_2002 0x2002 -// MIPS extensions -#define DW_AT_MIPS_linkage_name 0x2007 - -#define DW_FORM_addr 0x01 -#define DW_FORM_data2 0x05 -#define DW_FORM_data4 0x06 -#define DW_FORM_string 0x08 -#define DW_FORM_block 0x09 -#define DW_FORM_block1 0x0a -#define DW_FORM_data1 0x0b -#define DW_FORM_flag 0x0c -#define DW_FORM_sdata 0x0d -#define DW_FORM_strp 0x0e -#define DW_FORM_udata 0x0f -#define DW_FORM_ref_addr 0x10 -#define DW_FORM_ref4 0x13 -#define DW_FORM_ref_udata 0x15 -#define DW_FORM_indirect 0x16 - -#define DW_OP_addr 0x03 -#define DW_OP_plus_uconst 0x23 -#define DW_OP_reg0 0x50 -#define DW_OP_reg1 0x51 -#define DW_OP_reg2 0x52 -#define DW_OP_reg3 0x53 -#define DW_OP_reg4 0x54 -#define DW_OP_reg5 0x55 -#define DW_OP_reg6 0x56 -#define DW_OP_reg7 0x57 -#define DW_OP_reg8 0x58 -#define DW_OP_reg9 0x59 -#define DW_OP_reg10 0x5a -#define DW_OP_reg11 0x5b -#define DW_OP_reg12 0x5c -#define DW_OP_reg13 0x5d -#define DW_OP_reg14 0x5e -#define DW_OP_reg15 0x5f -#define DW_OP_fbreg 0x91 - -#define DW_LNS_extended_op 0x00 -#define DW_LNS_copy 0x01 -#define DW_LNS_advance_pc 0x02 -#define DW_LNS_advance_line 0x03 -#define DW_LNS_set_file 0x04 -#define DW_LNS_set_column 0x05 -#define DW_LNS_negate_stmt 0x06 -#define DW_LNS_set_basic_block 0x07 -#define DW_LNS_const_add_pc 0x08 -#define DW_LNS_fixed_advance_pc 0x09 - -#define DW_LNE_end_sequence 0x01 -#define DW_LNE_set_address 0x02 -#define DW_LNE_define_file 0x03 - -#define DW_CFA_advance_loc 0x01 -#define DW_CFA_offset 0x02 -#define DW_CFA_restore 0x03 -#define DW_CFA_set_loc 0x01 -#define DW_CFA_advance_loc1 0x02 -#define DW_CFA_advance_loc2 0x03 -#define DW_CFA_advance_loc4 0x04 -#define DW_CFA_offset_extended 0x05 -#define DW_CFA_restore_extended 0x06 -#define DW_CFA_undefined 0x07 -#define DW_CFA_same_value 0x08 -#define DW_CFA_register 0x09 -#define DW_CFA_remember_state 0x0a -#define DW_CFA_restore_state 0x0b -#define DW_CFA_def_cfa 0x0c -#define DW_CFA_def_cfa_register 0x0d -#define DW_CFA_def_cfa_offset 0x0e -#define DW_CFA_nop 0x00 - -#define CASE_TYPE_TAG \ - case DW_TAG_const_type:\ - case DW_TAG_volatile_type:\ - case DW_TAG_pointer_type:\ - case DW_TAG_base_type:\ - case DW_TAG_array_type:\ - case DW_TAG_structure_type:\ - case DW_TAG_union_type:\ - case DW_TAG_typedef:\ - case DW_TAG_subroutine_type:\ - case DW_TAG_enumeration_type:\ - case DW_TAG_enumerator:\ - case DW_TAG_reference_type - -struct ELFcie { - ELFcie *next; - u32 offset; - u8 *augmentation; - u32 codeAlign; - s32 dataAlign; - int returnAddress; - u8 *data; - u32 dataLen; -}; - -struct ELFfde { - ELFcie *cie; - u32 address; - u32 end; - u8 *data; - u32 dataLen; -}; - -enum ELFRegMode { - REG_NOT_SET, - REG_OFFSET, - REG_REGISTER -}; - - -struct ELFFrameStateRegister { - ELFRegMode mode; - int reg; - s32 offset; -}; - -struct ELFFrameStateRegisters { - ELFFrameStateRegister regs[16]; - ELFFrameStateRegisters *previous; -}; - -enum ELFCfaMode { - CFA_NOT_SET, - CFA_REG_OFFSET -}; - -struct ELFFrameState { - ELFFrameStateRegisters registers; - - ELFCfaMode cfaMode; - int cfaRegister; - s32 cfaOffset; - - u32 pc; - - int dataAlign; - int codeAlign; - int returnAddress; -}; - -extern bool cpuIsMultiBoot; - -Symbol *elfSymbols = NULL; -char *elfSymbolsStrTab = NULL; -int elfSymbolsCount = 0; - -ELFSectionHeader **elfSectionHeaders = NULL; -char *elfSectionHeadersStringTable = NULL; -int elfSectionHeadersCount = 0; -u8 *elfFileData = NULL; - -CompileUnit *elfCompileUnits = NULL; -DebugInfo *elfDebugInfo = NULL; -char *elfDebugStrings = NULL; - -ELFcie *elfCies = NULL; -ELFfde **elfFdes = NULL; -int elfFdeCount = 0; - -CompileUnit *elfCurrentUnit = NULL; - -u32 elfRead4Bytes(u8 *); -u16 elfRead2Bytes(u8 *); - -CompileUnit *elfGetCompileUnit(u32 addr) -{ - if(elfCompileUnits) { - CompileUnit *unit = elfCompileUnits; - while(unit) { - if(unit->lowPC) { - if(addr >= unit->lowPC && addr < unit->highPC) - return unit; - } else { - ARanges *r = unit->ranges; - if(r) { - int count = r->count; - for(int j = 0; j < count; j++) { - if(addr >= r->ranges[j].lowPC && addr < r->ranges[j].highPC) - return unit; - } - } - } - unit = unit->next; - } - } - return NULL; -} - -const char *elfGetAddressSymbol(u32 addr) -{ - static char buffer[256]; - - CompileUnit *unit = elfGetCompileUnit(addr); - // found unit, need to find function - if(unit) { - Function *func = unit->functions; - while(func) { - if(addr >= func->lowPC && addr < func->highPC) { - int offset = addr - func->lowPC; - const char *name = func->name; - if(!name) - name = ""; - if(offset) - sprintf(buffer, "%s+%d", name, offset); - else - strcpy(buffer, name); - return buffer; - } - func = func->next; - } - } - - if(elfSymbolsCount) { - for(int i = 0; i < elfSymbolsCount; i++) { - Symbol *s = &elfSymbols[i]; - if((addr >= s->value) && addr < (s->value+s->size)) { - int offset = addr-s->value; - const char *name = s->name; - if(name == NULL) - name = ""; - if(offset) - sprintf(buffer, "%s+%d", name, addr-s->value); - else - strcpy(buffer, name); - return buffer; - } else if(addr == s->value) { - if(s->name) - strcpy(buffer, s->name); - else - strcpy(buffer, ""); - return buffer; - } - } - } - - return ""; -} - -bool elfFindLineInModule(u32 *addr, const char *name, int line) -{ - CompileUnit *unit = elfCompileUnits; - - while(unit) { - if(unit->lineInfoTable) { - int i; - int count = unit->lineInfoTable->fileCount; - char *found = NULL; - for(i = 0; i < count; i++) { - if(strcmp(name, unit->lineInfoTable->files[i]) == 0) { - found = unit->lineInfoTable->files[i]; - break; - } - } - // found a matching filename... try to find line now - if(found) { - LineInfoItem *table = unit->lineInfoTable->lines; - count = unit->lineInfoTable->number; - for(i = 0; i < count; i++) { - if(table[i].file == found && table[i].line == line) { - *addr = table[i].address; - return true; - } - } - // we can only find a single match - return false; - } - } - unit = unit->next; - } - return false; -} - -int elfFindLine(CompileUnit *unit, Function * /* func */, u32 addr, const char **f) -{ - int currentLine = -1; - if(unit->hasLineInfo) { - int count = unit->lineInfoTable->number; - LineInfoItem *table = unit->lineInfoTable->lines; - int i; - for(i = 0; i < count; i++) { - if(addr <= table[i].address) - break; - } - if(i == count) - i--; - *f = table[i].file; - currentLine = table[i].line; - } - return currentLine; -} - -bool elfFindLineInUnit(u32 *addr, CompileUnit *unit, int line) -{ - if(unit->hasLineInfo) { - int count = unit->lineInfoTable->number; - LineInfoItem *table = unit->lineInfoTable->lines; - int i; - for(i = 0; i < count; i++) { - if(line == table[i].line) { - *addr = table[i].address; - return true; - } - } - } - return false; -} - -bool elfGetCurrentFunction(u32 addr, Function **f, CompileUnit **u) -{ - CompileUnit *unit = elfGetCompileUnit(addr); - // found unit, need to find function - if(unit) { - Function *func = unit->functions; - while(func) { - if(addr >= func->lowPC && addr < func->highPC) { - *f = func; - *u = unit; - return true; - } - func = func->next; - } - } - return false; -} - -bool elfGetObject(const char *name, Function *f, CompileUnit *u, Object **o) -{ - if(f && u) { - Object *v = f->variables; - - while(v) { - if(strcmp(name, v->name) == 0) { - *o = v; - return true; - } - v = v->next; - } - v = f->parameters; - while(v) { - if(strcmp(name, v->name) == 0) { - *o = v; - return true; - } - v = v->next; - } - v = u->variables; - while(v) { - if(strcmp(name, v->name) == 0) { - *o = v; - return true; - } - v = v->next; - } - } - - CompileUnit *c = elfCompileUnits; - - while(c) { - if(c != u) { - Object *v = c->variables; - while(v) { - if(strcmp(name, v->name) == 0) { - *o = v; - return true; - } - v = v->next; - } - } - c = c->next; - } - - return false; -} - -const char *elfGetSymbol(int i, u32 *value, u32 *size, int *type) -{ - if(i < elfSymbolsCount) { - Symbol *s = &elfSymbols[i]; - *value = s->value; - *size = s->size; - *type = s->type; - return s->name; - } - return NULL; -} - -bool elfGetSymbolAddress(const char *sym, u32 *addr, u32 *size, int *type) -{ - if(elfSymbolsCount) { - for(int i = 0; i < elfSymbolsCount; i++) { - Symbol *s = &elfSymbols[i]; - if(strcmp(sym, s->name) == 0) { - *addr = s->value; - *size = s->size; - *type = s->type; - return true; - } - } - } - return false; -} - -ELFfde *elfGetFde(u32 address) -{ - if(elfFdes) { - int i; - for(i = 0; i < elfFdeCount; i++) { - if(address >= elfFdes[i]->address && - address < elfFdes[i]->end) { - return elfFdes[i]; - } - } - } - - return NULL; -} - -void elfExecuteCFAInstructions(ELFFrameState *state, u8 *data, u32 len, - u32 pc) -{ - u8 *end = data + len; - int bytes; - int reg; - ELFFrameStateRegisters *fs; - - while(data < end && state->pc < pc) { - u8 op = *data++; - - switch(op >> 6) { - case DW_CFA_advance_loc: - state->pc += (op & 0x3f) * state->codeAlign; - break; - case DW_CFA_offset: - reg = op & 0x3f; - state->registers.regs[reg].mode = REG_OFFSET; - state->registers.regs[reg].offset = state->dataAlign * - (s32)elfReadLEB128(data, &bytes); - data += bytes; - break; - case DW_CFA_restore: - // we don't care much about the other possible settings, - // so just setting to unset is enough for now - state->registers.regs[op & 0x3f].mode = REG_NOT_SET; - break; - case 0: - switch(op & 0x3f) { - case DW_CFA_nop: - break; - case DW_CFA_advance_loc1: - state->pc += state->codeAlign * (*data++); - break; - case DW_CFA_advance_loc2: - state->pc += state->codeAlign * elfRead2Bytes(data); - data += 2; - break; - case DW_CFA_advance_loc4: - state->pc += state->codeAlign * elfRead4Bytes(data); - data += 4; - break; - case DW_CFA_offset_extended: - reg = elfReadLEB128(data, &bytes); - data += bytes; - state->registers.regs[reg].mode = REG_OFFSET; - state->registers.regs[reg].offset = state->dataAlign * - (s32)elfReadLEB128(data, &bytes); - data += bytes; - break; - case DW_CFA_restore_extended: - case DW_CFA_undefined: - case DW_CFA_same_value: - reg = elfReadLEB128(data, &bytes); - data += bytes; - state->registers.regs[reg].mode = REG_NOT_SET; - break; - case DW_CFA_register: - reg = elfReadLEB128(data, &bytes); - data += bytes; - state->registers.regs[reg].mode = REG_REGISTER; - state->registers.regs[reg].reg = elfReadLEB128(data, &bytes); - data += bytes; - break; - case DW_CFA_remember_state: - fs = (ELFFrameStateRegisters *)calloc(1, - sizeof(ELFFrameStateRegisters)); - memcpy(fs, &state->registers, sizeof(ELFFrameStateRegisters)); - state->registers.previous = fs; - break; - case DW_CFA_restore_state: - if(state->registers.previous == NULL) { - printf("Error: previous frame state is NULL.\n"); - return; - } - fs = state->registers.previous; - memcpy(&state->registers, fs, sizeof(ELFFrameStateRegisters)); - free(fs); - break; - case DW_CFA_def_cfa: - state->cfaRegister = elfReadLEB128(data, &bytes); - data += bytes; - state->cfaOffset = (s32)elfReadLEB128(data, &bytes); - data += bytes; - state->cfaMode = CFA_REG_OFFSET; - break; - case DW_CFA_def_cfa_register: - state->cfaRegister = elfReadLEB128(data, &bytes); - data += bytes; - state->cfaMode = CFA_REG_OFFSET; - break; - case DW_CFA_def_cfa_offset: - state->cfaOffset = (s32)elfReadLEB128(data, &bytes); - data += bytes; - state->cfaMode = CFA_REG_OFFSET; - break; - default: - printf("Unknown CFA opcode %08x\n", op); - return; - } - break; - default: - printf("Unknown CFA opcode %08x\n", op); - return; - } - } -} - -ELFFrameState *elfGetFrameState(ELFfde *fde, u32 address) -{ - ELFFrameState *state = (ELFFrameState *)calloc(1, sizeof(ELFFrameState)); - state->pc = fde->address; - state->dataAlign = fde->cie->dataAlign; - state->codeAlign = fde->cie->codeAlign; - state->returnAddress = fde->cie->returnAddress; - - elfExecuteCFAInstructions(state, - fde->cie->data, - fde->cie->dataLen, - 0xffffffff); - elfExecuteCFAInstructions(state, - fde->data, - fde->dataLen, - address); - - return state; -} - -void elfPrintCallChain(u32 address) -{ - int count = 1; - - reg_pair regs[15]; - reg_pair newRegs[15]; - - memcpy(®s[0], ®[0], sizeof(reg_pair) * 15); - - while(count < 20) { - const char *addr = elfGetAddressSymbol(address); - if(*addr == 0) - addr = "???"; - - printf("%08x %s\n", address, addr); - - ELFfde *fde = elfGetFde(address); - - if(fde == NULL) { - break; - } - - ELFFrameState *state = elfGetFrameState(fde, address); - - if(!state) { - break; - } - - if(state->cfaMode == CFA_REG_OFFSET) { - memcpy(&newRegs[0], ®s[0], sizeof(reg_pair) * 15); - u32 addr = 0; - for(int i = 0; i < 15; i++) { - ELFFrameStateRegister *r = &state->registers. - regs[i]; - - switch(r->mode) { - case REG_NOT_SET: - newRegs[i].I = regs[i].I; - break; - case REG_OFFSET: - newRegs[i].I = elfReadMemory(regs[state->cfaRegister].I + - state->cfaOffset + - r->offset); - break; - case REG_REGISTER: - newRegs[i].I = regs[r->reg].I; - break; - default: - printf("Unknown register mode: %d\n", r->mode); - break; - } - } - memcpy(regs, newRegs, sizeof(reg_pair)*15); - addr = newRegs[14].I; - addr &= 0xfffffffe; - address = addr; - count++; - } else { - printf("CFA not set\n"); - break; - } - if(state->registers.previous) { - ELFFrameStateRegisters *prev = state->registers.previous; - - while(prev) { - ELFFrameStateRegisters *p = prev->previous; - free(prev); - prev = p; - } - } - free(state); - } -} - -u32 elfDecodeLocation(Function *f, ELFBlock *o, LocationType *type, u32 base) -{ - u32 framebase = 0; - if(f && f->frameBase) { - ELFBlock *b = f->frameBase; - switch(*b->data) { - case DW_OP_reg0: - case DW_OP_reg1: - case DW_OP_reg2: - case DW_OP_reg3: - case DW_OP_reg4: - case DW_OP_reg5: - case DW_OP_reg6: - case DW_OP_reg7: - case DW_OP_reg8: - case DW_OP_reg9: - case DW_OP_reg10: - case DW_OP_reg11: - case DW_OP_reg12: - case DW_OP_reg13: - case DW_OP_reg14: - case DW_OP_reg15: - framebase = reg[*b->data-0x50].I; - break; - default: - fprintf(stderr, "Unknown frameBase %02x\n", *b->data); - break; - } - } - - ELFBlock *loc = o; - u32 location = 0; - int bytes = 0; - if(loc) { - switch(*loc->data) { - case DW_OP_addr: - location = elfRead4Bytes(loc->data+1); - *type = LOCATION_memory; - break; - case DW_OP_plus_uconst: - location = base + elfReadLEB128(loc->data+1, &bytes); - *type = LOCATION_memory; - break; - case DW_OP_reg0: - case DW_OP_reg1: - case DW_OP_reg2: - case DW_OP_reg3: - case DW_OP_reg4: - case DW_OP_reg5: - case DW_OP_reg6: - case DW_OP_reg7: - case DW_OP_reg8: - case DW_OP_reg9: - case DW_OP_reg10: - case DW_OP_reg11: - case DW_OP_reg12: - case DW_OP_reg13: - case DW_OP_reg14: - case DW_OP_reg15: - location = *loc->data - 0x50; - *type = LOCATION_register; - break; - case DW_OP_fbreg: - { - int bytes; - s32 off = elfReadSignedLEB128(loc->data+1, &bytes); - location = framebase + off; - *type = LOCATION_memory; - } - break; - default: - fprintf(stderr, "Unknown location %02x\n", *loc->data); - break; - } - } - return location; -} - -u32 elfDecodeLocation(Function *f, ELFBlock *o, LocationType *type) -{ - return elfDecodeLocation(f, o, type, 0); -} - -// reading function - -u32 elfRead4Bytes(u8 *data) -{ - u32 value = *data++; - value |= (*data++ << 8); - value |= (*data++ << 16); - value |= (*data << 24); - return value; -} - -u16 elfRead2Bytes(u8 *data) -{ - u16 value = *data++; - value |= (*data << 8); - return value; -} - -char *elfReadString(u8 *data, int *bytesRead) -{ - if(*data == 0) { - *bytesRead = 1; - return NULL; - } - *bytesRead = (int)strlen((char *)data) + 1; - return (char *)data; -} - -s32 elfReadSignedLEB128(u8 *data, int *bytesRead) -{ - s32 result = 0; - int shift = 0; - int count = 0; - - u8 byte; - do { - byte = *data++; - count++; - result |= (byte & 0x7f) << shift; - shift += 7; - } while(byte & 0x80); - if((shift < 32) && (byte & 0x40)) - result |= -(1 << shift); - *bytesRead = count; - return result; -} - -u32 elfReadLEB128(u8 *data, int *bytesRead) -{ - u32 result = 0; - int shift = 0; - int count = 0; - u8 byte; - do { - byte = *data++; - count++; - result |= (byte & 0x7f) << shift; - shift += 7; - } while(byte & 0x80); - *bytesRead = count; - return result; -} - -u8 *elfReadSection(u8 *data, ELFSectionHeader *sh) -{ - return data + READ32LE(&sh->offset); -} - -ELFSectionHeader *elfGetSectionByName(const char *name) -{ - for(int i = 0; i < elfSectionHeadersCount; i++) { - if(strcmp(name, - &elfSectionHeadersStringTable[READ32LE(&elfSectionHeaders[i]-> - name)]) == 0) { - return elfSectionHeaders[i]; - } - } - return NULL; -} - -ELFSectionHeader *elfGetSectionByNumber(int number) -{ - if(number < elfSectionHeadersCount) { - return elfSectionHeaders[number]; - } - return NULL; -} - -CompileUnit *elfGetCompileUnitForData(u8 *data) -{ - u8 *end = elfCurrentUnit->top + 4 + elfCurrentUnit->length; - - if(data >= elfCurrentUnit->top && data < end) - return elfCurrentUnit; - - CompileUnit *unit = elfCompileUnits; - - while(unit) { - end = unit->top + 4 + unit->length; - - if(data >= unit->top && data < end) - return unit; - - unit = unit->next; - } - - printf("Error: cannot find reference to compile unit at offset %08x\n", - (int)(data - elfDebugInfo->infodata)); - exit(-1); -} - -u8 *elfReadAttribute(u8 *data, ELFAttr *attr) -{ - int bytes; - int form = attr->form; - start: - switch(form) { - case DW_FORM_addr: - attr->value = elfRead4Bytes(data); - data += 4; - break; - case DW_FORM_data2: - attr->value = elfRead2Bytes(data); - data += 2; - break; - case DW_FORM_data4: - attr->value = elfRead4Bytes(data); - data += 4; - break; - case DW_FORM_string: - attr->string = (char *)data; - data += strlen(attr->string)+1; - break; - case DW_FORM_strp: - attr->string = elfDebugStrings + elfRead4Bytes(data); - data += 4; - break; - case DW_FORM_block: - attr->block = (ELFBlock *)malloc(sizeof(ELFBlock)); - attr->block->length = elfReadLEB128(data, &bytes); - data += bytes; - attr->block->data = data; - data += attr->block->length; - break; - case DW_FORM_block1: - attr->block = (ELFBlock *)malloc(sizeof(ELFBlock)); - attr->block->length = *data++; - attr->block->data = data; - data += attr->block->length; - break; - case DW_FORM_data1: - attr->value = *data++; - break; - case DW_FORM_flag: - attr->flag = (*data++) ? true : false; - break; - case DW_FORM_sdata: - attr->value = elfReadSignedLEB128(data, &bytes); - data += bytes; - break; - case DW_FORM_udata: - attr->value = elfReadLEB128(data, &bytes); - data += bytes; - break; - case DW_FORM_ref_addr: - attr->value = (u32)((elfDebugInfo->infodata + elfRead4Bytes(data)) - elfGetCompileUnitForData(data)->top); - data += 4; - break; - case DW_FORM_ref4: - attr->value = elfRead4Bytes(data); - data += 4; - break; - case DW_FORM_ref_udata: - attr->value = (u32)((elfDebugInfo->infodata + (elfGetCompileUnitForData(data)->top - elfDebugInfo->infodata) + elfReadLEB128(data, &bytes)) - elfCurrentUnit->top); - data += bytes; - break; - case DW_FORM_indirect: - form = elfReadLEB128(data, &bytes); - data += bytes; - goto start; - default: - fprintf(stderr, "Unsupported FORM %02x\n", form); - exit(-1); - } - return data; -} - -ELFAbbrev *elfGetAbbrev(ELFAbbrev **table, u32 number) -{ - int hash = number % 121; - - ELFAbbrev *abbrev = table[hash]; - - while(abbrev) { - if(abbrev->number == number) - return abbrev; - abbrev = abbrev->next; - } - return NULL; -} - -ELFAbbrev **elfReadAbbrevs(u8 *data, u32 offset) -{ - data += offset; - ELFAbbrev **abbrevs = (ELFAbbrev **)calloc(sizeof(ELFAbbrev *)*121,1); - int bytes = 0; - u32 number = elfReadLEB128(data, &bytes); - data += bytes; - while(number) { - ELFAbbrev *abbrev = (ELFAbbrev *)calloc(sizeof(ELFAbbrev),1); - - // read tag information - abbrev->number = number; - abbrev->tag = elfReadLEB128(data, &bytes); - data += bytes; - abbrev->hasChildren = *data++ ? true: false; - - // read attributes - int name = elfReadLEB128(data, &bytes); - data += bytes; - int form = elfReadLEB128(data, &bytes); - data += bytes; - - while(name) { - if((abbrev->numAttrs % 4) == 0) { - abbrev->attrs = (ELFAttr *)realloc(abbrev->attrs, - (abbrev->numAttrs + 4) * - sizeof(ELFAttr)); - } - abbrev->attrs[abbrev->numAttrs].name = name; - abbrev->attrs[abbrev->numAttrs++].form = form; - - name = elfReadLEB128(data, &bytes); - data += bytes; - form = elfReadLEB128(data, &bytes); - data += bytes; - } - - int hash = number % 121; - abbrev->next = abbrevs[hash]; - abbrevs[hash] = abbrev; - - number = elfReadLEB128(data, &bytes); - data += bytes; - - if(elfGetAbbrev(abbrevs, number) != NULL) - break; - } - - return abbrevs; -} - -void elfParseCFA(u8 *top) -{ - ELFSectionHeader *h = elfGetSectionByName(".debug_frame"); - - if(h == NULL) { - return; - } - - u8 *data = elfReadSection(top, h); - - u8 *topOffset = data; - - u8 *end = data + READ32LE(&h->size); - - ELFcie *cies = NULL; - - while(data < end) { - u32 offset = (u32)(data - topOffset); - u32 len = elfRead4Bytes(data); - data += 4; - - u8 *dataEnd = data + len; - - u32 id = elfRead4Bytes(data); - data += 4; - - if(id == 0xffffffff) { - // skip version - *data++; - - ELFcie *cie = (ELFcie *)calloc(1, sizeof(ELFcie)); - - cie->next = cies; - cies = cie; - - cie->offset = offset; - - cie->augmentation = data; - while(*data) - data++; - data++; - - if(*cie->augmentation) { - fprintf(stderr, "Error: augmentation not supported\n"); - exit(-1); - } - - int bytes; - cie->codeAlign = elfReadLEB128(data, &bytes); - data += bytes; - - cie->dataAlign = elfReadSignedLEB128(data, &bytes); - data += bytes; - - cie->returnAddress = *data++; - - cie->data = data; - cie->dataLen = (u32)(dataEnd - data); - } else { - ELFfde *fde = (ELFfde *)calloc(1, sizeof(ELFfde)); - - ELFcie *cie = cies; - - while(cie != NULL) { - if(cie->offset == id) - break; - cie = cie->next; - } - - if(!cie) { - fprintf(stderr, "Cannot find CIE %08x\n", id); - exit(-1); - } - - fde->cie = cie; - - fde->address = elfRead4Bytes(data); - data += 4; - - fde->end = fde->address + elfRead4Bytes(data); - data += 4; - - fde->data = data; - fde->dataLen = (u32)(dataEnd - data); - - if((elfFdeCount %10) == 0) { - elfFdes = (ELFfde **)realloc(elfFdes, (elfFdeCount+10) * - sizeof(ELFfde *)); - } - elfFdes[elfFdeCount++] = fde; - } - data = dataEnd; - } - - elfCies = cies; -} - -void elfAddLine(LineInfo *l, u32 a, int file, int line, int *max) -{ - if(l->number == *max) { - *max += 1000; - l->lines = (LineInfoItem *)realloc(l->lines, *max*sizeof(LineInfoItem)); - } - LineInfoItem *li = &l->lines[l->number]; - li->file = l->files[file-1]; - li->address = a; - li->line = line; - l->number++; -} - -void elfParseLineInfo(CompileUnit *unit, u8 *top) -{ - ELFSectionHeader *h = elfGetSectionByName(".debug_line"); - if(h == NULL) { - fprintf(stderr, "No line information found\n"); - return; - } - LineInfo *l = unit->lineInfoTable = (LineInfo *)calloc(1, sizeof(LineInfo)); - l->number = 0; - int max = 1000; - l->lines = (LineInfoItem *)malloc(1000*sizeof(LineInfoItem)); - - u8 *data = elfReadSection(top, h); - data += unit->lineInfo; - u32 totalLen = elfRead4Bytes(data); - data += 4; - u8 *end = data + totalLen; - // u16 version = elfRead2Bytes(data); - data += 2; - // u32 offset = elfRead4Bytes(data); - data += 4; - int minInstrSize = *data++; - int defaultIsStmt = *data++; - int lineBase = (s8)*data++; - int lineRange = *data++; - int opcodeBase = *data++; - u8 *stdOpLen = (u8 *)malloc(opcodeBase * sizeof(u8)); - stdOpLen[0] = 1; - int i; - for(i = 1; i < opcodeBase; i++) - stdOpLen[i] = *data++; - - free(stdOpLen);// todo - int bytes = 0; - - char *s; - while((s = elfReadString(data, &bytes)) != NULL) { - data += bytes; - // fprintf(stderr, "Directory is %s\n", s); - } - data += bytes; - int count = 4; - int index = 0; - l->files = (char **)malloc(sizeof(char *)*count); - - while((s = elfReadString(data, &bytes)) != NULL) { - l->files[index++] = s; - - data += bytes; - // directory - elfReadLEB128(data, &bytes); - data += bytes; - // time - elfReadLEB128(data, &bytes); - data += bytes; - // size - elfReadLEB128(data, &bytes); - data += bytes; - // fprintf(stderr, "File is %s\n", s); - if(index == count) { - count += 4; - l->files = (char **)realloc(l->files, sizeof(char *)*count); - } - } - l->fileCount = index; - data += bytes; - - while(data < end) { - u32 address = 0; - int file = 1; - int line = 1; - int col = 0; - int isStmt = defaultIsStmt; - int basicBlock = 0; - int endSeq = 0; - - while(!endSeq) { - int op = *data++; - switch(op) { - case DW_LNS_extended_op: - { - data++; - op = *data++; - switch(op) { - case DW_LNE_end_sequence: - endSeq = 1; - break; - case DW_LNE_set_address: - address = elfRead4Bytes(data); - data += 4; - break; - default: - fprintf(stderr, "Unknown extended LINE opcode %02x\n", op); - exit(-1); - } - } - break; - case DW_LNS_copy: - // fprintf(stderr, "Address %08x line %d (%d)\n", address, line, file); - elfAddLine(l, address, file, line, &max); - basicBlock = 0; - break; - case DW_LNS_advance_pc: - address += minInstrSize * elfReadLEB128(data, &bytes); - data += bytes; - break; - case DW_LNS_advance_line: - line += elfReadSignedLEB128(data, &bytes); - data += bytes; - break; - case DW_LNS_set_file: - file = elfReadLEB128(data, &bytes); - data += bytes; - break; - case DW_LNS_set_column: - col = elfReadLEB128(data, &bytes); - data += bytes; - break; - case DW_LNS_negate_stmt: - isStmt = !isStmt; - break; - case DW_LNS_set_basic_block: - basicBlock = 1; - break; - case DW_LNS_const_add_pc: - address += (minInstrSize *((255 - opcodeBase)/lineRange)); - break; - case DW_LNS_fixed_advance_pc: - address += elfRead2Bytes(data); - data += 2; - break; - default: - op = op - opcodeBase; - address += (op / lineRange) * minInstrSize; - line += lineBase + (op % lineRange); - elfAddLine(l, address, file, line, &max); - // fprintf(stderr, "Address %08x line %d (%d)\n", address, line,file); - basicBlock = 1; - break; - } - } - } - l->lines = (LineInfoItem *)realloc(l->lines, l->number*sizeof(LineInfoItem)); -} - -u8 *elfSkipData(u8 *data, ELFAbbrev *abbrev, ELFAbbrev **abbrevs) -{ - int i; - int bytes; - - for(i = 0; i < abbrev->numAttrs; i++) { - data = elfReadAttribute(data, &abbrev->attrs[i]); - if(abbrev->attrs[i].form == DW_FORM_block1) - free(abbrev->attrs[i].block); - } - - if(abbrev->hasChildren) { - int nesting = 1; - while(nesting) { - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - if(!abbrevNum) { - nesting--; - continue; - } - - abbrev = elfGetAbbrev(abbrevs, abbrevNum); - - for(i = 0; i < abbrev->numAttrs; i++) { - data = elfReadAttribute(data, &abbrev->attrs[i]); - if(abbrev->attrs[i].form == DW_FORM_block1) - free(abbrev->attrs[i].block); - } - - if(abbrev->hasChildren) { - nesting++; - } - } - } - return data; -} - -Type *elfParseType(CompileUnit *unit, u32); -u8 *elfParseObject(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, - Object **object); -u8 *elfParseFunction(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, - Function **function); -void elfCleanUp(Function *); - -void elfAddType(Type *type, CompileUnit *unit, u32 offset) -{ - if(type->next == NULL) { - if(unit->types != type && type->offset == 0) { - type->offset = offset; - type->next = unit->types; - unit->types = type; - } - } -} - -void elfParseType(u8 *data, u32 offset, ELFAbbrev *abbrev, CompileUnit *unit, - Type **type) -{ - switch(abbrev->tag) { - case DW_TAG_typedef: - { - u32 typeref = 0; - char *name = NULL; - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_name: - name = attr->string; - break; - case DW_AT_type: - typeref = attr->value; - break; - case DW_AT_decl_file: - case DW_AT_decl_line: - break; - default: - fprintf(stderr, "Unknown attribute for typedef %02x\n", attr->name); - break; - } - } - if(abbrev->hasChildren) - fprintf(stderr, "Unexpected children for typedef\n"); - *type = elfParseType(unit, typeref); - if(name) - (*type)->name = name; - return; - } - break; - case DW_TAG_union_type: - case DW_TAG_structure_type: - { - Type *t = (Type *)calloc(sizeof(Type), 1); - if(abbrev->tag == DW_TAG_structure_type) - t->type = TYPE_struct; - else - t->type = TYPE_union; - - Struct *s = (Struct *)calloc(sizeof(Struct), 1); - t->structure = s; - elfAddType(t, unit, offset); - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_name: - t->name = attr->string; - break; - case DW_AT_byte_size: - t->size = attr->value; - break; - case DW_AT_decl_file: - case DW_AT_decl_line: - case DW_AT_sibling: - case DW_AT_containing_type: // todo? - case DW_AT_declaration: - case DW_AT_specification: // TODO: - break; - default: - fprintf(stderr, "Unknown attribute for struct %02x\n", attr->name); - break; - } - } - if(abbrev->hasChildren) { - int bytes; - u32 num = elfReadLEB128(data, &bytes); - data += bytes; - int index = 0; - while(num) { - ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); - - switch(abbr->tag) { - case DW_TAG_member: - { - if((index % 4) == 0) - s->members = (Member *)realloc(s->members, - sizeof(Member)*(index+4)); - Member *m = &s->members[index]; - m->location = NULL; - m->bitOffset = 0; - m->bitSize = 0; - m->byteSize = 0; - for(int i = 0; i < abbr->numAttrs; i++) { - ELFAttr *attr = &abbr->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_name: - m->name = attr->string; - break; - case DW_AT_type: - m->type = elfParseType(unit, attr->value); - break; - case DW_AT_data_member_location: - m->location = attr->block; - break; - case DW_AT_byte_size: - m->byteSize = attr->value; - break; - case DW_AT_bit_offset: - m->bitOffset = attr->value; - break; - case DW_AT_bit_size: - m->bitSize = attr->value; - break; - case DW_AT_decl_file: - case DW_AT_decl_line: - case DW_AT_accessibility: - case DW_AT_artificial: // todo? - break; - default: - fprintf(stderr, "Unknown member attribute %02x\n", - attr->name); - } - } - index++; - } - break; - case DW_TAG_subprogram: - { - Function *fnc = NULL; - data = elfParseFunction(data, abbr, unit, &fnc); - if(fnc != NULL) { - if(unit->lastFunction) - unit->lastFunction->next = fnc; - else - unit->functions = fnc; - unit->lastFunction = fnc; - } - } - break; - case DW_TAG_inheritance: - // TODO: add support - data = elfSkipData(data, abbr, unit->abbrevs); - break; - CASE_TYPE_TAG: - // skip types... parsed only when used - data = elfSkipData(data, abbr, unit->abbrevs); - break; - case DW_TAG_variable: - data = elfSkipData(data, abbr, unit->abbrevs); - break; - default: - fprintf(stderr, "Unknown struct tag %02x %s\n", abbr->tag, t->name); - data = elfSkipData(data, abbr, unit->abbrevs); - break; - } - num = elfReadLEB128(data, &bytes); - data += bytes; - } - s->memberCount = index; - } - *type = t; - return; - } - break; - case DW_TAG_base_type: - { - Type *t = (Type *)calloc(sizeof(Type), 1); - - t->type = TYPE_base; - elfAddType(t, unit, offset); - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_name: - t->name = attr->string; - break; - case DW_AT_encoding: - t->encoding = attr->value; - break; - case DW_AT_byte_size: - t->size = attr->value; - break; - case DW_AT_bit_size: - t->bitSize = attr->value; - break; - default: - fprintf(stderr, "Unknown attribute for base type %02x\n", - attr->name); - break; - } - } - if(abbrev->hasChildren) - fprintf(stderr, "Unexpected children for base type\n"); - *type = t; - return; - } - break; - case DW_TAG_pointer_type: - { - Type *t = (Type *)calloc(sizeof(Type), 1); - - t->type = TYPE_pointer; - - elfAddType(t, unit, offset); - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data =elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_type: - t->pointer = elfParseType(unit, attr->value); - break; - case DW_AT_byte_size: - t->size = attr->value; - break; - default: - fprintf(stderr, "Unknown pointer type attribute %02x\n", attr->name); - break; - } - } - if(abbrev->hasChildren) - fprintf(stderr, "Unexpected children for pointer type\n"); - *type = t; - return; - } - break; - case DW_TAG_reference_type: - { - Type *t = (Type *)calloc(sizeof(Type), 1); - - t->type = TYPE_reference; - - elfAddType(t, unit, offset); - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data =elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_type: - t->pointer = elfParseType(unit, attr->value); - break; - case DW_AT_byte_size: - t->size = attr->value; - break; - default: - fprintf(stderr, "Unknown ref type attribute %02x\n", attr->name); - break; - } - } - if(abbrev->hasChildren) - fprintf(stderr, "Unexpected children for ref type\n"); - *type = t; - return; - } - break; - case DW_TAG_volatile_type: - { - u32 typeref = 0; - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_type: - typeref = attr->value; - break; - default: - fprintf(stderr, "Unknown volatile attribute for type %02x\n", - attr->name); - break; - } - } - if(abbrev->hasChildren) - fprintf(stderr, "Unexpected children for volatile type\n"); - *type = elfParseType(unit, typeref); - return; - } - break; - case DW_TAG_const_type: - { - u32 typeref = 0; - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_type: - typeref = attr->value; - break; - default: - fprintf(stderr, "Unknown const attribute for type %02x\n", - attr->name); - break; - } - } - if(abbrev->hasChildren) - fprintf(stderr, "Unexpected children for const type\n"); - *type = elfParseType(unit, typeref); - return; - } - break; - case DW_TAG_enumeration_type: - { - Type *t = (Type *)calloc(sizeof(Type), 1); - t->type = TYPE_enum; - Enum *e = (Enum *)calloc(sizeof(Enum), 1); - t->enumeration = e; - elfAddType(t, unit, offset); - int count = 0; - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_name: - t->name = attr->string; - break; - case DW_AT_byte_size: - t->size = attr->value; - break; - case DW_AT_sibling: - case DW_AT_decl_file: - case DW_AT_decl_line: - break; - default: - fprintf(stderr, "Unknown enum attribute %02x\n", attr->name); - } - } - if(abbrev->hasChildren) { - int bytes; - u32 num = elfReadLEB128(data, &bytes); - data += bytes; - while(num) { - ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); - - switch(abbr->tag) { - case DW_TAG_enumerator: - { - count++; - e->members = (EnumMember *)realloc(e->members, - count*sizeof(EnumMember)); - EnumMember *m = &e->members[count-1]; - for(int i = 0; i < abbr->numAttrs; i++) { - ELFAttr *attr = &abbr->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_name: - m->name = attr->string; - break; - case DW_AT_const_value: - m->value = attr->value; - break; - default: - fprintf(stderr, "Unknown sub param attribute %02x\n", - attr->name); - } - } - } - break; - default: - fprintf(stderr, "Unknown enum tag %02x\n", abbr->tag); - data = elfSkipData(data, abbr, unit->abbrevs); - break; - } - num = elfReadLEB128(data, &bytes); - data += bytes; - } - } - e->count = count; - *type = t; - return; - } - break; - case DW_TAG_subroutine_type: - { - Type *t = (Type *)calloc(sizeof(Type), 1); - t->type = TYPE_function; - FunctionType *f = (FunctionType *)calloc(sizeof(FunctionType), 1); - t->function = f; - elfAddType(t, unit, offset); - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_prototyped: - case DW_AT_sibling: - break; - case DW_AT_type: - f->returnType = elfParseType(unit, attr->value); - break; - default: - fprintf(stderr, "Unknown subroutine attribute %02x\n", attr->name); - } - } - if(abbrev->hasChildren) { - int bytes; - u32 num = elfReadLEB128(data, &bytes); - data += bytes; - Object *lastVar = NULL; - while(num) { - ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); - - switch(abbr->tag) { - case DW_TAG_formal_parameter: - { - Object *o; - data = elfParseObject(data, abbr, unit, &o); - if(f->args) - lastVar->next = o; - else - f->args = o; - lastVar = o; - } - break; - case DW_TAG_unspecified_parameters: - // no use in the debugger yet - data = elfSkipData(data, abbr, unit->abbrevs); - break; - CASE_TYPE_TAG: - // skip types... parsed only when used - data = elfSkipData(data, abbr, unit->abbrevs); - break; - default: - fprintf(stderr, "Unknown subroutine tag %02x\n", abbr->tag); - data = elfSkipData(data, abbr, unit->abbrevs); - break; - } - num = elfReadLEB128(data, &bytes); - data += bytes; - } - } - *type = t; - return; - } - break; - case DW_TAG_array_type: - { - u32 typeref = 0; - int i; - Array *array = (Array *)calloc(sizeof(Array), 1); - Type *t = (Type *)calloc(sizeof(Type), 1); - t->type = TYPE_array; - elfAddType(t, unit, offset); - - for(i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_sibling: - break; - case DW_AT_type: - typeref = attr->value; - array->type = elfParseType(unit, typeref); - break; - default: - fprintf(stderr, "Unknown array attribute %02x\n", attr->name); - } - } - if(abbrev->hasChildren) { - int bytes; - u32 num = elfReadLEB128(data, &bytes); - data += bytes; - int index = 0; - int maxBounds = 0; - while(num) { - ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); - - switch(abbr->tag) { - case DW_TAG_subrange_type: - { - if(maxBounds == index) { - maxBounds += 4; - array->bounds = (int *)realloc(array->bounds, - sizeof(int)*maxBounds); - } - for(int i = 0; i < abbr->numAttrs; i++) { - ELFAttr *attr = &abbr->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_upper_bound: - array->bounds[index] = attr->value+1; - break; - case DW_AT_type: // ignore - break; - default: - fprintf(stderr, "Unknown subrange attribute %02x\n", - attr->name); - } - } - index++; - } - break; - default: - fprintf(stderr, "Unknown array tag %02x\n", abbr->tag); - data = elfSkipData(data, abbr, unit->abbrevs); - break; - } - num = elfReadLEB128(data, &bytes); - data += bytes; - } - array->maxBounds = index; - } - t->size = array->type->size; - for(i = 0; i < array->maxBounds; i++) - t->size *= array->bounds[i]; - t->array = array; - *type = t; - return; - } - break; - default: - fprintf(stderr, "Unknown type TAG %02x\n", abbrev->tag); - exit(-1); - } -} - -Type *elfParseType(CompileUnit *unit, u32 offset) -{ - Type *t = unit->types; - - while(t) { - if(t->offset == offset) - return t; - t = t->next; - } - if(offset == 0) { - Type *t = (Type *)calloc(sizeof(Type), 1); - t->type = TYPE_void; - t->offset = 0; - elfAddType(t, unit, 0); - return t; - } - u8 *data = unit->top + offset; - int bytes; - int abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - Type *type = NULL; - - ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); - - elfParseType(data, offset, abbrev, unit, &type); - return type; -} - -void elfGetObjectAttributes(CompileUnit *unit, u32 offset, Object *o) -{ - u8 *data = unit->top + offset; - int bytes; - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - if(!abbrevNum) { - return; - } - - ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_location: - o->location = attr->block; - break; - case DW_AT_name: - if(o->name == NULL) - o->name = attr->string; - break; - case DW_AT_MIPS_linkage_name: - o->name = attr->string; - break; - case DW_AT_decl_file: - o->file = attr->value; - break; - case DW_AT_decl_line: - o->line = attr->value; - break; - case DW_AT_type: - o->type = elfParseType(unit, attr->value); - break; - case DW_AT_external: - o->external = attr->flag; - break; - case DW_AT_const_value: - case DW_AT_abstract_origin: - case DW_AT_declaration: - case DW_AT_artificial: - // todo - break; - case DW_AT_specification: - // TODO: - break; - default: - fprintf(stderr, "Unknown object attribute %02x\n", attr->name); - break; - } - } -} - -u8 *elfParseObject(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, - Object **object) -{ - Object *o = (Object *)calloc(sizeof(Object), 1); - - o->next = NULL; - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_location: - o->location = attr->block; - break; - case DW_AT_name: - if(o->name == NULL) - o->name = attr->string; - break; - case DW_AT_MIPS_linkage_name: - o->name = attr->string; - break; - case DW_AT_decl_file: - o->file = attr->value; - break; - case DW_AT_decl_line: - o->line = attr->value; - break; - case DW_AT_type: - o->type = elfParseType(unit, attr->value); - break; - case DW_AT_external: - o->external = attr->flag; - break; - case DW_AT_abstract_origin: - elfGetObjectAttributes(unit, attr->value, o); - break; - case DW_AT_const_value: - case DW_AT_declaration: - case DW_AT_artificial: - break; - case DW_AT_specification: - // TODO: - break; - default: - fprintf(stderr, "Unknown object attribute %02x\n", attr->name); - break; - } - } - *object = o; - return data; -} - -u8 *elfParseBlock(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, - Function *func, Object **lastVar) -{ - int bytes; - u32 start = func->lowPC; - u32 end = func->highPC; - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_sibling: - break; - case DW_AT_low_pc: - start = attr->value; - break; - case DW_AT_high_pc: - end = attr->value; - break; - case DW_AT_ranges: // ignore for now - break; - default: - fprintf(stderr, "Unknown block attribute %02x\n", attr->name); - break; - } - } - - if(abbrev->hasChildren) { - int nesting = 1; - - while(nesting) { - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - if(!abbrevNum) { - nesting--; - continue; - } - - abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); - - switch(abbrev->tag) { - CASE_TYPE_TAG: // types only parsed when used - case DW_TAG_label: // not needed - data = elfSkipData(data, abbrev, unit->abbrevs); - break; - case DW_TAG_lexical_block: - data = elfParseBlock(data, abbrev, unit, func, lastVar); - break; - case DW_TAG_subprogram: - { - Function *f = NULL; - data = elfParseFunction(data, abbrev, unit, &f); - if(f != NULL) { - if(unit->lastFunction) - unit->lastFunction->next = f; - else - unit->functions = f; - unit->lastFunction = f; - } - } - break; - case DW_TAG_variable: - { - Object *o; - data = elfParseObject(data, abbrev, unit, &o); - if(o->startScope == 0) - o->startScope = start; - if(o->endScope == 0) - o->endScope = 0; - if(func->variables) - (*lastVar)->next = o; - else - func->variables = o; - *lastVar = o; - } - break; - case DW_TAG_inlined_subroutine: - // TODO: - data = elfSkipData(data, abbrev, unit->abbrevs); - break; - default: - { - fprintf(stderr, "Unknown block TAG %02x\n", abbrev->tag); - data = elfSkipData(data, abbrev, unit->abbrevs); - } - break; - } - } - } - return data; -} - -void elfGetFunctionAttributes(CompileUnit *unit, u32 offset, Function *func) -{ - u8 *data = unit->top + offset; - int bytes; - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - if(!abbrevNum) { - return; - } - - ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); - - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - - switch(attr->name) { - case DW_AT_sibling: - break; - case DW_AT_name: - if(func->name == NULL) - func->name = attr->string; - break; - case DW_AT_MIPS_linkage_name: - func->name = attr->string; - break; - case DW_AT_low_pc: - func->lowPC = attr->value; - break; - case DW_AT_high_pc: - func->highPC = attr->value; - break; - case DW_AT_decl_file: - func->file = attr->value; - break; - case DW_AT_decl_line: - func->line = attr->value; - break; - case DW_AT_external: - func->external = attr->flag; - break; - case DW_AT_frame_base: - func->frameBase = attr->block; - break; - case DW_AT_type: - func->returnType = elfParseType(unit, attr->value); - break; - case DW_AT_inline: - case DW_AT_specification: - case DW_AT_declaration: - case DW_AT_artificial: - case DW_AT_prototyped: - case DW_AT_proc_body: - case DW_AT_save_offset: - case DW_AT_user_2002: - case DW_AT_virtuality: - case DW_AT_containing_type: - case DW_AT_accessibility: - // todo; - break; - case DW_AT_vtable_elem_location: - free(attr->block); - break; - default: - fprintf(stderr, "Unknown function attribute %02x\n", attr->name); - break; - } - } - - return; -} - -u8 *elfParseFunction(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, - Function **f) -{ - Function *func = (Function *)calloc(sizeof(Function), 1); - *f = func; - - int bytes; - bool mangled = false; - bool declaration = false; - for(int i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - switch(attr->name) { - case DW_AT_sibling: - break; - case DW_AT_name: - if(func->name == NULL) - func->name = attr->string; - break; - case DW_AT_MIPS_linkage_name: - func->name = attr->string; - mangled = true; - break; - case DW_AT_low_pc: - func->lowPC = attr->value; - break; - case DW_AT_high_pc: - func->highPC = attr->value; - break; - case DW_AT_prototyped: - break; - case DW_AT_decl_file: - func->file = attr->value; - break; - case DW_AT_decl_line: - func->line = attr->value; - break; - case DW_AT_external: - func->external = attr->flag; - break; - case DW_AT_frame_base: - func->frameBase = attr->block; - break; - case DW_AT_type: - func->returnType = elfParseType(unit, attr->value); - break; - case DW_AT_abstract_origin: - elfGetFunctionAttributes(unit, attr->value, func); - break; - case DW_AT_declaration: - declaration = attr->flag; - break; - case DW_AT_inline: - case DW_AT_specification: - case DW_AT_artificial: - case DW_AT_proc_body: - case DW_AT_save_offset: - case DW_AT_user_2002: - case DW_AT_virtuality: - case DW_AT_containing_type: - case DW_AT_accessibility: - // todo; - break; - case DW_AT_vtable_elem_location: - free(attr->block); - break; - default: - fprintf(stderr, "Unknown function attribute %02x\n", attr->name); - break; - } - } - - if(declaration) { - elfCleanUp(func); - free(func); - *f = NULL; - - while(1) { - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - if(!abbrevNum) { - return data; - } - - abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); - - data = elfSkipData(data, abbrev, unit->abbrevs); - } - } - - if(abbrev->hasChildren) { - int nesting = 1; - Object *lastParam = NULL; - Object *lastVar = NULL; - - while(nesting) { - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - if(!abbrevNum) { - nesting--; - continue; - } - - abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); - - switch(abbrev->tag) { - CASE_TYPE_TAG: // no need to parse types. only parsed when used - case DW_TAG_label: // not needed - data = elfSkipData(data, abbrev, unit->abbrevs); - break; - case DW_TAG_subprogram: - { - Function *fnc=NULL; - data = elfParseFunction(data, abbrev, unit, &fnc); - if(fnc != NULL) { - if(unit->lastFunction == NULL) - unit->functions = fnc; - else - unit->lastFunction->next = fnc; - unit->lastFunction = fnc; - } - } - break; - case DW_TAG_lexical_block: - { - data = elfParseBlock(data, abbrev, unit, func, &lastVar); - } - break; - case DW_TAG_formal_parameter: - { - Object *o; - data = elfParseObject(data, abbrev, unit, &o); - if(func->parameters) - lastParam->next = o; - else - func->parameters = o; - lastParam = o; - } - break; - case DW_TAG_variable: - { - Object *o; - data = elfParseObject(data, abbrev, unit, &o); - if(func->variables) - lastVar->next = o; - else - func->variables = o; - lastVar = o; - } - break; - case DW_TAG_unspecified_parameters: - case DW_TAG_inlined_subroutine: - { - // todo - for(int i = 0; i < abbrev->numAttrs; i++) { - data = elfReadAttribute(data, &abbrev->attrs[i]); - if(abbrev->attrs[i].form == DW_FORM_block1) - free(abbrev->attrs[i].block); - } - - if(abbrev->hasChildren) - nesting++; - } - break; - default: - { - fprintf(stderr, "Unknown function TAG %02x\n", abbrev->tag); - data = elfSkipData(data, abbrev, unit->abbrevs); - } - break; - } - } - } - return data; -} - -u8 *elfParseUnknownData(u8 *data, ELFAbbrev *abbrev, ELFAbbrev **abbrevs) -{ - int i; - int bytes; - // switch(abbrev->tag) { - // default: - fprintf(stderr, "Unknown TAG %02x\n", abbrev->tag); - - for(i = 0; i < abbrev->numAttrs; i++) { - data = elfReadAttribute(data, &abbrev->attrs[i]); - if(abbrev->attrs[i].form == DW_FORM_block1) - free(abbrev->attrs[i].block); - } - - if(abbrev->hasChildren) { - int nesting = 1; - while(nesting) { - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - if(!abbrevNum) { - nesting--; - continue; - } - - abbrev = elfGetAbbrev(abbrevs, abbrevNum); - - fprintf(stderr, "Unknown TAG %02x\n", abbrev->tag); - - for(i = 0; i < abbrev->numAttrs; i++) { - data = elfReadAttribute(data, &abbrev->attrs[i]); - if(abbrev->attrs[i].form == DW_FORM_block1) - free(abbrev->attrs[i].block); - } - - if(abbrev->hasChildren) { - nesting++; - } - } - } - // } - return data; -} - -u8 *elfParseCompileUnitChildren(u8 *data, CompileUnit *unit) -{ - int bytes; - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - Object *lastObj = NULL; - while(abbrevNum) { - ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); - switch(abbrev->tag) { - case DW_TAG_subprogram: - { - Function *func = NULL; - data = elfParseFunction(data, abbrev, unit, &func); - if(func != NULL) { - if(unit->lastFunction) - unit->lastFunction->next = func; - else - unit->functions = func; - unit->lastFunction = func; - } - } - break; - CASE_TYPE_TAG: - data = elfSkipData(data, abbrev, unit->abbrevs); - break; - case DW_TAG_variable: - { - Object *var = NULL; - data = elfParseObject(data, abbrev, unit, &var); - if(lastObj) - lastObj->next = var; - else - unit->variables = var; - lastObj = var; - } - break; - default: - data = elfParseUnknownData(data, abbrev, unit->abbrevs); - break; - } - - abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - } - return data; -} - - -CompileUnit *elfParseCompUnit(u8 *data, u8 *abbrevData) -{ - int bytes; - u8 *top = data; - - u32 length = elfRead4Bytes(data); - data += 4; - - u16 version = elfRead2Bytes(data); - data += 2; - - u32 offset = elfRead4Bytes(data); - data += 4; - - u8 addrSize = *data++; - - if(version != 2) { - fprintf(stderr, "Unsupported debugging information version %d\n", version); - return NULL; - } - - if(addrSize != 4) { - fprintf(stderr, "Unsupported address size %d\n", addrSize); - return NULL; - } - - ELFAbbrev **abbrevs = elfReadAbbrevs(abbrevData, offset); - - u32 abbrevNum = elfReadLEB128(data, &bytes); - data += bytes; - - ELFAbbrev *abbrev = elfGetAbbrev(abbrevs, abbrevNum); - - CompileUnit *unit = (CompileUnit *)calloc(sizeof(CompileUnit), 1); - unit->top = top; - unit->length = length; - unit->abbrevs = abbrevs; - unit->next = NULL; - - elfCurrentUnit = unit; - - int i; - - for(i = 0; i < abbrev->numAttrs; i++) { - ELFAttr *attr = &abbrev->attrs[i]; - data = elfReadAttribute(data, attr); - - switch(attr->name) { - case DW_AT_name: - unit->name = attr->string; - break; - case DW_AT_stmt_list: - unit->hasLineInfo = true; - unit->lineInfo = attr->value; - break; - case DW_AT_low_pc: - unit->lowPC = attr->value; - break; - case DW_AT_high_pc: - unit->highPC = attr->value; - break; - case DW_AT_compdir: - unit->compdir = attr->string; - break; - // ignore - case DW_AT_language: - case DW_AT_producer: - case DW_AT_macro_info: - case DW_AT_entry_pc: - break; - default: - fprintf(stderr, "Unknown attribute %02x\n", attr->name); - break; - } - } - - if(abbrev->hasChildren) - elfParseCompileUnitChildren(data, unit); - - return unit; -} - -void elfParseAranges(u8 *data) -{ - ELFSectionHeader *sh = elfGetSectionByName(".debug_aranges"); - if(sh == NULL) { - fprintf(stderr, "No aranges found\n"); - return; - } - - data = elfReadSection(data, sh); - u8 *end = data + READ32LE(&sh->size); - - int max = 4; - ARanges *ranges = (ARanges *)calloc(sizeof(ARanges), 4); - - int index = 0; - - while(data < end) { - u32 len = elfRead4Bytes(data); - data += 4; - // u16 version = elfRead2Bytes(data); - data += 2; - u32 offset = elfRead4Bytes(data); - data += 4; - // u8 addrSize = *data++; - // u8 segSize = *data++; - data += 2; // remove if uncommenting above - data += 4; - ranges[index].count = (len-20)/8; - ranges[index].offset = offset; - ranges[index].ranges = (ARange *)calloc(sizeof(ARange), (len-20)/8); - int i = 0; - while(true) { - u32 addr = elfRead4Bytes(data); - data += 4; - u32 len = elfRead4Bytes(data); - data += 4; - if(addr == 0 && len == 0) - break; - ranges[index].ranges[i].lowPC = addr; - ranges[index].ranges[i].highPC = addr+len; - i++; - } - index++; - if(index == max) { - max += 4; - ranges = (ARanges *)realloc(ranges, max*sizeof(ARanges)); - } - } - elfDebugInfo->numRanges = index; - elfDebugInfo->ranges = ranges; -} - -void elfReadSymtab(u8 *data) -{ - ELFSectionHeader *sh = elfGetSectionByName(".symtab"); - int table = READ32LE(&sh->link); - - char *strtable = (char *)elfReadSection(data, elfGetSectionByNumber(table)); - - ELFSymbol *symtab = (ELFSymbol *)elfReadSection(data, sh); - - int count = READ32LE(&sh->size) / sizeof(ELFSymbol); - elfSymbolsCount = 0; - - elfSymbols = (Symbol *)malloc(sizeof(Symbol)*count); - - int i; - - for(i = 0; i < count; i++) { - ELFSymbol *s = &symtab[i]; - int type = s->info & 15; - int binding = s->info >> 4; - - if(binding) { - Symbol *sym = &elfSymbols[elfSymbolsCount]; - sym->name = &strtable[READ32LE(&s->name)]; - sym->binding = binding; - sym->type = type; - sym->value = READ32LE(&s->value); - sym->size = READ32LE(&s->size); - elfSymbolsCount++; - } - } - for(i = 0; i < count; i++) { - ELFSymbol *s = &symtab[i]; - int bind = s->info>>4; - int type = s->info & 15; - - if(!bind) { - Symbol *sym = &elfSymbols[elfSymbolsCount]; - sym->name = &strtable[READ32LE(&s->name)]; - sym->binding = (s->info >> 4); - sym->type = type; - sym->value = READ32LE(&s->value); - sym->size = READ32LE(&s->size); - elfSymbolsCount++; - } - } - elfSymbolsStrTab = strtable; - // free(symtab); -} - -bool elfReadProgram(ELFHeader *eh, u8 *data, int& size, bool parseDebug) -{ - int count = READ16LE(&eh->e_phnum); - int i; - - if(READ32LE(&eh->e_entry) == 0x2000000) - cpuIsMultiBoot = true; - - // read program headers... should probably move this code down - u8 *p = data + READ32LE(&eh->e_phoff); - size = 0; - for(i = 0; i < count; i++) { - ELFProgramHeader *ph = (ELFProgramHeader *)p; - p += sizeof(ELFProgramHeader); - if(READ16LE(&eh->e_phentsize) != sizeof(ELFProgramHeader)) { - p += READ16LE(&eh->e_phentsize) - sizeof(ELFProgramHeader); - } - - // printf("PH %d %08x %08x %08x %08x %08x %08x %08x %08x\n", - // i, ph->type, ph->offset, ph->vaddr, ph->paddr, - // ph->filesz, ph->memsz, ph->flags, ph->align); - if(cpuIsMultiBoot) { - if(READ32LE(&ph->paddr) >= 0x2000000 && - READ32LE(&ph->paddr) <= 0x203ffff) { - memcpy(&workRAM[READ32LE(&ph->paddr) & 0x3ffff], - data + READ32LE(&ph->offset), - READ32LE(&ph->filesz)); - size += READ32LE(&ph->filesz); - } - } else { - if(READ32LE(&ph->paddr) >= 0x8000000 && - READ32LE(&ph->paddr) <= 0x9ffffff) { - memcpy(&rom[READ32LE(&ph->paddr) & 0x1ffffff], - data + READ32LE(&ph->offset), - READ32LE(&ph->filesz)); - size += READ32LE(&ph->filesz); - } - } - } - - char *stringTable = NULL; - - // read section headers - p = data + READ32LE(&eh->e_shoff); - count = READ16LE(&eh->e_shnum); - - ELFSectionHeader **sh = (ELFSectionHeader **) - malloc(sizeof(ELFSectionHeader *) * count); - - for(i = 0; i < count; i++) { - sh[i] = (ELFSectionHeader *)p; - p += sizeof(ELFSectionHeader); - if(READ16LE(&eh->e_shentsize) != sizeof(ELFSectionHeader)) - p += READ16LE(&eh->e_shentsize) - sizeof(ELFSectionHeader); - } - - if(READ16LE(&eh->e_shstrndx) != 0) { - stringTable = (char *)elfReadSection(data, - sh[READ16LE(&eh->e_shstrndx)]); - } - - elfSectionHeaders = sh; - elfSectionHeadersStringTable = stringTable; - elfSectionHeadersCount = count; - - for(i = 0; i < count; i++) { - // printf("SH %d %-20s %08x %08x %08x %08x %08x %08x %08x %08x\n", - // i, &stringTable[sh[i]->name], sh[i]->name, sh[i]->type, - // sh[i]->flags, sh[i]->addr, sh[i]->offset, sh[i]->size, - // sh[i]->link, sh[i]->info); - if(READ32LE(&sh[i]->flags) & 2) { // load section - if(cpuIsMultiBoot) { - if(READ32LE(&sh[i]->addr) >= 0x2000000 && - READ32LE(&sh[i]->addr) <= 0x203ffff) { - memcpy(&workRAM[READ32LE(&sh[i]->addr) & 0x3ffff], data + - READ32LE(&sh[i]->offset), - READ32LE(&sh[i]->size)); - size += READ32LE(&sh[i]->size); - } - } else { - if(READ32LE(&sh[i]->addr) >= 0x8000000 && - READ32LE(&sh[i]->addr) <= 0x9ffffff) { - memcpy(&rom[READ32LE(&sh[i]->addr) & 0x1ffffff], - data + READ32LE(&sh[i]->offset), - READ32LE(&sh[i]->size)); - size += READ32LE(&sh[i]->size); - } - } - } - } - - if(parseDebug) { - fprintf(stderr, "Parsing debug info\n"); - - ELFSectionHeader *dbgHeader = elfGetSectionByName(".debug_info"); - if(dbgHeader == NULL) { - fprintf(stderr, "Cannot find debug information\n"); - goto end; - } - - ELFSectionHeader *h = elfGetSectionByName(".debug_abbrev"); - if(h == NULL) { - fprintf(stderr, "Cannot find abbreviation table\n"); - goto end; - } - - elfDebugInfo = (DebugInfo *)calloc(sizeof(DebugInfo), 1); - u8 *abbrevdata = elfReadSection(data, h); - - h = elfGetSectionByName(".debug_str"); - - if(h == NULL) - elfDebugStrings = NULL; - else - elfDebugStrings = (char *)elfReadSection(data, h); - - u8 *debugdata = elfReadSection(data, dbgHeader); - - elfDebugInfo->debugdata = data; - elfDebugInfo->infodata = debugdata; - - u32 total = READ32LE(&dbgHeader->size); - u8 *end = debugdata + total; - u8 *ddata = debugdata; - - CompileUnit *last = NULL; - CompileUnit *unit = NULL; - - while(ddata < end) { - unit = elfParseCompUnit(ddata, abbrevdata); - unit->offset = (u32)(ddata-debugdata); - elfParseLineInfo(unit, data); - if(last == NULL) - elfCompileUnits = unit; - else - last->next = unit; - last = unit; - ddata += 4 + unit->length; - } - elfParseAranges(data); - CompileUnit *comp = elfCompileUnits; - while(comp) { - ARanges *r = elfDebugInfo->ranges; - for(int i = 0; i < elfDebugInfo->numRanges; i++) - if(r[i].offset == comp->offset) { - comp->ranges = &r[i]; - break; - } - comp = comp->next; - } - elfParseCFA(data); - elfReadSymtab(data); - } - end: - if(sh) { - free(sh); - } - - elfSectionHeaders = NULL; - elfSectionHeadersStringTable = NULL; - elfSectionHeadersCount = 0; - - return true; -} - -extern bool parseDebug; - -bool elfRead(const char *name, int& siz, FILE *f) -{ - fseek(f, 0, SEEK_END); - long size = ftell(f); - elfFileData = (u8 *)malloc(size); - fseek(f, 0, SEEK_SET); - fread(elfFileData, 1, size, f); - fclose(f); - - ELFHeader *header = (ELFHeader *)elfFileData; - - if(READ32LE(&header->magic) != 0x464C457F || - READ16LE(&header->e_machine) != 40 || - header->clazz != 1) { - systemMessage(0, N_("Not a valid ELF file %s"), name); - free(elfFileData); - elfFileData = NULL; - return false; - } - - if(!elfReadProgram(header, elfFileData, siz, parseDebug)) { - free(elfFileData); - elfFileData = NULL; - return false; - } - - return true; -} - -void elfCleanUp(Object *o) -{ - free(o->location); -} - -void elfCleanUp(Function *func) -{ - Object *o = func->parameters; - while(o) { - elfCleanUp(o); - Object *next = o->next; - free(o); - o = next; - } - - o = func->variables; - while(o) { - elfCleanUp(o); - Object *next = o->next; - free(o); - o = next; - } - free(func->frameBase); -} - -void elfCleanUp(ELFAbbrev **abbrevs) -{ - for(int i = 0; i < 121; i++) { - ELFAbbrev *abbrev = abbrevs[i]; - - while(abbrev) { - free(abbrev->attrs); - ELFAbbrev *next = abbrev->next; - free(abbrev); - - abbrev = next; - } - } -} - -void elfCleanUp(Type *t) -{ - switch(t->type) { - case TYPE_function: - if(t->function) { - Object *o = t->function->args; - while(o) { - elfCleanUp(o); - Object *next = o->next; - free(o); - o = next; - } - free(t->function); - } - break; - case TYPE_array: - if(t->array) { - free(t->array->bounds); - free(t->array); - } - break; - case TYPE_struct: - case TYPE_union: - if(t->structure) { - for(int i = 0; i < t->structure->memberCount; i++) { - free(t->structure->members[i].location); - } - free(t->structure->members); - free(t->structure); - } - break; - case TYPE_enum: - if(t->enumeration) { - free(t->enumeration->members); - free(t->enumeration); - } - break; - case TYPE_base: - case TYPE_pointer: - case TYPE_void: - case TYPE_reference: - break; // nothing to do - } -} - -void elfCleanUp(CompileUnit *comp) -{ - elfCleanUp(comp->abbrevs); - free(comp->abbrevs); - Function *func = comp->functions; - while(func) { - elfCleanUp(func); - Function *next = func->next; - free(func); - func = next; - } - Type *t = comp->types; - while(t) { - elfCleanUp(t); - Type *next = t->next; - free(t); - t = next; - } - Object *o = comp->variables; - while(o) { - elfCleanUp(o); - Object *next = o->next; - free(o); - o = next; - } - if(comp->lineInfoTable) { - free(comp->lineInfoTable->lines); - free(comp->lineInfoTable->files); - free(comp->lineInfoTable); - } -} - -void elfCleanUp() -{ - CompileUnit *comp = elfCompileUnits; - - while(comp) { - elfCleanUp(comp); - CompileUnit *next = comp->next; - free(comp); - comp = next; - } - elfCompileUnits = NULL; - free(elfSymbols); - elfSymbols = NULL; - // free(elfSymbolsStrTab); - elfSymbolsStrTab = NULL; - - elfDebugStrings = NULL; - if(elfDebugInfo) { - int num = elfDebugInfo->numRanges; - int i; - for(i = 0; i < num; i++) { - free(elfDebugInfo->ranges[i].ranges); - } - free(elfDebugInfo->ranges); - free(elfDebugInfo); - elfDebugInfo = NULL; - } - - if(elfFdes) { - if(elfFdeCount) { - for(int i = 0; i < elfFdeCount; i++) - free(elfFdes[i]); - } - free(elfFdes); - - elfFdes = NULL; - elfFdeCount = 0; - } - - ELFcie *cie = elfCies; - while(cie) { - ELFcie *next = cie->next; - free(cie); - cie = next; - } - elfCies = NULL; - - if(elfFileData) { - free(elfFileData); - elfFileData = NULL; - } -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "sdfileio.h" +#include +#include +#include + +#include "GBA.h" +#include "Port.h" +#include "elf.h" +#include "NLS.h" + +#define elfReadMemory(addr) \ + READ32LE((&map[(addr)>>24].address[(addr) & map[(addr)>>24].mask])) + +#define DW_TAG_array_type 0x01 +#define DW_TAG_enumeration_type 0x04 +#define DW_TAG_formal_parameter 0x05 +#define DW_TAG_label 0x0a +#define DW_TAG_lexical_block 0x0b +#define DW_TAG_member 0x0d +#define DW_TAG_pointer_type 0x0f +#define DW_TAG_reference_type 0x10 +#define DW_TAG_compile_unit 0x11 +#define DW_TAG_structure_type 0x13 +#define DW_TAG_subroutine_type 0x15 +#define DW_TAG_typedef 0x16 +#define DW_TAG_union_type 0x17 +#define DW_TAG_unspecified_parameters 0x18 +#define DW_TAG_inheritance 0x1c +#define DW_TAG_inlined_subroutine 0x1d +#define DW_TAG_subrange_type 0x21 +#define DW_TAG_base_type 0x24 +#define DW_TAG_const_type 0x26 +#define DW_TAG_enumerator 0x28 +#define DW_TAG_subprogram 0x2e +#define DW_TAG_variable 0x34 +#define DW_TAG_volatile_type 0x35 + +#define DW_AT_sibling 0x01 +#define DW_AT_location 0x02 +#define DW_AT_name 0x03 +#define DW_AT_byte_size 0x0b +#define DW_AT_bit_offset 0x0c +#define DW_AT_bit_size 0x0d +#define DW_AT_stmt_list 0x10 +#define DW_AT_low_pc 0x11 +#define DW_AT_high_pc 0x12 +#define DW_AT_language 0x13 +#define DW_AT_compdir 0x1b +#define DW_AT_const_value 0x1c +#define DW_AT_containing_type 0x1d +#define DW_AT_inline 0x20 +#define DW_AT_producer 0x25 +#define DW_AT_prototyped 0x27 +#define DW_AT_upper_bound 0x2f +#define DW_AT_abstract_origin 0x31 +#define DW_AT_accessibility 0x32 +#define DW_AT_artificial 0x34 +#define DW_AT_data_member_location 0x38 +#define DW_AT_decl_file 0x3a +#define DW_AT_decl_line 0x3b +#define DW_AT_declaration 0x3c +#define DW_AT_encoding 0x3e +#define DW_AT_external 0x3f +#define DW_AT_frame_base 0x40 +#define DW_AT_macro_info 0x43 +#define DW_AT_specification 0x47 +#define DW_AT_type 0x49 +#define DW_AT_virtuality 0x4c +#define DW_AT_vtable_elem_location 0x4d +// DWARF 2.1/3.0 extensions +#define DW_AT_entry_pc 0x52 +#define DW_AT_ranges 0x55 +// ARM Compiler extensions +#define DW_AT_proc_body 0x2000 +#define DW_AT_save_offset 0x2001 +#define DW_AT_user_2002 0x2002 +// MIPS extensions +#define DW_AT_MIPS_linkage_name 0x2007 + +#define DW_FORM_addr 0x01 +#define DW_FORM_data2 0x05 +#define DW_FORM_data4 0x06 +#define DW_FORM_string 0x08 +#define DW_FORM_block 0x09 +#define DW_FORM_block1 0x0a +#define DW_FORM_data1 0x0b +#define DW_FORM_flag 0x0c +#define DW_FORM_sdata 0x0d +#define DW_FORM_strp 0x0e +#define DW_FORM_udata 0x0f +#define DW_FORM_ref_addr 0x10 +#define DW_FORM_ref4 0x13 +#define DW_FORM_ref_udata 0x15 +#define DW_FORM_indirect 0x16 + +#define DW_OP_addr 0x03 +#define DW_OP_plus_uconst 0x23 +#define DW_OP_reg0 0x50 +#define DW_OP_reg1 0x51 +#define DW_OP_reg2 0x52 +#define DW_OP_reg3 0x53 +#define DW_OP_reg4 0x54 +#define DW_OP_reg5 0x55 +#define DW_OP_reg6 0x56 +#define DW_OP_reg7 0x57 +#define DW_OP_reg8 0x58 +#define DW_OP_reg9 0x59 +#define DW_OP_reg10 0x5a +#define DW_OP_reg11 0x5b +#define DW_OP_reg12 0x5c +#define DW_OP_reg13 0x5d +#define DW_OP_reg14 0x5e +#define DW_OP_reg15 0x5f +#define DW_OP_fbreg 0x91 + +#define DW_LNS_extended_op 0x00 +#define DW_LNS_copy 0x01 +#define DW_LNS_advance_pc 0x02 +#define DW_LNS_advance_line 0x03 +#define DW_LNS_set_file 0x04 +#define DW_LNS_set_column 0x05 +#define DW_LNS_negate_stmt 0x06 +#define DW_LNS_set_basic_block 0x07 +#define DW_LNS_const_add_pc 0x08 +#define DW_LNS_fixed_advance_pc 0x09 + +#define DW_LNE_end_sequence 0x01 +#define DW_LNE_set_address 0x02 +#define DW_LNE_define_file 0x03 + +#define DW_CFA_advance_loc 0x01 +#define DW_CFA_offset 0x02 +#define DW_CFA_restore 0x03 +#define DW_CFA_set_loc 0x01 +#define DW_CFA_advance_loc1 0x02 +#define DW_CFA_advance_loc2 0x03 +#define DW_CFA_advance_loc4 0x04 +#define DW_CFA_offset_extended 0x05 +#define DW_CFA_restore_extended 0x06 +#define DW_CFA_undefined 0x07 +#define DW_CFA_same_value 0x08 +#define DW_CFA_register 0x09 +#define DW_CFA_remember_state 0x0a +#define DW_CFA_restore_state 0x0b +#define DW_CFA_def_cfa 0x0c +#define DW_CFA_def_cfa_register 0x0d +#define DW_CFA_def_cfa_offset 0x0e +#define DW_CFA_nop 0x00 + +#define CASE_TYPE_TAG \ + case DW_TAG_const_type:\ + case DW_TAG_volatile_type:\ + case DW_TAG_pointer_type:\ + case DW_TAG_base_type:\ + case DW_TAG_array_type:\ + case DW_TAG_structure_type:\ + case DW_TAG_union_type:\ + case DW_TAG_typedef:\ + case DW_TAG_subroutine_type:\ + case DW_TAG_enumeration_type:\ + case DW_TAG_enumerator:\ + case DW_TAG_reference_type + +struct ELFcie + { + ELFcie *next; + u32 offset; + u8 *augmentation; + u32 codeAlign; + s32 dataAlign; + int returnAddress; + u8 *data; + u32 dataLen; + }; + +struct ELFfde + { + ELFcie *cie; + u32 address; + u32 end; + u8 *data; + u32 dataLen; + }; + +enum ELFRegMode { + REG_NOT_SET, + REG_OFFSET, + REG_REGISTER +}; + + +struct ELFFrameStateRegister + { + ELFRegMode mode; + int reg; + s32 offset; + }; + +struct ELFFrameStateRegisters + { + ELFFrameStateRegister regs[16]; + ELFFrameStateRegisters *previous; + }; + +enum ELFCfaMode { + CFA_NOT_SET, + CFA_REG_OFFSET +}; + +struct ELFFrameState + { + ELFFrameStateRegisters registers; + + ELFCfaMode cfaMode; + int cfaRegister; + s32 cfaOffset; + + u32 pc; + + int dataAlign; + int codeAlign; + int returnAddress; + }; + +extern bool cpuIsMultiBoot; + +Symbol *elfSymbols = NULL; +char *elfSymbolsStrTab = NULL; +int elfSymbolsCount = 0; + +ELFSectionHeader **elfSectionHeaders = NULL; +char *elfSectionHeadersStringTable = NULL; +int elfSectionHeadersCount = 0; +u8 *elfFileData = NULL; + +CompileUnit *elfCompileUnits = NULL; +DebugInfo *elfDebugInfo = NULL; +char *elfDebugStrings = NULL; + +ELFcie *elfCies = NULL; +ELFfde **elfFdes = NULL; +int elfFdeCount = 0; + +CompileUnit *elfCurrentUnit = NULL; + +u32 elfRead4Bytes(u8 *); +u16 elfRead2Bytes(u8 *); + +CompileUnit *elfGetCompileUnit(u32 addr) +{ + if(elfCompileUnits) + { + CompileUnit *unit = elfCompileUnits; + while(unit) + { + if(unit->lowPC) + { + if(addr >= unit->lowPC && addr < unit->highPC) + return unit; + } + else + { + ARanges *r = unit->ranges; + if(r) + { + int count = r->count; + for(int j = 0; j < count; j++) + { + if(addr >= r->ranges[j].lowPC && addr < r->ranges[j].highPC) + return unit; + } + } + } + unit = unit->next; + } + } + return NULL; +} + +char *elfGetAddressSymbol(u32 addr) +{ + static char buffer[256]; + + CompileUnit *unit = elfGetCompileUnit(addr); + // found unit, need to find function + if(unit) + { + Function *func = unit->functions; + while(func) + { + if(addr >= func->lowPC && addr < func->highPC) + { + int offset = addr - func->lowPC; + char *name = func->name; + if(!name) + name = ""; + if(offset) + sprintf(buffer, "%s+%d", name, offset); + else + strcpy(buffer, name); + return buffer; + } + func = func->next; + } + } + + if(elfSymbolsCount) + { + for(int i = 0; i < elfSymbolsCount; i++) + { + Symbol *s = &elfSymbols[i]; + if((addr >= s->value) && addr < (s->value+s->size)) + { + int offset = addr-s->value; + char *name = s->name; + if(name == NULL) + name = ""; + if(offset) + sprintf(buffer, "%s+%d", name, addr-s->value); + else + strcpy(buffer, name); + return buffer; + } + else if(addr == s->value) + { + if(s->name) + strcpy(buffer, s->name); + else + strcpy(buffer, ""); + return buffer; + } + } + } + + return ""; +} + +bool elfFindLineInModule(u32 *addr, char *name, int line) +{ + CompileUnit *unit = elfCompileUnits; + + while(unit) + { + if(unit->lineInfoTable) + { + int i; + int count = unit->lineInfoTable->fileCount; + char *found = NULL; + for(i = 0; i < count; i++) + { + if(strcmp(name, unit->lineInfoTable->files[i]) == 0) + { + found = unit->lineInfoTable->files[i]; + break; + } + } + // found a matching filename... try to find line now + if(found) + { + LineInfoItem *table = unit->lineInfoTable->lines; + count = unit->lineInfoTable->number; + for(i = 0; i < count; i++) + { + if(table[i].file == found && table[i].line == line) + { + *addr = table[i].address; + return true; + } + } + // we can only find a single match + return false; + } + } + unit = unit->next; + } + return false; +} + +int elfFindLine(CompileUnit *unit, Function * /* func */, u32 addr, char **f) +{ + int currentLine = -1; + if(unit->hasLineInfo) + { + int count = unit->lineInfoTable->number; + LineInfoItem *table = unit->lineInfoTable->lines; + int i; + for(i = 0; i < count; i++) + { + if(addr <= table[i].address) + break; + } + if(i == count) + i--; + *f = table[i].file; + currentLine = table[i].line; + } + return currentLine; +} + +bool elfFindLineInUnit(u32 *addr, CompileUnit *unit, int line) +{ + if(unit->hasLineInfo) + { + int count = unit->lineInfoTable->number; + LineInfoItem *table = unit->lineInfoTable->lines; + int i; + for(i = 0; i < count; i++) + { + if(line == table[i].line) + { + *addr = table[i].address; + return true; + } + } + } + return false; +} + +bool elfGetCurrentFunction(u32 addr, Function **f, CompileUnit **u) +{ + CompileUnit *unit = elfGetCompileUnit(addr); + // found unit, need to find function + if(unit) + { + Function *func = unit->functions; + while(func) + { + if(addr >= func->lowPC && addr < func->highPC) + { + *f = func; + *u = unit; + return true; + } + func = func->next; + } + } + return false; +} + +bool elfGetObject(char *name, Function *f, CompileUnit *u, Object **o) +{ + if(f && u) + { + Object *v = f->variables; + + while(v) + { + if(strcmp(name, v->name) == 0) + { + *o = v; + return true; + } + v = v->next; + } + v = f->parameters; + while(v) + { + if(strcmp(name, v->name) == 0) + { + *o = v; + return true; + } + v = v->next; + } + v = u->variables; + while(v) + { + if(strcmp(name, v->name) == 0) + { + *o = v; + return true; + } + v = v->next; + } + } + + CompileUnit *c = elfCompileUnits; + + while(c) + { + if(c != u) + { + Object *v = c->variables; + while(v) + { + if(strcmp(name, v->name) == 0) + { + *o = v; + return true; + } + v = v->next; + } + } + c = c->next; + } + + return false; +} + +char *elfGetSymbol(int i, u32 *value, u32 *size, int *type) +{ + if(i < elfSymbolsCount) + { + Symbol *s = &elfSymbols[i]; + *value = s->value; + *size = s->size; + *type = s->type; + return s->name; + } + return NULL; +} + +bool elfGetSymbolAddress(char *sym, u32 *addr, u32 *size, int *type) +{ + if(elfSymbolsCount) + { + for(int i = 0; i < elfSymbolsCount; i++) + { + Symbol *s = &elfSymbols[i]; + if(strcmp(sym, s->name) == 0) + { + *addr = s->value; + *size = s->size; + *type = s->type; + return true; + } + } + } + return false; +} + +ELFfde *elfGetFde(u32 address) +{ + if(elfFdes) + { + int i; + for(i = 0; i < elfFdeCount; i++) + { + if(address >= elfFdes[i]->address && + address < elfFdes[i]->end) + { + return elfFdes[i]; + } + } + } + + return NULL; +} + +void elfExecuteCFAInstructions(ELFFrameState *state, u8 *data, u32 len, + u32 pc) +{ + u8 *end = data + len; + int bytes; + int reg; + ELFFrameStateRegisters *fs; + + while(data < end && state->pc < pc) + { + u8 op = *data++; + + switch(op >> 6) + { + case DW_CFA_advance_loc: + state->pc += (op & 0x3f) * state->codeAlign; + break; + case DW_CFA_offset: + reg = op & 0x3f; + state->registers.regs[reg].mode = REG_OFFSET; + state->registers.regs[reg].offset = state->dataAlign * + (s32)elfReadLEB128(data, &bytes); + data += bytes; + break; + case DW_CFA_restore: + // we don't care much about the other possible settings, + // so just setting to unset is enough for now + state->registers.regs[op & 0x3f].mode = REG_NOT_SET; + break; + case 0: + switch(op & 0x3f) + { + case DW_CFA_nop: + break; + case DW_CFA_advance_loc1: + state->pc += state->codeAlign * (*data++); + break; + case DW_CFA_advance_loc2: + state->pc += state->codeAlign * elfRead2Bytes(data); + data += 2; + break; + case DW_CFA_advance_loc4: + state->pc += state->codeAlign * elfRead4Bytes(data); + data += 4; + break; + case DW_CFA_offset_extended: + reg = elfReadLEB128(data, &bytes); + data += bytes; + state->registers.regs[reg].mode = REG_OFFSET; + state->registers.regs[reg].offset = state->dataAlign * + (s32)elfReadLEB128(data, &bytes); + data += bytes; + break; + case DW_CFA_restore_extended: + case DW_CFA_undefined: + case DW_CFA_same_value: + reg = elfReadLEB128(data, &bytes); + data += bytes; + state->registers.regs[reg].mode = REG_NOT_SET; + break; + case DW_CFA_register: + reg = elfReadLEB128(data, &bytes); + data += bytes; + state->registers.regs[reg].mode = REG_REGISTER; + state->registers.regs[reg].reg = elfReadLEB128(data, &bytes); + data += bytes; + break; + case DW_CFA_remember_state: + fs = (ELFFrameStateRegisters *)calloc(1, + sizeof(ELFFrameStateRegisters)); + memcpy(fs, &state->registers, sizeof(ELFFrameStateRegisters)); + state->registers.previous = fs; + break; + case DW_CFA_restore_state: + if(state->registers.previous == NULL) + { + printf("Error: previous frame state is NULL.\n"); + return; + } + fs = state->registers.previous; + memcpy(&state->registers, fs, sizeof(ELFFrameStateRegisters)); + free(fs); + break; + case DW_CFA_def_cfa: + state->cfaRegister = elfReadLEB128(data, &bytes); + data += bytes; + state->cfaOffset = (s32)elfReadLEB128(data, &bytes); + data += bytes; + state->cfaMode = CFA_REG_OFFSET; + break; + case DW_CFA_def_cfa_register: + state->cfaRegister = elfReadLEB128(data, &bytes); + data += bytes; + state->cfaMode = CFA_REG_OFFSET; + break; + case DW_CFA_def_cfa_offset: + state->cfaOffset = (s32)elfReadLEB128(data, &bytes); + data += bytes; + state->cfaMode = CFA_REG_OFFSET; + break; + default: + printf("Unknown CFA opcode %08x\n", op); + return; + } + break; + default: + printf("Unknown CFA opcode %08x\n", op); + return; + } + } +} + +ELFFrameState *elfGetFrameState(ELFfde *fde, u32 address) +{ + ELFFrameState *state = (ELFFrameState *)calloc(1, sizeof(ELFFrameState)); + state->pc = fde->address; + state->dataAlign = fde->cie->dataAlign; + state->codeAlign = fde->cie->codeAlign; + state->returnAddress = fde->cie->returnAddress; + + elfExecuteCFAInstructions(state, + fde->cie->data, + fde->cie->dataLen, + 0xffffffff); + elfExecuteCFAInstructions(state, + fde->data, + fde->dataLen, + address); + + return state; +} + +void elfPrintCallChain(u32 address) +{ + int count = 1; + + reg_pair regs[15]; + reg_pair newRegs[15]; + + memcpy(®s[0], ®[0], sizeof(reg_pair) * 15); + + while(count < 20) + { + char *addr = elfGetAddressSymbol(address); + if(*addr == 0) + addr = "???"; + + printf("%08x %s\n", address, addr); + + ELFfde *fde = elfGetFde(address); + + if(fde == NULL) + { + break; + } + + ELFFrameState *state = elfGetFrameState(fde, address); + + if(!state) + { + break; + } + + if(state->cfaMode == CFA_REG_OFFSET) + { + memcpy(&newRegs[0], ®s[0], sizeof(reg_pair) * 15); + u32 addr = 0; + for(int i = 0; i < 15; i++) + { + ELFFrameStateRegister *r = &state->registers. + regs[i]; + + switch(r->mode) + { + case REG_NOT_SET: + newRegs[i].I = regs[i].I; + break; + case REG_OFFSET: + newRegs[i].I = elfReadMemory(regs[state->cfaRegister].I + + state->cfaOffset + + r->offset); + break; + case REG_REGISTER: + newRegs[i].I = regs[r->reg].I; + break; + default: + printf("Unknown register mode: %d\n", r->mode); + break; + } + } + memcpy(regs, newRegs, sizeof(reg_pair)*15); + addr = newRegs[14].I; + addr &= 0xfffffffe; + address = addr; + count++; + } + else + { + printf("CFA not set\n"); + break; + } + if(state->registers.previous) + { + ELFFrameStateRegisters *prev = state->registers.previous; + + while(prev) + { + ELFFrameStateRegisters *p = prev->previous; + free(prev); + prev = p; + } + } + free(state); + } +} + +u32 elfDecodeLocation(Function *f, ELFBlock *o, LocationType *type, u32 base) +{ + u32 framebase = 0; + if(f && f->frameBase) + { + ELFBlock *b = f->frameBase; + switch(*b->data) + { + case DW_OP_reg0: + case DW_OP_reg1: + case DW_OP_reg2: + case DW_OP_reg3: + case DW_OP_reg4: + case DW_OP_reg5: + case DW_OP_reg6: + case DW_OP_reg7: + case DW_OP_reg8: + case DW_OP_reg9: + case DW_OP_reg10: + case DW_OP_reg11: + case DW_OP_reg12: + case DW_OP_reg13: + case DW_OP_reg14: + case DW_OP_reg15: + framebase = reg[*b->data-0x50].I; + break; + default: + fprintf(stderr, "Unknown frameBase %02x\n", *b->data); + break; + } + } + + ELFBlock *loc = o; + u32 location = 0; + int bytes = 0; + if(loc) + { + switch(*loc->data) + { + case DW_OP_addr: + location = elfRead4Bytes(loc->data+1); + *type = LOCATION_memory; + break; + case DW_OP_plus_uconst: + location = base + elfReadLEB128(loc->data+1, &bytes); + *type = LOCATION_memory; + break; + case DW_OP_reg0: + case DW_OP_reg1: + case DW_OP_reg2: + case DW_OP_reg3: + case DW_OP_reg4: + case DW_OP_reg5: + case DW_OP_reg6: + case DW_OP_reg7: + case DW_OP_reg8: + case DW_OP_reg9: + case DW_OP_reg10: + case DW_OP_reg11: + case DW_OP_reg12: + case DW_OP_reg13: + case DW_OP_reg14: + case DW_OP_reg15: + location = *loc->data - 0x50; + *type = LOCATION_register; + break; + case DW_OP_fbreg: + { + int bytes; + s32 off = elfReadSignedLEB128(loc->data+1, &bytes); + location = framebase + off; + *type = LOCATION_memory; + } + break; + default: + fprintf(stderr, "Unknown location %02x\n", *loc->data); + break; + } + } + return location; +} + +u32 elfDecodeLocation(Function *f, ELFBlock *o, LocationType *type) +{ + return elfDecodeLocation(f, o, type, 0); +} + +// reading function + +u32 elfRead4Bytes(u8 *data) +{ + u32 value = *data++; + value |= (*data++ << 8); + value |= (*data++ << 16); + value |= (*data << 24); + return value; +} + +u16 elfRead2Bytes(u8 *data) +{ + u16 value = *data++; + value |= (*data << 8); + return value; +} + +char *elfReadString(u8 *data, int *bytesRead) +{ + if(*data == 0) + { + *bytesRead = 1; + return NULL; + } + *bytesRead = strlen((char *)data) + 1; + return (char *)data; +} + +s32 elfReadSignedLEB128(u8 *data, int *bytesRead) +{ + s32 result = 0; + int shift = 0; + int count = 0; + + u8 byte; + do + { + byte = *data++; + count++; + result |= (byte & 0x7f) << shift; + shift += 7; + } + while(byte & 0x80); + if((shift < 32) && (byte & 0x40)) + result |= -(1 << shift); + *bytesRead = count; + return result; +} + +u32 elfReadLEB128(u8 *data, int *bytesRead) +{ + u32 result = 0; + int shift = 0; + int count = 0; + u8 byte; + do + { + byte = *data++; + count++; + result |= (byte & 0x7f) << shift; + shift += 7; + } + while(byte & 0x80); + *bytesRead = count; + return result; +} + +u8 *elfReadSection(u8 *data, ELFSectionHeader *sh) +{ + return data + READ32LE(&sh->offset); +} + +ELFSectionHeader *elfGetSectionByName(char *name) +{ + for(int i = 0; i < elfSectionHeadersCount; i++) + { + if(strcmp(name, + &elfSectionHeadersStringTable[READ32LE(&elfSectionHeaders[i]-> + name)]) == 0) + { + return elfSectionHeaders[i]; + } + } + return NULL; +} + +ELFSectionHeader *elfGetSectionByNumber(int number) +{ + if(number < elfSectionHeadersCount) + { + return elfSectionHeaders[number]; + } + return NULL; +} + +CompileUnit *elfGetCompileUnitForData(u8 *data) +{ + u8 *end = elfCurrentUnit->top + 4 + elfCurrentUnit->length; + + if(data >= elfCurrentUnit->top && data < end) + return elfCurrentUnit; + + CompileUnit *unit = elfCompileUnits; + + while(unit) + { + end = unit->top + 4 + unit->length; + + if(data >= unit->top && data < end) + return unit; + + unit = unit->next; + } + + printf("Error: cannot find reference to compile unit at offset %08x\n", + (int)(data - elfDebugInfo->infodata)); + exit(-1); +} + +u8 *elfReadAttribute(u8 *data, ELFAttr *attr) +{ + int bytes; + int form = attr->form; +start: + switch(form) + { + case DW_FORM_addr: + attr->value = elfRead4Bytes(data); + data += 4; + break; + case DW_FORM_data2: + attr->value = elfRead2Bytes(data); + data += 2; + break; + case DW_FORM_data4: + attr->value = elfRead4Bytes(data); + data += 4; + break; + case DW_FORM_string: + attr->string = (char *)data; + data += strlen(attr->string)+1; + break; + case DW_FORM_strp: + attr->string = elfDebugStrings + elfRead4Bytes(data); + data += 4; + break; + case DW_FORM_block: + attr->block = (ELFBlock *)malloc(sizeof(ELFBlock)); + attr->block->length = elfReadLEB128(data, &bytes); + data += bytes; + attr->block->data = data; + data += attr->block->length; + break; + case DW_FORM_block1: + attr->block = (ELFBlock *)malloc(sizeof(ELFBlock)); + attr->block->length = *data++; + attr->block->data = data; + data += attr->block->length; + break; + case DW_FORM_data1: + attr->value = *data++; + break; + case DW_FORM_flag: + attr->flag = (*data++) ? true : false; + break; + case DW_FORM_sdata: + attr->value = elfReadSignedLEB128(data, &bytes); + data += bytes; + break; + case DW_FORM_udata: + attr->value = elfReadLEB128(data, &bytes); + data += bytes; + break; + case DW_FORM_ref_addr: + attr->value = (elfDebugInfo->infodata + elfRead4Bytes(data)) - + elfGetCompileUnitForData(data)->top; + data += 4; + break; + case DW_FORM_ref4: + attr->value = elfRead4Bytes(data); + data += 4; + break; + case DW_FORM_ref_udata: + attr->value = (elfDebugInfo->infodata + + (elfGetCompileUnitForData(data)->top - + elfDebugInfo->infodata) + + elfReadLEB128(data, &bytes)) - + elfCurrentUnit->top; + data += bytes; + break; + case DW_FORM_indirect: + form = elfReadLEB128(data, &bytes); + data += bytes; + goto start; + default: + fprintf(stderr, "Unsupported FORM %02x\n", form); + exit(-1); + } + return data; +} + +ELFAbbrev *elfGetAbbrev(ELFAbbrev **table, u32 number) +{ + int hash = number % 121; + + ELFAbbrev *abbrev = table[hash]; + + while(abbrev) + { + if(abbrev->number == number) + return abbrev; + abbrev = abbrev->next; + } + return NULL; +} + +ELFAbbrev **elfReadAbbrevs(u8 *data, u32 offset) +{ + data += offset; + ELFAbbrev **abbrevs = (ELFAbbrev **)calloc(sizeof(ELFAbbrev *)*121,1); + int bytes = 0; + u32 number = elfReadLEB128(data, &bytes); + data += bytes; + while(number) + { + ELFAbbrev *abbrev = (ELFAbbrev *)calloc(sizeof(ELFAbbrev),1); + + // read tag information + abbrev->number = number; + abbrev->tag = elfReadLEB128(data, &bytes); + data += bytes; + abbrev->hasChildren = *data++ ? true: false; + + // read attributes + int name = elfReadLEB128(data, &bytes); + data += bytes; + int form = elfReadLEB128(data, &bytes); + data += bytes; + + while(name) + { + if((abbrev->numAttrs % 4) == 0) + { + abbrev->attrs = (ELFAttr *)realloc(abbrev->attrs, + (abbrev->numAttrs + 4) * + sizeof(ELFAttr)); + } + abbrev->attrs[abbrev->numAttrs].name = name; + abbrev->attrs[abbrev->numAttrs++].form = form; + + name = elfReadLEB128(data, &bytes); + data += bytes; + form = elfReadLEB128(data, &bytes); + data += bytes; + } + + int hash = number % 121; + abbrev->next = abbrevs[hash]; + abbrevs[hash] = abbrev; + + number = elfReadLEB128(data, &bytes); + data += bytes; + + if(elfGetAbbrev(abbrevs, number) != NULL) + break; + } + + return abbrevs; +} + +void elfParseCFA(u8 *top) +{ + ELFSectionHeader *h = elfGetSectionByName(".debug_frame"); + + if(h == NULL) + { + return; + } + + u8 *data = elfReadSection(top, h); + + u8 *topOffset = data; + + u8 *end = data + READ32LE(&h->size); + + ELFcie *cies = NULL; + + while(data < end) + { + u32 offset = data - topOffset; + u32 len = elfRead4Bytes(data); + data += 4; + + u8 *dataEnd = data + len; + + u32 id = elfRead4Bytes(data); + data += 4; + + if(id == 0xffffffff) + { + // skip version + *data++; + + ELFcie *cie = (ELFcie *)calloc(1, sizeof(ELFcie)); + + cie->next = cies; + cies = cie; + + cie->offset = offset; + + cie->augmentation = data; + while(*data) + data++; + data++; + + if(*cie->augmentation) + { + fprintf(stderr, "Error: augmentation not supported\n"); + exit(-1); + } + + int bytes; + cie->codeAlign = elfReadLEB128(data, &bytes); + data += bytes; + + cie->dataAlign = elfReadSignedLEB128(data, &bytes); + data += bytes; + + cie->returnAddress = *data++; + + cie->data = data; + cie->dataLen = dataEnd - data; + } + else + { + ELFfde *fde = (ELFfde *)calloc(1, sizeof(ELFfde)); + + ELFcie *cie = cies; + + while(cie != NULL) + { + if(cie->offset == id) + break; + cie = cie->next; + } + + if(!cie) + { + fprintf(stderr, "Cannot find CIE %08x\n", id); + exit(-1); + } + + fde->cie = cie; + + fde->address = elfRead4Bytes(data); + data += 4; + + fde->end = fde->address + elfRead4Bytes(data); + data += 4; + + fde->data = data; + fde->dataLen = dataEnd - data; + + if((elfFdeCount %10) == 0) + { + elfFdes = (ELFfde **)realloc(elfFdes, (elfFdeCount+10) * + sizeof(ELFfde *)); + } + elfFdes[elfFdeCount++] = fde; + } + data = dataEnd; + } + + elfCies = cies; +} + +void elfAddLine(LineInfo *l, u32 a, int file, int line, int *max) +{ + if(l->number == *max) + { + *max += 1000; + l->lines = (LineInfoItem *)realloc(l->lines, *max*sizeof(LineInfoItem)); + } + LineInfoItem *li = &l->lines[l->number]; + li->file = l->files[file-1]; + li->address = a; + li->line = line; + l->number++; +} + +void elfParseLineInfo(CompileUnit *unit, u8 *top) +{ + ELFSectionHeader *h = elfGetSectionByName(".debug_line"); + if(h == NULL) + { + fprintf(stderr, "No line information found\n"); + return; + } + LineInfo *l = unit->lineInfoTable = (LineInfo *)calloc(1, sizeof(LineInfo)); + l->number = 0; + int max = 1000; + l->lines = (LineInfoItem *)malloc(1000*sizeof(LineInfoItem)); + + u8 *data = elfReadSection(top, h); + data += unit->lineInfo; + u32 totalLen = elfRead4Bytes(data); + data += 4; + u8 *end = data + totalLen; + // u16 version = elfRead2Bytes(data); + data += 2; + // u32 offset = elfRead4Bytes(data); + data += 4; + int minInstrSize = *data++; + int defaultIsStmt = *data++; + int lineBase = (s8)*data++; + int lineRange = *data++; + int opcodeBase = *data++; + u8 *stdOpLen = (u8 *)malloc(opcodeBase * sizeof(u8)); + stdOpLen[0] = 1; + int i; + for(i = 1; i < opcodeBase; i++) + stdOpLen[i] = *data++; + + free(stdOpLen);// todo + int bytes = 0; + + char *s; + while((s = elfReadString(data, &bytes)) != NULL) + { + data += bytes; + // fprintf(stderr, "Directory is %s\n", s); + } + data += bytes; + int count = 4; + int index = 0; + l->files = (char **)malloc(sizeof(char *)*count); + + while((s = elfReadString(data, &bytes)) != NULL) + { + l->files[index++] = s; + + data += bytes; + // directory + elfReadLEB128(data, &bytes); + data += bytes; + // time + elfReadLEB128(data, &bytes); + data += bytes; + // size + elfReadLEB128(data, &bytes); + data += bytes; + // fprintf(stderr, "File is %s\n", s); + if(index == count) + { + count += 4; + l->files = (char **)realloc(l->files, sizeof(char *)*count); + } + } + l->fileCount = index; + data += bytes; + + while(data < end) + { + u32 address = 0; + int file = 1; + int line = 1; + int col = 0; + int isStmt = defaultIsStmt; + int basicBlock = 0; + int endSeq = 0; + + while(!endSeq) + { + int op = *data++; + switch(op) + { + case DW_LNS_extended_op: + { + data++; + op = *data++; + switch(op) + { + case DW_LNE_end_sequence: + endSeq = 1; + break; + case DW_LNE_set_address: + address = elfRead4Bytes(data); + data += 4; + break; + default: + fprintf(stderr, "Unknown extended LINE opcode %02x\n", op); + exit(-1); + } + } + break; + case DW_LNS_copy: + // fprintf(stderr, "Address %08x line %d (%d)\n", address, line, file); + elfAddLine(l, address, file, line, &max); + basicBlock = 0; + break; + case DW_LNS_advance_pc: + address += minInstrSize * elfReadLEB128(data, &bytes); + data += bytes; + break; + case DW_LNS_advance_line: + line += elfReadSignedLEB128(data, &bytes); + data += bytes; + break; + case DW_LNS_set_file: + file = elfReadLEB128(data, &bytes); + data += bytes; + break; + case DW_LNS_set_column: + col = elfReadLEB128(data, &bytes); + data += bytes; + break; + case DW_LNS_negate_stmt: + isStmt = !isStmt; + break; + case DW_LNS_set_basic_block: + basicBlock = 1; + break; + case DW_LNS_const_add_pc: + address += (minInstrSize *((255 - opcodeBase)/lineRange)); + break; + case DW_LNS_fixed_advance_pc: + address += elfRead2Bytes(data); + data += 2; + break; + default: + op = op - opcodeBase; + address += (op / lineRange) * minInstrSize; + line += lineBase + (op % lineRange); + elfAddLine(l, address, file, line, &max); + // fprintf(stderr, "Address %08x line %d (%d)\n", address, line,file); + basicBlock = 1; + break; + } + } + } + l->lines = (LineInfoItem *)realloc(l->lines, l->number*sizeof(LineInfoItem)); +} + +u8 *elfSkipData(u8 *data, ELFAbbrev *abbrev, ELFAbbrev **abbrevs) +{ + int i; + int bytes; + + for(i = 0; i < abbrev->numAttrs; i++) + { + data = elfReadAttribute(data, &abbrev->attrs[i]); + if(abbrev->attrs[i].form == DW_FORM_block1) + free(abbrev->attrs[i].block); + } + + if(abbrev->hasChildren) + { + int nesting = 1; + while(nesting) + { + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + if(!abbrevNum) + { + nesting--; + continue; + } + + abbrev = elfGetAbbrev(abbrevs, abbrevNum); + + for(i = 0; i < abbrev->numAttrs; i++) + { + data = elfReadAttribute(data, &abbrev->attrs[i]); + if(abbrev->attrs[i].form == DW_FORM_block1) + free(abbrev->attrs[i].block); + } + + if(abbrev->hasChildren) + { + nesting++; + } + } + } + return data; +} + +Type *elfParseType(CompileUnit *unit, u32); +u8 *elfParseObject(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, + Object **object); +u8 *elfParseFunction(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, + Function **function); +void elfCleanUp(Function *); + +void elfAddType(Type *type, CompileUnit *unit, u32 offset) +{ + if(type->next == NULL) + { + if(unit->types != type && type->offset == 0) + { + type->offset = offset; + type->next = unit->types; + unit->types = type; + } + } +} + +void elfParseType(u8 *data, u32 offset, ELFAbbrev *abbrev, CompileUnit *unit, + Type **type) +{ + switch(abbrev->tag) + { + case DW_TAG_typedef: + { + u32 typeref = 0; + char *name = NULL; + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_name: + name = attr->string; + break; + case DW_AT_type: + typeref = attr->value; + break; + case DW_AT_decl_file: + case DW_AT_decl_line: + break; + default: + fprintf(stderr, "Unknown attribute for typedef %02x\n", attr->name); + break; + } + } + if(abbrev->hasChildren) + fprintf(stderr, "Unexpected children for typedef\n"); + *type = elfParseType(unit, typeref); + if(name) + (*type)->name = name; + return; + } + break; + case DW_TAG_union_type: + case DW_TAG_structure_type: + { + Type *t = (Type *)calloc(sizeof(Type), 1); + if(abbrev->tag == DW_TAG_structure_type) + t->type = TYPE_struct; + else + t->type = TYPE_union; + + Struct *s = (Struct *)calloc(sizeof(Struct), 1); + t->structure = s; + elfAddType(t, unit, offset); + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_name: + t->name = attr->string; + break; + case DW_AT_byte_size: + t->size = attr->value; + break; + case DW_AT_decl_file: + case DW_AT_decl_line: + case DW_AT_sibling: + case DW_AT_containing_type: // todo? + case DW_AT_declaration: + case DW_AT_specification: // TODO: + break; + default: + fprintf(stderr, "Unknown attribute for struct %02x\n", attr->name); + break; + } + } + if(abbrev->hasChildren) + { + int bytes; + u32 num = elfReadLEB128(data, &bytes); + data += bytes; + int index = 0; + while(num) + { + ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); + + switch(abbr->tag) + { + case DW_TAG_member: + { + if((index % 4) == 0) + s->members = (Member *)realloc(s->members, + sizeof(Member)*(index+4)); + Member *m = &s->members[index]; + m->location = NULL; + m->bitOffset = 0; + m->bitSize = 0; + m->byteSize = 0; + for(int i = 0; i < abbr->numAttrs; i++) + { + ELFAttr *attr = &abbr->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_name: + m->name = attr->string; + break; + case DW_AT_type: + m->type = elfParseType(unit, attr->value); + break; + case DW_AT_data_member_location: + m->location = attr->block; + break; + case DW_AT_byte_size: + m->byteSize = attr->value; + break; + case DW_AT_bit_offset: + m->bitOffset = attr->value; + break; + case DW_AT_bit_size: + m->bitSize = attr->value; + break; + case DW_AT_decl_file: + case DW_AT_decl_line: + case DW_AT_accessibility: + case DW_AT_artificial: // todo? + break; + default: + fprintf(stderr, "Unknown member attribute %02x\n", + attr->name); + } + } + index++; + } + break; + case DW_TAG_subprogram: + { + Function *fnc = NULL; + data = elfParseFunction(data, abbr, unit, &fnc); + if(fnc != NULL) + { + if(unit->lastFunction) + unit->lastFunction->next = fnc; + else + unit->functions = fnc; + unit->lastFunction = fnc; + } + } + break; + case DW_TAG_inheritance: + // TODO: add support + data = elfSkipData(data, abbr, unit->abbrevs); + break; +CASE_TYPE_TAG: + // skip types... parsed only when used + data = elfSkipData(data, abbr, unit->abbrevs); + break; + case DW_TAG_variable: + data = elfSkipData(data, abbr, unit->abbrevs); + break; + default: + fprintf(stderr, "Unknown struct tag %02x %s\n", abbr->tag, t->name); + data = elfSkipData(data, abbr, unit->abbrevs); + break; + } + num = elfReadLEB128(data, &bytes); + data += bytes; + } + s->memberCount = index; + } + *type = t; + return; + } + break; + case DW_TAG_base_type: + { + Type *t = (Type *)calloc(sizeof(Type), 1); + + t->type = TYPE_base; + elfAddType(t, unit, offset); + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_name: + t->name = attr->string; + break; + case DW_AT_encoding: + t->encoding = attr->value; + break; + case DW_AT_byte_size: + t->size = attr->value; + break; + case DW_AT_bit_size: + t->bitSize = attr->value; + break; + default: + fprintf(stderr, "Unknown attribute for base type %02x\n", + attr->name); + break; + } + } + if(abbrev->hasChildren) + fprintf(stderr, "Unexpected children for base type\n"); + *type = t; + return; + } + break; + case DW_TAG_pointer_type: + { + Type *t = (Type *)calloc(sizeof(Type), 1); + + t->type = TYPE_pointer; + + elfAddType(t, unit, offset); + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data =elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_type: + t->pointer = elfParseType(unit, attr->value); + break; + case DW_AT_byte_size: + t->size = attr->value; + break; + default: + fprintf(stderr, "Unknown pointer type attribute %02x\n", attr->name); + break; + } + } + if(abbrev->hasChildren) + fprintf(stderr, "Unexpected children for pointer type\n"); + *type = t; + return; + } + break; + case DW_TAG_reference_type: + { + Type *t = (Type *)calloc(sizeof(Type), 1); + + t->type = TYPE_reference; + + elfAddType(t, unit, offset); + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data =elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_type: + t->pointer = elfParseType(unit, attr->value); + break; + case DW_AT_byte_size: + t->size = attr->value; + break; + default: + fprintf(stderr, "Unknown ref type attribute %02x\n", attr->name); + break; + } + } + if(abbrev->hasChildren) + fprintf(stderr, "Unexpected children for ref type\n"); + *type = t; + return; + } + break; + case DW_TAG_volatile_type: + { + u32 typeref = 0; + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_type: + typeref = attr->value; + break; + default: + fprintf(stderr, "Unknown volatile attribute for type %02x\n", + attr->name); + break; + } + } + if(abbrev->hasChildren) + fprintf(stderr, "Unexpected children for volatile type\n"); + *type = elfParseType(unit, typeref); + return; + } + break; + case DW_TAG_const_type: + { + u32 typeref = 0; + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_type: + typeref = attr->value; + break; + default: + fprintf(stderr, "Unknown const attribute for type %02x\n", + attr->name); + break; + } + } + if(abbrev->hasChildren) + fprintf(stderr, "Unexpected children for const type\n"); + *type = elfParseType(unit, typeref); + return; + } + break; + case DW_TAG_enumeration_type: + { + Type *t = (Type *)calloc(sizeof(Type), 1); + t->type = TYPE_enum; + Enum *e = (Enum *)calloc(sizeof(Enum), 1); + t->enumeration = e; + elfAddType(t, unit, offset); + int count = 0; + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_name: + t->name = attr->string; + break; + case DW_AT_byte_size: + t->size = attr->value; + break; + case DW_AT_sibling: + case DW_AT_decl_file: + case DW_AT_decl_line: + break; + default: + fprintf(stderr, "Unknown enum attribute %02x\n", attr->name); + } + } + if(abbrev->hasChildren) + { + int bytes; + u32 num = elfReadLEB128(data, &bytes); + data += bytes; + while(num) + { + ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); + + switch(abbr->tag) + { + case DW_TAG_enumerator: + { + count++; + e->members = (EnumMember *)realloc(e->members, + count*sizeof(EnumMember)); + EnumMember *m = &e->members[count-1]; + for(int i = 0; i < abbr->numAttrs; i++) + { + ELFAttr *attr = &abbr->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_name: + m->name = attr->string; + break; + case DW_AT_const_value: + m->value = attr->value; + break; + default: + fprintf(stderr, "Unknown sub param attribute %02x\n", + attr->name); + } + } + } + break; + default: + fprintf(stderr, "Unknown enum tag %02x\n", abbr->tag); + data = elfSkipData(data, abbr, unit->abbrevs); + break; + } + num = elfReadLEB128(data, &bytes); + data += bytes; + } + } + e->count = count; + *type = t; + return; + } + break; + case DW_TAG_subroutine_type: + { + Type *t = (Type *)calloc(sizeof(Type), 1); + t->type = TYPE_function; + FunctionType *f = (FunctionType *)calloc(sizeof(FunctionType), 1); + t->function = f; + elfAddType(t, unit, offset); + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_prototyped: + case DW_AT_sibling: + break; + case DW_AT_type: + f->returnType = elfParseType(unit, attr->value); + break; + default: + fprintf(stderr, "Unknown subroutine attribute %02x\n", attr->name); + } + } + if(abbrev->hasChildren) + { + int bytes; + u32 num = elfReadLEB128(data, &bytes); + data += bytes; + Object *lastVar = NULL; + while(num) + { + ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); + + switch(abbr->tag) + { + case DW_TAG_formal_parameter: + { + Object *o; + data = elfParseObject(data, abbr, unit, &o); + if(f->args) + lastVar->next = o; + else + f->args = o; + lastVar = o; + } + break; + case DW_TAG_unspecified_parameters: + // no use in the debugger yet + data = elfSkipData(data, abbr, unit->abbrevs); + break; +CASE_TYPE_TAG: + // skip types... parsed only when used + data = elfSkipData(data, abbr, unit->abbrevs); + break; + default: + fprintf(stderr, "Unknown subroutine tag %02x\n", abbr->tag); + data = elfSkipData(data, abbr, unit->abbrevs); + break; + } + num = elfReadLEB128(data, &bytes); + data += bytes; + } + } + *type = t; + return; + } + break; + case DW_TAG_array_type: + { + u32 typeref = 0; + int i; + Array *array = (Array *)calloc(sizeof(Array), 1); + Type *t = (Type *)calloc(sizeof(Type), 1); + t->type = TYPE_array; + elfAddType(t, unit, offset); + + for(i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_sibling: + break; + case DW_AT_type: + typeref = attr->value; + array->type = elfParseType(unit, typeref); + break; + default: + fprintf(stderr, "Unknown array attribute %02x\n", attr->name); + } + } + if(abbrev->hasChildren) + { + int bytes; + u32 num = elfReadLEB128(data, &bytes); + data += bytes; + int index = 0; + int maxBounds = 0; + while(num) + { + ELFAbbrev *abbr = elfGetAbbrev(unit->abbrevs, num); + + switch(abbr->tag) + { + case DW_TAG_subrange_type: + { + if(maxBounds == index) + { + maxBounds += 4; + array->bounds = (int *)realloc(array->bounds, + sizeof(int)*maxBounds); + } + for(int i = 0; i < abbr->numAttrs; i++) + { + ELFAttr *attr = &abbr->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_upper_bound: + array->bounds[index] = attr->value+1; + break; + case DW_AT_type: // ignore + break; + default: + fprintf(stderr, "Unknown subrange attribute %02x\n", + attr->name); + } + } + index++; + } + break; + default: + fprintf(stderr, "Unknown array tag %02x\n", abbr->tag); + data = elfSkipData(data, abbr, unit->abbrevs); + break; + } + num = elfReadLEB128(data, &bytes); + data += bytes; + } + array->maxBounds = index; + } + t->size = array->type->size; + for(i = 0; i < array->maxBounds; i++) + t->size *= array->bounds[i]; + t->array = array; + *type = t; + return; + } + break; + default: + fprintf(stderr, "Unknown type TAG %02x\n", abbrev->tag); + exit(-1); + } +} + +Type *elfParseType(CompileUnit *unit, u32 offset) +{ + Type *t = unit->types; + + while(t) + { + if(t->offset == offset) + return t; + t = t->next; + } + if(offset == 0) + { + Type *t = (Type *)calloc(sizeof(Type), 1); + t->type = TYPE_void; + t->offset = 0; + elfAddType(t, unit, 0); + return t; + } + u8 *data = unit->top + offset; + int bytes; + int abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + Type *type = NULL; + + ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); + + elfParseType(data, offset, abbrev, unit, &type); + return type; +} + +void elfGetObjectAttributes(CompileUnit *unit, u32 offset, Object *o) +{ + u8 *data = unit->top + offset; + int bytes; + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + if(!abbrevNum) + { + return; + } + + ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_location: + o->location = attr->block; + break; + case DW_AT_name: + if(o->name == NULL) + o->name = attr->string; + break; + case DW_AT_MIPS_linkage_name: + o->name = attr->string; + break; + case DW_AT_decl_file: + o->file = attr->value; + break; + case DW_AT_decl_line: + o->line = attr->value; + break; + case DW_AT_type: + o->type = elfParseType(unit, attr->value); + break; + case DW_AT_external: + o->external = attr->flag; + break; + case DW_AT_const_value: + case DW_AT_abstract_origin: + case DW_AT_declaration: + case DW_AT_artificial: + // todo + break; + case DW_AT_specification: + // TODO: + break; + default: + fprintf(stderr, "Unknown object attribute %02x\n", attr->name); + break; + } + } +} + +u8 *elfParseObject(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, + Object **object) +{ + Object *o = (Object *)calloc(sizeof(Object), 1); + + o->next = NULL; + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_location: + o->location = attr->block; + break; + case DW_AT_name: + if(o->name == NULL) + o->name = attr->string; + break; + case DW_AT_MIPS_linkage_name: + o->name = attr->string; + break; + case DW_AT_decl_file: + o->file = attr->value; + break; + case DW_AT_decl_line: + o->line = attr->value; + break; + case DW_AT_type: + o->type = elfParseType(unit, attr->value); + break; + case DW_AT_external: + o->external = attr->flag; + break; + case DW_AT_abstract_origin: + elfGetObjectAttributes(unit, attr->value, o); + break; + case DW_AT_const_value: + case DW_AT_declaration: + case DW_AT_artificial: + break; + case DW_AT_specification: + // TODO: + break; + default: + fprintf(stderr, "Unknown object attribute %02x\n", attr->name); + break; + } + } + *object = o; + return data; +} + +u8 *elfParseBlock(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, + Function *func, Object **lastVar) +{ + int bytes; + u32 start = func->lowPC; + u32 end = func->highPC; + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_sibling: + break; + case DW_AT_low_pc: + start = attr->value; + break; + case DW_AT_high_pc: + end = attr->value; + break; + case DW_AT_ranges: // ignore for now + break; + default: + fprintf(stderr, "Unknown block attribute %02x\n", attr->name); + break; + } + } + + if(abbrev->hasChildren) + { + int nesting = 1; + + while(nesting) + { + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + if(!abbrevNum) + { + nesting--; + continue; + } + + abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); + + switch(abbrev->tag) + { +CASE_TYPE_TAG: // types only parsed when used + case DW_TAG_label: // not needed + data = elfSkipData(data, abbrev, unit->abbrevs); + break; + case DW_TAG_lexical_block: + data = elfParseBlock(data, abbrev, unit, func, lastVar); + break; + case DW_TAG_subprogram: + { + Function *f = NULL; + data = elfParseFunction(data, abbrev, unit, &f); + if(f != NULL) + { + if(unit->lastFunction) + unit->lastFunction->next = f; + else + unit->functions = f; + unit->lastFunction = f; + } + } + break; + case DW_TAG_variable: + { + Object *o; + data = elfParseObject(data, abbrev, unit, &o); + if(o->startScope == 0) + o->startScope = start; + if(o->endScope == 0) + o->endScope = 0; + if(func->variables) + (*lastVar)->next = o; + else + func->variables = o; + *lastVar = o; + } + break; + case DW_TAG_inlined_subroutine: + // TODO: + data = elfSkipData(data, abbrev, unit->abbrevs); + break; + default: + { + fprintf(stderr, "Unknown block TAG %02x\n", abbrev->tag); + data = elfSkipData(data, abbrev, unit->abbrevs); + } + break; + } + } + } + return data; +} + +void elfGetFunctionAttributes(CompileUnit *unit, u32 offset, Function *func) +{ + u8 *data = unit->top + offset; + int bytes; + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + if(!abbrevNum) + { + return; + } + + ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); + + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + + switch(attr->name) + { + case DW_AT_sibling: + break; + case DW_AT_name: + if(func->name == NULL) + func->name = attr->string; + break; + case DW_AT_MIPS_linkage_name: + func->name = attr->string; + break; + case DW_AT_low_pc: + func->lowPC = attr->value; + break; + case DW_AT_high_pc: + func->highPC = attr->value; + break; + case DW_AT_decl_file: + func->file = attr->value; + break; + case DW_AT_decl_line: + func->line = attr->value; + break; + case DW_AT_external: + func->external = attr->flag; + break; + case DW_AT_frame_base: + func->frameBase = attr->block; + break; + case DW_AT_type: + func->returnType = elfParseType(unit, attr->value); + break; + case DW_AT_inline: + case DW_AT_specification: + case DW_AT_declaration: + case DW_AT_artificial: + case DW_AT_prototyped: + case DW_AT_proc_body: + case DW_AT_save_offset: + case DW_AT_user_2002: + case DW_AT_virtuality: + case DW_AT_containing_type: + case DW_AT_accessibility: + // todo; + break; + case DW_AT_vtable_elem_location: + free(attr->block); + break; + default: + fprintf(stderr, "Unknown function attribute %02x\n", attr->name); + break; + } + } + + return; +} + +u8 *elfParseFunction(u8 *data, ELFAbbrev *abbrev, CompileUnit *unit, + Function **f) +{ + Function *func = (Function *)calloc(sizeof(Function), 1); + *f = func; + + int bytes; + bool mangled = false; + bool declaration = false; + for(int i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + switch(attr->name) + { + case DW_AT_sibling: + break; + case DW_AT_name: + if(func->name == NULL) + func->name = attr->string; + break; + case DW_AT_MIPS_linkage_name: + func->name = attr->string; + mangled = true; + break; + case DW_AT_low_pc: + func->lowPC = attr->value; + break; + case DW_AT_high_pc: + func->highPC = attr->value; + break; + case DW_AT_prototyped: + break; + case DW_AT_decl_file: + func->file = attr->value; + break; + case DW_AT_decl_line: + func->line = attr->value; + break; + case DW_AT_external: + func->external = attr->flag; + break; + case DW_AT_frame_base: + func->frameBase = attr->block; + break; + case DW_AT_type: + func->returnType = elfParseType(unit, attr->value); + break; + case DW_AT_abstract_origin: + elfGetFunctionAttributes(unit, attr->value, func); + break; + case DW_AT_declaration: + declaration = attr->flag; + break; + case DW_AT_inline: + case DW_AT_specification: + case DW_AT_artificial: + case DW_AT_proc_body: + case DW_AT_save_offset: + case DW_AT_user_2002: + case DW_AT_virtuality: + case DW_AT_containing_type: + case DW_AT_accessibility: + // todo; + break; + case DW_AT_vtable_elem_location: + free(attr->block); + break; + default: + fprintf(stderr, "Unknown function attribute %02x\n", attr->name); + break; + } + } + + if(declaration) + { + elfCleanUp(func); + free(func); + *f = NULL; + + while(1) + { + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + if(!abbrevNum) + { + return data; + } + + abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); + + data = elfSkipData(data, abbrev, unit->abbrevs); + } + } + + if(abbrev->hasChildren) + { + int nesting = 1; + Object *lastParam = NULL; + Object *lastVar = NULL; + + while(nesting) + { + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + if(!abbrevNum) + { + nesting--; + continue; + } + + abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); + + switch(abbrev->tag) + { +CASE_TYPE_TAG: // no need to parse types. only parsed when used + case DW_TAG_label: // not needed + data = elfSkipData(data, abbrev, unit->abbrevs); + break; + case DW_TAG_subprogram: + { + Function *fnc=NULL; + data = elfParseFunction(data, abbrev, unit, &fnc); + if(fnc != NULL) + { + if(unit->lastFunction == NULL) + unit->functions = fnc; + else + unit->lastFunction->next = fnc; + unit->lastFunction = fnc; + } + } + break; + case DW_TAG_lexical_block: + { + data = elfParseBlock(data, abbrev, unit, func, &lastVar); + } + break; + case DW_TAG_formal_parameter: + { + Object *o; + data = elfParseObject(data, abbrev, unit, &o); + if(func->parameters) + lastParam->next = o; + else + func->parameters = o; + lastParam = o; + } + break; + case DW_TAG_variable: + { + Object *o; + data = elfParseObject(data, abbrev, unit, &o); + if(func->variables) + lastVar->next = o; + else + func->variables = o; + lastVar = o; + } + break; + case DW_TAG_unspecified_parameters: + case DW_TAG_inlined_subroutine: + { + // todo + for(int i = 0; i < abbrev->numAttrs; i++) + { + data = elfReadAttribute(data, &abbrev->attrs[i]); + if(abbrev->attrs[i].form == DW_FORM_block1) + free(abbrev->attrs[i].block); + } + + if(abbrev->hasChildren) + nesting++; + } + break; + default: + { + fprintf(stderr, "Unknown function TAG %02x\n", abbrev->tag); + data = elfSkipData(data, abbrev, unit->abbrevs); + } + break; + } + } + } + return data; +} + +u8 *elfParseUnknownData(u8 *data, ELFAbbrev *abbrev, ELFAbbrev **abbrevs) +{ + int i; + int bytes; + // switch(abbrev->tag) { + // default: + fprintf(stderr, "Unknown TAG %02x\n", abbrev->tag); + + for(i = 0; i < abbrev->numAttrs; i++) + { + data = elfReadAttribute(data, &abbrev->attrs[i]); + if(abbrev->attrs[i].form == DW_FORM_block1) + free(abbrev->attrs[i].block); + } + + if(abbrev->hasChildren) + { + int nesting = 1; + while(nesting) + { + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + if(!abbrevNum) + { + nesting--; + continue; + } + + abbrev = elfGetAbbrev(abbrevs, abbrevNum); + + fprintf(stderr, "Unknown TAG %02x\n", abbrev->tag); + + for(i = 0; i < abbrev->numAttrs; i++) + { + data = elfReadAttribute(data, &abbrev->attrs[i]); + if(abbrev->attrs[i].form == DW_FORM_block1) + free(abbrev->attrs[i].block); + } + + if(abbrev->hasChildren) + { + nesting++; + } + } + } + // } + return data; +} + +u8 *elfParseCompileUnitChildren(u8 *data, CompileUnit *unit) +{ + int bytes; + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + Object *lastObj = NULL; + while(abbrevNum) + { + ELFAbbrev *abbrev = elfGetAbbrev(unit->abbrevs, abbrevNum); + switch(abbrev->tag) + { + case DW_TAG_subprogram: + { + Function *func = NULL; + data = elfParseFunction(data, abbrev, unit, &func); + if(func != NULL) + { + if(unit->lastFunction) + unit->lastFunction->next = func; + else + unit->functions = func; + unit->lastFunction = func; + } + } + break; +CASE_TYPE_TAG: + data = elfSkipData(data, abbrev, unit->abbrevs); + break; + case DW_TAG_variable: + { + Object *var = NULL; + data = elfParseObject(data, abbrev, unit, &var); + if(lastObj) + lastObj->next = var; + else + unit->variables = var; + lastObj = var; + } + break; + default: + data = elfParseUnknownData(data, abbrev, unit->abbrevs); + break; + } + + abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + } + return data; +} + + +CompileUnit *elfParseCompUnit(u8 *data, u8 *abbrevData) +{ + int bytes; + u8 *top = data; + + u32 length = elfRead4Bytes(data); + data += 4; + + u16 version = elfRead2Bytes(data); + data += 2; + + u32 offset = elfRead4Bytes(data); + data += 4; + + u8 addrSize = *data++; + + if(version != 2) + { + fprintf(stderr, "Unsupported debugging information version %d\n", version); + return NULL; + } + + if(addrSize != 4) + { + fprintf(stderr, "Unsupported address size %d\n", addrSize); + return NULL; + } + + ELFAbbrev **abbrevs = elfReadAbbrevs(abbrevData, offset); + + u32 abbrevNum = elfReadLEB128(data, &bytes); + data += bytes; + + ELFAbbrev *abbrev = elfGetAbbrev(abbrevs, abbrevNum); + + CompileUnit *unit = (CompileUnit *)calloc(sizeof(CompileUnit), 1); + unit->top = top; + unit->length = length; + unit->abbrevs = abbrevs; + unit->next = NULL; + + elfCurrentUnit = unit; + + int i; + + for(i = 0; i < abbrev->numAttrs; i++) + { + ELFAttr *attr = &abbrev->attrs[i]; + data = elfReadAttribute(data, attr); + + switch(attr->name) + { + case DW_AT_name: + unit->name = attr->string; + break; + case DW_AT_stmt_list: + unit->hasLineInfo = true; + unit->lineInfo = attr->value; + break; + case DW_AT_low_pc: + unit->lowPC = attr->value; + break; + case DW_AT_high_pc: + unit->highPC = attr->value; + break; + case DW_AT_compdir: + unit->compdir = attr->string; + break; + // ignore + case DW_AT_language: + case DW_AT_producer: + case DW_AT_macro_info: + case DW_AT_entry_pc: + break; + default: + fprintf(stderr, "Unknown attribute %02x\n", attr->name); + break; + } + } + + if(abbrev->hasChildren) + elfParseCompileUnitChildren(data, unit); + + return unit; +} + +void elfParseAranges(u8 *data) +{ + ELFSectionHeader *sh = elfGetSectionByName(".debug_aranges"); + if(sh == NULL) + { + fprintf(stderr, "No aranges found\n"); + return; + } + + data = elfReadSection(data, sh); + u8 *end = data + READ32LE(&sh->size); + + int max = 4; + ARanges *ranges = (ARanges *)calloc(sizeof(ARanges), 4); + + int index = 0; + + while(data < end) + { + u32 len = elfRead4Bytes(data); + data += 4; + // u16 version = elfRead2Bytes(data); + data += 2; + u32 offset = elfRead4Bytes(data); + data += 4; + // u8 addrSize = *data++; + // u8 segSize = *data++; + data += 2; // remove if uncommenting above + data += 4; + ranges[index].count = (len-20)/8; + ranges[index].offset = offset; + ranges[index].ranges = (ARange *)calloc(sizeof(ARange), (len-20)/8); + int i = 0; + while(true) + { + u32 addr = elfRead4Bytes(data); + data += 4; + u32 len = elfRead4Bytes(data); + data += 4; + if(addr == 0 && len == 0) + break; + ranges[index].ranges[i].lowPC = addr; + ranges[index].ranges[i].highPC = addr+len; + i++; + } + index++; + if(index == max) + { + max += 4; + ranges = (ARanges *)realloc(ranges, max*sizeof(ARanges)); + } + } + elfDebugInfo->numRanges = index; + elfDebugInfo->ranges = ranges; +} + +void elfReadSymtab(u8 *data) +{ + ELFSectionHeader *sh = elfGetSectionByName(".symtab"); + int table = READ32LE(&sh->link); + + char *strtable = (char *)elfReadSection(data, elfGetSectionByNumber(table)); + + ELFSymbol *symtab = (ELFSymbol *)elfReadSection(data, sh); + + int count = READ32LE(&sh->size) / sizeof(ELFSymbol); + elfSymbolsCount = 0; + + elfSymbols = (Symbol *)malloc(sizeof(Symbol)*count); + + int i; + + for(i = 0; i < count; i++) + { + ELFSymbol *s = &symtab[i]; + int type = s->info & 15; + int binding = s->info >> 4; + + if(binding) + { + Symbol *sym = &elfSymbols[elfSymbolsCount]; + sym->name = &strtable[READ32LE(&s->name)]; + sym->binding = binding; + sym->type = type; + sym->value = READ32LE(&s->value); + sym->size = READ32LE(&s->size); + elfSymbolsCount++; + } + } + for(i = 0; i < count; i++) + { + ELFSymbol *s = &symtab[i]; + int bind = s->info>>4; + int type = s->info & 15; + + if(!bind) + { + Symbol *sym = &elfSymbols[elfSymbolsCount]; + sym->name = &strtable[READ32LE(&s->name)]; + sym->binding = (s->info >> 4); + sym->type = type; + sym->value = READ32LE(&s->value); + sym->size = READ32LE(&s->size); + elfSymbolsCount++; + } + } + elfSymbolsStrTab = strtable; + // free(symtab); +} + +bool elfReadProgram(ELFHeader *eh, u8 *data, int& size, bool parseDebug) +{ + int count = READ16LE(&eh->e_phnum); + int i; + + if(READ32LE(&eh->e_entry) == 0x2000000) + cpuIsMultiBoot = true; + + // read program headers... should probably move this code down + u8 *p = data + READ32LE(&eh->e_phoff); + size = 0; + for(i = 0; i < count; i++) + { + ELFProgramHeader *ph = (ELFProgramHeader *)p; + p += sizeof(ELFProgramHeader); + if(READ16LE(&eh->e_phentsize) != sizeof(ELFProgramHeader)) + { + p += READ16LE(&eh->e_phentsize) - sizeof(ELFProgramHeader); + } + + // printf("PH %d %08x %08x %08x %08x %08x %08x %08x %08x\n", + // i, ph->type, ph->offset, ph->vaddr, ph->paddr, + // ph->filesz, ph->memsz, ph->flags, ph->align); + if(cpuIsMultiBoot) + { + if(READ32LE(&ph->paddr) >= 0x2000000 && + READ32LE(&ph->paddr) <= 0x203ffff) + { + memcpy(&workRAM[READ32LE(&ph->paddr) & 0x3ffff], + data + READ32LE(&ph->offset), + READ32LE(&ph->filesz)); + } + } + else + { + if(READ32LE(&ph->paddr) >= 0x8000000 && + READ32LE(&ph->paddr) <= 0x9ffffff) + { + memcpy(&rom[READ32LE(&ph->paddr) & 0x1ffffff], + data + READ32LE(&ph->offset), + READ32LE(&ph->filesz)); + size += READ32LE(&ph->filesz); + } + } + } + + char *stringTable = NULL; + + // read section headers + p = data + READ32LE(&eh->e_shoff); + count = READ16LE(&eh->e_shnum); + + ELFSectionHeader **sh = (ELFSectionHeader **) + malloc(sizeof(ELFSectionHeader *) * count); + + for(i = 0; i < count; i++) + { + sh[i] = (ELFSectionHeader *)p; + p += sizeof(ELFSectionHeader); + if(READ16LE(&eh->e_shentsize) != sizeof(ELFSectionHeader)) + p += READ16LE(&eh->e_shentsize) - sizeof(ELFSectionHeader); + } + + if(READ16LE(&eh->e_shstrndx) != 0) + { + stringTable = (char *)elfReadSection(data, + sh[READ16LE(&eh->e_shstrndx)]); + } + + elfSectionHeaders = sh; + elfSectionHeadersStringTable = stringTable; + elfSectionHeadersCount = count; + + for(i = 0; i < count; i++) + { + // printf("SH %d %-20s %08x %08x %08x %08x %08x %08x %08x %08x\n", + // i, &stringTable[sh[i]->name], sh[i]->name, sh[i]->type, + // sh[i]->flags, sh[i]->addr, sh[i]->offset, sh[i]->size, + // sh[i]->link, sh[i]->info); + if(READ32LE(&sh[i]->flags) & 2) + { // load section + if(cpuIsMultiBoot) + { + if(READ32LE(&sh[i]->addr) >= 0x2000000 && + READ32LE(&sh[i]->addr) <= 0x203ffff) + { + memcpy(&workRAM[READ32LE(&sh[i]->addr) & 0x3ffff], data + + READ32LE(&sh[i]->offset), + READ32LE(&sh[i]->size)); + } + } + else + { + if(READ32LE(&sh[i]->addr) >= 0x8000000 && + READ32LE(&sh[i]->addr) <= 0x9ffffff) + { + memcpy(&rom[READ32LE(&sh[i]->addr) & 0x1ffffff], + data + READ32LE(&sh[i]->offset), + READ32LE(&sh[i]->size)); + size += READ32LE(&sh[i]->size); + } + } + } + } + + if(parseDebug) + { + fprintf(stderr, "Parsing debug info\n"); + + ELFSectionHeader *dbgHeader = elfGetSectionByName(".debug_info"); + if(dbgHeader == NULL) + { + fprintf(stderr, "Cannot find debug information\n"); + goto end; + } + + ELFSectionHeader *h = elfGetSectionByName(".debug_abbrev"); + if(h == NULL) + { + fprintf(stderr, "Cannot find abbreviation table\n"); + goto end; + } + + elfDebugInfo = (DebugInfo *)calloc(sizeof(DebugInfo), 1); + u8 *abbrevdata = elfReadSection(data, h); + + h = elfGetSectionByName(".debug_str"); + + if(h == NULL) + elfDebugStrings = NULL; + else + elfDebugStrings = (char *)elfReadSection(data, h); + + u8 *debugdata = elfReadSection(data, dbgHeader); + + elfDebugInfo->debugdata = data; + elfDebugInfo->infodata = debugdata; + + u32 total = READ32LE(&dbgHeader->size); + u8 *end = debugdata + total; + u8 *ddata = debugdata; + + CompileUnit *last = NULL; + CompileUnit *unit = NULL; + + while(ddata < end) + { + unit = elfParseCompUnit(ddata, abbrevdata); + unit->offset = ddata-debugdata; + elfParseLineInfo(unit, data); + if(last == NULL) + elfCompileUnits = unit; + else + last->next = unit; + last = unit; + ddata += 4 + unit->length; + } + elfParseAranges(data); + CompileUnit *comp = elfCompileUnits; + while(comp) + { + ARanges *r = elfDebugInfo->ranges; + for(int i = 0; i < elfDebugInfo->numRanges; i++) + if(r[i].offset == comp->offset) + { + comp->ranges = &r[i]; + break; + } + comp = comp->next; + } + elfParseCFA(data); + elfReadSymtab(data); + } +end: + if(sh) + { + free(sh); + } + + elfSectionHeaders = NULL; + elfSectionHeadersStringTable = NULL; + elfSectionHeadersCount = 0; + + return true; +} + +extern bool parseDebug; + +bool elfRead(const char *name, int& siz, FILE* f) +{ + + fseek(f, 0, SEEK_END); + long size = ftell(f); + + elfFileData = (u8 *)malloc(size); + gen_fseek(f, 0, SEEK_SET); + gen_fread(elfFileData, 1, size, f); + gen_fclose(f); + + ELFHeader *header = (ELFHeader *)elfFileData; + + if(READ32LE(&header->magic) != 0x464C457F || + READ16LE(&header->e_machine) != 40 || + header->clazz != 1) + { + systemMessage(0, N_("Not a valid ELF file %s"), name); + free(elfFileData); + elfFileData = NULL; + return false; + } + + if(!elfReadProgram(header, elfFileData, siz, parseDebug)) + { + free(elfFileData); + elfFileData = NULL; + return false; + } + + return true; +} + +void elfCleanUp(Object *o) +{ + free(o->location); +} + +void elfCleanUp(Function *func) +{ + Object *o = func->parameters; + while(o) + { + elfCleanUp(o); + Object *next = o->next; + free(o); + o = next; + } + + o = func->variables; + while(o) + { + elfCleanUp(o); + Object *next = o->next; + free(o); + o = next; + } + free(func->frameBase); +} + +void elfCleanUp(ELFAbbrev **abbrevs) +{ + for(int i = 0; i < 121; i++) + { + ELFAbbrev *abbrev = abbrevs[i]; + + while(abbrev) + { + free(abbrev->attrs); + ELFAbbrev *next = abbrev->next; + free(abbrev); + + abbrev = next; + } + } +} + +void elfCleanUp(Type *t) +{ + switch(t->type) + { + case TYPE_function: + if(t->function) + { + Object *o = t->function->args; + while(o) + { + elfCleanUp(o); + Object *next = o->next; + free(o); + o = next; + } + free(t->function); + } + break; + case TYPE_array: + if(t->array) + { + free(t->array->bounds); + free(t->array); + } + break; + case TYPE_struct: + case TYPE_union: + if(t->structure) + { + for(int i = 0; i < t->structure->memberCount; i++) + { + free(t->structure->members[i].location); + } + free(t->structure->members); + free(t->structure); + } + break; + case TYPE_enum: + if(t->enumeration) + { + free(t->enumeration->members); + free(t->enumeration); + } + break; + case TYPE_base: + case TYPE_pointer: + case TYPE_void: + case TYPE_reference: + break; // nothing to do + } +} + +void elfCleanUp(CompileUnit *comp) +{ + elfCleanUp(comp->abbrevs); + free(comp->abbrevs); + Function *func = comp->functions; + while(func) + { + elfCleanUp(func); + Function *next = func->next; + free(func); + func = next; + } + Type *t = comp->types; + while(t) + { + elfCleanUp(t); + Type *next = t->next; + free(t); + t = next; + } + Object *o = comp->variables; + while(o) + { + elfCleanUp(o); + Object *next = o->next; + free(o); + o = next; + } + if(comp->lineInfoTable) + { + free(comp->lineInfoTable->lines); + free(comp->lineInfoTable->files); + free(comp->lineInfoTable); + } +} + +void elfCleanUp() +{ + CompileUnit *comp = elfCompileUnits; + + while(comp) + { + elfCleanUp(comp); + CompileUnit *next = comp->next; + free(comp); + comp = next; + } + elfCompileUnits = NULL; + free(elfSymbols); + elfSymbols = NULL; + // free(elfSymbolsStrTab); + elfSymbolsStrTab = NULL; + + elfDebugStrings = NULL; + if(elfDebugInfo) + { + int num = elfDebugInfo->numRanges; + int i; + for(i = 0; i < num; i++) + { + free(elfDebugInfo->ranges[i].ranges); + } + free(elfDebugInfo->ranges); + free(elfDebugInfo); + elfDebugInfo = NULL; + } + + if(elfFdes) + { + if(elfFdeCount) + { + for(int i = 0; i < elfFdeCount; i++) + free(elfFdes[i]); + } + free(elfFdes); + + elfFdes = NULL; + elfFdeCount = 0; + } + + ELFcie *cie = elfCies; + while(cie) + { + ELFcie *next = cie->next; + free(cie); + cie = next; + } + elfCies = NULL; + + if(elfFileData) + { + free(elfFileData); + elfFileData = NULL; + } +} diff --git a/source/vba/elf.h b/source/vba/elf.h index 8f8898a3..b2e070aa 100644 --- a/source/vba/elf.h +++ b/source/vba/elf.h @@ -1,283 +1,311 @@ -// -*- C++ -*- -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef VBA_ELF_H -#define VBA_ELF_H - -enum LocationType { - LOCATION_register, - LOCATION_memory, - LOCATION_value -}; - -#define DW_ATE_boolean 0x02 -#define DW_ATE_signed 0x05 -#define DW_ATE_unsigned 0x07 -#define DW_ATE_unsigned_char 0x08 - -struct ELFHeader { - u32 magic; - u8 clazz; - u8 data; - u8 version; - u8 pad[9]; - u16 e_type; - u16 e_machine; - u32 e_version; - u32 e_entry; - u32 e_phoff; - u32 e_shoff; - u32 e_flags; - u16 e_ehsize; - u16 e_phentsize; - u16 e_phnum; - u16 e_shentsize; - u16 e_shnum; - u16 e_shstrndx; -}; - -struct ELFProgramHeader { - u32 type; - u32 offset; - u32 vaddr; - u32 paddr; - u32 filesz; - u32 memsz; - u32 flags; - u32 align; -}; - -struct ELFSectionHeader { - u32 name; - u32 type; - u32 flags; - u32 addr; - u32 offset; - u32 size; - u32 link; - u32 info; - u32 addralign; - u32 entsize; -}; - -struct ELFSymbol { - u32 name; - u32 value; - u32 size; - u8 info; - u8 other; - u16 shndx; -}; - -struct ELFBlock { - int length; - u8 *data; -}; - -struct ELFAttr { - u32 name; - u32 form; - union { - u32 value; - char *string; - u8 *data; - bool flag; - ELFBlock *block; - }; -}; - -struct ELFAbbrev { - u32 number; - u32 tag; - bool hasChildren; - int numAttrs; - ELFAttr *attrs; - ELFAbbrev *next; -}; - -enum TypeEnum { - TYPE_base, - TYPE_pointer, - TYPE_function, - TYPE_void, - TYPE_array, - TYPE_struct, - TYPE_reference, - TYPE_enum, - TYPE_union -}; - -struct Type; -struct Object; - -struct FunctionType { - Type *returnType; - Object *args; -}; - -struct Member { - char *name; - Type *type; - int bitSize; - int bitOffset; - int byteSize; - ELFBlock *location; -}; - -struct Struct { - int memberCount; - Member *members; -}; - -struct Array { - Type *type; - int maxBounds; - int *bounds; -}; - -struct EnumMember { - char *name; - u32 value; -}; - -struct Enum { - int count; - EnumMember *members; -}; - -struct Type { - u32 offset; - TypeEnum type; - const char *name; - int encoding; - int size; - int bitSize; - union { - Type *pointer; - FunctionType *function; - Array *array; - Struct *structure; - Enum *enumeration; - }; - Type *next; -}; - -struct Object { - char *name; - int file; - int line; - bool external; - Type *type; - ELFBlock *location; - u32 startScope; - u32 endScope; - Object *next; -}; - -struct Function { - char *name; - u32 lowPC; - u32 highPC; - int file; - int line; - bool external; - Type *returnType; - Object *parameters; - Object *variables; - ELFBlock *frameBase; - Function *next; -}; - -struct LineInfoItem { - u32 address; - char *file; - int line; -}; - -struct LineInfo { - int fileCount; - char **files; - int number; - LineInfoItem *lines; -}; - -struct ARange { - u32 lowPC; - u32 highPC; -}; - -struct ARanges { - u32 offset; - int count; - ARange *ranges; -}; - -struct CompileUnit { - u32 length; - u8 *top; - u32 offset; - ELFAbbrev **abbrevs; - ARanges *ranges; - char *name; - char *compdir; - u32 lowPC; - u32 highPC; - bool hasLineInfo; - u32 lineInfo; - LineInfo *lineInfoTable; - Function *functions; - Function *lastFunction; - Object *variables; - Type *types; - CompileUnit *next; -}; - -struct DebugInfo { - u8 *debugfile; - u8 *abbrevdata; - u8 *debugdata; - u8 *infodata; - int numRanges; - ARanges *ranges; -}; - -struct Symbol { - const char *name; - int type; - int binding; - u32 address; - u32 value; - u32 size; -}; - -extern u32 elfReadLEB128(u8 *, int *); -extern s32 elfReadSignedLEB128(u8 *, int *); -extern bool elfRead(const char *, int &, FILE *f); -extern bool elfGetSymbolAddress(const char *,u32 *, u32 *, int *); -extern const char *elfGetAddressSymbol(u32); -extern const char *elfGetSymbol(int, u32 *, u32 *, int *); -extern void elfCleanUp(); -extern bool elfGetCurrentFunction(u32, Function **, CompileUnit **c); -extern bool elfGetObject(const char *, Function *, CompileUnit *, Object **); -extern bool elfFindLineInUnit(u32 *, CompileUnit *, int); -extern bool elfFindLineInModule(u32 *, const char *, int); -u32 elfDecodeLocation(Function *, ELFBlock *, LocationType *); -u32 elfDecodeLocation(Function *, ELFBlock *, LocationType *, u32); -int elfFindLine(CompileUnit *unit, Function *func, u32 addr, const char **); -#endif +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef VBA_ELF_H +#define VBA_ELF_H +#include +#include +#include +#include +#include + +enum LocationType { + LOCATION_register, + LOCATION_memory, + LOCATION_value +}; + +#define DW_ATE_boolean 0x02 +#define DW_ATE_signed 0x05 +#define DW_ATE_unsigned 0x07 +#define DW_ATE_unsigned_char 0x08 + +struct ELFHeader + { + u32 magic; + u8 clazz; + u8 data; + u8 version; + u8 pad[9]; + u16 e_type; + u16 e_machine; + u32 e_version; + u32 e_entry; + u32 e_phoff; + u32 e_shoff; + u32 e_flags; + u16 e_ehsize; + u16 e_phentsize; + u16 e_phnum; + u16 e_shentsize; + u16 e_shnum; + u16 e_shstrndx; + }; + +struct ELFProgramHeader + { + u32 type; + u32 offset; + u32 vaddr; + u32 paddr; + u32 filesz; + u32 memsz; + u32 flags; + u32 align; + }; + +struct ELFSectionHeader + { + u32 name; + u32 type; + u32 flags; + u32 addr; + u32 offset; + u32 size; + u32 link; + u32 info; + u32 addralign; + u32 entsize; + }; + +struct ELFSymbol + { + u32 name; + u32 value; + u32 size; + u8 info; + u8 other; + u16 shndx; + }; + +struct ELFBlock + { + int length; + u8 *data; + }; + +struct ELFAttr + { + u32 name; + u32 form; + union { + u32 value; + char *string; + u8 *data; + bool flag; + ELFBlock *block; + }; + }; + +struct ELFAbbrev + { + u32 number; + u32 tag; + bool hasChildren; + int numAttrs; + ELFAttr *attrs; + ELFAbbrev *next; + }; + +enum TypeEnum { + TYPE_base, + TYPE_pointer, + TYPE_function, + TYPE_void, + TYPE_array, + TYPE_struct, + TYPE_reference, + TYPE_enum, + TYPE_union +}; + +struct Type; +struct Object; + +struct FunctionType + { + Type *returnType; + Object *args; + }; + +struct Member + { + char *name; + Type *type; + int bitSize; + int bitOffset; + int byteSize; + ELFBlock *location; + }; + +struct Struct + { + int memberCount; + Member *members; + }; + +struct Array + { + Type *type; + int maxBounds; + int *bounds; + }; + +struct EnumMember + { + char *name; + u32 value; + }; + +struct Enum + { + int count; + EnumMember *members; + }; + +struct Type + { + u32 offset; + TypeEnum type; + char *name; + int encoding; + int size; + int bitSize; + union { + Type *pointer; + FunctionType *function; + Array *array; + Struct *structure; + Enum *enumeration; + }; + Type *next; + }; + +struct Object + { + char *name; + int file; + int line; + bool external; + Type *type; + ELFBlock *location; + u32 startScope; + u32 endScope; + Object *next; + }; + +struct Function + { + char *name; + u32 lowPC; + u32 highPC; + int file; + int line; + bool external; + Type *returnType; + Object *parameters; + Object *variables; + ELFBlock *frameBase; + Function *next; + }; + +struct LineInfoItem + { + u32 address; + char *file; + int line; + }; + +struct LineInfo + { + int fileCount; + char **files; + int number; + LineInfoItem *lines; + }; + +struct ARange + { + u32 lowPC; + u32 highPC; + }; + +struct ARanges + { + u32 offset; + int count; + ARange *ranges; + }; + +struct CompileUnit + { + u32 length; + u8 *top; + u32 offset; + ELFAbbrev **abbrevs; + ARanges *ranges; + char *name; + char *compdir; + u32 lowPC; + u32 highPC; + bool hasLineInfo; + u32 lineInfo; + LineInfo *lineInfoTable; + Function *functions; + Function *lastFunction; + Object *variables; + Type *types; + CompileUnit *next; + }; + +struct DebugInfo + { + u8 *debugfile; + u8 *abbrevdata; + u8 *debugdata; + u8 *infodata; + int numRanges; + ARanges *ranges; + }; + +struct Symbol + { + char *name; + int type; + int binding; + u32 address; + u32 value; + u32 size; + }; + +extern u32 elfReadLEB128(u8 *, int *); +extern s32 elfReadSignedLEB128(u8 *, int *); +extern bool elfRead(const char *, int &, FILE* f); +extern bool elfGetSymbolAddress(char *,u32 *, u32 *, int *); +extern char *elfGetAddressSymbol(u32); +extern char *elfGetSymbol(int, u32 *, u32 *, int *); +extern void elfCleanUp(); +extern bool elfGetCurrentFunction(u32, Function **, CompileUnit **c); +extern bool elfGetObject(char *, Function *, CompileUnit *, Object **); +extern bool elfFindLineInUnit(u32 *, CompileUnit *, int); +extern bool elfFindLineInModule(u32 *, char *, int); +u32 elfDecodeLocation(Function *, ELFBlock *, LocationType *); +u32 elfDecodeLocation(Function *, ELFBlock *, LocationType *, u32); +int elfFindLine(CompileUnit *unit, Function *func, u32 addr, char **); +#endif diff --git a/source/vba/exprNode.h b/source/vba/exprNode.h new file mode 100644 index 00000000..f32614d5 --- /dev/null +++ b/source/vba/exprNode.h @@ -0,0 +1,69 @@ +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +struct Node + { + Type *type; + u32 location; + u32 objLocation; + LocationType locType; + int value; + int index; + char *name; + Node *expression; + Member *member; + void (*print)(Node *); + bool (*resolve)(Node *, Function *f, CompileUnit *u); + }; + +extern void exprNodeCleanUp(); + +extern Node *exprNodeIdentifier(); +extern void exprNodeIdentifierPrint(Node *); +extern bool exprNodeIdentifierResolve(Node *, Function *, CompileUnit *); + +extern Node *exprNodeNumber(); +extern void exprNodeNumberPrint(Node *); +extern bool exprNodeNumberResolve(Node *, Function *, CompileUnit *); + +extern Node *exprNodeStar(Node *); +extern void exprNodeStarPrint(Node *); +extern bool exprNodeStarResolve(Node *, Function *, CompileUnit *); + +extern Node *exprNodeDot(Node *, Node *); +extern void exprNodeDotPrint(Node *); +extern bool exprNodeDotResolve(Node *, Function *, CompileUnit *); + +extern Node *exprNodeArrow(Node *, Node *); +extern void exprNodeArrowPrint(Node *); +extern bool exprNodeArrowResolve(Node *, Function *, CompileUnit *); + +extern Node *exprNodeAddr(Node *); +extern void exprNodeAddrPrint(Node *); +extern bool exprNodeAddrResolve(Node *, Function *, CompileUnit *); + +extern Node *exprNodeSizeof(Node *); +extern void exprNodeSizeofPrint(Node *); +extern bool exprNodeSizeofResolve(Node *, Function *, CompileUnit *); + +extern Node *exprNodeArray(Node *, Node *); +extern void exprNodeArrayPrint(Node *); +extern bool exprNodeArrayResolve(Node *, Function *, CompileUnit *); + +#define YYSTYPE struct Node * diff --git a/source/vba/dmg/GB.cpp b/source/vba/gb/GB.cpp similarity index 92% rename from source/vba/dmg/GB.cpp rename to source/vba/gb/GB.cpp index d3f66821..c655b5cf 100644 --- a/source/vba/dmg/GB.cpp +++ b/source/vba/gb/GB.cpp @@ -16,6 +16,7 @@ // along with this program; if not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +#include "sdfileio.h" #include #include #include @@ -1776,7 +1777,7 @@ void gbReset() void gbWriteSaveMBC1(const char * name) { - FILE* gzFile = fopen(name,"wb"); + FILE* gzFile = gen_fopen(name,"wb"); if(gzFile == NULL) { @@ -1784,17 +1785,17 @@ void gbWriteSaveMBC1(const char * name) return; } - fwrite(gbRam, + gen_fwrite(gbRam, 1, gbRamSize, gzFile); - fclose(gzFile); + gen_fclose(gzFile); } void gbWriteSaveMBC2(const char * name) { - FILE* file = fopen(name, "wb"); + FILE* file = gen_fopen(name, "wb"); if(file == NULL) { @@ -1802,17 +1803,17 @@ void gbWriteSaveMBC2(const char * name) return; } - fwrite(&gbMemory[0xa000], + gen_fwrite(&gbMemory[0xa000], 1, 256, file); - fclose(file); + gen_fclose(file); } void gbWriteSaveMBC3(const char * name, bool extendedSave) { - FILE* gzFile = fopen(name,"wb"); + FILE* gzFile = gen_fopen(name,"wb"); if(gzFile == NULL) { @@ -1820,23 +1821,23 @@ void gbWriteSaveMBC3(const char * name, bool extendedSave) return; } - fwrite(gbRam, + gen_fwrite(gbRam, 1, gbRamSize, gzFile); if(extendedSave) - fwrite(&gbDataMBC3.mapperSeconds, + gen_fwrite(&gbDataMBC3.mapperSeconds, 1, 10*sizeof(int) + sizeof(time_t), gzFile); - fclose(gzFile); + gen_fclose(gzFile); } void gbWriteSaveMBC5(const char * name) { - FILE* gzFile = fopen(name,"wb"); + FILE* gzFile = gen_fopen(name,"wb"); if(gzFile == NULL) { @@ -1844,17 +1845,17 @@ void gbWriteSaveMBC5(const char * name) return; } - fwrite(gbRam, + gen_fwrite(gbRam, 1, gbRamSize, gzFile); - fclose(gzFile); + gen_fclose(gzFile); } void gbWriteSaveMBC7(const char * name) { - FILE* file = fopen(name, "wb"); + FILE* file = gen_fopen(name, "wb"); if(file == NULL) { @@ -1862,12 +1863,12 @@ void gbWriteSaveMBC7(const char * name) return; } - fwrite(&gbMemory[0xa000], + gen_fwrite(&gbMemory[0xa000], 1, 256, file); - fclose(file); + gen_fclose(file); } bool gbReadSaveMBC1(const char * name) @@ -1896,14 +1897,14 @@ bool gbReadSaveMBC1(const char * name) bool gbReadSaveMBC2(const char * name) { - FILE* file = fopen(name, "rb"); + FILE* file = gen_fopen(name, "rb"); if(file == NULL) { return false; } - int read = fread(&gbMemory[0xa000], + int read = gen_fread(&gbMemory[0xa000], 1, 256, file); @@ -1912,11 +1913,11 @@ bool gbReadSaveMBC2(const char * name) { systemMessage(MSG_FAILED_TO_READ_SGM, N_("Failed to read complete save game %s (%d)"), name, read); - fclose(file); + gen_fclose(file); return false; } - fclose(file); + gen_fclose(file); return true; } @@ -1986,14 +1987,14 @@ bool gbReadSaveMBC5(const char * name) bool gbReadSaveMBC7(const char * name) { - FILE* file = fopen(name, "rb"); + FILE* file = gen_fopen(name, "rb"); if(file == NULL) { return false; } - int read = fread(&gbMemory[0xa000], + int read = gen_fread(&gbMemory[0xa000], 1, 256, file); @@ -2002,11 +2003,11 @@ bool gbReadSaveMBC7(const char * name) { systemMessage(MSG_FAILED_TO_READ_SGM, N_("Failed to read complete save game %s (%d)"), name, read); - fclose(file); + gen_fclose(file); return false; } - fclose(file); + gen_fclose(file); return true; } @@ -2114,7 +2115,7 @@ bool gbReadBatteryFile(const char *file) bool gbReadGSASnapshot(const char *fileName) { - FILE* file = fopen(fileName, "rb"); + FILE* file = gen_fopen(fileName, "rb"); if(!file) { @@ -2123,10 +2124,10 @@ bool gbReadGSASnapshot(const char *fileName) } // long size = ftell(file); - fseek(file, 0x4, SEEK_SET); + gen_fseek(file, 0x4, SEEK_SET); char buffer[16]; char buffer2[16]; - fread(buffer, 1, 15, file); + gen_fread(buffer, 1, 15, file); buffer[15] = 0; memcpy(buffer2, &gbRom[0x134], 15); buffer2[15] = 0; @@ -2136,10 +2137,10 @@ bool gbReadGSASnapshot(const char *fileName) N_("Cannot import snapshot for %s. Current game is %s"), buffer, buffer2); - fclose(file); + gen_fclose(file); return false; } - fseek(file, 0x13, SEEK_SET); + gen_fseek(file, 0x13, SEEK_SET); int read = 0; int toRead = 0; switch(gbRom[0x147]) @@ -2151,22 +2152,22 @@ bool gbReadGSASnapshot(const char *fileName) case 0x1b: case 0x1e: case 0xff: - read = fread(gbRam, 1, gbRamSize, file); + read = gen_fread(gbRam, 1, gbRamSize, file); toRead = gbRamSize; break; case 0x06: case 0x22: - read = fread(&gbMemory[0xa000],1,256,file); + read = gen_fread(&gbMemory[0xa000],1,256,file); toRead = 256; break; default: systemMessage(MSG_UNSUPPORTED_SNAPSHOT_FILE, N_("Unsupported snapshot file %s"), fileName); - fclose(file); + gen_fclose(file); return false; } - fclose(file); + gen_fclose(file); gbReset(); return true; } @@ -2302,8 +2303,6 @@ static bool gbWriteSaveState(gzFile gzFile) return true; } -extern void SetFileBytesWritten(int bytes); // Tantric - Wii/GameCube addition - store # bytes written - bool gbWriteMemSaveState(char *memory, int available) { gzFile gzFile = utilMemGzOpen(memory, available, "w"); @@ -2320,8 +2319,6 @@ bool gbWriteMemSaveState(char *memory, int available) if(pos >= (available)) res = false; - SetFileBytesWritten((int)pos); // Tantric - Wii/GameCube addition - store # bytes written - utilGzClose(gzFile); return res; @@ -2551,11 +2548,9 @@ bool gbReadSaveState(const char *name) bool gbWritePNGFile(const char *fileName) { - // if(gbBorderOn) - // return utilWritePNGFile(fileName, 256, 224, pix); -// return utilWritePNGFile(fileName, 160, 144, pix); - -return false; + if(gbBorderOn) + return utilWritePNGFile(fileName, 256, 224, pix); + return utilWritePNGFile(fileName, 160, 144, pix); } bool gbWriteBMPFile(const char *fileName) @@ -3472,320 +3467,3 @@ struct EmulatedSystem GBSystem = 1000, #endif }; - -/**************************************************************************** - * Nintendo Wii/Gamecube Port Additions - * - * Duplicate versions of save functions above, using memory - * I want to kill whoever wrote so many stupid functions, and did so without - * doing it memory-based - * Tantric - October 2008 - ***************************************************************************/ - -int MemgbWriteSaveMBC1(char * membuffer) { - if (gbRam) { - memcpy(membuffer, gbRam, (gbRamSizeMask + 1)); - return (gbRamSizeMask + 1); - } - return 0; -} - -int MemgbWriteSaveMBC2(char * membuffer) { - if (gbRam) { - memcpy(membuffer, &gbMemory[0xa000], 256); - return 256; - } - return 0; -} - -int MemgbWriteSaveMBC3(char * membuffer, bool extendedSave) { - int offset = 0; - if (gbRam || extendedSave) { - if (gbRam) { - memcpy(membuffer, gbRam, (gbRamSizeMask + 1)); - offset += (gbRamSizeMask + 1); - } - - if (extendedSave) - { - memcpy(membuffer+offset, &gbDataMBC3.mapperSeconds, (10 * sizeof(int) - + sizeof(time_t))); - offset += (10 * sizeof(int) + sizeof(time_t)); - } - } - return offset; -} - -int MemgbWriteSaveMBC5(char * membuffer) { - if (gbRam) { - memcpy(membuffer, gbRam, (gbRamSizeMask + 1)); - return (gbRamSizeMask + 1); - } - return 0; -} - -int MemgbWriteSaveMBC7(char * membuffer) { - if (gbRam) { - memcpy(membuffer, &gbMemory[0xa000], 256); - return 256; - } - return 0; -} - -int MemgbWriteSaveTAMA5(char * membuffer, bool extendedSave) { - int offset = 0; - -/* if (gbRam) - { - memcpy(membuffer, gbRam, (gbRamSizeMask + 1)); - offset += (gbRamSizeMask + 1); - } - - memcpy(membuffer+offset, gbTAMA5ram, (gbTAMA5ramSize)); - offset += (gbTAMA5ramSize); - - if (extendedSave) - { - memcpy(membuffer+offset, &gbDataTAMA5.mapperSeconds, (14 * sizeof(int) + sizeof(time_t))); - offset += (14 * sizeof(int) + sizeof(time_t)); - }*/ - return offset; -} - -int MemgbWriteSaveMMM01(char * membuffer) { - if (gbRam) { - memcpy(membuffer, gbRam, (gbRamSizeMask + 1)); - return (gbRamSizeMask + 1); - } - return 0; -} - -bool MemgbReadSaveMBC1(char * membuffer, int read) { - if (gbRam) - { - if (read != (gbRamSizeMask + 1)) - return false; - else - memcpy(gbRam, membuffer, read); - return true; - } - return false; -} - -bool MemgbReadSaveMBC2(char * membuffer, int read) { - if (gbRam) - { - if (read != 256) - return false; - else - memcpy(&gbMemory[0xa000], membuffer, read); - return true; - } - return false; -} - -bool MemgbReadSaveMBC3(char * membuffer, int read) { - int offset = 0; - - if (gbRam) - { - if(read < (gbRamSizeMask + 1)) - return false; - memcpy(gbRam, membuffer, (gbRamSizeMask + 1)); - offset += (gbRamSizeMask + 1); - } - - int gbRomType = gbRom[0x147]; - - if ((gbRomType == 0xf) || (gbRomType == 0x10)) - { - if((uint)read < (offset + sizeof(int) * 10 + sizeof(time_t))) - return false; - memcpy(&gbDataMBC3.mapperSeconds, membuffer+offset, sizeof(int) * 10 + sizeof(time_t)); - } - return true; -} - -bool MemgbReadSaveMBC5(char * membuffer, int read) { - if (gbRam) - { - if (read != (gbRamSizeMask + 1)) - return false; - else - memcpy(gbRam, membuffer, read); - return true; - } - return false; -} - -bool MemgbReadSaveMBC7(char * membuffer, int read) { - if (gbRam) - { - if (read != 256) - return false; - else - memcpy(&gbMemory[0xa000], membuffer, read); - return true; - } - return false; -} - -bool MemgbReadSaveTAMA5(char * membuffer, int read) { -/* if (gbRam) - { - if (gbRamSizeMask + gbTAMA5ramSize + 1) - return false; - - memcpy(gbRam, membuffer, (gbRamSizeMask + 1)); - int offset = (gbRamSizeMask + 1); - memcpy(&gbDataTAMA5.mapperSeconds, membuffer+offset, sizeof(int) * 14 + sizeof(time_t)); - return true; - }*/ - return false; -} - -bool MemgbReadSaveMMM01(char * membuffer, int read) { - if (gbRam) - { - if (read != (gbRamSizeMask + 1)) - return false; - else - memcpy(gbRam, membuffer, read); - return true; - } - return false; -} - -int MemgbWriteBatteryFile(char * membuffer) -{ - int result = 0; - if(gbBattery) - { - int type = gbRom[0x147]; - bool extendedSave = true; - - switch(type) - { - case 0x03: - result = MemgbWriteSaveMBC1(membuffer); - break; - case 0x06: - result = MemgbWriteSaveMBC2(membuffer); - break; - case 0x0d: - result = MemgbWriteSaveMMM01(membuffer); - break; - case 0x0f: - case 0x10: - result = MemgbWriteSaveMBC3(membuffer, extendedSave); - break; - case 0x13: - case 0xfc: - result = MemgbWriteSaveMBC3(membuffer, false); - case 0x1b: - case 0x1e: - result = MemgbWriteSaveMBC5(membuffer); - break; - case 0x22: - result = MemgbWriteSaveMBC7(membuffer); - break; - case 0xfd: - result = MemgbWriteSaveTAMA5(membuffer, extendedSave); - break; - case 0xff: - result = MemgbWriteSaveMBC1(membuffer); - break; - } - } - return result; -} - -bool MemgbReadBatteryFile(char * membuffer, int read) -{ - bool res = false; - if (gbBattery) { - int type = gbRom[0x147]; - switch (type) { - case 0x03: - res = MemgbReadSaveMBC1(membuffer, read); - break; - case 0x06: - res = MemgbReadSaveMBC2(membuffer, read); - break; - case 0x0d: - res = MemgbReadSaveMMM01(membuffer, read); - break; - case 0x0f: - case 0x10: - res = MemgbReadSaveMBC3(membuffer, read); - if (!res) { - time(&gbDataMBC3.mapperLastTime); - struct tm *lt; - lt = localtime(&gbDataMBC3.mapperLastTime); - gbDataMBC3.mapperSeconds = lt->tm_sec; - gbDataMBC3.mapperMinutes = lt->tm_min; - gbDataMBC3.mapperHours = lt->tm_hour; - gbDataMBC3.mapperDays = lt->tm_yday & 255; - gbDataMBC3.mapperControl = (gbDataMBC3.mapperControl & 0xfe) - | (lt->tm_yday > 255 ? 1 : 0); - res = 0; - break; - } - break; - case 0x13: - case 0xfc: - res = MemgbReadSaveMBC3(membuffer, read); - break; - case 0x1b: - case 0x1e: - res = MemgbReadSaveMBC5(membuffer, read); - break; - case 0x22: - res = MemgbReadSaveMBC7(membuffer, read); - break; - case 0xfd: -/* res = MemgbReadSaveTAMA5(membuffer, read); - if (!res) { - u8 gbDaysinMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, - 31, 30, 31 }; - time(&gbDataTAMA5.mapperLastTime); - struct tm *lt; - lt = localtime(&gbDataTAMA5.mapperLastTime); - gbDataTAMA5.mapperSeconds = lt->tm_sec; - gbDataTAMA5.mapperMinutes = lt->tm_min; - gbDataTAMA5.mapperHours = lt->tm_hour; - gbDataTAMA5.mapperDays = 1; - gbDataTAMA5.mapperMonths = 1; - gbDataTAMA5.mapperYears = 1970; - int days = lt->tm_yday + 365 * 3; - while (days) { - gbDataTAMA5.mapperDays++; - days--; - if (gbDataTAMA5.mapperDays - > gbDaysinMonth[gbDataTAMA5.mapperMonths - 1]) { - gbDataTAMA5.mapperDays = 1; - gbDataTAMA5.mapperMonths++; - if (gbDataTAMA5.mapperMonths > 12) { - gbDataTAMA5.mapperMonths = 1; - gbDataTAMA5.mapperYears++; - if ((gbDataTAMA5.mapperYears & 3) == 0) - gbDaysinMonth[1] = 29; - else - gbDaysinMonth[1] = 28; - } - } - } - gbDataTAMA5.mapperControl = (gbDataTAMA5.mapperControl & 0xfe) - | (lt->tm_yday > 255 ? 1 : 0); - res = false; - break; - }*/ - break; - case 0xff: - res = MemgbReadSaveMBC1(membuffer, read); - break; - } - } - systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; - return res; -} diff --git a/source/vba/dmg/GB.h b/source/vba/gb/GB.h similarity index 94% rename from source/vba/dmg/GB.h rename to source/vba/gb/GB.h index e20a3468..92e7e08d 100644 --- a/source/vba/dmg/GB.h +++ b/source/vba/gb/GB.h @@ -59,7 +59,4 @@ extern bool gbReadGSASnapshot(const char *); extern struct EmulatedSystem GBSystem; -bool MemgbReadBatteryFile(char * membuffer, int read); -int MemgbWriteBatteryFile(char * membuffer); - #endif diff --git a/source/vba/dmg/gbCheats.cpp b/source/vba/gb/gbCheats.cpp similarity index 91% rename from source/vba/dmg/gbCheats.cpp rename to source/vba/gb/gbCheats.cpp index 158ca03e..c8d5a3dc 100644 --- a/source/vba/dmg/gbCheats.cpp +++ b/source/vba/gb/gbCheats.cpp @@ -16,6 +16,7 @@ // along with this program; if not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +#include "sdfileio.h" #include #include #include @@ -102,16 +103,16 @@ void gbCheatsSaveCheatList(const char *file) { if(gbCheatNumber == 0) return; - FILE* f = fopen(file, "wb"); + FILE* f = gen_fopen(file, "wb"); if(f == NULL) return; int version = 1; - fwrite(&version, 1, sizeof(version), f); + gen_fwrite(&version, 1, sizeof(version), f); int type = 1; - fwrite(&type, 1, sizeof(type), f); - fwrite(&gbCheatNumber, 1, sizeof(gbCheatNumber), f); - fwrite(gbCheatList, 1, sizeof(gbCheatList), f); - fclose(f); + gen_fwrite(&type, 1, sizeof(type), f); + gen_fwrite(&gbCheatNumber, 1, sizeof(gbCheatNumber), f); + gen_fwrite(gbCheatList, 1, sizeof(gbCheatList), f); + gen_fclose(f); } bool gbCheatsLoadCheatList(const char *file) @@ -122,16 +123,16 @@ bool gbCheatsLoadCheatList(const char *file) int count = 0; - FILE* f = fopen(file, "rb"); + FILE* f = gen_fopen(file, "rb"); if(f == NULL) return false; int version = 0; - if(fread(&version, 1, sizeof(version), f) != sizeof(version)) + if(gen_fread(&version, 1, sizeof(version), f) != sizeof(version)) { - fclose(f); + gen_fclose(f); return false; } @@ -139,14 +140,14 @@ bool gbCheatsLoadCheatList(const char *file) { systemMessage(MSG_UNSUPPORTED_CHEAT_LIST_VERSION, N_("Unsupported cheat list version %d"), version); - fclose(f); + gen_fclose(f); return false; } int type = 0; - if(fread(&type, 1, sizeof(type), f) != sizeof(type)) + if(gen_fread(&type, 1, sizeof(type), f) != sizeof(type)) { - fclose(f); + gen_fclose(f); return false; } @@ -154,19 +155,19 @@ bool gbCheatsLoadCheatList(const char *file) { systemMessage(MSG_UNSUPPORTED_CHEAT_LIST_TYPE, N_("Unsupported cheat list type %d"), type); - fclose(f); + gen_fclose(f); return false; } - if(fread(&count, 1, sizeof(count), f) != sizeof(count)) + if(gen_fread(&count, 1, sizeof(count), f) != sizeof(count)) { - fclose(f); + gen_fclose(f); return false; } - if(fread(gbCheatList, 1, sizeof(gbCheatList), f) != sizeof(gbCheatList)) + if(gen_fread(gbCheatList, 1, sizeof(gbCheatList), f) != sizeof(gbCheatList)) { - fclose(f); + gen_fclose(f); return false; } @@ -422,7 +423,7 @@ void gbCheatDisable(int i) bool gbCheatReadGSCodeFile(const char *fileName) { - FILE* file = fopen(fileName, "rb"); + FILE* file = gen_fopen(fileName, "rb"); if(!file) { @@ -430,9 +431,9 @@ bool gbCheatReadGSCodeFile(const char *fileName) return false; } - fseek(file, 0x18, SEEK_SET); + gen_fseek(file, 0x18, SEEK_SET); int count = 0; - fread(&count, 1, 2, file); + gen_fread(&count, 1, 2, file); int dummy = 0; gbCheatRemoveAll(); char desc[13]; @@ -440,10 +441,10 @@ bool gbCheatReadGSCodeFile(const char *fileName) int i; for(i = 0; i < count; i++) { - fread(&dummy, 1, 2, file); - fread(desc, 1, 12, file); + gen_fread(&dummy, 1, 2, file); + gen_fread(desc, 1, 12, file); desc[12] = 0; - fread(code, 1, 8, file); + gen_fread(code, 1, 8, file); code[8] = 0; gbAddGsCheat(code, desc); } @@ -451,7 +452,7 @@ bool gbCheatReadGSCodeFile(const char *fileName) for(i = 0; i < gbCheatNumber; i++) gbCheatDisable(i); - fclose(file); + gen_fclose(file); return true; } diff --git a/source/vba/dmg/gbCheats.h b/source/vba/gb/gbCheats.h similarity index 100% rename from source/vba/dmg/gbCheats.h rename to source/vba/gb/gbCheats.h diff --git a/source/vba/dmg/gbCodes.h b/source/vba/gb/gbCodes.h similarity index 100% rename from source/vba/dmg/gbCodes.h rename to source/vba/gb/gbCodes.h diff --git a/source/vba/dmg/gbCodesCB.h b/source/vba/gb/gbCodesCB.h similarity index 100% rename from source/vba/dmg/gbCodesCB.h rename to source/vba/gb/gbCodesCB.h diff --git a/source/vba/dmg/gbDis.cpp b/source/vba/gb/gbDis.cpp similarity index 100% rename from source/vba/dmg/gbDis.cpp rename to source/vba/gb/gbDis.cpp diff --git a/source/vba/dmg/gbGfx.cpp b/source/vba/gb/gbGfx.cpp similarity index 99% rename from source/vba/dmg/gbGfx.cpp rename to source/vba/gb/gbGfx.cpp index d8295160..ba863af1 100644 --- a/source/vba/dmg/gbGfx.cpp +++ b/source/vba/gb/gbGfx.cpp @@ -18,7 +18,7 @@ #include -#include "../agb/GBA.h" +#include "../GBA.h" #include "gbGlobals.h" #include "gbSGB.h" diff --git a/source/vba/dmg/gbGlobals.cpp b/source/vba/gb/gbGlobals.cpp similarity index 98% rename from source/vba/dmg/gbGlobals.cpp rename to source/vba/gb/gbGlobals.cpp index 435878ac..90b1af15 100644 --- a/source/vba/dmg/gbGlobals.cpp +++ b/source/vba/gb/gbGlobals.cpp @@ -16,7 +16,7 @@ // along with this program; if not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#include "../agb/GBA.h" +#include "../GBA.h" u8 *gbMemoryMap[16]; diff --git a/source/vba/dmg/gbGlobals.h b/source/vba/gb/gbGlobals.h similarity index 100% rename from source/vba/dmg/gbGlobals.h rename to source/vba/gb/gbGlobals.h diff --git a/source/vba/dmg/gbMemory.cpp b/source/vba/gb/gbMemory.cpp similarity index 99% rename from source/vba/dmg/gbMemory.cpp rename to source/vba/gb/gbMemory.cpp index 40c722a1..5d23b550 100644 --- a/source/vba/dmg/gbMemory.cpp +++ b/source/vba/gb/gbMemory.cpp @@ -16,7 +16,7 @@ // along with this program; if not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#include "../agb/GBA.h" +#include "../GBA.h" #include "../Port.h" #include "gbGlobals.h" #include "gbMemory.h" diff --git a/source/vba/dmg/gbMemory.h b/source/vba/gb/gbMemory.h similarity index 100% rename from source/vba/dmg/gbMemory.h rename to source/vba/gb/gbMemory.h diff --git a/source/vba/dmg/gbPrinter.cpp b/source/vba/gb/gbPrinter.cpp similarity index 99% rename from source/vba/dmg/gbPrinter.cpp rename to source/vba/gb/gbPrinter.cpp index bb3c5db5..8bb1b667 100644 --- a/source/vba/dmg/gbPrinter.cpp +++ b/source/vba/gb/gbPrinter.cpp @@ -18,7 +18,7 @@ #include #include -#include "../agb/GBA.h" +#include "../GBA.h" u8 gbPrinterStatus = 0; int gbPrinterState = 0; diff --git a/source/vba/dmg/gbPrinter.h b/source/vba/gb/gbPrinter.h similarity index 100% rename from source/vba/dmg/gbPrinter.h rename to source/vba/gb/gbPrinter.h diff --git a/source/vba/dmg/gbSGB.cpp b/source/vba/gb/gbSGB.cpp similarity index 100% rename from source/vba/dmg/gbSGB.cpp rename to source/vba/gb/gbSGB.cpp diff --git a/source/vba/dmg/gbSGB.h b/source/vba/gb/gbSGB.h similarity index 100% rename from source/vba/dmg/gbSGB.h rename to source/vba/gb/gbSGB.h diff --git a/source/vba/dmg/gbSound.cpp b/source/vba/gb/gbSound.cpp similarity index 100% rename from source/vba/dmg/gbSound.cpp rename to source/vba/gb/gbSound.cpp diff --git a/source/vba/dmg/gbSound.h b/source/vba/gb/gbSound.h similarity index 100% rename from source/vba/dmg/gbSound.h rename to source/vba/gb/gbSound.h diff --git a/source/vba/getopt.c b/source/vba/getopt.c new file mode 100644 index 00000000..6da738ca --- /dev/null +++ b/source/vba/getopt.c @@ -0,0 +1,1061 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + + Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 + Free Software Foundation, Inc. + + NOTE: This source is derived from an old version taken from the GNU C + Library (glibc). + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in . + Ditto for AIX 3.2 and . */ +#ifndef _NO_PROTO +# define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +# include +#endif + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +# ifndef const +# define const +# endif +#endif + +#include +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +# include +# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +# include +# include +#endif /* GNU C library. */ + +#ifdef VMS +# include +# if HAVE_STRING_H - 0 +# include +# endif +#endif + +#ifndef _ +/* This is for other GNU distributions with internationalized messages. + When compiling libc, the _ macro is predefined. */ +# ifdef HAVE_LIBINTL_H +# include +# define _(msgid) gettext (msgid) +# else +# define _(msgid) (msgid) +# endif +#endif + +#ifdef _MSC_VER +#include +#endif + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg = NULL; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Formerly, initialization of getopt depended on optind==0, which + causes problems with re-calling getopt as programs generally don't + know that. */ + +int __getopt_initialized = 0; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +# include +# define my_index strchr +#else + +# if HAVE_STRING_H +# include +# else +# if HAVE_STRINGS_H +# include +# endif +# endif + +/* Avoid depending on library functions or files +whose names are inconsistent. */ + +#ifndef getenv +extern char *getenv (); +#endif + +static char * +my_index (str, chr) +const char *str; +int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. +If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. +That was relevant to code that was here before. */ +# if (!defined __STDC__ || !__STDC__) && !defined strlen +/* gcc with -traditional declares the built-in strlen to return int, +and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +# endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +#ifdef _LIBC +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; + +static int nonoption_flags_max_len; +static int nonoption_flags_len; + +static int original_argc; +static char *const *original_argv; + +/* Make sure the environment variable bash 2.0 puts in the environment + is valid for the getopt call we must make sure that the ARGV passed + to getopt is that one passed to the process. */ +static void +__attribute__ ((unused)) +store_args_and_env (int argc, char *const *argv) +{ + /* XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ + original_argc = argc; + original_argv = argv; +} +# ifdef text_set_element +text_set_element (__libc_subinit, store_args_and_env); +# endif /* text_set_element */ + +# define SWAP_FLAGS(ch1, ch2) \ + if (nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +#if defined __STDC__ && __STDC__ +static void exchange (char **); +#endif + +static void +exchange (argv) +char **argv; +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#ifdef _LIBC + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + nonoption_flags_len = nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + nonoption_flags_max_len), + '\0', top + 1 - nonoption_flags_max_len); + nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +#if defined __STDC__ && __STDC__ +static const char *_getopt_initialize (int, char *const *, const char *); +#endif +static const char * +_getopt_initialize (argc, argv, optstring) +int argc; +char *const *argv; +const char *optstring; +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + +#ifdef _LIBC + if (posixly_correct == NULL + && argc == original_argc && argv == original_argv) + { + if (nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = nonoption_flags_max_len = strlen (orig_str); + if (nonoption_flags_max_len < argc) + nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', nonoption_flags_max_len - len); + } + } + nonoption_flags_len = nonoption_flags_max_len; + } + else + nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) +int argc; +char *const *argv; +const char *optstring; +const struct option *longopts; +int *longind; +int long_only; +{ + optarg = NULL; + + if (optind == 0 || !__getopt_initialized) + { + if (optind == 0) + optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring); + __getopt_initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#ifdef _LIBC +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ + || (optind < nonoption_flags_len \ + && __getopt_nonoption_flags[optind] == '1')) +#else +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') +#endif + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (last_nonopt > optind) + last_nonopt = optind; + if (first_nonopt > optind) + first_nonopt = optind; + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc && NONOPTION_P) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (ordering == REQUIRE_ORDER) + return -1; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + { + if (argv[optind - 1][1] == '-') + /* --option */ + fprintf (stderr, + _("%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); + else + /* +option or -option */ + fprintf (stderr, + _("%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], pfound->name); + + nextchar += strlen (nextchar); + + optopt = pfound->val; + return '?'; + } + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (opterr) + { + if (argv[optind][1] == '-') + /* --option */ + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); + else + /* +option or -option */ + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); + } + nextchar = (char *) ""; + optind++; + optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (opterr) + { + if (posixly_correct) + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, _("%s: illegal option -- %c\n"), + argv[0], c); + else + fprintf (stderr, _("%s: invalid option -- %c\n"), + argv[0], c); + } + optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + fprintf (stderr, _("\ + %s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); + + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) +int argc; +char *const *argv; +const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* Not ELIDE_CODE. */ + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (argc, argv) +int argc; +char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/source/vba/getopt.h b/source/vba/getopt.h new file mode 100644 index 00000000..1931abf6 --- /dev/null +++ b/source/vba/getopt.h @@ -0,0 +1,142 @@ +/* Declarations for getopt. + Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000 + Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@gnu.org. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifndef _GETOPT_H +#define _GETOPT_H 1 + +#ifdef __cplusplus +extern "C" + { +#endif + + /* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + + extern char *optarg; + + /* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + + extern int optind; + + /* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + + extern int opterr; + + /* Set to an option character which was unrecognized. */ + + extern int optopt; + + /* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + + struct option + { +#if defined (__STDC__) && __STDC__ + const char *name; +#else + char *name; +#endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; + }; + + /* Names for the values of the `has_arg' field of `struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#if defined (__STDC__) && __STDC__ + /* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is + undefined, we haven't run the autoconf check so provide the + declaration without arguments. If it is 0, we checked and failed + to find the declaration so provide a fully prototyped one. If it + is 1, we found it so don't provide any declaration at all. */ +#if defined (__GNU_LIBRARY__) || (defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT) + /* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ + extern int getopt (int argc, char *const *argv, const char *shortopts); +#else /* not __GNU_LIBRARY__ */ +# if !defined (HAVE_DECL_GETOPT) + extern int getopt (); +# endif +#endif /* __GNU_LIBRARY__ */ + extern int getopt_long (int argc, char *const *argv, const char *shortopts, + const struct option *longopts, int *longind); + extern int getopt_long_only (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind); + + /* Internal only. Users should not call this directly. */ + extern int _getopt_internal (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind, + int long_only); +#else /* not __STDC__ */ + extern int getopt (); + extern int getopt_long (); + extern int getopt_long_only (); + + extern int _getopt_internal (); +#endif /* __STDC__ */ + +#ifdef __cplusplus + } +#endif + +#endif /* getopt.h */ diff --git a/source/vba/getopt1.c b/source/vba/getopt1.c new file mode 100644 index 00000000..5302231b --- /dev/null +++ b/source/vba/getopt1.c @@ -0,0 +1,191 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 + Free Software Foundation, Inc. + + NOTE: This source is derived from an old version taken from the GNU C + Library (glibc). + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "getopt.h" + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +#include +#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +#define ELIDE_CODE +#endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (argc, argv, options, long_options, opt_index) +int argc; +char *const *argv; +const char *options; +const struct option *long_options; +int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (argc, argv, options, long_options, opt_index) +int argc; +char *const *argv; +const char *options; +const struct option *long_options; +int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 1); +} + + +#endif /* Not ELIDE_CODE. */ + +#ifdef TEST + +#include + +int +main (argc, argv) +int argc; +char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0 + }, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/source/vba/interframe.cpp b/source/vba/interframe.cpp index 67de8768..44e688de 100644 --- a/source/vba/interframe.cpp +++ b/source/vba/interframe.cpp @@ -1,581 +1,643 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "System.h" -#include -#include - -#ifdef MMX -extern "C" bool cpu_mmx; -#endif - -/* - * Thanks to Kawaks' Mr. K for the code - - Incorporated into vba by Anthony Di Franco -*/ - -static u8 *frm1 = NULL; -static u8 *frm2 = NULL; -static u8 *frm3 = NULL; - -extern int RGB_LOW_BITS_MASK; -extern u32 qRGB_COLOR_MASK[2]; - -static void Init() -{ - frm1 = (u8 *)calloc(322*242,4); - // 1 frame ago - frm2 = (u8 *)calloc(322*242,4); - // 2 frames ago - frm3 = (u8 *)calloc(322*242,4); - // 3 frames ago -} - -void InterframeCleanup() -{ - if(frm1) - free(frm1); - if(frm2) - free(frm2); - if(frm3) - free(frm3); - frm1 = frm2 = frm3 = NULL; -} - -#ifdef MMX -static void SmartIB_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - u16 *src0 = (u16 *)srcPtr; - u16 *src1 = (u16 *)frm1; - u16 *src2 = (u16 *)frm2; - u16 *src3 = (u16 *)frm3; - - int count = width >> 2; - - for(int i = 0; i < height; i++) { -#ifdef __GNUC__ - asm volatile ( - "push %4\n" - "movq 0(%5), %%mm7\n" // colorMask - "0:\n" - "movq 0(%0), %%mm0\n" // src0 - "movq 0(%1), %%mm1\n" // src1 - "movq 0(%2), %%mm2\n" // src2 - "movq 0(%3), %%mm3\n" // src3 - "movq %%mm0, 0(%3)\n" // src3 = src0 - "movq %%mm0, %%mm4\n" - "movq %%mm1, %%mm5\n" - "pcmpeqw %%mm2, %%mm5\n" // src1 == src2 (A) - "pcmpeqw %%mm3, %%mm4\n" // src3 == src0 (B) - "por %%mm5, %%mm4\n" // A | B - "movq %%mm2, %%mm5\n" - "pcmpeqw %%mm0, %%mm5\n" // src0 == src2 (C) - "pcmpeqw %%mm1, %%mm3\n" // src1 == src3 (D) - "por %%mm3, %%mm5\n" // C|D - "pandn %%mm5, %%mm4\n" // (!(A|B))&(C|D) - "movq %%mm0, %%mm2\n" - "pand %%mm7, %%mm2\n" // color & colorMask - "pand %%mm7, %%mm1\n" // src1 & colorMask - "psrlw $1, %%mm2\n" // (color & colorMask) >> 1 (E) - "psrlw $1, %%mm1\n" // (src & colorMask) >> 1 (F) - "paddw %%mm2, %%mm1\n" // E+F - "pand %%mm4, %%mm1\n" // (E+F) & res - "pandn %%mm0, %%mm4\n" // color& !res - - "por %%mm1, %%mm4\n" - "movq %%mm4, 0(%0)\n" // src0 = res - - "addl $8, %0\n" - "addl $8, %1\n" - "addl $8, %2\n" - "addl $8, %3\n" - - "decl %4\n" - "jnz 0b\n" - "pop %4\n" - "emms\n" - : "+r" (src0), "+r" (src1), "+r" (src2), "+r" (src3) - : "r" (count), "r" (qRGB_COLOR_MASK) - ); -#else - __asm { - movq mm7, qword ptr [qRGB_COLOR_MASK]; - mov eax, src0; - mov ebx, src1; - mov ecx, src2; - mov edx, src3; - mov edi, count; - label0: - movq mm0, qword ptr [eax]; // src0 - movq mm1, qword ptr [ebx]; // src1 - movq mm2, qword ptr [ecx]; // src2 - movq mm3, qword ptr [edx]; // src3 - movq qword ptr [edx], mm0; // src3 = src0 - movq mm4, mm0; - movq mm5, mm1; - pcmpeqw mm5, mm2; // src1 == src2 (A) - pcmpeqw mm4, mm3; // src3 == src0 (B) - por mm4, mm5; // A | B - movq mm5, mm2; - pcmpeqw mm5, mm0; // src0 == src2 (C) - pcmpeqw mm3, mm1; // src1 == src3 (D) - por mm5, mm3; // C|D - pandn mm4, mm5; // (!(A|B))&(C|D) - movq mm2, mm0; - pand mm2, mm7; // color & colorMask - pand mm1, mm7; // src1 & colorMask - psrlw mm2, 1; // (color & colorMask) >> 1 (E) - psrlw mm1, 1; // (src & colorMask) >> 1 (F) - paddw mm1, mm2; // E+F - pand mm1, mm4; // (E+F) & res - pandn mm4, mm0; // color & !res - - por mm4, mm1; - movq qword ptr [eax], mm4; // src0 = res - - add eax, 8; - add ebx, 8; - add ecx, 8; - add edx, 8; - - dec edi; - jnz label0; - mov src0, eax; - mov src1, ebx; - mov src2, ecx; - mov src3, edx; - emms; - } -#endif - src0+=2; - src1+=2; - src2+=2; - src3+=2; - } - - /* Swap buffers around */ - u8 *temp = frm1; - frm1 = frm3; - frm3 = frm2; - frm2 = temp; -} -#endif - -void SmartIB(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - if(frm1 == NULL) { - Init(); - } -#ifdef MMX - if(cpu_mmx) { - SmartIB_MMX(srcPtr, srcPitch, width, height); - return; - } -#endif - - u16 colorMask = ~RGB_LOW_BITS_MASK; - - u16 *src0 = (u16 *)srcPtr; - u16 *src1 = (u16 *)frm1; - u16 *src2 = (u16 *)frm2; - u16 *src3 = (u16 *)frm3; - - int sPitch = srcPitch >> 1; - - int pos = 0; - for (int j = 0; j < height; j++) - for (int i = 0; i < sPitch; i++) { - u16 color = src0[pos]; - src0[pos] = - (src1[pos] != src2[pos]) && - (src3[pos] != color) && - ((color == src2[pos]) || (src1[pos] == src3[pos])) - ? (((color & colorMask) >> 1) + ((src1[pos] & colorMask) >> 1)) : - color; - src3[pos] = color; /* oldest buffer now holds newest frame */ - pos++; - } - - /* Swap buffers around */ - u8 *temp = frm1; - frm1 = frm3; - frm3 = frm2; - frm2 = temp; -} - -#ifdef MMX -static void SmartIB32_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - u32 *src0 = (u32 *)srcPtr; - u32 *src1 = (u32 *)frm1; - u32 *src2 = (u32 *)frm2; - u32 *src3 = (u32 *)frm3; - - int count = width >> 1; - - for(int i = 0; i < height; i++) { -#ifdef __GNUC__ - asm volatile ( - "push %4\n" - "movq 0(%5), %%mm7\n" // colorMask - "0:\n" - "movq 0(%0), %%mm0\n" // src0 - "movq 0(%1), %%mm1\n" // src1 - "movq 0(%2), %%mm2\n" // src2 - "movq 0(%3), %%mm3\n" // src3 - "movq %%mm0, 0(%3)\n" // src3 = src0 - "movq %%mm0, %%mm4\n" - "movq %%mm1, %%mm5\n" - "pcmpeqd %%mm2, %%mm5\n" // src1 == src2 (A) - "pcmpeqd %%mm3, %%mm4\n" // src3 == src0 (B) - "por %%mm5, %%mm4\n" // A | B - "movq %%mm2, %%mm5\n" - "pcmpeqd %%mm0, %%mm5\n" // src0 == src2 (C) - "pcmpeqd %%mm1, %%mm3\n" // src1 == src3 (D) - "por %%mm3, %%mm5\n" // C|D - "pandn %%mm5, %%mm4\n" // (!(A|B))&(C|D) - "movq %%mm0, %%mm2\n" - "pand %%mm7, %%mm2\n" // color & colorMask - "pand %%mm7, %%mm1\n" // src1 & colorMask - "psrld $1, %%mm2\n" // (color & colorMask) >> 1 (E) - "psrld $1, %%mm1\n" // (src & colorMask) >> 1 (F) - "paddd %%mm2, %%mm1\n" // E+F - "pand %%mm4, %%mm1\n" // (E+F) & res - "pandn %%mm0, %%mm4\n" // color& !res - - "por %%mm1, %%mm4\n" - "movq %%mm4, 0(%0)\n" // src0 = res - - "addl $8, %0\n" - "addl $8, %1\n" - "addl $8, %2\n" - "addl $8, %3\n" - - "decl %4\n" - "jnz 0b\n" - "pop %4\n" - "emms\n" - : "+r" (src0), "+r" (src1), "+r" (src2), "+r" (src3) - : "r" (count), "r" (qRGB_COLOR_MASK) - ); -#else - __asm { - movq mm7, qword ptr [qRGB_COLOR_MASK]; - mov eax, src0; - mov ebx, src1; - mov ecx, src2; - mov edx, src3; - mov edi, count; - label0: - movq mm0, qword ptr [eax]; // src0 - movq mm1, qword ptr [ebx]; // src1 - movq mm2, qword ptr [ecx]; // src2 - movq mm3, qword ptr [edx]; // src3 - movq qword ptr [edx], mm0; // src3 = src0 - movq mm4, mm0; - movq mm5, mm1; - pcmpeqd mm5, mm2; // src1 == src2 (A) - pcmpeqd mm4, mm3; // src3 == src0 (B) - por mm4, mm5; // A | B - movq mm5, mm2; - pcmpeqd mm5, mm0; // src0 == src2 (C) - pcmpeqd mm3, mm1; // src1 == src3 (D) - por mm5, mm3; // C|D - pandn mm4, mm5; // (!(A|B))&(C|D) - movq mm2, mm0; - pand mm2, mm7; // color & colorMask - pand mm1, mm7; // src1 & colorMask - psrld mm2, 1; // (color & colorMask) >> 1 (E) - psrld mm1, 1; // (src & colorMask) >> 1 (F) - paddd mm1, mm2; // E+F - pand mm1, mm4; // (E+F) & res - pandn mm4, mm0; // color & !res - - por mm4, mm1; - movq qword ptr [eax], mm4; // src0 = res - - add eax, 8; - add ebx, 8; - add ecx, 8; - add edx, 8; - - dec edi; - jnz label0; - mov src0, eax; - mov src1, ebx; - mov src2, ecx; - mov src3, edx; - emms; - } -#endif - - src0++; - src1++; - src2++; - src3++; - } - /* Swap buffers around */ - u8 *temp = frm1; - frm1 = frm3; - frm3 = frm2; - frm2 = temp; -} -#endif - -void SmartIB32(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - if(frm1 == NULL) { - Init(); - } -#ifdef MMX - if(cpu_mmx) { - SmartIB32_MMX(srcPtr, srcPitch, width, height); - return; - } -#endif - - u32 *src0 = (u32 *)srcPtr; - u32 *src1 = (u32 *)frm1; - u32 *src2 = (u32 *)frm2; - u32 *src3 = (u32 *)frm3; - - u32 colorMask = 0xfefefe; - - int sPitch = srcPitch >> 2; - int pos = 0; - - for (int j = 0; j < height; j++) - for (int i = 0; i < sPitch; i++) { - u32 color = src0[pos]; - src0[pos] = - (src1[pos] != src2[pos]) && - (src3[pos] != color) && - ((color == src2[pos]) || (src1[pos] == src3[pos])) - ? (((color & colorMask) >> 1) + ((src1[pos] & colorMask) >> 1)) : - color; - src3[pos] = color; /* oldest buffer now holds newest frame */ - pos++; - } - - /* Swap buffers around */ - u8 *temp = frm1; - frm1 = frm3; - frm3 = frm2; - frm2 = temp; -} - -#ifdef MMX -static void MotionBlurIB_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - u16 *src0 = (u16 *)srcPtr; - u16 *src1 = (u16 *)frm1; - - int count = width >> 2; - - for(int i = 0; i < height; i++) { -#ifdef __GNUC__ - asm volatile ( - "push %2\n" - "movq 0(%3), %%mm7\n" // colorMask - "0:\n" - "movq 0(%0), %%mm0\n" // src0 - "movq 0(%1), %%mm1\n" // src1 - "movq %%mm0, 0(%1)\n" // src1 = src0 - "pand %%mm7, %%mm0\n" // color & colorMask - "pand %%mm7, %%mm1\n" // src1 & colorMask - "psrlw $1, %%mm0\n" // (color & colorMask) >> 1 (E) - "psrlw $1, %%mm1\n" // (src & colorMask) >> 1 (F) - "paddw %%mm1, %%mm0\n" // E+F - - "movq %%mm0, 0(%0)\n" // src0 = res - - "addl $8, %0\n" - "addl $8, %1\n" - - "decl %2\n" - "jnz 0b\n" - "pop %2\n" - "emms\n" - : "+r" (src0), "+r" (src1) - : "r" (count), "r" (qRGB_COLOR_MASK) - ); -#else - __asm { - movq mm7, qword ptr [qRGB_COLOR_MASK]; - mov eax, src0; - mov ebx, src1; - mov edi, count; - label0: - movq mm0, qword ptr [eax]; // src0 - movq mm1, qword ptr [ebx]; // src1 - movq qword ptr [ebx], mm0; // src1 = src0 - pand mm0, mm7; // color & colorMask - pand mm1, mm7; // src1 & colorMask - psrlw mm0, 1; // (color & colorMask) >> 1 (E) - psrlw mm1, 1; // (src & colorMask) >> 1 (F) - paddw mm0, mm1; // E+F - - movq qword ptr [eax], mm0; // src0 = res - - add eax, 8; - add ebx, 8; - - dec edi; - jnz label0; - mov src0, eax; - mov src1, ebx; - emms; - } -#endif - src0+=2; - src1+=2; - } -} -#endif - -void MotionBlurIB(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - if(frm1 == NULL) { - Init(); - } - -#ifdef MMX - if(cpu_mmx) { - MotionBlurIB_MMX(srcPtr, srcPitch, width, height); - return; - } -#endif - - u16 colorMask = ~RGB_LOW_BITS_MASK; - - u16 *src0 = (u16 *)srcPtr; - u16 *src1 = (u16 *)frm1; - - int sPitch = srcPitch >> 1; - - int pos = 0; - for (int j = 0; j < height; j++) - for (int i = 0; i < sPitch; i++) { - u16 color = src0[pos]; - src0[pos] = - (((color & colorMask) >> 1) + ((src1[pos] & colorMask) >> 1)); - src1[pos] = color; - pos++; - } -} - -#ifdef MMX -static void MotionBlurIB32_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - u32 *src0 = (u32 *)srcPtr; - u32 *src1 = (u32 *)frm1; - - int count = width >> 1; - - for(int i = 0; i < height; i++) { -#ifdef __GNUC__ - asm volatile ( - "push %2\n" - "movq 0(%3), %%mm7\n" // colorMask - "0:\n" - "movq 0(%0), %%mm0\n" // src0 - "movq 0(%1), %%mm1\n" // src1 - "movq %%mm0, 0(%1)\n" // src1 = src0 - "pand %%mm7, %%mm0\n" // color & colorMask - "pand %%mm7, %%mm1\n" // src1 & colorMask - "psrld $1, %%mm0\n" // (color & colorMask) >> 1 (E) - "psrld $1, %%mm1\n" // (src & colorMask) >> 1 (F) - "paddd %%mm1, %%mm0\n" // E+F - - "movq %%mm0, 0(%0)\n" // src0 = res - - "addl $8, %0\n" - "addl $8, %1\n" - - "decl %2\n" - "jnz 0b\n" - "pop %2\n" - "emms\n" - : "+r" (src0), "+r" (src1) - : "r" (count), "r" (qRGB_COLOR_MASK) - ); -#else - __asm { - movq mm7, qword ptr [qRGB_COLOR_MASK]; - mov eax, src0; - mov ebx, src1; - mov edi, count; - label0: - movq mm0, qword ptr [eax]; // src0 - movq mm1, qword ptr [ebx]; // src1 - movq qword ptr [ebx], mm0; // src1 = src0 - pand mm0, mm7; // color & colorMask - pand mm1, mm7; // src1 & colorMask - psrld mm0, 1; // (color & colorMask) >> 1 (E) - psrld mm1, 1; // (src & colorMask) >> 1 (F) - paddd mm0, mm1; // E+F - - movq qword ptr [eax], mm0; // src0 = res - - add eax, 8; - add ebx, 8; - - dec edi; - jnz label0; - mov src0, eax; - mov src1, ebx; - emms; - } -#endif - src0++; - src1++; - } -} -#endif - -void MotionBlurIB32(u8 *srcPtr, u32 srcPitch, int width, int height) -{ - if(frm1 == NULL) { - Init(); - } - -#ifdef MMX - if(cpu_mmx) { - MotionBlurIB32_MMX(srcPtr, srcPitch, width, height); - return; - } -#endif - - u32 *src0 = (u32 *)srcPtr; - u32 *src1 = (u32 *)frm1; - - u32 colorMask = 0xfefefe; - - int sPitch = srcPitch >> 2; - int pos = 0; - - for (int j = 0; j < height; j++) - for (int i = 0; i < sPitch; i++) { - u32 color = src0[pos]; - src0[pos] = (((color & colorMask) >> 1) + - ((src1[pos] & colorMask) >> 1)); - src1[pos] = color; - pos++; - } -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "System.h" +#include +#include + +#ifdef MMX +extern "C" bool cpu_mmx; +#endif + +/* + * Thanks to Kawaks' Mr. K for the code + + Incorporated into vba by Anthony Di Franco +*/ + +static u8 *frm1 = NULL; +static u8 *frm2 = NULL; +static u8 *frm3 = NULL; + +extern int RGB_LOW_BITS_MASK; +extern u32 qRGB_COLOR_MASK[2]; + +static void Init() +{ + frm1 = (u8 *)calloc(322*242,4); + // 1 frame ago + frm2 = (u8 *)calloc(322*242,4); + // 2 frames ago + frm3 = (u8 *)calloc(322*242,4); + // 3 frames ago +} + +void InterframeCleanup() +{ + if(frm1) + free(frm1); + if(frm2) + free(frm2); + if(frm3) + free(frm3); + frm1 = frm2 = frm3 = NULL; +} + +#ifdef MMX +static void SmartIB_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + u16 *src0 = (u16 *)srcPtr; + u16 *src1 = (u16 *)frm1; + u16 *src2 = (u16 *)frm2; + u16 *src3 = (u16 *)frm3; + + int count = width >> 2; + + for(int i = 0; i < height; i++) + { +#ifdef __GNUC__ + asm volatile ( + "push %4\n" + "movq 0(%5), %%mm7\n" // colorMask + "0:\n" + "movq 0(%0), %%mm0\n" // src0 + "movq 0(%1), %%mm1\n" // src1 + "movq 0(%2), %%mm2\n" // src2 + "movq 0(%3), %%mm3\n" // src3 + "movq %%mm0, 0(%3)\n" // src3 = src0 + "movq %%mm0, %%mm4\n" + "movq %%mm1, %%mm5\n" + "pcmpeqw %%mm2, %%mm5\n" // src1 == src2 (A) + "pcmpeqw %%mm3, %%mm4\n" // src3 == src0 (B) + "por %%mm5, %%mm4\n" // A | B + "movq %%mm2, %%mm5\n" + "pcmpeqw %%mm0, %%mm5\n" // src0 == src2 (C) + "pcmpeqw %%mm1, %%mm3\n" // src1 == src3 (D) + "por %%mm3, %%mm5\n" // C|D + "pandn %%mm5, %%mm4\n" // (!(A|B))&(C|D) + "movq %%mm0, %%mm2\n" + "pand %%mm7, %%mm2\n" // color & colorMask + "pand %%mm7, %%mm1\n" // src1 & colorMask + "psrlw $1, %%mm2\n" // (color & colorMask) >> 1 (E) + "psrlw $1, %%mm1\n" // (src & colorMask) >> 1 (F) + "paddw %%mm2, %%mm1\n" // E+F + "pand %%mm4, %%mm1\n" // (E+F) & res + "pandn %%mm0, %%mm4\n" // color& !res + + "por %%mm1, %%mm4\n" + "movq %%mm4, 0(%0)\n" // src0 = res + + "addl $8, %0\n" + "addl $8, %1\n" + "addl $8, %2\n" + "addl $8, %3\n" + + "decl %4\n" + "jnz 0b\n" + "pop %4\n" + "emms\n" + : "+r" (src0), "+r" (src1), "+r" (src2), "+r" (src3) + : "r" (count), "r" (qRGB_COLOR_MASK) + ); +#else + __asm { + movq mm7, qword ptr [qRGB_COLOR_MASK]; + mov eax, src0; + mov ebx, src1; + mov ecx, src2; + mov edx, src3; + mov edi, count; + label0: + movq mm0, qword ptr [eax]; // src0 + movq mm1, qword ptr [ebx]; // src1 + movq mm2, qword ptr [ecx]; // src2 + movq mm3, qword ptr [edx]; // src3 + movq qword ptr [edx], mm0; // src3 = src0 + movq mm4, mm0; + movq mm5, mm1; + pcmpeqw mm5, mm2; // src1 == src2 (A) + pcmpeqw mm4, mm3; // src3 == src0 (B) + por mm4, mm5; // A | B + movq mm5, mm2; + pcmpeqw mm5, mm0; // src0 == src2 (C) + pcmpeqw mm3, mm1; // src1 == src3 (D) + por mm5, mm3; // C|D + pandn mm4, mm5; // (!(A|B))&(C|D) + movq mm2, mm0; + pand mm2, mm7; // color & colorMask + pand mm1, mm7; // src1 & colorMask + psrlw mm2, 1; // (color & colorMask) >> 1 (E) + psrlw mm1, 1; // (src & colorMask) >> 1 (F) + paddw mm1, mm2; // E+F + pand mm1, mm4; // (E+F) & res + pandn mm4, mm0; // color & !res + + por mm4, mm1; + movq qword ptr [eax], mm4; // src0 = res + + add eax, 8; + add ebx, 8; + add ecx, 8; + add edx, 8; + + dec edi; + jnz label0; + mov src0, eax; + mov src1, ebx; + mov src2, ecx; + mov src3, edx; + emms; + } +#endif + src0+=2; + src1+=2; + src2+=2; + src3+=2; + } + + /* Swap buffers around */ + u8 *temp = frm1; + frm1 = frm3; + frm3 = frm2; + frm2 = temp; +} +#endif + +void SmartIB(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + if(frm1 == NULL) + { + Init(); + } +#ifdef MMX + if(cpu_mmx) + { + SmartIB_MMX(srcPtr, srcPitch, width, height); + return; + } +#endif + + u16 colorMask = ~RGB_LOW_BITS_MASK; + + u16 *src0 = (u16 *)srcPtr; + u16 *src1 = (u16 *)frm1; + u16 *src2 = (u16 *)frm2; + u16 *src3 = (u16 *)frm3; + + int sPitch = srcPitch >> 1; + + int pos = 0; + for (int j = 0; j < height; j++) + for (int i = 0; i < sPitch; i++) + { + u16 color = src0[pos]; + src0[pos] = + (src1[pos] != src2[pos]) && + (src3[pos] != color) && + ((color == src2[pos]) || (src1[pos] == src3[pos])) + ? (((color & colorMask) >> 1) + ((src1[pos] & colorMask) >> 1)) : + color; + src3[pos] = color; /* oldest buffer now holds newest frame */ + pos++; + } + + /* Swap buffers around */ + u8 *temp = frm1; + frm1 = frm3; + frm3 = frm2; + frm2 = temp; +} + +#ifdef MMX +static void SmartIB32_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + u32 *src0 = (u32 *)srcPtr; + u32 *src1 = (u32 *)frm1; + u32 *src2 = (u32 *)frm2; + u32 *src3 = (u32 *)frm3; + + int count = width >> 1; + + for(int i = 0; i < height; i++) + { +#ifdef __GNUC__ + asm volatile ( + "push %4\n" + "movq 0(%5), %%mm7\n" // colorMask + "0:\n" + "movq 0(%0), %%mm0\n" // src0 + "movq 0(%1), %%mm1\n" // src1 + "movq 0(%2), %%mm2\n" // src2 + "movq 0(%3), %%mm3\n" // src3 + "movq %%mm0, 0(%3)\n" // src3 = src0 + "movq %%mm0, %%mm4\n" + "movq %%mm1, %%mm5\n" + "pcmpeqd %%mm2, %%mm5\n" // src1 == src2 (A) + "pcmpeqd %%mm3, %%mm4\n" // src3 == src0 (B) + "por %%mm5, %%mm4\n" // A | B + "movq %%mm2, %%mm5\n" + "pcmpeqd %%mm0, %%mm5\n" // src0 == src2 (C) + "pcmpeqd %%mm1, %%mm3\n" // src1 == src3 (D) + "por %%mm3, %%mm5\n" // C|D + "pandn %%mm5, %%mm4\n" // (!(A|B))&(C|D) + "movq %%mm0, %%mm2\n" + "pand %%mm7, %%mm2\n" // color & colorMask + "pand %%mm7, %%mm1\n" // src1 & colorMask + "psrld $1, %%mm2\n" // (color & colorMask) >> 1 (E) + "psrld $1, %%mm1\n" // (src & colorMask) >> 1 (F) + "paddd %%mm2, %%mm1\n" // E+F + "pand %%mm4, %%mm1\n" // (E+F) & res + "pandn %%mm0, %%mm4\n" // color& !res + + "por %%mm1, %%mm4\n" + "movq %%mm4, 0(%0)\n" // src0 = res + + "addl $8, %0\n" + "addl $8, %1\n" + "addl $8, %2\n" + "addl $8, %3\n" + + "decl %4\n" + "jnz 0b\n" + "pop %4\n" + "emms\n" + : "+r" (src0), "+r" (src1), "+r" (src2), "+r" (src3) + : "r" (count), "r" (qRGB_COLOR_MASK) + ); +#else + __asm { + movq mm7, qword ptr [qRGB_COLOR_MASK]; + mov eax, src0; + mov ebx, src1; + mov ecx, src2; + mov edx, src3; + mov edi, count; + label0: + movq mm0, qword ptr [eax]; // src0 + movq mm1, qword ptr [ebx]; // src1 + movq mm2, qword ptr [ecx]; // src2 + movq mm3, qword ptr [edx]; // src3 + movq qword ptr [edx], mm0; // src3 = src0 + movq mm4, mm0; + movq mm5, mm1; + pcmpeqd mm5, mm2; // src1 == src2 (A) + pcmpeqd mm4, mm3; // src3 == src0 (B) + por mm4, mm5; // A | B + movq mm5, mm2; + pcmpeqd mm5, mm0; // src0 == src2 (C) + pcmpeqd mm3, mm1; // src1 == src3 (D) + por mm5, mm3; // C|D + pandn mm4, mm5; // (!(A|B))&(C|D) + movq mm2, mm0; + pand mm2, mm7; // color & colorMask + pand mm1, mm7; // src1 & colorMask + psrld mm2, 1; // (color & colorMask) >> 1 (E) + psrld mm1, 1; // (src & colorMask) >> 1 (F) + paddd mm1, mm2; // E+F + pand mm1, mm4; // (E+F) & res + pandn mm4, mm0; // color & !res + + por mm4, mm1; + movq qword ptr [eax], mm4; // src0 = res + + add eax, 8; + add ebx, 8; + add ecx, 8; + add edx, 8; + + dec edi; + jnz label0; + mov src0, eax; + mov src1, ebx; + mov src2, ecx; + mov src3, edx; + emms; + } +#endif + + src0++; + src1++; + src2++; + src3++; + } + /* Swap buffers around */ + u8 *temp = frm1; + frm1 = frm3; + frm3 = frm2; + frm2 = temp; +} +#endif + +void SmartIB32(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + if(frm1 == NULL) + { + Init(); + } +#ifdef MMX + if(cpu_mmx) + { + SmartIB32_MMX(srcPtr, srcPitch, width, height); + return; + } +#endif + + u32 *src0 = (u32 *)srcPtr; + u32 *src1 = (u32 *)frm1; + u32 *src2 = (u32 *)frm2; + u32 *src3 = (u32 *)frm3; + + u32 colorMask = 0xfefefe; + + int sPitch = srcPitch >> 2; + int pos = 0; + + for (int j = 0; j < height; j++) + for (int i = 0; i < sPitch; i++) + { + u32 color = src0[pos]; + src0[pos] = + (src1[pos] != src2[pos]) && + (src3[pos] != color) && + ((color == src2[pos]) || (src1[pos] == src3[pos])) + ? (((color & colorMask) >> 1) + ((src1[pos] & colorMask) >> 1)) : + color; + src3[pos] = color; /* oldest buffer now holds newest frame */ + pos++; + } + + /* Swap buffers around */ + u8 *temp = frm1; + frm1 = frm3; + frm3 = frm2; + frm2 = temp; +} + +#ifdef MMX +static void MotionBlurIB_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + u16 *src0 = (u16 *)srcPtr; + u16 *src1 = (u16 *)frm1; + + int count = width >> 2; + + for(int i = 0; i < height; i++) + { +#ifdef __GNUC__ + asm volatile ( + "push %2\n" + "movq 0(%3), %%mm7\n" // colorMask + "0:\n" + "movq 0(%0), %%mm0\n" // src0 + "movq 0(%1), %%mm1\n" // src1 + "movq %%mm0, 0(%1)\n" // src1 = src0 + "pand %%mm7, %%mm0\n" // color & colorMask + "pand %%mm7, %%mm1\n" // src1 & colorMask + "psrlw $1, %%mm0\n" // (color & colorMask) >> 1 (E) + "psrlw $1, %%mm1\n" // (src & colorMask) >> 1 (F) + "paddw %%mm1, %%mm0\n" // E+F + + "movq %%mm0, 0(%0)\n" // src0 = res + + "addl $8, %0\n" + "addl $8, %1\n" + + "decl %2\n" + "jnz 0b\n" + "pop %2\n" + "emms\n" + : "+r" (src0), "+r" (src1) + : "r" (count), "r" (qRGB_COLOR_MASK) + ); +#else + __asm { + movq mm7, qword ptr [qRGB_COLOR_MASK]; + mov eax, src0; + mov ebx, src1; + mov edi, count; + label0: + movq mm0, qword ptr [eax]; // src0 + movq mm1, qword ptr [ebx]; // src1 + movq qword ptr [ebx], mm0; // src1 = src0 + pand mm0, mm7; // color & colorMask + pand mm1, mm7; // src1 & colorMask + psrlw mm0, 1; // (color & colorMask) >> 1 (E) + psrlw mm1, 1; // (src & colorMask) >> 1 (F) + paddw mm0, mm1; // E+F + + movq qword ptr [eax], mm0; // src0 = res + + add eax, 8; + add ebx, 8; + + dec edi; + jnz label0; + mov src0, eax; + mov src1, ebx; + emms; + } +#endif + src0+=2; + src1+=2; + } +} +#endif + +void MotionBlurIB(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + if(frm1 == NULL) + { + Init(); + } + +#ifdef MMX + if(cpu_mmx) + { + MotionBlurIB_MMX(srcPtr, srcPitch, width, height); + return; + } +#endif + + u16 colorMask = ~RGB_LOW_BITS_MASK; + + u16 *src0 = (u16 *)srcPtr; + u16 *src1 = (u16 *)frm1; + + int sPitch = srcPitch >> 1; + + int pos = 0; + for (int j = 0; j < height; j++) + for (int i = 0; i < sPitch; i++) + { + u16 color = src0[pos]; + src0[pos] = + (((color & colorMask) >> 1) + ((src1[pos] & colorMask) >> 1)); + src1[pos] = color; + pos++; + } +} + +#ifdef MMX +static void MotionBlurIB32_MMX(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + u32 *src0 = (u32 *)srcPtr; + u32 *src1 = (u32 *)frm1; + + int count = width >> 1; + + for(int i = 0; i < height; i++) + { +#ifdef __GNUC__ + asm volatile ( + "push %2\n" + "movq 0(%3), %%mm7\n" // colorMask + "0:\n" + "movq 0(%0), %%mm0\n" // src0 + "movq 0(%1), %%mm1\n" // src1 + "movq %%mm0, 0(%1)\n" // src1 = src0 + "pand %%mm7, %%mm0\n" // color & colorMask + "pand %%mm7, %%mm1\n" // src1 & colorMask + "psrld $1, %%mm0\n" // (color & colorMask) >> 1 (E) + "psrld $1, %%mm1\n" // (src & colorMask) >> 1 (F) + "paddd %%mm1, %%mm0\n" // E+F + + "movq %%mm0, 0(%0)\n" // src0 = res + + "addl $8, %0\n" + "addl $8, %1\n" + + "decl %2\n" + "jnz 0b\n" + "pop %2\n" + "emms\n" + : "+r" (src0), "+r" (src1) + : "r" (count), "r" (qRGB_COLOR_MASK) + ); +#else + __asm { + movq mm7, qword ptr [qRGB_COLOR_MASK]; + mov eax, src0; + mov ebx, src1; + mov edi, count; + label0: + movq mm0, qword ptr [eax]; // src0 + movq mm1, qword ptr [ebx]; // src1 + movq qword ptr [ebx], mm0; // src1 = src0 + pand mm0, mm7; // color & colorMask + pand mm1, mm7; // src1 & colorMask + psrld mm0, 1; // (color & colorMask) >> 1 (E) + psrld mm1, 1; // (src & colorMask) >> 1 (F) + paddd mm0, mm1; // E+F + + movq qword ptr [eax], mm0; // src0 = res + + add eax, 8; + add ebx, 8; + + dec edi; + jnz label0; + mov src0, eax; + mov src1, ebx; + emms; + } +#endif + src0++; + src1++; + } +} +#endif + +void MotionBlurIB32(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + if(frm1 == NULL) + { + Init(); + } + +#ifdef MMX + if(cpu_mmx) + { + MotionBlurIB32_MMX(srcPtr, srcPitch, width, height); + return; + } +#endif + + u32 *src0 = (u32 *)srcPtr; + u32 *src1 = (u32 *)frm1; + + u32 colorMask = 0xfefefe; + + int sPitch = srcPitch >> 2; + int pos = 0; + + for (int j = 0; j < height; j++) + for (int i = 0; i < sPitch; i++) + { + u32 color = src0[pos]; + src0[pos] = (((color & colorMask) >> 1) + + ((src1[pos] & colorMask) >> 1)); + src1[pos] = color; + pos++; + } +} + +static int count = 0; + +void InterlaceIB(u8 *srcPtr, u32 srcPitch, int width, int height) +{ + if(frm1 == NULL) + { + Init(); + } + + u16 colorMask = ~RGB_LOW_BITS_MASK; + + u16 *src0 = (u16 *)srcPtr; + u16 *src1 = (u16 *)frm1; + + int sPitch = srcPitch >> 1; + + int pos = 0; + for (int j = 0; j < height; j++) + { + bool render = count ? (j & 1) != 0 : (j & 1) == 0; + if(render) + { + for (int i = 0; i < sPitch; i++) + { + u16 color = src0[pos]; + src0[pos] = + (((color & colorMask) >> 1) + ((((src1[pos] & colorMask) >> 1) & colorMask) >> 1)); + src1[pos] = color; + pos++; + } + } + else + { + for (int i = 0; i < sPitch; i++) + { + u16 color = src0[pos]; + src0[pos] = + (((((color & colorMask) >> 1) & colorMask) >> 1) + ((src1[pos] & colorMask) >> 1)); + src1[pos] = color; + pos++; + } + } + } + count = count ^ 1; +} diff --git a/source/vba/interp.h b/source/vba/interp.h index 0fd29610..569afe35 100644 --- a/source/vba/interp.h +++ b/source/vba/interp.h @@ -1,302 +1,298 @@ -/* - * This file is part of the Advance project. - * - * Copyright (C) 2003 Andrea Mazzoleni - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * In addition, as a special exception, Andrea Mazzoleni - * gives permission to link the code of this program with - * the MAME library (or with modified versions of MAME that use the - * same license as MAME), and distribute linked combinations including - * the two. You must obey the GNU General Public License in all - * respects for all of the code used other than MAME. If you modify - * this file, you may extend this exception to your version of the - * file, but you are not obligated to do so. If you do not wish to - * do so, delete this exception statement from your version. - */ - -#ifndef __INTERP_H -#define __INTERP_H - -#define __STDC_CONSTANT_MACROS - -#include - - -typedef uint16_t interp_uint16; -typedef uint32_t interp_uint32; - -/***************************************************************************/ -/* Basic types */ - -/***************************************************************************/ -/* interpolation */ - -static unsigned interp_mask[2]; -static unsigned interp_bits_per_pixel; - -#define INTERP_16_MASK_1(v) (v & interp_mask[0]) -#define INTERP_16_MASK_2(v) (v & interp_mask[1]) - -static inline u16 interp_16_521(u16 p1, u16 p2, u16 p3) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*5 + INTERP_16_MASK_1(p2)*2 + INTERP_16_MASK_1(p3)*1) / 8) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*5 + INTERP_16_MASK_2(p2)*2 + INTERP_16_MASK_2(p3)*1) / 8); -} - -static inline u16 interp_16_332(u16 p1, u16 p2, u16 p3) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*3 + INTERP_16_MASK_1(p2)*3 + INTERP_16_MASK_1(p3)*2) / 8) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*3 + INTERP_16_MASK_2(p2)*3 + INTERP_16_MASK_2(p3)*2) / 8); -} - -static inline u16 interp_16_611(u16 p1, u16 p2, u16 p3) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*6 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 8) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*6 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 8); -} - -static inline u16 interp_16_71(u16 p1, u16 p2) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*7 + INTERP_16_MASK_1(p2)) / 8) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*7 + INTERP_16_MASK_2(p2)) / 8); -} - -static inline u16 interp_16_211(u16 p1, u16 p2, u16 p3) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*2 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 4) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*2 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 4); -} - -static inline u16 interp_16_772(u16 p1, u16 p2, u16 p3) -{ - return INTERP_16_MASK_1(((INTERP_16_MASK_1(p1) + INTERP_16_MASK_1(p2))*7 + INTERP_16_MASK_1(p3)*2) / 16) - | INTERP_16_MASK_2(((INTERP_16_MASK_2(p1) + INTERP_16_MASK_2(p2))*7 + INTERP_16_MASK_2(p3)*2) / 16); -} - -static inline u16 interp_16_11(u16 p1, u16 p2) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1) + INTERP_16_MASK_1(p2)) / 2) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1) + INTERP_16_MASK_2(p2)) / 2); -} - -static inline u16 interp_16_31(u16 p1, u16 p2) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*3 + INTERP_16_MASK_1(p2)) / 4) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*3 + INTERP_16_MASK_2(p2)) / 4); -} - -static inline u16 interp_16_1411(u16 p1, u16 p2, u16 p3) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*14 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 16) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*14 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 16); -} - -static inline u16 interp_16_431(u16 p1, u16 p2, u16 p3) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*4 + INTERP_16_MASK_1(p2)*3 + INTERP_16_MASK_1(p3)) / 8) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*4 + INTERP_16_MASK_2(p2)*3 + INTERP_16_MASK_2(p3)) / 8); -} - -static inline u16 interp_16_53(u16 p1, u16 p2) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*5 + INTERP_16_MASK_1(p2)*3) / 8) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*5 + INTERP_16_MASK_2(p2)*3) / 8); -} - -static inline u16 interp_16_151(u16 p1, u16 p2) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*15 + INTERP_16_MASK_1(p2)) / 16) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*15 + INTERP_16_MASK_2(p2)) / 16); -} - -static inline u16 interp_16_97(u16 p1, u16 p2) -{ - return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*9 + INTERP_16_MASK_1(p2)*7) / 16) - | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*9 + INTERP_16_MASK_2(p2)*7) / 16); -} - -#define INTERP_32_MASK_1(v) (v & 0xFF00FF) -#define INTERP_32_MASK_2(v) (v & 0x00FF00) - -static inline u32 interp_32_521(u32 p1, u32 p2, u32 p3) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*5 + INTERP_32_MASK_1(p2)*2 + INTERP_32_MASK_1(p3)*1) / 8) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*5 + INTERP_32_MASK_2(p2)*2 + INTERP_32_MASK_2(p3)*1) / 8); -} - -static inline u32 interp_32_332(u32 p1, u32 p2, u32 p3) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*3 + INTERP_32_MASK_1(p2)*3 + INTERP_32_MASK_1(p3)*2) / 8) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*3 + INTERP_32_MASK_2(p2)*3 + INTERP_32_MASK_2(p3)*2) / 8); -} - -static inline u32 interp_32_211(u32 p1, u32 p2, u32 p3) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*2 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 4) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*2 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 4); -} - -static inline u32 interp_32_611(u32 p1, u32 p2, u32 p3) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*6 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 8) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*6 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 8); -} - -static inline u32 interp_32_71(u32 p1, u32 p2) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*7 + INTERP_32_MASK_1(p2)) / 8) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*7 + INTERP_32_MASK_2(p2)) / 8); -} - -static inline u32 interp_32_772(u32 p1, u32 p2, u32 p3) -{ - return INTERP_32_MASK_1(((INTERP_32_MASK_1(p1) + INTERP_32_MASK_1(p2))*7 + INTERP_32_MASK_1(p3)*2) / 16) - | INTERP_32_MASK_2(((INTERP_32_MASK_2(p1) + INTERP_32_MASK_2(p2))*7 + INTERP_32_MASK_2(p3)*2) / 16); -} - -static inline u32 interp_32_11(u32 p1, u32 p2) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1) + INTERP_32_MASK_1(p2)) / 2) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1) + INTERP_32_MASK_2(p2)) / 2); -} - -static inline u32 interp_32_31(u32 p1, u32 p2) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*3 + INTERP_32_MASK_1(p2)) / 4) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*3 + INTERP_32_MASK_2(p2)) / 4); -} - -static inline u32 interp_32_1411(u32 p1, u32 p2, u32 p3) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*14 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 16) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*14 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 16); -} - -static inline u32 interp_32_431(u32 p1, u32 p2, u32 p3) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*4 + INTERP_32_MASK_1(p2)*3 + INTERP_32_MASK_1(p3)) / 8) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*4 + INTERP_32_MASK_2(p2)*3 + INTERP_32_MASK_2(p3)) / 8); -} - -static inline u32 interp_32_53(u32 p1, u32 p2) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*5 + INTERP_32_MASK_1(p2)*3) / 8) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*5 + INTERP_32_MASK_2(p2)*3) / 8); -} - -static inline u32 interp_32_151(u32 p1, u32 p2) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*15 + INTERP_32_MASK_1(p2)) / 16) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*15 + INTERP_32_MASK_2(p2)) / 16); -} - -static inline u32 interp_32_97(u32 p1, u32 p2) -{ - return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*9 + INTERP_32_MASK_1(p2)*7) / 16) - | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*9 + INTERP_32_MASK_2(p2)*7) / 16); -} - -/***************************************************************************/ -/* diff */ - -#define INTERP_Y_LIMIT (0x30*4) -#define INTERP_U_LIMIT (0x07*4) -#define INTERP_V_LIMIT (0x06*8) - -static int interp_16_diff(u16 p1, u16 p2) -{ - int r, g, b; - int y, u, v; - - if (p1 == p2) - return 0; - - if (interp_bits_per_pixel == 16) { - b = (int)((p1 & 0x1F) - (p2 & 0x1F)) << 3; - g = (int)((p1 & 0x7E0) - (p2 & 0x7E0)) >> 3; - r = (int)((p1 & 0xF800) - (p2 & 0xF800)) >> 8; - } else { - b = (int)((p1 & 0x1F) - (p2 & 0x1F)) << 3; - g = (int)((p1 & 0x3E0) - (p2 & 0x3E0)) >> 2; - r = (int)((p1 & 0x7C00) - (p2 & 0x7C00)) >> 7; - } - - y = r + g + b; - u = r - b; - v = -r + 2*g - b; - - if (y < -INTERP_Y_LIMIT || y > INTERP_Y_LIMIT) - return 1; - - if (u < -INTERP_U_LIMIT || u > INTERP_U_LIMIT) - return 1; - - if (v < -INTERP_V_LIMIT || v > INTERP_V_LIMIT) - return 1; - - return 0; -} - -static int interp_32_diff(u32 p1, u32 p2) -{ - int r, g, b; - int y, u, v; - - if ((p1 & 0xF8F8F8) == (p2 & 0xF8F8F8)) - return 0; - - b = (int)((p1 & 0xFF) - (p2 & 0xFF)); - g = (int)((p1 & 0xFF00) - (p2 & 0xFF00)) >> 8; - r = (int)((p1 & 0xFF0000) - (p2 & 0xFF0000)) >> 16; - - y = r + g + b; - u = r - b; - v = -r + 2*g - b; - - if (y < -INTERP_Y_LIMIT || y > INTERP_Y_LIMIT) - return 1; - - if (u < -INTERP_U_LIMIT || u > INTERP_U_LIMIT) - return 1; - - if (v < -INTERP_V_LIMIT || v > INTERP_V_LIMIT) - return 1; - - return 0; -} - -static void interp_set(unsigned bits_per_pixel) -{ - interp_bits_per_pixel = bits_per_pixel; - - switch (bits_per_pixel) { - case 15 : - interp_mask[0] = 0x7C1F; - interp_mask[1] = 0x03E0; - break; - case 16 : - interp_mask[0] = 0xF81F; - interp_mask[1] = 0x07E0; - break; - case 32 : - interp_mask[0] = 0xFF00FF; - interp_mask[1] = 0x00FF00; - break; - } -} - -#endif +/* + * This file is part of the Advance project. + * + * Copyright (C) 2003 Andrea Mazzoleni + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * In addition, as a special exception, Andrea Mazzoleni + * gives permission to link the code of this program with + * the MAME library (or with modified versions of MAME that use the + * same license as MAME), and distribute linked combinations including + * the two. You must obey the GNU General Public License in all + * respects for all of the code used other than MAME. If you modify + * this file, you may extend this exception to your version of the + * file, but you are not obligated to do so. If you do not wish to + * do so, delete this exception statement from your version. + */ + +#ifndef __INTERP_H +#define __INTERP_H + +/***************************************************************************/ +/* Basic types */ + +/***************************************************************************/ +/* interpolation */ + +static unsigned interp_mask[2]; +static unsigned interp_bits_per_pixel; + +#define INTERP_16_MASK_1(v) (v & interp_mask[0]) +#define INTERP_16_MASK_2(v) (v & interp_mask[1]) + +static inline u16 interp_16_521(u16 p1, u16 p2, u16 p3) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*5 + INTERP_16_MASK_1(p2)*2 + INTERP_16_MASK_1(p3)*1) / 8) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*5 + INTERP_16_MASK_2(p2)*2 + INTERP_16_MASK_2(p3)*1) / 8); +} + +static inline u16 interp_16_332(u16 p1, u16 p2, u16 p3) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*3 + INTERP_16_MASK_1(p2)*3 + INTERP_16_MASK_1(p3)*2) / 8) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*3 + INTERP_16_MASK_2(p2)*3 + INTERP_16_MASK_2(p3)*2) / 8); +} + +static inline u16 interp_16_611(u16 p1, u16 p2, u16 p3) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*6 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 8) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*6 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 8); +} + +static inline u16 interp_16_71(u16 p1, u16 p2) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*7 + INTERP_16_MASK_1(p2)) / 8) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*7 + INTERP_16_MASK_2(p2)) / 8); +} + +static inline u16 interp_16_211(u16 p1, u16 p2, u16 p3) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*2 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 4) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*2 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 4); +} + +static inline u16 interp_16_772(u16 p1, u16 p2, u16 p3) +{ + return INTERP_16_MASK_1(((INTERP_16_MASK_1(p1) + INTERP_16_MASK_1(p2))*7 + INTERP_16_MASK_1(p3)*2) / 16) + | INTERP_16_MASK_2(((INTERP_16_MASK_2(p1) + INTERP_16_MASK_2(p2))*7 + INTERP_16_MASK_2(p3)*2) / 16); +} + +static inline u16 interp_16_11(u16 p1, u16 p2) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1) + INTERP_16_MASK_1(p2)) / 2) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1) + INTERP_16_MASK_2(p2)) / 2); +} + +static inline u16 interp_16_31(u16 p1, u16 p2) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*3 + INTERP_16_MASK_1(p2)) / 4) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*3 + INTERP_16_MASK_2(p2)) / 4); +} + +static inline u16 interp_16_1411(u16 p1, u16 p2, u16 p3) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*14 + INTERP_16_MASK_1(p2) + INTERP_16_MASK_1(p3)) / 16) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*14 + INTERP_16_MASK_2(p2) + INTERP_16_MASK_2(p3)) / 16); +} + +static inline u16 interp_16_431(u16 p1, u16 p2, u16 p3) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*4 + INTERP_16_MASK_1(p2)*3 + INTERP_16_MASK_1(p3)) / 8) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*4 + INTERP_16_MASK_2(p2)*3 + INTERP_16_MASK_2(p3)) / 8); +} + +static inline u16 interp_16_53(u16 p1, u16 p2) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*5 + INTERP_16_MASK_1(p2)*3) / 8) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*5 + INTERP_16_MASK_2(p2)*3) / 8); +} + +static inline u16 interp_16_151(u16 p1, u16 p2) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*15 + INTERP_16_MASK_1(p2)) / 16) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*15 + INTERP_16_MASK_2(p2)) / 16); +} + +static inline u16 interp_16_97(u16 p1, u16 p2) +{ + return INTERP_16_MASK_1((INTERP_16_MASK_1(p1)*9 + INTERP_16_MASK_1(p2)*7) / 16) + | INTERP_16_MASK_2((INTERP_16_MASK_2(p1)*9 + INTERP_16_MASK_2(p2)*7) / 16); +} + +#define INTERP_32_MASK_1(v) (v & 0xFF00FF) +#define INTERP_32_MASK_2(v) (v & 0x00FF00) + +static inline u32 interp_32_521(u32 p1, u32 p2, u32 p3) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*5 + INTERP_32_MASK_1(p2)*2 + INTERP_32_MASK_1(p3)*1) / 8) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*5 + INTERP_32_MASK_2(p2)*2 + INTERP_32_MASK_2(p3)*1) / 8); +} + +static inline u32 interp_32_332(u32 p1, u32 p2, u32 p3) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*3 + INTERP_32_MASK_1(p2)*3 + INTERP_32_MASK_1(p3)*2) / 8) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*3 + INTERP_32_MASK_2(p2)*3 + INTERP_32_MASK_2(p3)*2) / 8); +} + +static inline u32 interp_32_211(u32 p1, u32 p2, u32 p3) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*2 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 4) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*2 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 4); +} + +static inline u32 interp_32_611(u32 p1, u32 p2, u32 p3) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*6 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 8) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*6 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 8); +} + +static inline u32 interp_32_71(u32 p1, u32 p2) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*7 + INTERP_32_MASK_1(p2)) / 8) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*7 + INTERP_32_MASK_2(p2)) / 8); +} + +static inline u32 interp_32_772(u32 p1, u32 p2, u32 p3) +{ + return INTERP_32_MASK_1(((INTERP_32_MASK_1(p1) + INTERP_32_MASK_1(p2))*7 + INTERP_32_MASK_1(p3)*2) / 16) + | INTERP_32_MASK_2(((INTERP_32_MASK_2(p1) + INTERP_32_MASK_2(p2))*7 + INTERP_32_MASK_2(p3)*2) / 16); +} + +static inline u32 interp_32_11(u32 p1, u32 p2) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1) + INTERP_32_MASK_1(p2)) / 2) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1) + INTERP_32_MASK_2(p2)) / 2); +} + +static inline u32 interp_32_31(u32 p1, u32 p2) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*3 + INTERP_32_MASK_1(p2)) / 4) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*3 + INTERP_32_MASK_2(p2)) / 4); +} + +static inline u32 interp_32_1411(u32 p1, u32 p2, u32 p3) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*14 + INTERP_32_MASK_1(p2) + INTERP_32_MASK_1(p3)) / 16) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*14 + INTERP_32_MASK_2(p2) + INTERP_32_MASK_2(p3)) / 16); +} + +static inline u32 interp_32_431(u32 p1, u32 p2, u32 p3) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*4 + INTERP_32_MASK_1(p2)*3 + INTERP_32_MASK_1(p3)) / 8) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*4 + INTERP_32_MASK_2(p2)*3 + INTERP_32_MASK_2(p3)) / 8); +} + +static inline u32 interp_32_53(u32 p1, u32 p2) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*5 + INTERP_32_MASK_1(p2)*3) / 8) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*5 + INTERP_32_MASK_2(p2)*3) / 8); +} + +static inline u32 interp_32_151(u32 p1, u32 p2) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*15 + INTERP_32_MASK_1(p2)) / 16) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*15 + INTERP_32_MASK_2(p2)) / 16); +} + +static inline u32 interp_32_97(u32 p1, u32 p2) +{ + return INTERP_32_MASK_1((INTERP_32_MASK_1(p1)*9 + INTERP_32_MASK_1(p2)*7) / 16) + | INTERP_32_MASK_2((INTERP_32_MASK_2(p1)*9 + INTERP_32_MASK_2(p2)*7) / 16); +} + +/***************************************************************************/ +/* diff */ + +#define INTERP_Y_LIMIT (0x30*4) +#define INTERP_U_LIMIT (0x07*4) +#define INTERP_V_LIMIT (0x06*8) + +static int interp_16_diff(u16 p1, u16 p2) +{ + int r, g, b; + int y, u, v; + + if (p1 == p2) + return 0; + + if (interp_bits_per_pixel == 16) + { + b = (int)((p1 & 0x1F) - (p2 & 0x1F)) << 3; + g = (int)((p1 & 0x7E0) - (p2 & 0x7E0)) >> 3; + r = (int)((p1 & 0xF800) - (p2 & 0xF800)) >> 8; + } + else + { + b = (int)((p1 & 0x1F) - (p2 & 0x1F)) << 3; + g = (int)((p1 & 0x3E0) - (p2 & 0x3E0)) >> 2; + r = (int)((p1 & 0x7C00) - (p2 & 0x7C00)) >> 7; + } + + y = r + g + b; + u = r - b; + v = -r + 2*g - b; + + if (y < -INTERP_Y_LIMIT || y > INTERP_Y_LIMIT) + return 1; + + if (u < -INTERP_U_LIMIT || u > INTERP_U_LIMIT) + return 1; + + if (v < -INTERP_V_LIMIT || v > INTERP_V_LIMIT) + return 1; + + return 0; +} + +static int interp_32_diff(u32 p1, u32 p2) +{ + int r, g, b; + int y, u, v; + + if ((p1 & 0xF8F8F8) == (p2 & 0xF8F8F8)) + return 0; + + b = (int)((p1 & 0xFF) - (p2 & 0xFF)); + g = (int)((p1 & 0xFF00) - (p2 & 0xFF00)) >> 8; + r = (int)((p1 & 0xFF0000) - (p2 & 0xFF0000)) >> 16; + + y = r + g + b; + u = r - b; + v = -r + 2*g - b; + + if (y < -INTERP_Y_LIMIT || y > INTERP_Y_LIMIT) + return 1; + + if (u < -INTERP_U_LIMIT || u > INTERP_U_LIMIT) + return 1; + + if (v < -INTERP_V_LIMIT || v > INTERP_V_LIMIT) + return 1; + + return 0; +} + +static void interp_set(unsigned bits_per_pixel) +{ + interp_bits_per_pixel = bits_per_pixel; + + switch (bits_per_pixel) + { + case 15 : + interp_mask[0] = 0x7C1F; + interp_mask[1] = 0x03E0; + break; + case 16 : + interp_mask[0] = 0xF81F; + interp_mask[1] = 0x07E0; + break; + case 32 : + interp_mask[0] = 0xFF00FF; + interp_mask[1] = 0x00FF00; + break; + } +} + +#endif diff --git a/source/vba/pixel.cpp b/source/vba/pixel.cpp index 21a55a37..cfa7c7cd 100644 --- a/source/vba/pixel.cpp +++ b/source/vba/pixel.cpp @@ -1,150 +1,157 @@ -// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. -// Copyright (C) 1999-2003 Forgotten -// Copyright (C) 2004 Forgotten and the VBA development team - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or(at your option) -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "System.h" - -extern int RGB_LOW_BITS_MASK; - -void Pixelate(u8 *srcPtr, u32 srcPitch, u8 *deltaPtr, - u8 *dstPtr, u32 dstPitch, int width, int height) -{ - u8 *nextLine, *finish; - u32 colorMask = ~(RGB_LOW_BITS_MASK | (RGB_LOW_BITS_MASK << 16)); - - nextLine = dstPtr + dstPitch; - - do { - u32 *bP = (u32 *) srcPtr; - u32 *xP = (u32 *) deltaPtr; - u32 *dP = (u32 *) dstPtr; - u32 *nL = (u32 *) nextLine; - u32 currentPixel; - u32 nextPixel; - u32 currentDelta; - u32 nextDelta; - - finish = (u8 *) bP + ((width+2) << 1); - nextPixel = *bP++; - nextDelta = *xP++; - - do { - currentPixel = nextPixel; - currentDelta = nextDelta; - nextPixel = *bP++; - nextDelta = *xP++; - - if ((nextPixel != nextDelta) || (currentPixel != currentDelta)) { - u32 colorA, colorB, product; - - *(xP - 2) = currentPixel; -#ifdef WORDS_BIGENDIAN - colorA = currentPixel >> 16; - colorB = currentPixel & 0xffff; -#else - colorA = currentPixel & 0xffff; - colorB = currentPixel >> 16; -#endif - product = (((colorA & colorMask) >> 1) & colorMask) >> 1; - -#ifdef WORDS_BIGENDIAN - *(nL) = (product << 16) | (product); - *(dP) = (colorA << 16) | product; -#else - *(nL) = product | (product << 16); - *(dP) = colorA | (product << 16); -#endif - -#ifdef WORDS_BIGENDIAN - colorA = nextPixel >> 16; -#else - colorA = nextPixel & 0xffff; -#endif - product = (((colorB & colorMask) >> 1) & colorMask) >> 1; -#ifdef WORDS_BIGENDIAN - *(nL + 1) = (product << 16) | (product); - *(dP + 1) = (colorB << 16) | (product); -#else - *(nL + 1) = (product) | (product << 16); - *(dP + 1) = (colorB) | (product << 16); -#endif - } - - dP += 2; - nL += 2; - } while ((u8 *) bP < finish); - - deltaPtr += srcPitch; - srcPtr += srcPitch; - dstPtr += dstPitch << 1; - nextLine += dstPitch << 1; - } - while (--height); -} - -void Pixelate32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, - u8 *dstPtr, u32 dstPitch, int width, int height) -{ - u8 *nextLine, *finish; - u32 colorMask = ~RGB_LOW_BITS_MASK; - - nextLine = dstPtr + dstPitch; - - do { - u32 *bP = (u32 *) srcPtr; - // u32 *xP = (u32 *) deltaPtr; - u32 *dP = (u32 *) dstPtr; - u32 *nL = (u32 *) nextLine; - u32 currentPixel; - u32 nextPixel; - - finish = (u8 *) bP + ((width+1) << 2); - nextPixel = *bP++; - - do { - currentPixel = nextPixel; - nextPixel = *bP++; - - u32 colorA, colorB, product; - - colorA = currentPixel; - colorB = nextPixel; - - product = (((colorA & colorMask) >> 1) & colorMask) >> 1; - *(nL) = product; - *(nL+1) = product; - *(dP) = colorA; - *(dP+1) = product; - - nextPixel = *bP++; - colorA = nextPixel; - product = (((colorB & colorMask) >> 1) & colorMask) >> 1; - *(nL + 2) = product; - *(nL + 3) = product; - *(dP + 2) = colorB; - *(dP + 3) = product; - - dP += 4; - nL += 4; - } while ((u8 *) bP < finish); - - srcPtr += srcPitch; - dstPtr += dstPitch << 1; - nextLine += dstPitch << 1; - } - while (--height); -} +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "System.h" + +extern int RGB_LOW_BITS_MASK; + +void Pixelate(u8 *srcPtr, u32 srcPitch, u8 *deltaPtr, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u8 *nextLine, *finish; + u32 colorMask = ~(RGB_LOW_BITS_MASK | (RGB_LOW_BITS_MASK << 16)); + + nextLine = dstPtr + dstPitch; + + do + { + u32 *bP = (u32 *) srcPtr; + u32 *xP = (u32 *) deltaPtr; + u32 *dP = (u32 *) dstPtr; + u32 *nL = (u32 *) nextLine; + u32 currentPixel; + u32 nextPixel; + u32 currentDelta; + u32 nextDelta; + + finish = (u8 *) bP + ((width+2) << 1); + nextPixel = *bP++; + nextDelta = *xP++; + + do + { + currentPixel = nextPixel; + currentDelta = nextDelta; + nextPixel = *bP++; + nextDelta = *xP++; + + if ((nextPixel != nextDelta) || (currentPixel != currentDelta)) + { + u32 colorA, colorB, product; + + *(xP - 2) = currentPixel; +#ifdef WORDS_BIGENDIAN + colorA = currentPixel >> 16; + colorB = currentPixel & 0xffff; +#else + colorA = currentPixel & 0xffff; + colorB = currentPixel >> 16; +#endif + product = (((colorA & colorMask) >> 1) & colorMask) >> 1; + +#ifdef WORDS_BIGENDIAN + *(nL) = (product << 16) | (product); + *(dP) = (colorA << 16) | product; +#else + *(nL) = product | (product << 16); + *(dP) = colorA | (product << 16); +#endif + +#ifdef WORDS_BIGENDIAN + colorA = nextPixel >> 16; +#else + colorA = nextPixel & 0xffff; +#endif + product = (((colorB & colorMask) >> 1) & colorMask) >> 1; +#ifdef WORDS_BIGENDIAN + *(nL + 1) = (product << 16) | (product); + *(dP + 1) = (colorB << 16) | (product); +#else + *(nL + 1) = (product) | (product << 16); + *(dP + 1) = (colorB) | (product << 16); +#endif + } + + dP += 2; + nL += 2; + } + while ((u8 *) bP < finish); + + deltaPtr += srcPitch; + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + nextLine += dstPitch << 1; + } + while (--height); +} + +void Pixelate32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u8 *nextLine, *finish; + u32 colorMask = ~RGB_LOW_BITS_MASK; + + nextLine = dstPtr + dstPitch; + + do + { + u32 *bP = (u32 *) srcPtr; + // u32 *xP = (u32 *) deltaPtr; + u32 *dP = (u32 *) dstPtr; + u32 *nL = (u32 *) nextLine; + u32 currentPixel; + u32 nextPixel; + + finish = (u8 *) bP + ((width+1) << 2); + nextPixel = *bP++; + + do + { + currentPixel = nextPixel; + nextPixel = *bP++; + + u32 colorA, colorB, product; + + colorA = currentPixel; + colorB = nextPixel; + + product = (((colorA & colorMask) >> 1) & colorMask) >> 1; + *(nL) = product; + *(nL+1) = product; + *(dP) = colorA; + *(dP+1) = product; + + nextPixel = *bP++; + colorA = nextPixel; + product = (((colorB & colorMask) >> 1) & colorMask) >> 1; + *(nL + 2) = product; + *(nL + 3) = product; + *(dP + 2) = colorB; + *(dP + 3) = product; + + dP += 4; + nL += 4; + } + while ((u8 *) bP < finish); + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + nextLine += dstPitch << 1; + } + while (--height); +} diff --git a/source/vba/simple2x.cpp b/source/vba/simple2x.cpp new file mode 100644 index 00000000..9297a5c7 --- /dev/null +++ b/source/vba/simple2x.cpp @@ -0,0 +1,112 @@ +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#include "System.h" + +void Simple2x(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u8 *nextLine, *finish; + + nextLine = dstPtr + dstPitch; + + do + { + u32 *bP = (u32 *) srcPtr; + u32 *dP = (u32 *) dstPtr; + u32 *nL = (u32 *) nextLine; + u32 currentPixel; + + finish = (u8 *) bP + ((width+2) << 1); + currentPixel = *bP++; + + do + { +#ifdef WORDS_BIGENDIAN + u32 color = currentPixel >> 16; +#else + u32 color = currentPixel & 0xffff; +#endif + + color = color | (color << 16); + + *(dP) = color; + *(nL) = color; + +#ifdef WORDS_BIGENDIAN + color = currentPixel & 0xffff; +#else + color = currentPixel >> 16; +#endif + color = color| (color << 16); + *(dP + 1) = color; + *(nL + 1) = color; + + currentPixel = *bP++; + + dP += 2; + nL += 2; + } + while ((u8 *) bP < finish); + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + nextLine += dstPitch << 1; + } + while (--height); +} + +void Simple2x32(u8 *srcPtr, u32 srcPitch, u8 * /* deltaPtr */, + u8 *dstPtr, u32 dstPitch, int width, int height) +{ + u8 *nextLine, *finish; + + nextLine = dstPtr + dstPitch; + + do + { + u32 *bP = (u32 *) srcPtr; + u32 *dP = (u32 *) dstPtr; + u32 *nL = (u32 *) nextLine; + u32 currentPixel; + + finish = (u8 *) bP + ((width+1) << 2); + currentPixel = *bP++; + + do + { + u32 color = currentPixel; + + *(dP) = color; + *(dP+1) = color; + *(nL) = color; + *(nL + 1) = color; + + currentPixel = *bP++; + + dP += 2; + nL += 2; + } + while ((u8 *) bP < finish); + + srcPtr += srcPitch; + dstPtr += dstPitch << 1; + nextLine += dstPitch << 1; + } + while (--height); +} diff --git a/source/vba/thumb.h b/source/vba/thumb.h new file mode 100644 index 00000000..d4b2830b --- /dev/null +++ b/source/vba/thumb.h @@ -0,0 +1,2474 @@ +// -*- C++ -*- +// VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. +// Copyright (C) 1999-2003 Forgotten +// Copyright (C) 2004 Forgotten and the VBA development team + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or(at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifdef C_CORE +#define NEG(i) ((i) >> 31) +#define POS(i) ((~(i)) >> 31) +#define ADDCARRY(a, b, c) \ + C_FLAG = ((NEG(a) & NEG(b)) |\ + (NEG(a) & POS(c)) |\ + (NEG(b) & POS(c))) ? true : false; +#define ADDOVERFLOW(a, b, c) \ + V_FLAG = ((NEG(a) & NEG(b) & POS(c)) |\ + (POS(a) & POS(b) & NEG(c))) ? true : false; +#define SUBCARRY(a, b, c) \ + C_FLAG = ((NEG(a) & POS(b)) |\ + (NEG(a) & POS(c)) |\ + (POS(b) & POS(c))) ? true : false; +#define SUBOVERFLOW(a, b, c)\ + V_FLAG = ((NEG(a) & POS(b) & POS(c)) |\ + (POS(a) & NEG(b) & NEG(c))) ? true : false; +#define ADD_RD_RS_RN \ + {\ + u32 lhs = reg[source].I;\ + u32 rhs = value;\ + u32 res = lhs + rhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } +#define ADD_RD_RS_O3 \ + {\ + u32 lhs = reg[source].I;\ + u32 rhs = value;\ + u32 res = lhs + rhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } +#define ADD_RN_O8(d) \ + {\ + u32 lhs = reg[(d)].I;\ + u32 rhs = (opcode & 255);\ + u32 res = lhs + rhs;\ + reg[(d)].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } +#define CMN_RD_RS \ + {\ + u32 lhs = reg[dest].I;\ + u32 rhs = value;\ + u32 res = lhs + rhs;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } +#define ADC_RD_RS \ + {\ + u32 lhs = reg[dest].I;\ + u32 rhs = value;\ + u32 res = lhs + rhs + (u32)C_FLAG;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + ADDCARRY(lhs, rhs, res);\ + ADDOVERFLOW(lhs, rhs, res);\ + } +#define SUB_RD_RS_RN \ + {\ + u32 lhs = reg[source].I;\ + u32 rhs = value;\ + u32 res = lhs - rhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define SUB_RD_RS_O3 \ + {\ + u32 lhs = reg[source].I;\ + u32 rhs = value;\ + u32 res = lhs - rhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define SUB_RN_O8(d) \ + {\ + u32 lhs = reg[(d)].I;\ + u32 rhs = (opcode & 255);\ + u32 res = lhs - rhs;\ + reg[(d)].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define CMP_RN_O8(d) \ + {\ + u32 lhs = reg[(d)].I;\ + u32 rhs = (opcode & 255);\ + u32 res = lhs - rhs;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define SBC_RD_RS \ + {\ + u32 lhs = reg[dest].I;\ + u32 rhs = value;\ + u32 res = lhs - rhs - !((u32)C_FLAG);\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#define LSL_RD_RM_I5 \ + {\ + C_FLAG = (reg[source].I >> (32 - shift)) & 1 ? true : false;\ + value = reg[source].I << shift;\ + } +#define LSL_RD_RS \ + {\ + C_FLAG = (reg[dest].I >> (32 - value)) & 1 ? true : false;\ + value = reg[dest].I << value;\ + } +#define LSR_RD_RM_I5 \ + {\ + C_FLAG = (reg[source].I >> (shift - 1)) & 1 ? true : false;\ + value = reg[source].I >> shift;\ + } +#define LSR_RD_RS \ + {\ + C_FLAG = (reg[dest].I >> (value - 1)) & 1 ? true : false;\ + value = reg[dest].I >> value;\ + } +#define ASR_RD_RM_I5 \ + {\ + C_FLAG = ((s32)reg[source].I >> (int)(shift - 1)) & 1 ? true : false;\ + value = (s32)reg[source].I >> (int)shift;\ + } +#define ASR_RD_RS \ + {\ + C_FLAG = ((s32)reg[dest].I >> (int)(value - 1)) & 1 ? true : false;\ + value = (s32)reg[dest].I >> (int)value;\ + } +#define ROR_RD_RS \ + {\ + C_FLAG = (reg[dest].I >> (value - 1)) & 1 ? true : false;\ + value = ((reg[dest].I << (32 - value)) |\ + (reg[dest].I >> value));\ + } +#define NEG_RD_RS \ + {\ + u32 lhs = reg[source].I;\ + u32 rhs = 0;\ + u32 res = rhs - lhs;\ + reg[dest].I = res;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(rhs, lhs, res);\ + SUBOVERFLOW(rhs, lhs, res);\ + } +#define CMP_RD_RS \ + {\ + u32 lhs = reg[dest].I;\ + u32 rhs = value;\ + u32 res = lhs - rhs;\ + Z_FLAG = (res == 0) ? true : false;\ + N_FLAG = NEG(res) ? true : false;\ + SUBCARRY(lhs, rhs, res);\ + SUBOVERFLOW(lhs, rhs, res);\ + } +#else +#ifdef __GNUC__ +#ifdef __POWERPC__ + #define ADD_RD_RS_RN \ + { \ + register int Flags; \ + register int Result; \ + asm volatile("addco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[source].I), \ + "r" (value) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define ADD_RD_RS_O3 ADD_RD_RS_RN + #define ADD_RN_O8(d) \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("addco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[(d)].I), \ + "r" (opcode & 255) \ + ); \ + reg[(d)].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define CMN_RD_RS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("addco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[dest].I), \ + "r" (value) \ + ); \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define ADC_RD_RS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("mtspr xer, %4\n" \ + "addeo. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[dest].I), \ + "r" (value), \ + "r" (C_FLAG << 29) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define SUB_RD_RS_RN \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[source].I), \ + "r" (value) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define SUB_RD_RS_O3 SUB_RD_RS_RN + #define SUB_RN_O8(d) \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[(d)].I), \ + "r" (opcode & 255) \ + ); \ + reg[(d)].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define CMP_RN_O8(d) \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[(d)].I), \ + "r" (opcode & 255) \ + ); \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define SBC_RD_RS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("mtspr xer, %4\n" \ + "subfeo. %0, %3, %2\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[dest].I), \ + "r" (value), \ + "r" (C_FLAG << 29) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define LSL_RD_RM_I5 \ + {\ + C_FLAG = (reg[source].I >> (32 - shift)) & 1 ? true : false;\ + value = reg[source].I << shift;\ + } + #define LSL_RD_RS \ + {\ + C_FLAG = (reg[dest].I >> (32 - value)) & 1 ? true : false;\ + value = reg[dest].I << value;\ + } + #define LSR_RD_RM_I5 \ + {\ + C_FLAG = (reg[source].I >> (shift - 1)) & 1 ? true : false;\ + value = reg[source].I >> shift;\ + } + #define LSR_RD_RS \ + {\ + C_FLAG = (reg[dest].I >> (value - 1)) & 1 ? true : false;\ + value = reg[dest].I >> value;\ + } + #define ASR_RD_RM_I5 \ + {\ + C_FLAG = ((s32)reg[source].I >> (int)(shift - 1)) & 1 ? true : false;\ + value = (s32)reg[source].I >> (int)shift;\ + } + #define ASR_RD_RS \ + {\ + C_FLAG = ((s32)reg[dest].I >> (int)(value - 1)) & 1 ? true : false;\ + value = (s32)reg[dest].I >> (int)value;\ + } + #define ROR_RD_RS \ + {\ + C_FLAG = (reg[dest].I >> (value - 1)) & 1 ? true : false;\ + value = ((reg[dest].I << (32 - value)) |\ + (reg[dest].I >> value));\ + } + #define NEG_RD_RS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subfco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[source].I), \ + "r" (0) \ + ); \ + reg[dest].I = Result; \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } + #define CMP_RD_RS \ + {\ + register int Flags; \ + register int Result; \ + asm volatile("subco. %0, %2, %3\n" \ + "mcrxr cr1\n" \ + "mfcr %1\n" \ + : "=r" (Result), \ + "=r" (Flags) \ + : "r" (reg[dest].I), \ + "r" (value) \ + ); \ + Z_FLAG = (Flags >> 29) & 1; \ + N_FLAG = (Flags >> 31) & 1; \ + C_FLAG = (Flags >> 25) & 1; \ + V_FLAG = (Flags >> 26) & 1; \ + } +#else +#define ADD_RD_RS_RN \ + asm ("add %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[source].I)); +#define ADD_RD_RS_O3 \ + asm ("add %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[source].I)); +#define ADD_RN_O8(d) \ + asm ("add %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[(d)].I)\ + : "r" (opcode & 255), "b" (reg[(d)].I)); +#define CMN_RD_RS \ + asm ("add %0, %1;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : \ + : "r" (value), "r" (reg[dest].I):"1"); +#define ADC_RD_RS \ + asm ("bt $0, C_FLAG;"\ + "adc %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setcb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[dest].I)); +#define SUB_RD_RS_RN \ + asm ("sub %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[source].I)); +#define SUB_RD_RS_O3 \ + asm ("sub %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[source].I)); +#define SUB_RN_O8(d) \ + asm ("sub %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[(d)].I)\ + : "r" (opcode & 255), "b" (reg[(d)].I)); +#define CMP_RN_O8(d) \ + asm ("sub %0, %1;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : \ + : "r" (opcode & 255), "r" (reg[(d)].I) : "1"); +#define SBC_RD_RS \ + asm volatile ("bt $0, C_FLAG;"\ + "cmc;"\ + "sbb %1, %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "r" (value), "b" (reg[dest].I) : "cc", "memory"); +#define LSL_RD_RM_I5 \ + asm ("shl %%cl, %%eax;"\ + "setcb C_FLAG;"\ + : "=a" (value)\ + : "a" (reg[source].I), "c" (shift)); +#define LSL_RD_RS \ + asm ("shl %%cl, %%eax;"\ + "setcb C_FLAG;"\ + : "=a" (value)\ + : "a" (reg[dest].I), "c" (value)); +#define LSR_RD_RM_I5 \ + asm ("shr %%cl, %%eax;"\ + "setcb C_FLAG;"\ + : "=a" (value)\ + : "a" (reg[source].I), "c" (shift)); +#define LSR_RD_RS \ + asm ("shr %%cl, %%eax;"\ + "setcb C_FLAG;"\ + : "=a" (value)\ + : "a" (reg[dest].I), "c" (value)); +#define ASR_RD_RM_I5 \ + asm ("sar %%cl, %%eax;"\ + "setcb C_FLAG;"\ + : "=a" (value)\ + : "a" (reg[source].I), "c" (shift)); +#define ASR_RD_RS \ + asm ("sar %%cl, %%eax;"\ + "setcb C_FLAG;"\ + : "=a" (value)\ + : "a" (reg[dest].I), "c" (value)); +#define ROR_RD_RS \ + asm ("ror %%cl, %%eax;"\ + "setcb C_FLAG;"\ + : "=a" (value)\ + : "a" (reg[dest].I), "c" (value)); +#define NEG_RD_RS \ + asm ("neg %%ebx;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : "=b" (reg[dest].I)\ + : "b" (reg[source].I)); +#define CMP_RD_RS \ + asm ("sub %0, %1;"\ + "setsb N_FLAG;"\ + "setzb Z_FLAG;"\ + "setncb C_FLAG;"\ + "setob V_FLAG;"\ + : \ + : "r" (value), "r" (reg[dest].I):"1"); +#endif +#else +#define ADD_RD_RS_RN \ + {\ + __asm mov eax, source\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm add ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define ADD_RD_RS_O3 \ + {\ + __asm mov eax, source\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm add ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define ADD_RN_O8(d) \ + {\ + __asm mov ebx, opcode\ + __asm and ebx, 255\ + __asm add dword ptr [OFFSET reg+4*(d)], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define CMN_RD_RS \ + {\ + __asm mov eax, dest\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm add ebx, value\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define ADC_RD_RS \ + {\ + __asm mov ebx, dest\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm bt word ptr C_FLAG, 0\ + __asm adc ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define SUB_RD_RS_RN \ + {\ + __asm mov eax, source\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm sub ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define SUB_RD_RS_O3 \ + {\ + __asm mov eax, source\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm sub ebx, value\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define SUB_RN_O8(d) \ + {\ + __asm mov ebx, opcode\ + __asm and ebx, 255\ + __asm sub dword ptr [OFFSET reg + 4*(d)], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define CMP_RN_O8(d) \ + {\ + __asm mov eax, dword ptr [OFFSET reg+4*(d)]\ + __asm mov ebx, opcode\ + __asm and ebx, 255\ + __asm sub eax, ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define SBC_RD_RS \ + {\ + __asm mov ebx, dest\ + __asm mov ebx, dword ptr [OFFSET reg + 4*ebx]\ + __asm mov eax, value\ + __asm bt word ptr C_FLAG, 0\ + __asm cmc\ + __asm sbb ebx, eax\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg + 4*eax], ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define LSL_RD_RM_I5 \ + {\ + __asm mov eax, source\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm shl eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_FLAG\ + } +#define LSL_RD_RS \ + {\ + __asm mov eax, dest\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr value\ + __asm shl eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_FLAG\ + } +#define LSR_RD_RM_I5 \ + {\ + __asm mov eax, source\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr shift\ + __asm shr eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_FLAG\ + } +#define LSR_RD_RS \ + {\ + __asm mov eax, dest\ + __asm mov eax, dword ptr [OFFSET reg + 4 * eax]\ + __asm mov cl, byte ptr value\ + __asm shr eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_FLAG\ + } +#define ASR_RD_RM_I5 \ + {\ + __asm mov eax, source\ + __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ + __asm mov cl, byte ptr shift\ + __asm sar eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_FLAG\ + } +#define ASR_RD_RS \ + {\ + __asm mov eax, dest\ + __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ + __asm mov cl, byte ptr value\ + __asm sar eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_FLAG\ + } +#define ROR_RD_RS \ + {\ + __asm mov eax, dest\ + __asm mov eax, dword ptr [OFFSET reg + 4*eax]\ + __asm mov cl, byte ptr value\ + __asm ror eax, cl\ + __asm mov value, eax\ + __asm setc byte ptr C_FLAG\ + } +#define NEG_RD_RS \ + {\ + __asm mov ebx, source\ + __asm mov ebx, dword ptr [OFFSET reg+4*ebx]\ + __asm neg ebx\ + __asm mov eax, dest\ + __asm mov dword ptr [OFFSET reg+4*eax],ebx\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#define CMP_RD_RS \ + {\ + __asm mov eax, dest\ + __asm mov ebx, dword ptr [OFFSET reg+4*eax]\ + __asm sub ebx, value\ + __asm sets byte ptr N_FLAG\ + __asm setz byte ptr Z_FLAG\ + __asm setnc byte ptr C_FLAG\ + __asm seto byte ptr V_FLAG\ + } +#endif +#endif + +u32 opcode = CPUReadHalfWordQuick(armNextPC); +clockTicks = thumbCycles[opcode >> 8] + memoryWaitFetch[(armNextPC >> 24) & 15]; +#ifndef FINAL_VERSION +if(armNextPC == stop) { + armNextPC = armNextPC++; +} +#endif + +armNextPC = reg[15].I; +reg[15].I += 2; + +switch(opcode >> 8) { + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + { + // LSL Rd, Rm, #Imm 5 + int dest = opcode & 0x07; + int source = (opcode >> 3) & 0x07; + int shift = (opcode >> 6) & 0x1f; + u32 value; + + if(shift) { + LSL_RD_RM_I5; + } else { + value = reg[source].I; + } + reg[dest].I = value; + // C_FLAG set above + N_FLAG = (value & 0x80000000 ? true : false); + Z_FLAG = (value ? false : true); + } + break; + case 0x08: + case 0x09: + case 0x0a: + case 0x0b: + case 0x0c: + case 0x0d: + case 0x0e: + case 0x0f: + { + // LSR Rd, Rm, #Imm 5 + int dest = opcode & 0x07; + int source = (opcode >> 3) & 0x07; + int shift = (opcode >> 6) & 0x1f; + u32 value; + + if(shift) { + LSR_RD_RM_I5; + } else { + C_FLAG = reg[source].I & 0x80000000 ? true : false; + value = 0; + } + reg[dest].I = value; + // C_FLAG set above + N_FLAG = (value & 0x80000000 ? true : false); + Z_FLAG = (value ? false : true); + } + break; + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + { + // ASR Rd, Rm, #Imm 5 + int dest = opcode & 0x07; + int source = (opcode >> 3) & 0x07; + int shift = (opcode >> 6) & 0x1f; + u32 value; + + if(shift) { + ASR_RD_RM_I5; + } else { + if(reg[source].I & 0x80000000) { + value = 0xFFFFFFFF; + C_FLAG = true; + } else { + value = 0; + C_FLAG = false; + } + } + reg[dest].I = value; + // C_FLAG set above + N_FLAG = (value & 0x80000000 ? true : false); + Z_FLAG = (value ? false :true); + } + break; + case 0x18: + case 0x19: + { + // ADD Rd, Rs, Rn + int dest = opcode & 0x07; + int source = (opcode >> 3) & 0x07; + u32 value = reg[(opcode>>6)& 0x07].I; + ADD_RD_RS_RN; + } + break; + case 0x1a: + case 0x1b: + { + // SUB Rd, Rs, Rn + int dest = opcode & 0x07; + int source = (opcode >> 3) & 0x07; + u32 value = reg[(opcode>>6)& 0x07].I; + SUB_RD_RS_RN; + } + break; + case 0x1c: + case 0x1d: + { + // ADD Rd, Rs, #Offset3 + int dest = opcode & 0x07; + int source = (opcode >> 3) & 0x07; + u32 value = (opcode >> 6) & 7; + ADD_RD_RS_O3; + } + break; + case 0x1e: + case 0x1f: + { + // SUB Rd, Rs, #Offset3 + int dest = opcode & 0x07; + int source = (opcode >> 3) & 0x07; + u32 value = (opcode >> 6) & 7; + SUB_RD_RS_O3; + } + break; + case 0x20: + // MOV R0, #Offset8 + reg[0].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[0].I ? false : true); + break; + case 0x21: + // MOV R1, #Offset8 + reg[1].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[1].I ? false : true); + break; + case 0x22: + // MOV R2, #Offset8 + reg[2].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[2].I ? false : true); + break; + case 0x23: + // MOV R3, #Offset8 + reg[3].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[3].I ? false : true); + break; + case 0x24: + // MOV R4, #Offset8 + reg[4].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[4].I ? false : true); + break; + case 0x25: + // MOV R5, #Offset8 + reg[5].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[5].I ? false : true); + break; + case 0x26: + // MOV R6, #Offset8 + reg[6].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[6].I ? false : true); + break; + case 0x27: + // MOV R7, #Offset8 + reg[7].I = opcode & 255; + N_FLAG = false; + Z_FLAG = (reg[7].I ? false : true); + break; + case 0x28: + // CMP R0, #Offset8 + CMP_RN_O8(0); + break; + case 0x29: + // CMP R1, #Offset8 + CMP_RN_O8(1); + break; + case 0x2a: + // CMP R2, #Offset8 + CMP_RN_O8(2); + break; + case 0x2b: + // CMP R3, #Offset8 + CMP_RN_O8(3); + break; + case 0x2c: + // CMP R4, #Offset8 + CMP_RN_O8(4); + break; + case 0x2d: + // CMP R5, #Offset8 + CMP_RN_O8(5); + break; + case 0x2e: + // CMP R6, #Offset8 + CMP_RN_O8(6); + break; + case 0x2f: + // CMP R7, #Offset8 + CMP_RN_O8(7); + break; + case 0x30: + // ADD R0,#Offset8 + ADD_RN_O8(0); + break; + case 0x31: + // ADD R1,#Offset8 + ADD_RN_O8(1); + break; + case 0x32: + // ADD R2,#Offset8 + ADD_RN_O8(2); + break; + case 0x33: + // ADD R3,#Offset8 + ADD_RN_O8(3); + break; + case 0x34: + // ADD R4,#Offset8 + ADD_RN_O8(4); + break; + case 0x35: + // ADD R5,#Offset8 + ADD_RN_O8(5); + break; + case 0x36: + // ADD R6,#Offset8 + ADD_RN_O8(6); + break; + case 0x37: + // ADD R7,#Offset8 + ADD_RN_O8(7); + break; + case 0x38: + // SUB R0,#Offset8 + SUB_RN_O8(0); + break; + case 0x39: + // SUB R1,#Offset8 + SUB_RN_O8(1); + break; + case 0x3a: + // SUB R2,#Offset8 + SUB_RN_O8(2); + break; + case 0x3b: + // SUB R3,#Offset8 + SUB_RN_O8(3); + break; + case 0x3c: + // SUB R4,#Offset8 + SUB_RN_O8(4); + break; + case 0x3d: + // SUB R5,#Offset8 + SUB_RN_O8(5); + break; + case 0x3e: + // SUB R6,#Offset8 + SUB_RN_O8(6); + break; + case 0x3f: + // SUB R7,#Offset8 + SUB_RN_O8(7); + break; + case 0x40: + switch((opcode >> 6) & 3) { + case 0x00: + { + // AND Rd, Rs + int dest = opcode & 7; + reg[dest].I &= reg[(opcode >> 3)&7].I; + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + Z_FLAG = reg[dest].I ? false : true; +#ifdef BKPT_SUPPORT +#define THUMB_CONSOLE_OUTPUT(a,b) \ + if((opcode == 0x4000) && (reg[0].I == 0xC0DED00D)) {\ + extern void (*dbgOutput)(char *, u32);\ + dbgOutput((a), (b));\ + } +#else +#define THUMB_CONSOLE_OUTPUT(a,b) +#endif + THUMB_CONSOLE_OUTPUT(NULL, reg[2].I); + } + break; + case 0x01: + // EOR Rd, Rs + { + int dest = opcode & 7; + reg[dest].I ^= reg[(opcode >> 3)&7].I; + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + Z_FLAG = reg[dest].I ? false : true; + } + break; + case 0x02: + // LSL Rd, Rs + { + int dest = opcode & 7; + u32 value = reg[(opcode >> 3)&7].B.B0; + if(value) { + if(value == 32) { + value = 0; + C_FLAG = (reg[dest].I & 1 ? true : false); + } else if(value < 32) { + LSL_RD_RS; + } else { + value = 0; + C_FLAG = false; + } + reg[dest].I = value; + } + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + Z_FLAG = reg[dest].I ? false : true; + clockTicks++; + } + break; + case 0x03: + { + // LSR Rd, Rs + int dest = opcode & 7; + u32 value = reg[(opcode >> 3)&7].B.B0; + if(value) { + if(value == 32) { + value = 0; + C_FLAG = (reg[dest].I & 0x80000000 ? true : false); + } else if(value < 32) { + LSR_RD_RS; + } else { + value = 0; + C_FLAG = false; + } + reg[dest].I = value; + } + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + Z_FLAG = reg[dest].I ? false : true; + clockTicks++; + } + break; + } + break; + case 0x41: + switch((opcode >> 6) & 3) { + case 0x00: + { + // ASR Rd, Rs + int dest = opcode & 7; + u32 value = reg[(opcode >> 3)&7].B.B0; + // ASR + if(value) { + if(value < 32) { + ASR_RD_RS; + reg[dest].I = value; + } else { + if(reg[dest].I & 0x80000000){ + reg[dest].I = 0xFFFFFFFF; + C_FLAG = true; + } else { + reg[dest].I = 0x00000000; + C_FLAG = false; + } + } + } + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + Z_FLAG = reg[dest].I ? false : true; + clockTicks++; + } + break; + case 0x01: + { + // ADC Rd, Rs + int dest = opcode & 0x07; + u32 value = reg[(opcode >> 3)&7].I; + // ADC + ADC_RD_RS; + } + break; + case 0x02: + { + // SBC Rd, Rs + int dest = opcode & 0x07; + u32 value = reg[(opcode >> 3)&7].I; + + // SBC + SBC_RD_RS; + } + break; + case 0x03: + // ROR Rd, Rs + { + int dest = opcode & 7; + u32 value = reg[(opcode >> 3)&7].B.B0; + + if(value) { + value = value & 0x1f; + if(value == 0) { + C_FLAG = (reg[dest].I & 0x80000000 ? true : false); + } else { + ROR_RD_RS; + reg[dest].I = value; + } + } + clockTicks++; + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + Z_FLAG = reg[dest].I ? false : true; + } + break; + } + break; + case 0x42: + switch((opcode >> 6) & 3) { + case 0x00: + { + // TST Rd, Rs + u32 value = reg[opcode & 7].I & reg[(opcode >> 3) & 7].I; + N_FLAG = value & 0x80000000 ? true : false; + Z_FLAG = value ? false : true; + } + break; + case 0x01: + { + // NEG Rd, Rs + int dest = opcode & 7; + int source = (opcode >> 3) & 7; + NEG_RD_RS; + } + break; + case 0x02: + { + // CMP Rd, Rs + int dest = opcode & 7; + u32 value = reg[(opcode >> 3)&7].I; + CMP_RD_RS; + } + break; + case 0x03: + { + // CMN Rd, Rs + int dest = opcode & 7; + u32 value = reg[(opcode >> 3)&7].I; + // CMN + CMN_RD_RS; + } + break; + } + break; + case 0x43: + switch((opcode >> 6) & 3) { + case 0x00: + { + // ORR Rd, Rs + int dest = opcode & 7; + reg[dest].I |= reg[(opcode >> 3) & 7].I; + Z_FLAG = reg[dest].I ? false : true; + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + } + break; + case 0x01: + { + // MUL Rd, Rs + int dest = opcode & 7; + u32 rm = reg[(opcode >> 3) & 7].I; + reg[dest].I = reg[dest].I * rm; + if (((s32)rm) < 0) + rm = ~rm; + if ((rm & 0xFFFFFF00) == 0) + clockTicks += 1; + else if ((rm & 0xFFFF0000) == 0) + clockTicks += 2; + else if ((rm & 0xFF000000) == 0) + clockTicks += 3; + else + clockTicks += 4; + Z_FLAG = reg[dest].I ? false : true; + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + } + break; + case 0x02: + { + // BIC Rd, Rs + int dest = opcode & 7; + reg[dest].I &= (~reg[(opcode >> 3) & 7].I); + Z_FLAG = reg[dest].I ? false : true; + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + } + break; + case 0x03: + { + // MVN Rd, Rs + int dest = opcode & 7; + reg[dest].I = ~reg[(opcode >> 3) & 7].I; + Z_FLAG = reg[dest].I ? false : true; + N_FLAG = reg[dest].I & 0x80000000 ? true : false; + } + break; + } + break; + case 0x44: + { + int dest = opcode & 7; + int base = (opcode >> 3) & 7; + switch((opcode >> 6)& 3) { + default: + goto unknown_thumb; + case 1: + // ADD Rd, Hs + reg[dest].I += reg[base+8].I; + break; + case 2: + // ADD Hd, Rs + reg[dest+8].I += reg[base].I; + if(dest == 7) { + reg[15].I &= 0xFFFFFFFE; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks++; + } + break; + case 3: + // ADD Hd, Hs + reg[dest+8].I += reg[base+8].I; + if(dest == 7) { + reg[15].I &= 0xFFFFFFFE; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks++; + } + break; + } + } + break; + case 0x45: + { + int dest = opcode & 7; + int base = (opcode >> 3) & 7; + u32 value; + switch((opcode >> 6) & 3) { + case 0: + // CMP Rd, Hs + value = reg[base].I; + CMP_RD_RS; + break; + case 1: + // CMP Rd, Hs + value = reg[base+8].I; + CMP_RD_RS; + break; + case 2: + // CMP Hd, Rs + value = reg[base].I; + dest += 8; + CMP_RD_RS; + break; + case 3: + // CMP Hd, Hs + value = reg[base+8].I; + dest += 8; + CMP_RD_RS; + break; + } + } + break; + case 0x46: + { + int dest = opcode & 7; + int base = (opcode >> 3) & 7; + switch((opcode >> 6) & 3) { + case 0: + // this form should not be used... + // MOV Rd, Rs + reg[dest].I = reg[base].I; + break; + case 1: + // MOV Rd, Hs + reg[dest].I = reg[base+8].I; + break; + case 2: + // MOV Hd, Rs + reg[dest+8].I = reg[base].I; + if(dest == 7) { + reg[15].I &= 0xFFFFFFFE; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks++; + } + break; + case 3: + // MOV Hd, Hs + reg[dest+8].I = reg[base+8].I; + if(dest == 7) { + reg[15].I &= 0xFFFFFFFE; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks++; + } + break; + } + } + break; + case 0x47: + { + int base = (opcode >> 3) & 7; + switch((opcode >>6) & 3) { + case 0: + // BX Rs + reg[15].I = (reg[base].I) & 0xFFFFFFFE; + if(reg[base].I & 1) { + armState = false; + armNextPC = reg[15].I; + reg[15].I += 2; + } else { + armState = true; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + break; + case 1: + // BX Hs + reg[15].I = (reg[8+base].I) & 0xFFFFFFFE; + if(reg[8+base].I & 1) { + armState = false; + armNextPC = reg[15].I; + reg[15].I += 2; + } else { + armState = true; + reg[15].I &= 0xFFFFFFFC; + armNextPC = reg[15].I; + reg[15].I += 4; + } + break; + default: + goto unknown_thumb; + } + } + break; + case 0x48: + // LDR R0,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[0].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x49: + // LDR R1,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[1].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x4a: + // LDR R2,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[2].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x4b: + // LDR R3,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[3].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x4c: + // LDR R4,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[4].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x4d: + // LDR R5,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[5].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x4e: + // LDR R6,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[6].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x4f: + // LDR R7,[PC, #Imm] + { + u32 address = (reg[15].I & 0xFFFFFFFC) + ((opcode & 0xFF) << 2); + reg[7].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x50: + case 0x51: + // STR Rd, [Rs, Rn] + { + u32 + address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; + CPUWriteMemory(address, + reg[opcode & 7].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x52: + case 0x53: + // STRH Rd, [Rs, Rn] + { + u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; + CPUWriteHalfWord(address, + reg[opcode&7].W.W0); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x54: + case 0x55: + // STRB Rd, [Rs, Rn] + { + u32 address = reg[(opcode>>3)&7].I + reg[(opcode >>6)&7].I; + CPUWriteByte(address, + reg[opcode & 7].B.B0); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x56: + case 0x57: + // LDSB Rd, [Rs, Rn] + { + u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; + reg[opcode&7].I = (s8)CPUReadByte(address); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x58: + case 0x59: + // LDR Rd, [Rs, Rn] + { + u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; + reg[opcode&7].I = CPUReadMemory(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x5a: + case 0x5b: + // LDRH Rd, [Rs, Rn] + { + u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; + reg[opcode&7].I = CPUReadHalfWord(address); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x5c: + case 0x5d: + // LDRB Rd, [Rs, Rn] + { + u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; + reg[opcode&7].I = CPUReadByte(address); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x5e: + case 0x5f: + // LDSH Rd, [Rs, Rn] + { + u32 address = reg[(opcode>>3)&7].I + reg[(opcode>>6)&7].I; + reg[opcode&7].I = (s16)CPUReadHalfWordSigned(address); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + // STR Rd, [Rs, #Imm] + { + u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<2); + CPUWriteMemory(address, + reg[opcode&7].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x68: + case 0x69: + case 0x6a: + case 0x6b: + case 0x6c: + case 0x6d: + case 0x6e: + case 0x6f: + // LDR Rd, [Rs, #Imm] + { + u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<2); + reg[opcode&7].I = CPUReadMemory(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + // STRB Rd, [Rs, #Imm] + { + u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)); + CPUWriteByte(address, + reg[opcode&7].B.B0); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x78: + case 0x79: + case 0x7a: + case 0x7b: + case 0x7c: + case 0x7d: + case 0x7e: + case 0x7f: + // LDRB Rd, [Rs, #Imm] + { + u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)); + reg[opcode&7].I = CPUReadByte(address); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + // STRH Rd, [Rs, #Imm] + { + u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<1); + CPUWriteHalfWord(address, + reg[opcode&7].W.W0); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x88: + case 0x89: + case 0x8a: + case 0x8b: + case 0x8c: + case 0x8d: + case 0x8e: + case 0x8f: + // LDRH Rd, [Rs, #Imm] + { + u32 address = reg[(opcode>>3)&7].I + (((opcode>>6)&31)<<1); + reg[opcode&7].I = CPUReadHalfWord(address); + clockTicks += CPUUpdateTicksAccess16(address); + } + break; + case 0x90: + // STR R0, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[0].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x91: + // STR R1, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[1].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x92: + // STR R2, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[2].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x93: + // STR R3, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[3].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x94: + // STR R4, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[4].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x95: + // STR R5, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[5].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x96: + // STR R6, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[6].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x97: + // STR R7, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + CPUWriteMemory(address, reg[7].I); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x98: + // LDR R0, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[0].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x99: + // LDR R1, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[1].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x9a: + // LDR R2, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[2].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x9b: + // LDR R3, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[3].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x9c: + // LDR R4, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[4].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x9d: + // LDR R5, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[5].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x9e: + // LDR R6, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[6].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0x9f: + // LDR R7, [SP, #Imm] + { + u32 address = reg[13].I + ((opcode&255)<<2); + reg[7].I = CPUReadMemoryQuick(address); + clockTicks += CPUUpdateTicksAccess32(address); + } + break; + case 0xa0: + // ADD R0, PC, Imm + reg[0].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa1: + // ADD R1, PC, Imm + reg[1].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa2: + // ADD R2, PC, Imm + reg[2].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa3: + // ADD R3, PC, Imm + reg[3].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa4: + // ADD R4, PC, Imm + reg[4].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa5: + // ADD R5, PC, Imm + reg[5].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa6: + // ADD R6, PC, Imm + reg[6].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa7: + // ADD R7, PC, Imm + reg[7].I = (reg[15].I & 0xFFFFFFFC) + ((opcode&255)<<2); + break; + case 0xa8: + // ADD R0, SP, Imm + reg[0].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xa9: + // ADD R1, SP, Imm + reg[1].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xaa: + // ADD R2, SP, Imm + reg[2].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xab: + // ADD R3, SP, Imm + reg[3].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xac: + // ADD R4, SP, Imm + reg[4].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xad: + // ADD R5, SP, Imm + reg[5].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xae: + // ADD R6, SP, Imm + reg[6].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xaf: + // ADD R7, SP, Imm + reg[7].I = reg[13].I + ((opcode&255)<<2); + break; + case 0xb0: + { + // ADD SP, Imm + int offset = (opcode & 127) << 2; + if(opcode & 0x80) + offset = -offset; + reg[13].I += offset; + } + break; +#define PUSH_REG(val, r) \ + if(opcode & (val)) {\ + CPUWriteMemory(address, reg[(r)].I);\ + if(offset)\ + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address);\ + else\ + clockTicks += 1 + CPUUpdateTicksAccess32(address);\ + offset = 1;\ + address += 4;\ + } + case 0xb4: + // PUSH {Rlist} + { + int offset = 0; + u32 temp = reg[13].I - 4 * cpuBitsSet[opcode & 0xff]; + u32 address = temp & 0xFFFFFFFC; + PUSH_REG(1, 0); + PUSH_REG(2, 1); + PUSH_REG(4, 2); + PUSH_REG(8, 3); + PUSH_REG(16, 4); + PUSH_REG(32, 5); + PUSH_REG(64, 6); + PUSH_REG(128, 7); + reg[13].I = temp; + } + break; + case 0xb5: + // PUSH {Rlist, LR} + { + int offset = 0; + u32 temp = reg[13].I - 4 - 4 * cpuBitsSet[opcode & 0xff]; + u32 address = temp & 0xFFFFFFFC; + PUSH_REG(1, 0); + PUSH_REG(2, 1); + PUSH_REG(4, 2); + PUSH_REG(8, 3); + PUSH_REG(16, 4); + PUSH_REG(32, 5); + PUSH_REG(64, 6); + PUSH_REG(128, 7); + PUSH_REG(256, 14); + reg[13].I = temp; + } + break; +#define POP_REG(val, r) \ + if(opcode & (val)) {\ + reg[(r)].I = CPUReadMemory(address);\ + if(offset)\ + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address);\ + else\ + clockTicks += 2 + CPUUpdateTicksAccess32(address);\ + offset = 1;\ + address += 4;\ + } + case 0xbc: + // POP {Rlist} + { + int offset = 0; + u32 address = reg[13].I & 0xFFFFFFFC; + u32 temp = reg[13].I + 4*cpuBitsSet[opcode & 0xFF]; + POP_REG(1, 0); + POP_REG(2, 1); + POP_REG(4, 2); + POP_REG(8, 3); + POP_REG(16, 4); + POP_REG(32, 5); + POP_REG(64, 6); + POP_REG(128, 7); + reg[13].I = temp; + } + break; + case 0xbd: + // POP {Rlist, PC} + { + int offset = 0; + u32 address = reg[13].I & 0xFFFFFFFC; + u32 temp = reg[13].I + 4 + 4*cpuBitsSet[opcode & 0xFF]; + POP_REG(1, 0); + POP_REG(2, 1); + POP_REG(4, 2); + POP_REG(8, 3); + POP_REG(16, 4); + POP_REG(32, 5); + POP_REG(64, 6); + POP_REG(128, 7); + reg[15].I = (CPUReadMemory(address) & 0xFFFFFFFE); + if(offset) + clockTicks += CPUUpdateTicksAccessSeq32(address); + else + clockTicks += CPUUpdateTicksAccess32(address); + armNextPC = reg[15].I; + reg[15].I += 2; + reg[13].I = temp; + } + break; +#define THUMB_STM_REG(val,r,b) \ + if(opcode & (val)) {\ + CPUWriteMemory(address, reg[(r)].I);\ + if(!offset) {\ + reg[(b)].I = temp;\ + clockTicks += 1 + CPUUpdateTicksAccess32(address);\ + } else \ + clockTicks += 1 + CPUUpdateTicksAccessSeq32(address);\ + offset = 1;\ + address += 4;\ + } + case 0xc0: + { + // STM R0!, {Rlist} + u32 address = reg[0].I & 0xFFFFFFFC; + u32 temp = reg[0].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 0); + THUMB_STM_REG(2, 1, 0); + THUMB_STM_REG(4, 2, 0); + THUMB_STM_REG(8, 3, 0); + THUMB_STM_REG(16, 4, 0); + THUMB_STM_REG(32, 5, 0); + THUMB_STM_REG(64, 6, 0); + THUMB_STM_REG(128, 7, 0); + } + break; + case 0xc1: + { + // STM R1!, {Rlist} + u32 address = reg[1].I & 0xFFFFFFFC; + u32 temp = reg[1].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 1); + THUMB_STM_REG(2, 1, 1); + THUMB_STM_REG(4, 2, 1); + THUMB_STM_REG(8, 3, 1); + THUMB_STM_REG(16, 4, 1); + THUMB_STM_REG(32, 5, 1); + THUMB_STM_REG(64, 6, 1); + THUMB_STM_REG(128, 7, 1); + } + break; + case 0xc2: + { + // STM R2!, {Rlist} + u32 address = reg[2].I & 0xFFFFFFFC; + u32 temp = reg[2].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 2); + THUMB_STM_REG(2, 1, 2); + THUMB_STM_REG(4, 2, 2); + THUMB_STM_REG(8, 3, 2); + THUMB_STM_REG(16, 4, 2); + THUMB_STM_REG(32, 5, 2); + THUMB_STM_REG(64, 6, 2); + THUMB_STM_REG(128, 7, 2); + } + break; + case 0xc3: + { + // STM R3!, {Rlist} + u32 address = reg[3].I & 0xFFFFFFFC; + u32 temp = reg[3].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 3); + THUMB_STM_REG(2, 1, 3); + THUMB_STM_REG(4, 2, 3); + THUMB_STM_REG(8, 3, 3); + THUMB_STM_REG(16, 4, 3); + THUMB_STM_REG(32, 5, 3); + THUMB_STM_REG(64, 6, 3); + THUMB_STM_REG(128, 7, 3); + } + break; + case 0xc4: + { + // STM R4!, {Rlist} + u32 address = reg[4].I & 0xFFFFFFFC; + u32 temp = reg[4].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 4); + THUMB_STM_REG(2, 1, 4); + THUMB_STM_REG(4, 2, 4); + THUMB_STM_REG(8, 3, 4); + THUMB_STM_REG(16, 4, 4); + THUMB_STM_REG(32, 5, 4); + THUMB_STM_REG(64, 6, 4); + THUMB_STM_REG(128, 7, 4); + } + break; + case 0xc5: + { + // STM R5!, {Rlist} + u32 address = reg[5].I & 0xFFFFFFFC; + u32 temp = reg[5].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 5); + THUMB_STM_REG(2, 1, 5); + THUMB_STM_REG(4, 2, 5); + THUMB_STM_REG(8, 3, 5); + THUMB_STM_REG(16, 4, 5); + THUMB_STM_REG(32, 5, 5); + THUMB_STM_REG(64, 6, 5); + THUMB_STM_REG(128, 7, 5); + } + break; + case 0xc6: + { + // STM R6!, {Rlist} + u32 address = reg[6].I & 0xFFFFFFFC; + u32 temp = reg[6].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 6); + THUMB_STM_REG(2, 1, 6); + THUMB_STM_REG(4, 2, 6); + THUMB_STM_REG(8, 3, 6); + THUMB_STM_REG(16, 4, 6); + THUMB_STM_REG(32, 5, 6); + THUMB_STM_REG(64, 6, 6); + THUMB_STM_REG(128, 7, 6); + } + break; + case 0xc7: + { + // STM R7!, {Rlist} + u32 address = reg[7].I & 0xFFFFFFFC; + u32 temp = reg[7].I + 4*cpuBitsSet[opcode & 0xff]; + int offset = 0; + // store + THUMB_STM_REG(1, 0, 7); + THUMB_STM_REG(2, 1, 7); + THUMB_STM_REG(4, 2, 7); + THUMB_STM_REG(8, 3, 7); + THUMB_STM_REG(16, 4, 7); + THUMB_STM_REG(32, 5, 7); + THUMB_STM_REG(64, 6, 7); + THUMB_STM_REG(128, 7, 7); + } + break; +#define THUMB_LDM_REG(val,r) \ + if(opcode & (val)) {\ + reg[(r)].I = CPUReadMemory(address);\ + if(offset)\ + clockTicks += 2 + CPUUpdateTicksAccessSeq32(address);\ + else\ + clockTicks += 2 + CPUUpdateTicksAccess32(address);\ + offset = 1;\ + address += 4;\ + } + case 0xc8: + { + // LDM R0!, {Rlist} + u32 address = reg[0].I & 0xFFFFFFFC; + u32 temp = reg[0].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 1)) + reg[0].I = temp; + } + break; + case 0xc9: + { + // LDM R1!, {Rlist} + u32 address = reg[1].I & 0xFFFFFFFC; + u32 temp = reg[1].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 2)) + reg[1].I = temp; + } + break; + case 0xca: + { + // LDM R2!, {Rlist} + u32 address = reg[2].I & 0xFFFFFFFC; + u32 temp = reg[2].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 4)) + reg[2].I = temp; + } + break; + case 0xcb: + { + // LDM R3!, {Rlist} + u32 address = reg[3].I & 0xFFFFFFFC; + u32 temp = reg[3].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 8)) + reg[3].I = temp; + } + break; + case 0xcc: + { + // LDM R4!, {Rlist} + u32 address = reg[4].I & 0xFFFFFFFC; + u32 temp = reg[4].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 16)) + reg[4].I = temp; + } + break; + case 0xcd: + { + // LDM R5!, {Rlist} + u32 address = reg[5].I & 0xFFFFFFFC; + u32 temp = reg[5].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 32)) + reg[5].I = temp; + } + break; + case 0xce: + { + // LDM R6!, {Rlist} + u32 address = reg[6].I & 0xFFFFFFFC; + u32 temp = reg[6].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 64)) + reg[6].I = temp; + } + break; + case 0xcf: + { + // LDM R7!, {Rlist} + u32 address = reg[7].I & 0xFFFFFFFC; + u32 temp = reg[7].I + 4*cpuBitsSet[opcode & 0xFF]; + int offset = 0; + // load + THUMB_LDM_REG(1, 0); + THUMB_LDM_REG(2, 1); + THUMB_LDM_REG(4, 2); + THUMB_LDM_REG(8, 3); + THUMB_LDM_REG(16, 4); + THUMB_LDM_REG(32, 5); + THUMB_LDM_REG(64, 6); + THUMB_LDM_REG(128, 7); + if(!(opcode & 128)) + reg[7].I = temp; + } + break; + case 0xd0: + // BEQ offset + if(Z_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd1: + // BNE offset + if(!Z_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd2: + // BCS offset + if(C_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd3: + // BCC offset + if(!C_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd4: + // BMI offset + if(N_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd5: + // BPL offset + if(!N_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd6: + // BVS offset + if(V_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd7: + // BVC offset + if(!V_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd8: + // BHI offset + if(C_FLAG && !Z_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xd9: + // BLS offset + if(!C_FLAG || Z_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xda: + // BGE offset + if(N_FLAG == V_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xdb: + // BLT offset + if(N_FLAG != V_FLAG) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xdc: + // BGT offset + if(!Z_FLAG && (N_FLAG == V_FLAG)) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xdd: + // BLE offset + if(Z_FLAG || (N_FLAG != V_FLAG)) { + reg[15].I += ((s8)(opcode & 0xFF)) << 1; + armNextPC = reg[15].I; + reg[15].I += 2; + clockTicks = 3; + } + break; + case 0xdf: + // SWI #comment + CPUSoftwareInterrupt(opcode & 0xFF); + break; + case 0xe0: + case 0xe1: + case 0xe2: + case 0xe3: + case 0xe4: + case 0xe5: + case 0xe6: + case 0xe7: + { + // B offset + int offset = (opcode & 0x3FF) << 1; + if(opcode & 0x0400) + offset |= 0xFFFFF800; + reg[15].I += offset; + armNextPC = reg[15].I; + reg[15].I += 2; + } + break; + case 0xf0: + case 0xf1: + case 0xf2: + case 0xf3: + { + // BLL #offset + int offset = (opcode & 0x7FF); + reg[14].I = reg[15].I + (offset << 12); + } + break; + case 0xf4: + case 0xf5: + case 0xf6: + case 0xf7: + { + // BLL #offset + int offset = (opcode & 0x7FF); + reg[14].I = reg[15].I + ((offset << 12) | 0xFF800000); + } + break; + case 0xf8: + case 0xf9: + case 0xfa: + case 0xfb: + case 0xfc: + case 0xfd: + case 0xfe: + case 0xff: + { + // BLH #offset + int offset = (opcode & 0x7FF); + u32 temp = reg[15].I-2; + reg[15].I = (reg[14].I + (offset<<1))&0xFFFFFFFE; + armNextPC = reg[15].I; + reg[15].I += 2; + reg[14].I = temp|1; + } + break; +#ifdef BKPT_SUPPORT + case 0xbe: + // BKPT #comment + extern void (*dbgSignal)(int,int); + reg[15].I -= 2; + armNextPC -= 2; + dbgSignal(5, opcode & 255); + return; +#endif + case 0xb1: + case 0xb2: + case 0xb3: + case 0xb6: + case 0xb7: + case 0xb8: + case 0xb9: + case 0xba: + case 0xbb: +#ifndef BKPT_SUPPORT + case 0xbe: +#endif + case 0xbf: + case 0xde: + default: + unknown_thumb: +#ifdef DEV_VERSION + if(systemVerbose & VERBOSE_UNDEFINED) + log("Undefined THUMB instruction %04x at %08x\n", opcode, armNextPC-2); +#endif + CPUUndefinedException(); + break; +} diff --git a/source/vba/unzip.cpp b/source/vba/unzip.cpp index feb1c8eb..0703d0c8 100644 --- a/source/vba/unzip.cpp +++ b/source/vba/unzip.cpp @@ -22,6 +22,7 @@ Read unzip.h for more info */ +#include "sdfileio.h" #include #include #include @@ -156,7 +157,7 @@ unz_s; local int unzlocal_getByte(FILE* fin,int *pi) { unsigned char c; - int err = fread(&c, 1, 1, fin); + int err = gen_fread(&c, 1, 1, fin); if (err==1) { *pi = (int)c; @@ -182,7 +183,7 @@ local int unzlocal_getByte(FILE* fin,int *pi) local int unzlocal_getShort (FILE* fin,uLong *pX) { uLong x ; - int i = 0; + int i; int err; err = unzlocal_getByte(fin,&i); @@ -202,7 +203,7 @@ local int unzlocal_getShort (FILE* fin,uLong *pX) local int unzlocal_getLong (FILE* fin,uLong *pX) { uLong x ; - int i = 0; + int i; int err; err = unzlocal_getByte(fin,&i); @@ -299,7 +300,7 @@ local uLong unzlocal_SearchCentralDir(FILE* fin) uLong uPosFound=0; - if (fseek(fin,0,SEEK_END) != 0) + if (gen_fseek(fin,0,SEEK_END) != 0) return 0; @@ -324,10 +325,10 @@ local uLong unzlocal_SearchCentralDir(FILE* fin) uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); - if (fseek(fin,uReadPos,SEEK_SET)!=0) + if (gen_fseek(fin,uReadPos,SEEK_SET)!=0) break; - if (fread(buf,(uInt)uReadSize,1,fin)!=1) + if (gen_fread(buf,(uInt)uReadSize,1,fin)!=1) break; for (i=(int)uReadSize-3; (i--)>0;) @@ -374,7 +375,7 @@ extern unzFile ZEXPORT unzOpen (const char *path) if (unz_copyright[0]!=' ') return NULL; - fin=fopen(path,"rb"); + fin=gen_fopen(path,"rb"); if (fin==NULL) return NULL; @@ -382,7 +383,7 @@ extern unzFile ZEXPORT unzOpen (const char *path) if (central_pos==0) err=UNZ_ERRNO; - if (fseek(fin,central_pos,SEEK_SET)!=0) + if (gen_fseek(fin,central_pos,SEEK_SET)!=0) err=UNZ_ERRNO; /* the signature, already checked */ @@ -429,7 +430,7 @@ extern unzFile ZEXPORT unzOpen (const char *path) if (err!=UNZ_OK) { - fclose(fin); + gen_fclose(fin); return NULL; } @@ -462,7 +463,7 @@ extern int ZEXPORT unzClose (unzFile file) if (s->pfile_in_zip_read!=NULL) unzCloseCurrentFile(file); - fclose(s->file); + gen_fclose(s->file); TRYFREE(s); return UNZ_OK; } @@ -534,7 +535,7 @@ local int unzlocal_GetCurrentFileInfoInternal (unzFile file, if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; - if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0) + if (gen_fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0) err=UNZ_ERRNO; @@ -605,7 +606,7 @@ local int unzlocal_GetCurrentFileInfoInternal (unzFile file, uSizeRead = fileNameBufferSize; if ((file_info.size_filename>0) && (fileNameBufferSize>0)) - if (fread(szFileName,(uInt)uSizeRead,1,s->file)!=1) + if (gen_fread(szFileName,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; lSeek -= uSizeRead; } @@ -620,12 +621,12 @@ local int unzlocal_GetCurrentFileInfoInternal (unzFile file, uSizeRead = extraFieldBufferSize; if (lSeek!=0) - if (fseek(s->file,lSeek,SEEK_CUR)==0) + if (gen_fseek(s->file,lSeek,SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) - if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1) + if (gen_fread(extraField,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; lSeek += file_info.size_file_extra - uSizeRead; } @@ -645,12 +646,12 @@ local int unzlocal_GetCurrentFileInfoInternal (unzFile file, uSizeRead = commentBufferSize; if (lSeek!=0) - if (fseek(s->file,lSeek,SEEK_CUR)==0) + if (gen_fseek(s->file,lSeek,SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; if ((file_info.size_file_comment>0) && (commentBufferSize>0)) - if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1) + if (gen_fread(szComment,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; lSeek+=file_info.size_file_comment - uSizeRead; } @@ -812,7 +813,7 @@ local int unzlocal_CheckCurrentFileCoherencyHeader (unz_s *s, *poffset_local_extrafield = 0; *psize_local_extrafield = 0; - if (fseek(s->file,s->cur_file_info_internal.offset_curfile + + if (gen_fseek(s->file,s->cur_file_info_internal.offset_curfile + s->byte_before_the_zipfile,SEEK_SET)!=0) return UNZ_ERRNO; @@ -1023,11 +1024,11 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len) uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed; if (uReadThis == 0) return UNZ_EOF; - if (fseek(pfile_in_zip_read_info->file, + if (gen_fseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->pos_in_zipfile + pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) return UNZ_ERRNO; - if (fread(pfile_in_zip_read_info->read_buffer,uReadThis,1, + if (gen_fread(pfile_in_zip_read_info->read_buffer,uReadThis,1, pfile_in_zip_read_info->file)!=1) return UNZ_ERRNO; pfile_in_zip_read_info->pos_in_zipfile += uReadThis; @@ -1189,12 +1190,12 @@ extern int ZEXPORT unzGetLocalExtrafield (unzFile file,voidp buf,unsigned len) if (read_now==0) return 0; - if (fseek(pfile_in_zip_read_info->file, + if (gen_fseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->offset_local_extrafield + pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0) return UNZ_ERRNO; - if (fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1) + if (gen_fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1) return UNZ_ERRNO; return (int)read_now; @@ -1260,13 +1261,13 @@ extern int ZEXPORT unzGetGlobalComment (unzFile file, if (uReadThis>s->gi.size_comment) uReadThis = s->gi.size_comment; - if (fseek(s->file,s->central_pos+22,SEEK_SET)!=0) + if (gen_fseek(s->file,s->central_pos+22,SEEK_SET)!=0) return UNZ_ERRNO; if (uReadThis>0) { *szComment='\0'; - if (fread(szComment,(uInt)uReadThis,1,s->file)!=1) + if (gen_fread(szComment,(uInt)uReadThis,1,s->file)!=1) return UNZ_ERRNO; }