From 528cf7d17778ea304f01879508ecf77d20b93770 Mon Sep 17 00:00:00 2001 From: MikeDX Date: Wed, 11 Jun 2025 11:51:53 +0100 Subject: [PATCH 1/4] WIP pacman hardware platform --- presets/pacman/hello.c | 223 +++++ presets/pacman/maze.c | 206 +++++ presets/pacman/pacman_rom.c | 1558 +++++++++++++++++++++++++++++++++++ presets/pacman/sprites.c | 217 +++++ src/machine/pacman.ts | 542 ++++++++++++ src/platform/_index.ts | 1 + src/platform/pacman.ts | 111 +++ src/worker/platforms.ts | 8 + 8 files changed, 2866 insertions(+) create mode 100644 presets/pacman/hello.c create mode 100644 presets/pacman/maze.c create mode 100644 presets/pacman/pacman_rom.c create mode 100644 presets/pacman/sprites.c create mode 100644 src/machine/pacman.ts create mode 100644 src/platform/pacman.ts diff --git a/presets/pacman/hello.c b/presets/pacman/hello.c new file mode 100644 index 00000000..db94cd8d --- /dev/null +++ b/presets/pacman/hello.c @@ -0,0 +1,223 @@ +#include + +typedef unsigned char byte; +typedef unsigned short word; +typedef signed char sbyte; + +// Forward declaration +void main(); + +// Startup function - sets up stack pointer and calls main +void start() __naked { +__asm + LD SP,#0x4800 ; Set stack pointer to start of RAM + EI ; Enable interrupts +; copy initialized data to RAM + LD BC, #l__INITIALIZER + LD A, B + LD DE, #s__INITIALIZED + LD HL, #s__INITIALIZER + LDIR + JP _main +; padding to get to offset 0x66 + .ds 0x66 - (. - _start) +__endasm; +} + +// Hardware memory addresses for Pacman +volatile byte __at (0x4000) vram[32][36]; // Video RAM - rotated layout! +volatile byte __at (0x4400) cram[32][36]; // Color RAM + +struct { + byte shape; + byte color; +} __at (0x4FF0) sprites[8]; + +struct { + byte xpos; + byte ypos; +} __at (0x5060) sprite_coords[8]; + +byte __at (0x4800) ram[0x7F0]; + +// Hardware control registers +volatile byte __at (0x5000) interrupt_enable; +volatile byte __at (0x5001) sound_enable; +volatile byte __at (0x5003) flip_screen; + +// Input ports (memory mapped, active low) +volatile byte __at (0x5000) input0; // IN0: joystick + coins +volatile byte __at (0x5040) input1; // IN1: start buttons + service + +// Input macros for Pacman controls (active low) - using direct register access +#define UP1 !(input0 & 0x1) +#define LEFT1 !(input0 & 0x2) +#define RIGHT1 !(input0 & 0x4) +#define DOWN1 !(input0 & 0x8) +#define COIN1 !(input0 & 0x20) +#define COIN2 !(input0 & 0x40) +#define START1 !(input1 & 0x20) +#define START2 !(input1 & 0x40) + +volatile byte video_framecount; // actual framecount + +// starts at address 0x66 - VBLANK interrupt handler +void rst_66() __interrupt { + video_framecount++; +} + +// Watchdog register +volatile byte __at (0x50C0) watchdog; + +// Palette data (32 colors, 4-bit RGB) +const char __at (0x6000) palette[32] = {/*{pal:444}*/ + 0x000,0xf00,0x0f0,0xff0,0x00f,0xf0f,0x0ff,0xfff, + 0x888,0xf88,0x8f8,0xff8,0x88f,0xf8f,0x8ff,0xddd, + 0x111,0x500,0x050,0x550,0x005,0x505,0x055,0x777, + 0x333,0xd33,0x3d3,0xdd3,0x33d,0xd3d,0x3dd,0xbbb, +}; + +// Character ROM data (128 characters, 8x8 pixels, 2 bits per pixel, 8KB total) +const char __at (0x4000) charrom[0x2000] = {/*{w:8,h:8,np:2,count:128,brev:1}*/ + // Character 0: space + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Character 1: simple filled square + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Character 2: hollow square + 0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Character 3: cross pattern + 0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Character 4: diamond + 0x18,0x3c,0x7e,0xff,0xff,0x7e,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Character 5: Pacman-like circle + 0x3c,0x7e,0xe7,0xc3,0xc3,0xe7,0x7e,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Character 6: dot + 0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Character 7: small dot + 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Rest fill with test patterns (first 16 characters) + 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + // Fill remaining characters with zeros for now (can be expanded later) + // Total should be 128 * 16 = 2048 bytes (0x2000) for the full 8KB graphics ROM +}; + +#define BLANK 0x00 + +// Clear screen +void clrscr() { + word i; + for (i = 0; i < 0x400; i++) { + ((byte*)0x4000)[i] = BLANK; // blank character + ((byte*)0x4400)[i] = 0x0f; // white on black + + // Kick watchdog every 64 iterations to prevent timeout during long clear + if ((i & 63) == 0) { + watchdog = 0; + } + } +} + +// Put character at screen position (simplified mapping for now) +void my_putchar(byte x, byte y, byte ch) { + word addr; + + // Simple linear mapping for now + if (x < 28 && y < 36) { + addr = y * 32 + x + 2; // basic offset + if (addr < 0x400) { + ((byte*)0x4000)[addr] = ch; + ((byte*)0x4400)[addr] = 0x0f; // white on black + } + } +} + +// Put string at position +void putstring(byte x, byte y, char* str) { + byte i; + i = 0; + while (str[i] && i < 20) { + my_putchar(x + i, y, str[i]); + i++; + } +} + +// Main program +void main() { + // Declare all variables at start of function (old C requirement) + byte x, y, frame, old_frame; + + // Initialize variables + x = 10; + y = 20; + frame = 0; + + // Initialize hardware + interrupt_enable = 1; // Enable interrupts + sound_enable = 1; // Enable sound + flip_screen = 0; // Normal orientation + + // Clear screen + clrscr(); + + // Test pattern - show some test characters + my_putchar(4, 4, 0x01); // test character 1 + my_putchar(6, 4, 0x02); // test character 2 + my_putchar(8, 4, 0x03); // test character 3 + my_putchar(10, 4, 0x04); // test character 4 + my_putchar(12, 4, 0x05); // test character 5 + my_putchar(14, 4, 0x06); // test character 6 + + // Main game loop - now with proper interrupt-driven frame sync + while (1) { + // Kick the watchdog to prevent reset + watchdog = 0; + + // Debug: show we're in the main loop + my_putchar(2, 28, 0x01 + (frame & 3)); + + // Wait for frame - now using interrupt-driven counter + old_frame = video_framecount; + while (video_framecount == old_frame) { + // Kick watchdog while waiting too + watchdog = 0; + } + frame++; + + // Clear old position + my_putchar(x, y, BLANK); + + // Debug: test input reads + my_putchar(24, 30, input0 & 0x1 ? 0x00 : 0x01); // UP indicator + my_putchar(24, 31, input0 & 0x4 ? 0x00 : 0x01); // RIGHT indicator + my_putchar(24, 32, input0 & 0x8 ? 0x00 : 0x01); // DOWN indicator + my_putchar(24, 33, input0 & 0x2 ? 0x00 : 0x01); // LEFT indicator + + // Handle input + if (UP1 && y > 2) y--; + if (DOWN1 && y < 34) y++; + if (LEFT1 && x > 2) x--; + if (RIGHT1 && x < 26) x++; + + // Draw player at new position + my_putchar(x, y, 0x05); // player character + + // Show status + my_putchar(2, 30, 0x01 + (frame & 7)); + + if (START1) { + my_putchar(2, 32, 0x02); // show test character + } + + if (COIN1) { + my_putchar(2, 34, 0x04); // show test character + } + } +} + diff --git a/presets/pacman/maze.c b/presets/pacman/maze.c new file mode 100644 index 00000000..1a204fe6 --- /dev/null +++ b/presets/pacman/maze.c @@ -0,0 +1,206 @@ +#include + +typedef unsigned char byte; +typedef unsigned short word; + +// Hardware memory addresses for Pacman +byte __at (0x4000) vram[32][36]; // Video RAM - rotated layout! +byte __at (0x4400) cram[32][36]; // Color RAM + +struct { + byte xpos; + byte ypos; + byte color; + byte shape; +} __at (0x4FF0) sprites[8]; + +// Hardware control registers +byte __at (0x5000) interrupt_enable; +byte __at (0x5001) sound_enable; +byte __at (0x5003) flip_screen; + +// Input registers +volatile byte __at (0x5000) input0; +volatile byte __at (0x5040) input1; + +#define START1 !(input1 & 0x20) + +// Video frame counter +volatile byte video_framecount; + +// NMI interrupt handler +void rst_66() __interrupt { + video_framecount++; +} + +// Entry point +void start() { +__asm + LD SP,#0x4800 + EI + LD BC, #l__INITIALIZER+1 + LD A, B + LD DE, #s__INITIALIZED + LD HL, #s__INITIALIZER + LDIR +__endasm; + main(); +} + +void wait_for_frame() { + byte initial_framecount = video_framecount; + *(volatile byte*)0x50C0 = 0; // Reset watchdog + while (video_framecount == initial_framecount); +} + +// Simple maze characters +#define WALL_H 0x01 // Horizontal wall +#define WALL_V 0x02 // Vertical wall +#define WALL_TL 0x03 // Top-left corner +#define WALL_TR 0x04 // Top-right corner +#define WALL_BL 0x05 // Bottom-left corner +#define WALL_BR 0x06 // Bottom-right corner +#define DOT 0x07 // Dot +#define POWER_DOT 0x08 // Power pellet +#define SPACE 0x00 // Empty space + +// Colors +#define BLUE 0x01 // Wall color +#define YELLOW 0x09 // Dot color +#define WHITE 0x0F // Power pellet color + +void draw_maze() { + byte x, y; + + // Clear screen + for (x = 0; x < 32; x++) { + for (y = 0; y < 36; y++) { + vram[x][y] = SPACE; + cram[x][y] = 0; + } + } + + // Draw outer walls + for (y = 1; y < 35; y++) { + vram[1][y] = WALL_V; // Left wall + vram[30][y] = WALL_V; // Right wall + cram[1][y] = BLUE; + cram[30][y] = BLUE; + } + + for (x = 1; x < 31; x++) { + vram[x][1] = WALL_H; // Top wall + vram[x][34] = WALL_H; // Bottom wall + cram[x][1] = BLUE; + cram[x][34] = BLUE; + } + + // Draw corners + vram[1][1] = WALL_TL; + vram[30][1] = WALL_TR; + vram[1][34] = WALL_BL; + vram[30][34] = WALL_BR; + cram[1][1] = BLUE; + cram[30][1] = BLUE; + cram[1][34] = BLUE; + cram[30][34] = BLUE; + + // Draw some inner maze structure + for (x = 5; x < 27; x += 4) { + for (y = 5; y < 30; y += 6) { + vram[x][y] = WALL_H; + vram[x+1][y] = WALL_H; + vram[x][y+1] = WALL_V; + vram[x][y+2] = WALL_V; + cram[x][y] = BLUE; + cram[x+1][y] = BLUE; + cram[x][y+1] = BLUE; + cram[x][y+2] = BLUE; + } + } + + // Add dots in corridors + for (x = 3; x < 29; x += 2) { + for (y = 3; y < 32; y += 2) { + if (vram[x][y] == SPACE) { + vram[x][y] = DOT; + cram[x][y] = YELLOW; + } + } + } + + // Add power pellets in corners + vram[3][3] = POWER_DOT; + vram[28][3] = POWER_DOT; + vram[3][31] = POWER_DOT; + vram[28][31] = POWER_DOT; + cram[3][3] = WHITE; + cram[28][3] = WHITE; + cram[3][31] = WHITE; + cram[28][31] = WHITE; +} + +void draw_title() { + const char* title = "PAC-MAN MAZE DEMO"; + byte i; + byte x = 15; // Center-ish position + byte y = 18; // Middle of screen + + for (i = 0; title[i]; i++) { + vram[x][y + i] = title[i] - 0x20 + 0x10; // ASCII to character offset + cram[x][y + i] = YELLOW; + } +} + +void animate_power_pellets() { + static byte flash_counter = 0; + byte color; + + flash_counter++; + color = (flash_counter & 0x10) ? WHITE : BLUE; + + cram[3][3] = color; + cram[28][3] = color; + cram[3][31] = color; + cram[28][31] = color; +} + +void main() { + // Initialize hardware + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + + // Draw the maze + draw_maze(); + draw_title(); + + // Hide sprites + for (byte i = 0; i < 8; i++) { + sprites[i].xpos = 0; + sprites[i].ypos = 0; + } + + // Main loop - animate power pellets + while (1) { + wait_for_frame(); + animate_power_pellets(); + + if (START1) break; + } + + // Show exit message + const char* exit_msg = "PRESS START TO EXIT"; + byte x = 14; + byte y = 8; + + for (byte i = 0; exit_msg[i]; i++) { + vram[x][y + i] = exit_msg[i] - 0x20 + 0x10; + cram[x][y + i] = WHITE; + } + + while(1) { + wait_for_frame(); + if (START1) break; + } +} \ No newline at end of file diff --git a/presets/pacman/pacman_rom.c b/presets/pacman/pacman_rom.c new file mode 100644 index 00000000..c62c145d --- /dev/null +++ b/presets/pacman/pacman_rom.c @@ -0,0 +1,1558 @@ +// Pacman ROM data - converted from original arcade ROMs +// This file contains the original Pacman program, graphics, and palette data + +#include + +typedef unsigned char byte; +typedef unsigned short word; +typedef signed char sbyte; + +// program_rom (16384 bytes) +const char __at (0x0000) program_rom[0x4000] = { + 0xf3,0x3e,0x3f,0xed,0x47,0xc3,0x0b,0x23,0x77,0x23,0x10,0xfc,0xc9,0xc3,0x0e,0x07, + 0x85,0x6f,0x3e,0x00,0x8c,0x67,0x7e,0xc9,0x78,0x87,0xd7,0x5f,0x23,0x56,0xeb,0xc9, + 0xe1,0x87,0xd7,0x5f,0x23,0x56,0xeb,0xe9,0xe1,0x46,0x23,0x4e,0x23,0xe5,0x18,0x12, + 0x11,0x90,0x4c,0x06,0x10,0xc3,0x51,0x00,0xaf,0x32,0x00,0x50,0x32,0x07,0x50,0xc3, + 0x38,0x00,0x2a,0x80,0x4c,0x70,0x2c,0x71,0x2c,0x20,0x02,0x2e,0xc0,0x22,0x80,0x4c, + 0xc9,0x1a,0xa7,0x28,0x06,0x1c,0x1c,0x1c,0x10,0xf7,0xc9,0xe1,0x06,0x03,0x7e,0x12, + 0x23,0x1c,0x10,0xfa,0xe9,0xc3,0x2d,0x20,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x01,0x03,0x04, + 0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x14,0xf5,0x32,0xc0, + 0x50,0xaf,0x32,0x00,0x50,0xf3,0xc5,0xd5,0xe5,0xdd,0xe5,0xfd,0xe5,0x21,0x8c,0x4e, + 0x11,0x50,0x50,0x01,0x10,0x00,0xed,0xb0,0x3a,0xcc,0x4e,0xa7,0x3a,0xcf,0x4e,0x20, + 0x03,0x3a,0x9f,0x4e,0x32,0x45,0x50,0x3a,0xdc,0x4e,0xa7,0x3a,0xdf,0x4e,0x20,0x03, + 0x3a,0xaf,0x4e,0x32,0x4a,0x50,0x3a,0xec,0x4e,0xa7,0x3a,0xef,0x4e,0x20,0x03,0x3a, + 0xbf,0x4e,0x32,0x4f,0x50,0x21,0x02,0x4c,0x11,0x22,0x4c,0x01,0x1c,0x00,0xed,0xb0, + 0xdd,0x21,0x20,0x4c,0xdd,0x7e,0x02,0x07,0x07,0xdd,0x77,0x02,0xdd,0x7e,0x04,0x07, + 0x07,0xdd,0x77,0x04,0xdd,0x7e,0x06,0x07,0x07,0xdd,0x77,0x06,0xdd,0x7e,0x08,0x07, + 0x07,0xdd,0x77,0x08,0xdd,0x7e,0x0a,0x07,0x07,0xdd,0x77,0x0a,0xdd,0x7e,0x0c,0x07, + 0x07,0xdd,0x77,0x0c,0x3a,0xd1,0x4d,0xfe,0x01,0x20,0x38,0xdd,0x21,0x20,0x4c,0x3a, + 0xa4,0x4d,0x87,0x5f,0x16,0x00,0xdd,0x19,0x2a,0x24,0x4c,0xed,0x5b,0x34,0x4c,0xdd, + 0x7e,0x00,0x32,0x24,0x4c,0xdd,0x7e,0x01,0x32,0x25,0x4c,0xdd,0x7e,0x10,0x32,0x34, + 0x4c,0xdd,0x7e,0x11,0x32,0x35,0x4c,0xdd,0x75,0x00,0xdd,0x74,0x01,0xdd,0x73,0x10, + 0xdd,0x72,0x11,0x3a,0xa6,0x4d,0xa7,0xca,0x76,0x01,0xed,0x4b,0x22,0x4c,0xed,0x5b, + 0x32,0x4c,0x2a,0x2a,0x4c,0x22,0x22,0x4c,0x2a,0x3a,0x4c,0x22,0x32,0x4c,0xed,0x43, + 0x2a,0x4c,0xed,0x53,0x3a,0x4c,0x21,0x22,0x4c,0x11,0xf2,0x4f,0x01,0x0c,0x00,0xed, + 0xb0,0x21,0x32,0x4c,0x11,0x62,0x50,0x01,0x0c,0x00,0xed,0xb0,0xcd,0xdc,0x01,0xcd, + 0x21,0x02,0xcd,0xc8,0x03,0x3a,0x00,0x4e,0xa7,0x28,0x12,0xcd,0x9d,0x03,0xcd,0x90, + 0x14,0xcd,0x1f,0x14,0xcd,0x67,0x02,0xcd,0xad,0x02,0xcd,0xfd,0x02,0x3a,0x00,0x4e, + 0x3d,0x20,0x06,0x32,0xac,0x4e,0x32,0xbc,0x4e,0xcd,0x0c,0x2d,0xcd,0xc1,0x2c,0xfd, + 0xe1,0xdd,0xe1,0xe1,0xd1,0xc1,0x3a,0x00,0x4e,0xa7,0x28,0x08,0x3a,0x40,0x50,0xe6, + 0x10,0xca,0x00,0x00,0x3e,0x01,0x32,0x00,0x50,0xfb,0xf1,0xc9,0x21,0x84,0x4c,0x34, + 0x23,0x35,0x23,0x11,0x19,0x02,0x01,0x01,0x04,0x34,0x7e,0xe6,0x0f,0xeb,0xbe,0x20, + 0x13,0x0c,0x1a,0xc6,0x10,0xe6,0xf0,0x12,0x23,0xbe,0x20,0x08,0x0c,0xeb,0x36,0x00, + 0x23,0x13,0x10,0xe5,0x21,0x8a,0x4c,0x71,0x2c,0x7e,0x87,0x87,0x86,0x3c,0x77,0x2c, + 0x7e,0x87,0x86,0x87,0x87,0x86,0x3c,0x77,0xc9,0x06,0xa0,0x0a,0x60,0x0a,0x60,0x0a, + 0xa0,0x21,0x90,0x4c,0x3a,0x8a,0x4c,0x4f,0x06,0x10,0x7e,0xa7,0x28,0x2f,0xe6,0xc0, + 0x07,0x07,0xb9,0x30,0x28,0x35,0x7e,0xe6,0x3f,0x20,0x22,0x77,0xc5,0xe5,0x2c,0x7e, + 0x2c,0x46,0x21,0x5b,0x02,0xe5,0xe7,0x94,0x08,0xa3,0x06,0x8e,0x05,0x72,0x12,0x00, + 0x10,0x0b,0x10,0x63,0x02,0x2b,0x21,0xf0,0x21,0xb9,0x22,0xe1,0xc1,0x2c,0x2c,0x2c, + 0x10,0xc8,0xc9,0xef,0x1c,0x86,0xc9,0x3a,0x6e,0x4e,0xfe,0x99,0x17,0x32,0x06,0x50, + 0x1f,0xd0,0x3a,0x00,0x50,0x47,0xcb,0x00,0x3a,0x66,0x4e,0x17,0xe6,0x0f,0x32,0x66, + 0x4e,0xd6,0x0c,0xcc,0xdf,0x02,0xcb,0x00,0x3a,0x67,0x4e,0x17,0xe6,0x0f,0x32,0x67, + 0x4e,0xd6,0x0c,0xc2,0x9a,0x02,0x21,0x69,0x4e,0x34,0xcb,0x00,0x3a,0x68,0x4e,0x17, + 0xe6,0x0f,0x32,0x68,0x4e,0xd6,0x0c,0xc0,0x21,0x69,0x4e,0x34,0xc9,0x3a,0x69,0x4e, + 0xa7,0xc8,0x47,0x3a,0x6a,0x4e,0x5f,0xfe,0x00,0xc2,0xc4,0x02,0x3e,0x01,0x32,0x07, + 0x50,0xcd,0xdf,0x02,0x7b,0xfe,0x08,0xc2,0xce,0x02,0xaf,0x32,0x07,0x50,0x1c,0x7b, + 0x32,0x6a,0x4e,0xd6,0x10,0xc0,0x32,0x6a,0x4e,0x05,0x78,0x32,0x69,0x4e,0xc9,0x3a, + 0x6b,0x4e,0x21,0x6c,0x4e,0x34,0x96,0xc0,0x77,0x3a,0x6d,0x4e,0x21,0x6e,0x4e,0x86, + 0x27,0xd2,0xf6,0x02,0x3e,0x99,0x77,0x21,0x9c,0x4e,0xcb,0xce,0xc9,0x21,0xce,0x4d, + 0x34,0x7e,0xe6,0x0f,0x20,0x1f,0x7e,0x0f,0x0f,0x0f,0x0f,0x47,0x3a,0xd6,0x4d,0x2f, + 0xb0,0x4f,0x3a,0x6e,0x4e,0xd6,0x01,0x30,0x02,0xaf,0x4f,0x28,0x01,0x79,0x32,0x05, + 0x50,0x79,0x32,0x04,0x50,0xdd,0x21,0xd8,0x43,0xfd,0x21,0xc5,0x43,0x3a,0x00,0x4e, + 0xfe,0x03,0xca,0x44,0x03,0x3a,0x03,0x4e,0xfe,0x02,0xd2,0x44,0x03,0xcd,0x69,0x03, + 0xcd,0x76,0x03,0xc9,0x3a,0x09,0x4e,0xa7,0x3a,0xce,0x4d,0xc2,0x59,0x03,0xcb,0x67, + 0xcc,0x69,0x03,0xc4,0x83,0x03,0xc3,0x61,0x03,0xcb,0x67,0xcc,0x76,0x03,0xc4,0x90, + 0x03,0x3a,0x70,0x4e,0xa7,0xcc,0x90,0x03,0xc9,0xdd,0x36,0x00,0x50,0xdd,0x36,0x01, + 0x55,0xdd,0x36,0x02,0x31,0xc9,0xfd,0x36,0x00,0x50,0xfd,0x36,0x01,0x55,0xfd,0x36, + 0x02,0x32,0xc9,0xdd,0x36,0x00,0x40,0xdd,0x36,0x01,0x40,0xdd,0x36,0x02,0x40,0xc9, + 0xfd,0x36,0x00,0x40,0xfd,0x36,0x01,0x40,0xfd,0x36,0x02,0x40,0xc9,0x3a,0x06,0x4e, + 0xd6,0x05,0xd8,0x2a,0x08,0x4d,0x06,0x08,0x0e,0x10,0x7d,0x32,0x06,0x4d,0x32,0xd2, + 0x4d,0x91,0x32,0x02,0x4d,0x32,0x04,0x4d,0x7c,0x80,0x32,0x03,0x4d,0x32,0x07,0x4d, + 0x91,0x32,0x05,0x4d,0x32,0xd3,0x4d,0xc9,0x3a,0x00,0x4e,0xe7,0xd4,0x03,0xfe,0x03, + 0xe5,0x05,0xbe,0x06,0x3a,0x01,0x4e,0xe7,0xdc,0x03,0x0c,0x00,0xef,0x00,0x00,0xef, + 0x06,0x00,0xef,0x01,0x00,0xef,0x14,0x00,0xef,0x18,0x00,0xef,0x04,0x00,0xef,0x1e, + 0x00,0xef,0x07,0x00,0x21,0x01,0x4e,0x34,0x21,0x01,0x50,0x36,0x01,0xc9,0xcd,0xa1, + 0x2b,0x3a,0x6e,0x4e,0xa7,0x28,0x0c,0xaf,0x32,0x04,0x4e,0x32,0x02,0x4e,0x21,0x00, + 0x4e,0x34,0xc9,0x3a,0x02,0x4e,0xe7,0x5f,0x04,0x0c,0x00,0x71,0x04,0x0c,0x00,0x7f, + 0x04,0x0c,0x00,0x85,0x04,0x0c,0x00,0x8b,0x04,0x0c,0x00,0x99,0x04,0x0c,0x00,0x9f, + 0x04,0x0c,0x00,0xa5,0x04,0x0c,0x00,0xb3,0x04,0x0c,0x00,0xb9,0x04,0x0c,0x00,0xbf, + 0x04,0x0c,0x00,0xcd,0x04,0x0c,0x00,0xd3,0x04,0x0c,0x00,0xd8,0x04,0x0c,0x00,0xe0, + 0x04,0x0c,0x00,0x1c,0x05,0x4b,0x05,0x56,0x05,0x61,0x05,0x6c,0x05,0x7c,0x05,0xef, + 0x00,0x01,0xef,0x01,0x00,0xef,0x04,0x00,0xef,0x1e,0x00,0x0e,0x0c,0xcd,0x85,0x05, + 0xc9,0x21,0x04,0x43,0x3e,0x01,0xcd,0xbf,0x05,0x0e,0x0c,0xcd,0x85,0x05,0xc9,0x0e, + 0x14,0xcd,0x93,0x05,0xc9,0x0e,0x0d,0xcd,0x93,0x05,0xc9,0x21,0x07,0x43,0x3e,0x03, + 0xcd,0xbf,0x05,0x0e,0x0c,0xcd,0x85,0x05,0xc9,0x0e,0x16,0xcd,0x93,0x05,0xc9,0x0e, + 0x0f,0xcd,0x93,0x05,0xc9,0x21,0x0a,0x43,0x3e,0x05,0xcd,0xbf,0x05,0x0e,0x0c,0xcd, + 0x85,0x05,0xc9,0x0e,0x33,0xcd,0x93,0x05,0xc9,0x0e,0x2f,0xcd,0x93,0x05,0xc9,0x21, + 0x0d,0x43,0x3e,0x07,0xcd,0xbf,0x05,0x0e,0x0c,0xcd,0x85,0x05,0xc9,0x0e,0x35,0xcd, + 0x93,0x05,0xc9,0x0e,0x31,0xc3,0x80,0x05,0xef,0x1c,0x11,0x0e,0x12,0xc3,0x85,0x05, + 0x0e,0x13,0xcd,0x85,0x05,0xcd,0x79,0x08,0x35,0xef,0x11,0x00,0xef,0x05,0x01,0xef, + 0x10,0x14,0xef,0x04,0x01,0x3e,0x01,0x32,0x14,0x4e,0xaf,0x32,0x70,0x4e,0x32,0x15, + 0x4e,0x21,0x32,0x43,0x36,0x14,0x3e,0xfc,0x11,0x20,0x00,0x06,0x1c,0xdd,0x21,0x40, + 0x40,0xdd,0x77,0x11,0xdd,0x77,0x13,0xdd,0x19,0x10,0xf6,0xc9,0x21,0xa0,0x4d,0x06, + 0x21,0x3a,0x3a,0x4d,0x90,0x20,0x05,0x36,0x01,0xc3,0x8e,0x05,0xcd,0x17,0x10,0xcd, + 0x17,0x10,0xcd,0x23,0x0e,0xcd,0x0d,0x0c,0xcd,0xd6,0x0b,0xcd,0xa5,0x05,0xcd,0xfe, + 0x1e,0xcd,0x25,0x1f,0xcd,0x4c,0x1f,0xcd,0x73,0x1f,0xc9,0x21,0xa1,0x4d,0x06,0x20, + 0x3a,0x32,0x4d,0xc3,0x24,0x05,0x21,0xa2,0x4d,0x06,0x22,0x3a,0x32,0x4d,0xc3,0x24, + 0x05,0x21,0xa3,0x4d,0x06,0x24,0x3a,0x32,0x4d,0xc3,0x24,0x05,0x3a,0xd0,0x4d,0x47, + 0x3a,0xd1,0x4d,0x80,0xfe,0x06,0xca,0x8e,0x05,0xc3,0x2c,0x05,0xcd,0xbe,0x06,0xc9, + 0x3a,0x75,0x4e,0x81,0x4f,0x06,0x1c,0xcd,0x42,0x00,0xf7,0x4a,0x02,0x00,0x21,0x02, + 0x4e,0x34,0xc9,0x3a,0x75,0x4e,0x81,0x4f,0x06,0x1c,0xcd,0x42,0x00,0xf7,0x45,0x02, + 0x00,0xcd,0x8e,0x05,0xc9,0x3a,0xb5,0x4d,0xa7,0xc8,0xaf,0x32,0xb5,0x4d,0x3a,0x30, + 0x4d,0xee,0x02,0x32,0x3c,0x4d,0x47,0x21,0xff,0x32,0xdf,0x22,0x26,0x4d,0xc9,0x36, + 0xb1,0x2c,0x36,0xb3,0x2c,0x36,0xb5,0x01,0x1e,0x00,0x09,0x36,0xb0,0x2c,0x36,0xb2, + 0x2c,0x36,0xb4,0x11,0x00,0x04,0x19,0x77,0x2d,0x77,0x2d,0x77,0xa7,0xed,0x42,0x77, + 0x2d,0x77,0x2d,0x77,0xc9,0x3a,0x03,0x4e,0xe7,0xf3,0x05,0x1b,0x06,0x74,0x06,0x0c, + 0x00,0xa8,0x06,0xcd,0xa1,0x2b,0xef,0x00,0x01,0xef,0x01,0x00,0xef,0x1c,0x07,0xef, + 0x1c,0x0b,0xef,0x1e,0x00,0x21,0x03,0x4e,0x34,0x3e,0x01,0x32,0xd6,0x4d,0x3a,0x71, + 0x4e,0xfe,0xff,0xc8,0xef,0x1c,0x0a,0xef,0x1f,0x00,0xc9,0xcd,0xa1,0x2b,0x3a,0x6e, + 0x4e,0xfe,0x01,0x06,0x09,0x20,0x02,0x06,0x08,0xcd,0x5e,0x2c,0x3a,0x6e,0x4e,0xfe, + 0x01,0x3a,0x40,0x50,0x28,0x0c,0xcb,0x77,0x20,0x08,0x3e,0x01,0x32,0x70,0x4e,0xc3, + 0x49,0x06,0xcb,0x6f,0xc0,0xaf,0x32,0x70,0x4e,0x3a,0x6b,0x4e,0xa7,0x28,0x15,0x3a, + 0x70,0x4e,0xa7,0x3a,0x6e,0x4e,0x28,0x03,0xc6,0x99,0x27,0xc6,0x99,0x27,0x32,0x6e, + 0x4e,0xcd,0xa1,0x2b,0x21,0x03,0x4e,0x34,0xaf,0x32,0xd6,0x4d,0x3c,0x32,0xcc,0x4e, + 0x32,0xdc,0x4e,0xc9,0xef,0x00,0x01,0xef,0x01,0x01,0xef,0x02,0x00,0xef,0x12,0x00, + 0xef,0x03,0x00,0xef,0x1c,0x03,0xef,0x1c,0x06,0xef,0x18,0x00,0xef,0x1b,0x00,0xaf, + 0x32,0x13,0x4e,0x3a,0x6f,0x4e,0x32,0x14,0x4e,0x32,0x15,0x4e,0xef,0x1a,0x00,0xf7, + 0x57,0x01,0x00,0x21,0x03,0x4e,0x34,0xc9,0x21,0x15,0x4e,0x35,0xcd,0x6a,0x2b,0xaf, + 0x32,0x03,0x4e,0x32,0x02,0x4e,0x32,0x04,0x4e,0x21,0x00,0x4e,0x34,0xc9,0x3a,0x04, + 0x4e,0xe7,0x79,0x08,0x99,0x08,0x0c,0x00,0xcd,0x08,0x0d,0x09,0x0c,0x00,0x40,0x09, + 0x0c,0x00,0x72,0x09,0x88,0x09,0x0c,0x00,0xd2,0x09,0xd8,0x09,0x0c,0x00,0xe8,0x09, + 0x0c,0x00,0xfe,0x09,0x0c,0x00,0x02,0x0a,0x0c,0x00,0x04,0x0a,0x0c,0x00,0x06,0x0a, + 0x0c,0x00,0x08,0x0a,0x0c,0x00,0x0a,0x0a,0x0c,0x00,0x0c,0x0a,0x0c,0x00,0x0e,0x0a, + 0x0c,0x00,0x2c,0x0a,0x0c,0x00,0x7c,0x0a,0xa0,0x0a,0x0c,0x00,0xa3,0x0a,0x78,0xa7, + 0x20,0x04,0x2a,0x0a,0x4e,0x7e,0xdd,0x21,0x96,0x07,0x47,0x87,0x87,0x80,0x80,0x5f, + 0x16,0x00,0xdd,0x19,0xdd,0x7e,0x00,0x87,0x47,0x87,0x87,0x4f,0x87,0x87,0x81,0x80, + 0x5f,0x16,0x00,0x21,0x0f,0x33,0x19,0xcd,0x14,0x08,0xdd,0x7e,0x01,0x32,0xb0,0x4d, + 0xdd,0x7e,0x02,0x47,0x87,0x80,0x5f,0x16,0x00,0x21,0x43,0x08,0x19,0xcd,0x3a,0x08, + 0xdd,0x7e,0x03,0x87,0x5f,0x16,0x00,0xfd,0x21,0x4f,0x08,0xfd,0x19,0xfd,0x6e,0x00, + 0xfd,0x66,0x01,0x22,0xbb,0x4d,0xdd,0x7e,0x04,0x87,0x5f,0x16,0x00,0xfd,0x21,0x61, + 0x08,0xfd,0x19,0xfd,0x6e,0x00,0xfd,0x66,0x01,0x22,0xbd,0x4d,0xdd,0x7e,0x05,0x87, + 0x5f,0x16,0x00,0xfd,0x21,0x73,0x08,0xfd,0x19,0xfd,0x6e,0x00,0xfd,0x66,0x01,0x22, + 0x95,0x4d,0xcd,0xea,0x2b,0xc9,0x03,0x01,0x01,0x00,0x02,0x00,0x04,0x01,0x02,0x01, + 0x03,0x00,0x04,0x01,0x03,0x02,0x04,0x01,0x04,0x02,0x03,0x02,0x05,0x01,0x05,0x00, + 0x03,0x02,0x06,0x02,0x05,0x01,0x03,0x03,0x03,0x02,0x05,0x02,0x03,0x03,0x06,0x02, + 0x05,0x02,0x03,0x03,0x06,0x02,0x05,0x00,0x03,0x04,0x07,0x02,0x05,0x01,0x03,0x04, + 0x03,0x02,0x05,0x02,0x03,0x04,0x06,0x02,0x05,0x02,0x03,0x05,0x07,0x02,0x05,0x00, + 0x03,0x05,0x07,0x02,0x05,0x02,0x03,0x05,0x05,0x02,0x05,0x01,0x03,0x06,0x07,0x02, + 0x05,0x02,0x03,0x06,0x07,0x02,0x05,0x02,0x03,0x06,0x08,0x02,0x05,0x02,0x03,0x06, + 0x07,0x02,0x05,0x02,0x03,0x07,0x08,0x02,0x05,0x02,0x03,0x07,0x08,0x02,0x06,0x02, + 0x03,0x07,0x08,0x02,0x11,0x46,0x4d,0x01,0x1c,0x00,0xed,0xb0,0x01,0x0c,0x00,0xa7, + 0xed,0x42,0xed,0xb0,0x01,0x0c,0x00,0xa7,0xed,0x42,0xed,0xb0,0x01,0x0c,0x00,0xa7, + 0xed,0x42,0xed,0xb0,0x01,0x0e,0x00,0xed,0xb0,0xc9,0x11,0xb8,0x4d,0x01,0x03,0x00, + 0xed,0xb0,0xc9,0x14,0x1e,0x46,0x00,0x1e,0x3c,0x00,0x00,0x32,0x00,0x00,0x00,0x14, + 0x0a,0x1e,0x0f,0x28,0x14,0x32,0x19,0x3c,0x1e,0x50,0x28,0x64,0x32,0x78,0x3c,0x8c, + 0x46,0xc0,0x03,0x48,0x03,0xd0,0x02,0x58,0x02,0xe0,0x01,0x68,0x01,0xf0,0x00,0x78, + 0x00,0x01,0x00,0xf0,0x00,0xf0,0x00,0xb4,0x00,0x21,0x09,0x4e,0xaf,0x06,0x0b,0xcf, + 0xcd,0xc9,0x24,0x2a,0x73,0x4e,0x22,0x0a,0x4e,0x21,0x0a,0x4e,0x11,0x38,0x4e,0x01, + 0x2e,0x00,0xed,0xb0,0x21,0x04,0x4e,0x34,0xc9,0x3a,0x00,0x4e,0x3d,0x20,0x06,0x3e, + 0x09,0x32,0x04,0x4e,0xc9,0xef,0x11,0x00,0xef,0x1c,0x83,0xef,0x04,0x00,0xef,0x05, + 0x00,0xef,0x10,0x00,0xef,0x1a,0x00,0xf7,0x54,0x00,0x00,0xf7,0x54,0x06,0x00,0x3a, + 0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0x32,0x03,0x50,0xc3,0x94,0x08,0x3a,0x00,0x50, + 0xcb,0x67,0xc2,0xde,0x08,0x21,0x04,0x4e,0x36,0x0e,0xef,0x13,0x00,0xc9,0x3a,0x0e, + 0x4e,0xfe,0xf4,0x20,0x06,0x21,0x04,0x4e,0x36,0x0c,0xc9,0xcd,0x17,0x10,0xcd,0x17, + 0x10,0xcd,0xdd,0x13,0xcd,0x42,0x0c,0xcd,0x23,0x0e,0xcd,0x36,0x0e,0xcd,0xc3,0x0a, + 0xcd,0xd6,0x0b,0xcd,0x0d,0x0c,0xcd,0x6c,0x0e,0xcd,0xad,0x0e,0xc9,0x3e,0x01,0x32, + 0x12,0x4e,0xcd,0x87,0x24,0x21,0x04,0x4e,0x34,0x3a,0x14,0x4e,0xa7,0x20,0x1f,0x3a, + 0x70,0x4e,0xa7,0x28,0x19,0x3a,0x42,0x4e,0xa7,0x28,0x13,0x3a,0x09,0x4e,0xc6,0x03, + 0x4f,0x06,0x1c,0xcd,0x42,0x00,0xef,0x1c,0x05,0xf7,0x54,0x00,0x00,0xc9,0x34,0xc9, + 0x3a,0x70,0x4e,0xa7,0x28,0x06,0x3a,0x42,0x4e,0xa7,0x20,0x15,0x3a,0x14,0x4e,0xa7, + 0x20,0x1a,0xcd,0xa1,0x2b,0xef,0x1c,0x05,0xf7,0x54,0x00,0x00,0x21,0x04,0x4e,0x34, + 0xc9,0xcd,0xa6,0x0a,0x3a,0x09,0x4e,0xee,0x01,0x32,0x09,0x4e,0x3e,0x09,0x32,0x04, + 0x4e,0xc9,0xaf,0x32,0x02,0x4e,0x32,0x04,0x4e,0x32,0x70,0x4e,0x32,0x09,0x4e,0x32, + 0x03,0x50,0x3e,0x01,0x32,0x00,0x4e,0xc9,0xef,0x00,0x01,0xef,0x01,0x01,0xef,0x02, + 0x00,0xef,0x11,0x00,0xef,0x13,0x00,0xef,0x03,0x00,0xef,0x04,0x00,0xef,0x05,0x00, + 0xef,0x10,0x00,0xef,0x1a,0x00,0xef,0x1c,0x06,0x3a,0x00,0x4e,0xfe,0x03,0x28,0x06, + 0xef,0x1c,0x05,0xef,0x1d,0x00,0xf7,0x54,0x00,0x00,0x3a,0x00,0x4e,0x3d,0x28,0x04, + 0xf7,0x54,0x06,0x00,0x3a,0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0x32,0x03,0x50,0xc3, + 0x94,0x08,0x3e,0x03,0x32,0x04,0x4e,0xc9,0xf7,0x54,0x00,0x00,0x21,0x04,0x4e,0x34, + 0xaf,0x32,0xac,0x4e,0x32,0xbc,0x4e,0xc9,0x0e,0x02,0x06,0x01,0xcd,0x42,0x00,0xf7, + 0x42,0x00,0x00,0x21,0x00,0x00,0xcd,0x7e,0x26,0x21,0x04,0x4e,0x34,0xc9,0x0e,0x00, + 0x18,0xe8,0x18,0xe4,0x18,0xf8,0x18,0xe0,0x18,0xf4,0x18,0xdc,0x18,0xf0,0xef,0x00, + 0x01,0xef,0x06,0x00,0xef,0x11,0x00,0xef,0x13,0x00,0xef,0x04,0x01,0xef,0x05,0x01, + 0xef,0x10,0x13,0xf7,0x43,0x00,0x00,0x21,0x04,0x4e,0x34,0xc9,0xaf,0x32,0xac,0x4e, + 0x32,0xbc,0x4e,0x3e,0x02,0x32,0xcc,0x4e,0x32,0xdc,0x4e,0x3a,0x13,0x4e,0xfe,0x14, + 0x38,0x02,0x3e,0x14,0xe7,0x6f,0x0a,0x08,0x21,0x6f,0x0a,0x6f,0x0a,0x9e,0x21,0x6f, + 0x0a,0x6f,0x0a,0x6f,0x0a,0x97,0x22,0x6f,0x0a,0x6f,0x0a,0x6f,0x0a,0x97,0x22,0x6f, + 0x0a,0x6f,0x0a,0x6f,0x0a,0x97,0x22,0x6f,0x0a,0x6f,0x0a,0x6f,0x0a,0x6f,0x0a,0x21, + 0x04,0x4e,0x34,0x34,0xaf,0x32,0xcc,0x4e,0x32,0xdc,0x4e,0xc9,0xaf,0x32,0xcc,0x4e, + 0x32,0xdc,0x4e,0x06,0x07,0x21,0x0c,0x4e,0xcf,0xcd,0xc9,0x24,0x21,0x04,0x4e,0x34, + 0x21,0x13,0x4e,0x34,0x2a,0x0a,0x4e,0x7e,0xfe,0x14,0xc8,0x23,0x22,0x0a,0x4e,0xc9, + 0xc3,0x88,0x09,0xc3,0xd2,0x09,0x06,0x2e,0xdd,0x21,0x0a,0x4e,0xfd,0x21,0x38,0x4e, + 0xdd,0x56,0x00,0xfd,0x5e,0x00,0xfd,0x72,0x00,0xdd,0x73,0x00,0xdd,0x23,0xfd,0x23, + 0x10,0xee,0xc9,0x3a,0xa4,0x4d,0xa7,0xc0,0xdd,0x21,0x00,0x4c,0xfd,0x21,0xc8,0x4d, + 0x11,0x00,0x01,0xfd,0xbe,0x00,0xc2,0xd2,0x0b,0xfd,0x36,0x00,0x0e,0x3a,0xa6,0x4d, + 0xa7,0x28,0x1b,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30,0x13,0x21,0xac,0x4e,0xcb,0xfe, + 0x3e,0x09,0xdd,0xbe,0x0b,0x20,0x04,0xcb,0xbe,0x3e,0x09,0x32,0x0b,0x4c,0x3a,0xa7, + 0x4d,0xa7,0x28,0x1d,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30,0x27,0x3e,0x11,0xdd,0xbe, + 0x03,0x28,0x07,0xdd,0x36,0x03,0x11,0xc3,0x33,0x0b,0xdd,0x36,0x03,0x12,0xc3,0x33, + 0x0b,0x3e,0x01,0xdd,0xbe,0x03,0x28,0x07,0xdd,0x36,0x03,0x01,0xc3,0x33,0x0b,0xdd, + 0x36,0x03,0x01,0x3a,0xa8,0x4d,0xa7,0x28,0x1d,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30, + 0x27,0x3e,0x11,0xdd,0xbe,0x05,0x28,0x07,0xdd,0x36,0x05,0x11,0xc3,0x68,0x0b,0xdd, + 0x36,0x05,0x12,0xc3,0x68,0x0b,0x3e,0x03,0xdd,0xbe,0x05,0x28,0x07,0xdd,0x36,0x05, + 0x03,0xc3,0x68,0x0b,0xdd,0x36,0x05,0x03,0x3a,0xa9,0x4d,0xa7,0x28,0x1d,0x2a,0xcb, + 0x4d,0xa7,0xed,0x52,0x30,0x27,0x3e,0x11,0xdd,0xbe,0x07,0x28,0x07,0xdd,0x36,0x07, + 0x11,0xc3,0x9d,0x0b,0xdd,0x36,0x07,0x12,0xc3,0x9d,0x0b,0x3e,0x05,0xdd,0xbe,0x07, + 0x28,0x07,0xdd,0x36,0x07,0x05,0xc3,0x9d,0x0b,0xdd,0x36,0x07,0x05,0x3a,0xaa,0x4d, + 0xa7,0x28,0x1d,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30,0x27,0x3e,0x11,0xdd,0xbe,0x09, + 0x28,0x07,0xdd,0x36,0x09,0x11,0xc3,0xd2,0x0b,0xdd,0x36,0x09,0x12,0xc3,0xd2,0x0b, + 0x3e,0x07,0xdd,0xbe,0x09,0x28,0x07,0xdd,0x36,0x09,0x07,0xc3,0xd2,0x0b,0xdd,0x36, + 0x09,0x07,0xfd,0x35,0x00,0xc9,0x06,0x19,0x3a,0x02,0x4e,0xfe,0x22,0xc2,0xe2,0x0b, + 0x06,0x00,0xdd,0x21,0x00,0x4c,0x3a,0xac,0x4d,0xa7,0xca,0xf0,0x0b,0xdd,0x70,0x03, + 0x3a,0xad,0x4d,0xa7,0xca,0xfa,0x0b,0xdd,0x70,0x05,0x3a,0xae,0x4d,0xa7,0xca,0x04, + 0x0c,0xdd,0x70,0x07,0x3a,0xaf,0x4d,0xa7,0xc8,0xdd,0x70,0x09,0xc9,0x21,0xcf,0x4d, + 0x34,0x3e,0x0a,0xbe,0xc0,0x36,0x00,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x15,0x21,0x64, + 0x44,0x3e,0x10,0xbe,0x20,0x02,0x3e,0x00,0x77,0x32,0x78,0x44,0x32,0x84,0x47,0x32, + 0x98,0x47,0xc9,0x21,0x32,0x47,0x3e,0x10,0xbe,0x20,0x02,0x3e,0x00,0x77,0x32,0x78, + 0x46,0xc9,0x3a,0xa4,0x4d,0xa7,0xc0,0x3a,0x94,0x4d,0x07,0x32,0x94,0x4d,0xd0,0x3a, + 0xa0,0x4d,0xa7,0xc2,0x90,0x0c,0xdd,0x21,0x05,0x33,0xfd,0x21,0x00,0x4d,0xcd,0x00, + 0x20,0x22,0x00,0x4d,0x3e,0x03,0x32,0x28,0x4d,0x32,0x2c,0x4d,0x3a,0x00,0x4d,0xfe, + 0x64,0xc2,0x90,0x0c,0x21,0x2c,0x2e,0x22,0x0a,0x4d,0x21,0x00,0x01,0x22,0x14,0x4d, + 0x22,0x1e,0x4d,0x3e,0x02,0x32,0x28,0x4d,0x32,0x2c,0x4d,0x3e,0x01,0x32,0xa0,0x4d, + 0x3a,0xa1,0x4d,0xfe,0x01,0xca,0xfb,0x0c,0xfe,0x00,0xc2,0xc1,0x0c,0x3a,0x02,0x4d, + 0xfe,0x78,0xcc,0x2e,0x1f,0xfe,0x80,0xcc,0x2e,0x1f,0x3a,0x2d,0x4d,0x32,0x29,0x4d, + 0xdd,0x21,0x20,0x4d,0xfd,0x21,0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0xc3,0xfb, + 0x0c,0xdd,0x21,0x05,0x33,0xfd,0x21,0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0x3e, + 0x03,0x32,0x2d,0x4d,0x32,0x29,0x4d,0x3a,0x02,0x4d,0xfe,0x64,0xc2,0xfb,0x0c,0x21, + 0x2c,0x2e,0x22,0x0c,0x4d,0x21,0x00,0x01,0x22,0x16,0x4d,0x22,0x20,0x4d,0x3e,0x02, + 0x32,0x29,0x4d,0x32,0x2d,0x4d,0x3e,0x01,0x32,0xa1,0x4d,0x3a,0xa2,0x4d,0xfe,0x01, + 0xca,0x93,0x0d,0xfe,0x00,0xc2,0x2c,0x0d,0x3a,0x04,0x4d,0xfe,0x78,0xcc,0x55,0x1f, + 0xfe,0x80,0xcc,0x55,0x1f,0x3a,0x2e,0x4d,0x32,0x2a,0x4d,0xdd,0x21,0x22,0x4d,0xfd, + 0x21,0x04,0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0xc3,0x93,0x0d,0x3a,0xa2,0x4d,0xfe, + 0x03,0xc2,0x59,0x0d,0xdd,0x21,0xff,0x32,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22, + 0x04,0x4d,0xaf,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0x3a,0x05,0x4d,0xfe,0x80,0xc2,0x93, + 0x0d,0x3e,0x02,0x32,0xa2,0x4d,0xc3,0x93,0x0d,0xdd,0x21,0x05,0x33,0xfd,0x21,0x04, + 0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0x3e,0x03,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0x3a, + 0x04,0x4d,0xfe,0x64,0xc2,0x93,0x0d,0x21,0x2c,0x2e,0x22,0x0e,0x4d,0x21,0x00,0x01, + 0x22,0x18,0x4d,0x22,0x22,0x4d,0x3e,0x02,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0x3e,0x01, + 0x32,0xa2,0x4d,0x3a,0xa3,0x4d,0xfe,0x01,0xc8,0xfe,0x00,0xc2,0xc0,0x0d,0x3a,0x06, + 0x4d,0xfe,0x78,0xcc,0x7c,0x1f,0xfe,0x80,0xcc,0x7c,0x1f,0x3a,0x2f,0x4d,0x32,0x2b, + 0x4d,0xdd,0x21,0x24,0x4d,0xfd,0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0xc9, + 0x3a,0xa3,0x4d,0xfe,0x03,0xc2,0xea,0x0d,0xdd,0x21,0x03,0x33,0xfd,0x21,0x06,0x4d, + 0xcd,0x00,0x20,0x22,0x06,0x4d,0x3e,0x02,0x32,0x2b,0x4d,0x32,0x2f,0x4d,0x3a,0x07, + 0x4d,0xfe,0x80,0xc0,0x3e,0x02,0x32,0xa3,0x4d,0xc9,0xdd,0x21,0x05,0x33,0xfd,0x21, + 0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0x3e,0x03,0x32,0x2b,0x4d,0x32,0x2f,0x4d, + 0x3a,0x06,0x4d,0xfe,0x64,0xc0,0x21,0x2c,0x2e,0x22,0x10,0x4d,0x21,0x00,0x01,0x22, + 0x1a,0x4d,0x22,0x24,0x4d,0x3e,0x02,0x32,0x2b,0x4d,0x32,0x2f,0x4d,0x3e,0x01,0x32, + 0xa3,0x4d,0xc9,0x21,0xc4,0x4d,0x34,0x3e,0x08,0xbe,0xc0,0x36,0x00,0x3a,0xc0,0x4d, + 0xee,0x01,0x32,0xc0,0x4d,0xc9,0x3a,0xa6,0x4d,0xa7,0xc0,0x3a,0xc1,0x4d,0xfe,0x07, + 0xc8,0x87,0x2a,0xc2,0x4d,0x23,0x22,0xc2,0x4d,0x5f,0x16,0x00,0xdd,0x21,0x86,0x4d, + 0xdd,0x19,0xdd,0x5e,0x00,0xdd,0x56,0x01,0xa7,0xed,0x52,0xc0,0xcb,0x3f,0x3c,0x32, + 0xc1,0x4d,0x21,0x01,0x01,0x22,0xb1,0x4d,0x22,0xb3,0x4d,0xc9,0x3a,0xa5,0x4d,0xa7, + 0x28,0x05,0xaf,0x32,0xac,0x4e,0xc9,0x21,0xac,0x4e,0x06,0xe0,0x3a,0x0e,0x4e,0xfe, + 0xe4,0x38,0x06,0x78,0xa6,0xcb,0xe7,0x77,0xc9,0xfe,0xd4,0x38,0x06,0x78,0xa6,0xcb, + 0xdf,0x77,0xc9,0xfe,0xb4,0x38,0x06,0x78,0xa6,0xcb,0xd7,0x77,0xc9,0xfe,0x74,0x38, + 0x06,0x78,0xa6,0xcb,0xcf,0x77,0xc9,0x78,0xa6,0xcb,0xc7,0x77,0xc9,0x3a,0xa5,0x4d, + 0xa7,0xc0,0x3a,0xd4,0x4d,0xa7,0xc0,0x3a,0x0e,0x4e,0xfe,0x46,0x28,0x0e,0xfe,0xaa, + 0xc0,0x3a,0x0d,0x4e,0xa7,0xc0,0x21,0x0d,0x4e,0x34,0x18,0x09,0x3a,0x0c,0x4e,0xa7, + 0xc0,0x21,0x0c,0x4e,0x34,0x21,0x94,0x80,0x22,0xd2,0x4d,0x21,0xfd,0x0e,0x3a,0x13, + 0x4e,0xfe,0x14,0x38,0x02,0x3e,0x14,0x47,0x87,0x80,0xd7,0x32,0x0c,0x4c,0x23,0x7e, + 0x32,0x0d,0x4c,0x23,0x7e,0x32,0xd4,0x4d,0xf7,0x8a,0x04,0x00,0xc9,0x00,0x14,0x06, + 0x01,0x0f,0x07,0x02,0x15,0x08,0x02,0x15,0x08,0x04,0x14,0x09,0x04,0x14,0x09,0x05, + 0x17,0x0a,0x05,0x17,0x0a,0x06,0x09,0x0b,0x06,0x09,0x0b,0x03,0x16,0x0c,0x03,0x16, + 0x0c,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d, + 0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x36, + 0xaf,0x32,0xd4,0x4d,0x21,0x00,0x00,0x22,0xd2,0x4d,0xc9,0xef,0x1c,0x9b,0x3a,0x00, + 0x4e,0x3d,0xc8,0xef,0x1c,0xa2,0xc9,0xcd,0x91,0x12,0x3a,0xa5,0x4d,0xa7,0xc0,0xcd, + 0x66,0x10,0xcd,0x94,0x10,0xcd,0x9e,0x10,0xcd,0xa8,0x10,0xcd,0xb4,0x10,0x3a,0xa4, + 0x4d,0xa7,0xca,0x39,0x10,0xcd,0x35,0x12,0xc9,0xcd,0x1d,0x17,0xcd,0x89,0x17,0x3a, + 0xa4,0x4d,0xa7,0xc0,0xcd,0x06,0x18,0xcd,0x36,0x1b,0xcd,0x4b,0x1c,0xcd,0x22,0x1d, + 0xcd,0xf9,0x1d,0x3a,0x04,0x4e,0xfe,0x03,0xc0,0xcd,0x76,0x13,0xcd,0x69,0x20,0xcd, + 0x8c,0x20,0xcd,0xaf,0x20,0xc9,0x3a,0xab,0x4d,0xa7,0xc8,0x3d,0x20,0x08,0x32,0xab, + 0x4d,0x3c,0x32,0xac,0x4d,0xc9,0x3d,0x20,0x08,0x32,0xab,0x4d,0x3c,0x32,0xad,0x4d, + 0xc9,0x3d,0x20,0x08,0x32,0xab,0x4d,0x3c,0x32,0xae,0x4d,0xc9,0x32,0xaf,0x4d,0x3d, + 0x32,0xab,0x4d,0xc9,0x3a,0xac,0x4d,0xe7,0x0c,0x00,0xc0,0x10,0xd2,0x10,0x3a,0xad, + 0x4d,0xe7,0x0c,0x00,0x18,0x11,0x2a,0x11,0x3a,0xae,0x4d,0xe7,0x0c,0x00,0x5c,0x11, + 0x6e,0x11,0x8f,0x11,0x3a,0xaf,0x4d,0xe7,0x0c,0x00,0xc9,0x11,0xdb,0x11,0xfc,0x11, + 0xcd,0xd8,0x1b,0x2a,0x00,0x4d,0x11,0x64,0x80,0xa7,0xed,0x52,0xc0,0x21,0xac,0x4d, + 0x34,0xc9,0xdd,0x21,0x01,0x33,0xfd,0x21,0x00,0x4d,0xcd,0x00,0x20,0x22,0x00,0x4d, + 0x3e,0x01,0x32,0x28,0x4d,0x32,0x2c,0x4d,0x3a,0x00,0x4d,0xfe,0x80,0xc0,0x21,0x2f, + 0x2e,0x22,0x0a,0x4d,0x22,0x31,0x4d,0xaf,0x32,0xa0,0x4d,0x32,0xac,0x4d,0x32,0xa7, + 0x4d,0xdd,0x21,0xac,0x4d,0xdd,0xb6,0x00,0xdd,0xb6,0x01,0xdd,0xb6,0x02,0xdd,0xb6, + 0x03,0xc0,0x21,0xac,0x4e,0xcb,0xb6,0xc9,0xcd,0xaf,0x1c,0x2a,0x02,0x4d,0x11,0x64, + 0x80,0xa7,0xed,0x52,0xc0,0x21,0xad,0x4d,0x34,0xc9,0xdd,0x21,0x01,0x33,0xfd,0x21, + 0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0x3e,0x01,0x32,0x29,0x4d,0x32,0x2d,0x4d, + 0x3a,0x02,0x4d,0xfe,0x80,0xc0,0x21,0x2f,0x2e,0x22,0x0c,0x4d,0x22,0x33,0x4d,0xaf, + 0x32,0xa1,0x4d,0x32,0xad,0x4d,0x32,0xa8,0x4d,0xc3,0x01,0x11,0xcd,0x86,0x1d,0x2a, + 0x04,0x4d,0x11,0x64,0x80,0xa7,0xed,0x52,0xc0,0x21,0xae,0x4d,0x34,0xc9,0xdd,0x21, + 0x01,0x33,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0x3e,0x01,0x32,0x2a, + 0x4d,0x32,0x2e,0x4d,0x3a,0x04,0x4d,0xfe,0x80,0xc0,0x21,0xae,0x4d,0x34,0xc9,0xdd, + 0x21,0x03,0x33,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0x3e,0x02,0x32, + 0x2a,0x4d,0x32,0x2e,0x4d,0x3a,0x05,0x4d,0xfe,0x90,0xc0,0x21,0x2f,0x30,0x22,0x0e, + 0x4d,0x22,0x35,0x4d,0x3e,0x01,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0xaf,0x32,0xa2,0x4d, + 0x32,0xae,0x4d,0x32,0xa9,0x4d,0xc3,0x01,0x11,0xcd,0x5d,0x1e,0x2a,0x06,0x4d,0x11, + 0x64,0x80,0xa7,0xed,0x52,0xc0,0x21,0xaf,0x4d,0x34,0xc9,0xdd,0x21,0x01,0x33,0xfd, + 0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0x3e,0x01,0x32,0x2b,0x4d,0x32,0x2f, + 0x4d,0x3a,0x06,0x4d,0xfe,0x80,0xc0,0x21,0xaf,0x4d,0x34,0xc9,0xdd,0x21,0xff,0x32, + 0xfd,0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0xaf,0x32,0x2b,0x4d,0x32,0x2f, + 0x4d,0x3a,0x07,0x4d,0xfe,0x70,0xc0,0x21,0x2f,0x2c,0x22,0x10,0x4d,0x22,0x37,0x4d, + 0x3e,0x01,0x32,0x2b,0x4d,0x32,0x2f,0x4d,0xaf,0x32,0xa3,0x4d,0x32,0xaf,0x4d,0x32, + 0xaa,0x4d,0xc3,0x01,0x11,0x3a,0xd1,0x4d,0xe7,0x3f,0x12,0x0c,0x00,0x3f,0x12,0x21, + 0x00,0x4c,0x3a,0xa4,0x4d,0x87,0x5f,0x16,0x00,0x19,0x3a,0xd1,0x4d,0xa7,0x20,0x27, + 0x3a,0xd0,0x4d,0x06,0x27,0x80,0x47,0x3a,0x72,0x4e,0x4f,0x3a,0x09,0x4e,0xa1,0x28, + 0x04,0xcb,0xf0,0xcb,0xf8,0x70,0x23,0x36,0x18,0x3e,0x00,0x32,0x0b,0x4c,0xf7,0x4a, + 0x03,0x00,0x21,0xd1,0x4d,0x34,0xc9,0x36,0x20,0x3e,0x09,0x32,0x0b,0x4c,0x3a,0xa4, + 0x4d,0x32,0xab,0x4d,0xaf,0x32,0xa4,0x4d,0x32,0xd1,0x4d,0x21,0xac,0x4e,0xcb,0xf6, + 0xc9,0x3a,0xa5,0x4d,0xe7,0x0c,0x00,0xb7,0x12,0xb7,0x12,0xb7,0x12,0xb7,0x12,0xcb, + 0x12,0xf9,0x12,0x06,0x13,0x0e,0x13,0x16,0x13,0x1e,0x13,0x26,0x13,0x2e,0x13,0x36, + 0x13,0x3e,0x13,0x46,0x13,0x53,0x13,0x2a,0xc5,0x4d,0x23,0x22,0xc5,0x4d,0x11,0x78, + 0x00,0xa7,0xed,0x52,0xc0,0x3e,0x05,0x32,0xa5,0x4d,0xc9,0x21,0x00,0x00,0xcd,0x7e, + 0x26,0x3e,0x34,0x11,0xb4,0x00,0x4f,0x3a,0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0x28, + 0x04,0x3e,0xc0,0xb1,0x4f,0x79,0x32,0x0a,0x4c,0x2a,0xc5,0x4d,0x23,0x22,0xc5,0x4d, + 0xa7,0xed,0x52,0xc0,0x21,0xa5,0x4d,0x34,0xc9,0x21,0xbc,0x4e,0xcb,0xe6,0x3e,0x35, + 0x11,0xc3,0x00,0xc3,0xd6,0x12,0x3e,0x36,0x11,0xd2,0x00,0xc3,0xd6,0x12,0x3e,0x37, + 0x11,0xe1,0x00,0xc3,0xd6,0x12,0x3e,0x38,0x11,0xf0,0x00,0xc3,0xd6,0x12,0x3e,0x39, + 0x11,0xff,0x00,0xc3,0xd6,0x12,0x3e,0x3a,0x11,0x0e,0x01,0xc3,0xd6,0x12,0x3e,0x3b, + 0x11,0x1d,0x01,0xc3,0xd6,0x12,0x3e,0x3c,0x11,0x2c,0x01,0xc3,0xd6,0x12,0x3e,0x3d, + 0x11,0x3b,0x01,0xc3,0xd6,0x12,0x21,0xbc,0x4e,0x36,0x20,0x3e,0x3e,0x11,0x59,0x01, + 0xc3,0xd6,0x12,0x3e,0x3f,0x32,0x0a,0x4c,0x2a,0xc5,0x4d,0x23,0x22,0xc5,0x4d,0x11, + 0xb8,0x01,0xa7,0xed,0x52,0xc0,0x21,0x14,0x4e,0x35,0x21,0x15,0x4e,0x35,0xcd,0x75, + 0x26,0x21,0x04,0x4e,0x34,0xc9,0x3a,0xa6,0x4d,0xa7,0xc8,0xdd,0x21,0xa7,0x4d,0xdd, + 0x7e,0x00,0xdd,0xb6,0x01,0xdd,0xb6,0x02,0xdd,0xb6,0x03,0xca,0x98,0x13,0x2a,0xcb, + 0x4d,0x2b,0x22,0xcb,0x4d,0x7c,0xb5,0xc0,0x21,0x0b,0x4c,0x36,0x09,0x3a,0xac,0x4d, + 0xa7,0xc2,0xa7,0x13,0x32,0xa7,0x4d,0x3a,0xad,0x4d,0xa7,0xc2,0xb1,0x13,0x32,0xa8, + 0x4d,0x3a,0xae,0x4d,0xa7,0xc2,0xbb,0x13,0x32,0xa9,0x4d,0x3a,0xaf,0x4d,0xa7,0xc2, + 0xc5,0x13,0x32,0xaa,0x4d,0xaf,0x32,0xcb,0x4d,0x32,0xcc,0x4d,0x32,0xa6,0x4d,0x32, + 0xc8,0x4d,0x32,0xd0,0x4d,0x21,0xac,0x4e,0xcb,0xae,0xcb,0xbe,0xc9,0x21,0x9e,0x4d, + 0x3a,0x0e,0x4e,0xbe,0xca,0xee,0x13,0x21,0x00,0x00,0x22,0x97,0x4d,0xc9,0x2a,0x97, + 0x4d,0x23,0x22,0x97,0x4d,0xed,0x5b,0x95,0x4d,0xa7,0xed,0x52,0xc0,0x21,0x00,0x00, + 0x22,0x97,0x4d,0x3a,0xa1,0x4d,0xa7,0xf5,0xcc,0x86,0x20,0xf1,0xc8,0x3a,0xa2,0x4d, + 0xa7,0xf5,0xcc,0xa9,0x20,0xf1,0xc8,0x3a,0xa3,0x4d,0xa7,0xcc,0xd1,0x20,0xc9,0x3a, + 0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0xc8,0x47,0xdd,0x21,0x00,0x4c,0x1e,0x08,0x0e, + 0x08,0x16,0x07,0x3a,0x00,0x4d,0x83,0xdd,0x77,0x13,0x3a,0x01,0x4d,0x2f,0x82,0xdd, + 0x77,0x12,0x3a,0x02,0x4d,0x83,0xdd,0x77,0x15,0x3a,0x03,0x4d,0x2f,0x82,0xdd,0x77, + 0x14,0x3a,0x04,0x4d,0x83,0xdd,0x77,0x17,0x3a,0x05,0x4d,0x2f,0x81,0xdd,0x77,0x16, + 0x3a,0x06,0x4d,0x83,0xdd,0x77,0x19,0x3a,0x07,0x4d,0x2f,0x81,0xdd,0x77,0x18,0x3a, + 0x08,0x4d,0x83,0xdd,0x77,0x1b,0x3a,0x09,0x4d,0x2f,0x81,0xdd,0x77,0x1a,0x3a,0xd2, + 0x4d,0x83,0xdd,0x77,0x1d,0x3a,0xd3,0x4d,0x2f,0x81,0xdd,0x77,0x1c,0xc3,0xfe,0x14, + 0x3a,0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0xc0,0x47,0x1e,0x09,0x0e,0x07,0x16,0x06, + 0xdd,0x21,0x00,0x4c,0x3a,0x00,0x4d,0x2f,0x83,0xdd,0x77,0x13,0x3a,0x01,0x4d,0x82, + 0xdd,0x77,0x12,0x3a,0x02,0x4d,0x2f,0x83,0xdd,0x77,0x15,0x3a,0x03,0x4d,0x82,0xdd, + 0x77,0x14,0x3a,0x04,0x4d,0x2f,0x83,0xdd,0x77,0x17,0x3a,0x05,0x4d,0x81,0xdd,0x77, + 0x16,0x3a,0x06,0x4d,0x2f,0x83,0xdd,0x77,0x19,0x3a,0x07,0x4d,0x81,0xdd,0x77,0x18, + 0x3a,0x08,0x4d,0x2f,0x83,0xdd,0x77,0x1b,0x3a,0x09,0x4d,0x81,0xdd,0x77,0x1a,0x3a, + 0xd2,0x4d,0x2f,0x83,0xdd,0x77,0x1d,0x3a,0xd3,0x4d,0x81,0xdd,0x77,0x1c,0x3a,0xa5, + 0x4d,0xa7,0xc2,0x4b,0x15,0x3a,0xa4,0x4d,0xa7,0xc2,0xb4,0x15,0x21,0x1c,0x15,0xe5, + 0x3a,0x30,0x4d,0xe7,0x8c,0x16,0xb1,0x16,0xd6,0x16,0xf7,0x16,0x78,0xa7,0x28,0x2b, + 0x0e,0xc0,0x3a,0x0a,0x4c,0x57,0xa1,0x20,0x05,0x7a,0xb1,0xc3,0x48,0x15,0x3a,0x30, + 0x4d,0xfe,0x02,0x20,0x09,0xcb,0x7a,0x28,0x12,0x7a,0xa9,0xc3,0x48,0x15,0xfe,0x03, + 0x20,0x09,0xcb,0x72,0x28,0x05,0x7a,0xa9,0x32,0x0a,0x4c,0x21,0xc0,0x4d,0x56,0x3e, + 0x1c,0x82,0xdd,0x77,0x02,0xdd,0x77,0x04,0xdd,0x77,0x06,0xdd,0x77,0x08,0x0e,0x20, + 0x3a,0xac,0x4d,0xa7,0x20,0x06,0x3a,0xa7,0x4d,0xa7,0x20,0x09,0x3a,0x2c,0x4d,0x87, + 0x82,0x81,0xdd,0x77,0x02,0x3a,0xad,0x4d,0xa7,0x20,0x06,0x3a,0xa8,0x4d,0xa7,0x20, + 0x09,0x3a,0x2d,0x4d,0x87,0x82,0x81,0xdd,0x77,0x04,0x3a,0xae,0x4d,0xa7,0x20,0x06, + 0x3a,0xa9,0x4d,0xa7,0x20,0x09,0x3a,0x2e,0x4d,0x87,0x82,0x81,0xdd,0x77,0x06,0x3a, + 0xaf,0x4d,0xa7,0x20,0x06,0x3a,0xaa,0x4d,0xa7,0x20,0x09,0x3a,0x2f,0x4d,0x87,0x82, + 0x81,0xdd,0x77,0x08,0xcd,0xe6,0x15,0xcd,0x2d,0x16,0xcd,0x52,0x16,0x78,0xa7,0xc8, + 0x0e,0xc0,0x3a,0x02,0x4c,0xb1,0x32,0x02,0x4c,0x3a,0x04,0x4c,0xb1,0x32,0x04,0x4c, + 0x3a,0x06,0x4c,0xb1,0x32,0x06,0x4c,0x3a,0x08,0x4c,0xb1,0x32,0x08,0x4c,0x3a,0x0c, + 0x4c,0xb1,0x32,0x0c,0x4c,0xc9,0x3a,0x06,0x4e,0xd6,0x05,0xd8,0x3a,0x09,0x4d,0xe6, + 0x0f,0xfe,0x0c,0x38,0x04,0x16,0x18,0x18,0x12,0xfe,0x08,0x38,0x04,0x16,0x14,0x18, + 0x0a,0xfe,0x04,0x38,0x04,0x16,0x10,0x18,0x02,0x16,0x14,0xdd,0x72,0x04,0x14,0xdd, + 0x72,0x06,0x14,0xdd,0x72,0x08,0x14,0xdd,0x72,0x0c,0xdd,0x36,0x0a,0x3f,0x16,0x16, + 0xdd,0x72,0x05,0xdd,0x72,0x07,0xdd,0x72,0x09,0xdd,0x72,0x0d,0xc9,0x3a,0x07,0x4e, + 0xa7,0xc8,0x57,0x3a,0x3a,0x4d,0xd6,0x3d,0x20,0x04,0xdd,0x36,0x0b,0x00,0x7a,0xfe, + 0x0a,0xd8,0xdd,0x36,0x02,0x32,0xdd,0x36,0x03,0x1d,0xfe,0x0c,0xd8,0xdd,0x36,0x02, + 0x33,0xc9,0x3a,0x08,0x4e,0xa7,0xc8,0x57,0x3a,0x3a,0x4d,0xd6,0x3d,0x20,0x04,0xdd, + 0x36,0x0b,0x00,0x7a,0xfe,0x01,0xd8,0x3a,0xc0,0x4d,0x1e,0x08,0x83,0xdd,0x77,0x02, + 0x7a,0xfe,0x03,0xd8,0x3a,0x01,0x4d,0xe6,0x08,0x0f,0x0f,0x0f,0x1e,0x0a,0x83,0xdd, + 0x77,0x0c,0x3c,0x3c,0xdd,0x77,0x02,0xdd,0x36,0x0d,0x1e,0xc9,0x3a,0x09,0x4d,0xe6, + 0x07,0xfe,0x06,0x38,0x05,0xdd,0x36,0x0a,0x30,0xc9,0xfe,0x04,0x38,0x05,0xdd,0x36, + 0x0a,0x2e,0xc9,0xfe,0x02,0x38,0x05,0xdd,0x36,0x0a,0x2c,0xc9,0xdd,0x36,0x0a,0x2e, + 0xc9,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x06,0x38,0x05,0xdd,0x36,0x0a,0x2f,0xc9,0xfe, + 0x04,0x38,0x05,0xdd,0x36,0x0a,0x2d,0xc9,0xfe,0x02,0x38,0x05,0xdd,0x36,0x0a,0x2f, + 0xc9,0xdd,0x36,0x0a,0x30,0xc9,0x3a,0x09,0x4d,0xe6,0x07,0xfe,0x06,0x38,0x08,0x1e, + 0x2e,0xcb,0xfb,0xdd,0x73,0x0a,0xc9,0xfe,0x04,0x38,0x04,0x1e,0x2c,0x18,0xf2,0xfe, + 0x02,0x30,0xec,0x1e,0x30,0x18,0xea,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x06,0x38,0x05, + 0xdd,0x36,0x0a,0x30,0xc9,0xfe,0x04,0x38,0x08,0x1e,0x2f,0xcb,0xf3,0xdd,0x73,0x0a, + 0xc9,0xfe,0x02,0x38,0x04,0x1e,0x2d,0x18,0xf2,0x1e,0x2f,0x18,0xee,0x06,0x04,0xed, + 0x5b,0x39,0x4d,0x3a,0xaf,0x4d,0xa7,0x20,0x09,0x2a,0x37,0x4d,0xa7,0xed,0x52,0xca, + 0x63,0x17,0x05,0x3a,0xae,0x4d,0xa7,0x20,0x09,0x2a,0x35,0x4d,0xa7,0xed,0x52,0xca, + 0x63,0x17,0x05,0x3a,0xad,0x4d,0xa7,0x20,0x09,0x2a,0x33,0x4d,0xa7,0xed,0x52,0xca, + 0x63,0x17,0x05,0x3a,0xac,0x4d,0xa7,0x20,0x09,0x2a,0x31,0x4d,0xa7,0xed,0x52,0xca, + 0x63,0x17,0x05,0x78,0x32,0xa4,0x4d,0x32,0xa5,0x4d,0xa7,0xc8,0x21,0xa6,0x4d,0x5f, + 0x16,0x00,0x19,0x7e,0xa7,0xc8,0xaf,0x32,0xa5,0x4d,0x21,0xd0,0x4d,0x34,0x46,0x04, + 0xcd,0x5a,0x2a,0x21,0xbc,0x4e,0xcb,0xde,0xc9,0x3a,0xa4,0x4d,0xa7,0xc0,0x3a,0xa6, + 0x4d,0xa7,0xc8,0x0e,0x04,0x06,0x04,0xdd,0x21,0x08,0x4d,0x3a,0xaf,0x4d,0xa7,0x20, + 0x13,0x3a,0x06,0x4d,0xdd,0x96,0x00,0xb9,0x30,0x0a,0x3a,0x07,0x4d,0xdd,0x96,0x01, + 0xb9,0xda,0x63,0x17,0x05,0x3a,0xae,0x4d,0xa7,0x20,0x13,0x3a,0x04,0x4d,0xdd,0x96, + 0x00,0xb9,0x30,0x0a,0x3a,0x05,0x4d,0xdd,0x96,0x01,0xb9,0xda,0x63,0x17,0x05,0x3a, + 0xad,0x4d,0xa7,0x20,0x13,0x3a,0x02,0x4d,0xdd,0x96,0x00,0xb9,0x30,0x0a,0x3a,0x03, + 0x4d,0xdd,0x96,0x01,0xb9,0xda,0x63,0x17,0x05,0x3a,0xac,0x4d,0xa7,0x20,0x13,0x3a, + 0x00,0x4d,0xdd,0x96,0x00,0xb9,0x30,0x0a,0x3a,0x01,0x4d,0xdd,0x96,0x01,0xb9,0xda, + 0x63,0x17,0x05,0xc3,0x63,0x17,0x21,0x9d,0x4d,0x3e,0xff,0xbe,0xca,0x11,0x18,0x35, + 0xc9,0x3a,0xa6,0x4d,0xa7,0xca,0x2f,0x18,0x2a,0x4c,0x4d,0x29,0x22,0x4c,0x4d,0x2a, + 0x4a,0x4d,0xed,0x6a,0x22,0x4a,0x4d,0xd0,0x21,0x4c,0x4d,0x34,0xc3,0x43,0x18,0x2a, + 0x48,0x4d,0x29,0x22,0x48,0x4d,0x2a,0x46,0x4d,0xed,0x6a,0x22,0x46,0x4d,0xd0,0x21, + 0x48,0x4d,0x34,0x3a,0x0e,0x4e,0x32,0x9e,0x4d,0x3a,0x72,0x4e,0x4f,0x3a,0x09,0x4e, + 0xa1,0x4f,0x21,0x3a,0x4d,0x7e,0x06,0x21,0x90,0x38,0x09,0x7e,0x06,0x3b,0x90,0x30, + 0x03,0xc3,0xab,0x18,0x3e,0x01,0x32,0xbf,0x4d,0x3a,0x00,0x4e,0xfe,0x01,0xca,0x19, + 0x1a,0x3a,0x04,0x4e,0xfe,0x10,0xd2,0x19,0x1a,0x79,0xa7,0x28,0x06,0x3a,0x40,0x50, + 0xc3,0x86,0x18,0x3a,0x00,0x50,0xcb,0x4f,0xc2,0x99,0x18,0x2a,0x03,0x33,0x3e,0x02, + 0x32,0x30,0x4d,0x22,0x1c,0x4d,0xc3,0x50,0x19,0xcb,0x57,0xc2,0x50,0x19,0x2a,0xff, + 0x32,0xaf,0x32,0x30,0x4d,0x22,0x1c,0x4d,0xc3,0x50,0x19,0x3a,0x00,0x4e,0xfe,0x01, + 0xca,0x19,0x1a,0x3a,0x04,0x4e,0xfe,0x10,0xd2,0x19,0x1a,0x79,0xa7,0x28,0x06,0x3a, + 0x40,0x50,0xc3,0xc8,0x18,0x3a,0x00,0x50,0xcb,0x4f,0xca,0xc9,0x1a,0xcb,0x57,0xca, + 0xd9,0x1a,0xcb,0x47,0xca,0xe8,0x1a,0xcb,0x5f,0xca,0xf8,0x1a,0x2a,0x1c,0x4d,0x22, + 0x26,0x4d,0x06,0x01,0xdd,0x21,0x26,0x4d,0xfd,0x21,0x39,0x4d,0xcd,0x0f,0x20,0xe6, + 0xc0,0xd6,0xc0,0x20,0x4b,0x05,0xc2,0x16,0x19,0x3a,0x30,0x4d,0x0f,0xda,0x0b,0x19, + 0x3a,0x09,0x4d,0xe6,0x07,0xfe,0x04,0xc8,0xc3,0x40,0x19,0x3a,0x08,0x4d,0xe6,0x07, + 0xfe,0x04,0xc8,0xc3,0x40,0x19,0xdd,0x21,0x1c,0x4d,0xcd,0x0f,0x20,0xe6,0xc0,0xd6, + 0xc0,0x20,0x2d,0x3a,0x30,0x4d,0x0f,0xda,0x35,0x19,0x3a,0x09,0x4d,0xe6,0x07,0xfe, + 0x04,0xc8,0xc3,0x50,0x19,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x04,0xc8,0xc3,0x50,0x19, + 0x2a,0x26,0x4d,0x22,0x1c,0x4d,0x05,0xca,0x50,0x19,0x3a,0x3c,0x4d,0x32,0x30,0x4d, + 0xdd,0x21,0x1c,0x4d,0xfd,0x21,0x08,0x4d,0xcd,0x00,0x20,0x3a,0x30,0x4d,0x0f,0xda, + 0x75,0x19,0x7d,0xe6,0x07,0xfe,0x04,0xca,0x85,0x19,0xda,0x71,0x19,0x2d,0xc3,0x85, + 0x19,0x2c,0xc3,0x85,0x19,0x7c,0xe6,0x07,0xfe,0x04,0xca,0x85,0x19,0xda,0x84,0x19, + 0x25,0xc3,0x85,0x19,0x24,0x22,0x08,0x4d,0xcd,0x18,0x20,0x22,0x39,0x4d,0xdd,0x21, + 0xbf,0x4d,0xdd,0x7e,0x00,0xdd,0x36,0x00,0x00,0xa7,0xc0,0x3a,0xd2,0x4d,0xa7,0x28, + 0x2c,0x3a,0xd4,0x4d,0xa7,0x28,0x26,0x2a,0x08,0x4d,0x11,0x94,0x80,0xa7,0xed,0x52, + 0x20,0x1b,0x06,0x19,0x4f,0xcd,0x42,0x00,0x0e,0x15,0x81,0x4f,0x06,0x1c,0xcd,0x42, + 0x00,0xcd,0x04,0x10,0xf7,0x54,0x05,0x00,0x21,0xbc,0x4e,0xcb,0xd6,0x3e,0xff,0x32, + 0x9d,0x4d,0x2a,0x39,0x4d,0xcd,0x65,0x00,0x7e,0xfe,0x10,0x28,0x03,0xfe,0x14,0xc0, + 0xdd,0x21,0x0e,0x4e,0xdd,0x34,0x00,0xe6,0x0f,0xcb,0x3f,0x06,0x40,0x70,0x06,0x19, + 0x4f,0xcb,0x39,0xcd,0x42,0x00,0x3c,0xfe,0x01,0xca,0xfd,0x19,0x87,0x32,0x9d,0x4d, + 0xcd,0x08,0x1b,0xcd,0x6a,0x1a,0x21,0xbc,0x4e,0x3a,0x0e,0x4e,0x0f,0x38,0x05,0xcb, + 0xc6,0xcb,0x8e,0xc9,0xcb,0x86,0xcb,0xce,0xc9,0x21,0x1c,0x4d,0x7e,0xa7,0xca,0x2e, + 0x1a,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x04,0xca,0x38,0x1a,0xc3,0x5c,0x1a,0x3a,0x09, + 0x4d,0xe6,0x07,0xfe,0x04,0xc2,0x5c,0x1a,0x3e,0x05,0xcd,0xd0,0x1e,0x38,0x03,0xef, + 0x17,0x00,0xdd,0x21,0x26,0x4d,0xfd,0x21,0x12,0x4d,0xcd,0x00,0x20,0x22,0x12,0x4d, + 0x2a,0x26,0x4d,0x22,0x1c,0x4d,0x3a,0x3c,0x4d,0x32,0x30,0x4d,0xdd,0x21,0x1c,0x4d, + 0xfd,0x21,0x08,0x4d,0xcd,0x00,0x20,0xc3,0x85,0x19,0x3a,0x9d,0x4d,0xfe,0x06,0xc0, + 0x2a,0xbd,0x4d,0x22,0xcb,0x4d,0x3e,0x01,0x32,0xa6,0x4d,0x32,0xa7,0x4d,0x32,0xa8, + 0x4d,0x32,0xa9,0x4d,0x32,0xaa,0x4d,0x32,0xb1,0x4d,0x32,0xb2,0x4d,0x32,0xb3,0x4d, + 0x32,0xb4,0x4d,0x32,0xb5,0x4d,0xaf,0x32,0xc8,0x4d,0x32,0xd0,0x4d,0xdd,0x21,0x00, + 0x4c,0xdd,0x36,0x02,0x1c,0xdd,0x36,0x04,0x1c,0xdd,0x36,0x06,0x1c,0xdd,0x36,0x08, + 0x1c,0xdd,0x36,0x03,0x11,0xdd,0x36,0x05,0x11,0xdd,0x36,0x07,0x11,0xdd,0x36,0x09, + 0x11,0x21,0xac,0x4e,0xcb,0xee,0xcb,0xbe,0xc9,0x2a,0x03,0x33,0x3e,0x02,0x32,0x3c, + 0x4d,0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x2a,0xff,0x32,0xaf,0x32,0x3c,0x4d, + 0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x2a,0x05,0x33,0x3e,0x03,0x32,0x3c,0x4d, + 0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x2a,0x01,0x33,0x3e,0x01,0x32,0x3c,0x4d, + 0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x3a,0x12,0x4e,0xa7,0xca,0x14,0x1b,0x21, + 0x9f,0x4d,0x34,0xc9,0x3a,0xa3,0x4d,0xa7,0xc0,0x3a,0xa2,0x4d,0xa7,0xca,0x25,0x1b, + 0x21,0x11,0x4e,0x34,0xc9,0x3a,0xa1,0x4d,0xa7,0xca,0x31,0x1b,0x21,0x10,0x4e,0x34, + 0xc9,0x21,0x0f,0x4e,0x34,0xc9,0x3a,0xa0,0x4d,0xa7,0xc8,0x3a,0xac,0x4d,0xa7,0xc0, + 0xcd,0xd7,0x20,0x2a,0x31,0x4d,0x01,0x99,0x4d,0xcd,0x5a,0x20,0x3a,0x99,0x4d,0xa7, + 0xca,0x6a,0x1b,0x2a,0x60,0x4d,0x29,0x22,0x60,0x4d,0x2a,0x5e,0x4d,0xed,0x6a,0x22, + 0x5e,0x4d,0xd0,0x21,0x60,0x4d,0x34,0xc3,0xd8,0x1b,0x3a,0xa7,0x4d,0xa7,0xca,0x88, + 0x1b,0x2a,0x5c,0x4d,0x29,0x22,0x5c,0x4d,0x2a,0x5a,0x4d,0xed,0x6a,0x22,0x5a,0x4d, + 0xd0,0x21,0x5c,0x4d,0x34,0xc3,0xd8,0x1b,0x3a,0xb7,0x4d,0xa7,0xca,0xa6,0x1b,0x2a, + 0x50,0x4d,0x29,0x22,0x50,0x4d,0x2a,0x4e,0x4d,0xed,0x6a,0x22,0x4e,0x4d,0xd0,0x21, + 0x50,0x4d,0x34,0xc3,0xd8,0x1b,0x3a,0xb6,0x4d,0xa7,0xca,0xc4,0x1b,0x2a,0x54,0x4d, + 0x29,0x22,0x54,0x4d,0x2a,0x52,0x4d,0xed,0x6a,0x22,0x52,0x4d,0xd0,0x21,0x54,0x4d, + 0x34,0xc3,0xd8,0x1b,0x2a,0x58,0x4d,0x29,0x22,0x58,0x4d,0x2a,0x56,0x4d,0xed,0x6a, + 0x22,0x56,0x4d,0xd0,0x21,0x58,0x4d,0x34,0x21,0x14,0x4d,0x7e,0xa7,0xca,0xed,0x1b, + 0x3a,0x00,0x4d,0xe6,0x07,0xfe,0x04,0xca,0xf7,0x1b,0xc3,0x36,0x1c,0x3a,0x01,0x4d, + 0xe6,0x07,0xfe,0x04,0xc2,0x36,0x1c,0x3e,0x01,0xcd,0xd0,0x1e,0x38,0x1b,0x3a,0xa7, + 0x4d,0xa7,0xca,0x0b,0x1c,0xef,0x0c,0x00,0xc3,0x19,0x1c,0x2a,0x0a,0x4d,0xcd,0x52, + 0x20,0x7e,0xfe,0x1a,0x28,0x03,0xef,0x08,0x00,0xcd,0xfe,0x1e,0xdd,0x21,0x1e,0x4d, + 0xfd,0x21,0x0a,0x4d,0xcd,0x00,0x20,0x22,0x0a,0x4d,0x2a,0x1e,0x4d,0x22,0x14,0x4d, + 0x3a,0x2c,0x4d,0x32,0x28,0x4d,0xdd,0x21,0x14,0x4d,0xfd,0x21,0x00,0x4d,0xcd,0x00, + 0x20,0x22,0x00,0x4d,0xcd,0x18,0x20,0x22,0x31,0x4d,0xc9,0x3a,0xa1,0x4d,0xfe,0x01, + 0xc0,0x3a,0xad,0x4d,0xa7,0xc0,0x2a,0x33,0x4d,0x01,0x9a,0x4d,0xcd,0x5a,0x20,0x3a, + 0x9a,0x4d,0xa7,0xca,0x7d,0x1c,0x2a,0x6c,0x4d,0x29,0x22,0x6c,0x4d,0x2a,0x6a,0x4d, + 0xed,0x6a,0x22,0x6a,0x4d,0xd0,0x21,0x6c,0x4d,0x34,0xc3,0xaf,0x1c,0x3a,0xa8,0x4d, + 0xa7,0xca,0x9b,0x1c,0x2a,0x68,0x4d,0x29,0x22,0x68,0x4d,0x2a,0x66,0x4d,0xed,0x6a, + 0x22,0x66,0x4d,0xd0,0x21,0x68,0x4d,0x34,0xc3,0xaf,0x1c,0x2a,0x64,0x4d,0x29,0x22, + 0x64,0x4d,0x2a,0x62,0x4d,0xed,0x6a,0x22,0x62,0x4d,0xd0,0x21,0x64,0x4d,0x34,0x21, + 0x16,0x4d,0x7e,0xa7,0xca,0xc4,0x1c,0x3a,0x02,0x4d,0xe6,0x07,0xfe,0x04,0xca,0xce, + 0x1c,0xc3,0x0d,0x1d,0x3a,0x03,0x4d,0xe6,0x07,0xfe,0x04,0xc2,0x0d,0x1d,0x3e,0x02, + 0xcd,0xd0,0x1e,0x38,0x1b,0x3a,0xa8,0x4d,0xa7,0xca,0xe2,0x1c,0xef,0x0d,0x00,0xc3, + 0xf0,0x1c,0x2a,0x0c,0x4d,0xcd,0x52,0x20,0x7e,0xfe,0x1a,0x28,0x03,0xef,0x09,0x00, + 0xcd,0x25,0x1f,0xdd,0x21,0x20,0x4d,0xfd,0x21,0x0c,0x4d,0xcd,0x00,0x20,0x22,0x0c, + 0x4d,0x2a,0x20,0x4d,0x22,0x16,0x4d,0x3a,0x2d,0x4d,0x32,0x29,0x4d,0xdd,0x21,0x16, + 0x4d,0xfd,0x21,0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0xcd,0x18,0x20,0x22,0x33, + 0x4d,0xc9,0x3a,0xa2,0x4d,0xfe,0x01,0xc0,0x3a,0xae,0x4d,0xa7,0xc0,0x2a,0x35,0x4d, + 0x01,0x9b,0x4d,0xcd,0x5a,0x20,0x3a,0x9b,0x4d,0xa7,0xca,0x54,0x1d,0x2a,0x78,0x4d, + 0x29,0x22,0x78,0x4d,0x2a,0x76,0x4d,0xed,0x6a,0x22,0x76,0x4d,0xd0,0x21,0x78,0x4d, + 0x34,0xc3,0x86,0x1d,0x3a,0xa9,0x4d,0xa7,0xca,0x72,0x1d,0x2a,0x74,0x4d,0x29,0x22, + 0x74,0x4d,0x2a,0x72,0x4d,0xed,0x6a,0x22,0x72,0x4d,0xd0,0x21,0x74,0x4d,0x34,0xc3, + 0x86,0x1d,0x2a,0x70,0x4d,0x29,0x22,0x70,0x4d,0x2a,0x6e,0x4d,0xed,0x6a,0x22,0x6e, + 0x4d,0xd0,0x21,0x70,0x4d,0x34,0x21,0x18,0x4d,0x7e,0xa7,0xca,0x9b,0x1d,0x3a,0x04, + 0x4d,0xe6,0x07,0xfe,0x04,0xca,0xa5,0x1d,0xc3,0xe4,0x1d,0x3a,0x05,0x4d,0xe6,0x07, + 0xfe,0x04,0xc2,0xe4,0x1d,0x3e,0x03,0xcd,0xd0,0x1e,0x38,0x1b,0x3a,0xa9,0x4d,0xa7, + 0xca,0xb9,0x1d,0xef,0x0e,0x00,0xc3,0xc7,0x1d,0x2a,0x0e,0x4d,0xcd,0x52,0x20,0x7e, + 0xfe,0x1a,0x28,0x03,0xef,0x0a,0x00,0xcd,0x4c,0x1f,0xdd,0x21,0x22,0x4d,0xfd,0x21, + 0x0e,0x4d,0xcd,0x00,0x20,0x22,0x0e,0x4d,0x2a,0x22,0x4d,0x22,0x18,0x4d,0x3a,0x2e, + 0x4d,0x32,0x2a,0x4d,0xdd,0x21,0x18,0x4d,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22, + 0x04,0x4d,0xcd,0x18,0x20,0x22,0x35,0x4d,0xc9,0x3a,0xa3,0x4d,0xfe,0x01,0xc0,0x3a, + 0xaf,0x4d,0xa7,0xc0,0x2a,0x37,0x4d,0x01,0x9c,0x4d,0xcd,0x5a,0x20,0x3a,0x9c,0x4d, + 0xa7,0xca,0x2b,0x1e,0x2a,0x84,0x4d,0x29,0x22,0x84,0x4d,0x2a,0x82,0x4d,0xed,0x6a, + 0x22,0x82,0x4d,0xd0,0x21,0x84,0x4d,0x34,0xc3,0x5d,0x1e,0x3a,0xaa,0x4d,0xa7,0xca, + 0x49,0x1e,0x2a,0x80,0x4d,0x29,0x22,0x80,0x4d,0x2a,0x7e,0x4d,0xed,0x6a,0x22,0x7e, + 0x4d,0xd0,0x21,0x80,0x4d,0x34,0xc3,0x5d,0x1e,0x2a,0x7c,0x4d,0x29,0x22,0x7c,0x4d, + 0x2a,0x7a,0x4d,0xed,0x6a,0x22,0x7a,0x4d,0xd0,0x21,0x7c,0x4d,0x34,0x21,0x1a,0x4d, + 0x7e,0xa7,0xca,0x72,0x1e,0x3a,0x06,0x4d,0xe6,0x07,0xfe,0x04,0xca,0x7c,0x1e,0xc3, + 0xbb,0x1e,0x3a,0x07,0x4d,0xe6,0x07,0xfe,0x04,0xc2,0xbb,0x1e,0x3e,0x04,0xcd,0xd0, + 0x1e,0x38,0x1b,0x3a,0xaa,0x4d,0xa7,0xca,0x90,0x1e,0xef,0x0f,0x00,0xc3,0x9e,0x1e, + 0x2a,0x10,0x4d,0xcd,0x52,0x20,0x7e,0xfe,0x1a,0x28,0x03,0xef,0x0b,0x00,0xcd,0x73, + 0x1f,0xdd,0x21,0x24,0x4d,0xfd,0x21,0x10,0x4d,0xcd,0x00,0x20,0x22,0x10,0x4d,0x2a, + 0x24,0x4d,0x22,0x1a,0x4d,0x3a,0x2f,0x4d,0x32,0x2b,0x4d,0xdd,0x21,0x1a,0x4d,0xfd, + 0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0xcd,0x18,0x20,0x22,0x37,0x4d,0xc9, + 0x87,0x4f,0x06,0x00,0x21,0x09,0x4d,0x09,0x7e,0xfe,0x1d,0xc2,0xe3,0x1e,0x36,0x3d, + 0xc3,0xfc,0x1e,0xfe,0x3e,0xc2,0xed,0x1e,0x36,0x1e,0xc3,0xfc,0x1e,0x06,0x21,0x90, + 0xda,0xfc,0x1e,0x7e,0x06,0x3b,0x90,0xd2,0xfc,0x1e,0xa7,0xc9,0x37,0xc9,0x3a,0xb1, + 0x4d,0xa7,0xc8,0xaf,0x32,0xb1,0x4d,0x21,0xff,0x32,0x3a,0x28,0x4d,0xee,0x02,0x32, + 0x2c,0x4d,0x47,0xdf,0x22,0x1e,0x4d,0x3a,0x02,0x4e,0xfe,0x22,0xc0,0x22,0x14,0x4d, + 0x78,0x32,0x28,0x4d,0xc9,0x3a,0xb2,0x4d,0xa7,0xc8,0xaf,0x32,0xb2,0x4d,0x21,0xff, + 0x32,0x3a,0x29,0x4d,0xee,0x02,0x32,0x2d,0x4d,0x47,0xdf,0x22,0x20,0x4d,0x3a,0x02, + 0x4e,0xfe,0x22,0xc0,0x22,0x16,0x4d,0x78,0x32,0x29,0x4d,0xc9,0x3a,0xb3,0x4d,0xa7, + 0xc8,0xaf,0x32,0xb3,0x4d,0x21,0xff,0x32,0x3a,0x2a,0x4d,0xee,0x02,0x32,0x2e,0x4d, + 0x47,0xdf,0x22,0x22,0x4d,0x3a,0x02,0x4e,0xfe,0x22,0xc0,0x22,0x18,0x4d,0x78,0x32, + 0x2a,0x4d,0xc9,0x3a,0xb4,0x4d,0xa7,0xc8,0xaf,0x32,0xb4,0x4d,0x21,0xff,0x32,0x3a, + 0x2b,0x4d,0xee,0x02,0x32,0x2f,0x4d,0x47,0xdf,0x22,0x24,0x4d,0x3a,0x02,0x4e,0xfe, + 0x22,0xc0,0x22,0x1a,0x4d,0x78,0x32,0x2b,0x4d,0xc9,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5d,0xe1, + 0xfd,0x7e,0x00,0xdd,0x86,0x00,0x6f,0xfd,0x7e,0x01,0xdd,0x86,0x01,0x67,0xc9,0xcd, + 0x00,0x20,0xcd,0x65,0x00,0x7e,0xa7,0xc9,0x7d,0xcb,0x3f,0xcb,0x3f,0xcb,0x3f,0xc6, + 0x20,0x6f,0x7c,0xcb,0x3f,0xcb,0x3f,0xcb,0x3f,0xc6,0x1e,0x67,0xc9,0xf5,0xc5,0x7d, + 0xd6,0x20,0x6f,0x7c,0xd6,0x20,0x67,0x06,0x00,0xcb,0x24,0xcb,0x24,0xcb,0x24,0xcb, + 0x24,0xcb,0x10,0xcb,0x24,0xcb,0x10,0x4c,0x26,0x00,0x09,0x01,0x40,0x40,0x09,0xc1, + 0xf1,0xc9,0xcd,0x65,0x00,0x11,0x00,0x04,0x19,0xc9,0xcd,0x52,0x20,0x7e,0xfe,0x1b, + 0x20,0x04,0x3e,0x01,0x02,0xc9,0xaf,0x02,0xc9,0x3a,0xa1,0x4d,0xa7,0xc0,0x3a,0x12, + 0x4e,0xa7,0xca,0x7e,0x20,0x3a,0x9f,0x4d,0xfe,0x07,0xc0,0xc3,0x86,0x20,0x21,0xb8, + 0x4d,0x3a,0x0f,0x4e,0xbe,0xd8,0x3e,0x02,0x32,0xa1,0x4d,0xc9,0x3a,0xa2,0x4d,0xa7, + 0xc0,0x3a,0x12,0x4e,0xa7,0xca,0xa1,0x20,0x3a,0x9f,0x4d,0xfe,0x11,0xc0,0xc3,0xa9, + 0x20,0x21,0xb9,0x4d,0x3a,0x10,0x4e,0xbe,0xd8,0x3e,0x03,0x32,0xa2,0x4d,0xc9,0x3a, + 0xa3,0x4d,0xa7,0xc0,0x3a,0x12,0x4e,0xa7,0xca,0xc9,0x20,0x3a,0x9f,0x4d,0xfe,0x20, + 0xc0,0xaf,0x32,0x12,0x4e,0x32,0x9f,0x4d,0xc9,0x21,0xba,0x4d,0x3a,0x11,0x4e,0xbe, + 0xd8,0x3e,0x03,0x32,0xa3,0x4d,0xc9,0x3a,0xa3,0x4d,0xa7,0xc8,0x21,0x0e,0x4e,0x3a, + 0xb6,0x4d,0xa7,0xc2,0xf4,0x20,0x3e,0xf4,0x96,0x47,0x3a,0xbb,0x4d,0x90,0xd8,0x3e, + 0x01,0x32,0xb6,0x4d,0x3a,0xb7,0x4d,0xa7,0xc0,0x3e,0xf4,0x96,0x47,0x3a,0xbc,0x4d, + 0x90,0xd8,0x3e,0x01,0x32,0xb7,0x4d,0xc9,0x3a,0x06,0x4e,0xe7,0x1a,0x21,0x40,0x21, + 0x4b,0x21,0x0c,0x00,0x70,0x21,0x7b,0x21,0x86,0x21,0x3a,0x3a,0x4d,0xd6,0x21,0x20, + 0x0f,0x3c,0x32,0xa0,0x4d,0x32,0xb7,0x4d,0xcd,0x06,0x05,0x21,0x06,0x4e,0x34,0xc9, + 0xcd,0x06,0x18,0xcd,0x06,0x18,0xcd,0x36,0x1b,0xcd,0x36,0x1b,0xcd,0x23,0x0e,0xc9, + 0x3a,0x3a,0x4d,0xd6,0x1e,0xc2,0x30,0x21,0xc3,0x2b,0x21,0x3a,0x32,0x4d,0xd6,0x1e, + 0xc2,0x36,0x21,0xcd,0x70,0x1a,0xaf,0x32,0xac,0x4e,0x32,0xbc,0x4e,0xcd,0xa5,0x05, + 0x22,0x1c,0x4d,0x3a,0x3c,0x4d,0x32,0x30,0x4d,0xf7,0x45,0x07,0x00,0xc3,0x2b,0x21, + 0x3a,0x32,0x4d,0xd6,0x2f,0xc2,0x36,0x21,0xc3,0x2b,0x21,0x3a,0x32,0x4d,0xd6,0x3d, + 0xc2,0x30,0x21,0xc3,0x2b,0x21,0xcd,0x06,0x18,0xcd,0x06,0x18,0x3a,0x3a,0x4d,0xd6, + 0x3d,0xc0,0x32,0x06,0x4e,0xf7,0x45,0x00,0x00,0x21,0x04,0x4e,0x34,0xc9,0x3a,0x07, + 0x4e,0xfd,0x21,0xd2,0x41,0xe7,0xc2,0x21,0x0c,0x00,0xe1,0x21,0xf5,0x21,0x0c,0x22, + 0x1e,0x22,0x44,0x22,0x5d,0x22,0x0c,0x00,0x6a,0x22,0x0c,0x00,0x86,0x22,0x0c,0x00, + 0x8d,0x22,0x3e,0x01,0x32,0xd2,0x45,0x32,0xd3,0x45,0x32,0xf2,0x45,0x32,0xf3,0x45, + 0xcd,0x06,0x05,0xfd,0x36,0x00,0x60,0xfd,0x36,0x01,0x61,0xf7,0x43,0x08,0x00,0x18, + 0x0f,0x3a,0x3a,0x4d,0xd6,0x2c,0xc2,0x30,0x21,0x3c,0x32,0xa0,0x4d,0x32,0xb7,0x4d, + 0x21,0x07,0x4e,0x34,0xc9,0x3a,0x01,0x4d,0xfe,0x77,0x28,0x05,0xfe,0x78,0xc2,0x30, + 0x21,0x21,0x84,0x20,0x22,0x4e,0x4d,0x22,0x50,0x4d,0x18,0xe4,0x3a,0x01,0x4d,0xd6, + 0x78,0xc2,0x37,0x22,0xfd,0x36,0x00,0x62,0xfd,0x36,0x01,0x63,0x18,0xd2,0x3a,0x01, + 0x4d,0xd6,0x7b,0x20,0x12,0xfd,0x36,0x00,0x64,0xfd,0x36,0x01,0x65,0xfd,0x36,0x20, + 0x66,0xfd,0x36,0x21,0x67,0x18,0xb9,0xcd,0x06,0x18,0xcd,0x06,0x18,0xcd,0x36,0x1b, + 0xcd,0x23,0x0e,0xc9,0x3a,0x01,0x4d,0xd6,0x7e,0x20,0xec,0xfd,0x36,0x00,0x68,0xfd, + 0x36,0x01,0x69,0xfd,0x36,0x20,0x6a,0xfd,0x36,0x21,0x6b,0x18,0x93,0x3a,0x01,0x4d, + 0xd6,0x80,0x20,0xd3,0xf7,0x4f,0x08,0x00,0x18,0x86,0x21,0x01,0x4d,0x34,0x34,0xfd, + 0x36,0x00,0x6c,0xfd,0x36,0x01,0x6d,0xfd,0x36,0x20,0x40,0xfd,0x36,0x21,0x40,0xf7, + 0x4a,0x08,0x00,0xc3,0xf0,0x21,0xf7,0x54,0x08,0x00,0xc3,0xf0,0x21,0xaf,0x32,0x07, + 0x4e,0x21,0x04,0x4e,0x34,0x34,0xc9,0x3a,0x08,0x4e,0xe7,0xa7,0x22,0xbe,0x22,0x0c, + 0x00,0xdd,0x22,0xf5,0x22,0xfe,0x22,0x3a,0x3a,0x4d,0xd6,0x25,0xc2,0x30,0x21,0x3c, + 0x32,0xa0,0x4d,0x32,0xb7,0x4d,0xcd,0x06,0x05,0x21,0x08,0x4e,0x34,0xc9,0x3a,0x01, + 0x4d,0xfe,0xff,0x28,0x05,0xfe,0xfe,0xc2,0x30,0x21,0x3c,0x3c,0x32,0x01,0x4d,0x3e, + 0x01,0x32,0xb1,0x4d,0xcd,0xfe,0x1e,0xf7,0x4a,0x09,0x00,0x18,0xdc,0x3a,0x32,0x4d, + 0xd6,0x2d,0x28,0xd5,0x3a,0x00,0x4d,0x32,0xd2,0x4d,0x3a,0x01,0x4d,0xd6,0x08,0x32, + 0xd3,0x4d,0xc3,0x30,0x21,0x3a,0x32,0x4d,0xd6,0x1e,0x28,0xbd,0x18,0xe6,0xaf,0x32, + 0x08,0x4e,0xf7,0x45,0x00,0x00,0x21,0x04,0x4e,0x34,0xc9,0x21,0x00,0x50,0x06,0x08, + 0xaf,0x77,0x2c,0x10,0xfc,0x21,0x00,0x40,0x06,0x04,0x32,0xc0,0x50,0x32,0x07,0x50, + 0x3e,0x40,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf1,0x06,0x04,0x32,0xc0,0x50,0xaf,0x32, + 0x07,0x50,0x3e,0x0f,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf0,0xed,0x5e,0x3e,0xfa,0xd3, + 0x00,0xaf,0x32,0x07,0x50,0x3c,0x32,0x00,0x50,0xfb,0x76,0x32,0xc0,0x50,0x31,0xc0, + 0x4f,0xaf,0x21,0x00,0x50,0x01,0x08,0x08,0xcf,0x21,0x00,0x4c,0x06,0xbe,0xcf,0xcf, + 0xcf,0xcf,0x21,0x40,0x50,0x06,0x40,0xcf,0x32,0xc0,0x50,0xcd,0x0d,0x24,0x32,0xc0, + 0x50,0x06,0x00,0xcd,0xed,0x23,0x32,0xc0,0x50,0x21,0xc0,0x4c,0x22,0x80,0x4c,0x22, + 0x82,0x4c,0x3e,0xff,0x06,0x40,0xcf,0x3e,0x01,0x32,0x00,0x50,0xfb,0x2a,0x82,0x4c, + 0x7e,0xa7,0xfa,0x8d,0x23,0x36,0xff,0x2c,0x46,0x36,0xff,0x2c,0x20,0x02,0x2e,0xc0, + 0x22,0x82,0x4c,0x21,0x8d,0x23,0xe5,0xe7,0xed,0x23,0xd7,0x24,0x19,0x24,0x48,0x24, + 0x3d,0x25,0x8b,0x26,0x0d,0x24,0x98,0x26,0x30,0x27,0x6c,0x27,0xa9,0x27,0xf1,0x27, + 0x3b,0x28,0x65,0x28,0x8f,0x28,0xb9,0x28,0x0d,0x00,0xa2,0x26,0xc9,0x24,0x35,0x2a, + 0xd0,0x26,0x87,0x24,0xe8,0x23,0xe3,0x28,0xe0,0x2a,0x5a,0x2a,0x6a,0x2b,0xea,0x2b, + 0x5e,0x2c,0xa1,0x2b,0x75,0x26,0xb2,0x26,0x21,0x04,0x4e,0x34,0xc9,0x78,0xe7,0xf3, + 0x23,0x00,0x24,0x3e,0x40,0x01,0x04,0x00,0x21,0x00,0x40,0xcf,0x0d,0x20,0xfc,0xc9, + 0x3e,0x40,0x21,0x40,0x40,0x01,0x04,0x80,0xcf,0x0d,0x20,0xfc,0xc9,0xaf,0x01,0x04, + 0x00,0x21,0x00,0x44,0xcf,0x0d,0x20,0xfc,0xc9,0x21,0x00,0x40,0x01,0x35,0x34,0x0a, + 0xa7,0xc8,0xfa,0x2c,0x24,0x5f,0x16,0x00,0x19,0x2b,0x03,0x0a,0x23,0x77,0xf5,0xe5, + 0x11,0xe0,0x83,0x7d,0xe6,0x1f,0x87,0x26,0x00,0x6f,0x19,0xd1,0xa7,0xed,0x52,0xf1, + 0xee,0x01,0x77,0xeb,0x03,0xc3,0x1f,0x24,0x21,0x00,0x40,0xdd,0x21,0x16,0x4e,0xfd, + 0x21,0xb5,0x35,0x16,0x00,0x06,0x1e,0x0e,0x08,0xdd,0x7e,0x00,0xfd,0x5e,0x00,0x19, + 0x07,0x30,0x02,0x36,0x10,0xfd,0x23,0x0d,0x20,0xf2,0xdd,0x23,0x05,0x20,0xe8,0x21, + 0x34,0x4e,0x11,0x64,0x40,0xed,0xa0,0x11,0x78,0x40,0xed,0xa0,0x11,0x84,0x43,0xed, + 0xa0,0x11,0x98,0x43,0xed,0xa0,0xc9,0x21,0x00,0x40,0xdd,0x21,0x16,0x4e,0xfd,0x21, + 0xb5,0x35,0x16,0x00,0x06,0x1e,0x0e,0x08,0xfd,0x5e,0x00,0x19,0x7e,0xfe,0x10,0x37, + 0x28,0x01,0x3f,0xdd,0xcb,0x00,0x16,0xfd,0x23,0x0d,0x20,0xec,0xdd,0x23,0x05,0x20, + 0xe5,0x21,0x64,0x40,0x11,0x34,0x4e,0xed,0xa0,0x21,0x78,0x40,0xed,0xa0,0x21,0x84, + 0x43,0xed,0xa0,0x21,0x98,0x43,0xed,0xa0,0xc9,0x21,0x16,0x4e,0x3e,0xff,0x06,0x1e, + 0xcf,0x3e,0x14,0x06,0x04,0xcf,0xc9,0x58,0x78,0xfe,0x02,0x3e,0x1f,0x28,0x02,0x3e, + 0x10,0x21,0x40,0x44,0x01,0x04,0x80,0xcf,0x0d,0x20,0xfc,0x3e,0x0f,0x06,0x40,0x21, + 0xc0,0x47,0xcf,0x7b,0xfe,0x01,0xc0,0x3e,0x1a,0x11,0x20,0x00,0x06,0x06,0xdd,0x21, + 0xa0,0x45,0xdd,0x77,0x0c,0xdd,0x77,0x18,0xdd,0x19,0x10,0xf6,0x3e,0x1b,0x06,0x05, + 0xdd,0x21,0x40,0x44,0xdd,0x77,0x0e,0xdd,0x77,0x0f,0xdd,0x77,0x10,0xdd,0x19,0x10, + 0xf3,0x06,0x05,0xdd,0x21,0x20,0x47,0xdd,0x77,0x0e,0xdd,0x77,0x0f,0xdd,0x77,0x10, + 0xdd,0x19,0x10,0xf3,0x3e,0x18,0x32,0xed,0x45,0x32,0x0d,0x46,0xc9,0xdd,0x21,0x00, + 0x4c,0xdd,0x36,0x02,0x20,0xdd,0x36,0x04,0x20,0xdd,0x36,0x06,0x20,0xdd,0x36,0x08, + 0x20,0xdd,0x36,0x0a,0x2c,0xdd,0x36,0x0c,0x3f,0xdd,0x36,0x03,0x01,0xdd,0x36,0x05, + 0x03,0xdd,0x36,0x07,0x05,0xdd,0x36,0x09,0x07,0xdd,0x36,0x0b,0x09,0xdd,0x36,0x0d, + 0x00,0x78,0xa7,0xc2,0x0f,0x26,0x21,0x64,0x80,0x22,0x00,0x4d,0x21,0x7c,0x80,0x22, + 0x02,0x4d,0x21,0x7c,0x90,0x22,0x04,0x4d,0x21,0x7c,0x70,0x22,0x06,0x4d,0x21,0xc4, + 0x80,0x22,0x08,0x4d,0x21,0x2c,0x2e,0x22,0x0a,0x4d,0x22,0x31,0x4d,0x21,0x2f,0x2e, + 0x22,0x0c,0x4d,0x22,0x33,0x4d,0x21,0x2f,0x30,0x22,0x0e,0x4d,0x22,0x35,0x4d,0x21, + 0x2f,0x2c,0x22,0x10,0x4d,0x22,0x37,0x4d,0x21,0x38,0x2e,0x22,0x12,0x4d,0x22,0x39, + 0x4d,0x21,0x00,0x01,0x22,0x14,0x4d,0x22,0x1e,0x4d,0x21,0x01,0x00,0x22,0x16,0x4d, + 0x22,0x20,0x4d,0x21,0xff,0x00,0x22,0x18,0x4d,0x22,0x22,0x4d,0x21,0xff,0x00,0x22, + 0x1a,0x4d,0x22,0x24,0x4d,0x21,0x00,0x01,0x22,0x1c,0x4d,0x22,0x26,0x4d,0x21,0x02, + 0x01,0x22,0x28,0x4d,0x22,0x2c,0x4d,0x21,0x03,0x03,0x22,0x2a,0x4d,0x22,0x2e,0x4d, + 0x3e,0x02,0x32,0x30,0x4d,0x32,0x3c,0x4d,0x21,0x00,0x00,0x22,0xd2,0x4d,0xc9,0x21, + 0x94,0x00,0x22,0x00,0x4d,0x22,0x02,0x4d,0x22,0x04,0x4d,0x22,0x06,0x4d,0x21,0x32, + 0x1e,0x22,0x0a,0x4d,0x22,0x0c,0x4d,0x22,0x0e,0x4d,0x22,0x10,0x4d,0x22,0x31,0x4d, + 0x22,0x33,0x4d,0x22,0x35,0x4d,0x22,0x37,0x4d,0x21,0x00,0x01,0x22,0x14,0x4d,0x22, + 0x16,0x4d,0x22,0x18,0x4d,0x22,0x1a,0x4d,0x22,0x1e,0x4d,0x22,0x20,0x4d,0x22,0x22, + 0x4d,0x22,0x24,0x4d,0x22,0x1c,0x4d,0x22,0x26,0x4d,0x21,0x28,0x4d,0x3e,0x02,0x06, + 0x09,0xcf,0x32,0x3c,0x4d,0x21,0x94,0x08,0x22,0x08,0x4d,0x21,0x32,0x1f,0x22,0x12, + 0x4d,0x22,0x39,0x4d,0xc9,0x21,0x00,0x00,0x22,0xd2,0x4d,0x22,0x08,0x4d,0x22,0x00, + 0x4d,0x22,0x02,0x4d,0x22,0x04,0x4d,0x22,0x06,0x4d,0xc9,0x3e,0x55,0x32,0x94,0x4d, + 0x05,0xc8,0x3e,0x01,0x32,0xa0,0x4d,0xc9,0x3e,0x01,0x32,0x00,0x4e,0xaf,0x32,0x01, + 0x4e,0xc9,0xaf,0x11,0x00,0x4d,0x21,0x00,0x4e,0x12,0x13,0xa7,0xed,0x52,0xc2,0xa6, + 0x26,0xc9,0xdd,0x21,0x36,0x41,0x3a,0x71,0x4e,0xe6,0x0f,0xc6,0x30,0xdd,0x77,0x00, + 0x3a,0x71,0x4e,0x0f,0x0f,0x0f,0x0f,0xe6,0x0f,0xc8,0xc6,0x30,0xdd,0x77,0x20,0xc9, + 0x3a,0x80,0x50,0x47,0xe6,0x03,0xc2,0xde,0x26,0x21,0x6e,0x4e,0x36,0xff,0x4f,0x1f, + 0xce,0x00,0x32,0x6b,0x4e,0xe6,0x02,0xa9,0x32,0x6d,0x4e,0x78,0x0f,0x0f,0xe6,0x03, + 0x3c,0xfe,0x04,0x20,0x01,0x3c,0x32,0x6f,0x4e,0x78,0x0f,0x0f,0x0f,0x0f,0xe6,0x03, + 0x21,0x28,0x27,0xd7,0x32,0x71,0x4e,0x78,0x07,0x2f,0xe6,0x01,0x32,0x75,0x4e,0x78, + 0x07,0x07,0x2f,0xe6,0x01,0x47,0x21,0x2c,0x27,0xdf,0x22,0x73,0x4e,0x3a,0x40,0x50, + 0x07,0x2f,0xe6,0x01,0x32,0x72,0x4e,0xc9,0x10,0x15,0x20,0xff,0x68,0x00,0x7d,0x00, + 0x3a,0xc1,0x4d,0xcb,0x47,0xc2,0x58,0x27,0x3a,0xb6,0x4d,0xa7,0x20,0x1a,0x3a,0x04, + 0x4e,0xfe,0x03,0x20,0x13,0x2a,0x0a,0x4d,0x3a,0x2c,0x4d,0x11,0x1d,0x22,0xcd,0x66, + 0x29,0x22,0x1e,0x4d,0x32,0x2c,0x4d,0xc9,0x2a,0x0a,0x4d,0xed,0x5b,0x39,0x4d,0x3a, + 0x2c,0x4d,0xcd,0x66,0x29,0x22,0x1e,0x4d,0x32,0x2c,0x4d,0xc9,0x3a,0xc1,0x4d,0xcb, + 0x47,0xc2,0x8e,0x27,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x13,0x2a,0x0c,0x4d,0x3a,0x2d, + 0x4d,0x11,0x1d,0x39,0xcd,0x66,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0xed,0x5b, + 0x39,0x4d,0x2a,0x1c,0x4d,0x29,0x29,0x19,0xeb,0x2a,0x0c,0x4d,0x3a,0x2d,0x4d,0xcd, + 0x66,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0x3a,0xc1,0x4d,0xcb,0x47,0xc2,0xcb, + 0x27,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x13,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0x11,0x40, + 0x20,0xcd,0x66,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d,0xc9,0xed,0x4b,0x0a,0x4d,0xed, + 0x5b,0x39,0x4d,0x2a,0x1c,0x4d,0x29,0x19,0x7d,0x87,0x91,0x6f,0x7c,0x87,0x90,0x67, + 0xeb,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0xcd,0x66,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d, + 0xc9,0x3a,0xc1,0x4d,0xcb,0x47,0xc2,0x13,0x28,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x13, + 0x2a,0x10,0x4d,0x3a,0x2f,0x4d,0x11,0x40,0x3b,0xcd,0x66,0x29,0x22,0x24,0x4d,0x32, + 0x2f,0x4d,0xc9,0xdd,0x21,0x39,0x4d,0xfd,0x21,0x10,0x4d,0xcd,0xea,0x29,0x11,0x40, + 0x00,0xa7,0xed,0x52,0xda,0x00,0x28,0x2a,0x10,0x4d,0xed,0x5b,0x39,0x4d,0x3a,0x2f, + 0x4d,0xcd,0x66,0x29,0x22,0x24,0x4d,0x32,0x2f,0x4d,0xc9,0x3a,0xac,0x4d,0xa7,0xca, + 0x55,0x28,0x11,0x2c,0x2e,0x2a,0x0a,0x4d,0x3a,0x2c,0x4d,0xcd,0x66,0x29,0x22,0x1e, + 0x4d,0x32,0x2c,0x4d,0xc9,0x2a,0x0a,0x4d,0x3a,0x2c,0x4d,0xcd,0x1e,0x29,0x22,0x1e, + 0x4d,0x32,0x2c,0x4d,0xc9,0x3a,0xad,0x4d,0xa7,0xca,0x7f,0x28,0x11,0x2c,0x2e,0x2a, + 0x0c,0x4d,0x3a,0x2d,0x4d,0xcd,0x66,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0x2a, + 0x0c,0x4d,0x3a,0x2d,0x4d,0xcd,0x1e,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0x3a, + 0xae,0x4d,0xa7,0xca,0xa9,0x28,0x11,0x2c,0x2e,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0xcd, + 0x66,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d,0xc9,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0xcd, + 0x1e,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d,0xc9,0x3a,0xaf,0x4d,0xa7,0xca,0xd3,0x28, + 0x11,0x2c,0x2e,0x2a,0x10,0x4d,0x3a,0x2f,0x4d,0xcd,0x66,0x29,0x22,0x24,0x4d,0x32, + 0x2f,0x4d,0xc9,0x2a,0x10,0x4d,0x3a,0x2f,0x4d,0xcd,0x1e,0x29,0x22,0x24,0x4d,0x32, + 0x2f,0x4d,0xc9,0x3a,0xa7,0x4d,0xa7,0xca,0xfe,0x28,0x2a,0x12,0x4d,0xed,0x5b,0x0c, + 0x4d,0x3a,0x3c,0x4d,0xcd,0x66,0x29,0x22,0x26,0x4d,0x32,0x3c,0x4d,0xc9,0x2a,0x39, + 0x4d,0xed,0x4b,0x0c,0x4d,0x7d,0x87,0x91,0x6f,0x7c,0x87,0x90,0x67,0xeb,0x2a,0x12, + 0x4d,0x3a,0x3c,0x4d,0xcd,0x66,0x29,0x22,0x26,0x4d,0x32,0x3c,0x4d,0xc9,0x22,0x3e, + 0x4d,0xee,0x02,0x32,0x3d,0x4d,0xcd,0x23,0x2a,0xe6,0x03,0x21,0x3b,0x4d,0x77,0x87, + 0x5f,0x16,0x00,0xdd,0x21,0xff,0x32,0xdd,0x19,0xfd,0x21,0x3e,0x4d,0x3a,0x3d,0x4d, + 0xbe,0xca,0x57,0x29,0xcd,0x0f,0x20,0xe6,0xc0,0xd6,0xc0,0x28,0x0a,0xdd,0x6e,0x00, + 0xdd,0x66,0x01,0x3a,0x3b,0x4d,0xc9,0xdd,0x23,0xdd,0x23,0x21,0x3b,0x4d,0x7e,0x3c, + 0xe6,0x03,0x77,0xc3,0x3d,0x29,0x22,0x3e,0x4d,0xed,0x53,0x40,0x4d,0x32,0x3b,0x4d, + 0xee,0x02,0x32,0x3d,0x4d,0x21,0xff,0xff,0x22,0x44,0x4d,0xdd,0x21,0xff,0x32,0xfd, + 0x21,0x3e,0x4d,0x21,0xc7,0x4d,0x36,0x00,0x3a,0x3d,0x4d,0xbe,0xca,0xc6,0x29,0xcd, + 0x00,0x20,0x22,0x42,0x4d,0xcd,0x65,0x00,0x7e,0xe6,0xc0,0xd6,0xc0,0x28,0x27,0xdd, + 0xe5,0xfd,0xe5,0xdd,0x21,0x40,0x4d,0xfd,0x21,0x42,0x4d,0xcd,0xea,0x29,0xfd,0xe1, + 0xdd,0xe1,0xeb,0x2a,0x44,0x4d,0xa7,0xed,0x52,0xda,0xc6,0x29,0xed,0x53,0x44,0x4d, + 0x3a,0xc7,0x4d,0x32,0x3b,0x4d,0xdd,0x23,0xdd,0x23,0x21,0xc7,0x4d,0x34,0x3e,0x04, + 0xbe,0xc2,0x88,0x29,0x3a,0x3b,0x4d,0x87,0x5f,0x16,0x00,0xdd,0x21,0xff,0x32,0xdd, + 0x19,0xdd,0x6e,0x00,0xdd,0x66,0x01,0xcb,0x3f,0xc9,0xdd,0x7e,0x00,0xfd,0x46,0x00, + 0x90,0xd2,0xf9,0x29,0x78,0xdd,0x46,0x00,0x90,0xcd,0x12,0x2a,0xe5,0xdd,0x7e,0x01, + 0xfd,0x46,0x01,0x90,0xd2,0x0c,0x2a,0x78,0xdd,0x46,0x01,0x90,0xcd,0x12,0x2a,0xc1, + 0x09,0xc9,0x67,0x5f,0x2e,0x00,0x55,0x0e,0x08,0x29,0xd2,0x1e,0x2a,0x19,0x0d,0xc2, + 0x19,0x2a,0xc9,0x2a,0xc9,0x4d,0x54,0x5d,0x29,0x29,0x19,0x23,0x7c,0xe6,0x1f,0x67, + 0x7e,0x22,0xc9,0x4d,0xc9,0x11,0x40,0x40,0x21,0xc0,0x43,0xa7,0xed,0x52,0xc8,0x1a, + 0xfe,0x10,0xca,0x53,0x2a,0xfe,0x12,0xca,0x53,0x2a,0xfe,0x14,0xca,0x53,0x2a,0x13, + 0xc3,0x38,0x2a,0x3e,0x40,0x12,0x13,0xc3,0x38,0x2a,0x3a,0x00,0x4e,0xfe,0x01,0xc8, + 0x21,0x17,0x2b,0xdf,0xeb,0xcd,0x0b,0x2b,0x7b,0x86,0x27,0x77,0x23,0x7a,0x8e,0x27, + 0x77,0x5f,0x23,0x3e,0x00,0x8e,0x27,0x77,0x57,0xeb,0x29,0x29,0x29,0x29,0x3a,0x71, + 0x4e,0x3d,0xbc,0xdc,0x33,0x2b,0xcd,0xaf,0x2a,0x13,0x13,0x13,0x21,0x8a,0x4e,0x06, + 0x03,0x1a,0xbe,0xd8,0x20,0x05,0x1b,0x2b,0x10,0xf7,0xc9,0xcd,0x0b,0x2b,0x11,0x88, + 0x4e,0x01,0x03,0x00,0xed,0xb0,0x1b,0x01,0x04,0x03,0x21,0xf2,0x43,0x18,0x0f,0x3a, + 0x09,0x4e,0x01,0x04,0x03,0x21,0xfc,0x43,0xa7,0x28,0x03,0x21,0xe9,0x43,0x1a,0x0f, + 0x0f,0x0f,0x0f,0xcd,0xce,0x2a,0x1a,0xcd,0xce,0x2a,0x1b,0x10,0xf1,0xc9,0xe6,0x0f, + 0x28,0x04,0x0e,0x00,0x18,0x07,0x79,0xa7,0x28,0x03,0x3e,0x40,0x0d,0x77,0x2b,0xc9, + 0x06,0x00,0xcd,0x5e,0x2c,0xaf,0x21,0x80,0x4e,0x06,0x08,0xcf,0x01,0x04,0x03,0x11, + 0x82,0x4e,0x21,0xfc,0x43,0xcd,0xbe,0x2a,0x01,0x04,0x03,0x11,0x86,0x4e,0x21,0xe9, + 0x43,0x3a,0x70,0x4e,0xa7,0x20,0xb7,0x0e,0x06,0x18,0xb3,0x3a,0x09,0x4e,0x21,0x80, + 0x4e,0xa7,0xc8,0x21,0x84,0x4e,0xc9,0x10,0x00,0x50,0x00,0x00,0x02,0x00,0x04,0x00, + 0x08,0x00,0x16,0x00,0x01,0x00,0x03,0x00,0x05,0x00,0x07,0x00,0x10,0x00,0x20,0x00, + 0x30,0x00,0x50,0x13,0x6b,0x62,0x1b,0xcb,0x46,0xc0,0xcb,0xc6,0x21,0x9c,0x4e,0xcb, + 0xc6,0x21,0x14,0x4e,0x34,0x21,0x15,0x4e,0x34,0x46,0x21,0x1a,0x40,0x0e,0x05,0x78, + 0xa7,0x28,0x0e,0xfe,0x06,0x30,0x0a,0x3e,0x20,0xcd,0x8f,0x2b,0x2b,0x2b,0x0d,0x10, + 0xf6,0x0d,0xf8,0xcd,0x7e,0x2b,0x2b,0x2b,0x18,0xf7,0x3a,0x00,0x4e,0xfe,0x01,0xc8, + 0xcd,0xcd,0x2b,0x12,0x44,0x09,0x0a,0x02,0x21,0x15,0x4e,0x46,0x18,0xcc,0x3e,0x40, + 0xe5,0xd5,0x77,0x23,0x77,0x11,0x1f,0x00,0x19,0x77,0x23,0x77,0xd1,0xe1,0xc9,0xe5, + 0xd5,0x11,0x1f,0x00,0x77,0x3c,0x23,0x77,0x3c,0x19,0x77,0x3c,0x23,0x77,0xd1,0xe1, + 0xc9,0x3a,0x6e,0x4e,0xfe,0xff,0x20,0x05,0x06,0x02,0xc3,0x5e,0x2c,0x06,0x01,0xcd, + 0x5e,0x2c,0x3a,0x6e,0x4e,0xe6,0xf0,0x28,0x09,0x0f,0x0f,0x0f,0x0f,0xc6,0x30,0x32, + 0x34,0x40,0x3a,0x6e,0x4e,0xe6,0x0f,0xc6,0x30,0x32,0x33,0x40,0xc9,0xe1,0x5e,0x23, + 0x56,0x23,0x4e,0x23,0x46,0x23,0x7e,0x23,0xe5,0xeb,0x11,0x20,0x00,0xe5,0xc5,0x71, + 0x23,0x10,0xfc,0xc1,0xe1,0x19,0x3d,0x20,0xf4,0xc9,0x3a,0x00,0x4e,0xfe,0x01,0xc8, + 0x3a,0x13,0x4e,0x3c,0xfe,0x08,0xd2,0x2e,0x2c,0x11,0x08,0x3b,0x47,0x0e,0x07,0x21, + 0x04,0x40,0x1a,0xcd,0x8f,0x2b,0x3e,0x04,0x84,0x67,0x13,0x1a,0xcd,0x80,0x2b,0x3e, + 0xfc,0x84,0x67,0x13,0x23,0x23,0x0d,0x10,0xe9,0x0d,0xf8,0xcd,0x7e,0x2b,0x3e,0x04, + 0x84,0x67,0xaf,0xcd,0x80,0x2b,0x3e,0xfc,0x84,0x67,0x23,0x23,0x18,0xeb,0xfe,0x13, + 0x38,0x02,0x3e,0x13,0xd6,0x07,0x4f,0x06,0x00,0x21,0x08,0x3b,0x09,0x09,0xeb,0x06, + 0x07,0xc3,0xfd,0x2b,0x47,0xe6,0x0f,0xc6,0x00,0x27,0x4f,0x78,0xe6,0xf0,0x28,0x0b, + 0x0f,0x0f,0x0f,0x0f,0x47,0xaf,0xc6,0x16,0x27,0x10,0xfb,0x81,0x27,0xc9,0x21,0xa5, + 0x36,0xdf,0x5e,0x23,0x56,0xdd,0x21,0x00,0x44,0xdd,0x19,0xdd,0xe5,0x11,0x00,0xfc, + 0xdd,0x19,0x11,0xff,0xff,0xcb,0x7e,0x20,0x03,0x11,0xe0,0xff,0x23,0x78,0x01,0x00, + 0x00,0x87,0x38,0x28,0x7e,0xfe,0x2f,0x28,0x09,0xdd,0x77,0x00,0x23,0xdd,0x19,0x04, + 0x18,0xf2,0x23,0xdd,0xe1,0x7e,0xa7,0xfa,0xa4,0x2c,0x7e,0xdd,0x77,0x00,0x23,0xdd, + 0x19,0x10,0xf7,0xc9,0xdd,0x77,0x00,0xdd,0x19,0x10,0xf9,0xc9,0x7e,0xfe,0x2f,0x28, + 0x0a,0xdd,0x36,0x00,0x40,0x23,0xdd,0x19,0x04,0x18,0xf1,0x23,0x04,0xed,0xb1,0x18, + 0xd2,0x21,0xc8,0x3b,0xdd,0x21,0xcc,0x4e,0xfd,0x21,0x8c,0x4e,0xcd,0x44,0x2d,0x47, + 0x3a,0xcc,0x4e,0xa7,0x28,0x04,0x78,0x32,0x91,0x4e,0x21,0xcc,0x3b,0xdd,0x21,0xdc, + 0x4e,0xfd,0x21,0x92,0x4e,0xcd,0x44,0x2d,0x47,0x3a,0xdc,0x4e,0xa7,0x28,0x04,0x78, + 0x32,0x96,0x4e,0x21,0xd0,0x3b,0xdd,0x21,0xec,0x4e,0xfd,0x21,0x97,0x4e,0xcd,0x44, + 0x2d,0x47,0x3a,0xec,0x4e,0xa7,0xc8,0x78,0x32,0x9b,0x4e,0xc9,0x21,0x30,0x3b,0xdd, + 0x21,0x9c,0x4e,0xfd,0x21,0x8c,0x4e,0xcd,0xee,0x2d,0x32,0x91,0x4e,0x21,0x40,0x3b, + 0xdd,0x21,0xac,0x4e,0xfd,0x21,0x92,0x4e,0xcd,0xee,0x2d,0x32,0x96,0x4e,0x21,0x80, + 0x3b,0xdd,0x21,0xbc,0x4e,0xfd,0x21,0x97,0x4e,0xcd,0xee,0x2d,0x32,0x9b,0x4e,0xaf, + 0x32,0x90,0x4e,0xc9,0xdd,0x7e,0x00,0xa7,0xca,0xf4,0x2d,0x4f,0x06,0x08,0x1e,0x80, + 0x7b,0xa1,0x20,0x05,0xcb,0x3b,0x10,0xf8,0xc9,0xdd,0x7e,0x02,0xa3,0x20,0x07,0xdd, + 0x73,0x02,0x05,0xdf,0x18,0x0c,0xdd,0x35,0x0c,0xc2,0xd7,0x2d,0xdd,0x6e,0x06,0xdd, + 0x66,0x07,0x7e,0x23,0xdd,0x75,0x06,0xdd,0x74,0x07,0xfe,0xf0,0x38,0x27,0x21,0x6c, + 0x2d,0xe5,0xe6,0x0f,0xe7,0x55,0x2f,0x65,0x2f,0x77,0x2f,0x89,0x2f,0x9b,0x2f,0x0c, + 0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c, + 0x00,0x0c,0x00,0xad,0x2f,0x47,0xe6,0x1f,0x28,0x03,0xdd,0x70,0x0d,0xdd,0x4e,0x09, + 0xdd,0x7e,0x0b,0xe6,0x08,0x28,0x02,0x0e,0x00,0xdd,0x71,0x0f,0x78,0x07,0x07,0x07, + 0xe6,0x07,0x21,0xb0,0x3b,0xd7,0xdd,0x77,0x0c,0x78,0xe6,0x1f,0x28,0x09,0xe6,0x0f, + 0x21,0xb8,0x3b,0xd7,0xdd,0x77,0x0e,0xdd,0x6e,0x0e,0x26,0x00,0xdd,0x7e,0x0d,0xe6, + 0x10,0x28,0x02,0x3e,0x01,0xdd,0x86,0x04,0xca,0xe8,0x2e,0xc3,0xe4,0x2e,0xdd,0x7e, + 0x00,0xa7,0x20,0x27,0xdd,0x7e,0x02,0xa7,0xc8,0xdd,0x36,0x02,0x00,0xdd,0x36,0x0d, + 0x00,0xdd,0x36,0x0e,0x00,0xdd,0x36,0x0f,0x00,0xfd,0x36,0x00,0x00,0xfd,0x36,0x01, + 0x00,0xfd,0x36,0x02,0x00,0xfd,0x36,0x03,0x00,0xaf,0xc9,0x4f,0x06,0x08,0x1e,0x80, + 0x7b,0xa1,0x20,0x05,0xcb,0x3b,0x10,0xf8,0xc9,0xdd,0x7e,0x02,0xa3,0x20,0x3f,0xdd, + 0x73,0x02,0x05,0x78,0x07,0x07,0x07,0x4f,0x06,0x00,0xe5,0x09,0xdd,0xe5,0xd1,0x13, + 0x13,0x13,0x01,0x08,0x00,0xed,0xb0,0xe1,0xdd,0x7e,0x06,0xe6,0x7f,0xdd,0x77,0x0c, + 0xdd,0x7e,0x04,0xdd,0x77,0x0e,0xdd,0x7e,0x09,0x47,0x0f,0x0f,0x0f,0x0f,0xe6,0x0f, + 0xdd,0x77,0x0b,0xe6,0x08,0x20,0x07,0xdd,0x70,0x0f,0xdd,0x36,0x0d,0x00,0xdd,0x35, + 0x0c,0x20,0x5a,0xdd,0x7e,0x08,0xa7,0x28,0x10,0xdd,0x35,0x08,0x20,0x0b,0x7b,0x2f, + 0xdd,0xa6,0x00,0xdd,0x77,0x00,0xc3,0xee,0x2d,0xdd,0x7e,0x06,0xe6,0x7f,0xdd,0x77, + 0x0c,0xdd,0xcb,0x06,0x7e,0x28,0x16,0xdd,0x7e,0x05,0xed,0x44,0xdd,0x77,0x05,0xdd, + 0xcb,0x0d,0x46,0xdd,0xcb,0x0d,0xc6,0x28,0x24,0xdd,0xcb,0x0d,0x86,0xdd,0x7e,0x04, + 0xdd,0x86,0x07,0xdd,0x77,0x04,0xdd,0x77,0x0e,0xdd,0x7e,0x09,0xdd,0x86,0x0a,0xdd, + 0x77,0x09,0x47,0xdd,0x7e,0x0b,0xe6,0x08,0x20,0x03,0xdd,0x70,0x0f,0xdd,0x7e,0x0e, + 0xdd,0x86,0x05,0xdd,0x77,0x0e,0x6f,0x26,0x00,0xdd,0x7e,0x03,0xe6,0x70,0x28,0x08, + 0x0f,0x0f,0x0f,0x0f,0x47,0x29,0x10,0xfd,0xfd,0x75,0x00,0x7d,0x0f,0x0f,0x0f,0x0f, + 0xfd,0x77,0x01,0xfd,0x74,0x02,0x7c,0x0f,0x0f,0x0f,0x0f,0xfd,0x77,0x03,0xdd,0x7e, + 0x0b,0xe7,0x22,0x2f,0x26,0x2f,0x2b,0x2f,0x3c,0x2f,0x43,0x2f,0x4a,0x2f,0x4b,0x2f, + 0x4c,0x2f,0x4d,0x2f,0x4e,0x2f,0x4f,0x2f,0x50,0x2f,0x51,0x2f,0x52,0x2f,0x53,0x2f, + 0x54,0x2f,0xdd,0x7e,0x0f,0xc9,0xdd,0x7e,0x0f,0x18,0x09,0x3a,0x84,0x4c,0xe6,0x01, + 0xdd,0x7e,0x0f,0xc0,0xe6,0x0f,0xc8,0x3d,0xdd,0x77,0x0f,0xc9,0x3a,0x84,0x4c,0xe6, + 0x03,0x18,0xed,0x3a,0x84,0x4c,0xe6,0x07,0x18,0xe6,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, + 0xc9,0xc9,0xc9,0xc9,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e,0xdd,0x77,0x06,0x23, + 0x7e,0xdd,0x77,0x07,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e,0x23,0xdd,0x75,0x06, + 0xdd,0x74,0x07,0xdd,0x77,0x03,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e,0x23,0xdd, + 0x75,0x06,0xdd,0x74,0x07,0xdd,0x77,0x04,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e, + 0x23,0xdd,0x75,0x06,0xdd,0x74,0x07,0xdd,0x77,0x09,0xc9,0xdd,0x6e,0x06,0xdd,0x66, + 0x07,0x7e,0x23,0xdd,0x75,0x06,0xdd,0x74,0x07,0xdd,0x77,0x0b,0xc9,0xdd,0x7e,0x02, + 0x2f,0xdd,0xa6,0x00,0xdd,0x77,0x00,0xc3,0xf4,0x2d,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x4c, + 0x21,0x00,0x00,0x01,0x00,0x10,0x32,0xc0,0x50,0x79,0x86,0x4f,0x7d,0xc6,0x02,0x6f, + 0xfe,0x02,0xd2,0x09,0x30,0x24,0x10,0xee,0x79,0xa7,0x20,0x15,0x32,0x07,0x50,0x7c, + 0xfe,0x30,0xc2,0x03,0x30,0x26,0x00,0x2c,0x7d,0xfe,0x02,0xda,0x03,0x30,0xc3,0x42, + 0x30,0x25,0x7c,0xe6,0xf0,0x32,0x07,0x50,0x0f,0x0f,0x0f,0x0f,0x5f,0x06,0x00,0xc3, + 0xbd,0x30,0x31,0x54,0x31,0x06,0xff,0xe1,0xd1,0x48,0x32,0xc0,0x50,0x79,0xa3,0x77, + 0xc6,0x33,0x4f,0x2c,0x7d,0xe6,0x0f,0xc2,0x4d,0x30,0x79,0x87,0x87,0x81,0xc6,0x31, + 0x4f,0x7d,0xa7,0xc2,0x4d,0x30,0x24,0x15,0xc2,0x4a,0x30,0x3b,0x3b,0x3b,0x3b,0xe1, + 0xd1,0x48,0x32,0xc0,0x50,0x79,0xa3,0x4f,0x7e,0xa3,0xb9,0xc2,0xb5,0x30,0xc6,0x33, + 0x4f,0x2c,0x7d,0xe6,0x0f,0xc2,0x75,0x30,0x79,0x87,0x87,0x81,0xc6,0x31,0x4f,0x7d, + 0xa7,0xc2,0x75,0x30,0x24,0x15,0xc2,0x72,0x30,0x3b,0x3b,0x3b,0x3b,0x78,0xd6,0x10, + 0x47,0x10,0xa4,0xf1,0xd1,0xfe,0x44,0xc2,0x45,0x30,0x7b,0xee,0xf0,0xc2,0x45,0x30, + 0x06,0x01,0xc3,0xbd,0x30,0x7b,0xe6,0x01,0xee,0x01,0x5f,0x06,0x00,0x31,0xc0,0x4f, + 0xd9,0x21,0x00,0x4c,0x06,0x04,0x32,0xc0,0x50,0x36,0x00,0x2c,0x20,0xfb,0x24,0x10, + 0xf5,0x21,0x00,0x40,0x06,0x04,0x32,0xc0,0x50,0x3e,0x40,0x77,0x2c,0x20,0xfc,0x24, + 0x10,0xf4,0x06,0x04,0x32,0xc0,0x50,0x3e,0x0f,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf4, + 0xd9,0x10,0x08,0x06,0x23,0xcd,0x5e,0x2c,0xc3,0x74,0x31,0x7b,0xc6,0x30,0x32,0x84, + 0x41,0xc5,0xe5,0x06,0x24,0xcd,0x5e,0x2c,0xe1,0x7c,0xfe,0x40,0x2a,0x6c,0x31,0x38, + 0x11,0xfe,0x4c,0x2a,0x6e,0x31,0x30,0x0a,0xfe,0x44,0x2a,0x70,0x31,0x38,0x03,0x2a, + 0x72,0x31,0x7d,0x32,0x04,0x42,0x7c,0x32,0x64,0x42,0x3a,0x00,0x50,0x47,0x3a,0x40, + 0x50,0xb0,0xe6,0x01,0x20,0x11,0xc1,0x79,0xe6,0x0f,0x47,0x79,0xe6,0xf0,0x0f,0x0f, + 0x0f,0x0f,0x4f,0xed,0x43,0x85,0x41,0x32,0xc0,0x50,0x3a,0x40,0x50,0xe6,0x10,0x28, + 0xf6,0xc3,0x0b,0x23,0x00,0x4c,0x0f,0x04,0x00,0x4c,0xf0,0x04,0x00,0x40,0x0f,0x04, + 0x00,0x40,0xf0,0x04,0x00,0x44,0x0f,0x04,0x00,0x44,0xf0,0x04,0x4f,0x40,0x41,0x57, + 0x41,0x56,0x41,0x43,0x21,0x06,0x50,0x3e,0x01,0x77,0x2d,0x20,0xfc,0xaf,0x32,0x03, + 0x50,0xd6,0x04,0xd3,0x00,0x31,0xc0,0x4f,0x32,0xc0,0x50,0xaf,0x32,0x00,0x4e,0x3c, + 0x32,0x01,0x4e,0x32,0x00,0x50,0xfb,0x3a,0x00,0x50,0x2f,0x47,0xe6,0xe0,0x28,0x05, + 0x3e,0x02,0x32,0x9c,0x4e,0x3a,0x40,0x50,0x2f,0x4f,0xe6,0x60,0x28,0x05,0x3e,0x01, + 0x32,0x9c,0x4e,0x78,0xb1,0xe6,0x01,0x28,0x05,0x3e,0x08,0x32,0xbc,0x4e,0x78,0xb1, + 0xe6,0x02,0x28,0x05,0x3e,0x04,0x32,0xbc,0x4e,0x78,0xb1,0xe6,0x04,0x28,0x05,0x3e, + 0x10,0x32,0xbc,0x4e,0x78,0xb1,0xe6,0x08,0x28,0x05,0x3e,0x20,0x32,0xbc,0x4e,0x3a, + 0x80,0x50,0xe6,0x03,0xc6,0x25,0x47,0xcd,0x5e,0x2c,0x3a,0x80,0x50,0x0f,0x0f,0x0f, + 0x0f,0xe6,0x03,0xfe,0x03,0x20,0x08,0x06,0x2a,0xcd,0x5e,0x2c,0xc3,0x1c,0x32,0x07, + 0x5f,0xd5,0x06,0x2b,0xcd,0x5e,0x2c,0x06,0x2e,0xcd,0x5e,0x2c,0xd1,0x16,0x00,0x21, + 0xf9,0x32,0x19,0x7e,0x32,0x2a,0x42,0x23,0x7e,0x32,0x4a,0x42,0x3a,0x80,0x50,0x0f, + 0x0f,0xe6,0x03,0xc6,0x31,0xfe,0x34,0x20,0x01,0x3c,0x32,0x0c,0x42,0x06,0x29,0xcd, + 0x5e,0x2c,0x3a,0x40,0x50,0x07,0xe6,0x01,0xc6,0x2c,0x47,0xcd,0x5e,0x2c,0x3a,0x40, + 0x50,0xe6,0x10,0xca,0x88,0x31,0xaf,0x32,0x00,0x50,0xf3,0x21,0x07,0x50,0xaf,0x77, + 0x2d,0x20,0xfc,0x31,0xe2,0x3a,0x06,0x03,0xd9,0xe1,0xd1,0x32,0xc0,0x50,0xc1,0x3e, + 0x3c,0x77,0x23,0x72,0x23,0x10,0xf8,0x3b,0x3b,0xc1,0x71,0x23,0x3e,0x3f,0x77,0x23, + 0x10,0xf8,0x3b,0x3b,0x1d,0xc2,0x5b,0x32,0xf1,0xd9,0x10,0xdc,0x31,0xc0,0x4f,0x06, + 0x08,0xcd,0xed,0x32,0x10,0xfb,0x32,0xc0,0x50,0x3a,0x40,0x50,0xe6,0x10,0x28,0xf6, + 0x3a,0x40,0x50,0xe6,0x60,0xc2,0x4b,0x23,0x06,0x08,0xcd,0xed,0x32,0x10,0xfb,0x3a, + 0x40,0x50,0xe6,0x10,0xc2,0x4b,0x23,0x1e,0x01,0x06,0x04,0x32,0xc0,0x50,0xcd,0xed, + 0x32,0x3a,0x00,0x50,0xa3,0x20,0xf4,0xcd,0xed,0x32,0x32,0xc0,0x50,0x3a,0x00,0x50, + 0xee,0xff,0x20,0xf3,0x10,0xe5,0xcb,0x03,0x7b,0xfe,0x10,0xda,0xa9,0x32,0x21,0x00, + 0x40,0x06,0x04,0x3e,0x40,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf7,0xcd,0xf4,0x3a,0x32, + 0xc0,0x50,0x3a,0x40,0x50,0xe6,0x10,0xca,0xdf,0x32,0xc3,0x4b,0x23,0x32,0xc0,0x50, + 0x21,0x00,0x28,0x2b,0x7c,0xb5,0x20,0xfb,0xc9,0x30,0x31,0x35,0x31,0x30,0x32,0x00, + 0xff,0x01,0x00,0x00,0x01,0xff,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0xff,0x00,0x55, + 0x2a,0x55,0x2a,0x55,0x55,0x55,0x55,0x55,0x2a,0x55,0x2a,0x52,0x4a,0xa5,0x94,0x25, + 0x25,0x25,0x25,0x22,0x22,0x22,0x22,0x01,0x01,0x01,0x01,0x58,0x02,0x08,0x07,0x60, + 0x09,0x10,0x0e,0x68,0x10,0x70,0x17,0x14,0x19,0x52,0x4a,0xa5,0x94,0xaa,0x2a,0x55, + 0x55,0x55,0x2a,0x55,0x2a,0x52,0x4a,0xa5,0x94,0x92,0x24,0x25,0x49,0x48,0x24,0x22, + 0x91,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x55,0x2a,0x55,0x2a,0x55,0x55,0x55,0x55,0xaa,0x2a,0x55,0x55,0x55, + 0x2a,0x55,0x2a,0x52,0x4a,0xa5,0x94,0x48,0x24,0x22,0x91,0x21,0x44,0x44,0x08,0x58, + 0x02,0x34,0x08,0xd8,0x09,0xb4,0x0f,0x58,0x11,0x08,0x16,0x34,0x17,0x55,0x55,0x55, + 0x55,0xd5,0x6a,0xd5,0x6a,0xaa,0x6a,0x55,0xd5,0x55,0x55,0x55,0x55,0xaa,0x2a,0x55, + 0x55,0x92,0x24,0x92,0x24,0x22,0x22,0x22,0x22,0xa4,0x01,0x54,0x06,0xf8,0x07,0xa8, + 0x0c,0xd4,0x0d,0x84,0x12,0xb0,0x13,0xd5,0x6a,0xd5,0x6a,0xd6,0x5a,0xad,0xb5,0xd6, + 0x5a,0xad,0xb5,0xd5,0x6a,0xd5,0x6a,0xaa,0x6a,0x55,0xd5,0x92,0x24,0x25,0x49,0x48, + 0x24,0x22,0x91,0xa4,0x01,0x54,0x06,0xf8,0x07,0xa8,0x0c,0xd4,0x0d,0xfe,0xff,0xff, + 0xff,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0xb6,0x6d,0x6d,0xdb,0x6d,0x6d,0x6d, + 0x6d,0xd6,0x5a,0xad,0xb5,0x25,0x25,0x25,0x25,0x92,0x24,0x92,0x24,0x2c,0x01,0xdc, + 0x05,0x08,0x07,0xb8,0x0b,0xe4,0x0c,0xfe,0xff,0xff,0xff,0xd5,0x6a,0xd5,0x6a,0xd5, + 0x6a,0xd5,0x6a,0xb6,0x6d,0x6d,0xdb,0x6d,0x6d,0x6d,0x6d,0xd6,0x5a,0xad,0xb5,0x48, + 0x24,0x22,0x91,0x92,0x24,0x92,0x24,0x2c,0x01,0xdc,0x05,0x08,0x07,0xb8,0x0b,0xe4, + 0x0c,0xfe,0xff,0xff,0xff,0x40,0xfc,0xd0,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, + 0xd4,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xd0,0xd2,0xd2,0xd2,0xd2,0xd6, + 0xd8,0xd2,0xd2,0xd2,0xd2,0xd4,0xfc,0xda,0x09,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc, + 0xfc,0xfc,0xfc,0xda,0x05,0xde,0xe4,0x05,0xdc,0xfc,0xda,0x02,0xe6,0xe8,0xea,0x02, + 0xe6,0xea,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xe6, + 0xea,0x02,0xe7,0xeb,0x02,0xe6,0xea,0x02,0xdc,0xfc,0xda,0x02,0xde,0xfc,0xe4,0x02, + 0xde,0xe4,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xde, + 0xe4,0x05,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x02,0xde,0xfc,0xe4,0x02,0xde,0xe4,0x02, + 0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xde,0xf2,0xe8,0xe8, + 0xea,0x02,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x02,0xe7,0xe9,0xeb,0x02,0xe7,0xeb,0x02, + 0xe7,0xd2,0xd2,0xd2,0xeb,0x02,0xe7,0xd2,0xd2,0xd2,0xeb,0x02,0xe7,0xe9,0xe9,0xe9, + 0xeb,0x02,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x1b,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x02, + 0xe6,0xe8,0xf8,0x02,0xf6,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xf8,0x02,0xf6,0xe8,0xe8, + 0xe8,0xea,0x02,0xe6,0xf8,0x02,0xf6,0xe8,0xe8,0xf4,0xe4,0x02,0xdc,0xfc,0xda,0x02, + 0xde,0xfc,0xe4,0x02,0xf7,0xe9,0xe9,0xf5,0xf3,0xe9,0xe9,0xf9,0x02,0xf7,0xe9,0xe9, + 0xe9,0xeb,0x02,0xde,0xe4,0x02,0xf7,0xe9,0xe9,0xf5,0xe4,0x02,0xdc,0xfc,0xda,0x02, + 0xde,0xfc,0xe4,0x05,0xde,0xe4,0x0b,0xde,0xe4,0x05,0xde,0xe4,0x02,0xdc,0xfc,0xda, + 0x02,0xde,0xfc,0xe4,0x02,0xe6,0xea,0x02,0xde,0xe4,0x02,0xec,0xd3,0xd3,0xd3,0xee, + 0x02,0xe6,0xea,0x02,0xde,0xe4,0x02,0xe6,0xea,0x02,0xde,0xe4,0x02,0xdc,0xfc,0xda, + 0x02,0xe7,0xe9,0xeb,0x02,0xde,0xe4,0x02,0xe7,0xeb,0x02,0xdc,0xfc,0xfc,0xfc,0xda, + 0x02,0xde,0xe4,0x02,0xe7,0xeb,0x02,0xde,0xe4,0x02,0xe7,0xeb,0x02,0xdc,0xfc,0xda, + 0x06,0xde,0xe4,0x05,0xf0,0xfc,0xfc,0xfc,0xda,0x02,0xde,0xe4,0x05,0xde,0xe4,0x05, + 0xdc,0xfc,0xfa,0xe8,0xe8,0xe8,0xea,0x02,0xde,0xf2,0xe8,0xe8,0xea,0x02,0xce,0xfc, + 0xfc,0xfc,0xda,0x02,0xde,0xf2,0xe8,0xe8,0xea,0x02,0xde,0xf2,0xe8,0xe8,0xea,0x02, + 0xdc,0x00,0x00,0x00,0x00,0x62,0x01,0x02,0x01,0x01,0x01,0x01,0x0c,0x01,0x01,0x04, + 0x01,0x01,0x01,0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x04,0x03,0x0c,0x03,0x01, + 0x01,0x01,0x03,0x04,0x04,0x03,0x0c,0x06,0x03,0x04,0x04,0x03,0x0c,0x06,0x03,0x04, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x04,0x0f,0x03,0x06,0x04, + 0x04,0x0f,0x03,0x06,0x04,0x04,0x01,0x01,0x01,0x0c,0x03,0x01,0x01,0x01,0x03,0x04, + 0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x01,0x01, + 0x01,0x01,0x03,0x0c,0x01,0x01,0x01,0x03,0x01,0x01,0x01,0x08,0x18,0x08,0x18,0x04, + 0x01,0x01,0x01,0x01,0x03,0x0c,0x01,0x01,0x01,0x03,0x01,0x01,0x01,0x04,0x04,0x03, + 0x0c,0x03,0x03,0x03,0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x04,0x01,0x01,0x01, + 0x0c,0x03,0x01,0x01,0x01,0x03,0x04,0x04,0x0f,0x03,0x06,0x04,0x04,0x0f,0x03,0x06, + 0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x04,0x03,0x0c,0x06, + 0x03,0x04,0x04,0x03,0x0c,0x06,0x03,0x04,0x04,0x03,0x0c,0x03,0x01,0x01,0x01,0x03, + 0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x01,0x02,0x01,0x01,0x01,0x01,0x0c,0x01, + 0x01,0x04,0x01,0x01,0x01,0x13,0x37,0x23,0x37,0x32,0x37,0x41,0x37,0x5a,0x37,0x6a, + 0x37,0x7a,0x37,0x86,0x37,0x9d,0x37,0xb1,0x37,0x00,0x3d,0x21,0x3d,0xfd,0x37,0x67, + 0x3d,0xe3,0x3d,0x86,0x3d,0x02,0x3e,0x4c,0x38,0x5a,0x38,0x3c,0x3d,0x57,0x3d,0xd3, + 0x3d,0x76,0x3d,0xf2,0x3d,0x01,0x00,0x02,0x00,0x03,0x00,0xbc,0x38,0xc4,0x38,0xce, + 0x38,0xd8,0x38,0xe2,0x38,0xec,0x38,0xf6,0x38,0x00,0x39,0x0a,0x39,0x1a,0x39,0x6f, + 0x39,0x2a,0x39,0x58,0x39,0x41,0x39,0x4f,0x3e,0x86,0x39,0x97,0x39,0xb0,0x39,0xbd, + 0x39,0xca,0x39,0xa5,0x3d,0x21,0x3e,0xc4,0x3d,0x40,0x3e,0x95,0x3d,0x11,0x3e,0xb4, + 0x3d,0x30,0x3e,0xd4,0x83,0x48,0x49,0x47,0x48,0x40,0x53,0x43,0x4f,0x52,0x45,0x2f, + 0x8f,0x2f,0x80,0x3b,0x80,0x43,0x52,0x45,0x44,0x49,0x54,0x40,0x40,0x40,0x2f,0x8f, + 0x2f,0x80,0x3b,0x80,0x46,0x52,0x45,0x45,0x40,0x50,0x4c,0x41,0x59,0x2f,0x8f,0x2f, + 0x80,0x8c,0x02,0x50,0x4c,0x41,0x59,0x45,0x52,0x40,0x4f,0x4e,0x45,0x2f,0x85,0x2f, + 0x10,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x10,0x8c,0x02,0x50,0x4c,0x41,0x59, + 0x45,0x52,0x40,0x54,0x57,0x4f,0x2f,0x85,0x2f,0x80,0x92,0x02,0x47,0x41,0x4d,0x45, + 0x40,0x40,0x4f,0x56,0x45,0x52,0x2f,0x81,0x2f,0x80,0x52,0x02,0x52,0x45,0x41,0x44, + 0x59,0x5b,0x2f,0x89,0x2f,0x90,0xee,0x02,0x50,0x55,0x53,0x48,0x40,0x53,0x54,0x41, + 0x52,0x54,0x40,0x42,0x55,0x54,0x54,0x4f,0x4e,0x2f,0x87,0x2f,0x80,0xb2,0x02,0x31, + 0x40,0x50,0x4c,0x41,0x59,0x45,0x52,0x40,0x4f,0x4e,0x4c,0x59,0x40,0x2f,0x85,0x2f, + 0x80,0xb2,0x02,0x31,0x40,0x4f,0x52,0x40,0x32,0x40,0x50,0x4c,0x41,0x59,0x45,0x52, + 0x53,0x2f,0x85,0x00,0x2f,0x00,0x80,0x00,0x96,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40, + 0x50,0x55,0x43,0x4b,0x4d,0x41,0x4e,0x40,0x46,0x4f,0x52,0x40,0x40,0x40,0x30,0x30, + 0x30,0x40,0x5d,0x5e,0x5f,0x2f,0x8e,0x2f,0x80,0xba,0x02,0x5c,0x40,0x28,0x29,0x2a, + 0x2b,0x2c,0x2d,0x2e,0x40,0x31,0x39,0x38,0x30,0x2f,0x83,0x2f,0x80,0xc3,0x02,0x43, + 0x48,0x41,0x52,0x41,0x43,0x54,0x45,0x52,0x40,0x3a,0x40,0x4e,0x49,0x43,0x4b,0x4e, + 0x41,0x4d,0x45,0x2f,0x8f,0x2f,0x80,0x65,0x01,0x26,0x41,0x4b,0x41,0x42,0x45,0x49, + 0x26,0x2f,0x81,0x2f,0x80,0x45,0x01,0x26,0x4d,0x41,0x43,0x4b,0x59,0x26,0x2f,0x81, + 0x2f,0x80,0x48,0x01,0x26,0x50,0x49,0x4e,0x4b,0x59,0x26,0x2f,0x83,0x2f,0x80,0x48, + 0x01,0x26,0x4d,0x49,0x43,0x4b,0x59,0x26,0x2f,0x83,0x2f,0x80,0x76,0x02,0x10,0x40, + 0x31,0x30,0x40,0x5d,0x5e,0x5f,0x2f,0x9f,0x2f,0x80,0x78,0x02,0x14,0x40,0x35,0x30, + 0x40,0x5d,0x5e,0x5f,0x2f,0x9f,0x2f,0x80,0x5d,0x02,0x28,0x29,0x2a,0x2b,0x2c,0x2d, + 0x2e,0x2f,0x83,0x2f,0x80,0xc5,0x02,0x40,0x4f,0x49,0x4b,0x41,0x4b,0x45,0x3b,0x3b, + 0x3b,0x3b,0x2f,0x81,0x2f,0x80,0xc5,0x02,0x40,0x55,0x52,0x43,0x48,0x49,0x4e,0x3b, + 0x3b,0x3b,0x3b,0x3b,0x2f,0x81,0x2f,0x80,0xc8,0x02,0x40,0x4d,0x41,0x43,0x48,0x49, + 0x42,0x55,0x53,0x45,0x3b,0x3b,0x2f,0x83,0x2f,0x80,0xc8,0x02,0x40,0x52,0x4f,0x4d, + 0x50,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x2f,0x83,0x2f,0x80,0x12,0x02,0x81,0x85, + 0x2f,0x83,0x2f,0x90,0x32,0x02,0x40,0x82,0x85,0x40,0x2f,0x83,0x2f,0x90,0x32,0x02, + 0x40,0x83,0x85,0x40,0x2f,0x83,0x2f,0x90,0x32,0x02,0x40,0x84,0x85,0x40,0x2f,0x83, + 0x2f,0x90,0x32,0x02,0x40,0x86,0x8d,0x8e,0x2f,0x83,0x2f,0x90,0x32,0x02,0x87,0x88, + 0x8d,0x8e,0x2f,0x83,0x2f,0x90,0x32,0x02,0x89,0x8a,0x8d,0x8e,0x2f,0x83,0x2f,0x90, + 0x32,0x02,0x8b,0x8c,0x8d,0x8e,0x2f,0x83,0x2f,0x90,0x04,0x03,0x4d,0x45,0x4d,0x4f, + 0x52,0x59,0x40,0x40,0x4f,0x4b,0x2f,0x8f,0x2f,0x80,0x04,0x03,0x42,0x41,0x44,0x40, + 0x40,0x40,0x40,0x52,0x40,0x4d,0x2f,0x8f,0x2f,0x80,0x08,0x03,0x31,0x40,0x43,0x4f, + 0x49,0x4e,0x40,0x40,0x31,0x40,0x43,0x52,0x45,0x44,0x49,0x54,0x40,0x2f,0x8f,0x2f, + 0x80,0x08,0x03,0x32,0x40,0x43,0x4f,0x49,0x4e,0x53,0x40,0x31,0x40,0x43,0x52,0x45, + 0x44,0x49,0x54,0x40,0x2f,0x8f,0x2f,0x80,0x08,0x03,0x31,0x40,0x43,0x4f,0x49,0x4e, + 0x40,0x40,0x32,0x40,0x43,0x52,0x45,0x44,0x49,0x54,0x53,0x2f,0x8f,0x2f,0x80,0x08, + 0x03,0x46,0x52,0x45,0x45,0x40,0x40,0x50,0x4c,0x41,0x59,0x40,0x40,0x40,0x40,0x40, + 0x40,0x40,0x2f,0x8f,0x2f,0x80,0x0a,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40,0x40,0x4e, + 0x4f,0x4e,0x45,0x2f,0x8f,0x2f,0x80,0x0a,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40,0x2f, + 0x8f,0x2f,0x80,0x0c,0x03,0x50,0x55,0x43,0x4b,0x4d,0x41,0x4e,0x2f,0x8f,0x2f,0x80, + 0x0e,0x03,0x54,0x41,0x42,0x4c,0x45,0x40,0x40,0x2f,0x8f,0x2f,0x80,0x0e,0x03,0x55, + 0x50,0x52,0x49,0x47,0x48,0x54,0x2f,0x8f,0x2f,0x80,0x0a,0x02,0x30,0x30,0x30,0x2f, + 0x8f,0x2f,0x80,0x6b,0x01,0x26,0x41,0x4f,0x53,0x55,0x4b,0x45,0x26,0x2f,0x85,0x2f, + 0x80,0x4b,0x01,0x26,0x4d,0x55,0x43,0x4b,0x59,0x26,0x2f,0x85,0x2f,0x80,0x6e,0x01, + 0x26,0x47,0x55,0x5a,0x55,0x54,0x41,0x26,0x2f,0x87,0x2f,0x80,0x4e,0x01,0x26,0x4d, + 0x4f,0x43,0x4b,0x59,0x26,0x2f,0x87,0x2f,0x80,0xcb,0x02,0x40,0x4b,0x49,0x4d,0x41, + 0x47,0x55,0x52,0x45,0x3b,0x3b,0x2f,0x85,0x2f,0x80,0xcb,0x02,0x40,0x53,0x54,0x59, + 0x4c,0x49,0x53,0x54,0x3b,0x3b,0x3b,0x3b,0x2f,0x85,0x2f,0x80,0xce,0x02,0x40,0x4f, + 0x54,0x4f,0x42,0x4f,0x4b,0x45,0x3b,0x3b,0x3b,0x2f,0x87,0x2f,0x80,0xce,0x02,0x40, + 0x43,0x52,0x59,0x42,0x41,0x42,0x59,0x3b,0x3b,0x3b,0x3b,0x2f,0x87,0x2f,0x80,0x01, + 0x01,0x03,0x01,0x01,0x01,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x04,0x04, + 0x04,0x06,0x02,0x02,0x02,0x02,0x04,0x02,0x04,0x04,0x04,0x06,0x02,0x02,0x02,0x02, + 0x01,0x01,0x01,0x01,0x02,0x04,0x04,0x04,0x06,0x02,0x02,0x02,0x02,0x06,0x04,0x05, + 0x01,0x01,0x03,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x03,0x01,0x01,0x04,0x01,0x01, + 0x01,0x6c,0x05,0x01,0x01,0x01,0x18,0x04,0x04,0x18,0x05,0x01,0x01,0x01,0x17,0x02, + 0x03,0x04,0x16,0x04,0x03,0x01,0x01,0x01,0x76,0x01,0x01,0x01,0x01,0x03,0x01,0x01, + 0x01,0x02,0x04,0x02,0x04,0x0e,0x02,0x04,0x02,0x04,0x02,0x04,0x0b,0x01,0x01,0x01, + 0x02,0x04,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x0e,0x02,0x04,0x02,0x04,0x02, + 0x01,0x02,0x01,0x0a,0x01,0x01,0x01,0x01,0x03,0x01,0x01,0x01,0x03,0x01,0x01,0x03, + 0x04,0x00,0x02,0x40,0x01,0x3e,0x3d,0x10,0x40,0x40,0x0e,0x3d,0x3e,0x10,0xc2,0x43, + 0x01,0x3e,0x3d,0x10,0x21,0xa2,0x40,0x11,0x4f,0x3a,0x36,0x14,0x1a,0xa7,0xc8,0x13, + 0x85,0x6f,0xd2,0xfa,0x3a,0x24,0x18,0xf2,0x90,0x14,0x94,0x0f,0x98,0x15,0x98,0x15, + 0xa0,0x14,0xa0,0x14,0xa4,0x17,0xa4,0x17,0xa8,0x09,0xa8,0x09,0x9c,0x16,0x9c,0x16, + 0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16, + 0x73,0x20,0x00,0x0c,0x00,0x0a,0x1f,0x00,0x72,0x20,0xfb,0x87,0x00,0x02,0x0f,0x00, + 0x36,0x20,0x04,0x8c,0x00,0x00,0x06,0x00,0x36,0x28,0x05,0x8b,0x00,0x00,0x06,0x00, + 0x36,0x30,0x06,0x8a,0x00,0x00,0x06,0x00,0x36,0x3c,0x07,0x89,0x00,0x00,0x06,0x00, + 0x36,0x48,0x08,0x88,0x00,0x00,0x06,0x00,0x24,0x00,0x06,0x08,0x00,0x00,0x0a,0x00, + 0x40,0x70,0xfa,0x10,0x00,0x00,0x0a,0x00,0x70,0x04,0x00,0x00,0x00,0x00,0x08,0x00, + 0x42,0x18,0xfd,0x06,0x00,0x01,0x0c,0x00,0x42,0x04,0x03,0x06,0x00,0x01,0x0c,0x00, + 0x56,0x0c,0xff,0x8c,0x00,0x02,0x0f,0x00,0x05,0x00,0x02,0x20,0x00,0x01,0x0c,0x00, + 0x41,0x20,0xff,0x86,0xfe,0x1c,0x0f,0xff,0x70,0x00,0x01,0x0c,0x00,0x01,0x08,0x00, + 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x57,0x5c,0x61,0x67,0x6d,0x74,0x7b, + 0x82,0x8a,0x92,0x9a,0xa3,0xad,0xb8,0xc3,0xd4,0x3b,0xf3,0x3b,0x58,0x3c,0x95,0x3c, + 0xde,0x3c,0xdf,0x3c,0xf1,0x02,0xf2,0x03,0xf3,0x0f,0xf4,0x01,0x82,0x70,0x69,0x82, + 0x70,0x69,0x83,0x70,0x6a,0x83,0x70,0x6a,0x82,0x70,0x69,0x82,0x70,0x69,0x89,0x8b, + 0x8d,0x8e,0xff,0xf1,0x02,0xf2,0x03,0xf3,0x0f,0xf4,0x01,0x67,0x50,0x30,0x47,0x30, + 0x67,0x50,0x30,0x47,0x30,0x67,0x50,0x30,0x47,0x30,0x4b,0x10,0x4c,0x10,0x4d,0x10, + 0x4e,0x10,0x67,0x50,0x30,0x47,0x30,0x67,0x50,0x30,0x47,0x30,0x67,0x50,0x30,0x47, + 0x30,0x4b,0x10,0x4c,0x10,0x4d,0x10,0x4e,0x10,0x67,0x50,0x30,0x47,0x30,0x67,0x50, + 0x30,0x47,0x30,0x67,0x50,0x30,0x47,0x30,0x4b,0x10,0x4c,0x10,0x4d,0x10,0x4e,0x10, + 0x77,0x20,0x4e,0x10,0x4d,0x10,0x4c,0x10,0x4a,0x10,0x47,0x10,0x46,0x10,0x65,0x30, + 0x66,0x30,0x67,0x40,0x70,0xf0,0xfb,0x3b,0xf1,0x00,0xf2,0x02,0xf3,0x0f,0xf4,0x00, + 0x42,0x50,0x4e,0x50,0x49,0x50,0x46,0x50,0x4e,0x49,0x70,0x66,0x70,0x43,0x50,0x4f, + 0x50,0x4a,0x50,0x47,0x50,0x4f,0x4a,0x70,0x67,0x70,0x42,0x50,0x4e,0x50,0x49,0x50, + 0x46,0x50,0x4e,0x49,0x70,0x66,0x70,0x45,0x46,0x47,0x50,0x47,0x48,0x49,0x50,0x49, + 0x4a,0x4b,0x50,0x6e,0xff,0xf1,0x01,0xf2,0x01,0xf3,0x0f,0xf4,0x00,0x26,0x67,0x26, + 0x67,0x26,0x67,0x23,0x44,0x42,0x47,0x30,0x67,0x2a,0x8b,0x70,0x26,0x67,0x26,0x67, + 0x26,0x67,0x23,0x44,0x42,0x47,0x30,0x67,0x23,0x84,0x70,0x26,0x67,0x26,0x67,0x26, + 0x67,0x23,0x44,0x42,0x47,0x30,0x67,0x29,0x6a,0x2b,0x6c,0x30,0x2c,0x6d,0x40,0x2b, + 0x6c,0x29,0x6a,0x67,0x20,0x29,0x6a,0x40,0x26,0x87,0x70,0xf0,0x9d,0x3c,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x96,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40,0x50,0x41,0x43,0x3b,0x4d,0x41,0x4e,0x40, + 0x46,0x4f,0x52,0x40,0x40,0x40,0x30,0x30,0x30,0x40,0x5d,0x5e,0x5f,0x2f,0x8e,0x2f, + 0x80,0x3a,0x03,0x5c,0x40,0x31,0x39,0x38,0x30,0x40,0x4d,0x49,0x44,0x57,0x41,0x59, + 0x40,0x4d,0x46,0x47,0x25,0x43,0x4f,0x25,0x2f,0x83,0x2f,0x80,0x3d,0x03,0x5c,0x40, + 0x31,0x39,0x38,0x30,0x40,0x4d,0x49,0x44,0x57,0x41,0x59,0x40,0x4d,0x46,0x47,0x25, + 0x43,0x4f,0x25,0x2f,0x83,0x2f,0x80,0xc5,0x02,0x3b,0x53,0x48,0x41,0x44,0x4f,0x57, + 0x40,0x40,0x40,0x2f,0x81,0x2f,0x80,0x65,0x01,0x26,0x42,0x4c,0x49,0x4e,0x4b,0x59, + 0x26,0x40,0x2f,0x81,0x2f,0x80,0xc8,0x02,0x3b,0x53,0x50,0x45,0x45,0x44,0x59,0x40, + 0x40,0x40,0x2f,0x83,0x2f,0x80,0x68,0x01,0x26,0x50,0x49,0x4e,0x4b,0x59,0x26,0x40, + 0x40,0x2f,0x83,0x2f,0x80,0xcb,0x02,0x3b,0x42,0x41,0x53,0x48,0x46,0x55,0x4c,0x40, + 0x40,0x2f,0x85,0x2f,0x80,0x6b,0x01,0x26,0x49,0x4e,0x4b,0x59,0x26,0x40,0x40,0x40, + 0x2f,0x85,0x2f,0x80,0xce,0x02,0x3b,0x50,0x4f,0x4b,0x45,0x59,0x40,0x40,0x40,0x40, + 0x2f,0x87,0x2f,0x80,0x6e,0x01,0x26,0x43,0x4c,0x59,0x44,0x45,0x26,0x40,0x40,0x2f, + 0x87,0x2f,0x80,0xc5,0x02,0x3b,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x3b,0x2f, + 0x81,0x2f,0x80,0x65,0x01,0x26,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x26,0x2f,0x81, + 0x2f,0x80,0xc8,0x02,0x3b,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x3b,0x2f,0x83, + 0x2f,0x80,0x68,0x01,0x26,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x26,0x2f,0x83,0x2f, + 0x80,0xcb,0x02,0x3b,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x3b,0x2f,0x85,0x2f, + 0x80,0x6b,0x01,0x26,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x26,0x2f,0x85,0x2f,0x80, + 0xce,0x02,0x3b,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x3b,0x2f,0x87,0x2f,0x80, + 0x6e,0x01,0x26,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x26,0x2f,0x87,0x2f,0x80,0x0c, + 0x03,0x50,0x41,0x43,0x3b,0x4d,0x41,0x4e,0x2f,0x8f,0x2f,0x80,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x8d,0x00,0x75,0x73, +}; + +// graphics_rom (8192 bytes) +const char __at (0x4000) graphics_rom[0x2000] = {/*{w:8,h:8,np:2,count:256,brev:1}*/ + 0xcc,0xee,0x11,0x11,0x33,0xee,0xcc,0x00,0x11,0x33,0x66,0x44,0x44,0x33,0x11,0x00, + 0x11,0x11,0xff,0xff,0x11,0x11,0x00,0x00,0x00,0x00,0x77,0x77,0x22,0x00,0x00,0x00, + 0x11,0x99,0xdd,0xdd,0xff,0x77,0x33,0x00,0x33,0x77,0x55,0x44,0x44,0x66,0x22,0x00, + 0x66,0xff,0x99,0x99,0x99,0x33,0x22,0x00,0x44,0x66,0x77,0x55,0x44,0x44,0x00,0x00, + 0x44,0xff,0xff,0x44,0x44,0xcc,0xcc,0x00,0x00,0x77,0x77,0x66,0x33,0x11,0x00,0x00, + 0xee,0xff,0x11,0x11,0x11,0x33,0x22,0x00,0x00,0x55,0x55,0x55,0x55,0x77,0x77,0x00, + 0x66,0xff,0x99,0x99,0x99,0xff,0xee,0x00,0x00,0x44,0x44,0x44,0x66,0x33,0x11,0x00, + 0x00,0x00,0x88,0xff,0x77,0x00,0x00,0x00,0x66,0x77,0x55,0x44,0x44,0x66,0x66,0x00, + 0x66,0x77,0xdd,0xdd,0x99,0x99,0x66,0x00,0x00,0x33,0x44,0x44,0x55,0x77,0x33,0x00, + 0xcc,0xee,0xbb,0x99,0x99,0x99,0x00,0x00,0x33,0x77,0x44,0x44,0x44,0x77,0x33,0x00, + 0xff,0xff,0x44,0x44,0x44,0xff,0xff,0x00,0x11,0x33,0x66,0x44,0x66,0x33,0x11,0x00, + 0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00,0x33,0x77,0x44,0x44,0x44,0x77,0x77,0x00, + 0x22,0x33,0x11,0x11,0x33,0xee,0xcc,0x00,0x22,0x66,0x44,0x44,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x33,0x11,0x11,0xff,0xff,0x00,0x11,0x33,0x66,0x44,0x44,0x77,0x77,0x00, + 0x11,0x99,0x99,0x99,0xff,0xff,0x00,0x00,0x44,0x44,0x44,0x44,0x77,0x77,0x00,0x00, + 0x00,0x88,0x88,0x88,0x88,0xff,0xff,0x00,0x44,0x44,0x44,0x44,0x44,0x77,0x77,0x00, + 0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00, + 0x00,0x00,0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00, + 0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x0e,0x0c,0x03,0x07,0x0f,0x0f,0x0f,0x0f,0x07,0x03, + 0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x0e,0x0c,0x03,0x07,0x0f,0x0f,0x0f,0x0f,0x07,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x77,0xff,0xff,0xff,0xee,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33, + 0xee,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x33,0x33,0x33,0x11,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0xcc,0xee,0xff,0xff,0xff, + 0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x77,0x33,0x22,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xdd,0x00,0xee,0xdd,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xdd,0x00,0xee,0xdd,0x00,0x00, + 0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0xff,0xcc,0xcc,0xcc,0xcc,0xff,0xff, + 0xbb,0xbb,0xbb,0xbb,0xff,0xff,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0x11,0x00,0x00, + 0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0xcc,0xcc,0xff,0xff,0x00,0x00,0x77,0xff, + 0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0x77,0xff,0xcc,0xcc,0xff,0xff, + 0x33,0x33,0x33,0x33,0x33,0x33,0xff,0xee,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xff,0x77, + 0x33,0x33,0x33,0x33,0xff,0xee,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xff,0x77,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x88,0x44,0x22,0x00,0x88,0x44,0x22,0x11,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x00,0x00,0x00, + 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0x88, + 0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xff, + 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x88,0x22,0x00,0x00,0x00,0xcc,0xee,0xff,0x33,0x00,0x00,0x00, + 0xcc,0x22,0x11,0x55,0x55,0x99,0x22,0xcc,0x33,0x44,0x88,0xaa,0xaa,0x99,0x44,0x33, + 0x00,0x00,0x00,0x00,0x88,0x88,0x88,0xee,0x22,0x22,0x00,0x11,0x22,0x22,0x22,0x33, + 0xaa,0xaa,0xaa,0x22,0x00,0x00,0x00,0xee,0x22,0x22,0x22,0x11,0x00,0x22,0x22,0x33, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x33,0x77,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00, + 0x33,0x33,0x77,0x77,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, + 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00, + 0x33,0x33,0x33,0x33,0x33,0x77,0x77,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, + 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0x00,0x00,0x00, + 0x33,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xee,0xee,0xee,0x66,0x22,0x22,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0xcc,0x00,0x22,0xee,0x22,0x00,0x00,0x88,0x77,0x00,0x00,0xff,0x44,0x00,0x00, + 0x22,0xcc,0x00,0xcc,0x22,0x22,0x22,0x44,0x88,0x77,0x00,0x88,0xdd,0xaa,0x88,0x88, + 0x22,0xcc,0x00,0xcc,0x22,0x22,0x22,0x44,0x88,0x77,0x00,0x99,0xaa,0xaa,0xaa,0xee, + 0x22,0xcc,0x00,0x00,0x00,0xee,0x00,0x00,0x88,0x77,0x00,0xcc,0xbb,0x88,0x88,0xcc, + 0x00,0xcc,0x22,0x22,0xcc,0x00,0xcc,0x22,0x00,0x77,0x88,0x88,0x77,0x00,0x77,0x88, + 0xcc,0x22,0x22,0xcc,0x00,0x22,0xee,0x22,0x77,0x88,0x88,0x77,0x00,0x00,0xff,0x44, + 0x66,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x66,0x00,0x00,0x00,0x00,0x00,0x00, + 0xcc,0x22,0x22,0xcc,0x00,0x22,0x22,0xaa,0x77,0x88,0x88,0x77,0x00,0x66,0x99,0x88, + 0x22,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00, + 0xcc,0x22,0x22,0xcc,0x00,0xcc,0x22,0x22,0x77,0x88,0x88,0x77,0x00,0x88,0xdd,0xaa, + 0x22,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0xee,0x00,0x00,0x00,0x00,0x00,0x00, + 0xcc,0x22,0x22,0xcc,0x00,0xcc,0x22,0x22,0x77,0x88,0x88,0x77,0x00,0x99,0xaa,0xaa, + 0x22,0xcc,0x00,0xcc,0x22,0x22,0xcc,0x00,0x88,0x77,0x00,0x77,0x88,0x88,0x77,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x88, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xc0,0x20,0x90,0x80,0x00,0x00,0x30,0x30,0x10,0x10,0x00,0x00, + 0x41,0x21,0x12,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x0c,0x0c,0x8c,0x0c,0x00,0x00,0x00,0x07,0x0f,0x0f,0xc3,0x1f, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0f,0x2f,0x4f,0x0e,0x00,0x00, + 0x00,0x00,0x00,0x07,0x4f,0x0f,0xa7,0x87,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10, + 0xd3,0x87,0x97,0x0f,0x2f,0x07,0x00,0x00,0x33,0x10,0x10,0x10,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x08,0x0e,0x8e,0x1f,0x0f, + 0x0c,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x4f,0x1f,0x0f,0x4f,0x0e,0x08,0x00,0x00, + 0x00,0x00,0x01,0x03,0x87,0x87,0x87,0x47,0x00,0x00,0x00,0x10,0x10,0x30,0x30,0x10, + 0xef,0x47,0x07,0x07,0x03,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0c,0x0c,0x0c,0x08,0x08,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x00, + 0x00,0x00,0x00,0x01,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02, + 0x0f,0x0b,0x0c,0x0f,0x01,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0c,0x68,0x68,0x68,0x6e,0x6e,0x00,0x00,0x03,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x68,0x68,0x68,0x68,0x68,0x0c,0x00,0x00,0x0f,0x0f,0x07,0x0c,0x0f,0x03,0x00,0x00, + 0x00,0x00,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x20, + 0x87,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x10,0x00,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x0c,0x0f,0xcf,0x2f,0x0f,0x0f, + 0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x00,0x00, + 0x00,0x00,0x00,0x30,0x52,0x61,0xf1,0xbc,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03, + 0xd2,0x63,0x52,0x30,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x80,0x48,0x84,0xc2,0xe0,0x00,0x00,0xe0,0xb4,0x7c,0xe1,0x5b,0xa5, + 0x68,0x84,0xc0,0x80,0x00,0x00,0x00,0x00,0xf5,0xe1,0x5a,0xbe,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0f,0x33,0x31,0x71,0xf3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf0,0xf3,0x71,0x31,0x33,0x0f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x8e,0xcf,0x88, + 0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x88,0xcf,0x8e,0x0c,0x08,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0xf1,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20, + 0xe0,0xf1,0xe0,0xe0,0x00,0x00,0x00,0x00,0x20,0x20,0x10,0x10,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xdd, + 0x22,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xef,0x67,0x77,0x33,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x11,0x23,0x67,0x77,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x79,0x69,0x0f,0x1f,0xff,0xff,0x33,0x00, + 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x33,0x79,0x69,0x0f,0x1f,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0x88,0x00,0x88,0xcc,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x88,0x00,0x88,0xcc,0xcc,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0x00,0x33,0x74,0x74,0xf8,0xf9,0xf9,0xf9, + 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xff,0xf9,0xf9,0xf9,0xf8,0x74,0x74,0x33,0x00, + 0xff,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xff, + 0x00,0xcc,0xe2,0xe2,0xf1,0xf9,0xf9,0xf9,0xff,0xf0,0xf0,0xfe,0x11,0x00,0x00,0x00, + 0xf9,0xf9,0xf9,0xf1,0xe2,0xe2,0xcc,0x00,0x00,0x00,0x00,0x11,0xfe,0xf0,0xf0,0xff, + 0xff,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xf8,0xff,0xf0,0xf0,0xfe,0x11,0x00,0x00,0x00, + 0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x11,0xfe,0xf0,0xf0,0xff, + 0xff,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1, + 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xff,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, + 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xe2,0xe2,0xf1,0xf1,0xf1,0xf1, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xf1,0xe2,0xe2,0xcc,0x00, + 0x00,0x33,0x74,0x74,0xf8,0xf8,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf8,0xf8,0xf8,0xf8,0x74,0x74,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1, + 0x00,0x00,0x00,0x00,0x33,0x74,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf8,0xf8,0x74,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf0, + 0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xe2,0xf1,0xf1, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xe2,0xcc,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xff,0xf8,0xf8,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf9,0xf8,0xf8,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf1,0xf1,0xf9, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0xf1,0xf1,0xff,0x00,0x00,0x00,0x00, + 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0, + 0xf0,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1, + 0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00,0x11,0xfe,0xf0,0xf0,0xf0, + 0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xfe,0x11,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x74,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf8,0xf8,0x74,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xe2,0xf1,0xf1, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xe2,0xcc,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xf0,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8, + 0xf0,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x08,0x0c,0x0c,0x8c,0x0c,0x00,0x00,0x30,0x30,0x10,0x10,0x00,0x00, + 0x00,0x00,0x00,0x00,0xc0,0x20,0x90,0x80,0x00,0x00,0x00,0x07,0x0f,0x0f,0xc3,0x1f, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x41,0x21,0x12,0x03,0x03,0x01,0x00,0x00,0x07,0x08,0x0f,0x2f,0x4f,0x0e,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10, + 0x00,0x00,0x00,0x07,0x4f,0x0f,0xa7,0x87,0x00,0x00,0x00,0x08,0x0e,0x8e,0x1f,0x0f, + 0x0c,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x33,0x10,0x10,0x10,0x00,0x00,0x00,0x00, + 0xd3,0x87,0x97,0x0f,0x2f,0x07,0x00,0x00,0x4f,0x1f,0x0f,0x4f,0x0e,0x08,0x00,0x00, + 0x00,0x00,0x00,0x08,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x00,0x10,0x10,0x30,0x30,0x10, + 0x00,0x00,0x01,0x03,0x87,0x87,0x87,0x47,0x00,0x00,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0c,0x0c,0x0c,0x08,0x08,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xef,0x47,0x07,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x00, + 0x00,0x00,0x0c,0x68,0x68,0x68,0x6e,0x6e,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02, + 0x00,0x00,0x00,0x01,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x03,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x68,0x68,0x68,0x68,0x68,0x0c,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0b,0x0c,0x0f,0x01,0x00,0x00,0x00,0x0f,0x0f,0x07,0x0c,0x0f,0x03,0x00,0x00, + 0x00,0x00,0x00,0x00,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x20, + 0x00,0x00,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x0c,0x0f,0xcf,0x2f,0x0f,0x0f, + 0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x01,0x01,0x00,0x00,0x00, + 0x87,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x00,0x00, + 0x00,0x00,0x00,0x80,0x48,0x84,0xc2,0xe0,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03, + 0x00,0x00,0x00,0x30,0x52,0x61,0xf1,0xbc,0x00,0x00,0xe0,0xb4,0x7c,0xe1,0x5b,0xa5, + 0x68,0x84,0xc0,0x80,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00, + 0xd2,0x63,0x52,0x30,0x00,0x00,0x00,0x00,0xf5,0xe1,0x5a,0xbe,0xe0,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0f,0x33,0x31,0x71,0xf3,0x00,0x00,0x00,0x08,0x0c,0x8e,0xcf,0x88, + 0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf0,0xf3,0x71,0x31,0x33,0x0f,0x00,0x00,0xff,0x88,0xcf,0x8e,0x0c,0x08,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xcc,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20, + 0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0xf1,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xdd, + 0x22,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x10,0x10,0x00,0x00,0x00,0x00, + 0xe0,0xf1,0xe0,0xe0,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xee,0xcc,0x88,0x8c,0x4e,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0x7f,0xbf,0x7f,0xaf,0x5f,0x7f,0xff, + 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, + 0x00,0xcc,0xee,0xee,0x8c,0x08,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0x7f,0xbf,0x7f,0xaf,0x5f,0x7f,0xff, + 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, + 0x00,0x00,0x00,0xee,0xee,0xee,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x60,0x69,0x0f,0x71,0x69,0x0f,0x17,0x00,0x00,0x00,0x88,0xee,0xff,0xff,0xff, + 0xcc,0xcc,0xcc,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x77,0x33,0x00,0x00,0x00, + 0x00,0xee,0xee,0xee,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x60,0x69,0x0f,0x71,0x69,0x0f,0x17,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, + 0xcc,0xcc,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x44,0xee,0xee,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x00, + 0xee,0x66,0x66,0xee,0xee,0xee,0x66,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x44,0xee,0xee,0xee,0xee,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x66,0x66,0x66,0x66,0xee,0xee,0x66,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x07,0x07,0x03, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x07,0x0f,0x0f,0x0f,0x0f, + 0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x0e, + 0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0c,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x0f,0x0f,0x0f,0x0e,0x0c,0x08,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x0f, + 0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x07,0x07,0x03, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, + 0x00,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x00,0x00,0x08,0x08,0x0c,0x0c,0x0e,0x0e, + 0x00,0x00,0x00,0x08,0x08,0x08,0x0c,0x0c,0x03,0x07,0x07,0x07,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0c,0x07,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x0f,0x0f,0x0f,0x0e,0x0c,0x08,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x00,0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f, + 0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x07,0x07,0x03, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x00, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, + 0x00,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x00,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x07,0x07,0x07,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0c,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x0f,0x0f,0x0f,0x0e,0x0c,0x08,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x00,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f, + 0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x00,0xe0,0xc0,0x80,0xc0,0xe0,0xe0,0x80,0x00,0x00,0x00,0x10,0x30,0x30,0x70,0x70, + 0x00,0x10,0xf0,0xf0,0xf0,0xf3,0xf3,0xf0,0x00,0xf0,0xf1,0xf2,0xf2,0xf1,0xf1,0xf2, + 0x80,0xe0,0xe0,0xc0,0x80,0xc0,0xe0,0x00,0x70,0x70,0x30,0x30,0x10,0x00,0x00,0x00, + 0xf0,0xf3,0xf3,0xf0,0xf0,0xf0,0x10,0x00,0xf2,0xf1,0xf1,0xf2,0xf2,0xf1,0xf0,0x00, + 0x00,0xc0,0xe0,0xe0,0xc0,0x80,0xc0,0xe0,0x00,0x00,0x00,0x10,0x30,0x30,0x70,0x70, + 0x00,0x10,0xf0,0xf0,0xf0,0xf3,0xf3,0xf0,0x00,0xf0,0xf1,0xf2,0xf2,0xf1,0xf1,0xf2, + 0xe0,0xc0,0x80,0xc0,0xe0,0xe0,0xc0,0x00,0x70,0x70,0x30,0x30,0x10,0x00,0x00,0x00, + 0xf0,0xf3,0xf3,0xf0,0xf0,0xf0,0x10,0x00,0xf2,0xf1,0xf1,0xf2,0xf2,0xf1,0xf0,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x00,0xff,0xff,0x7f,0x7f,0xff,0xff,0xff, + 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x11,0x00,0xff,0x7f,0x7f,0xff,0xff,0xff,0xff,0x00, + 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x00,0xff,0xff,0x7f,0x7f,0xff,0xff,0xff, + 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x11,0x00,0xff,0x7f,0x7f,0xff,0xff,0xff,0xff,0x00, + 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x00,0xff,0xff,0x7f,0xf3,0xf3,0x7f,0xff, + 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x11,0x00,0xff,0x7f,0xf3,0xf3,0x7f,0xff,0xff,0x00, + 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x00,0xff,0xff,0x7f,0xf3,0xf3,0x7f,0xff, + 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x11,0x00,0xff,0x7f,0xf3,0xf3,0x7f,0xff,0xff,0x00, + 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0xff,0xff,0xff,0xff,0x7f,0x7f,0xff, + 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, + 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0xff,0xff,0xff,0xff,0x7f,0x7f,0xff, + 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, + 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x01,0x30,0x30,0x67,0x77, + 0x00,0x11,0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x67,0x30,0x30,0x01,0x00,0x00,0x00, + 0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, + 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x01,0x30,0x30,0x67,0x77, + 0x00,0x11,0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x67,0x30,0x30,0x01,0x00,0x00,0x00, + 0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x07,0x00,0x06,0x09,0x08,0x08,0x06,0x02,0x0c,0x00,0x02,0x02,0x0a,0x06,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x07,0x00,0x00,0x0f,0x04,0x02,0x01,0x02,0x0c,0x00,0x08,0x0e,0x08,0x08,0x08, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x07,0x00,0x06,0x09,0x09,0x09,0x06,0x02,0x0c,0x00,0x0c,0x02,0x02,0x02,0x0c, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x08,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02,0x02, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x07,0x00,0x09,0x09,0x09,0x07,0x00,0x0f,0x0c,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0e, + 0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x77, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11, + 0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, + 0x88,0xcc,0xee,0xff,0xff,0xff,0x77,0x00,0x33,0x77,0xff,0xff,0xff,0xff,0xcc,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x00,0x77,0xff,0xff,0xff,0xee,0xcc,0x00,0x00,0xcc,0xcc,0x88,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, + 0x88,0xcc,0xee,0xff,0xff,0xff,0x77,0x00,0x00,0x00,0x00,0x00,0x88,0xcc,0xcc,0x00, + 0x00,0x00,0x00,0x00,0x88,0x88,0xcc,0xcc,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x00,0x00,0x88,0x88,0xcc,0xcc,0xcc,0x00,0x00,0x00,0x33,0x33,0x77,0x77,0x77, + 0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, + 0xee,0xee,0xee,0xff,0xff,0xff,0x77,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0x00, + 0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x00,0x77,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xcc,0xff,0xff,0xff,0xee,0x00, + 0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, + 0xcc,0xff,0xff,0xff,0xff,0xff,0x77,0x00,0x00,0x00,0xee,0xff,0xff,0xff,0xcc,0x00, + 0x00,0x00,0x00,0x00,0x88,0x88,0xcc,0xcc,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, + 0x00,0x00,0x77,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xcc,0xff,0xff,0xff,0xff,0xff, + 0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, + 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0x00, + 0x01,0x02,0x04,0x0c,0x08,0x84,0x84,0x08,0x01,0x00,0x00,0x00,0x09,0x05,0x03,0x00, + 0x00,0x08,0x07,0x78,0xfa,0xf5,0xea,0x7b,0x00,0x00,0x00,0x0b,0xb5,0xea,0x77,0x32, + 0x08,0x84,0x84,0x08,0x0c,0x04,0x02,0x01,0x00,0x01,0x01,0x01,0x03,0x04,0x08,0x00, + 0x26,0x5d,0xb2,0x7c,0x07,0x00,0x00,0x00,0x72,0xe6,0xcc,0xfc,0xe3,0x0e,0x00,0x00, + 0x00,0x60,0x60,0xe0,0xe0,0xe8,0xcc,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x67,0x77, + 0x00,0x11,0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x00,0x00,0xf0,0xf8,0xfd,0xff,0xff,0xff, + 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x67,0x00,0x00,0x01,0x00,0x00,0x00, + 0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, + 0x00,0x60,0x60,0xe0,0xe0,0xe8,0xcc,0x88,0x00,0x00,0x00,0x11,0x23,0x23,0x77,0x77, + 0x00,0x11,0xff,0x1d,0x0c,0x0f,0x1f,0xff,0x00,0x00,0xf0,0xf8,0xfd,0xff,0xff,0xff, + 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x23,0x23,0x11,0x00,0x00,0x00, + 0xff,0x1d,0x0c,0x0f,0x1f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x00,0x00,0x00,0x00, + 0x00,0x00,0xff,0xff,0xff,0x77,0x33,0x11,0x00,0x00,0x00,0xcc,0xee,0xee,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x00, + 0x00,0x11,0x33,0x77,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xee,0xee,0xcc,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x77,0xff,0x77,0x77,0x33,0x11,0x11,0x00,0x00,0xcc,0xee,0xee,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x11,0x11,0x33,0x77,0x77,0xff,0x77,0xee,0xff,0xff,0xff,0xee,0xee,0xcc,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x33,0x33,0x33,0x11,0x11,0x11,0x00,0x00,0x88,0xcc,0xee,0xee,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x11,0x11,0x11,0x33,0x33,0x33,0xee,0xff,0xff,0xff,0xee,0xee,0xcc,0x88, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0xcc,0xee,0xee,0xff,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0xee,0xff,0xff,0xff,0xff,0xee,0xee,0xcc, + 0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x77,0x77,0x77,0xff,0xff,0xff, + 0x00,0x88,0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x66, + 0x00,0x00,0x88,0x88,0xcc,0xcc,0xcc,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x77,0x77,0xff, + 0x00,0x88,0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0x77,0x33,0x33,0x33,0x11, + 0x00,0x00,0xcc,0xee,0xee,0xee,0xee,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x77, + 0x88,0xcc,0xee,0xee,0xee,0xee,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x33,0x33,0x11,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x44,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x77, + 0xcc,0xee,0xee,0xee,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33, + 0xcc,0xee,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x22,0x44,0x11,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x11,0x00,0x00,0x00,0x11,0x99,0x44,0x00,0x00, + 0x00,0x22,0x11,0x88,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x11,0x22,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x22,0x22,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +// palette_rom (32 bytes) +const char __at (0x6000) palette_rom[0x20] = {/*{pal:444}*/ + 0x00,0x07,0x66,0xff,0x00,0x0f,0xcc,0xff,0x00,0x3f,0x00,0xff,0x3f,0x3f,0x00,0xff, + 0x00,0x3f,0x3f,0xff,0x3f,0x00,0x3f,0xff,0x3f,0x3f,0x3f,0xff,0x3f,0x3f,0x0f,0xff, +}; diff --git a/presets/pacman/sprites.c b/presets/pacman/sprites.c new file mode 100644 index 00000000..08732134 --- /dev/null +++ b/presets/pacman/sprites.c @@ -0,0 +1,217 @@ +#include + +typedef unsigned char byte; +typedef unsigned short word; + +// Hardware memory addresses for Pacman +byte __at (0x4000) vram[32][36]; // Video RAM +byte __at (0x4400) cram[32][36]; // Color RAM + +struct { + byte xpos; + byte ypos; + byte color; + byte shape; +} __at (0x4FF0) sprites[8]; + +// Hardware control registers +byte __at (0x5000) interrupt_enable; +byte __at (0x5001) sound_enable; + +// Input registers +volatile byte __at (0x5000) input0; +volatile byte __at (0x5040) input1; + +// Input controls (active low) +#define UP1 !(input0 & 0x1) +#define LEFT1 !(input0 & 0x2) +#define RIGHT1 !(input0 & 0x4) +#define DOWN1 !(input0 & 0x8) +#define START1 !(input1 & 0x20) + +// Video frame counter +volatile byte video_framecount; + +// NMI interrupt handler +void rst_66() __interrupt { + video_framecount++; +} + +// Entry point +void start() { +__asm + LD SP,#0x4800 + EI + LD BC, #l__INITIALIZER+1 + LD A, B + LD DE, #s__INITIALIZED + LD HL, #s__INITIALIZER + LDIR +__endasm; + main(); +} + +void wait_for_frame() { + byte initial_framecount = video_framecount; + *(volatile byte*)0x50C0 = 0; // Reset watchdog + while (video_framecount == initial_framecount); +} + +void clear_screen() { + byte x, y; + for (x = 0; x < 32; x++) { + for (y = 0; y < 36; y++) { + vram[x][y] = 0; + cram[x][y] = 0; + } + } +} + +void draw_text(byte x, byte y, const char* text, byte color) { + byte i; + for (i = 0; text[i]; i++) { + vram[x][y + i] = text[i] - 0x20 + 0x10; // ASCII offset + cram[x][y + i] = color; + } +} + +void init_sprites() { + byte i; + + // Initialize all 8 sprites + for (i = 0; i < 8; i++) { + sprites[i].xpos = 60 + i * 20; // Spread across screen + sprites[i].ypos = 100 + i * 10; // Stagger vertically + sprites[i].shape = i + 1; // Different shapes + sprites[i].color = i + 1; // Different colors + } +} + +void move_sprites() { + static byte counter = 0; + byte i; + + counter++; + + // Move sprites in different patterns + for (i = 0; i < 8; i++) { + switch (i) { + case 0: // Circular motion + sprites[i].xpos = 112 + (signed char)(50 * cos_table[counter & 63]); + sprites[i].ypos = 144 + (signed char)(30 * sin_table[counter & 63]); + break; + + case 1: // Horizontal bounce + sprites[i].xpos = 40 + ((counter * 2) & 127); + if (sprites[i].xpos > 184) sprites[i].xpos = 224 - sprites[i].xpos; + break; + + case 2: // Vertical bounce + sprites[i].ypos = 40 + ((counter * 3) & 127); + if (sprites[i].ypos > 200) sprites[i].ypos = 288 - sprites[i].ypos; + break; + + case 3: // Diagonal movement + sprites[i].xpos = 20 + ((counter * 2) & 127); + sprites[i].ypos = 20 + ((counter * 2) & 127); + break; + + case 4: // Controlled by player + if (UP1) sprites[i].ypos--; + if (DOWN1) sprites[i].ypos++; + if (LEFT1) sprites[i].xpos--; + if (RIGHT1) sprites[i].xpos++; + break; + + default: // Random jitter + sprites[i].xpos += (counter & 1) ? 1 : -1; + sprites[i].ypos += (counter & 2) ? 1 : -1; + break; + } + + // Keep sprites on screen + if (sprites[i].xpos > 240) sprites[i].xpos = 240; + if (sprites[i].ypos > 280) sprites[i].ypos = 280; + } +} + +void cycle_colors() { + static byte color_counter = 0; + byte i; + + color_counter++; + + // Cycle through colors every 30 frames + if ((color_counter & 31) == 0) { + for (i = 0; i < 8; i++) { + sprites[i].color = (sprites[i].color & 0x0F) + 1; + if (sprites[i].color > 15) sprites[i].color = 1; + } + } +} + +// Simple sin/cos tables for smooth movement +const signed char cos_table[64] = { + 63, 62, 60, 57, 54, 50, 45, 40, 34, 28, 22, 15, 8, 1, -6, -13, + -20, -27, -33, -39, -44, -49, -53, -56, -59, -61, -62, -63, -62, -61, -59, -56, + -53, -49, -44, -39, -33, -27, -20, -13, -6, 1, 8, 15, 22, 28, 34, 40, + 45, 50, 54, 57, 60, 62, 63, 62, 60, 57, 54, 50, 45, 40, 34, 28 +}; + +const signed char sin_table[64] = { + 0, 7, 14, 21, 27, 33, 39, 44, 49, 53, 56, 59, 61, 62, 63, 62, + 61, 59, 56, 53, 49, 44, 39, 33, 27, 21, 14, 7, 0, -7, -14, -21, + -27, -33, -39, -44, -49, -53, -56, -59, -61, -62, -63, -62, -61, -59, -56, -53, + -49, -44, -39, -33, -27, -21, -14, -7, 0, 7, 14, 21, 27, 33, 39, 44 +}; + +void show_sprite_info() { + draw_text(1, 2, "PACMAN SPRITE TEST", 0x0F); + draw_text(3, 2, "8 HARDWARE SPRITES", 0x09); + draw_text(5, 2, "USE JOYSTICK FOR #4", 0x0B); + draw_text(7, 2, "PRESS START TO EXIT", 0x0C); + + // Show sprite numbers + for (byte i = 0; i < 8; i++) { + vram[10 + i * 2][2] = '0' + i - 0x20 + 0x10; + cram[10 + i * 2][2] = i + 1; + } +} + +void main() { + // Initialize hardware + interrupt_enable = 1; + sound_enable = 1; + + // Clear screen and show info + clear_screen(); + show_sprite_info(); + + // Initialize sprites + init_sprites(); + + // Main animation loop + while (1) { + wait_for_frame(); + + move_sprites(); + cycle_colors(); + + // Exit on start button + if (START1) break; + } + + // Hide all sprites + for (byte i = 0; i < 8; i++) { + sprites[i].xpos = 0; + sprites[i].ypos = 0; + } + + clear_screen(); + draw_text(14, 8, "SPRITE TEST COMPLETE", 0x0F); + + while(1) { + wait_for_frame(); + if (START1) break; + } +} \ No newline at end of file diff --git a/src/machine/pacman.ts b/src/machine/pacman.ts new file mode 100644 index 00000000..61bba14c --- /dev/null +++ b/src/machine/pacman.ts @@ -0,0 +1,542 @@ +import { Z80, Z80State } from "../common/cpu/ZilogZ80"; +import { BasicScanlineMachine } from "../common/devices"; +import { KeyFlags, newAddressDecoder, padBytes, noise, Keys, makeKeycodeMap, newKeyboardHandler, EmuHalt } from "../common/emu"; +import { TssChannelAdapter, MasterAudio } from "../common/audio"; +import { hex } from "../common/util"; + +const PACMAN_KEYCODE_MAP = makeKeycodeMap([ + [Keys.UP, 0, 0x1], // UP + [Keys.LEFT, 0, 0x2], // LEFT + [Keys.RIGHT, 0, 0x4], // RIGHT + [Keys.DOWN, 0, 0x8], // DOWN + [Keys.VK_5, 0, 0x20], // COIN1 + [Keys.VK_6, 0, 0x40], // COIN2 + [Keys.START, 1, 0x20], // START1 + [Keys.VK_2, 1, 0x40], // START2 + // Removed SERVICE mapping to prevent accidental service mode activation + // [Keys.SELECT, 1, 0x10], // SERVICE +]); + +// Pacman palette colors (4-bit RGB conversion) +const bitcolors = [ + 0x00000000, // 0 + 0x00000f00, // 1 - red + 0x000f0000, // 2 - green + 0x000f0f00, // 3 - yellow + 0x0f000000, // 4 - blue + 0x0f000f00, // 5 - magenta + 0x0f0f0000, // 6 - cyan + 0x0f0f0f00, // 7 - white +]; + +// Pacman video rendering - proper tile-based version +const PacmanVideo = function (machine, charROM: Uint8Array, vram: Uint8Array, cram: Uint8Array, oram: Uint8Array, palette: Uint32Array, options) { + var self = this; + this.machine = machine; + this.charROM = charROM; + this.frameCounter = 0; + + this.advanceFrame = function () { + this.frameCounter = (this.frameCounter + 1) & 0xff; + } + + this.drawScanline = function (pixels, sl) { + var pixofs = sl * 224; + + // Pacman screen is rotated 90 degrees, 28x36 characters visible + // Clear scanline with black + for (var i = 0; i < 224; i++) { + pixels[pixofs + i] = 0xff000000; + } + + // Draw character tiles + // Pacman screen: 28 columns (visible), each 8 pixels wide = 224 pixels + // Due to rotation, we need to read vertically from VRAM + var sy = sl; + var ty = Math.floor(sy / 8); // tile Y (0-35) + var py = sy & 7; // pixel Y within tile (0-7) + + if (ty < 36) { // valid tile row + for (var tx = 0; tx < 28; tx++) { // 28 visible columns + var sx = tx * 8; + + // Calculate VRAM address - Pacman has rotated layout + // First 2 rows and last 2 rows are at different positions + var vramAddr; + if (ty < 2) { + // Top 2 rows (score area) - use columns 0-31 + vramAddr = ty * 32 + (tx + 2); + } else if (ty >= 34) { + // Bottom 2 rows (lives/fruit area) - use columns 0-31 + vramAddr = (ty - 32) * 32 + (tx + 2); + } else { + // Main play area - rotated columns, right to left + // Columns are stored as: rightmost column first + var col = 29 - tx; // reverse column order + var row = ty - 2; // adjust for top 2 rows + vramAddr = (col * 32) + row + 64; // offset past first 2 rows + } + + if (vramAddr < 0x400) { + var tileCode = vram[vramAddr]; + var tileColor = cram[vramAddr]; + + // Get tile graphics from character ROM + // MAME format: Each character is 16 bytes + // Bytes 0-7: pixels 0-3 of rows 0-7 (left half) - CORRECTED + // Bytes 8-15: pixels 4-7 of rows 0-7 (right half) - CORRECTED + // Within each byte: bits 0-3 = bitplane 0, bits 4-7 = bitplane 1 + var charBase = tileCode * 16; + + // Draw 8 pixels of the character + var color0 = (tileColor & 0x3f) << 2; // Base color from color RAM + for (var px = 0; px < 8; px++) { + var colorIndex; + + // Try swapping px and py for 90-degree rotation, with column flip for upside-down fix + var readRow = px; // Use px as the row to read from + var readCol = 7 - py; // Use (7-py) as the column to read from (flipped) + + if (readCol < 4) { + // Read from bytes 0-7 (left half) + var byteAddr = charBase + readRow; // bytes 0-7 + var data = this.charROM[byteAddr]; + var bitpos = readCol; // Column position + var bit0 = (data >> bitpos) & 1; // bitplane 0 + var bit1 = (data >> (bitpos + 4)) & 1; // bitplane 1 + colorIndex = color0 + bit0 + (bit1 << 1); + } else { + // Read from bytes 8-15 (right half) + var byteAddr = charBase + 8 + readRow; // bytes 8-15 + var data = this.charROM[byteAddr]; + var bitpos = readCol - 4; // Column position + var bit0 = (data >> bitpos) & 1; // bitplane 0 + var bit1 = (data >> (bitpos + 4)) & 1; // bitplane 1 + colorIndex = color0 + bit0 + (bit1 << 1); + } + + // Use black for color 0, otherwise use palette color + var color = (colorIndex & 3) ? palette[colorIndex & 31] : 0xff000000; + // Apply horizontal mirroring by drawing pixels in reverse order + var mirroredPx = 7 - px; // Horizontal flip: 0->7, 1->6, 2->5, etc. + pixels[pixofs + sx + mirroredPx] = color; + } + } + } + } + } +}; + +const XTAL = 18432000.0; +const scanlinesPerFrame = 264; +const cpuFrequency = XTAL / 6; // 3.072 MHz +const hsyncFrequency = XTAL / 3 / 192 / 2; // 16 kHz +const vsyncFrequency = hsyncFrequency / 132 / 2; // 60.606060 Hz +const cpuCyclesPerLine = cpuFrequency / hsyncFrequency; +const INITIAL_WATCHDOG = 8; + +const audioSampleRate = 60 * scanlinesPerFrame; + +export class PacmanMachine extends BasicScanlineMachine { + + cpuFrequency = cpuFrequency; + canvasWidth = 224; + numTotalScanlines = 288; + numVisibleScanlines = 224; // Only 224 lines are visible in Pacman + defaultROMSize = 0x6200; // Program ROM (16KB) + Graphics ROM (8KB) + Palette space + sampleRate = audioSampleRate; + cpuCyclesPerLine = cpuCyclesPerLine | 0; + rotate = 0; // Try no rotation to fix text orientation + + palBase = 0x6000; // Palette location in ROM + gfxBase = 0x4000; // Graphics ROM location in ROM + + cpu: Z80 = new Z80(); + ram = new Uint8Array(0x800); + vram = new Uint8Array(0x400); // Video RAM + cram = new Uint8Array(0x400); // Color RAM + oram = new Uint8Array(0x100); // Object/Sprite RAM + charROM: Uint8Array; // Character graphics ROM + palette: Uint32Array; + gfx; // PacmanVideo + audioadapter; + watchdog_counter: number = 0; + interruptEnabled: number = 0; + soundEnabled: number = 0; + flipScreen: number = 0; + defaultInputs: number[] = [0xff, 0xff]; // Pacman inputs are active low + keyMap = PACMAN_KEYCODE_MAP; + handler; + + // Debug tracking + lastPC: number = 0; + pcStuckCounter: number = 0; + frameCounter: number = 0; + debugLogNextInstructions: number = 0; // Counter for logging next N instructions + + // LS259 mainlatch outputs (8-bit addressable latch) + mainlatch: number = 0; + + // Cycle-based interrupt timing like pac-c emulator + cpuCycleCounter: number = 0; + + // IM 0 interrupt vector (set via port 0) + interruptVector: number = 0xFA; // Default to 0xFA as ROM sets this via port 0 + + constructor() { + super(); + this.cpu = new Z80(); + this.cpu.connectIOBus(this.newIOBus()); + this.cpu.connectMemoryBus(this.newMemoryBus()); + + // Initialize ROM and character ROM arrays + this.rom = new Uint8Array(this.defaultROMSize); + this.charROM = new Uint8Array(0x2000); // 8KB character ROM (correct Pacman size) + + // Initialize palette + this.palette = new Uint32Array(32); + + this.gfx = new PacmanVideo(this, this.charROM, this.vram, this.cram, this.oram, this.palette, {}); + + // Initialize inputs and keyboard handler + this.inputs.set(this.defaultInputs); + this.handler = newKeyboardHandler(this.inputs, this.keyMap); + + console.log("Pacman machine initialized with keymap:", this.keyMap); + console.log("Initial inputs:", Array.from(this.inputs).map(x => x.toString(16))); + + // Initialize cycle counter + this.cpuCycleCounter = 0; + } + + newMemoryBus() { + return { + read: this.readByteHook, + write: this.writeByteHook + }; + } + + readByteHook = (a) => { + var val = 0; + if (a < 0x4000) { + val = this.rom ? this.rom[a] : 0; + } else if (a >= 0x4000 && a < 0x4400) { + val = this.vram[a - 0x4000]; + } else if (a >= 0x4400 && a < 0x4800) { + val = this.cram[a - 0x4400]; + } else if (a >= 0x4800 && a < 0x4FF0) { + val = this.ram[a - 0x4800]; + } else if (a >= 0x4FF0 && a < 0x5000) { + val = this.oram[a - 0x4FF0]; + } else if (a >= 0x5000 && a < 0x5100) { + // Handle mirrored input reads based on address + if ((a & 0xc0) == 0x00) { // 0x5000-0x503F - Input Port 0 (IN0) + val = this.defaultInputs[0] ^ this.inputs[0]; // Active low inputs + val |= 0x10; // Force Rack Test OFF (bit 0x10 = 1) to prevent service mode + } else if ((a & 0xc0) == 0x40) { // 0x5040-0x507F - Input Port 1 (IN1) + val = this.defaultInputs[1] ^ this.inputs[1]; // Active low inputs + val |= 0x80; // Force Cabinet to UPRIGHT (bit 0x80 = 1) instead of TABLE + val |= 0x10; // Force board_test OFF (bit 0x10 = 1) to prevent service mode + } else if ((a & 0xc0) == 0x80) { // 0x5080-0x50BF - DIP switches + // DIP switch settings (correct MAME defaults) + // Bits 0-1: Coinage (01 = 1 coin/1 credit), Bits 2-3: Lives (00 = 3 lives) + // Bits 4-5: Bonus (00 = 10K bonus), Bits 6-7: Difficulty & Ghost Names + val = 0x51; // MAME setting "1010001": 1 coin/1 credit, 3 lives, 10K bonus + } else { + val = 0xFF; // Unmapped reads return 0xFF + } + } else if (a >= 0x8000) { + // ROM mirror at 0x8000-0xBFFF (for proper MAME compatibility) + val = this.rom ? this.rom[a & 0x3FFF] : 0; + } + + return val; + } + + writeByteHook = (a, val) => { + if (a < 0x4000) { + // ROM - cannot write, ignore + } else if (a >= 0x4000 && a < 0x4400) { + this.vram[a - 0x4000] = val; + } else if (a >= 0x4400 && a < 0x4800) { + this.cram[a - 0x4400] = val; + } else if (a >= 0x4800 && a < 0x4FF0) { + this.ram[a - 0x4800] = val; + } else if (a >= 0x4FF0 && a < 0x5000) { + this.oram[a - 0x4FF0] = val; + } else if (a >= 0x5000 && a < 0x5100) { + // I/O writes - handle LS259 mainlatch and other hardware + if ((a & 0x00F8) == 0x0000) { // 0x5000-0x5007 - LS259 mainlatch + var latch_bit = a & 7; + var old_mainlatch = this.mainlatch; + + // Update the specific bit in mainlatch + if (val & 1) { + this.mainlatch |= (1 << latch_bit); + } else { + this.mainlatch &= ~(1 << latch_bit); + } + + // Handle specific latch functions based on MAME + switch (latch_bit) { + case 0: // Interrupt enable + var old_int = this.interruptEnabled; + this.interruptEnabled = (this.mainlatch >> 0) & 1; + if (old_int !== this.interruptEnabled) { + console.log(`*** INTERRUPT ${this.interruptEnabled ? 'ENABLED' : 'DISABLED'} at PC=${this.cpu.getPC().toString(16)} ***`); + } + break; + case 1: // Sound enable + this.soundEnabled = (this.mainlatch >> 1) & 1; + break; + case 3: // Flip screen + this.flipScreen = (this.mainlatch >> 3) & 1; + break; + } + } else if ((a & 0x00E0) == 0x0040) { // 0x5040-0x505F - Sound registers + // TODO: Implement Namco WSG sound chip + } else if ((a & 0x00F0) == 0x0060) { // 0x5060-0x506F - Sprite coordinates + this.oram[0x10 + (a & 0xF)] = val; + } else if ((a & 0x00C0) == 0x00C0) { // 0x50C0-0x50FF - Watchdog reset + console.log(`WATCHDOG RESET at ${a.toString(16)} = ${val.toString(16)} (frame ${this.frameCounter}, PC=${this.cpu.getPC().toString(16)})`); + this.watchdog_counter = INITIAL_WATCHDOG; + } + } + } + + // Z80 port I/O handlers - this is crucial for IM 0 interrupt mode! + readPortHook = (port) => { + // No input ports via I/O on Pacman - all are memory mapped + return 0xFF; + } + + writePortHook = (port, val) => { + // Port 0 is used to set interrupt vector for IM 0/IM 2 mode + if (port === 0) { + this.interruptVector = val; + console.log(`*** INTERRUPT VECTOR SET TO ${val.toString(16)} via port 0 (IM mode) ***`); + } + } + + newIOBus() { + return { + read: this.readPortHook, + write: this.writePortHook + }; + } + + reset() { + super.reset(); + this.cpu.reset(); + this.watchdog_counter = INITIAL_WATCHDOG; + + // Extract character ROM from ROM (8KB at gfxBase) + console.log(`Extracting character ROM from offset ${this.gfxBase.toString(16)}`); + if (this.rom.length >= this.gfxBase + 0x2000) { + for (var i = 0; i < 0x2000; i++) { + this.charROM[i] = this.rom[this.gfxBase + i]; + } + console.log(`Character ROM loaded: ${this.charROM.length} bytes (2 bitplanes of 4KB each)`); + } else { + console.log(`ERROR: ROM too small for character data at ${this.gfxBase.toString(16)}`); + } + } + + loadState(state) { + this.cpu.loadState(state.c); + this.ram.set(state.ram); + this.vram.set(state.vr); + this.cram.set(state.cr); + this.oram.set(state.or); + this.watchdog_counter = state.wdc; + this.interruptEnabled = state.ie; + this.loadControlsState(state); + } + + saveState() { + return { + c: this.cpu.saveState(), + ram: this.ram.slice(0), + vr: this.vram.slice(0), + cr: this.cram.slice(0), + or: this.oram.slice(0), + wdc: this.watchdog_counter, + ie: this.interruptEnabled, + inputs: this.inputs.slice(0) + }; + } + + setKeyInput(key: number, code: number, flags: number): void { + console.log(`setKeyInput called: key=${key} code=${code} flags=${flags}`); + console.log(`Inputs before:`, Array.from(this.inputs).map(x => x.toString(16))); + super.setKeyInput(key, code, flags); + console.log(`Inputs after:`, Array.from(this.inputs).map(x => x.toString(16))); + } + + advanceCPU() { + // Track PC for reset detection + var currentPC = this.cpu.getPC(); + if (currentPC === 0x0000 && this.lastPC !== 0x0000) { + console.log(`*** RESET DETECTED: PC jumped to 0x0000 from ${this.lastPC.toString(16)} ***`); + console.log(`Frame: ${this.frameCounter}, Interrupt enabled: ${this.interruptEnabled}`); + } + this.lastPC = currentPC; + + // Execute one CPU instruction and track cycles (like pac-c emulator) + var elapsed_cycles = this.cpu.advanceInsn(); + this.cpuCycleCounter += elapsed_cycles; + + // Check for VBLANK interrupt every PAC_CYCLES_PER_FRAME cycles (like pac-c emulator) + var PAC_CYCLES_PER_FRAME = this.cpuFrequency / 60; // 60 FPS + + if (this.cpuCycleCounter >= PAC_CYCLES_PER_FRAME) { + this.cpuCycleCounter -= PAC_CYCLES_PER_FRAME; + + // Trigger VBLANK interrupt if enabled (like pac-c emulator) + if (this.interruptEnabled) { + // The ROM uses IM 2 mode with interrupt vector 0xFA + // In IM 2, the interrupt vector forms the low byte of the address + // The I register (set to 0x3F by ROM) forms the high byte + // So interrupt jumps to address (I << 8) | interruptVector = 0x3FFA + // But the Z80 emulator expects the data byte for IM 0 mode + // Since our Z80 is in IM 0 mode, we use the interrupt vector directly + this.cpu.interrupt(this.interruptVector); + } + } + + return elapsed_cycles; + } + + startScanline() { + // Remove scanline-based interrupt - we now use cycle-based timing + // This method can be empty or handle other scanline-specific tasks + } + + drawScanline() { + this.gfx.drawScanline(this.pixels, this.scanline); + } + + advanceFrame(trap) { + var steps = super.advanceFrame(trap); + this.gfx.advanceFrame(); + this.frameCounter++; + + // Watchdog - enable proper behavior like other machines + this.watchdog_counter--; + if (this.watchdog_counter <= 0) { + console.log(`*** WATCHDOG TIMEOUT: Fired at frame ${this.frameCounter}, PC=${this.cpu.getPC().toString(16)} ***`); + throw new EmuHalt("WATCHDOG FIRED - Game should reset"); + } + + return steps; + } + + // Helper methods for ROM analysis + getInstructionName(opcode: number): string { + const opcodeNames = { + 0x76: 'HALT', 0xFB: 'EI', 0xF3: 'DI', 0xC3: 'JP', 0xCD: 'CALL', + 0xC9: 'RET', 0x00: 'NOP', 0x3E: 'LD A,n', 0x21: 'LD HL,nn' + }; + return opcodeNames[opcode] || `UNKNOWN(${opcode?.toString(16)})`; + } + + analyzeROMPhase(pc: number): string { + if (pc < 0x1000) return "INTERRUPT_VECTORS"; + if (pc >= 0x2300 && pc <= 0x2400) return "INITIALIZATION"; + if (pc >= 0x1000 && pc <= 0x2000) return "MAIN_PROGRAM"; + if (pc >= 0x3000) return "GAME_LOGIC"; + return `UNKNOWN_AREA(${pc.toString(16)})`; + } + + analyzeVRAMActivity(): string { + var nonZeroCount = 0; + var nonSpaceCount = 0; + for (var i = 0; i < this.vram.length; i++) { + if (this.vram[i] !== 0) nonZeroCount++; + if (this.vram[i] !== 0x40) nonSpaceCount++; // 0x40 is typically space character + } + + if (nonSpaceCount > 50) return `ACTIVE_GRAPHICS(${nonSpaceCount}_tiles)`; + if (nonZeroCount > 0) return `CLEARING_SCREEN(${nonZeroCount}_spaces)`; + return "NO_ACTIVITY"; + } + + checkForAttractMode(): void { + // Look for signs that ROM has moved to attract mode + var pc = this.cpu.getPC(); + var vramActive = this.analyzeVRAMActivity(); + + if (vramActive.includes("ACTIVE_GRAPHICS")) { + console.log("🎉 SUCCESS: ROM appears to have reached game/attract mode!"); + console.log(` Graphics are being drawn: ${vramActive}`); + } else if (pc < 0x2000 && pc !== 0x234a) { + console.log("🔄 PROGRESS: ROM has moved beyond initialization phase"); + console.log(` Now executing in main program area: PC=${pc.toString(16)}`); + } else { + // Check if we're still in initialization + if (pc === 0x234a) { + console.log("⏳ STILL INITIALIZING: ROM still in HALT/interrupt cycle"); + console.log(" This is normal - real Pacman hardware takes time to initialize"); + } + } + } + + loadROM(data) { + this.rom.set(padBytes(data, this.defaultROMSize)); + + console.log(`ROM loaded: ${data.length} bytes, padded to ${this.defaultROMSize}`); + console.log(`First few ROM bytes: ${Array.from(this.rom.slice(0, 16)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + + // DEBUG: Check interrupt vectors and important code locations + console.log(`=== INTERRUPT VECTOR DEBUG ===`); + console.log(`RST 0x00 (0x0000): ${Array.from(this.rom.slice(0x00, 0x08)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`RST 0x08 (0x0008): ${Array.from(this.rom.slice(0x08, 0x10)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`RST 0x10 (0x0010): ${Array.from(this.rom.slice(0x10, 0x18)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`RST 0x18 (0x0018): ${Array.from(this.rom.slice(0x18, 0x20)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`RST 0x20 (0x0020): ${Array.from(this.rom.slice(0x20, 0x28)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`RST 0x28 (0x0028): ${Array.from(this.rom.slice(0x28, 0x30)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`RST 0x30 (0x0030): ${Array.from(this.rom.slice(0x30, 0x38)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`RST 0x38 (0x0038): ${Array.from(this.rom.slice(0x38, 0x40)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + console.log(`NMI vector (0x0066): ${Array.from(this.rom.slice(0x66, 0x70)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); + + // Extract graphics and palette data if present in ROM + if (this.rom.length >= this.gfxBase + 0x2000) { + // Extract character ROM (8KB at 0x4000) + this.charROM = new Uint8Array(0x2000); + this.charROM.set(this.rom.slice(this.gfxBase, this.gfxBase + 0x2000)); + console.log(`Character ROM extracted: ${this.charROM.length} bytes from ${this.gfxBase.toString(16)}`); + } + + if (this.rom.length >= this.palBase + 32) { + // Extract palette data (32 bytes at 0x6000) + var palette_data = this.rom.slice(this.palBase, this.palBase + 32); + this.palette = new Uint32Array(32); + for (var i = 0; i < 32; i++) { + // Convert 4-bit RGB to 32-bit RGBA + var val = palette_data[i]; + var r = ((val >> 0) & 1) * 0x21 + ((val >> 1) & 1) * 0x47 + ((val >> 2) & 1) * 0x97; + var g = ((val >> 3) & 1) * 0x21 + ((val >> 4) & 1) * 0x47 + ((val >> 5) & 1) * 0x97; + var b = ((val >> 6) & 1) * 0x51 + ((val >> 7) & 1) * 0xae; + this.palette[i] = 0xFF000000 | (b << 16) | (g << 8) | r; + } + console.log(`Palette extracted: 32 colors from ${this.palBase.toString(16)}`); + } + + // Initialize graphics system + this.gfx = new PacmanVideo(this, this.charROM, this.vram, this.cram, this.oram, this.palette, {}); + console.log("Graphics system initialized"); + } + + // Required interface methods - delegate to hooks + read(a: number): number { + return this.readByteHook(a); + } + + write(a: number, val: number): void { + this.writeByteHook(a, val); + } + + readConst(a: number): number { + return this.readByteHook(a); + } +} \ No newline at end of file diff --git a/src/platform/_index.ts b/src/platform/_index.ts index a992c951..c0513985 100644 --- a/src/platform/_index.ts +++ b/src/platform/_index.ts @@ -23,6 +23,7 @@ export function importPlatform(name: string) : Promise { case "msx": return import("../platform/msx"); case "mw8080bw": return import("../platform/mw8080bw"); case "nes": return import("../platform/nes"); + case "pacman": return import("../platform/pacman"); case "pce": return import("../platform/pce"); case "sms": return import("../platform/sms"); case "sound_konami": return import("../platform/sound_konami"); diff --git a/src/platform/pacman.ts b/src/platform/pacman.ts new file mode 100644 index 00000000..bb0178b4 --- /dev/null +++ b/src/platform/pacman.ts @@ -0,0 +1,111 @@ +import { Platform } from "../common/baseplatform"; +import { PLATFORMS } from "../common/emu"; +import { PacmanMachine } from "../machine/pacman"; +import { BaseZ80MachinePlatform } from "../common/baseplatform"; + +const PACMAN_PRESETS = [ + { id: 'hello.c', name: 'Hello World' }, + { id: 'maze.c', name: 'Maze Display' }, + { id: 'sprites.c', name: 'Sprite Test' }, +]; + +class PacmanPlatform extends BaseZ80MachinePlatform implements Platform { + + newMachine() { return new PacmanMachine(); } + getPresets() { return PACMAN_PRESETS; } + getDefaultExtension() { return ".c"; }; + readAddress(a) { return this.machine.readConst(a); } + readVRAMAddress(a) { + if (a < 0x400) return this.machine.vram[a]; + else if (a < 0x800) return this.machine.cram[a-0x400]; + else return this.machine.oram[a-0x800]; + } + + // Override ROM size to include program + graphics + palette + getROMSize() { return 0x6200; } // 16KB program + 8KB graphics + palette space + + getMemoryMap = function() { return { main:[ + {name:'Program ROM',start:0x0000,size:0x4000,type:'rom'}, + {name:'Graphics ROM',start:0x4000,size:0x2000,type:'rom'}, + {name:'Palette ROM',start:0x6000,size:0x200,type:'rom'}, + {name:'Video RAM',start:0x4000,size:0x400,type:'ram'}, + {name:'Color RAM',start:0x4400,size:0x400,type:'ram'}, + {name:'Work RAM',start:0x4800,size:0x7F0,type:'ram'}, + {name:'Sprite RAM',start:0x4FF0,size:0x10,type:'ram'}, + {name:'I/O Registers',start:0x5000,size:0x100,type:'io'}, + ] } }; + showHelp() { return "https://8bitworkshop.com/docs/platforms/arcade/index.html#pacman-hardware" } + + getDebugTree() { + let tree = super.getDebugTree(); + + // Add palette visualization from extracted ROM data + tree['palette'] = { + $$: () => { + let paletteData = {}; + for (let i = 0; i < this.machine.palette.length; i++) { + let color = this.machine.palette[i]; + let hex = '#' + (color & 0xffffff).toString(16).padStart(6, '0'); + paletteData[`color_${i.toString().padStart(2, '0')}`] = hex; + } + return paletteData; + } + }; + + // Add character ROM visualization + tree['charROM'] = { + $$: () => { + let charData = {}; + for (let i = 0; i < Math.min(64, this.machine.charROM.length / 16); i++) { + let charBytes = []; + for (let j = 0; j < 16; j++) { + let addr = i * 16 + j; + if (addr < this.machine.charROM.length) { + charBytes.push('$' + this.machine.charROM[addr].toString(16).padStart(2, '0')); + } + } + charData[`char_${i.toString().padStart(2, '0')}`] = charBytes.join(' '); + } + return charData; + } + }; + + // Add sprite RAM + tree['sprites'] = { + $$: () => { + let spriteData = {}; + for (let i = 0; i < 8; i++) { + let base = i * 2; + if (base < this.machine.oram.length) { + spriteData[`sprite_${i}`] = { + shape: '$' + this.machine.oram[base].toString(16).padStart(2, '0'), + color: '$' + this.machine.oram[base + 1].toString(16).padStart(2, '0') + }; + } + } + return spriteData; + } + }; + + // Add sprite coordinates + tree['sprite_coords'] = { + $$: () => { + let coordData = {}; + for (let i = 0; i < 8; i++) { + let base = 0x10 + i * 2; + if (base < this.machine.oram.length) { + coordData[`sprite_${i}_coords`] = { + x: this.machine.oram[base], + y: this.machine.oram[base + 1] + }; + } + } + return coordData; + } + }; + + return tree; + } +} + +PLATFORMS['pacman'] = PacmanPlatform; \ No newline at end of file diff --git a/src/worker/platforms.ts b/src/worker/platforms.ts index ca724b02..c45457ff 100644 --- a/src/worker/platforms.ts +++ b/src/worker/platforms.ts @@ -66,6 +66,14 @@ export var PLATFORM_PARAMS = { data_size: 0x400, stack_end: 0x4800, }, + 'pacman': { + arch: 'z80', + code_start: 0x0, + rom_size: 0x6200, + data_start: 0x4000, + data_size: 0x800, + stack_end: 0x4800, + }, 'williams': { arch: '6809', code_start: 0x0, From 6381561e3a5e5ab7ea771a4fd1b965a3b0485faa Mon Sep 17 00:00:00 2001 From: MikeDX Date: Thu, 30 Jul 2026 12:03:30 +0100 Subject: [PATCH 2/4] Add Pac-Man game presets: Chase, Climber, Hello, Music, Siege, Solarian, and common utilities --- presets/pacman/chase.c | 1456 ++++++++++++++++++++++++++++++++ presets/pacman/climber.c | 1092 ++++++++++++++++++++++++ presets/pacman/hello.c | 853 ++++++++++++++----- presets/pacman/music.c | 980 +++++++++++++++++++++ presets/pacman/pacman_common.c | 123 +++ presets/pacman/pacman_common.h | 99 +++ presets/pacman/siege.c | 860 +++++++++++++++++++ presets/pacman/solarian.c | 1065 +++++++++++++++++++++++ presets/pacman/sprites.c | 839 +++++++++++++----- src/common/cpu/ZilogZ80.ts | 4 +- src/ide/pixeleditor.ts | 136 ++- src/machine/pacman.ts | 841 ++++++++---------- src/platform/pacman.ts | 90 +- src/worker/platforms.ts | 8 +- 14 files changed, 7495 insertions(+), 951 deletions(-) create mode 100644 presets/pacman/chase.c create mode 100644 presets/pacman/climber.c create mode 100644 presets/pacman/music.c create mode 100644 presets/pacman/pacman_common.c create mode 100644 presets/pacman/pacman_common.h create mode 100644 presets/pacman/siege.c create mode 100644 presets/pacman/solarian.c diff --git a/presets/pacman/chase.c b/presets/pacman/chase.c new file mode 100644 index 00000000..b11930b8 --- /dev/null +++ b/presets/pacman/chase.c @@ -0,0 +1,1456 @@ +/* + * Chase — vertical Pac-Man port of Shiru's NES Chase (presets/nes/chase). + * Full-screen 16×16 cells (2×2 tiles), FP movement, chase AI, WSG music/SFX. + * Graphics from tileset.chr. Music/SFX adapted from the original FamiTone data. + * + * Controls: D-pad move, Start pause, Start/Space from title. + */ +//#link "pacman_common.c" +#include "pacman_common.h" + +void music_update(void); + +void start(void) __naked { +__asm + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + jp _main + .ds 0x66 - (. - _start) + push af + push bc + push de + push hl + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + call _music_update + pop hl + pop de + pop bc + pop af + retn +__endasm; +} + +/* 14×13 cells × 16px = 28×26 tiles — fills the Pac-Man playfield */ +#define MAP_W 14 +#define MAP_H 13 +#define MAP_X0 0 +/* map_y0 set per level to vertically center */ +#define LEVELS_ALL 5 +#define ACTORS_MAX 4 + +#define TILE_PX 16 +#define FP_BITS 4 +#define TILE_TO_POS(t) ((word)(t) << (4 + FP_BITS)) +#define POS_TO_TILE(p) ((byte)((p) >> (4 + FP_BITS))) +#define POS_SNAP_MASK 0xff00 + +#define T_WALL 0x11 +#define T_FLOOR 0x24 /* NES empty tile 0x44 */ +#define T_ITEM 0x10 +#define T_ITEM2 0x14 +/* 2×2 wall brick from NES 0x40–0x43 */ +#define T_WTL 0x20 +#define T_WTR 0x21 +#define T_WBL 0x22 +#define T_WBR 0x23 +/* 2×2 gem from NES 0x45–0x48 (+ bank1 sparkle) */ +#define T_GTL 0x18 +#define T_GTR 0x19 +#define T_GBL 0x1a +#define T_GBR 0x1b +#define T_GTL2 0x1c +#define T_GTR2 0x1d +#define T_GBL2 0x1e +#define T_GBR2 0x1f + +/* Chase custom palettes (see scripts/gen_pacman_gfx.py build_chase_color_pal) */ +#define PAL_WALL 0x10 /* blue brick */ +#define PAL_FIELD 0x11 /* floor speckles + gems share this */ +#define PAL_HERO 0x12 /* green player */ +#define PAL_ENEMY1 0x13 /* coral */ +#define PAL_ENEMY2 0x14 /* purple */ +#define PAL_ENEMY3 0x15 /* blue */ + +#define DIR_NONE 0 +#define DIR_LEFT 1 +#define DIR_RIGHT 2 +#define DIR_UP 4 +#define DIR_DOWN 8 + +#define SP_PLAYER 0 +#define SP_PLAYER2 1 +#define SP_ENEMY 2 + +/* ---- Music (WSG) ---- */ +const word note_table[64] = { + 1126, 597, 632, 670, 710, 752, 796, 844, + 894, 947, 1003, 1063, 1126, 597, 632, 670, + 710, 752, 796, 844, 894, 947, 1003, 1063, + 1126, 1193, 1264, 1339, 1419, 1503, 1593, 1688, + 1788, 1894, 2007, 2126, 2253, 2387, 2529, 2679, + 2838, 3007, 3186, 3375, 3576, 3789, 4013, 4253, + 4505, 4773, 5057, 5357, 5676, 6013, 6372, 6750, + 7153, 7577, 8028, 8503, 9009, 9545, 10113, 10718, +}; + +#define ENV_MAX 13 +#define ENV_SUSTAIN 7 /* held level while a note is active */ +#define MUSIC_VOICES 2 /* voices 0–1 music; voice 2 = SFX only */ + +struct { byte volume; } voice[3]; +word voice_freq[3]; +byte cur_duration; +byte music_wave; +byte music_speed; /* frames per score row (NES FamiTone speed) */ +byte music_release; /* 1 = decay to silence (rest), 0 = hold sustain */ +volatile byte music_enable; +volatile byte music_paused; +static const byte* music_ptr; +static const byte* music_loop; +byte chord[4]; +byte chord_n; + +/* SFX script: note (0..63), vol (0..15), frames; note|0x80 = rest; 0xff = end */ +static const byte* sfx_ptr; +byte sfx_timer; +byte sfx_vol; + +/* + * Music from NES Chase FamiTone streams (music.s). + * Format: bass, lead, 0x80|rows — durations are NES pattern ROWS; + * music_speed (3/4/6) converts rows→frames. Note 0 = rest; 0xff = end. + * FT note N → WSG N+3; lead is +1 octave when pitched. + */ +const byte mus_level[] = { + 0x1c,0x28,0x82, 0x1c,0x28,0x82, 0x1e,0x2a,0x8c, + 0xff +}; +const byte mus_game[] = { + 0x17,0x23,0x81,0x00,0x00,0x83,0x17,0x23,0x81,0x00,0x00,0x81,0x16,0x22,0x82, + 0x1c,0x28,0x81,0x00,0x00,0x87,0x15,0x21,0x81,0x00,0x00,0x83,0x15,0x21,0x82, + 0x14,0x20,0x82,0x1c,0x28,0x81,0x00,0x00,0x87,0x17,0x23,0x81,0x00,0x00,0x83, + 0x17,0x23,0x81,0x00,0x00,0x81,0x16,0x22,0x82,0x1c,0x28,0x81,0x00,0x00,0x83, + 0x16,0x22,0x81,0x00,0x00,0x83,0x15,0x21,0x81,0x00,0x00,0x83,0x15,0x21,0x82, + 0x1c,0x28,0x81,0x14,0x20,0x83,0x00,0x00,0x86,0x17,0x23,0x81,0x00,0x00,0x83, + 0x17,0x23,0x81,0x00,0x00,0x81,0x16,0x22,0x82,0x1c,0x28,0x81,0x00,0x00,0x83, + 0x16,0x22,0x81,0x00,0x00,0x83,0x15,0x21,0x81,0x00,0x00,0x83,0x15,0x21,0x82, + 0x14,0x20,0x82,0x1c,0x28,0x81,0x00,0x00,0x87,0x12,0x1e,0x81,0x00,0x00,0x83, + 0x12,0x1e,0x81,0x00,0x00,0x81,0x14,0x20,0x82,0x1c,0x28,0x81,0x00,0x00,0x83, + 0x15,0x21,0x82,0x1c,0x28,0x81,0x17,0x23,0x85,0x00,0x00,0x8c, + 0xff +}; +const byte mus_clear[] = { + 0x21,0x2d,0x81,0x00,0x00,0x81,0x21,0x2d,0x81,0x00,0x00,0x81,0x21,0x2d,0x81, + 0x00,0x00,0x83,0x21,0x2d,0x81,0x00,0x00,0x81,0x21,0x2d,0x81,0x00,0x00,0x81, + 0x23,0x2f,0x89,0x00,0x00,0x8b, + 0xff +}; +const byte mus_lose[] = { + 0x1c,0x28,0x88, 0x19,0x25,0x84, 0x17,0x23,0x94, + 0xff +}; +const byte mus_gameover[] = { + 0x15,0x21,0x81,0x15,0x21,0x83,0x14,0x20,0x81,0x14,0x20,0x83,0x13,0x1f,0x81, + 0x13,0x1f,0x83,0x12,0x1e,0x82,0x10,0x1c,0x86,0x1c,0x28,0x8c, + 0xff +}; +const byte mus_welldone[] = { + 0x17,0x23,0x88,0x23,0x2f,0x86,0x23,0x2f,0x86,0x23,0x2f,0x88,0x17,0x23,0x84, + 0x15,0x21,0x88,0x21,0x2d,0x86,0x21,0x2d,0x86,0x21,0x2d,0x88,0x15,0x21,0x84, + 0x17,0x23,0x88,0x23,0x2f,0x86,0x23,0x2f,0x86,0x23,0x2f,0x88,0x17,0x23,0x84, + 0x10,0x1c,0x88,0x1c,0x28,0x86,0x1e,0x2a,0x86,0x1e,0x2a,0x8c, + 0xff +}; + +/* + * NES Chase SFX (from sounds.s / FamiTone), adapted to WSG note indices. + * Format: note, vol, frames; 0xff = end. Voice 2 only. + */ +const byte sfx_start[] = { + /* C4 F4 G4 C5 F5 G5 ×3, volume steps like NES $7f/$74/$71 */ + 0x28,15,4, 0x2d,14,4, 0x2f,14,4, 0x34,13,4, 0x39,12,4, 0x3b,12,4, + 0x28,12,4, 0x2d,11,4, 0x2f,11,4, 0x34,10,4, 0x39,10,4, 0x3b,9,4, + 0x28,9,4, 0x2d,8,4, 0x2f,8,4, 0x34,7,4, 0x39,7,4, 0x3b,6,4, + 0xff +}; +const byte sfx_item[] = { + /* short high blip: C4→F4→E4→G4 then softer repeat */ + 0x28,12,1, 0x2d,11,1, 0x2c,10,1, 0x2f,9,1, + 0x28,8,1, 0x2d,7,1, 0x2c,6,1, 0x2f,5,1, + 0xff +}; +const byte sfx_respawn_p[] = { + /* NES pulse arpeggio — bright rising chirp */ + 0x3c,10,1, 0x3e,11,1, 0x3f,12,1, 0x3c,13,1, 0x3e,14,1, + 0x3f,14,1, 0x3c,13,1, 0x3e,12,1, 0x3f,11,1, + 0x3c,9,1, 0x3e,8,1, 0x3f,7,1, 0x3c,6,1, 0x3e,5,1, + 0x3f,4,1, 0x3c,3,1, 0x3e,2,1, 0x3f,2,1, + 0xff +}; +const byte sfx_respawn_e[] = { + /* slightly lower / darker than player respawn */ + 0x38,9,1, 0x3a,10,1, 0x3c,11,1, 0x38,12,1, 0x3a,13,1, + 0x3c,13,1, 0x38,12,1, 0x3a,11,1, 0x3c,10,1, + 0x38,8,1, 0x3a,7,1, 0x3c,6,1, 0x38,5,1, 0x3a,4,1, + 0x3c,3,1, 0x38,3,1, 0x3a,2,1, 0x3c,2,1, + 0xff +}; + +byte next_music_byte(void) { + if (!music_ptr) return 0xff; + return *music_ptr++; +} + +void sfx_stop(void) { + sfx_ptr = 0; + sfx_timer = 0; + sfx_vol = 0; + sound_voice(2, 0, 0, 0); +} + +void sfx_play(const byte* seq) { + sfx_ptr = seq; + sfx_timer = 0; /* load first step on next update */ + sfx_vol = 0; +} + +void sfx_update(void) { + byte note, frames; + if (!sfx_ptr) return; + if (sfx_timer) { + sfx_timer--; + if (sfx_timer) return; + } + note = *sfx_ptr++; + if (note == 0xff) { + sfx_stop(); + return; + } + sfx_vol = *sfx_ptr++; + frames = *sfx_ptr++; + if (!frames) frames = 1; + sfx_timer = frames; + if (note & 0x80) { + sound_voice(2, 0, 0, 0); + sfx_vol = 0; + } else { + /* square — closest WSG match to NES pulse SFX */ + sound_voice(2, note_table[note & 63], sfx_vol, 1); + } +} + +void music_stop(void) { + byte i; + music_enable = 0; + music_ptr = 0; + music_loop = 0; + chord_n = 0; + music_release = 0; + for (i = 0; i < MUSIC_VOICES; i++) { + voice[i].volume = 0; + voice_freq[i] = 0; + sound_voice(i, 0, 0, 0); + } +} + +void music_play(const byte* music, byte loop) { + byte i; + music_enable = 0; + music_paused = 0; + music_ptr = music; + music_loop = loop ? music : 0; + cur_duration = 0; + chord_n = 0; + music_wave = 1; + music_release = 0; + /* Match NES Chase FamiTone $fb speed per song (NTSC tempo step 256 → 1 row / speed frames). */ + if (music == mus_game || music == mus_welldone) music_speed = 4; + else if (music == mus_gameover) music_speed = 6; + else music_speed = 3; /* level, clear, lose */ + for (i = 0; i < MUSIC_VOICES; i++) { + voice[i].volume = 0; + voice_freq[i] = 0; + sound_voice(i, 0, 0, 0); + } + music_enable = 1; +} + +void flush_chord(void) { + byte bass, lead; + /* Scores are always bass, lead pairs (0 = rest that voice). */ + bass = (chord_n >= 1) ? chord[0] : 0; + lead = (chord_n >= 2) ? chord[1] : 0; + chord_n = 0; + + if (bass) { + voice_freq[0] = note_table[bass & 63]; + voice[0].volume = ENV_MAX; + sound_voice(0, voice_freq[0], ENV_MAX, 0); /* sine bass */ + music_release = 0; + } else if (voice_freq[0]) { + /* Rest: keep pitch briefly, release volume (no hard mute). */ + music_release = 1; + } + if (lead) { + voice_freq[1] = note_table[lead & 63]; + voice[1].volume = ENV_MAX; + sound_voice(1, voice_freq[1], ENV_MAX, 1); /* square lead */ + music_release = 0; + } else if (voice_freq[1]) { + music_release = 1; + } + if (!bass && !lead && !voice_freq[0] && !voice_freq[1]) { + music_release = 0; + } +} + +void music_update(void) { + byte ch, note, floor; + + sfx_update(); + + if (!music_enable || music_paused) return; + + /* Sustain while notes run; on rests, release over a few frames (not a hard cut, + * and not a long hang). */ + floor = music_release ? 0 : ENV_SUSTAIN; + for (ch = 0; ch < MUSIC_VOICES; ch++) { + if (voice[ch].volume > floor) { + /* Release twice as fast as attack sustain taper */ + voice[ch].volume -= music_release ? 2 : 1; + if (voice[ch].volume < floor || voice[ch].volume > ENV_MAX) + voice[ch].volume = floor; + sound_vol(ch, voice[ch].volume); + } else if (music_release && voice[ch].volume == 0 && voice_freq[ch]) { + voice_freq[ch] = 0; + sound_voice(ch, 0, 0, 0); + } + } + + if (!music_ptr) { + if (music_loop) music_ptr = music_loop; + else return; + cur_duration = 0; + chord_n = 0; + } + + while (cur_duration == 0) { + note = next_music_byte(); + if ((note & 0x80) == 0) { + if (chord_n < 4) chord[chord_n++] = note; + } else { + flush_chord(); + if (note == 0xff) { + music_ptr = music_loop; + if (!music_ptr) { music_enable = 0; return; } + continue; + } + cur_duration = (note & 63) * music_speed; + if (!cur_duration) cur_duration = music_speed; + } + } + cur_duration--; +} + +/* ---- Game ---- */ +typedef struct { + word x, y; + word cnt; + word speed; + byte dir; + byte wait; + byte kind; +} Actor; + +const byte level_h[LEVELS_ALL] = { 7, 9, 9, 11, 13 }; + +const char* const levels[LEVELS_ALL][MAP_H] = { + { + "##############", + "####P*****####", + "####*####*####", + "####******####", + "####*####*####", + "####*****1####", + "##############", + "##############", + "##############", + "##############", + "##############", + "##############", + "##############" + }, + { + "##############", + "###P***#**1###", + "###*##*#*#*###", + "###********###", + "#####*#*#*####", + "###********###", + "###*#*#*##*###", + "###2*******###", + "##############", + "##############", + "##############", + "##############", + "##############" + }, + { + "##############", + "###P***#**1###", + "###*##*#*#*###", + "#********#***#", + "#*#*#*##*#*#*#", + "#***#********#", + "###*#*#*##*###", + "###***#***2###", + "##############", + "##############", + "##############", + "##############", + "##############" + }, + { + "##############", + "###P***#######", + "###*##*#****1#", + "###*##*#*#*#*#", + "#**********#*#", + "#*#*#*##*#*#*#", + "#*#**********#", + "#*#*#*#*##*###", + "#2****#*##*###", + "#######***3###", + "##############", + "##############", + "##############" + }, + { + "##############", + "##P********1##", + "##*##*##*##*##", + "#************#", + "#*#*###*#*#*##", + "#****#*******#", + "####*#*#*###*#", + "#******#*****#", + "#*#*#*###*#*##", + "#************#", + "##*##*##*##*##", + "##2********3##", + "##############" + } +}; + +byte map[MAP_W * MAP_H]; +Actor actors[ACTORS_MAX]; +byte actor_n; +byte game_level; +byte game_lives; +byte items_count; +byte items_collected; +byte game_clear; +byte game_done; +byte game_paused; +byte spawn_wait; +word rnd = 0xCACE; +byte frame_cnt; +byte start_prev; +byte map_y0; + +byte rand8(void) { + rnd = rnd * 17 + 53; + return (byte)(rnd >> 8); +} + +byte map_at(byte x, byte y) { + if (x >= MAP_W || y >= level_h[game_level]) return T_WALL; + return map[y * MAP_W + x]; +} + +void map_set(byte x, byte y, byte t) { + map[y * MAP_W + x] = t; +} + +/* Draw one logical cell as a 2×2 tile block */ +void draw_cell(byte x, byte y) { + byte t = map_at(x, y); + byte sx = (byte)(MAP_X0 + (x << 1)); + byte sy = (byte)(map_y0 + (y << 1)); + byte spark = (frame_cnt & 16) != 0; + + if (t == T_WALL) { + poke_tile(sx, sy, T_WTL, PAL_WALL); + poke_tile(sx + 1, sy, T_WTR, PAL_WALL); + poke_tile(sx, sy + 1, T_WBL, PAL_WALL); + poke_tile(sx + 1, sy + 1, T_WBR, PAL_WALL); + } else if (t == T_ITEM) { + /* Same PAL_FIELD as floor so speckles match; pens 2/3 are the gem */ + if (spark) { + poke_tile(sx, sy, T_GTL2, PAL_FIELD); + poke_tile(sx + 1, sy, T_GTR2, PAL_FIELD); + poke_tile(sx, sy + 1, T_GBL2, PAL_FIELD); + poke_tile(sx + 1, sy + 1, T_GBR2, PAL_FIELD); + } else { + poke_tile(sx, sy, T_GTL, PAL_FIELD); + poke_tile(sx + 1, sy, T_GTR, PAL_FIELD); + poke_tile(sx, sy + 1, T_GBL, PAL_FIELD); + poke_tile(sx + 1, sy + 1, T_GBR, PAL_FIELD); + } + } else { + poke_tile(sx, sy, T_FLOOR, PAL_FIELD); + poke_tile(sx + 1, sy, T_FLOOR, PAL_FIELD); + poke_tile(sx, sy + 1, T_FLOOR, PAL_FIELD); + poke_tile(sx + 1, sy + 1, T_FLOOR, PAL_FIELD); + } +} + +void draw_hud(void) { + put_string(0, 0, "LV", PAL_CYAN); + put_digit(3, 0, game_level + 1, PAL_YELLOW); + put_string(5, 0, "GEM", PAL_ORANGE); + put_digit(9, 0, items_collected / 10, PAL_ORANGE); + put_digit(10, 0, items_collected % 10, PAL_ORANGE); + put_string(11, 0, "OF", PAL_WHITE); + put_digit(14, 0, items_count / 10, PAL_WHITE); + put_digit(15, 0, items_count % 10, PAL_WHITE); + put_string(18, 0, "HP", PAL_PINK); + put_digit(21, 0, game_lives > 0 ? (byte)(game_lives - 1) : 0, PAL_PINK); + if (game_paused) put_string(23, 0, "PAUSE", PAL_WHITE); + else put_string(23, 0, " ", 0); +} + +byte can_enter(byte tx, byte ty) { + return map_at(tx, ty) != T_WALL; +} + +void actor_try_dir(byte id, byte dir) { + Actor* a = &actors[id]; + byte tx = POS_TO_TILE(a->x); + byte ty = POS_TO_TILE(a->y); + if (dir == DIR_LEFT) tx--; + else if (dir == DIR_RIGHT) tx++; + else if (dir == DIR_UP) ty--; + else if (dir == DIR_DOWN) ty++; + else return; + if (!can_enter(tx, ty)) return; + a->dir = dir; + a->cnt = (word)TILE_PX << FP_BITS; +} + +void try_collect(byte id) { + byte tx, ty; + Actor* a = &actors[id]; + if (id != 0 || a->wait) return; + tx = POS_TO_TILE(a->x); + ty = POS_TO_TILE(a->y); + if (map_at(tx, ty) != T_ITEM) return; + map_set(tx, ty, T_FLOOR); + draw_cell(tx, ty); + items_collected++; + sfx_play(sfx_item); + draw_hud(); +} + +void load_level(byte li) { + byte x, y, i; + byte h; + const char* row; + actor_n = 0; + items_count = 0; + items_collected = 0; + h = level_h[li]; + /* Center 2×h tile-rows in playfield (rows 2..33) */ + map_y0 = (byte)(2 + ((32 - (h << 1)) >> 1)); + + /* Clear playfield */ + for (y = 2; y < 34; y++) + for (x = 0; x < 28; x++) + poke_tile(x, y, T_FLOOR, PAL_FIELD); + + for (y = 0; y < h; y++) { + row = levels[li][y]; + for (x = 0; x < MAP_W; x++) { + char c = row[x]; + byte t = T_FLOOR; + if (c == '#') t = T_WALL; + else if (c == '*') { t = T_ITEM; items_count++; } + else if (c == 'P' || c == '1' || c == '2' || c == '3') { + Actor* a = &actors[actor_n]; + a->x = TILE_TO_POS(x); + a->y = TILE_TO_POS(y); + a->cnt = 0; + a->dir = DIR_NONE; + if (c == 'P') { + a->kind = 0; + a->speed = 32; /* NES player pace: 8 frames / cell */ + a->wait = 16; + } else { + a->kind = (byte)(c - '0'); + a->speed = (word)(10 + ((a->kind - 1) << 1)); + a->wait = (byte)(16 + (a->kind << 4)); + } + actor_n++; + t = T_FLOOR; + } + map[y * MAP_W + x] = t; + } + } + for (y = 0; y < h; y++) + for (x = 0; x < MAP_W; x++) + draw_cell(x, y); + for (i = actor_n; i < 8; i++) hide_sprite(i); + spawn_wait = (byte)(actor_n << 4); +} + +void draw_actors(void) { + byte i; + for (i = 0; i < actor_n; i++) { + Actor* a = &actors[i]; + byte sx = (byte)(MAP_X0 * 8 + (a->x >> FP_BITS)); + byte sy = (byte)(map_y0 * 8 + (a->y >> FP_BITS)); + byte shape, pal; + if (a->wait) { + if (a->wait >= 16 || (a->wait & 2)) { + hide_sprite(i); + continue; + } + } + if (a->kind == 0) { + shape = (frame_cnt & 8) ? SP_PLAYER2 : SP_PLAYER; + pal = PAL_HERO; + } else { + shape = SP_ENEMY; + if (a->kind == 1) pal = PAL_ENEMY1; + else if (a->kind == 2) pal = PAL_ENEMY2; + else pal = PAL_ENEMY3; + } + set_sprite(i, shape, pal, sx, sy); + } +} + +byte hit_player(void) { + byte i; + word px = actors[0].x >> FP_BITS; + word py = actors[0].y >> FP_BITS; + if (actors[0].wait) return 0; + for (i = 1; i < actor_n; i++) { + word ex, ey; + if (actors[i].wait) continue; + ex = actors[i].x >> FP_BITS; + ey = actors[i].y >> FP_BITS; + /* inset AABB on 16×16 sprites */ + if (!((px + 4) >= (ex + 12) || (ex + 4) >= (px + 12) || + (py + 4) >= (ey + 12) || (ey + 4) >= (py + 12))) + return 1; + } + return 0; +} + +void animate_gems(void) { + byte x, y, h; + if ((frame_cnt & 15) != 0) return; + h = level_h[game_level]; + for (y = 0; y < h; y++) + for (x = 0; x < MAP_W; x++) + if (map_at(x, y) == T_ITEM) draw_cell(x, y); +} + +void enemy_ai(byte id) { + Actor* a = &actors[id]; + byte tx = POS_TO_TILE(a->x); + byte ty = POS_TO_TILE(a->y); + byte dirs[4]; + byte n = 0; + byte prev = a->dir; + byte pick; + + if (prev != DIR_RIGHT && can_enter((byte)(tx - 1), ty)) dirs[n++] = DIR_LEFT; + if (prev != DIR_LEFT && can_enter((byte)(tx + 1), ty)) dirs[n++] = DIR_RIGHT; + if (prev != DIR_DOWN && can_enter(tx, (byte)(ty - 1))) dirs[n++] = DIR_UP; + if (prev != DIR_UP && can_enter(tx, (byte)(ty + 1))) dirs[n++] = DIR_DOWN; + if (!n) return; + + pick = dirs[rand8() % n]; + actor_try_dir(id, pick); + if (n > 1) { + Actor* p = &actors[0]; + if (prev != DIR_DOWN && p->y < a->y) actor_try_dir(id, DIR_UP); + if (prev != DIR_UP && p->y > a->y) actor_try_dir(id, DIR_DOWN); + if (prev != DIR_RIGHT&& p->x < a->x) actor_try_dir(id, DIR_LEFT); + if (prev != DIR_LEFT && p->x > a->x) actor_try_dir(id, DIR_RIGHT); + } +} + +void player_controls(void) { + byte j = 0; + Actor* a = &actors[0]; + if (LEFT1) j |= DIR_LEFT; + if (RIGHT1) j |= DIR_RIGHT; + if (UP1) j |= DIR_UP; + if (DOWN1) j |= DIR_DOWN; + + if (j & a->dir) { + j = (byte)(j & ~a->dir); + actor_try_dir(0, a->dir); + } + if (j & DIR_LEFT) actor_try_dir(0, DIR_LEFT); + if (j & DIR_RIGHT) actor_try_dir(0, DIR_RIGHT); + if (j & DIR_UP) actor_try_dir(0, DIR_UP); + if (j & DIR_DOWN) actor_try_dir(0, DIR_DOWN); +} + +void advance_actor(byte id) { + Actor* a = &actors[id]; + word step; + if (!a->cnt) return; + step = a->speed; + if (step > a->cnt) step = a->cnt; + if (a->dir == DIR_LEFT) a->x -= step; + else if (a->dir == DIR_RIGHT) a->x += step; + else if (a->dir == DIR_UP) a->y -= step; + else if (a->dir == DIR_DOWN) a->y += step; + a->cnt -= step; + + /* When the cell move finishes, collect (before new input). */ + if (!a->cnt) { + a->x &= POS_SNAP_MASK; + a->y &= POS_SNAP_MASK; + try_collect(id); + } +} + +void wait_frames(byte n) { + while (n--) { wait_vblank(); watchdog = 0; } +} + +void wait_for_start(void) { + while (!START1 && !FIRE1) { wait_vblank(); watchdog = 0; } + while (START1 || FIRE1) { wait_vblank(); watchdog = 0; } +} + +void title_screen(void) { + clrscr(0); + hide_all_sprites(); + put_string(9, 8, "CHASE", PAL_YELLOW); + put_string(4, 12, "COLLECT ALL GEMS", PAL_ORANGE); + put_string(5, 14, "AVOID ENEMIES", PAL_PINK); + put_string(4, 18, "PRESS START", PAL_CYAN); + put_string(6, 34, "PD SHIRU 2012", PAL_WHITE); + wait_for_start(); + sfx_play(sfx_start); + /* start jingle ≈ 72 frames; wait it out before banner */ + wait_frames(76); +} + +void show_level_banner(void) { + clrscr(0); + hide_all_sprites(); + put_string(8, 14, "LEVEL", PAL_CYAN); + put_digit(14, 14, game_level + 1, PAL_YELLOW); + music_play(mus_level, 0); + wait_frames(50); /* level fanfare ~48 frames at speed 3 */ + music_stop(); + sfx_stop(); +} + +void show_game_over(void) { + clrscr(0); + hide_all_sprites(); + put_string(7, 16, "GAME OVER", PAL_PINK); + music_play(mus_gameover, 0); + wait_for_start(); + music_stop(); +} + +void show_well_done(void) { + clrscr(0); + hide_all_sprites(); + put_string(7, 14, "WELL DONE", PAL_YELLOW); + put_string(3, 17, "ALL GEMS COLLECTED", PAL_ORANGE); + music_play(mus_welldone, 0); + wait_for_start(); + music_stop(); +} + +void game_loop(void) { + byte i; + + clrscr(0); + hide_all_sprites(); + load_level(game_level); + draw_hud(); + game_done = 0; + game_clear = 0; + game_paused = 0; + frame_cnt = 0; + start_prev = 1; + music_stop(); + + while (!game_done) { + wait_vblank(); + watchdog = 0; + frame_cnt++; + + if (START1 && !start_prev) { + game_paused = !game_paused; + music_paused = game_paused; + draw_hud(); + } + start_prev = START1; + if (game_paused) { draw_actors(); continue; } + + animate_gems(); + + if (items_collected >= items_count && !game_clear) { + game_clear = 1; + game_done = 1; + sfx_stop(); + music_play(mus_clear, 0); + } + + if (spawn_wait) { + --spawn_wait; + if (!spawn_wait && !music_enable) + music_play(mus_game, 1); + } + + for (i = 0; i < actor_n; i++) { + if (actors[i].wait) { + if (actors[i].wait == 16) + sfx_play(i ? sfx_respawn_e : sfx_respawn_p); + actors[i].wait--; + continue; + } + if (spawn_wait) continue; + advance_actor(i); + if (!actors[i].cnt) { + if (i == 0) player_controls(); + else enemy_ai(i); + } + } + + draw_actors(); + + if (!game_clear && hit_player()) { + sfx_stop(); + music_play(mus_lose, 0); + game_done = 1; + wait_frames(100); + } + } + if (game_clear) wait_frames(100); + music_stop(); + sfx_stop(); + hide_all_sprites(); +} + +void main(void) { + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + watchdog = 0; + music_enable = 0; + music_paused = 0; + sfx_stop(); + + while (1) { + title_screen(); + game_level = 0; + game_lives = 4; + while (game_lives && game_level < LEVELS_ALL) { + show_level_banner(); + game_loop(); + if (game_clear) game_level++; + else game_lives--; + } + if (!game_lives) show_game_over(); + else show_well_done(); + } +} + +/* ==== PACMAN GFX BEGIN (per-file; regenerate: scripts/gen_pacman_gfx.py) ==== */ +/* Graphics + sound waves private to chase.c — edit without affecting other demos. */ +/* Color PROM */ +const byte __at(0x6000) color_prom[32] = /*{pal:"pacman",n:32}*/ { + 0x00,0x07,0x66,0xef,0x00,0xf8,0xea,0x6f,0x00,0x3f,0x00,0xc9,0x38,0xaa,0xaf,0xf6, + 0x80,0xa2,0xf6,0x50,0x26,0x76,0x18,0x74,0x04,0x5e,0x95,0xe2,0x00,0x00,0x00,0x00, +}; + +/* Asset-editor palette slices */ +const byte editor_pals[52] = /*{pal:"pacman",layout:"pacman"}*/ { + 0x00,0xf6,0xc9,0x07,0x00,0xf6,0xc9,0xef,0x00,0xf6,0xc9,0xf8,0x00,0xf6,0xc9,0x6f, + 0x00,0xc9,0x07,0x3f,0x00,0x80,0xa2,0xf6,0x00,0x50,0x26,0x76,0x00,0x18,0x74,0xf6, + 0x00,0x04,0x5e,0xf6,0x00,0x04,0x95,0xf6,0x00,0x04,0xe2,0xf6,0x00,0xf6,0xc9,0x00, + 0x00,0x00,0x00,0x00, +}; + +/* Palette PROM */ +const byte __at(0x6100) palette_prom[256] = { + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x03, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x05,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x07, + 0x00,0x00,0x00,0x00,0x00,0x0b,0x01,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x01,0x0c,0x0f, + 0x00,0x10,0x11,0x12,0x00,0x13,0x14,0x15,0x00,0x16,0x17,0x12,0x00,0x18,0x19,0x12, + 0x00,0x18,0x1a,0x12,0x00,0x18,0x1b,0x12,0x00,0x09,0x06,0x0f,0x00,0x0d,0x0c,0x0f, + 0x00,0x05,0x03,0x09,0x00,0x0f,0x0b,0x00,0x00,0x0e,0x00,0x0b,0x00,0x0e,0x00,0x0b, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x01,0x00,0x0f,0x0b,0x0e,0x00,0x0e,0x00,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* WSG waveforms: 8 waves × 32 samples (0..15). Select with sound_voice(..., wave). */ +const byte __at(0x6200) wave_rom[256] = /*{w:32,h:1,count:8,bpp:8}*/ { + 0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x09, + 0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, + 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07, + 0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x08,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x07,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, +}; + +/* Tile ROM (arcade font + this demo's homebrew tiles) */ +const byte __at(0x4000) tile_rom[4096] = /*{w:8,h:8,count:256,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x73,0x73,0x38,0x0c,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x00,0x0e,0x0e,0x0e, + 0x00,0x0e,0x0e,0x0e,0x04,0x38,0x61,0x72,0x05,0x0a,0x05,0x0a,0x00,0x0e,0x0e,0x0e, + 0x00,0x0e,0x0e,0x0e,0x05,0x0a,0x05,0x0a,0xa4,0xe8,0xc0,0x00,0x00,0x0e,0x0e,0x0e, + 0x00,0x0e,0x0e,0x0e,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x00,0xc0,0x20,0x28, + 0xf6,0xf7,0x70,0x08,0x05,0x0a,0x05,0x0a,0x04,0x0a,0x05,0x0a,0x00,0x0e,0x0e,0x0e, + 0x00,0x0e,0x0e,0x0e,0x00,0x70,0xc2,0xe5,0x05,0x0a,0x05,0x0a,0x00,0x0e,0x0e,0x0e, + 0x00,0x0e,0x0e,0x0e,0x05,0x0a,0x05,0x0a,0x49,0xc0,0x81,0x02,0x00,0x0e,0x0e,0x0e, + 0x00,0x0e,0x0e,0x0e,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x00,0x82,0x40,0x40, + 0xf8,0xf8,0xf8,0xff,0xf0,0xff,0xff,0x0f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x0f, + 0x00,0x0f,0x0f,0xf0,0x8f,0xf8,0xf8,0xf8,0x00,0x4b,0x6d,0x7e,0x7e,0x7e,0x7e,0x7e, + 0x86,0x86,0x86,0x86,0x86,0xca,0xec,0x0e,0xe1,0xe1,0xe1,0xff,0xf0,0xff,0xff,0x0f, + 0x00,0x0e,0x0e,0x86,0x86,0x86,0x86,0x86,0x00,0x0f,0x0f,0xf0,0x0f,0xe1,0xe1,0xe1, + 0x00,0x0e,0x0e,0x0e,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x05,0x0a,0x00,0x0e,0x0e,0x0e, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Sprite ROM (this demo's homebrew sprites) */ +const byte __at(0x5000) sprite_rom[4096] = /*{w:16,h:16,count:64,bpp:2,pacstrip:1}*/ { + 0x00,0x0c,0x0e,0x86,0x86,0x0e,0x8e,0xce,0x00,0x03,0x16,0x34,0x35,0x35,0x35,0x35, + 0x00,0x0f,0xf0,0x87,0x7f,0x4f,0x0f,0xff,0x00,0x0f,0xf0,0x78,0x7e,0x6f,0x6f,0xef, + 0xce,0x8e,0x0e,0x86,0x86,0x0e,0x0c,0x00,0x35,0x35,0x35,0x35,0x35,0x16,0x03,0x00, + 0xff,0x0f,0x4f,0x7f,0x8f,0xf0,0x0f,0x00,0xef,0x6f,0x6f,0x7e,0x7e,0xf0,0x0f,0x00, + 0x00,0x08,0x0c,0x0c,0x0c,0x0c,0x0c,0x8c,0x00,0x07,0x3c,0x78,0x6b,0x6b,0x6b,0x7b, + 0x00,0x0f,0xf0,0x0f,0xef,0x8f,0x0f,0xff,0x00,0x0f,0xe1,0xf0,0xfc,0xcf,0xdf,0xdf, + 0x8c,0x0c,0x0c,0x0c,0x0c,0x0c,0x08,0x00,0x7b,0x6b,0x6b,0x6b,0x7b,0x3c,0x07,0x00, + 0xff,0x0f,0x8f,0xef,0x0f,0xf0,0x0f,0x00,0xdf,0xdf,0xcf,0xfc,0xfc,0xe1,0x0f,0x00, + 0x00,0x08,0x0c,0x86,0x86,0x0e,0x4e,0xce,0x00,0x07,0x34,0x34,0x35,0x35,0x35,0x35, + 0x00,0x0f,0x78,0x0f,0x3f,0x0f,0x0f,0x3d,0x00,0x0f,0xf0,0x78,0xbf,0xbe,0x2f,0xef, + 0xce,0x4e,0x0e,0x86,0x86,0x0c,0x08,0x00,0x35,0x35,0x35,0x35,0x35,0x34,0x07,0x00, + 0x3d,0x0f,0x0f,0x3f,0x0f,0x78,0x0f,0x00,0xef,0x2f,0xbe,0xbf,0x7e,0xf0,0x0f,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +/* ==== PACMAN GFX END ==== */ diff --git a/presets/pacman/climber.c b/presets/pacman/climber.c new file mode 100644 index 00000000..f1ad1a88 --- /dev/null +++ b/presets/pacman/climber.c @@ -0,0 +1,1092 @@ +/* + * Climber — platform / ladder game for Pac-Man hardware. + * Ported/simplified from presets/coleco/climber.c + * + * Controls: Left/Right walk, Up/Down climb, Space jump, Start to begin. + * Climb to the TOP floor (level counter hits the last stage) to win. + * + * Graphics for this file are appended at the bottom (private copy). + * Climber frames + floor/ladder tiles are converted from presets/coleco/climber.c + * (walk/climb/jump/fall + HW flipX for facing / climb bob). + */ +//#link "pacman_common.c" +#include "pacman_common.h" + +void start(void) __naked { +__asm + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + jp _main + .ds 0x66 - (. - _start) + push af + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + pop af + retn +__endasm; +} + +#define COLS 28 +#define VIEW_H 28 +#define VIEW_Y0 4 +#define MAX_LEVELS 12 +#define GAPSIZE 3 +#define MAX_ACTORS 4 +#define TOP_LEVEL (MAX_LEVELS - 1) + +#define T_FLOOR 0x15 +#define T_LADDER 0x16 +#define T_BRICK 0x11 + +/* Sprite ROM frames (from Coleco climber.c) */ +#define SP_WALK0 0 +#define SP_WALK1 1 +#define SP_CLIMB0 2 +#define SP_CLIMB1 3 +#define SP_JUMP 4 +#define SP_FALL 5 +#define FLIP_X 2 + +typedef struct { + byte ypos; + byte height; + byte gap; + byte ladder1; + byte ladder2; +} Level; + +Level levels[MAX_LEVELS]; +byte scroll_y; +byte world_h; +word rnd_state; + +typedef enum { INACTIVE, WALKING, CLIMBING, JUMPING, FALLING } ActorState; + +typedef struct { + word yy; + byte x; + byte level; + byte state; + byte dir; + byte onscreen; + sbyte xvel; + sbyte yvel; +} Actor; + +Actor actors[MAX_ACTORS]; + +/* Set when leaving a ladder; cleared when UP is released — blocks chain-climbing. */ +byte climb_up_lock; + +byte rand8(void) { + rnd_state = rnd_state * 17 + 53; + return (byte)(rnd_state >> 8); +} + +byte rndint(byte lo, byte hi) { + return lo + (rand8() % (byte)(hi - lo + 1)); +} + +byte iabs8(sbyte x) { + return x >= 0 ? (byte)x : (byte)(-x); +} + +byte dist8(word a, word b) { + return (a > b) ? (byte)(a - b) : (byte)(b - a); +} + +byte ladder_in_gap(byte ladder, byte gap) { + return gap && ladder >= gap && ladder < gap + GAPSIZE; +} + +void make_levels(void) { + byte i; + byte y = 0; + Level* prev = &levels[0]; + rnd_state = 0xC1A1; + for (i = 0; i < MAX_LEVELS; i++) { + Level* lev = &levels[i]; + lev->height = rndint(3, 5); + lev->ladder1 = rndint(2, 11); + lev->ladder2 = rndint(14, 24); + do { + lev->gap = (i > 0 && i < TOP_LEVEL) ? rndint(0, 22) : 0; + } while (ladder_in_gap(prev->ladder1, lev->gap) || + ladder_in_gap(prev->ladder2, lev->gap)); + lev->ypos = y; + y += lev->height; + prev = lev; + } + /* Top stage: solid floor, no gaps/ladders — reaching it wins */ + levels[TOP_LEVEL].height = 4; + levels[TOP_LEVEL].gap = 0; + levels[TOP_LEVEL].ladder1 = 0; + levels[TOP_LEVEL].ladder2 = 0; + levels[TOP_LEVEL].ypos = y - levels[TOP_LEVEL].height; + /* Ensure previous stage still reaches the top floor */ + { + byte prev_h = levels[TOP_LEVEL - 1].height; + levels[TOP_LEVEL].ypos = levels[TOP_LEVEL - 1].ypos + prev_h; + } + world_h = levels[TOP_LEVEL].ypos + levels[TOP_LEVEL].height; +} + +byte max_scroll_y(void) { + if (world_h <= VIEW_H) return 0; + return world_h - VIEW_H; +} + +word get_floor_yy(byte level) { + return (word)levels[level].ypos * 8 + 8; +} + +word get_ceiling_yy(byte level) { + return (word)(levels[level].ypos + levels[level].height) * 8 + 8; +} + +byte is_in_gap(byte x, byte gap) { + byte x1; + if (!gap) return 0; + x1 = gap * 8; + return (x > x1 && x < x1 + GAPSIZE * 8 - 4); +} + +void create_actors_on_level(byte li) { + byte ai = (li % (MAX_ACTORS - 1)) + 1; + Actor* a = &actors[ai]; + if (!a->onscreen && li > 0 && li < TOP_LEVEL) { + a->state = WALKING; + a->x = levels[li].ladder1 * 8 - 4; + a->yy = get_floor_yy(li); + a->level = li; + a->dir = rand8() & 1; + a->onscreen = 1; + } +} + +void draw_level_line(byte screen_y) { + byte x; + byte world_y = screen_y + scroll_y; + byte row = VIEW_Y0 + (VIEW_H - 1) - screen_y; + byte i; + byte drawn = 0; + + for (i = 0; i < MAX_LEVELS; i++) { + Level* lev = &levels[i]; + byte dy = world_y - lev->ypos; + if (dy < lev->height) { + drawn = 1; + if (dy == 0) { + for (x = 0; x < COLS; x++) { + if (lev->gap && x >= lev->gap && x < lev->gap + GAPSIZE) + poke_tile(x, row, T_BLANK, 0); + else + poke_tile(x, row, T_FLOOR, i == TOP_LEVEL ? PAL_YELLOW : PAL_BLUE); + } + } else { + for (x = 0; x < COLS; x++) poke_tile(x, row, T_BLANK, 0); + poke_tile(0, row, T_BRICK, PAL_BLUE); + poke_tile(COLS - 1, row, T_BRICK, PAL_BLUE); + if (lev->ladder1) + poke_tile(lev->ladder1, row, T_LADDER, PAL_ORANGE); + if (lev->ladder2) + poke_tile(lev->ladder2, row, T_LADDER, PAL_ORANGE); + } + if (screen_y == 0 || screen_y == VIEW_H - 1) + create_actors_on_level(i); + break; + } + } + if (!drawn) { + for (x = 0; x < COLS; x++) poke_tile(x, row, T_BLANK, 0); + } +} + +void draw_hud(void) { + put_string(0, 0, "CLIMBER", PAL_CYAN); + put_string(10, 0, "LV", PAL_WHITE); + put_digit(13, 0, actors[0].level / 10, PAL_YELLOW); + put_digit(14, 0, actors[0].level % 10, PAL_YELLOW); + put_string(17, 0, "GOAL", PAL_PINK); + put_digit(22, 0, TOP_LEVEL / 10, PAL_PINK); + put_digit(23, 0, TOP_LEVEL % 10, PAL_PINK); +} + +void draw_screen(void) { + byte y; + for (y = 0; y < VIEW_H; y++) { + draw_level_line(y); + if ((y & 7) == 0) watchdog = 0; + } + draw_hud(); +} + +/* Return ladder tile pixel X if actor is on/near that ladder column, else 0. */ +byte is_ladder_close(byte actor_x, byte ladder_pos) { + byte lx; + if (!ladder_pos) return 0; + lx = ladder_pos * 8; + /* Mount X is lx-4 (art is left-biased in the 16px sprite). Accept near that. */ + if ((byte)(actor_x + 8 - lx) < 16) return lx; + return 0; +} + +byte get_closest_ladder(byte px, byte li) { + byte x1, x2; + if (li >= MAX_LEVELS) return 0; + x1 = is_ladder_close(px, levels[li].ladder1); + x2 = is_ladder_close(px, levels[li].ladder2); + if (x1 && x2) { + byte c1 = x1 + 4; + byte c2 = x2 + 4; + byte mid = px + 8; /* approx sprite center */ + return (iabs8((sbyte)(mid - c1)) <= iabs8((sbyte)(mid - c2))) ? x1 : x2; + } + if (x1) return x1; + return x2; +} + +byte mount_ladder(Actor* p, sbyte level_adjust) { + byte x; + byte li = (byte)(p->level + level_adjust); + if (level_adjust < 0 && p->level == 0) return 0; + x = get_closest_ladder(p->x, li); + if (x) { + /* Sprite content center ~8; ladder tile center lx+4 → draw at lx-4 */ + p->x = x - 4; + p->state = CLIMBING; + p->level = li; + return 1; + } + return 0; +} + +byte actor_shape(Actor* a) { + switch (a->state) { + case WALKING: + return (a->x & 4) ? SP_WALK1 : SP_WALK0; + case CLIMBING: + /* Alternate baked frames — do not HW-flip (art is off-center). */ + return (a->yy & 4) ? SP_CLIMB1 : SP_CLIMB0; + case JUMPING: + return SP_JUMP; + case FALLING: + return SP_FALL; + default: + return SP_WALK0; + } +} + +byte actor_flip(Actor* a) { + /* Facing only; climb uses a mirrored ROM frame instead of flipX. */ + if (a->state == CLIMBING) return 0; + return a->dir ? FLIP_X : 0; +} + +void draw_actors(void) { + byte i; + for (i = 0; i < MAX_ACTORS; i++) { + Actor* a = &actors[i]; + int screen_py; + byte sx, sy; + if (a->state == INACTIVE) { + hide_sprite(i); + a->onscreen = 0; + continue; + } + screen_py = (int)(a->yy) - (int)scroll_y * 8; + sy = (byte)(VIEW_Y0 * 8 + (VIEW_H * 8 - 16) - screen_py); + sx = a->x; + if (screen_py < -16 || screen_py > VIEW_H * 8 + 8) { + hide_sprite(i); + a->onscreen = 0; + continue; + } + set_sprite_ex(i, actor_shape(a), + i ? PAL_PINK : PAL_YELLOW, sx, sy, actor_flip(a)); + a->onscreen = 1; + } +} + +void refresh_screen(void) { + draw_screen(); + draw_actors(); +} + +/* Keep player near vertical center; scroll as far as the tower allows. */ +void keep_player_in_view(void) { + Actor* p = &actors[0]; + byte maxs = max_scroll_y(); + byte changed = 0; + int screen_py; + byte target = VIEW_H * 4; /* center-ish in world pixels within view */ + + for (;;) { + screen_py = (int)p->yy - (int)scroll_y * 8; + if (screen_py > (int)target + 16 && scroll_y < maxs) { + scroll_y++; + changed = 1; + continue; + } + if (screen_py < (int)target - 24 && scroll_y > 0) { + scroll_y--; + changed = 1; + continue; + } + break; + } + if (changed) refresh_screen(); +} + +void fall_down(Actor* a) { + if (a->level == 0) return; + a->level--; + a->state = FALLING; + a->xvel = 0; + a->yvel = 0; + sound_enable = 1; + sound_voice(0, 0x600, 10, 3); +} + +void move_actor(Actor* a, byte joy, byte do_scroll) { + /* Lock is player-only (shared flag); enemies must not clear/set it. */ + if (do_scroll && !(joy & 0x01)) climb_up_lock = 0; + + switch (a->state) { + case WALKING: + if (joy & 0x10) { + a->state = JUMPING; + a->xvel = 0; + a->yvel = 12; + if (joy & 0x02) a->xvel = -1; + if (joy & 0x04) a->xvel = 1; + if (do_scroll) sound_beep(0x1400, 2); + } else if (joy & 0x02) { + if (a->x > 8) a->x--; + a->dir = 1; + } else if (joy & 0x04) { + if (a->x < 208) a->x++; + a->dir = 0; + } else if ((joy & 0x01) && (!do_scroll || !climb_up_lock)) { + mount_ladder(a, 0); + } else if (joy & 0x08) { + mount_ladder(a, -1); + } + break; + case CLIMBING: + if (joy & 0x01) { + if (a->yy >= get_ceiling_yy(a->level)) { + if (a->level < TOP_LEVEL) a->level++; + a->yy = get_floor_yy(a->level); + a->state = WALKING; + if (do_scroll) climb_up_lock = 1; + } else { + a->yy += 2; + } + } else if (joy & 0x08) { + if (a->yy <= get_floor_yy(a->level)) { + a->state = WALKING; + } else { + a->yy -= 2; + } + } + break; + case JUMPING: + case FALLING: + a->x += a->xvel; + if (a->x < 8) a->x = 8; + if (a->x > 208) a->x = 208; + a->yy += (a->yvel > 0) ? (a->yvel >> 2) : -((-a->yvel) >> 2); + a->yvel -= 1; + if ((sbyte)a->yvel < -12) a->yvel = -12; + if (a->yy <= get_floor_yy(a->level)) { + a->yy = get_floor_yy(a->level); + a->state = WALKING; + sound_voice(0, 0, 0, 0); + sound_beep(0x900, 1); + } + break; + default: + break; + } + if (a->state == WALKING && is_in_gap(a->x, levels[a->level].gap)) + fall_down(a); + if (do_scroll) keep_player_in_view(); +} + +byte read_joy(void) { + byte j = 0; + if (UP1) j |= 0x01; + if (LEFT1) j |= 0x02; + if (RIGHT1) j |= 0x04; + if (DOWN1) j |= 0x08; + if (FIRE1) j |= 0x10; + return j; +} + +byte check_collision(Actor* p) { + byte i; + for (i = 1; i < MAX_ACTORS; i++) { + Actor* b = &actors[i]; + if (!b->onscreen) continue; + if (p->level == b->level && + dist8(p->yy, b->yy) < 10 && + iabs8((sbyte)(p->x - b->x)) < 12) + return 1; + } + return 0; +} + +void play_scene(void) { + byte i; + for (i = 0; i < MAX_ACTORS; i++) { + actors[i].state = INACTIVE; + actors[i].onscreen = 0; + } + actors[0].state = WALKING; + actors[0].x = 64; + actors[0].yy = get_floor_yy(0); + actors[0].level = 0; + actors[0].dir = 0; + climb_up_lock = 0; + scroll_y = 0; + create_actors_on_level(2); + create_actors_on_level(4); + wait_vblank(); + refresh_screen(); + + while (actors[0].level < TOP_LEVEL) { + wait_vblank(); + move_actor(&actors[0], read_joy(), 1); + for (i = 1; i < MAX_ACTORS; i++) { + byte j = 0; + if (actors[i].state == INACTIVE) continue; + if (actors[i].dir) j |= 0x02; else j |= 0x04; + if ((rand8() & 31) == 0) actors[i].dir ^= 1; + if ((rand8() & 63) == 0) j |= 0x10; + move_actor(&actors[i], j, 0); + } + if (actors[0].level > 0 && check_collision(&actors[0])) + fall_down(&actors[0]); + draw_actors(); + draw_hud(); + watchdog = 0; + } + + /* Standing on the yellow top floor */ + sound_beep(0x1800, 4); + sound_beep(0x1c00, 4); + sound_beep(0x2000, 8); + clrscr(0); + hide_all_sprites(); + put_string(10, 16, "YOU WIN", PAL_YELLOW); + put_string(6, 20, "PRESS START", PAL_CYAN); +} + +void main(void) { + video_framecount = 0; + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + watchdog = 0; + sound_off(); + + for (;;) { + clrscr(0); + hide_all_sprites(); + put_string(8, 14, "CLIMBER", PAL_YELLOW); + put_string(4, 18, "PRESS START", PAL_CYAN); + put_string(2, 22, "SPACE JUMPS", PAL_PINK); + put_string(2, 24, "REACH TOP LV", PAL_ORANGE); + while (!START1) { wait_vblank(); watchdog = 0; } + while (START1) { wait_vblank(); watchdog = 0; } + make_levels(); + play_scene(); + while (!START1) { wait_vblank(); watchdog = 0; } + } +} + +/* ==== PACMAN GFX BEGIN (per-file; regenerate: scripts/gen_pacman_gfx.py) ==== */ +/* Graphics + sound waves private to climber.c — edit without affecting other demos. */ +/* Color PROM */ +const byte __at(0x6000) color_prom[32] = /*{pal:"pacman",n:32}*/ { + 0x00,0x07,0x66,0xef,0x00,0xf8,0xea,0x6f,0x00,0x3f,0x00,0xc9,0x38,0xaa,0xaf,0xf6, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Asset-editor palette slices */ +const byte editor_pals[52] = /*{pal:"pacman",layout:"pacman"}*/ { + 0x00,0xf6,0xc9,0x07,0x00,0xf6,0xc9,0xef,0x00,0xf6,0xc9,0xf8,0x00,0xf6,0xc9,0x6f, + 0x00,0xc9,0x07,0x3f,0x00,0xaf,0x00,0xc9,0x00,0x38,0xc9,0xaf,0x00,0x38,0xf6,0x07, + 0x00,0x00,0x00,0x00,0x00,0x07,0x66,0xf6,0x00,0x6f,0x38,0x66,0x00,0xf6,0xc9,0x00, + 0x00,0x00,0x00,0x00, +}; + +/* Palette PROM */ +const byte __at(0x6100) palette_prom[256] = { + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x03, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x05,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x07, + 0x00,0x00,0x00,0x00,0x00,0x0b,0x01,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x01,0x0c,0x0f, + 0x00,0x0e,0x00,0x0b,0x00,0x0c,0x0b,0x0e,0x00,0x0c,0x0f,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x0f,0x00,0x07,0x0c,0x02,0x00,0x09,0x06,0x0f,0x00,0x0d,0x0c,0x0f, + 0x00,0x05,0x03,0x09,0x00,0x0f,0x0b,0x00,0x00,0x0e,0x00,0x0b,0x00,0x0e,0x00,0x0b, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x01,0x00,0x0f,0x0b,0x0e,0x00,0x0e,0x00,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* WSG waveforms: 8 waves × 32 samples (0..15). Select with sound_voice(..., wave). */ +const byte __at(0x6200) wave_rom[256] = /*{w:32,h:1,count:8,bpp:8}*/ { + 0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x09, + 0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, + 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07, + 0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x08,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x07,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, +}; + +/* Tile ROM (arcade font + this demo's homebrew tiles) */ +const byte __at(0x4000) tile_rom[4096] = /*{w:8,h:8,count:256,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x88,0xee, + 0xff,0x44,0x44,0x44,0x44,0x44,0x44,0xff,0xff,0x44,0x44,0x44,0x44,0x44,0x44,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Sprite ROM (this demo's homebrew sprites) */ +const byte __at(0x5000) sprite_rom[4096] = /*{w:16,h:16,count:64,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0b,0x00,0x00,0x00,0x00,0x08,0x0c,0x0c,0x0f, + 0x3c,0x0e,0x3c,0x3c,0x00,0x00,0x00,0x00,0x0f,0x0f,0x07,0x00,0x00,0x00,0x00,0x00, + 0x4b,0x4b,0x43,0x03,0x70,0x70,0x00,0x00,0x0f,0x0f,0x0f,0x08,0xc0,0xc0,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x10,0x34,0x3c,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0f, + 0x00,0x00,0x00,0x02,0x03,0x01,0x08,0x0b,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0f, + 0x2c,0x08,0x18,0x3c,0x2c,0x00,0x00,0x00,0x0f,0x0f,0x07,0x00,0x00,0x00,0x00,0x00, + 0x4b,0x4b,0x43,0x03,0x70,0x70,0x00,0x00,0x0f,0x0f,0x0f,0x09,0xc0,0xc0,0x06,0x00, + 0x00,0x00,0x00,0x40,0xc0,0xc0,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x07,0x0f,0x0f, + 0x00,0x00,0x08,0x0c,0x06,0x07,0x78,0xf0,0x00,0x00,0x00,0x00,0x03,0x0f,0xc3,0xc2, + 0x00,0x0c,0x3c,0x3c,0x10,0x00,0x00,0x00,0x0f,0x0f,0x07,0x00,0x00,0x00,0x00,0x00, + 0xf0,0x78,0x07,0x03,0x01,0x00,0x00,0x00,0xc2,0xc3,0x0f,0x08,0x0c,0x00,0x00,0x00, + 0x00,0x00,0x00,0x10,0x3c,0x3c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0f,0x0f, + 0x00,0x00,0x00,0x01,0x03,0x07,0x78,0xf0,0x00,0x00,0x00,0x0c,0x08,0x0f,0xc3,0xc2, + 0x00,0x00,0xc0,0xc0,0x40,0x00,0x00,0x00,0x0f,0x0f,0x07,0x00,0x03,0x03,0x00,0x00, + 0xf0,0x78,0x07,0x06,0x0c,0x08,0x00,0x00,0xc2,0xc3,0x0f,0x03,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x20,0x68,0x68,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0f, + 0x00,0x00,0x00,0x03,0x03,0x01,0x09,0x0b,0x00,0x00,0x00,0x00,0x08,0x09,0x09,0x0f, + 0x08,0x08,0x0e,0x0e,0x60,0x70,0x00,0x00,0x0f,0x0f,0x07,0x00,0x00,0x00,0x00,0x00, + 0x4b,0x4b,0x43,0x03,0x70,0x70,0x00,0x00,0x0f,0x0f,0x0f,0x09,0xc0,0xc0,0x00,0x00, + 0x00,0x00,0x00,0x20,0x68,0x68,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0b,0x08, + 0x00,0x06,0x03,0x01,0x01,0x03,0x5a,0x5a,0x00,0x00,0x00,0x08,0x08,0x0f,0xc3,0x4b, + 0x00,0x00,0x08,0x68,0x68,0x20,0x00,0x00,0x08,0x0b,0x07,0x00,0x00,0x00,0x00,0x00, + 0x5a,0x5a,0x03,0x03,0x03,0x06,0x0c,0x00,0x4b,0xc3,0x0f,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +/* ==== PACMAN GFX END ==== */ diff --git a/presets/pacman/hello.c b/presets/pacman/hello.c index db94cd8d..73d44431 100644 --- a/presets/pacman/hello.c +++ b/presets/pacman/hello.c @@ -1,223 +1,666 @@ -#include +/* + * Pac-Man hardware "Hello" example for 8bitworkshop + * + * Uses arcade font tiles + homebrew sprites/utility tiles. + * Graphics for this file are appended at the bottom (private copy). + */ +//#link "pacman_common.c" +#include "pacman_common.h" -typedef unsigned char byte; -typedef unsigned short word; -typedef signed char sbyte; - -// Forward declaration -void main(); - -// Startup function - sets up stack pointer and calls main -void start() __naked { +/* Startup + NMI @ 0x0066 (must be in the main object so it links at 0x0000) */ +void start(void) __naked { __asm - LD SP,#0x4800 ; Set stack pointer to start of RAM - EI ; Enable interrupts -; copy initialized data to RAM - LD BC, #l__INITIALIZER - LD A, B - LD DE, #s__INITIALIZED - LD HL, #s__INITIALIZER - LDIR - JP _main -; padding to get to offset 0x66 - .ds 0x66 - (. - _start) + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + jp _main + .ds 0x66 - (. - _start) + push af + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + pop af + retn __endasm; } -// Hardware memory addresses for Pacman -volatile byte __at (0x4000) vram[32][36]; // Video RAM - rotated layout! -volatile byte __at (0x4400) cram[32][36]; // Color RAM - -struct { - byte shape; - byte color; -} __at (0x4FF0) sprites[8]; - -struct { - byte xpos; - byte ypos; -} __at (0x5060) sprite_coords[8]; - -byte __at (0x4800) ram[0x7F0]; - -// Hardware control registers -volatile byte __at (0x5000) interrupt_enable; -volatile byte __at (0x5001) sound_enable; -volatile byte __at (0x5003) flip_screen; - -// Input ports (memory mapped, active low) -volatile byte __at (0x5000) input0; // IN0: joystick + coins -volatile byte __at (0x5040) input1; // IN1: start buttons + service - -// Input macros for Pacman controls (active low) - using direct register access -#define UP1 !(input0 & 0x1) -#define LEFT1 !(input0 & 0x2) -#define RIGHT1 !(input0 & 0x4) -#define DOWN1 !(input0 & 0x8) -#define COIN1 !(input0 & 0x20) -#define COIN2 !(input0 & 0x40) -#define START1 !(input1 & 0x20) -#define START2 !(input1 & 0x40) - -volatile byte video_framecount; // actual framecount - -// starts at address 0x66 - VBLANK interrupt handler -void rst_66() __interrupt { - video_framecount++; -} +void main(void) { + byte x, y, frame; -// Watchdog register -volatile byte __at (0x50C0) watchdog; + x = 10; + y = 20; + frame = 0; + video_framecount = 0; -// Palette data (32 colors, 4-bit RGB) -const char __at (0x6000) palette[32] = {/*{pal:444}*/ - 0x000,0xf00,0x0f0,0xff0,0x00f,0xf0f,0x0ff,0xfff, - 0x888,0xf88,0x8f8,0xff8,0x88f,0xf8f,0x8ff,0xddd, - 0x111,0x500,0x050,0x550,0x005,0x505,0x055,0x777, - 0x333,0xd33,0x3d3,0xdd3,0x33d,0xd3d,0x3dd,0xbbb, -}; + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + watchdog = 0; -// Character ROM data (128 characters, 8x8 pixels, 2 bits per pixel, 8KB total) -const char __at (0x4000) charrom[0x2000] = {/*{w:8,h:8,np:2,count:128,brev:1}*/ - // Character 0: space - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Character 1: simple filled square - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Character 2: hollow square - 0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Character 3: cross pattern - 0x18,0x18,0x18,0xff,0xff,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Character 4: diamond - 0x18,0x3c,0x7e,0xff,0xff,0x7e,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Character 5: Pacman-like circle - 0x3c,0x7e,0xe7,0xc3,0xc3,0xe7,0x7e,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Character 6: dot - 0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Character 7: small dot - 0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Rest fill with test patterns (first 16 characters) - 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xf0,0xf0,0xf0,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - // Fill remaining characters with zeros for now (can be expanded later) - // Total should be 128 * 16 = 2048 bytes (0x2000) for the full 8KB graphics ROM -}; + clrscr(0); + hide_all_sprites(); -#define BLANK 0x00 - -// Clear screen -void clrscr() { - word i; - for (i = 0; i < 0x400; i++) { - ((byte*)0x4000)[i] = BLANK; // blank character - ((byte*)0x4400)[i] = 0x0f; // white on black - - // Kick watchdog every 64 iterations to prevent timeout during long clear - if ((i & 63) == 0) { - watchdog = 0; - } - } -} + put_string(1, 1, "ABCDEFGHIJKLMNOPQRSTUVWX", PAL_CYAN); + put_string(2, 2, "YZ 0123456789", PAL_PINK); + put_string(4, 4, "HELLO PAC MAN", PAL_YELLOW); -// Put character at screen position (simplified mapping for now) -void my_putchar(byte x, byte y, byte ch) { - word addr; - - // Simple linear mapping for now - if (x < 28 && y < 36) { - addr = y * 32 + x + 2; // basic offset - if (addr < 0x400) { - ((byte*)0x4000)[addr] = ch; - ((byte*)0x4400)[addr] = 0x0f; // white on black - } - } -} + poke_tile(4, 8, T_DOT, PAL_ORANGE); + poke_tile(6, 8, T_POWER, PAL_ORANGE); + poke_tile(8, 8, T_WALL_H, PAL_BLUE); + poke_tile(10, 8, T_WALL_V, PAL_BLUE); + poke_tile(12, 8, T_WALL_TL, PAL_BLUE); + poke_tile(14, 8, T_WALL_BR, PAL_BLUE); -// Put string at position -void putstring(byte x, byte y, char* str) { - byte i; - i = 0; - while (str[i] && i < 20) { - my_putchar(x + i, y, str[i]); - i++; - } -} + set_sprite(0, S_PLAYER, PAL_YELLOW, 96, 120); + set_sprite(1, S_ALIEN, PAL_PINK, 128, 120); + set_sprite(2, S_ALIEN, PAL_CYAN, 160, 120); -// Main program -void main() { - // Declare all variables at start of function (old C requirement) - byte x, y, frame, old_frame; - - // Initialize variables - x = 10; - y = 20; - frame = 0; - - // Initialize hardware - interrupt_enable = 1; // Enable interrupts - sound_enable = 1; // Enable sound - flip_screen = 0; // Normal orientation - - // Clear screen - clrscr(); - - // Test pattern - show some test characters - my_putchar(4, 4, 0x01); // test character 1 - my_putchar(6, 4, 0x02); // test character 2 - my_putchar(8, 4, 0x03); // test character 3 - my_putchar(10, 4, 0x04); // test character 4 - my_putchar(12, 4, 0x05); // test character 5 - my_putchar(14, 4, 0x06); // test character 6 - - // Main game loop - now with proper interrupt-driven frame sync while (1) { - // Kick the watchdog to prevent reset - watchdog = 0; - - // Debug: show we're in the main loop - my_putchar(2, 28, 0x01 + (frame & 3)); - - // Wait for frame - now using interrupt-driven counter - old_frame = video_framecount; - while (video_framecount == old_frame) { - // Kick watchdog while waiting too - watchdog = 0; - } + wait_vblank(); frame++; - - // Clear old position - my_putchar(x, y, BLANK); - - // Debug: test input reads - my_putchar(24, 30, input0 & 0x1 ? 0x00 : 0x01); // UP indicator - my_putchar(24, 31, input0 & 0x4 ? 0x00 : 0x01); // RIGHT indicator - my_putchar(24, 32, input0 & 0x8 ? 0x00 : 0x01); // DOWN indicator - my_putchar(24, 33, input0 & 0x2 ? 0x00 : 0x01); // LEFT indicator - - // Handle input + + poke_tile(x, y, T_BLANK, 0); + if (UP1 && y > 2) y--; - if (DOWN1 && y < 34) y++; - if (LEFT1 && x > 2) x--; - if (RIGHT1 && x < 26) x++; - - // Draw player at new position - my_putchar(x, y, 0x05); // player character - - // Show status - my_putchar(2, 30, 0x01 + (frame & 7)); - - if (START1) { - my_putchar(2, 32, 0x02); // show test character - } - - if (COIN1) { - my_putchar(2, 34, 0x04); // show test character - } + if (DOWN1 && y < 33) y++; + if (LEFT1 && x > 0) x--; + if (RIGHT1 && x < 27) x++; + + poke_tile(x, y, T_CIRCLE, PAL_YELLOW); + + poke_tile(2, 30, (byte)('0' + (frame & 7)), PAL_CYAN); + poke_tile(24, 30, UP1 ? 'U' : T_BLANK, PAL_PINK); + poke_tile(24, 31, RIGHT1 ? 'R' : T_BLANK, PAL_PINK); + poke_tile(24, 32, DOWN1 ? 'D' : T_BLANK, PAL_PINK); + poke_tile(24, 33, LEFT1 ? 'L' : T_BLANK, PAL_PINK); + + if (START1) put_string(2, 32, "START", PAL_CYAN); + if (COIN1) put_string(2, 34, "COIN", PAL_ORANGE); + if (FIRE1) put_string(2, 33, "FIRE", PAL_PINK); + + set_sprite(0, S_PLAYER, PAL_YELLOW, (byte)(x * 8), (byte)(y * 8)); } } +/* ==== PACMAN GFX BEGIN (per-file; regenerate: scripts/gen_pacman_gfx.py) ==== */ +/* Graphics + sound waves private to hello.c — edit without affecting other demos. */ +/* Color PROM */ +const byte __at(0x6000) color_prom[32] = /*{pal:"pacman",n:32}*/ { + 0x00,0x07,0x66,0xef,0x00,0xf8,0xea,0x6f,0x00,0x3f,0x00,0xc9,0x38,0xaa,0xaf,0xf6, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Asset-editor palette slices */ +const byte editor_pals[52] = /*{pal:"pacman",layout:"pacman"}*/ { + 0x00,0xf6,0xc9,0x07,0x00,0xf6,0xc9,0xef,0x00,0xf6,0xc9,0xf8,0x00,0xf6,0xc9,0x6f, + 0x00,0xc9,0x07,0x3f,0x00,0xaf,0x00,0xc9,0x00,0x38,0xc9,0xaf,0x00,0x38,0xf6,0x07, + 0x00,0x00,0x00,0x00,0x00,0x07,0x66,0xf6,0x00,0x6f,0x38,0x66,0x00,0xf6,0xc9,0x00, + 0x00,0x00,0x00,0x00, +}; + +/* Palette PROM */ +const byte __at(0x6100) palette_prom[256] = { + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x03, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x05,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x07, + 0x00,0x00,0x00,0x00,0x00,0x0b,0x01,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x01,0x0c,0x0f, + 0x00,0x0e,0x00,0x0b,0x00,0x0c,0x0b,0x0e,0x00,0x0c,0x0f,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x0f,0x00,0x07,0x0c,0x02,0x00,0x09,0x06,0x0f,0x00,0x0d,0x0c,0x0f, + 0x00,0x05,0x03,0x09,0x00,0x0f,0x0b,0x00,0x00,0x0e,0x00,0x0b,0x00,0x0e,0x00,0x0b, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x01,0x00,0x0f,0x0b,0x0e,0x00,0x0e,0x00,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* WSG waveforms: 8 waves × 32 samples (0..15). Select with sound_voice(..., wave). */ +const byte __at(0x6200) wave_rom[256] = /*{w:32,h:1,count:8,bpp:8}*/ { + 0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x09, + 0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, + 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07, + 0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x07,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, +}; + +/* Tile ROM (arcade font + this demo's homebrew tiles) */ +const byte __at(0x4000) tile_rom[4096] = /*{w:8,h:8,count:256,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x44,0xaa,0x00,0x88,0x88,0x00,0xaa,0x44,0x33,0x77,0xdd,0xff,0xff,0xdd,0x77,0x33, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x88,0xcc,0xcc,0x88,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x11,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xcc,0xee,0xee,0xee,0xee,0xcc,0x00,0x00,0x33,0x77,0x77,0x77,0x77,0x33,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x44,0x44,0x44,0x66,0x33,0x11,0x00, + 0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x66,0x44,0x44,0x44,0x00, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00, + 0x00,0x22,0x22,0x22,0x66,0xcc,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00, + 0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x00, + 0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Sprite ROM (this demo's homebrew sprites) */ +const byte __at(0x5000) sprite_rom[4096] = /*{w:16,h:16,count:64,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x22,0x66,0x55,0x44, + 0x00,0x00,0x00,0xff,0x00,0x00,0x66,0x44,0x00,0x00,0x00,0x00,0x88,0xcc,0x44,0x44, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x55,0x66,0x22,0x11,0x00,0x00,0x00, + 0x44,0x66,0x00,0x00,0xff,0x00,0x00,0x00,0x44,0x44,0xcc,0x88,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x66,0x33,0x11,0x11, + 0x00,0x00,0x33,0x77,0xee,0xbb,0xff,0xff,0x00,0x00,0x11,0xaa,0xcc,0xee,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x33,0x66,0x44,0x00,0x00,0x00, + 0xff,0xff,0xbb,0xee,0x77,0x33,0x00,0x00,0x00,0x00,0xee,0xcc,0xaa,0x11,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x00,0x00,0x00,0x11,0x33,0x77,0x77,0x77, + 0x00,0x00,0x77,0xff,0xff,0xff,0xff,0x33,0x00,0x00,0x88,0xee,0xff,0xff,0xff,0xff, + 0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x11,0x00,0x00,0x00, + 0x33,0xff,0xff,0xff,0xff,0x77,0x00,0x00,0xff,0xff,0xff,0xff,0xee,0x88,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +/* ==== PACMAN GFX END ==== */ diff --git a/presets/pacman/music.c b/presets/pacman/music.c new file mode 100644 index 00000000..cbd58bf5 --- /dev/null +++ b/presets/pacman/music.c @@ -0,0 +1,980 @@ +/* + * Multi-voice music demo for Pac-Man WSG. + * Score + player logic ported from presets/coleco/musicplayer.c + * ("Making Arcade Games in C" style note stream). + * + * Music advances in the VBlank NMI so tempo stays steady while the + * main loop draws meters / handles input. + * + * Controls: Start restarts the tune. Left/Right pick waveform 0-7. + */ +//#link "pacman_common.c" +#include "pacman_common.h" + +void music_update(void); + +void start(void) __naked { +__asm + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + jp _main + .ds 0x66 - (. - _start) + ; NMI @ 0x0066 — frame tick + music player + push af + push bc + push de + push hl + push ix + push iy + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + call _music_update + pop iy + pop ix + pop hl + pop de + pop bc + pop af + retn +__endasm; +} + +/* Note → WSG frequency (voice-0 scale, ≈ Hz * 11). Same indexing as Coleco. */ +const word note_table[64] = { + 1126, 597, 632, 670, 710, 752, 796, 844, + 894, 947, 1003, 1063, 1126, 597, 632, 670, + 710, 752, 796, 844, 894, 947, 1003, 1063, + 1126, 1193, 1264, 1339, 1419, 1503, 1593, 1688, + 1788, 1894, 2007, 2126, 2253, 2387, 2529, 2679, + 2838, 3007, 3186, 3375, 3576, 3789, 4013, 4253, + 4505, 4773, 5057, 5357, 5676, 6013, 6372, 6750, + 7153, 7577, 8028, 8503, 9009, 9545, 10113, 10718, +}; + +struct { + byte volume; +} voice[3]; + +byte cur_duration; +byte music_wave; +volatile byte music_enable; +static const byte* music_ptr; + +/* Compact score: note bytes (<0x80) then duration bytes (>=0x80); 0xff = end */ +const byte music1[] = { + 0x35,0x41,0x8a,0x37,0x43,0x8a,0x33,0x3f,0x8a,0x30,0x3c,0x94,0x3e,0x32,0x8a,0x3a, + 0x2e,0x94,0x35,0x29,0x8a,0x37,0x2b,0x8a,0x33,0x27,0x8a,0x30,0x24,0x94,0x32,0x26, + 0x8a,0x2e,0x22,0x94,0x29,0x1d,0x8a,0x2b,0x1f,0x8a,0x27,0x1b,0x8a,0x24,0x18,0x94, + 0x1a,0x26,0x8a,0x18,0x24,0x8a,0x17,0x23,0x8a,0x16,0x22,0xa8,0x3a,0x35,0x32,0x94, + 0x29,0x26,0x22,0x8a,0x2a,0x8a,0x2b,0x1b,0x8a,0x33,0x8a,0x22,0x1f,0x27,0x8a,0x2b, + 0x8a,0x33,0x22,0x16,0x94,0x2b,0x27,0x25,0x8a,0x33,0x8a,0x20,0x14,0x94,0x27,0x24, + 0x94,0x1f,0x13,0x8a,0x3f,0x37,0x33,0x8a,0x38,0x35,0x41,0x8a,0x42,0x39,0x36,0x8a, + 0x43,0x3a,0x37,0x8a,0x3f,0x37,0x33,0x8a,0x35,0x41,0x38,0x8a,0x3a,0x37,0x43,0x8a, + 0x16,0x8a,0x3e,0x35,0x32,0x8a,0x41,0x38,0x35,0x94,0x3f,0x33,0x37,0x94,0x1f,0x22, + 0x27,0x94,0x27,0x22,0x1f,0x94,0x29,0x26,0x22,0x8a,0x2a,0x8a,0x2b,0x1b,0x8a,0x33, + 0x8a,0x1f,0x22,0x27,0x8a,0x2b,0x8a,0x33,0x22,0x16,0x94,0x2b,0x27,0x25,0x8a,0x33, + 0x8a,0x20,0x14,0x94,0x24,0x27,0x94,0x1f,0x13,0x94,0x3c,0x33,0x30,0x8a,0x3a,0x33, + 0x2e,0x8a,0x39,0x33,0x2d,0x8a,0x3c,0x30,0x8a,0x3f,0x33,0x1d,0x8a,0x43,0x37,0x8a, + 0x1d,0x8a,0x41,0x35,0x8a,0x3f,0x33,0x27,0x8a,0x3c,0x30,0x8a,0x41,0x35,0x38,0x94, + 0x22,0x16,0x94,0x24,0x18,0x94,0x29,0x26,0x1a,0x8a,0x2a,0x8a,0x2b,0x1b,0x8a,0x33, + 0x8a,0x27,0x22,0x1f,0x8a,0x2b,0x8a,0x33,0x16,0x22,0x94,0x2b,0x27,0x25,0x8a,0x33, + 0x8a,0x20,0x14,0x94,0x27,0x24,0x94,0x13,0x1f,0x8a,0x3f,0x33,0x37,0x8a,0x41,0x38, + 0x35,0x8a,0x42,0x39,0x36,0x8a,0x37,0x3a,0x43,0x8a,0x3f,0x37,0x33,0x8a,0x41,0x38, + 0x35,0x8a,0x43,0x3a,0x37,0x8a,0x16,0x8a,0x3e,0x35,0x32,0x8a,0x41,0x38,0x35,0x94, + 0x3f,0x37,0x33,0x94,0x27,0x22,0x1f,0x94,0x2b,0x27,0x22,0x94,0x3f,0x33,0x8a,0x41, + 0x35,0x8a,0x43,0x37,0x27,0x8a,0x3f,0x33,0x8a,0x41,0x35,0x2b,0x8a,0x43,0x37,0x8a, + 0x25,0x19,0x8a,0x3f,0x33,0x8a,0x41,0x35,0x2b,0x8a,0x3f,0x33,0x8a,0x43,0x37,0x24, + 0x8a,0x3f,0x33,0x8a,0x41,0x35,0x2c,0x8a,0x43,0x37,0x8a,0x23,0x17,0x8a,0x3f,0x33, + 0x8a,0x41,0x35,0x2c,0x8a,0x3f,0x33,0x8a,0x3a,0x37,0x43,0x8a,0x3f,0x37,0x33,0x8a, + 0x41,0x38,0x35,0x8a,0x43,0x3a,0x37,0x8a,0x16,0x8a,0x3e,0x32,0x35,0x8a,0x41,0x35, + 0x38,0x94,0x3f,0x33,0x37,0x94,0x22,0x16,0x94,0x24,0x18,0x94,0x29,0x26,0x1a,0x8a, + 0x2a,0x8a,0x2b,0x1b,0x8a,0x33,0x8a,0x27,0x22,0x1f,0x8a,0x2b,0x8a,0x33,0x22,0x16, + 0x94,0x2b,0x25,0x22,0x8a,0x33,0x8a,0x20,0x14,0x94,0x27,0x24,0x94,0x1f,0x13,0x8a, + 0x3f,0x37,0x33,0x8a,0x35,0x41,0x38,0x8a,0x42,0x39,0x36,0x8a,0x43,0x3a,0x37,0x8a, + 0x3f,0x37,0x33,0x8a,0x38,0x35,0x41,0x8a,0x43,0x3a,0x37,0x8a,0x16,0x8a,0x3e,0x35, + 0x32,0x8a,0x35,0x41,0x38,0x94,0x37,0x33,0x3f,0x94,0x27,0x22,0x1f,0x94,0x27,0x22, + 0x1f,0x94,0x29,0x26,0x22,0x8a,0x2a,0x8a,0x2b,0x1b,0x8a,0x33,0x8a,0x22,0x1f,0x27, + 0x8a,0x2b,0x8a,0x33,0x22,0x16,0x94,0x2b,0x27,0x25,0x8a,0x33,0x8a,0x20,0x14,0x94, + 0x27,0x24,0x94,0x1f,0x13,0x94,0x3c,0x33,0x30,0x8a,0x3a,0x33,0x2e,0x8a,0x2d,0x33, + 0x39,0x8a,0x3c,0x30,0x8a,0x3f,0x33,0x27,0x8a,0x43,0x37,0x8a,0x1d,0x8a,0x41,0x35, + 0x8a,0x33,0x3f,0x27,0x8a,0x3c,0x30,0x8a,0x41,0x38,0x35,0x94,0x22,0x16,0x94,0x24, + 0x18,0x94,0x29,0x26,0x1a,0x8a,0x2a,0x8a,0x2b,0x1b,0x8a,0x33,0x8a,0x22,0x27,0x1f, + 0x8a,0x2b,0x8a,0x33,0x22,0x16,0x94,0x2b,0x27,0x25,0x8a,0x33,0x8a,0x20,0x14,0x94, + 0x24,0x27,0x94,0x1f,0x13,0x8a,0x3f,0x37,0x33,0x8a,0x41,0x38,0x35,0x8a,0x36,0x39, + 0x42,0x8a,0x43,0x3a,0x37,0x8a,0x3f,0x37,0x33,0x8a,0x41,0x38,0x35,0x8a,0x37,0x43, + 0x3a,0x8a,0x16,0x8a,0x3e,0x35,0x32,0x8a,0x41,0x38,0x35,0x94,0x33,0x37,0x3f,0x94, + 0x27,0x22,0x1f,0x94,0x22,0x27,0x2b,0x94,0x3f,0x33,0x8a,0x41,0x35,0x8a,0x43,0x37, + 0x27,0x8a,0x3f,0x33,0x8a,0x41,0x35,0x2b,0x8a,0x43,0x37,0x8a,0x25,0x19,0x8a,0x3f, + 0x33,0x8a,0x41,0x35,0x2b,0x8a,0x3f,0x33,0x8a,0x43,0x37,0x24,0x8a,0x33,0x3f,0x8a, + 0x41,0x35,0x2c,0x8a,0x43,0x37,0x8a,0x23,0x17,0x8a,0x3f,0x33,0x8a,0x41,0x35,0x2c, + 0x8a,0x3f,0x33,0x8a,0x43,0x3a,0x37,0x8a,0x3f,0x37,0x33,0x8a,0x41,0x38,0x35,0x8a, + 0x37,0x3a,0x43,0x8a,0x16,0x8a,0x3e,0x35,0x32,0x8a,0x41,0x38,0x35,0x94,0x33,0x37, + 0x3f,0x94,0x22,0x16,0x94,0x1b,0x0f,0x8a,0x37,0x2b,0x33,0x8a,0x38,0x2c,0x35,0x8a, + 0x39,0x36,0x2d,0x8a,0x3a,0x37,0x2e,0x94,0x3c,0x37,0x30,0x8a,0x3a,0x2e,0x37,0x8a, + 0x16,0x8a,0x37,0x33,0x2b,0x8a,0x2c,0x38,0x35,0x8a,0x39,0x36,0x2d,0x8a,0x3a,0x37, + 0x2e,0x94,0x3c,0x37,0x30,0x8a,0x2e,0x37,0x3a,0x8a,0x16,0x8a,0x37,0x8a,0x33,0x27, + 0x2b,0x8a,0x2e,0x8a,0x30,0x14,0x8a,0x32,0x8a,0x33,0x2c,0x27,0x8a,0x35,0x8a,0x37, + 0x20,0x8a,0x35,0x8a,0x33,0x2c,0x27,0x8a,0x35,0x8a,0x2e,0x1f,0x8a,0x37,0x8a,0x38, + 0x2b,0x27,0x8a,0x3a,0x8a,0x3c,0x16,0x8a,0x3a,0x8a,0x37,0x22,0x2b,0x8a,0x38,0x8a, + 0x3a,0x37,0x2e,0x94,0x3c,0x30,0x37,0x8a,0x3a,0x37,0x2e,0x8a,0x16,0x8a,0x37,0x33, + 0x2b,0x8a,0x38,0x2c,0x35,0x8a,0x39,0x36,0x2d,0x8a,0x3a,0x37,0x2e,0x94,0x3c,0x37, + 0x30,0x8a,0x2e,0x37,0x3a,0x8a,0x1f,0x8a,0x3a,0x8a,0x3c,0x1e,0x8a,0x3d,0x8a,0x3e, + 0x3a,0x35,0x8a,0x3e,0x35,0x3a,0x8a,0x22,0x29,0x26,0x8a,0x3e,0x33,0x39,0x8a,0x1d, + 0x8a,0x3c,0x8a,0x39,0x33,0x29,0x8a,0x35,0x8a,0x3a,0x32,0x29,0x94,0x20,0x14,0x94, + 0x1f,0x13,0x8a,0x37,0x2b,0x33,0x8a,0x38,0x35,0x2c,0x8a,0x39,0x36,0x2d,0x8a,0x2e, + 0x3a,0x37,0x94,0x3c,0x37,0x30,0x8a,0x3a,0x37,0x2e,0x8a,0x16,0x8a,0x33,0x2b,0x37, + 0x8a,0x38,0x35,0x2c,0x8a,0x39,0x36,0x2d,0x8a,0x3a,0x37,0x2e,0x94,0x30,0x37,0x3c, + 0x8a,0x3a,0x2e,0x37,0x8a,0x16,0x8a,0x37,0x8a,0x33,0x2b,0x27,0x8a,0x2e,0x8a,0x30, + 0x14,0x8a,0x32,0x8a,0x33,0x2c,0x27,0x8a,0x35,0x8a,0x37,0x20,0x8a,0x35,0x8a,0x33, + 0x23,0x2c,0x8a,0x35,0x8a,0x33,0x1f,0x94,0x2b,0x22,0x27,0x94,0x1b,0x8a,0x2e,0x8a, + 0x2d,0x2b,0x27,0x8a,0x2e,0x8a,0x33,0x2c,0x27,0x94,0x30,0x2c,0x27,0x8a,0x33,0x8a, + 0x21,0x24,0x2a,0x8a,0x30,0x8a,0x33,0x2a,0x27,0x8a,0x30,0x8a,0x2e,0x2b,0x27,0x8a, + 0x33,0x8a,0x37,0x2b,0x22,0x8a,0x3a,0x8a,0x2b,0x27,0x22,0x8a,0x37,0x8a,0x33,0x2b, + 0x27,0x8a,0x2e,0x8a,0x30,0x2d,0x1d,0x94,0x33,0x2d,0x24,0x94,0x37,0x2c,0x26,0x8a, + 0x35,0x2c,0x8a,0x26,0x22,0x8a,0x33,0x2b,0x8a,0x27,0x1b,0x94,0x22,0x16,0x94,0x1f, + 0x13,0x8a,0x43,0x3f,0x37,0x8a,0x44,0x41,0x38,0x8a,0x45,0x42,0x39,0x8a,0x3a,0x37, + 0x2e,0x94,0x3c,0x30,0x37,0x8a,0x3a,0x37,0x2e,0x8a,0x16,0x8a,0x37,0x33,0x2b,0x8a, + 0x38,0x2c,0x35,0x8a,0x39,0x36,0x2d,0x8a,0x3a,0x37,0x2e,0x94,0x3c,0x37,0x30,0x8a, + 0x2e,0x37,0x3a,0x8a,0x16,0x8a,0x37,0x8a,0x33,0x2b,0x27,0x8a,0x2e,0x8a,0x30,0x14, + 0x8a,0x32,0x8a,0x33,0x2c,0x27,0x8a,0x35,0x8a,0x37,0x20,0x8a,0x35,0x8a,0x33,0x23, + 0x27,0x8a,0x35,0x8a,0x2e,0x1f,0x8a,0x37,0x8a,0x38,0x27,0x2b,0x8a,0x3a,0x8a,0x3c, + 0x16,0x8a,0x3a,0x8a,0x37,0x2b,0x27,0x8a,0x38,0x8a,0x3a,0x37,0x2e,0x94,0x3c,0x30, + 0x37,0x8a,0x3a,0x37,0x2e,0x8a,0x16,0x8a,0x37,0x33,0x2b,0x8a,0x38,0x2c,0x35,0x8a, + 0x39,0x36,0x2d,0x8a,0x3a,0x37,0x2e,0x94,0x3c,0x37,0x30,0x8a,0x2e,0x37,0x3a,0x8a, + 0x1f,0x8a,0x3a,0x8a,0x3c,0x1e,0x8a,0x3d,0x8a,0x3e,0x3a,0x35,0x8a,0x3e,0x35,0x3a, + 0x8a,0x29,0x26,0x22,0x8a,0x3e,0x33,0x39,0x8a,0x1d,0x8a,0x3c,0x8a,0x39,0x33,0x27, + 0x8a,0x35,0x8a,0x3a,0x32,0x29,0x94,0x20,0x14,0x94,0x1f,0x13,0x8a,0x37,0x2b,0x33, + 0x8a,0x38,0x35,0x2c,0x8a,0x39,0x36,0x2d,0x8a,0x2e,0x3a,0x37,0x94,0x3c,0x37,0x30, + 0x8a,0x3a,0x37,0x2e,0x8a,0x16,0x8a,0x33,0x2b,0x37,0x8a,0x38,0x35,0x2c,0x8a,0x39, + 0x36,0x2d,0x8a,0x3a,0x37,0x2e,0x94,0x30,0x3c,0x37,0x8a,0x37,0x2e,0x3a,0x8a,0x16, + 0x8a,0x37,0x8a,0x33,0x2b,0x27,0x8a,0x2e,0x8a,0x30,0x14,0x8a,0x32,0x8a,0x33,0x27, + 0x24,0x8a,0x35,0x8a,0x37,0x20,0x8a,0x35,0x8a,0x33,0x2c,0x27,0x8a,0x35,0x8a,0x33, + 0x1f,0x94,0x2b,0x27,0x22,0x94,0x1b,0x8a,0x2e,0x8a,0x2d,0x2b,0x27,0x8a,0x2e,0x8a, + 0x33,0x2c,0x27,0x94,0x30,0x2c,0x20,0x8a,0x33,0x8a,0x2a,0x27,0x24,0x8a,0x30,0x8a, + 0x33,0x2a,0x27,0x8a,0x30,0x8a,0x2e,0x2b,0x22,0x8a,0x33,0x8a,0x37,0x2b,0x27,0x8a, + 0x3a,0x8a,0x2b,0x27,0x22,0x8a,0x37,0x8a,0x33,0x2b,0x22,0x8a,0x2e,0x8a,0x30,0x2d, + 0x27,0x94,0x33,0x2d,0x24,0x94,0x37,0x2c,0x26,0x8a,0x35,0x2c,0x8a,0x26,0x22,0x8a, + 0x33,0x2b,0x8a,0x27,0x1b,0x94,0x22,0x16,0x94,0x1b,0x0f,0x94,0x29,0x8a,0x2a,0x8a, + 0x2b,0x1b,0x8a,0x33,0x8a,0x27,0x1f,0x22,0x8a,0x2b,0x8a,0x33,0x22,0x16,0x94,0x2b, + 0x27,0x25,0x8a,0x33,0x8a,0x20,0x14,0x94,0x27,0x24,0x94,0x1f,0x13,0x8a,0x3f,0x37, + 0x33,0x8a,0x41,0x38,0x35,0x8a,0x42,0x39,0x36,0x8a,0x3a,0x37,0x43,0x8a,0x3f,0x37, + 0x33,0x8a,0x41,0x38,0x35,0x8a,0x43,0x3a,0x37,0x8a,0x16,0x8a,0x3e,0x35,0x32,0x8a, + 0x41,0x38,0x35,0x94,0x3f,0x37,0x33,0x94,0x27,0x22,0x1f,0x94,0x22,0x1f,0x27,0x94, + 0x29,0x26,0x22,0x8a,0x2a,0x8a,0x2b,0x1b,0x8a,0x33,0x8a,0x27,0x22,0x1f,0x8a,0x2b, + 0x8a,0x33,0x22,0x16,0x94,0x2b,0x27,0x22,0x8a,0x33,0x8a,0x20,0x14,0x94,0x27,0x24, + 0x94,0x1f,0x13,0x94,0x33,0x3c,0x30,0x8a,0x3a,0x33,0x2e,0x8a,0x39,0x33,0x2d,0x8a, + 0x3c,0x30,0x8a,0x3f,0x33,0x27,0x8a,0x43,0x37,0x8a,0x1d,0x8a,0x41,0x35,0x8a,0x3f, + 0x33,0x27,0x8a,0x3c,0x30,0x8a,0x35,0x41,0x38,0x94,0x22,0x16,0x94,0x24,0x18,0x94, + 0x29,0x26,0x1a,0x8a,0x2a,0x8a,0x2b,0x1b,0x8a,0x33,0x8a,0x1f,0x22,0x27,0x8a,0x2b, + 0x8a,0x33,0x22,0x16,0x94,0x2b,0x27,0x25,0x8a,0x33,0x8a,0x20,0x14,0x94,0x24,0x27, + 0x94,0x1f,0x13,0x8a,0x3f,0x37,0x33,0x8a,0x41,0x38,0x35,0x8a,0x42,0x39,0x36,0x8a, + 0x37,0x3a,0x43,0x8a,0x3f,0x33,0x37,0x8a,0x41,0x35,0x38,0x8a,0x43,0x3a,0x37,0x8a, + 0x16,0x8a,0x3e,0x35,0x32,0x8a,0x38,0x35,0x41,0x94,0x3f,0x37,0x33,0x94,0x27,0x22, + 0x1f,0x94,0x22,0x2b,0x27,0x94,0x3f,0x33,0x8a,0x41,0x35,0x8a,0x43,0x37,0x27,0x8a, + 0x3f,0x33,0x8a,0x41,0x35,0x2b,0x8a,0x43,0x37,0x8a,0x25,0x19,0x8a,0x33,0x3f,0x8a, + 0x41,0x35,0x27,0x8a,0x3f,0x33,0x8a,0x43,0x37,0x24,0x8a,0x3f,0x33,0x8a,0x41,0x35, + 0x2c,0x8a,0x43,0x37,0x8a,0x23,0x17,0x8a,0x3f,0x33,0x8a,0x41,0x35,0x23,0x8a,0x3f, + 0x33,0x8a,0x43,0x3a,0x37,0x8a,0x33,0x37,0x3f,0x8a,0x41,0x38,0x35,0x8a,0x43,0x3a, + 0x37,0x8a,0x16,0x8a,0x32,0x35,0x3e,0x8a,0x41,0x38,0x35,0x94,0x3f,0x37,0x33,0x94, + 0x22,0x16,0x94,0x3f,0x37,0x33,0xa8,0x38,0x3c,0x14,0x8a,0x3b,0x8a,0x3c,0x38,0x24, + 0x94,0x1b,0x94,0x3f,0x3c,0x38,0x94,0x38,0x3d,0x41,0x94,0x31,0x2c,0x29,0x8a,0x30, + 0x8a,0x31,0x20,0x8a,0x33,0x8a,0x35,0x2c,0x25,0x94,0x38,0x35,0x11,0x8a,0x37,0x8a, + 0x38,0x35,0x2c,0x94,0x18,0x94,0x3c,0x38,0x35,0x94,0x35,0x3a,0x3d,0x94,0x2e,0x25, + 0x29,0x8a,0x2d,0x8a,0x2e,0x1d,0x8a,0x30,0x8a,0x31,0x29,0x25,0x8a,0x3a,0x8a,0x35, + 0x25,0x19,0x94,0x3a,0x25,0x29,0x8a,0x35,0x8a,0x22,0x16,0x8a,0x3a,0x8a,0x35,0x23, + 0x17,0x94,0x33,0x24,0x18,0x94,0x24,0x27,0x2c,0x94,0x38,0x1d,0x94,0x2c,0x29,0x24, + 0x94,0x37,0x1f,0x8a,0x3b,0x8a,0x3e,0x26,0x29,0x8a,0x43,0x8a,0x23,0x8a,0x41,0x8a, + 0x3e,0x2b,0x29,0x8a,0x3f,0x8a,0x3c,0x2b,0x27,0xa8,0x3d,0x22,0x27,0x94,0x1b,0x94, + 0x3c,0x38,0x14,0x8a,0x3b,0x8a,0x38,0x3c,0x2c,0x94,0x1b,0x94,0x3f,0x3c,0x38,0x94, + 0x41,0x3d,0x38,0x94,0x31,0x2c,0x25,0x8a,0x30,0x8a,0x31,0x20,0x8a,0x33,0x8a,0x35, + 0x2c,0x29,0x94,0x38,0x35,0x11,0x8a,0x37,0x8a,0x38,0x35,0x2c,0x94,0x18,0x94,0x35, + 0x3c,0x38,0x94,0x3d,0x3a,0x35,0x94,0x2e,0x29,0x25,0x8a,0x2d,0x8a,0x2e,0x1d,0x8a, + 0x30,0x8a,0x31,0x29,0x25,0x8a,0x3a,0x8a,0x35,0x25,0x19,0x94,0x3a,0x29,0x25,0x8a, + 0x35,0x8a,0x16,0x22,0x8a,0x3a,0x8a,0x35,0x23,0x17,0x94,0x33,0x24,0x18,0x8a,0x20, + 0x14,0x8a,0x1f,0x13,0x8a,0x11,0x1d,0x8a,0x38,0x32,0x2f,0x9e,0x38,0x8a,0x3c,0x33, + 0x30,0x8a,0x3f,0x33,0x8a,0x2c,0x27,0x24,0x8a,0x3a,0x31,0x8a,0x27,0x1b,0x8a,0x33, + 0x8a,0x35,0x31,0x1b,0x8a,0x37,0x8a,0x38,0x30,0x20,0x94,0x32,0x8a,0x33,0x8a,0x35, + 0x8a,0x37,0x8a,0x38,0x8a,0x3a,0x8a,0x3c,0x38,0x14,0x8a,0x3b,0x8a,0x38,0x3c,0x2c, + 0x94,0x1b,0x94,0x3f,0x3c,0x38,0x94,0x41,0x3d,0x38,0x94,0x31,0x2c,0x29,0x8a,0x30, + 0x8a,0x31,0x20,0x8a,0x33,0x8a,0x35,0x29,0x2c,0x94,0x38,0x35,0x11,0x8a,0x37,0x8a, + 0x38,0x35,0x2c,0x94,0x18,0x94,0x3c,0x35,0x38,0x94,0x35,0x3d,0x3a,0x94,0x2e,0x29, + 0x25,0x8a,0x2d,0x8a,0x2e,0x1d,0x8a,0x30,0x8a,0x31,0x29,0x25,0x8a,0x3a,0x8a,0x35, + 0x25,0x19,0x94,0x3a,0x29,0x25,0x8a,0x35,0x8a,0x22,0x16,0x8a,0x3a,0x8a,0x35,0x23, + 0x17,0x94,0x33,0x24,0x18,0x94,0x2c,0x27,0x24,0x94,0x38,0x1d,0x94,0x2c,0x29,0x24, + 0x94,0x37,0x1f,0x8a,0x3b,0x8a,0x3e,0x26,0x2b,0x8a,0x43,0x8a,0x23,0x8a,0x41,0x8a, + 0x3e,0x2b,0x29,0x8a,0x3f,0x8a,0x3c,0x2b,0x27,0xa8,0x3d,0x2b,0x27,0x94,0x1b,0x94, + 0x3c,0x38,0x14,0x8a,0x3b,0x8a,0x38,0x3c,0x24,0x94,0x1b,0x94,0x3f,0x3c,0x38,0x94, + 0x41,0x3d,0x38,0x94,0x31,0x2c,0x29,0x8a,0x30,0x8a,0x31,0x20,0x8a,0x33,0x8a,0x35, + 0x2c,0x29,0x94,0x35,0x38,0x11,0x8a,0x37,0x8a,0x38,0x35,0x2c,0x94,0x18,0x94,0x3c, + 0x38,0x35,0x94,0x3d,0x3a,0x35,0x94,0x2e,0x25,0x29,0x8a,0x2d,0x8a,0x2e,0x1d,0x8a, + 0x30,0x8a,0x31,0x29,0x25,0x8a,0x3a,0x8a,0x35,0x25,0x19,0x94,0x3a,0x29,0x25,0x8a, + 0x35,0x8a,0x22,0x16,0x8a,0x3a,0x8a,0x35,0x23,0x17,0x94,0x33,0x24,0x18,0x8a,0x20, + 0x14,0x8a,0x1f,0x13,0x8a,0x1d,0x11,0x8a,0x38,0x32,0x2f,0x9e,0x38,0x8a,0x30,0x33, + 0x3c,0x8a,0x3f,0x33,0x8a,0x2c,0x27,0x24,0x8a,0x3a,0x31,0x8a,0x27,0x1b,0x8a,0x33, + 0x8a,0x35,0x31,0x1b,0x8a,0x37,0x8a,0x30,0x38,0x20,0xa8,0x3f,0x3c,0x38,0xa8,0x33, + 0x20,0x27,0x94,0x30,0x2c,0x27,0x8a,0x33,0x8a,0x2a,0x27,0x24,0x8a,0x30,0x8a,0x33, + 0x2a,0x21,0x8a,0x30,0x8a,0x2e,0x2b,0x27,0x8a,0x33,0x8a,0x37,0x22,0x27,0x8a,0x3a, + 0x8a,0x2b,0x27,0x22,0x8a,0x37,0x8a,0x33,0x2b,0x27,0x8a,0x2e,0x8a,0x30,0x2d,0x27, + 0x94,0x33,0x2d,0x24,0x94,0x37,0x2c,0x26,0x8a,0x35,0x2c,0x8a,0x26,0x22,0x8a,0x33, + 0x2b,0x8a,0x27,0x1b,0xa8,0x33,0x37,0x3a,0xa8,0x2c,0x29,0x14,0x94,0x2b,0x28,0x20, + 0x8a,0x2c,0x29,0x8a,0x18,0x8a,0x2b,0x28,0x8a,0x29,0x2c,0x24,0x94,0x14,0x8a,0x30, + 0x8a,0x2c,0x35,0x24,0x8a,0x30,0x8a,0x33,0x18,0x8a,0x35,0x8a,0x33,0x24,0x20,0x8a, + 0x30,0x8a,0x2e,0x2b,0x1b,0x94,0x2d,0x2a,0x27,0x8a,0x2e,0x2b,0x8a,0x16,0x8a,0x2d, + 0x2a,0x8a,0x2e,0x2b,0x1f,0x94,0x1b,0x8a,0x33,0x8a,0x37,0x2e,0x27,0x8a,0x33,0x8a, + 0x35,0x16,0x8a,0x37,0x8a,0x35,0x1f,0x22,0x8a,0x33,0x8a,0x35,0x32,0x16,0x94,0x34, + 0x31,0x26,0x8a,0x35,0x32,0x8a,0x1a,0x8a,0x34,0x31,0x8a,0x32,0x35,0x26,0x94,0x16, + 0x8a,0x38,0x8a,0x3c,0x32,0x22,0x8a,0x38,0x8a,0x3a,0x1d,0x8a,0x3c,0x8a,0x3a,0x26, + 0x22,0x8a,0x38,0x8a,0x3f,0x33,0x27,0x8a,0x3f,0x33,0x8a,0x3f,0x33,0x27,0xa8,0x3c, + 0x33,0x27,0x94,0x3a,0x33,0x1f,0x94,0x2e,0x2b,0x8a,0x2e,0x2b,0x8a,0x2e,0x2b,0x94, + 0x2b,0x2e,0x94,0x2c,0x29,0x14,0x94,0x2b,0x28,0x24,0x8a,0x2c,0x29,0x8a,0x18,0x8a, + 0x2b,0x28,0x8a,0x2c,0x29,0x24,0x94,0x14,0x8a,0x30,0x8a,0x35,0x2c,0x20,0x8a,0x30, + 0x8a,0x33,0x18,0x8a,0x35,0x8a,0x33,0x24,0x20,0x8a,0x30,0x8a,0x2e,0x2b,0x1b,0x94, + 0x2a,0x2d,0x27,0x8a,0x2e,0x2b,0x8a,0x16,0x8a,0x2d,0x2a,0x8a,0x2e,0x2b,0x1f,0x94, + 0x1b,0x8a,0x33,0x8a,0x37,0x2e,0x27,0x8a,0x33,0x8a,0x35,0x16,0x8a,0x37,0x8a,0x35, + 0x27,0x22,0x8a,0x33,0x8a,0x30,0x20,0x14,0x8a,0x2f,0x8a,0x30,0x1d,0x11,0x8a,0x3a, + 0x30,0x8a,0x1f,0x13,0x8a,0x38,0x30,0x8a,0x20,0x14,0x8a,0x33,0x30,0x8a,0x37,0x2e, + 0x22,0x8a,0x36,0x8a,0x37,0x22,0x2b,0x8a,0x3c,0x8a,0x2a,0x27,0x21,0x8a,0x3f,0x8a, + 0x3a,0x2b,0x27,0x8a,0x37,0x8a,0x33,0x2d,0x18,0x94,0x33,0x2d,0x1d,0x94,0x37,0x2c, + 0x32,0x8a,0x35,0x32,0x2c,0x8a,0x26,0x1a,0x8a,0x33,0x2e,0x2b,0x8a,0x27,0x1b,0x94, + 0x2b,0x2e,0x8a,0x2e,0x2b,0x8a,0x2e,0x2b,0x94,0x2e,0x2b,0x94,0x2c,0x29,0x14,0x94, + 0x2b,0x28,0x20,0x8a,0x29,0x2c,0x8a,0x18,0x8a,0x2b,0x28,0x8a,0x2c,0x29,0x24,0x94, + 0x14,0x8a,0x30,0x8a,0x35,0x2c,0x24,0x8a,0x30,0x8a,0x33,0x18,0x8a,0x35,0x8a,0x33, + 0x24,0x20,0x8a,0x30,0x8a,0x2e,0x2b,0x1b,0x94,0x2d,0x2a,0x27,0x8a,0x2e,0x2b,0x8a, + 0x16,0x8a,0x2d,0x2a,0x8a,0x2e,0x2b,0x1f,0x94,0x1b,0x8a,0x33,0x8a,0x37,0x2e,0x27, + 0x8a,0x33,0x8a,0x35,0x16,0x8a,0x37,0x8a,0x35,0x27,0x22,0x8a,0x33,0x8a,0x35,0x32, + 0x16,0x94,0x31,0x34,0x26,0x8a,0x35,0x32,0x8a,0x1a,0x8a,0x34,0x31,0x8a,0x35,0x32, + 0x26,0x94,0x16,0x8a,0x38,0x8a,0x3c,0x32,0x20,0x8a,0x38,0x8a,0x3a,0x1d,0x8a,0x3c, + 0x8a,0x3a,0x26,0x22,0x8a,0x38,0x8a,0x33,0x3f,0x27,0x8a,0x3f,0x33,0x8a,0x3f,0x33, + 0x1e,0xa8,0x3c,0x33,0x27,0x94,0x3a,0x33,0x27,0x94,0x2b,0x2e,0x8a,0x2e,0x2b,0x8a, + 0x2e,0x2b,0x94,0x2e,0x2b,0x94,0x2c,0x29,0x14,0x94,0x2b,0x28,0x20,0x8a,0x2c,0x29, + 0x8a,0x18,0x8a,0x2b,0x28,0x8a,0x2c,0x29,0x24,0x94,0x14,0x8a,0x30,0x8a,0x35,0x2c, + 0x24,0x8a,0x30,0x8a,0x33,0x18,0x8a,0x35,0x8a,0x33,0x24,0x20,0x8a,0x30,0x8a,0x2e, + 0x2b,0x1b,0x94,0x2d,0x2a,0x27,0x8a,0x2e,0x2b,0x8a,0x16,0x8a,0x2a,0x2d,0x8a,0x2e, + 0x2b,0x27,0x94,0x1b,0x8a,0x33,0x8a,0x37,0x2e,0x27,0x8a,0x33,0x8a,0x35,0x16,0x8a, + 0x37,0x8a,0x35,0x22,0x1f,0x8a,0x33,0x8a,0x30,0x20,0x14,0x8a,0x2f,0x8a,0x30,0x1d, + 0x11,0x8a,0x3a,0x30,0x8a,0x1f,0x13,0x8a,0x38,0x30,0x8a,0x20,0x14,0x8a,0x33,0x30, + 0x8a,0x37,0x2e,0x22,0x8a,0x36,0x8a,0x37,0x2b,0x27,0x8a,0x3c,0x8a,0x21,0x27,0x2a, + 0x8a,0x3f,0x8a,0x3a,0x2b,0x27,0x8a,0x37,0x8a,0x33,0x2d,0x24,0x94,0x33,0x2d,0x1d, + 0x94,0x37,0x32,0x2c,0x8a,0x35,0x2c,0x32,0x8a,0x26,0x1a,0x8a,0x33,0x2e,0x2b,0x8a, + 0x27,0x1b,0x94,0x22,0x16,0x94,0x3f,0x3a,0x37,0xff, +}; + +byte next_music_byte(void) { + return *music_ptr++; +} + +word voice_freq[3]; +byte rr_ch; /* round-robin hint for chord packing */ + +/* Envelope sized to the score's common 10-tick beat so notes release + * before the next chord (avoids stolen-voice "stutter"). */ +#define ENV_MAX 12 + +void music_update(void) { + byte ch; + byte n; + + if (!music_enable) return; + + /* Decay first — volume-only so frequency/phase stay stable */ + for (ch = 0; ch < 3; ch++) { + if (voice[ch].volume) { + voice[ch].volume--; + sound_vol(ch, voice[ch].volume); + } + } + + if (!music_ptr) { + music_ptr = music1; + cur_duration = 0; + } + + /* Score clock: when duration hits 0, fire all pending notes as one chord */ + while (cur_duration == 0) { + byte note = next_music_byte(); + if ((note & 0x80) == 0) { + word freq = note_table[note & 63]; + /* Prefer a silent/quiet channel; fall back to round-robin */ + ch = rr_ch; + for (n = 0; n < 3; n++) { + byte cand = (byte)((rr_ch + n) % 3); + if (voice[cand].volume < voice[ch].volume) ch = cand; + } + rr_ch = ch ? (byte)(ch - 1) : 2; + voice_freq[ch] = freq; + voice[ch].volume = ENV_MAX; + sound_voice(ch, freq, ENV_MAX, music_wave); + } else { + if (note == 0xff) + music_ptr = 0; + /* Duration is always >= 1 for this score; clamp just in case */ + cur_duration = note & 63; + if (!cur_duration) cur_duration = 1; + } + } + cur_duration--; +} + +void music_start(const byte* music) { + byte i; + music_enable = 0; /* pause NMI player while resetting */ + music_ptr = music; + cur_duration = 0; + rr_ch = 2; + for (i = 0; i < 3; i++) { + voice[i].volume = 0; + voice_freq[i] = 0; + sound_voice(i, 0, 0, 0); + } + music_enable = 1; +} + +byte meter_h[3]; + +void draw_meters(void) { + byte ch, h, y; + for (ch = 0; ch < 3; ch++) { + h = voice[ch].volume; /* 0..ENV_MAX, meter uses same scale */ + if (h == meter_h[ch]) continue; + meter_h[ch] = h; + for (y = 0; y < 16; y++) { + byte row = 28 - y; + byte on = (y < h); + byte pal = on ? (ch == 0 ? PAL_YELLOW : (ch == 1 ? PAL_CYAN : PAL_PINK)) : 0; + byte tile = on ? 0x11 : T_BLANK; + poke_tile((byte)(8 + ch * 6), row, tile, pal); + poke_tile((byte)(9 + ch * 6), row, tile, pal); + } + } +} + +void main(void) { + byte start_prev = 0; + byte left_prev = 0; + byte right_prev = 0; + + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + watchdog = 0; + music_wave = 1; + music_enable = 0; + + clrscr(0); + hide_all_sprites(); + put_string(6, 2, "PAC MAN MUSIC", PAL_YELLOW); + put_string(2, 4, "START RESTART", PAL_CYAN); + put_string(2, 5, "L R WAVE", PAL_CYAN); + put_string(7, 8, "V1", PAL_YELLOW); + put_string(13, 8, "V2", PAL_CYAN); + put_string(19, 8, "V3", PAL_PINK); + put_string(20, 5, "W", PAL_WHITE); + + meter_h[0] = meter_h[1] = meter_h[2] = 0xff; + music_start(music1); + + while (1) { + wait_vblank(); + watchdog = 0; + + if (LEFT1 && !left_prev && music_wave > 0) music_wave--; + if (RIGHT1 && !right_prev && music_wave < 7) music_wave++; + left_prev = LEFT1; + right_prev = RIGHT1; + + if (START1 && !start_prev) + music_start(music1); + start_prev = START1; + + /* Meters are cosmetic — skip some frames so main loop stays light */ + if (!(video_framecount & 1)) + draw_meters(); + + put_digit(22, 5, music_wave, PAL_ORANGE); + } +} + +/* ==== PACMAN GFX BEGIN (per-file; regenerate: scripts/gen_pacman_gfx.py) ==== */ +/* Graphics + sound waves private to music.c — edit without affecting other demos. */ +/* Color PROM */ +const byte __at(0x6000) color_prom[32] = /*{pal:"pacman",n:32}*/ { + 0x00,0x07,0x66,0xef,0x00,0xf8,0xea,0x6f,0x00,0x3f,0x00,0xc9,0x38,0xaa,0xaf,0xf6, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Asset-editor palette slices */ +const byte editor_pals[52] = /*{pal:"pacman",layout:"pacman"}*/ { + 0x00,0xf6,0xc9,0x07,0x00,0xf6,0xc9,0xef,0x00,0xf6,0xc9,0xf8,0x00,0xf6,0xc9,0x6f, + 0x00,0xc9,0x07,0x3f,0x00,0xaf,0x00,0xc9,0x00,0x38,0xc9,0xaf,0x00,0x38,0xf6,0x07, + 0x00,0x00,0x00,0x00,0x00,0x07,0x66,0xf6,0x00,0x6f,0x38,0x66,0x00,0xf6,0xc9,0x00, + 0x00,0x00,0x00,0x00, +}; + +/* Palette PROM */ +const byte __at(0x6100) palette_prom[256] = { + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x03, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x05,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x07, + 0x00,0x00,0x00,0x00,0x00,0x0b,0x01,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x01,0x0c,0x0f, + 0x00,0x0e,0x00,0x0b,0x00,0x0c,0x0b,0x0e,0x00,0x0c,0x0f,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x0f,0x00,0x07,0x0c,0x02,0x00,0x09,0x06,0x0f,0x00,0x0d,0x0c,0x0f, + 0x00,0x05,0x03,0x09,0x00,0x0f,0x0b,0x00,0x00,0x0e,0x00,0x0b,0x00,0x0e,0x00,0x0b, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x01,0x00,0x0f,0x0b,0x0e,0x00,0x0e,0x00,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* WSG waveforms: 8 waves × 32 samples (0..15). Select with sound_voice(..., wave). */ +const byte __at(0x6200) wave_rom[256] = /*{w:32,h:1,count:8,bpp:8}*/ { + 0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x09, + 0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, + 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07, + 0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x08,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x07,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, +}; + +/* Tile ROM (arcade font + this demo's homebrew tiles) */ +const byte __at(0x4000) tile_rom[4096] = /*{w:8,h:8,count:256,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Sprite ROM (this demo's homebrew sprites) */ +const byte __at(0x5000) sprite_rom[4096] = /*{w:16,h:16,count:64,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +/* ==== PACMAN GFX END ==== */ diff --git a/presets/pacman/pacman_common.c b/presets/pacman/pacman_common.c new file mode 100644 index 00000000..d8ab4405 --- /dev/null +++ b/presets/pacman/pacman_common.c @@ -0,0 +1,123 @@ +/* + * Shared Pac-Man hardware helpers for 8bitworkshop demos. + * Per-demo graphics are appended to each game .c file. + */ +#include "pacman_common.h" + +volatile byte video_framecount; + +word vram_addr(byte x, byte y) { + if (y < 2) + return 0x3c0 + (word)y * 32 + (29 - x); + if (y >= 34) + return (word)(y - 34) * 32 + (29 - x); + return 0x40 + (word)(27 - x) * 32 + (y - 2); +} + +void poke_tile(byte x, byte y, byte tile, byte pal) { + word a; + if (x >= 28 || y >= 36) return; + a = vram_addr(x, y); + *((byte*)(0x4000 + a)) = tile; + *((byte*)(0x4400 + a)) = pal; +} + +byte peek_tile(byte x, byte y) { + if (x >= 28 || y >= 36) return T_BLANK; + return *((byte*)(0x4000 + vram_addr(x, y))); +} + +void clrscr(byte pal) { + word i; + for (i = 0; i < 0x400; i++) { + ((byte*)0x4000)[i] = T_BLANK; + ((byte*)0x4400)[i] = pal; + if ((i & 63) == 0) watchdog = 0; + } +} + +void wait_vblank(void) { + byte f = video_framecount; + while (video_framecount == f) watchdog = 0; +} + +void put_digit(byte x, byte y, byte d, byte pal) { + poke_tile(x, y, (byte)('0' + (d % 10)), pal); +} + +/* Arcade tile ROM uses ASCII codes for 0-9 / A-Z; space = 0x40 */ +void put_char(byte x, byte y, char ch, byte pal) { + byte t; + if (ch == ' ' || ch == '\t') t = T_BLANK; + else if (ch >= 'a' && ch <= 'z') t = (byte)(ch - 'a' + 'A'); + else t = (byte)ch; + poke_tile(x, y, t, pal); +} + +void put_string(byte x, byte y, const char* s, byte pal) { + while (*s) { + put_char(x++, y, *s++, pal); + if (x >= 28) break; + } +} + +/* Sprite regs: shape/color @ 0x4FF0, coords @ 0x5060 (bottom-right origin) */ +void set_sprite_ex(byte i, byte shape, byte color, byte sx, byte sy, byte flags) { + ((byte*)0x4ff0)[i * 2] = (shape << 2) | (flags & 3); + ((byte*)0x4ff0)[i * 2 + 1] = color; + ((byte*)0x5060)[i * 2] = 239 - sx; + ((byte*)0x5060)[i * 2 + 1] = 272 - sy; +} + +void set_sprite(byte i, byte shape, byte color, byte sx, byte sy) { + set_sprite_ex(i, shape, color, sx, sy, 0); +} + +void hide_sprite(byte i) { + set_sprite(i, 0, 0, 0, 0); + ((byte*)0x5060)[i * 2] = 0; + ((byte*)0x5060)[i * 2 + 1] = 0; +} + +void hide_all_sprites(void) { + byte i; + for (i = 0; i < 8; i++) hide_sprite(i); +} + +void sound_voice(byte voice, word freq, byte vol, byte wave) { + word wave_addr, freq_addr; + byte i, nibbles; + if (voice > 2) return; + if (voice == 0) { wave_addr = 0x5045; freq_addr = 0x5050; nibbles = 5; } + else if (voice == 1) { wave_addr = 0x504a; freq_addr = 0x5056; nibbles = 4; } + else { wave_addr = 0x504f; freq_addr = 0x505b; nibbles = 4; } + /* Voices 1/2 are 16-bit; HW treats them as 20-bit with low nibble 0. + * Callers always pass the voice-0 scale (≈ Hz * 11). */ + if (voice != 0) freq >>= 4; + *(volatile byte*)wave_addr = wave & 7; + for (i = 0; i < nibbles; i++) { + ((volatile byte*)freq_addr)[i] = freq & 0x0f; + freq >>= 4; + } + ((volatile byte*)freq_addr)[nibbles] = vol & 0x0f; +} + +/* Update volume only — avoids rewriting frequency mid-note (clicks / jitter). */ +void sound_vol(byte voice, byte vol) { + if (voice == 0) ((volatile byte*)0x5055)[0] = vol & 0x0f; + else if (voice == 1) ((volatile byte*)0x505a)[0] = vol & 0x0f; + else if (voice == 2) ((volatile byte*)0x505f)[0] = vol & 0x0f; +} + +void sound_off(void) { + sound_voice(0, 0, 0, 0); + sound_voice(1, 0, 0, 0); + sound_voice(2, 0, 0, 0); +} + +void sound_beep(word freq, byte frames) { + sound_enable = 1; + sound_voice(0, freq, 12, 1); + while (frames--) wait_vblank(); + sound_voice(0, 0, 0, 0); +} diff --git a/presets/pacman/pacman_common.h b/presets/pacman/pacman_common.h new file mode 100644 index 00000000..fc8d7eba --- /dev/null +++ b/presets/pacman/pacman_common.h @@ -0,0 +1,99 @@ +/* + * Shared Pac-Man hardware helpers for 8bitworkshop demos. + * + * Link helpers only: + * //#link "pacman_common.c" + * + * Each demo owns its own graphics (tile/sprite/PROM data appended at the + * end of that .c file). Do not share one gfx object across demos. + * + * Text tile codes are ASCII: '0'-'9', 'A'-'Z', space = 0x40. + */ +#ifndef PACMAN_COMMON_H +#define PACMAN_COMMON_H + +typedef unsigned char byte; +typedef unsigned short word; +typedef signed char sbyte; + +void main(void); + +/* memory-mapped I/O */ +#define interrupt_enable (*(volatile byte*)0x5000) +#define sound_enable (*(volatile byte*)0x5001) +#define flip_screen (*(volatile byte*)0x5003) +#define watchdog (*(volatile byte*)0x50c0) +#define input0 (*(volatile byte*)0x5000) +#define input1 (*(volatile byte*)0x5040) + +extern volatile byte video_framecount; + +#define UP1 (!(input0 & 0x01)) +#define LEFT1 (!(input0 & 0x02)) +#define RIGHT1 (!(input0 & 0x04)) +#define DOWN1 (!(input0 & 0x08)) +#define FIRE1 (!(input0 & 0x80)) +#define COIN1 (!(input0 & 0x20)) +#define START1 (!(input1 & 0x20)) + +/* Tile indices — font is ASCII; others are homebrew utility tiles */ +#define T_BLANK 0x40 /* empty / space */ +#define T_DOT 0x10 /* pellet */ +#define T_POWER 0x14 /* power pellet */ +#define T_WALL_TL 0x28 +#define T_WALL_TR 0x29 +#define T_WALL_H 0x2a +#define T_WALL_V 0x2b +#define T_WALL_BL 0x2c +#define T_WALL_BR 0x2d +#define T_WALL_R 0x2e +#define T_CIRCLE 'O' /* round letter — player marker in tile demos */ +#define T_ALIEN 0x0b /* formation alien glyph */ +#define T_MISSILE '/' /* thin glyph usable as a bullet */ + +/* Homebrew sprite ROM indices for set_sprite() */ +#define S_PLAYER 0 +#define S_ALIEN 1 +#define S_BOOM1 2 +#define S_BOOM2 3 +#define S_BULLET 4 +#define S_PLAYER2 5 +/* friendly aliases used by older demos */ +#define S_PAC S_PLAYER +#define S_GHOST S_ALIEN +#define S_GHOST2 S_ALIEN +#define S_GHOST3 S_ALIEN +#define S_FRUIT S_PLAYER2 +#define S_EYES S_BOOM2 + +/* Palette PROM entry numbers (CRAM / sprite color) */ +#define PAL_YELLOW 9 +#define PAL_CYAN 5 +#define PAL_PINK 3 +#define PAL_ORANGE 7 +#define PAL_BLUE 5 // actually cyan. no blue in this palette +#define PAL_RED 1 +#define PAL_WHITE 15 + +word vram_addr(byte x, byte y); +void poke_tile(byte x, byte y, byte tile, byte pal); +byte peek_tile(byte x, byte y); +void clrscr(byte pal); +void wait_vblank(void); +void put_digit(byte x, byte y, byte d, byte pal); +void put_char(byte x, byte y, char ch, byte pal); +void put_string(byte x, byte y, const char* s, byte pal); +void set_sprite(byte i, byte shape, byte color, byte sx, byte sy); +/* flags: bit0 = flipY, bit1 = flipX (Pac-Man sprite attribute bits) */ +void set_sprite_ex(byte i, byte shape, byte color, byte sx, byte sy, byte flags); +void hide_sprite(byte i); +void hide_all_sprites(void); + +/* Namco WSG helpers (3 voices). freq ≈ Hz * 11 (voice-0 scale; voices 1/2 + * are adjusted inside sound_voice). vol 0..15. wave selects wave_rom[] 0..7. */ +void sound_voice(byte voice, word freq, byte vol, byte wave); +void sound_vol(byte voice, byte vol); +void sound_off(void); +void sound_beep(word freq, byte frames); + +#endif diff --git a/presets/pacman/siege.c b/presets/pacman/siege.c new file mode 100644 index 00000000..27e080a1 --- /dev/null +++ b/presets/pacman/siege.c @@ -0,0 +1,860 @@ +/* + * Siege — Blockade-style two-player game for Pac-Man hardware. + * Ported from presets/coleco/siegegame.c ("Making Arcade Games in C"). + * + * Player 1: joystick. Player 2: AI. + * First to MAX_SCORE wins. Speed increases each round. + * + * Graphics for this file are appended at the bottom (private copy). + */ +//#link "pacman_common.c" +#include "pacman_common.h" + +/* Startup + NMI @ 0x0066 */ +void start(void) __naked { +__asm + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + jp _main + .ds 0x66 - (. - _start) + push af + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + pop af + retn +__endasm; +} + +#define COLS 28 +#define ROWS 36 +#define PLAY_Y0 2 +#define PLAY_Y1 33 + +#define T_SOLID 0x11 +#define T_CHECK 0x12 + +typedef struct { + byte x; + byte y; + byte dir; + byte score; + byte head_tile; + byte tail_tile; + byte head_pal; + byte tail_pal; + byte collided; + byte human; +} Player; + +Player players[2]; + +byte frames_per_move; +byte gameover; +word rnd_state; + +#define START_SPEED 12 +#define MAX_SPEED 5 +#define MAX_SCORE 7 + +typedef enum { D_RIGHT, D_DOWN, D_LEFT, D_UP } dir_t; +static const sbyte DIR_X[4] = { 1, 0, -1, 0 }; +static const sbyte DIR_Y[4] = { 0, 1, 0, -1 }; + +byte rand8(void) { + rnd_state = rnd_state * 17 + 53; + return (byte)(rnd_state >> 8); +} + +void delay_frames(byte n) { + while (n--) wait_vblank(); +} + +void draw_box(byte x, byte y, byte x2, byte y2, byte pal) { + byte xi, yi; + poke_tile(x, y, T_WALL_TL, pal); + poke_tile(x2, y, T_WALL_TR, pal); + poke_tile(x, y2, T_WALL_BL, pal); + poke_tile(x2, y2, T_WALL_BR, pal); + for (xi = x + 1; xi < x2; xi++) { + poke_tile(xi, y, T_WALL_H, pal); + poke_tile(xi, y2, T_WALL_H, pal); + } + for (yi = y + 1; yi < y2; yi++) { + poke_tile(x, yi, T_WALL_V, pal); + poke_tile(x2, yi, T_WALL_V, pal); + } +} + +void draw_playfield(void) { + draw_box(0, PLAY_Y0, COLS - 1, PLAY_Y1, PAL_BLUE); + put_string(0, 0, "P1", PAL_YELLOW); + put_digit(3, 0, players[0].score, PAL_YELLOW); + put_string(22, 0, "P2", PAL_PINK); + put_digit(25, 0, players[1].score, PAL_PINK); +} + +void init_game(void) { + players[0].score = 0; + players[1].score = 0; + players[0].head_tile = '1'; + players[1].head_tile = '2'; + players[0].tail_tile = T_SOLID; + players[1].tail_tile = T_CHECK; + players[0].head_pal = PAL_YELLOW; + players[0].tail_pal = PAL_YELLOW; + players[1].head_pal = PAL_PINK; + players[1].tail_pal = PAL_PINK; + players[0].human = 1; + players[1].human = 0; + frames_per_move = START_SPEED; + rnd_state = 0x1234; +} + +void reset_players(void) { + players[0].x = 5; + players[0].y = 8; + players[0].dir = D_RIGHT; + players[1].x = 22; + players[1].y = 28; + players[1].dir = D_LEFT; + players[0].collided = 0; + players[1].collided = 0; +} + +void draw_player(Player* p) { + poke_tile(p->x, p->y, p->head_tile, p->head_pal); +} + +byte cell_blocked(byte x, byte y) { + byte t; + if (x >= COLS || y < PLAY_Y0 || y > PLAY_Y1) return 1; + t = peek_tile(x, y); + return t != T_BLANK; +} + +void move_player(Player* p) { + poke_tile(p->x, p->y, p->tail_tile, p->tail_pal); + p->x += DIR_X[p->dir]; + p->y += DIR_Y[p->dir]; + if (cell_blocked(p->x, p->y)) + p->collided = 1; + else + draw_player(p); +} + +void human_control(Player* p) { + byte dir = 0xff; + if (!p->human) return; + if (LEFT1) dir = D_LEFT; + if (RIGHT1) dir = D_RIGHT; + if (UP1) dir = D_UP; + if (DOWN1) dir = D_DOWN; + if (dir != 0xff && dir != (p->dir ^ 2)) + p->dir = dir; +} + +byte ai_try_dir(Player* p, byte dir, byte shift) { + byte x, y; + dir &= 3; + x = p->x + (DIR_X[dir] << shift); + y = p->y + (DIR_Y[dir] << shift); + if (!cell_blocked(x, y)) { + p->dir = dir; + return 1; + } + return 0; +} + +void ai_control(Player* p) { + byte dir; + if (p->human) return; + dir = p->dir; + if (!ai_try_dir(p, dir, 0)) { + ai_try_dir(p, (byte)(dir + 1), 0); + ai_try_dir(p, (byte)(dir - 1), 0); + } else { + if (ai_try_dir(p, (byte)(dir - 1), 0)) + ai_try_dir(p, (byte)(dir - 1), (byte)(1 + (rand8() & 3))); + if (ai_try_dir(p, (byte)(dir + 1), 0)) + ai_try_dir(p, (byte)(dir + 1), (byte)(1 + (rand8() & 3))); + ai_try_dir(p, dir, rand8() & 3); + } +} + +void flash_colliders(void) { + byte i; + for (i = 0; i < 40; i++) { + wait_vblank(); + if (players[0].collided) + poke_tile(players[0].x, players[0].y, players[0].head_tile, + (i & 1) ? PAL_WHITE : PAL_YELLOW); + if (players[1].collided) + poke_tile(players[1].x, players[1].y, players[1].head_tile, + (i & 1) ? PAL_WHITE : PAL_PINK); + } +} + +void make_move(void) { + byte i; + for (i = 0; i < frames_per_move; i++) { + human_control(&players[0]); + wait_vblank(); + } + ai_control(&players[0]); + ai_control(&players[1]); + move_player(&players[1]); + move_player(&players[0]); +} + +void declare_winner(byte winner) { + byte i; + clrscr(0); + hide_all_sprites(); + for (i = 0; i < 8; i++) { + draw_box(i, i + 2, (byte)(COLS - 1 - i), (byte)(PLAY_Y1 - i), PAL_CYAN); + delay_frames(2); + } + put_string(8, 16, "WINNER", PAL_YELLOW); + put_string(8, 18, "PLAYER", PAL_WHITE); + poke_tile(15, 18, (byte)('1' + winner), PAL_YELLOW); + delay_frames(90); + gameover = 1; +} + +void play_round(void) { + reset_players(); + clrscr(0); + hide_all_sprites(); + draw_playfield(); + draw_player(&players[0]); + draw_player(&players[1]); + while (1) { + make_move(); + if (players[0].collided || players[1].collided) break; + } + flash_colliders(); + sound_beep(players[0].collided ? 0x800 : 0x1400, 3); + if (players[0].collided) players[1].score++; + if (players[1].collided) players[0].score++; + if (frames_per_move > MAX_SPEED) frames_per_move--; + if (players[0].score != players[1].score) { + if (players[0].score >= MAX_SCORE) + declare_winner(0); + else if (players[1].score >= MAX_SCORE) + declare_winner(1); + } +} + +void play_game(void) { + gameover = 0; + init_game(); + while (!gameover) + play_round(); +} + +void main(void) { + video_framecount = 0; + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + watchdog = 0; + + clrscr(0); + hide_all_sprites(); + put_string(8, 14, "SIEGE", PAL_YELLOW); + put_string(4, 18, "PRESS START", PAL_CYAN); + while (!START1) { + wait_vblank(); + watchdog = 0; + } + play_game(); + while (1) { + wait_vblank(); + watchdog = 0; + } +} + +/* ==== PACMAN GFX BEGIN (per-file; regenerate: scripts/gen_pacman_gfx.py) ==== */ +/* Graphics + sound waves private to siege.c — edit without affecting other demos. */ +/* Color PROM */ +const byte __at(0x6000) color_prom[32] = /*{pal:"pacman",n:32}*/ { + 0x00,0x07,0x66,0xef,0x00,0xf8,0xea,0x6f,0x00,0x3f,0x00,0xc9,0x38,0xaa,0xaf,0xf6, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Asset-editor palette slices */ +const byte editor_pals[52] = /*{pal:"pacman",layout:"pacman"}*/ { + 0x00,0xf6,0xc9,0x07,0x00,0xf6,0xc9,0xef,0x00,0xf6,0xc9,0xf8,0x00,0xf6,0xc9,0x6f, + 0x00,0xc9,0x07,0x3f,0x00,0xaf,0x00,0xc9,0x00,0x38,0xc9,0xaf,0x00,0x38,0xf6,0x07, + 0x00,0x00,0x00,0x00,0x00,0x07,0x66,0xf6,0x00,0x6f,0x38,0x66,0x00,0xf6,0xc9,0x00, + 0x00,0x00,0x00,0x00, +}; + +/* Palette PROM */ +const byte __at(0x6100) palette_prom[256] = { + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x03, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x05,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x07, + 0x00,0x00,0x00,0x00,0x00,0x0b,0x01,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x01,0x0c,0x0f, + 0x00,0x0e,0x00,0x0b,0x00,0x0c,0x0b,0x0e,0x00,0x0c,0x0f,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x0f,0x00,0x07,0x0c,0x02,0x00,0x09,0x06,0x0f,0x00,0x0d,0x0c,0x0f, + 0x00,0x05,0x03,0x09,0x00,0x0f,0x0b,0x00,0x00,0x0e,0x00,0x0b,0x00,0x0e,0x00,0x0b, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x01,0x00,0x0f,0x0b,0x0e,0x00,0x0e,0x00,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* WSG waveforms: 8 waves × 32 samples (0..15). Select with sound_voice(..., wave). */ +const byte __at(0x6200) wave_rom[256] = /*{w:32,h:1,count:8,bpp:8}*/ { + 0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x09, + 0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, + 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07, + 0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x07,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, +}; + +/* Tile ROM (arcade font + this demo's homebrew tiles) */ +const byte __at(0x4000) tile_rom[4096] = /*{w:8,h:8,count:256,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x44,0x44,0x44,0x66,0x33,0x11,0x00, + 0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x66,0x44,0x44,0x44,0x00, + 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, + 0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00, + 0x00,0x22,0x22,0x22,0x66,0xcc,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00, + 0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Sprite ROM (this demo's homebrew sprites) */ +const byte __at(0x5000) sprite_rom[4096] = /*{w:16,h:16,count:64,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +/* ==== PACMAN GFX END ==== */ diff --git a/presets/pacman/solarian.c b/presets/pacman/solarian.c new file mode 100644 index 00000000..a27f7307 --- /dev/null +++ b/presets/pacman/solarian.c @@ -0,0 +1,1065 @@ +/* + * Solarian — Galaxian-style shooter for Pac-Man hardware. + * Ported from presets/galaxian-scramble/shoot2.c + * + * Controls: Left/Right move, Space fire, Enter/Start to begin. + * Graphics for this file are appended at the bottom (private copy). + */ +//#link "pacman_common.c" +#include "pacman_common.h" + +/* Startup + NMI @ 0x0066 (must be in the main object so it links at 0x0000) */ +void start(void) __naked { +__asm + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + jp _main + .ds 0x66 - (. - _start) + push af + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + pop af + retn +__endasm; +} + + +#define ENEMIES_PER_ROW 7 +#define ENEMY_ROWS 4 +#define MAX_IN_FORMATION (ENEMIES_PER_ROW * ENEMY_ROWS) +#define MAX_ATTACKERS 4 +#define MAX_MISSILES 6 +#define PLAYER_MISSILE (MAX_MISSILES - 1) + +#define PLAYER_Y 240 +#define FORMATION_TX0 2 +#define FORMATION_TY0 5 +#define FORMATION_XSPACE 3 +#define FORMATION_YSPACE 2 + +typedef struct { byte alive; } FormationEnemy; +typedef struct { + byte findex; + word x, y; + byte dir; + byte returning; +} AttackingEnemy; +typedef struct { + byte active; + byte x, y; + sbyte dy; +} Missile; + +FormationEnemy formation[MAX_IN_FORMATION]; +AttackingEnemy attackers[MAX_ATTACKERS]; +Missile missiles[MAX_MISSILES]; + +byte formation_offset; /* tile scroll 0..5 */ +sbyte formation_dir; +byte current_row; +byte player_x; +byte player_exploding; +byte enemy_exploding; +byte boom_x, boom_y; +byte enemies_left; +word player_score; +word framecount; +byte lives; + +static word lfsr = 1; +word rand16(void) { + byte lsb = lfsr & 1; + lfsr >>= 1; + if (lsb) lfsr ^= 0xB400u; + return lfsr; +} + +word bcd_add(word a, word b) __naked { + a; b; +__asm + push ix + ld ix, #0 + add ix, sp + ld a, 4 (ix) + add a, 6 (ix) + daa + ld c, a + ld a, 5 (ix) + adc a, 7 (ix) + daa + ld b, a + ld l, c + ld h, b + pop ix + ret +__endasm; +} + +byte in_rect(byte x, byte y, byte x0, byte y0, byte w, byte h) { + return ((byte)(x - x0) < w && (byte)(y - y0) < h); +} + +void draw_score(void) { + byte i; + word s = player_score; + put_string(0, 0, "SCORE", PAL_CYAN); + for (i = 0; i < 4; i++) { + put_digit(9 - i, 0, s & 0xf, PAL_YELLOW); + s >>= 4; + } + put_string(18, 0, "LIVES", PAL_CYAN); + put_digit(24, 0, lives, PAL_YELLOW); +} + +void add_score(word bcd) { + player_score = bcd_add(player_score, bcd); + draw_score(); +} + +void setup_formation(void) { + byte i; + for (i = 0; i < MAX_IN_FORMATION; i++) formation[i].alive = 1; + for (i = 0; i < MAX_ATTACKERS; i++) attackers[i].findex = 0; + for (i = 0; i < MAX_MISSILES; i++) missiles[i].active = 0; + enemies_left = MAX_IN_FORMATION; + formation_offset = 0; + formation_dir = 1; + current_row = 0; +} + +byte form_tile_x(byte fi) { + return FORMATION_TX0 + (fi % ENEMIES_PER_ROW) * FORMATION_XSPACE + formation_offset; +} + +byte form_tile_y(byte fi) { + return FORMATION_TY0 + (fi / ENEMIES_PER_ROW) * FORMATION_YSPACE; +} + +byte form_pix_x(byte fi) { return form_tile_x(fi) * 8; } +byte form_pix_y(byte fi) { return form_tile_y(fi) * 8; } + +void draw_formation_row(byte row) { + byte i; + byte y = form_tile_y(row * ENEMIES_PER_ROW); + /* clear prior offset columns roughly */ + for (i = 0; i < 28; i++) + poke_tile(i, y, T_BLANK, 0); + for (i = 0; i < ENEMIES_PER_ROW; i++) { + byte idx = i + row * ENEMIES_PER_ROW; + byte x = form_tile_x(idx); + if (x < 28 && formation[idx].alive) + poke_tile(x, y, T_ALIEN, row ? PAL_CYAN : PAL_PINK); + } +} + +void draw_next_row(void) { + draw_formation_row(current_row); + if (++current_row == ENEMY_ROWS) { + current_row = 0; + formation_offset += formation_dir; + if (formation_offset >= 5) formation_dir = -1; + else if (formation_offset == 0) formation_dir = 1; + } +} + +static const sbyte SINTBL[32] = { + 0, 25, 49, 71, 90, 106, 117, 125, + 127, 125, 117, 106, 90, 71, 49, 25, + 0, -25, -49, -71, -90, -106, -117, -125, + -127, -125, -117, -106, -90, -71, -49, -25, +}; + +sbyte isin(byte dir) { return SINTBL[dir & 31]; } +sbyte icos(byte dir) { return isin(dir + 8); } + +void draw_attackers(void) { + byte i; + for (i = 0; i < MAX_ATTACKERS; i++) { + AttackingEnemy* a = &attackers[i]; + if (a->findex) + set_sprite(i + 1, S_ALIEN, PAL_PINK, a->x >> 8, a->y >> 8); + else + hide_sprite(i + 1); + } +} + +void return_attacker(AttackingEnemy* a) { + byte fi = a->findex - 1; + byte destx = form_pix_x(fi); + byte desty = form_pix_y(fi); + byte y = a->y >> 8; + if (y >= desty && (byte)(y - desty) < 4) { + formation[fi].alive = 1; + a->findex = 0; + } else { + a->dir = 16; /* fly up-ish */ + a->x = (word)destx << 8; + a->y -= 256; + } +} + +void fly_attacker(AttackingEnemy* a) { + a->x += (word)(isin(a->dir) * 2); + a->y += (word)(icos(a->dir) * 2); + if ((a->y >> 8) < 16) + a->returning = 1; +} + +void move_attackers(void) { + byte i; + for (i = 0; i < MAX_ATTACKERS; i++) { + AttackingEnemy* a = &attackers[i]; + if (!a->findex) continue; + if (a->returning) return_attacker(a); + else fly_attacker(a); + } +} + +void think_attackers(void) { + byte i; + for (i = 0; i < MAX_ATTACKERS; i++) { + AttackingEnemy* a = &attackers[i]; + byte x, y; + if (!a->findex) continue; + x = a->x >> 8; + y = a->y >> 8; + if (y < 140 || player_exploding) { + if (x < 112) a->dir++; + else a->dir--; + } else if (!missiles[i].active) { + missiles[i].active = 1; + missiles[i].x = x + 4; + missiles[i].y = y + 16; + missiles[i].dy = 3; + } + } +} + +void formation_to_attacker(byte fi) { + byte i; + if (fi >= MAX_IN_FORMATION || !formation[fi].alive) return; + for (i = 0; i < MAX_ATTACKERS; i++) { + AttackingEnemy* a = &attackers[i]; + if (a->findex == 0) { + a->x = (word)form_pix_x(fi) << 8; + a->y = (word)form_pix_y(fi) << 8; + a->findex = fi + 1; + a->dir = 0; + a->returning = 0; + formation[fi].alive = 0; + break; + } + } +} + +void new_attack_wave(void) { + byte i = rand16() % MAX_IN_FORMATION; + byte j; + for (j = 0; j < MAX_IN_FORMATION; j++) { + if (formation[i].alive) { + formation_to_attacker(i); + if (i + 1 < MAX_IN_FORMATION) formation_to_attacker(i + 1); + return; + } + i++; + if (i >= MAX_IN_FORMATION) i = 0; + } +} + +void erase_enemy_missiles(void) { + byte i; + for (i = 0; i < PLAYER_MISSILE; i++) { + byte tx, ty; + if (!missiles[i].active) continue; + tx = missiles[i].x >> 3; + ty = missiles[i].y >> 3; + if (tx < 28 && ty < 36) poke_tile(tx, ty, T_BLANK, 0); + } +} + +void draw_missiles(void) { + byte i; + for (i = 0; i < PLAYER_MISSILE; i++) { + byte tx, ty; + if (!missiles[i].active) continue; + tx = missiles[i].x >> 3; + ty = missiles[i].y >> 3; + if (tx < 28 && ty < 36) poke_tile(tx, ty, T_MISSILE, PAL_PINK); + } + if (missiles[PLAYER_MISSILE].active) + set_sprite(5, S_BULLET, PAL_YELLOW, + missiles[PLAYER_MISSILE].x, missiles[PLAYER_MISSILE].y); + else + hide_sprite(5); +} + +void move_missiles(void) { + byte i; + erase_enemy_missiles(); + for (i = 0; i < MAX_MISSILES; i++) { + if (!missiles[i].active) continue; + missiles[i].y += missiles[i].dy; + if (missiles[i].y < 8 || missiles[i].y > 270) + missiles[i].active = 0; + } +} + +void move_player(void) { + if (LEFT1 && player_x > 8) player_x -= 2; + if (RIGHT1 && player_x < 200) player_x += 2; + if (FIRE1 && !missiles[PLAYER_MISSILE].active) { + missiles[PLAYER_MISSILE].active = 1; + missiles[PLAYER_MISSILE].x = player_x + 4; + missiles[PLAYER_MISSILE].y = PLAYER_Y - 8; + missiles[PLAYER_MISSILE].dy = -5; + } + if (!player_exploding) + set_sprite(0, S_PLAYER, PAL_YELLOW, player_x, PLAYER_Y); +} + +void blowup_at(byte x, byte y) { + boom_x = x; + boom_y = y; + set_sprite(6, S_BOOM1, PAL_ORANGE, x, y); + enemy_exploding = 1; +} + +void animate_boom(void) { + if (!enemy_exploding) return; + enemy_exploding++; + if (enemy_exploding > 8) { + enemy_exploding = 0; + hide_sprite(6); + } else { + set_sprite(6, (enemy_exploding & 1) ? S_BOOM1 : S_BOOM2, PAL_ORANGE, boom_x, boom_y); + } +} + +void does_player_shoot_formation(void) { + byte mx, my, tx, ty, row, col, index; + if (!missiles[PLAYER_MISSILE].active) return; + mx = missiles[PLAYER_MISSILE].x; + my = missiles[PLAYER_MISSILE].y; + tx = mx >> 3; + ty = my >> 3; + if (ty < FORMATION_TY0) return; + row = (ty - FORMATION_TY0) / FORMATION_YSPACE; + if (row >= ENEMY_ROWS) return; + if (tx < FORMATION_TX0 + formation_offset) return; + col = (tx - FORMATION_TX0 - formation_offset) / FORMATION_XSPACE; + if (col >= ENEMIES_PER_ROW) return; + index = col + row * ENEMIES_PER_ROW; + if (formation[index].alive) { + formation[index].alive = 0; + enemies_left--; + blowup_at(form_pix_x(index), form_pix_y(index)); + missiles[PLAYER_MISSILE].active = 0; + add_score(0x0002); + } +} + +void does_player_shoot_attacker(void) { + byte i, mx, my; + if (!missiles[PLAYER_MISSILE].active) return; + mx = missiles[PLAYER_MISSILE].x; + my = missiles[PLAYER_MISSILE].y; + for (i = 0; i < MAX_ATTACKERS; i++) { + AttackingEnemy* a = &attackers[i]; + if (a->findex && in_rect(mx, my, a->x >> 8, a->y >> 8, 16, 16)) { + blowup_at(a->x >> 8, a->y >> 8); + a->findex = 0; + enemies_left--; + missiles[PLAYER_MISSILE].active = 0; + add_score(0x0005); + break; + } + } +} + +void does_missile_hit_player(void) { + byte i; + if (player_exploding) return; + for (i = 0; i < PLAYER_MISSILE; i++) { + if (missiles[i].active && + in_rect(missiles[i].x, missiles[i].y, player_x, PLAYER_Y, 16, 16)) { + player_exploding = 1; + missiles[i].active = 0; + return; + } + } + for (i = 0; i < MAX_ATTACKERS; i++) { + AttackingEnemy* a = &attackers[i]; + if (a->findex && + in_rect(a->x >> 8, a->y >> 8, player_x, PLAYER_Y, 16, 16)) { + player_exploding = 1; + return; + } + } +} + +void play_round(void) { + byte end_timer = 255; + + player_score = 0; + lives = 3; + clrscr(0); + hide_all_sprites(); + draw_score(); + put_string(8, 2, "SOLARIAN", PAL_PINK); + + setup_formation(); + player_x = 104; + player_exploding = 0; + enemy_exploding = 0; + framecount = 0; + + while (end_timer) { + wait_vblank(); + framecount++; + + if (player_exploding) { + set_sprite(0, (framecount & 2) ? S_BOOM1 : S_BOOM2, PAL_ORANGE, player_x, PLAYER_Y); + if ((framecount & 31) == 31) { + player_exploding = 0; + if (lives) { + lives--; + draw_score(); + player_x = 104; + } else { + end_timer = 1; + } + } + } else { + if ((framecount & 0x7f) == 0 && enemies_left > 4) + new_attack_wave(); + move_player(); + does_missile_hit_player(); + } + + if ((framecount & 3) == 0) animate_boom(); + move_attackers(); + move_missiles(); + does_player_shoot_formation(); + does_player_shoot_attacker(); + draw_next_row(); + draw_attackers(); + draw_missiles(); + if ((framecount & 0xf) == 0) think_attackers(); + + if (!enemies_left) end_timer--; + if (!lives && !player_exploding) end_timer--; + } + + hide_all_sprites(); + put_string(9, 16, "GAME OVER", PAL_ORANGE); + { + byte t = 120; + while (t--) wait_vblank(); + } +} + +void main(void) { + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + watchdog = 0; + video_framecount = 0; + + clrscr(0); + hide_all_sprites(); + put_string(8, 14, "SOLARIAN", PAL_PINK); + put_string(5, 18, "PRESS START", PAL_YELLOW); + put_string(3, 22, "SPACE TO FIRE", PAL_CYAN); + + while (!START1) { + wait_vblank(); + } + + for (;;) + play_round(); +} + +/* ==== PACMAN GFX BEGIN (per-file; regenerate: scripts/gen_pacman_gfx.py) ==== */ +/* Graphics + sound waves private to solarian.c — edit without affecting other demos. */ +/* Color PROM */ +const byte __at(0x6000) color_prom[32] = /*{pal:"pacman",n:32}*/ { + 0x00,0x07,0x66,0xef,0x00,0xf8,0xea,0x6f,0x00,0x3f,0x00,0xc9,0x38,0xaa,0xaf,0xf6, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Asset-editor palette slices */ +const byte editor_pals[52] = /*{pal:"pacman",layout:"pacman"}*/ { + 0x00,0xf6,0xc9,0x07,0x00,0xf6,0xc9,0xef,0x00,0xf6,0xc9,0xf8,0x00,0xf6,0xc9,0x6f, + 0x00,0xc9,0x07,0x3f,0x00,0xaf,0x00,0xc9,0x00,0x38,0xc9,0xaf,0x00,0x38,0xf6,0x07, + 0x00,0x00,0x00,0x00,0x00,0x07,0x66,0xf6,0x00,0x6f,0x38,0x66,0x00,0xf6,0xc9,0x00, + 0x00,0x00,0x00,0x00, +}; + +/* Palette PROM */ +const byte __at(0x6100) palette_prom[256] = { + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x03, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x05,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x07, + 0x00,0x00,0x00,0x00,0x00,0x0b,0x01,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x01,0x0c,0x0f, + 0x00,0x0e,0x00,0x0b,0x00,0x0c,0x0b,0x0e,0x00,0x0c,0x0f,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x0f,0x00,0x07,0x0c,0x02,0x00,0x09,0x06,0x0f,0x00,0x0d,0x0c,0x0f, + 0x00,0x05,0x03,0x09,0x00,0x0f,0x0b,0x00,0x00,0x0e,0x00,0x0b,0x00,0x0e,0x00,0x0b, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x01,0x00,0x0f,0x0b,0x0e,0x00,0x0e,0x00,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* WSG waveforms: 8 waves × 32 samples (0..15). Select with sound_voice(..., wave). */ +const byte __at(0x6200) wave_rom[256] = /*{w:32,h:1,count:8,bpp:8}*/ { + 0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x09, + 0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, + 0x00,0x05,0x0a,0x0f,0x04,0x09,0x0e,0x03,0x08,0x0d,0x02,0x07,0x0c,0x01,0x06,0x0b, + 0x00,0x05,0x0a,0x0f,0x04,0x09,0x0e,0x03,0x08,0x0d,0x02,0x07,0x0c,0x01,0x06,0x0b, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x07,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, + 0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, +}; + +/* Tile ROM (arcade font + this demo's homebrew tiles) */ +const byte __at(0x4000) tile_rom[4096] = /*{w:8,h:8,count:256,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x44,0xaa,0x00,0x88,0x88,0x00,0xaa,0x44,0x33,0x77,0xdd,0xff,0xff,0xdd,0x77,0x33, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Sprite ROM (this demo's homebrew sprites) */ +const byte __at(0x5000) sprite_rom[4096] = /*{w:16,h:16,count:64,bpp:2,pacstrip:1}*/ { + 0x66,0xee,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x77,0xff, + 0x00,0x00,0x00,0x11,0x77,0xff,0xff,0x33,0x00,0x11,0x77,0xff,0xcc,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xcc,0xee,0x66,0xff,0x77,0x11,0x00,0x00,0x00,0x00,0x00, + 0x33,0xff,0xff,0x77,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xff,0x77,0x11,0x00, + 0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x77,0x33,0x11, + 0x00,0x00,0x77,0xff,0xee,0xff,0xbb,0xff,0x00,0x00,0x88,0x99,0x33,0xee,0xcc,0x88, + 0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x11,0x33,0x77,0x55,0x00,0x00,0x00,0x00, + 0xff,0xbb,0xff,0xee,0xff,0x77,0x00,0x00,0x88,0xcc,0xee,0x33,0x99,0x88,0x00,0x00, + 0x00,0x00,0x44,0x88,0x22,0x44,0x88,0x88,0x00,0x00,0x22,0x11,0x44,0x22,0x11,0x11, + 0x00,0x00,0x33,0x77,0xcc,0xcc,0xaa,0x99,0x00,0x00,0xcc,0xee,0x33,0x33,0x55,0x99, + 0x88,0x88,0x44,0x22,0x88,0x44,0x00,0x00,0x11,0x11,0x22,0x44,0x11,0x22,0x00,0x00, + 0x99,0xaa,0xcc,0xcc,0x77,0x33,0x00,0x00,0x99,0x55,0x33,0x33,0xee,0xcc,0x00,0x00, + 0x00,0x00,0xaa,0x00,0x44,0x00,0x88,0x00,0x00,0x00,0x55,0x00,0x22,0x00,0x11,0x00, + 0x00,0x00,0x22,0x44,0xdd,0x22,0x88,0x99,0x00,0x00,0x44,0x22,0xbb,0x44,0x11,0x99, + 0x00,0x88,0x00,0x44,0x00,0xaa,0x00,0x00,0x00,0x11,0x00,0x22,0x00,0x55,0x00,0x00, + 0x99,0x88,0x22,0xdd,0x44,0x22,0x00,0x00,0x99,0x11,0x44,0xbb,0x22,0x44,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x22,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +/* ==== PACMAN GFX END ==== */ diff --git a/presets/pacman/sprites.c b/presets/pacman/sprites.c index 08732134..ccefbf4f 100644 --- a/presets/pacman/sprites.c +++ b/presets/pacman/sprites.c @@ -1,217 +1,658 @@ -#include - -typedef unsigned char byte; -typedef unsigned short word; - -// Hardware memory addresses for Pacman -byte __at (0x4000) vram[32][36]; // Video RAM -byte __at (0x4400) cram[32][36]; // Color RAM - -struct { - byte xpos; - byte ypos; - byte color; - byte shape; -} __at (0x4FF0) sprites[8]; - -// Hardware control registers -byte __at (0x5000) interrupt_enable; -byte __at (0x5001) sound_enable; - -// Input registers -volatile byte __at (0x5000) input0; -volatile byte __at (0x5040) input1; - -// Input controls (active low) -#define UP1 !(input0 & 0x1) -#define LEFT1 !(input0 & 0x2) -#define RIGHT1 !(input0 & 0x4) -#define DOWN1 !(input0 & 0x8) -#define START1 !(input1 & 0x20) - -// Video frame counter -volatile byte video_framecount; - -// NMI interrupt handler -void rst_66() __interrupt { - video_framecount++; -} +/* + * Pac-Man sprite demo — move hardware sprites with the joystick. + * Graphics for this file are appended at the bottom (private copy). + */ +//#link "pacman_common.c" +#include "pacman_common.h" -// Entry point -void start() { +/* Startup + NMI @ 0x0066 (must be in the main object so it links at 0x0000) */ +void start(void) __naked { __asm - LD SP,#0x4800 - EI - LD BC, #l__INITIALIZER+1 - LD A, B - LD DE, #s__INITIALIZED - LD HL, #s__INITIALIZER - LDIR + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + jp _main + .ds 0x66 - (. - _start) + push af + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + pop af + retn __endasm; - main(); } -void wait_for_frame() { - byte initial_framecount = video_framecount; - *(volatile byte*)0x50C0 = 0; // Reset watchdog - while (video_framecount == initial_framecount); -} -void clear_screen() { - byte x, y; - for (x = 0; x < 32; x++) { - for (y = 0; y < 36; y++) { - vram[x][y] = 0; - cram[x][y] = 0; - } - } -} +void main(void) { + byte px, py; + byte ax, ay; + byte frame; + sbyte adx, ady; -void draw_text(byte x, byte y, const char* text, byte color) { - byte i; - for (i = 0; text[i]; i++) { - vram[x][y + i] = text[i] - 0x20 + 0x10; // ASCII offset - cram[x][y + i] = color; - } -} + video_framecount = 0; + interrupt_enable = 1; + sound_enable = 1; + flip_screen = 0; + watchdog = 0; -void init_sprites() { - byte i; - - // Initialize all 8 sprites - for (i = 0; i < 8; i++) { - sprites[i].xpos = 60 + i * 20; // Spread across screen - sprites[i].ypos = 100 + i * 10; // Stagger vertically - sprites[i].shape = i + 1; // Different shapes - sprites[i].color = i + 1; // Different colors - } -} + clrscr(0); + hide_all_sprites(); + put_string(6, 1, "SPRITES", PAL_CYAN); + put_string(2, 34, "MOVE WITH JOY", PAL_YELLOW); -void move_sprites() { - static byte counter = 0; - byte i; - - counter++; - - // Move sprites in different patterns - for (i = 0; i < 8; i++) { - switch (i) { - case 0: // Circular motion - sprites[i].xpos = 112 + (signed char)(50 * cos_table[counter & 63]); - sprites[i].ypos = 144 + (signed char)(30 * sin_table[counter & 63]); - break; - - case 1: // Horizontal bounce - sprites[i].xpos = 40 + ((counter * 2) & 127); - if (sprites[i].xpos > 184) sprites[i].xpos = 224 - sprites[i].xpos; - break; - - case 2: // Vertical bounce - sprites[i].ypos = 40 + ((counter * 3) & 127); - if (sprites[i].ypos > 200) sprites[i].ypos = 288 - sprites[i].ypos; - break; - - case 3: // Diagonal movement - sprites[i].xpos = 20 + ((counter * 2) & 127); - sprites[i].ypos = 20 + ((counter * 2) & 127); - break; - - case 4: // Controlled by player - if (UP1) sprites[i].ypos--; - if (DOWN1) sprites[i].ypos++; - if (LEFT1) sprites[i].xpos--; - if (RIGHT1) sprites[i].xpos++; - break; - - default: // Random jitter - sprites[i].xpos += (counter & 1) ? 1 : -1; - sprites[i].ypos += (counter & 2) ? 1 : -1; - break; - } - - // Keep sprites on screen - if (sprites[i].xpos > 240) sprites[i].xpos = 240; - if (sprites[i].ypos > 280) sprites[i].ypos = 280; - } -} + px = 104; + py = 200; + ax = 40; + ay = 60; + adx = 1; + ady = 1; + frame = 0; + + while (1) { + wait_vblank(); + frame++; + + if (LEFT1 && px > 0) px -= 2; + if (RIGHT1 && px < 208) px += 2; + if (UP1 && py > 16) py -= 2; + if (DOWN1 && py < 250) py += 2; + + ax += adx; + ay += ady; + if (ax < 8 || ax > 200) adx = -adx; + if (ay < 24 || ay > 240) ady = -ady; -void cycle_colors() { - static byte color_counter = 0; - byte i; - - color_counter++; - - // Cycle through colors every 30 frames - if ((color_counter & 31) == 0) { - for (i = 0; i < 8; i++) { - sprites[i].color = (sprites[i].color & 0x0F) + 1; - if (sprites[i].color > 15) sprites[i].color = 1; - } + set_sprite(0, S_PLAYER, PAL_YELLOW, px, py); + set_sprite(1, S_ALIEN, PAL_PINK, ax, ay); + set_sprite(2, S_ALIEN, PAL_CYAN, 180 - (ax >> 1), ay + 20); + set_sprite(3, (frame & 8) ? S_BOOM1 : S_BOOM2, PAL_ORANGE, 100, 120); + + if (FIRE1) + set_sprite(4, S_BULLET, PAL_CYAN, px + 4, py - 16); + else + hide_sprite(4); } } -// Simple sin/cos tables for smooth movement -const signed char cos_table[64] = { - 63, 62, 60, 57, 54, 50, 45, 40, 34, 28, 22, 15, 8, 1, -6, -13, - -20, -27, -33, -39, -44, -49, -53, -56, -59, -61, -62, -63, -62, -61, -59, -56, - -53, -49, -44, -39, -33, -27, -20, -13, -6, 1, 8, 15, 22, 28, 34, 40, - 45, 50, 54, 57, 60, 62, 63, 62, 60, 57, 54, 50, 45, 40, 34, 28 +/* ==== PACMAN GFX BEGIN (per-file; regenerate: scripts/gen_pacman_gfx.py) ==== */ +/* Graphics + sound waves private to sprites.c — edit without affecting other demos. */ +/* Color PROM */ +const byte __at(0x6000) color_prom[32] = /*{pal:"pacman",n:32}*/ { + 0x00,0x07,0x66,0xef,0x00,0xf8,0xea,0x6f,0x00,0x3f,0x00,0xc9,0x38,0xaa,0xaf,0xf6, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; -const signed char sin_table[64] = { - 0, 7, 14, 21, 27, 33, 39, 44, 49, 53, 56, 59, 61, 62, 63, 62, - 61, 59, 56, 53, 49, 44, 39, 33, 27, 21, 14, 7, 0, -7, -14, -21, - -27, -33, -39, -44, -49, -53, -56, -59, -61, -62, -63, -62, -61, -59, -56, -53, - -49, -44, -39, -33, -27, -21, -14, -7, 0, 7, 14, 21, 27, 33, 39, 44 +/* Asset-editor palette slices */ +const byte editor_pals[52] = /*{pal:"pacman",layout:"pacman"}*/ { + 0x00,0xf6,0xc9,0x07,0x00,0xf6,0xc9,0xef,0x00,0xf6,0xc9,0xf8,0x00,0xf6,0xc9,0x6f, + 0x00,0xc9,0x07,0x3f,0x00,0xaf,0x00,0xc9,0x00,0x38,0xc9,0xaf,0x00,0x38,0xf6,0x07, + 0x00,0x00,0x00,0x00,0x00,0x07,0x66,0xf6,0x00,0x6f,0x38,0x66,0x00,0xf6,0xc9,0x00, + 0x00,0x00,0x00,0x00, }; -void show_sprite_info() { - draw_text(1, 2, "PACMAN SPRITE TEST", 0x0F); - draw_text(3, 2, "8 HARDWARE SPRITES", 0x09); - draw_text(5, 2, "USE JOYSTICK FOR #4", 0x0B); - draw_text(7, 2, "PRESS START TO EXIT", 0x0C); - - // Show sprite numbers - for (byte i = 0; i < 8; i++) { - vram[10 + i * 2][2] = '0' + i - 0x20 + 0x10; - cram[10 + i * 2][2] = i + 1; - } -} +/* Palette PROM */ +const byte __at(0x6100) palette_prom[256] = { + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x03, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x05,0x00,0x00,0x00,0x00,0x00,0x0f,0x0b,0x07, + 0x00,0x00,0x00,0x00,0x00,0x0b,0x01,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x01,0x0c,0x0f, + 0x00,0x0e,0x00,0x0b,0x00,0x0c,0x0b,0x0e,0x00,0x0c,0x0f,0x01,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x0f,0x00,0x07,0x0c,0x02,0x00,0x09,0x06,0x0f,0x00,0x0d,0x0c,0x0f, + 0x00,0x05,0x03,0x09,0x00,0x0f,0x0b,0x00,0x00,0x0e,0x00,0x0b,0x00,0x0e,0x00,0x0b, + 0x00,0x00,0x00,0x00,0x00,0x0f,0x0e,0x01,0x00,0x0f,0x0b,0x0e,0x00,0x0e,0x00,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; -void main() { - // Initialize hardware - interrupt_enable = 1; - sound_enable = 1; - - // Clear screen and show info - clear_screen(); - show_sprite_info(); - - // Initialize sprites - init_sprites(); - - // Main animation loop - while (1) { - wait_for_frame(); - - move_sprites(); - cycle_colors(); - - // Exit on start button - if (START1) break; - } - - // Hide all sprites - for (byte i = 0; i < 8; i++) { - sprites[i].xpos = 0; - sprites[i].ypos = 0; - } - - clear_screen(); - draw_text(14, 8, "SPRITE TEST COMPLETE", 0x0F); - - while(1) { - wait_for_frame(); - if (START1) break; - } -} \ No newline at end of file +/* WSG waveforms: 8 waves × 32 samples (0..15). Select with sound_voice(..., wave). */ +const byte __at(0x6200) wave_rom[256] = /*{w:32,h:1,count:8,bpp:8}*/ { + 0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x09, + 0x08,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06, + 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00, + 0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07, + 0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00, + 0x08,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x07,0x0a,0x0d,0x0e,0x0f,0x0e,0x0d,0x0a,0x08,0x05,0x02,0x01,0x00,0x01,0x02,0x05, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c,0x02,0x0c, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, + 0x00,0x03,0x06,0x09,0x0c,0x0f,0x02,0x05,0x08,0x0b,0x0e,0x01,0x04,0x07,0x0a,0x0d, +}; + +/* Tile ROM (arcade font + this demo's homebrew tiles) */ +const byte __at(0x4000) tile_rom[4096] = /*{w:8,h:8,count:256,bpp:2,pacstrip:1}*/ { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, + 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, + 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, + 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, + 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, + 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, + 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, + 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, + 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, + 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, + 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, + 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, + 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, + 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, + 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, + 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, + 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, + 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, + 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, + 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, + 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, + 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +/* Sprite ROM (this demo's homebrew sprites) */ +const byte __at(0x5000) sprite_rom[4096] = /*{w:16,h:16,count:64,bpp:2,pacstrip:1}*/ { + 0x66,0xee,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x77,0xff, + 0x00,0x00,0x00,0x11,0x77,0xff,0xff,0x33,0x00,0x11,0x77,0xff,0xcc,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xcc,0xee,0x66,0xff,0x77,0x11,0x00,0x00,0x00,0x00,0x00, + 0x33,0xff,0xff,0x77,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xff,0x77,0x11,0x00, + 0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x77,0x33,0x11, + 0x00,0x00,0x77,0xff,0xee,0xff,0xbb,0xff,0x00,0x00,0x88,0x99,0x33,0xee,0xcc,0x88, + 0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x11,0x33,0x77,0x55,0x00,0x00,0x00,0x00, + 0xff,0xbb,0xff,0xee,0xff,0x77,0x00,0x00,0x88,0xcc,0xee,0x33,0x99,0x88,0x00,0x00, + 0x00,0x00,0x44,0x88,0x22,0x44,0x88,0x88,0x00,0x00,0x22,0x11,0x44,0x22,0x11,0x11, + 0x00,0x00,0x33,0x77,0xcc,0xcc,0xaa,0x99,0x00,0x00,0xcc,0xee,0x33,0x33,0x55,0x99, + 0x88,0x88,0x44,0x22,0x88,0x44,0x00,0x00,0x11,0x11,0x22,0x44,0x11,0x22,0x00,0x00, + 0x99,0xaa,0xcc,0xcc,0x77,0x33,0x00,0x00,0x99,0x55,0x33,0x33,0xee,0xcc,0x00,0x00, + 0x00,0x00,0xaa,0x00,0x44,0x00,0x88,0x00,0x00,0x00,0x55,0x00,0x22,0x00,0x11,0x00, + 0x00,0x00,0x22,0x44,0xdd,0x22,0x88,0x99,0x00,0x00,0x44,0x22,0xbb,0x44,0x11,0x99, + 0x00,0x88,0x00,0x44,0x00,0xaa,0x00,0x00,0x00,0x11,0x00,0x22,0x00,0x55,0x00,0x00, + 0x99,0x88,0x22,0xdd,0x44,0x22,0x00,0x00,0x99,0x11,0x44,0xbb,0x22,0x44,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x22,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x22,0x66,0x55,0x44, + 0x00,0x00,0x00,0xff,0x00,0x00,0x66,0x44,0x00,0x00,0x00,0x00,0x88,0xcc,0x44,0x44, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x55,0x66,0x22,0x11,0x00,0x00,0x00, + 0x44,0x66,0x00,0x00,0xff,0x00,0x00,0x00,0x44,0x44,0xcc,0x88,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +/* ==== PACMAN GFX END ==== */ diff --git a/src/common/cpu/ZilogZ80.ts b/src/common/cpu/ZilogZ80.ts index f15ce40d..6ef4f5d3 100644 --- a/src/common/cpu/ZilogZ80.ts +++ b/src/common/cpu/ZilogZ80.ts @@ -70,7 +70,7 @@ function FastZ80(coreParameter) // the memory refresh, the stack pointer, and the program counter. let i = 0x00; let r = 0x00; - let sp = 0xdff0; + let sp = 0x0000; // Changed from 0xdff0 - SP should be undefined at reset, program must initialize it let pc = 0x0000; // We don't keep an F register for the flags, // because most of the time we're only accessing a single flag, @@ -161,7 +161,7 @@ let reset = function() // These registers are the ones that have predictable states // immediately following a power-on or a reset. // The others are left alone, because their states are unpredictable. - sp = 0xdff0; + sp = 0x0000; pc = 0x0000; a = 0x00; r = 0x00; diff --git a/src/ide/pixeleditor.ts b/src/ide/pixeleditor.ts index 2e98f828..1d751bc5 100644 --- a/src/ide/pixeleditor.ts +++ b/src/ide/pixeleditor.ts @@ -44,6 +44,10 @@ export type PixelEditorImageFormat = { aspect?: number // aspect ratio xform?: string // CSS transform destfmt?: PixelEditorImageFormat + // Pac-Man / Namco arcade: 8-byte vertical strips (4 rows × 8 cols), + // 2bpp packed as bit y + bit (y+4), X/Y mirrored within each strip. + // Tiles (8×8): 2 strips. Sprites (16×16): 8 strips in hardware order. + pacstrip?:boolean|number }; export type PixelEditorPaletteFormat = { @@ -151,7 +155,89 @@ function reindexMask(x: number, inds: number[]): [number, number] { return [i >> 3, i & 7]; } -export function convertWordsToImages(words: UintArray, fmt: PixelEditorImageFormat): Uint8Array[] { +// Pac-Man strip layouts (must match src/machine/pacman.ts PacmanVideo) +const PAC_TILE_STRIPS: [number, number, number][] = [ + // [byteOffset, bx, by] + [0, 0, 4], + [8, 0, 0], +]; +const PAC_SPRITE_STRIPS: [number, number, number][] = [ + [0, 8, 12], [8, 8, 0], [16, 8, 4], [24, 8, 8], + [32, 0, 12], [40, 0, 0], [48, 0, 4], [56, 0, 8], +]; + +function pacStripDecode(input: UintArray, inOff: number, output: number[], bx: number, by: number, imgWidth: number) { + for (var x = 0; x < 8; x++) { + var strip = input[inOff + x] || 0; + for (var y = 0; y < 4; y++) { + var i = (3 - y) * imgWidth + (7 - x); + var pen = ((strip >> y) & 1) | (((strip >> (y + 4)) & 1) << 1); + output[by * imgWidth + bx + i] = pen; + } + } +} + +function pacStripEncode(output: number[], outOff: number, pixels: Uint8Array|number[], bx: number, by: number, imgWidth: number) { + for (var x = 0; x < 8; x++) { + var strip = 0; + for (var y = 0; y < 4; y++) { + var i = (3 - y) * imgWidth + (7 - x); + var pen = (pixels[by * imgWidth + bx + i] || 0) & 3; + if (pen & 1) strip |= (1 << y); + if (pen & 2) strip |= (1 << (y + 4)); + } + output[outOff + x] = strip; + } +} + +function pacStripLayouts(fmt: PixelEditorImageFormat): [number, number, number][] { + if (fmt.w === 16 && fmt.h === 16) return PAC_SPRITE_STRIPS; + return PAC_TILE_STRIPS; +} + +function pacStripBytesPerImage(fmt: PixelEditorImageFormat): number { + return pacStripLayouts(fmt).length * 8; +} + +function convertPacStripWordsToImages(words: UintArray, fmt: PixelEditorImageFormat): Uint8Array[] { + var width = fmt.w; + var height = fmt.h; + var count = fmt.count || 1; + var wpimg = fmt.wpimg || pacStripBytesPerImage(fmt); + var layouts = pacStripLayouts(fmt); + var images = []; + for (var n = 0; n < count; n++) { + var pix: number[] = new Array(width * height).fill(0); + var base = n * wpimg; + for (var s = 0; s < layouts.length; s++) { + var [off, bx, by] = layouts[s]; + pacStripDecode(words, base + off, pix, bx, by, width); + } + images.push(new Uint8Array(pix)); + } + return images; +} + +function convertPacStripImagesToWords(images: Uint8Array[], fmt: PixelEditorImageFormat): number[] { + var width = fmt.w; + var height = fmt.h; + var count = fmt.count || images.length; + var wpimg = fmt.wpimg || pacStripBytesPerImage(fmt); + var layouts = pacStripLayouts(fmt); + var words = new Array(wpimg * count).fill(0); + for (var n = 0; n < count; n++) { + var pix = images[n] || new Uint8Array(width * height); + var base = n * wpimg; + for (var s = 0; s < layouts.length; s++) { + var [off, bx, by] = layouts[s]; + pacStripEncode(words, base + off, pix, bx, by, width); + } + } + return words; +} + +export function convertWordsToImages(words:UintArray, fmt:PixelEditorImageFormat) : Uint8Array[] { + if (fmt.pacstrip) return convertPacStripWordsToImages(words, fmt); var width = fmt.w; var height = fmt.h; var count = fmt.count || 1; @@ -239,6 +325,7 @@ export function validateAssetData(datastr: string, fmt): string | null { export function convertImagesToWords(images: Uint8Array[], fmt: PixelEditorImageFormat): number[] { if (fmt.destfmt) fmt = fmt.destfmt; + if (fmt.pacstrip) return convertPacStripImagesToWords(images, fmt); var width = fmt.w; var height = fmt.h; var count = fmt.count || 1; @@ -299,13 +386,27 @@ export function convertPaletteBytes(arr: UintArray, r0, r1, g0, g1, b0, b1): num return result; } +/** + * Pac-Man / Namco color PROM byte → RGBA. + * Must match src/machine/pacman.ts PacmanVideo.rebuild() (MAME resistor weights). + * Encoding: RRR (bits 0-2), GGG (3-5), BB (6-7). + */ +export function decodePacmanColorPromByte(d: number): number { + var r = ((d >> 0) & 1) * 0x21 + ((d >> 1) & 1) * 0x47 + ((d >> 2) & 1) * 0x97; + var g = ((d >> 3) & 1) * 0x21 + ((d >> 4) & 1) * 0x47 + ((d >> 5) & 1) * 0x97; + var b = ((d >> 6) & 1) * 0x51 + ((d >> 7) & 1) * 0xae; + return 0xff000000 | (b << 16) | (g << 8) | r; +} + export function getPaletteLength(palfmt: PixelEditorPaletteFormat): number { var pal = palfmt.pal; if (typeof pal === 'number') { var rr = Math.floor(Math.abs(pal / 100) % 10); var gg = Math.floor(Math.abs(pal / 10) % 10); var bb = Math.floor(Math.abs(pal) % 10); - return 1 << (rr + gg + bb); + return 1<<(rr+gg+bb); + } else if (pal === 'pacman') { + return 256; // every PROM encoding byte → a color } else { var paltable = PREDEF_PALETTES[pal]; if (paltable) { @@ -327,7 +428,11 @@ export function convertPaletteFormat(palbytes: UintArray, palfmt: PixelEditorPal if (pal >= 0) newpalette = convertPaletteBytes(palbytes, 0, rr, rr, gg, rr + gg, bb); else - newpalette = convertPaletteBytes(palbytes, rr + gg, bb, rr, gg, 0, rr); + newpalette = convertPaletteBytes(palbytes, rr+gg, bb, rr, gg, 0, rr); + } else if (pal === 'pacman') { + newpalette = []; + for (var i = 0; i < palbytes.length; i++) + newpalette.push(decodePacmanColorPromByte(palbytes[i])); } else { var paltable = PREDEF_PALETTES[pal]; if (paltable) { @@ -389,6 +494,19 @@ var PREDEF_LAYOUTS: { [id: string]: PixelEditorPaletteLayout } = { ['Left', 0x00, -4], ['Right', 0x04, -4] ], + // Pac-Man: each palette PROM entry is 4 pens (indices into the 32-color PROM). + // Arrays tagged layout:"pacman" should store those pens as already-resolved color-PROM bytes. + 'pacman':[ + ['Pal 01', 0x00, 4], + ['Pal 03', 0x04, 4], + ['Pal 05', 0x08, 4], + ['Pal 07', 0x0c, 4], + ['Pal 09', 0x10, 4], + ['Pal 10', 0x14, 4], + ['Pal 11', 0x18, 4], + ['Pal 14', 0x1c, 4], + ['Pal 19', 0x20, 4], + ], }; ///// @@ -597,7 +715,11 @@ export class Palettizer extends PixNode { constructor(context: EditorContext, fmt: PixelEditorImageFormat) { super(); this.context = context; - this.ncolors = 1 << ((fmt.bpp || 1) * (fmt.np || 1)); + // Pac-Man strip bitmaps are always 2bpp (4 pens), even if bpp is omitted. + if (fmt.pacstrip) + this.ncolors = 4; + else + this.ncolors = 1 << ((fmt.bpp||1) * (fmt.np||1)); } updateLeft() { if (this.right) { this.rgbimgs = this.right.rgbimgs; } // TODO: check is for unit test, remove? @@ -682,7 +804,11 @@ export class PaletteFormatToRGB extends PixNode { updateRight() { if (equalArrays(this.words, this.left.words)) return false; this.words = this.left.words; - this.palette = dedupPalette(convertPaletteFormat(this.words, this.palfmt)); + var cols = convertPaletteFormat(this.words, this.palfmt); + // Keep exact PROM colors for Pac-Man (and any layout slices). Dedup is only + // for flat palette grids where identical swatches need unique edit identities. + this.palette = (this.palfmt.layout || this.palfmt.pal === 'pacman') + ? new Uint32Array(cols) : dedupPalette(cols); this.layout = PREDEF_LAYOUTS[this.palfmt.layout]; this.rgbimgs = []; this.palette.forEach((rgba: number) => { diff --git a/src/machine/pacman.ts b/src/machine/pacman.ts index 61bba14c..3599d9ee 100644 --- a/src/machine/pacman.ts +++ b/src/machine/pacman.ts @@ -1,542 +1,439 @@ import { Z80, Z80State } from "../common/cpu/ZilogZ80"; import { BasicScanlineMachine } from "../common/devices"; -import { KeyFlags, newAddressDecoder, padBytes, noise, Keys, makeKeycodeMap, newKeyboardHandler, EmuHalt } from "../common/emu"; -import { TssChannelAdapter, MasterAudio } from "../common/audio"; -import { hex } from "../common/util"; +import { padBytes, Keys, makeKeycodeMap, newKeyboardHandler, EmuHalt } from "../common/emu"; const PACMAN_KEYCODE_MAP = makeKeycodeMap([ - [Keys.UP, 0, 0x1], // UP - [Keys.LEFT, 0, 0x2], // LEFT - [Keys.RIGHT, 0, 0x4], // RIGHT - [Keys.DOWN, 0, 0x8], // DOWN - [Keys.VK_5, 0, 0x20], // COIN1 - [Keys.VK_6, 0, 0x40], // COIN2 - [Keys.START, 1, 0x20], // START1 - [Keys.VK_2, 1, 0x40], // START2 - // Removed SERVICE mapping to prevent accidental service mode activation - // [Keys.SELECT, 1, 0x10], // SERVICE + [Keys.UP, 0, 0x1], + [Keys.LEFT, 0, 0x2], + [Keys.RIGHT, 0, 0x4], + [Keys.DOWN, 0, 0x8], + [Keys.VK_5, 0, 0x20], // COIN1 + [Keys.VK_6, 0, 0x40], // COIN2 + [Keys.A, 0, 0x80], // FIRE (Space) — homebrew + [Keys.START, 1, 0x20], // START1 + [Keys.VK_2, 1, 0x40], // START2 ]); -// Pacman palette colors (4-bit RGB conversion) -const bitcolors = [ - 0x00000000, // 0 - 0x00000f00, // 1 - red - 0x000f0000, // 2 - green - 0x000f0f00, // 3 - yellow - 0x0f000000, // 4 - blue - 0x0f000f00, // 5 - magenta - 0x0f0f0000, // 6 - cyan - 0x0f0f0f00, // 7 - white -]; - -// Pacman video rendering - proper tile-based version -const PacmanVideo = function (machine, charROM: Uint8Array, vram: Uint8Array, cram: Uint8Array, oram: Uint8Array, palette: Uint32Array, options) { - var self = this; - this.machine = machine; - this.charROM = charROM; - this.frameCounter = 0; - - this.advanceFrame = function () { - this.frameCounter = (this.frameCounter + 1) & 0xff; +const SCREEN_W = 224; +const SCREEN_H = 288; + +/** + * Pacman video — ported from pac-c's proven decode/draw path. + * ROM layout in combined image: + * 0x4000 tile ROM (4KB), 0x5000 sprite ROM (4KB), + * 0x6000 color PROM (32B), 0x6100 palette PROM (256B) + */ +class PacmanVideo { + tiles = new Uint8Array(256 * 64); // decoded 8x8 tiles, 2bpp index per pixel + sprites = new Uint8Array(64 * 256); // decoded 16x16 sprites + colors = new Uint32Array(32); // RGB from color PROM + paletteRom = new Uint8Array(0x100); // 64 palettes × 4 pens + spritePos = new Uint8Array(16); // coords at 0x5060-0x506f + + constructor( + public rom: Uint8Array, + public vram: Uint8Array, + public cram: Uint8Array, + public ram: Uint8Array, + ) { + this.rebuild(); + } + + rebuild() { + // Color PROM → RGBA (MAME resistor weights; must match pixeleditor pal:"pacman") + for (var i = 0; i < 32; i++) { + var d = this.rom[0x6000 + i]; + var r = ((d >> 0) & 1) * 0x21 + ((d >> 1) & 1) * 0x47 + ((d >> 2) & 1) * 0x97; + var g = ((d >> 3) & 1) * 0x21 + ((d >> 4) & 1) * 0x47 + ((d >> 5) & 1) * 0x97; + var b = ((d >> 6) & 1) * 0x51 + ((d >> 7) & 1) * 0xae; + this.colors[i] = 0xff000000 | (b << 16) | (g << 8) | r; + } + this.paletteRom.set(this.rom.subarray(0x6100, 0x6200)); + + // Decode tiles (pac-c decode_strip, mirrored) + var tileRom = this.rom.subarray(0x4000, 0x5000); + for (var t = 0; t < 256; t++) { + var out = this.tiles.subarray(t * 64, t * 64 + 64); + var src = tileRom.subarray(t * 16, t * 16 + 16); + this.decodeStrip(src, 0, out, 0, 4, 8); + this.decodeStrip(src, 8, out, 0, 0, 8); + } + + // Decode sprites + var sprRom = this.rom.subarray(0x5000, 0x6000); + for (var s = 0; s < 64; s++) { + var sout = this.sprites.subarray(s * 256, s * 256 + 256); + var ssrc = sprRom.subarray(s * 64, s * 64 + 64); + this.decodeStrip(ssrc, 0 * 8, sout, 8, 12, 16); + this.decodeStrip(ssrc, 1 * 8, sout, 8, 0, 16); + this.decodeStrip(ssrc, 2 * 8, sout, 8, 4, 16); + this.decodeStrip(ssrc, 3 * 8, sout, 8, 8, 16); + this.decodeStrip(ssrc, 4 * 8, sout, 0, 12, 16); + this.decodeStrip(ssrc, 5 * 8, sout, 0, 0, 16); + this.decodeStrip(ssrc, 6 * 8, sout, 0, 4, 16); + this.decodeStrip(ssrc, 7 * 8, sout, 0, 8, 16); + } + } + + // Exact port of pac-c decode_strip — bitmaps are stored mirrored + decodeStrip(input: Uint8Array, inOff: number, output: Uint8Array, bx: number, by: number, imgWidth: number) { + var base = by * imgWidth + bx; + for (var x = 0; x < 8; x++) { + var strip = input[inOff + x]; + for (var y = 0; y < 4; y++) { + var i = (3 - y) * imgWidth + (7 - x); + var pen = ((strip >> y) & 1) | (((strip >> (y + 4)) & 1) << 1); + output[base + i] = pen; + } + } + } + + getPalette(palNo: number, out: Uint8Array) { + palNo &= 0x3f; + var o = palNo * 4; + out[0] = this.paletteRom[o]; + out[1] = this.paletteRom[o + 1]; + out[2] = this.paletteRom[o + 2]; + out[3] = this.paletteRom[o + 3]; } - this.drawScanline = function (pixels, sl) { - var pixofs = sl * 224; - - // Pacman screen is rotated 90 degrees, 28x36 characters visible - // Clear scanline with black - for (var i = 0; i < 224; i++) { - pixels[pixofs + i] = 0xff000000; + drawTile(pixels: Uint32Array, tileNo: number, pal: Uint8Array, x: number, y: number) { + if (x < 0 || x >= SCREEN_W) return; + var tile = this.tiles.subarray(tileNo * 64, tileNo * 64 + 64); + for (var i = 0; i < 64; i++) { + var px = i & 7; + var py = i >> 3; + var sx = x + px; + if (sx < 0 || sx >= SCREEN_W) continue; + var pen = pal[tile[i] & 3]; + pixels[(y + py) * SCREEN_W + sx] = this.colors[pen & 31]; } - - // Draw character tiles - // Pacman screen: 28 columns (visible), each 8 pixels wide = 224 pixels - // Due to rotation, we need to read vertically from VRAM - var sy = sl; - var ty = Math.floor(sy / 8); // tile Y (0-35) - var py = sy & 7; // pixel Y within tile (0-7) - - if (ty < 36) { // valid tile row - for (var tx = 0; tx < 28; tx++) { // 28 visible columns - var sx = tx * 8; - - // Calculate VRAM address - Pacman has rotated layout - // First 2 rows and last 2 rows are at different positions - var vramAddr; - if (ty < 2) { - // Top 2 rows (score area) - use columns 0-31 - vramAddr = ty * 32 + (tx + 2); - } else if (ty >= 34) { - // Bottom 2 rows (lives/fruit area) - use columns 0-31 - vramAddr = (ty - 32) * 32 + (tx + 2); - } else { - // Main play area - rotated columns, right to left - // Columns are stored as: rightmost column first - var col = 29 - tx; // reverse column order - var row = ty - 2; // adjust for top 2 rows - vramAddr = (col * 32) + row + 64; // offset past first 2 rows - } - - if (vramAddr < 0x400) { - var tileCode = vram[vramAddr]; - var tileColor = cram[vramAddr]; - - // Get tile graphics from character ROM - // MAME format: Each character is 16 bytes - // Bytes 0-7: pixels 0-3 of rows 0-7 (left half) - CORRECTED - // Bytes 8-15: pixels 4-7 of rows 0-7 (right half) - CORRECTED - // Within each byte: bits 0-3 = bitplane 0, bits 4-7 = bitplane 1 - var charBase = tileCode * 16; - - // Draw 8 pixels of the character - var color0 = (tileColor & 0x3f) << 2; // Base color from color RAM - for (var px = 0; px < 8; px++) { - var colorIndex; - - // Try swapping px and py for 90-degree rotation, with column flip for upside-down fix - var readRow = px; // Use px as the row to read from - var readCol = 7 - py; // Use (7-py) as the column to read from (flipped) - - if (readCol < 4) { - // Read from bytes 0-7 (left half) - var byteAddr = charBase + readRow; // bytes 0-7 - var data = this.charROM[byteAddr]; - var bitpos = readCol; // Column position - var bit0 = (data >> bitpos) & 1; // bitplane 0 - var bit1 = (data >> (bitpos + 4)) & 1; // bitplane 1 - colorIndex = color0 + bit0 + (bit1 << 1); - } else { - // Read from bytes 8-15 (right half) - var byteAddr = charBase + 8 + readRow; // bytes 8-15 - var data = this.charROM[byteAddr]; - var bitpos = readCol - 4; // Column position - var bit0 = (data >> bitpos) & 1; // bitplane 0 - var bit1 = (data >> (bitpos + 4)) & 1; // bitplane 1 - colorIndex = color0 + bit0 + (bit1 << 1); - } - - // Use black for color 0, otherwise use palette color - var color = (colorIndex & 3) ? palette[colorIndex & 31] : 0xff000000; - // Apply horizontal mirroring by drawing pixels in reverse order - var mirroredPx = 7 - px; // Horizontal flip: 0->7, 1->6, 2->5, etc. - pixels[pixofs + sx + mirroredPx] = color; - } - } + } + + drawSprite(pixels: Uint32Array, spriteNo: number, pal: Uint8Array, x: number, y: number, flipX: boolean, flipY: boolean) { + if (x <= -16 || x > SCREEN_W) return; + var spr = this.sprites.subarray(spriteNo * 256, spriteNo * 256 + 256); + for (var i = 0; i < 256; i++) { + var px = i & 15; + var py = i >> 4; + var penIdx = spr[i] & 3; + if (pal[penIdx] === 0) continue; // transparent + var xPos = flipX ? 15 - px : px; + var yPos = flipY ? 15 - py : py; + var sx = x + xPos; + var sy = y + yPos; + if (sx < 0 || sx >= SCREEN_W || sy < 0 || sy >= SCREEN_H) continue; + pixels[sy * SCREEN_W + sx] = this.colors[pal[penIdx] & 31]; + } + } + + // Full-frame draw matching pac-c pac_draw() + drawFrame(pixels: Uint32Array) { + pixels.fill(0xff000000); + var pal = new Uint8Array(4); + + // Bottom two rows (VRAM 0x00-0x3f): right→left, y=34..35 + var addr = 0; + for (var y = 34; y < 36; y++) { + for (var x = 31; x >= 0; x--) { + this.getPalette(this.cram[addr], pal); + this.drawTile(pixels, this.vram[addr], pal, (x - 2) * 8, y * 8); + addr++; } } + + // Middle playfield (VRAM 0x40-0x3bf): columns right→left, rows top→bottom + addr = 0x40; + for (var x = 29; x >= 2; x--) { + for (var y = 2; y <= 33; y++) { + this.getPalette(this.cram[addr], pal); + this.drawTile(pixels, this.vram[addr], pal, (x - 2) * 8, y * 8); + addr++; + } + } + + // Top two rows (VRAM 0x3c0-0x3ff): right→left, y=0..1 + addr = 0x3c0; + for (var y = 0; y < 2; y++) { + for (var x = 31; x >= 0; x--) { + this.getPalette(this.cram[addr], pal); + this.drawTile(pixels, this.vram[addr], pal, (x - 2) * 8, y * 8); + addr++; + } + } + + // 8 sprites (reverse order). Coords are from bottom-right origin. + for (var s = 7; s >= 0; s--) { + var info = this.ram[0x7f0 + s * 2]; // 0x4ff0 + var palNo = this.ram[0x7f0 + s * 2 + 1]; + var sx = SCREEN_W - this.spritePos[s * 2] + 15; + var sy = SCREEN_H - this.spritePos[s * 2 + 1] - 16; + this.getPalette(palNo, pal); + this.drawSprite(pixels, info >> 2, pal, sx, sy, !!(info & 2), !!(info & 1)); + } } -}; +} const XTAL = 18432000.0; -const scanlinesPerFrame = 264; -const cpuFrequency = XTAL / 6; // 3.072 MHz -const hsyncFrequency = XTAL / 3 / 192 / 2; // 16 kHz -const vsyncFrequency = hsyncFrequency / 132 / 2; // 60.606060 Hz +const cpuFrequency = XTAL / 6; +const hsyncFrequency = XTAL / 3 / 192 / 2; const cpuCyclesPerLine = cpuFrequency / hsyncFrequency; -const INITIAL_WATCHDOG = 8; - -const audioSampleRate = 60 * scanlinesPerFrame; +const INITIAL_WATCHDOG = 256; export class PacmanMachine extends BasicScanlineMachine { cpuFrequency = cpuFrequency; - canvasWidth = 224; - numTotalScanlines = 288; - numVisibleScanlines = 224; // Only 224 lines are visible in Pacman - defaultROMSize = 0x6200; // Program ROM (16KB) + Graphics ROM (8KB) + Palette space - sampleRate = audioSampleRate; + canvasWidth = SCREEN_W; + numTotalScanlines = SCREEN_H; + numVisibleScanlines = SCREEN_H; + defaultROMSize = 0x8000; cpuCyclesPerLine = cpuCyclesPerLine | 0; - rotate = 0; // Try no rotation to fix text orientation - - palBase = 0x6000; // Palette location in ROM - gfxBase = 0x4000; // Graphics ROM location in ROM + sampleRate = 60 * 264; + rotate = 0; cpu: Z80 = new Z80(); ram = new Uint8Array(0x800); - vram = new Uint8Array(0x400); // Video RAM - cram = new Uint8Array(0x400); // Color RAM - oram = new Uint8Array(0x100); // Object/Sprite RAM - charROM: Uint8Array; // Character graphics ROM - palette: Uint32Array; - gfx; // PacmanVideo - audioadapter; - watchdog_counter: number = 0; - interruptEnabled: number = 0; - soundEnabled: number = 0; - flipScreen: number = 0; - defaultInputs: number[] = [0xff, 0xff]; // Pacman inputs are active low + vram = new Uint8Array(0x400); + cram = new Uint8Array(0x400); + oram = new Uint8Array(0x100); // kept for platform debug tree compat + gfx: PacmanVideo; + + interruptEnabled = 0; + interruptVector = 0xff; + /** VBlank ISR vectored at end of frame; drained before next frame's audio. */ + pendingVBlankIsr = false; + watchdog_counter = INITIAL_WATCHDOG; + flipScreen = 0; + soundEnabled = 0; + soundRegs = new Uint8Array(0x20); + soundAcc = new Uint32Array(3); + waveforms: Uint8Array = PacmanMachine.WAVEFORMS; keyMap = PACMAN_KEYCODE_MAP; - handler; - - // Debug tracking - lastPC: number = 0; - pcStuckCounter: number = 0; - frameCounter: number = 0; - debugLogNextInstructions: number = 0; // Counter for logging next N instructions - - // LS259 mainlatch outputs (8-bit addressable latch) - mainlatch: number = 0; - - // Cycle-based interrupt timing like pac-c emulator - cpuCycleCounter: number = 0; - - // IM 0 interrupt vector (set via port 0) - interruptVector: number = 0xFA; // Default to 0xFA as ROM sets this via port 0 + frameDrawn = false; + + // Built-in 8 × 32 4-bit waveforms (stand-in for missing 82s126.1m/.3m) + static WAVEFORMS = PacmanMachine.buildWaveforms(); + + static buildWaveforms(): Uint8Array { + var waves = new Uint8Array(8 * 32); + for (var s = 0; s < 32; s++) { + var t = s / 32; + // 0: sine-ish + waves[0 * 32 + s] = (8 + Math.sin(t * Math.PI * 2) * 7.5) | 0; + // 1: square + waves[1 * 32 + s] = s < 16 ? 15 : 0; + // 2: triangle + waves[2 * 32 + s] = s < 16 ? s : (31 - s); + // 3: saw + waves[3 * 32 + s] = (s >> 1); + // 4-7: variants + waves[4 * 32 + s] = s < 8 ? 15 : (s < 16 ? 0 : (s < 24 ? 10 : 0)); + waves[5 * 32 + s] = (8 + Math.sin(t * Math.PI * 4) * 7.5) | 0; + waves[6 * 32 + s] = s & 1 ? 12 : 2; + waves[7 * 32 + s] = ((s * 3) & 15); + } + return waves; + } constructor() { super(); - this.cpu = new Z80(); - this.cpu.connectIOBus(this.newIOBus()); - this.cpu.connectMemoryBus(this.newMemoryBus()); - - // Initialize ROM and character ROM arrays + this.cpu.connectIOBus({ + read: (_p) => 0xff, + write: (port, val) => { if ((port & 0xff) === 0) this.interruptVector = val & 0xff; } + }); + this.cpu.connectMemoryBus({ read: this.readByte, write: this.writeByte }); + this.cpu.retryInterrupts = true; this.rom = new Uint8Array(this.defaultROMSize); - this.charROM = new Uint8Array(0x2000); // 8KB character ROM (correct Pacman size) - - // Initialize palette - this.palette = new Uint32Array(32); - - this.gfx = new PacmanVideo(this, this.charROM, this.vram, this.cram, this.oram, this.palette, {}); - - // Initialize inputs and keyboard handler - this.inputs.set(this.defaultInputs); + this.gfx = new PacmanVideo(this.rom, this.vram, this.cram, this.ram); + this.inputs.fill(0); this.handler = newKeyboardHandler(this.inputs, this.keyMap); - - console.log("Pacman machine initialized with keymap:", this.keyMap); - console.log("Initial inputs:", Array.from(this.inputs).map(x => x.toString(16))); - - // Initialize cycle counter - this.cpuCycleCounter = 0; } - newMemoryBus() { - return { - read: this.readByteHook, - write: this.writeByteHook - }; - } - - readByteHook = (a) => { - var val = 0; - if (a < 0x4000) { - val = this.rom ? this.rom[a] : 0; - } else if (a >= 0x4000 && a < 0x4400) { - val = this.vram[a - 0x4000]; - } else if (a >= 0x4400 && a < 0x4800) { - val = this.cram[a - 0x4400]; - } else if (a >= 0x4800 && a < 0x4FF0) { - val = this.ram[a - 0x4800]; - } else if (a >= 0x4FF0 && a < 0x5000) { - val = this.oram[a - 0x4FF0]; - } else if (a >= 0x5000 && a < 0x5100) { - // Handle mirrored input reads based on address - if ((a & 0xc0) == 0x00) { // 0x5000-0x503F - Input Port 0 (IN0) - val = this.defaultInputs[0] ^ this.inputs[0]; // Active low inputs - val |= 0x10; // Force Rack Test OFF (bit 0x10 = 1) to prevent service mode - } else if ((a & 0xc0) == 0x40) { // 0x5040-0x507F - Input Port 1 (IN1) - val = this.defaultInputs[1] ^ this.inputs[1]; // Active low inputs - val |= 0x80; // Force Cabinet to UPRIGHT (bit 0x80 = 1) instead of TABLE - val |= 0x10; // Force board_test OFF (bit 0x10 = 1) to prevent service mode - } else if ((a & 0xc0) == 0x80) { // 0x5080-0x50BF - DIP switches - // DIP switch settings (correct MAME defaults) - // Bits 0-1: Coinage (01 = 1 coin/1 credit), Bits 2-3: Lives (00 = 3 lives) - // Bits 4-5: Bonus (00 = 10K bonus), Bits 6-7: Difficulty & Ghost Names - val = 0x51; // MAME setting "1010001": 1 coin/1 credit, 3 lives, 10K bonus - } else { - val = 0xFF; // Unmapped reads return 0xFF - } - } else if (a >= 0x8000) { - // ROM mirror at 0x8000-0xBFFF (for proper MAME compatibility) - val = this.rom ? this.rom[a & 0x3FFF] : 0; - } - - return val; - } - - writeByteHook = (a, val) => { - if (a < 0x4000) { - // ROM - cannot write, ignore - } else if (a >= 0x4000 && a < 0x4400) { - this.vram[a - 0x4000] = val; - } else if (a >= 0x4400 && a < 0x4800) { - this.cram[a - 0x4400] = val; - } else if (a >= 0x4800 && a < 0x4FF0) { - this.ram[a - 0x4800] = val; - } else if (a >= 0x4FF0 && a < 0x5000) { - this.oram[a - 0x4FF0] = val; - } else if (a >= 0x5000 && a < 0x5100) { - // I/O writes - handle LS259 mainlatch and other hardware - if ((a & 0x00F8) == 0x0000) { // 0x5000-0x5007 - LS259 mainlatch - var latch_bit = a & 7; - var old_mainlatch = this.mainlatch; - - // Update the specific bit in mainlatch - if (val & 1) { - this.mainlatch |= (1 << latch_bit); - } else { - this.mainlatch &= ~(1 << latch_bit); - } - - // Handle specific latch functions based on MAME - switch (latch_bit) { - case 0: // Interrupt enable - var old_int = this.interruptEnabled; - this.interruptEnabled = (this.mainlatch >> 0) & 1; - if (old_int !== this.interruptEnabled) { - console.log(`*** INTERRUPT ${this.interruptEnabled ? 'ENABLED' : 'DISABLED'} at PC=${this.cpu.getPC().toString(16)} ***`); - } - break; - case 1: // Sound enable - this.soundEnabled = (this.mainlatch >> 1) & 1; - break; - case 3: // Flip screen - this.flipScreen = (this.mainlatch >> 3) & 1; - break; - } - } else if ((a & 0x00E0) == 0x0040) { // 0x5040-0x505F - Sound registers - // TODO: Implement Namco WSG sound chip - } else if ((a & 0x00F0) == 0x0060) { // 0x5060-0x506F - Sprite coordinates - this.oram[0x10 + (a & 0xF)] = val; - } else if ((a & 0x00C0) == 0x00C0) { // 0x50C0-0x50FF - Watchdog reset - console.log(`WATCHDOG RESET at ${a.toString(16)} = ${val.toString(16)} (frame ${this.frameCounter}, PC=${this.cpu.getPC().toString(16)})`); - this.watchdog_counter = INITIAL_WATCHDOG; - } + readByte = (a: number): number => { + a &= 0xffff; + if (a < 0x4000) return this.rom[a]; + if (a < 0x4400) return this.vram[a - 0x4000]; + if (a < 0x4800) return this.cram[a - 0x4400]; + if (a < 0x5000) return this.ram[a - 0x4800]; + if (a < 0x5100) { + var io = a & 0xc0; + if (io === 0x00) return ((~this.inputs[0]) & 0xff) | 0x10; // IN0 + if (io === 0x40) return ((~this.inputs[1]) & 0x6f) | 0x90; // IN1 upright, service off + if (io === 0x80) return 0xc9; // DSW1 + return 0xff; } + if (a >= 0x8000) return this.rom[a & 0x3fff]; + return 0xff; } - // Z80 port I/O handlers - this is crucial for IM 0 interrupt mode! - readPortHook = (port) => { - // No input ports via I/O on Pacman - all are memory mapped - return 0xFF; - } - - writePortHook = (port, val) => { - // Port 0 is used to set interrupt vector for IM 0/IM 2 mode - if (port === 0) { - this.interruptVector = val; - console.log(`*** INTERRUPT VECTOR SET TO ${val.toString(16)} via port 0 (IM mode) ***`); + writeByte = (a: number, v: number): void => { + a &= 0xffff; + if (a < 0x4000) return; + if (a < 0x4400) { this.vram[a - 0x4000] = v; return; } + if (a < 0x4800) { this.cram[a - 0x4400] = v; return; } + if (a < 0x5000) { this.ram[a - 0x4800] = v; return; } + if ((a & 0xfff8) === 0x5000) { + var bit = a & 7; + if (bit === 0) this.interruptEnabled = v & 1; + if (bit === 1) this.soundEnabled = v & 1; + if (bit === 3) this.flipScreen = v & 1; + } else if (a >= 0x5040 && a <= 0x505f) { + this.soundRegs[a - 0x5040] = v & 0x0f; + } else if ((a & 0xfff0) === 0x5060) { + this.gfx.spritePos[a & 0xf] = v; + } else if ((a & 0xffc0) === 0x50c0) { + this.watchdog_counter = INITIAL_WATCHDOG; } } - newIOBus() { - return { - read: this.readPortHook, - write: this.writePortHook - }; - } - reset() { super.reset(); this.cpu.reset(); this.watchdog_counter = INITIAL_WATCHDOG; - - // Extract character ROM from ROM (8KB at gfxBase) - console.log(`Extracting character ROM from offset ${this.gfxBase.toString(16)}`); - if (this.rom.length >= this.gfxBase + 0x2000) { - for (var i = 0; i < 0x2000; i++) { - this.charROM[i] = this.rom[this.gfxBase + i]; - } - console.log(`Character ROM loaded: ${this.charROM.length} bytes (2 bitplanes of 4KB each)`); - } else { - console.log(`ERROR: ROM too small for character data at ${this.gfxBase.toString(16)}`); - } + this.interruptEnabled = 0; + this.interruptVector = 0xff; + this.pendingVBlankIsr = false; + this.soundEnabled = 0; + this.soundRegs.fill(0); + this.soundAcc.fill(0); + this.extractROMData(); } - loadState(state) { - this.cpu.loadState(state.c); - this.ram.set(state.ram); - this.vram.set(state.vr); - this.cram.set(state.cr); - this.oram.set(state.or); - this.watchdog_counter = state.wdc; - this.interruptEnabled = state.ie; - this.loadControlsState(state); + loadROM(data) { + this.rom.set(padBytes(data, this.defaultROMSize)); + this.extractROMData(); } - saveState() { - return { - c: this.cpu.saveState(), - ram: this.ram.slice(0), - vr: this.vram.slice(0), - cr: this.cram.slice(0), - or: this.oram.slice(0), - wdc: this.watchdog_counter, - ie: this.interruptEnabled, - inputs: this.inputs.slice(0) - }; + extractROMData() { + this.gfx = new PacmanVideo(this.rom, this.vram, this.cram, this.ram); + // Prefer editable wave ROM at 0x6200 (8×32 samples); fall back to built-ins + var custom = this.rom.subarray(0x6200, 0x6300); + var hasCustom = false; + for (var i = 0; i < custom.length; i++) { + if (custom[i]) { hasCustom = true; break; } + } + this.waveforms = hasCustom ? custom : PacmanMachine.WAVEFORMS; } - setKeyInput(key: number, code: number, flags: number): void { - console.log(`setKeyInput called: key=${key} code=${code} flags=${flags}`); - console.log(`Inputs before:`, Array.from(this.inputs).map(x => x.toString(16))); - super.setKeyInput(key, code, flags); - console.log(`Inputs after:`, Array.from(this.inputs).map(x => x.toString(16))); - } + advanceCPU() { return this.cpu.advanceInsn(); } - advanceCPU() { - // Track PC for reset detection - var currentPC = this.cpu.getPC(); - if (currentPC === 0x0000 && this.lastPC !== 0x0000) { - console.log(`*** RESET DETECTED: PC jumped to 0x0000 from ${this.lastPC.toString(16)} ***`); - console.log(`Frame: ${this.frameCounter}, Interrupt enabled: ${this.interruptEnabled}`); + /** Rebuild voice frequency from low-nibble registers. Voice 0 is 20-bit; 1/2 are 16-bit. */ + private voiceFreq(v: number): number { + var r = this.soundRegs; + if (v === 0) { + return r[0x10] | (r[0x11] << 4) | (r[0x12] << 8) | (r[0x13] << 12) | (r[0x14] << 16); } - this.lastPC = currentPC; - - // Execute one CPU instruction and track cycles (like pac-c emulator) - var elapsed_cycles = this.cpu.advanceInsn(); - this.cpuCycleCounter += elapsed_cycles; - - // Check for VBLANK interrupt every PAC_CYCLES_PER_FRAME cycles (like pac-c emulator) - var PAC_CYCLES_PER_FRAME = this.cpuFrequency / 60; // 60 FPS - - if (this.cpuCycleCounter >= PAC_CYCLES_PER_FRAME) { - this.cpuCycleCounter -= PAC_CYCLES_PER_FRAME; - - // Trigger VBLANK interrupt if enabled (like pac-c emulator) - if (this.interruptEnabled) { - // The ROM uses IM 2 mode with interrupt vector 0xFA - // In IM 2, the interrupt vector forms the low byte of the address - // The I register (set to 0x3F by ROM) forms the high byte - // So interrupt jumps to address (I << 8) | interruptVector = 0x3FFA - // But the Z80 emulator expects the data byte for IM 0 mode - // Since our Z80 is in IM 0 mode, we use the interrupt vector directly - this.cpu.interrupt(this.interruptVector); - } + if (v === 1) { + return (r[0x16] | (r[0x17] << 4) | (r[0x18] << 8) | (r[0x19] << 12)) << 4; } - - return elapsed_cycles; + return (r[0x1b] | (r[0x1c] << 4) | (r[0x1d] << 8) | (r[0x1e] << 12)) << 4; } - startScanline() { - // Remove scanline-based interrupt - we now use cycle-based timing - // This method can be empty or handle other scanline-specific tasks + private voiceVol(v: number): number { + if (v === 0) return this.soundRegs[0x15]; + if (v === 1) return this.soundRegs[0x1a]; + return this.soundRegs[0x1f]; } - drawScanline() { - this.gfx.drawScanline(this.pixels, this.scanline); + private voiceWave(v: number): number { + if (v === 0) return this.soundRegs[0x05] & 7; + if (v === 1) return this.soundRegs[0x0a] & 7; + return this.soundRegs[0x0f] & 7; } - advanceFrame(trap) { - var steps = super.advanceFrame(trap); - this.gfx.advanceFrame(); - this.frameCounter++; - - // Watchdog - enable proper behavior like other machines - this.watchdog_counter--; - if (this.watchdog_counter <= 0) { - console.log(`*** WATCHDOG TIMEOUT: Fired at frame ${this.frameCounter}, PC=${this.cpu.getPC().toString(16)} ***`); - throw new EmuHalt("WATCHDOG FIRED - Game should reset"); + startScanline() { + if (!this.audio || !this.soundEnabled) return; + // sampleRate = 60*264 ≈ one sample per scanline; WSG runs faster — step acc multiple times + var steps = 6; // ~96kHz / (60*264) ≈ 6 + var sum = 0; + for (var step = 0; step < steps; step++) { + var mix = 0; + for (var v = 0; v < 3; v++) { + var vol = this.voiceVol(v); + if (!vol) continue; + var freq = this.voiceFreq(v); + if (!freq) continue; + this.soundAcc[v] = (this.soundAcc[v] + freq) & 0xfffff; + var idx = (this.soundAcc[v] >> 15) & 31; // top 5 of 20 bits + var samp = this.waveforms[this.voiceWave(v) * 32 + idx] & 0x0f; + mix += (samp - 8) * vol; + } + sum += mix; } - - return steps; + // Normalize to roughly [-1, 1] + this.audio.feedSample(sum / (steps * 3 * 15 * 8), 1); } - - // Helper methods for ROM analysis - getInstructionName(opcode: number): string { - const opcodeNames = { - 0x76: 'HALT', 0xFB: 'EI', 0xF3: 'DI', 0xC3: 'JP', 0xCD: 'CALL', - 0xC9: 'RET', 0x00: 'NOP', 0x3E: 'LD A,n', 0x21: 'LD HL,nn' - }; - return opcodeNames[opcode] || `UNKNOWN(${opcode?.toString(16)})`; - } - - analyzeROMPhase(pc: number): string { - if (pc < 0x1000) return "INTERRUPT_VECTORS"; - if (pc >= 0x2300 && pc <= 0x2400) return "INITIALIZATION"; - if (pc >= 0x1000 && pc <= 0x2000) return "MAIN_PROGRAM"; - if (pc >= 0x3000) return "GAME_LOGIC"; - return `UNKNOWN_AREA(${pc.toString(16)})`; - } - - analyzeVRAMActivity(): string { - var nonZeroCount = 0; - var nonSpaceCount = 0; - for (var i = 0; i < this.vram.length; i++) { - if (this.vram[i] !== 0) nonZeroCount++; - if (this.vram[i] !== 0x40) nonSpaceCount++; // 0x40 is typically space character + + drawScanline() { + // Render the full frame once on the first scanline (pac-c style full-frame draw) + if (this.scanline === 0) { + this.gfx.drawFrame(this.pixels); } - - if (nonSpaceCount > 50) return `ACTIVE_GRAPHICS(${nonSpaceCount}_tiles)`; - if (nonZeroCount > 0) return `CLEARING_SCREEN(${nonZeroCount}_spaces)`; - return "NO_ACTIVITY"; } - - checkForAttractMode(): void { - // Look for signs that ROM has moved to attract mode - var pc = this.cpu.getPC(); - var vramActive = this.analyzeVRAMActivity(); - - if (vramActive.includes("ACTIVE_GRAPHICS")) { - console.log("🎉 SUCCESS: ROM appears to have reached game/attract mode!"); - console.log(` Graphics are being drawn: ${vramActive}`); - } else if (pc < 0x2000 && pc !== 0x234a) { - console.log("🔄 PROGRESS: ROM has moved beyond initialization phase"); - console.log(` Now executing in main program area: PC=${pc.toString(16)}`); - } else { - // Check if we're still in initialization - if (pc === 0x234a) { - console.log("⏳ STILL INITIALIZING: ROM still in HALT/interrupt cycle"); - console.log(" This is normal - real Pacman hardware takes time to initialize"); - } + + /** + * Z80 interrupt()/NMI() only vector PC — the ISR body runs on later advanceCPU(). + * If we leave that until mid-frame, music register writes land on uneven scanlines + * and notes sound early/late. Drain the ISR here, between frames, before audio. + */ + private drainVBlankIsr() { + if (!this.pendingVBlankIsr) return; + this.pendingVBlankIsr = false; + // After vectoring, return PC is on the stack; RETN restores SP to this value. + var spDone = this.cpu.getSP() + 2; + var guard = 100000; + while (this.cpu.getSP() !== spDone && --guard > 0) { + this.advanceCPU(); } } - loadROM(data) { - this.rom.set(padBytes(data, this.defaultROMSize)); - - console.log(`ROM loaded: ${data.length} bytes, padded to ${this.defaultROMSize}`); - console.log(`First few ROM bytes: ${Array.from(this.rom.slice(0, 16)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - - // DEBUG: Check interrupt vectors and important code locations - console.log(`=== INTERRUPT VECTOR DEBUG ===`); - console.log(`RST 0x00 (0x0000): ${Array.from(this.rom.slice(0x00, 0x08)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`RST 0x08 (0x0008): ${Array.from(this.rom.slice(0x08, 0x10)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`RST 0x10 (0x0010): ${Array.from(this.rom.slice(0x10, 0x18)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`RST 0x18 (0x0018): ${Array.from(this.rom.slice(0x18, 0x20)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`RST 0x20 (0x0020): ${Array.from(this.rom.slice(0x20, 0x28)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`RST 0x28 (0x0028): ${Array.from(this.rom.slice(0x28, 0x30)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`RST 0x30 (0x0030): ${Array.from(this.rom.slice(0x30, 0x38)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`RST 0x38 (0x0038): ${Array.from(this.rom.slice(0x38, 0x40)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - console.log(`NMI vector (0x0066): ${Array.from(this.rom.slice(0x66, 0x70)).map(x => x.toString(16).padStart(2, '0')).join(' ')}`); - - // Extract graphics and palette data if present in ROM - if (this.rom.length >= this.gfxBase + 0x2000) { - // Extract character ROM (8KB at 0x4000) - this.charROM = new Uint8Array(0x2000); - this.charROM.set(this.rom.slice(this.gfxBase, this.gfxBase + 0x2000)); - console.log(`Character ROM extracted: ${this.charROM.length} bytes from ${this.gfxBase.toString(16)}`); + advanceFrame(trap) { + this.drainVBlankIsr(); + + var steps = super.advanceFrame(trap); + if (--this.watchdog_counter <= 0) { + throw new EmuHalt("WATCHDOG FIRED"); } - - if (this.rom.length >= this.palBase + 32) { - // Extract palette data (32 bytes at 0x6000) - var palette_data = this.rom.slice(this.palBase, this.palBase + 32); - this.palette = new Uint32Array(32); - for (var i = 0; i < 32; i++) { - // Convert 4-bit RGB to 32-bit RGBA - var val = palette_data[i]; - var r = ((val >> 0) & 1) * 0x21 + ((val >> 1) & 1) * 0x47 + ((val >> 2) & 1) * 0x97; - var g = ((val >> 3) & 1) * 0x21 + ((val >> 4) & 1) * 0x47 + ((val >> 5) & 1) * 0x97; - var b = ((val >> 6) & 1) * 0x51 + ((val >> 7) & 1) * 0xae; - this.palette[i] = 0xFF000000 | (b << 16) | (g << 8) | r; + if (this.interruptEnabled) { + // Real Pac-Man ROM uses IM 2; C demos use NMI @ 0x66 (like Galaxian) + if (this.cpu.saveState().im === 2) { + this.cpu.interrupt(this.interruptVector); + } else { + this.cpu.NMI(); } - console.log(`Palette extracted: 32 colors from ${this.palBase.toString(16)}`); + this.pendingVBlankIsr = true; } - - // Initialize graphics system - this.gfx = new PacmanVideo(this, this.charROM, this.vram, this.cram, this.oram, this.palette, {}); - console.log("Graphics system initialized"); + return steps; } - // Required interface methods - delegate to hooks - read(a: number): number { - return this.readByteHook(a); - } - - write(a: number, val: number): void { - this.writeByteHook(a, val); + loadState(state) { + this.cpu.loadState(state.c); + this.ram.set(state.ram); + this.vram.set(state.vr); + this.cram.set(state.cr); + this.gfx.spritePos.set(state.sp || []); + this.watchdog_counter = state.wdc; + this.interruptEnabled = state.ie; + this.pendingVBlankIsr = !!state.pvi; + this.loadControlsState(state); } - - readConst(a: number): number { - return this.readByteHook(a); + + saveState() { + return { + c: this.cpu.saveState(), + ram: this.ram.slice(0), + vr: this.vram.slice(0), + cr: this.cram.slice(0), + or: this.oram.slice(0), + sp: this.gfx.spritePos.slice(0), + wdc: this.watchdog_counter, + ie: this.interruptEnabled, + pvi: this.pendingVBlankIsr, + inputs: this.inputs.slice(0), + }; } -} \ No newline at end of file + + read(a: number) { return this.readByte(a); } + write(a: number, v: number) { this.writeByte(a, v); } + readConst(a: number) { return this.readByte(a); } +} diff --git a/src/platform/pacman.ts b/src/platform/pacman.ts index bb0178b4..b6c55233 100644 --- a/src/platform/pacman.ts +++ b/src/platform/pacman.ts @@ -5,8 +5,12 @@ import { BaseZ80MachinePlatform } from "../common/baseplatform"; const PACMAN_PRESETS = [ { id: 'hello.c', name: 'Hello World' }, - { id: 'maze.c', name: 'Maze Display' }, { id: 'sprites.c', name: 'Sprite Test' }, + { id: 'music.c', name: 'Music Demo' }, + { id: 'solarian.c', name: 'Solarian' }, + { id: 'siege.c', name: 'Siege Game' }, + { id: 'climber.c', name: 'Climber Game' }, + { id: 'chase.c', name: 'Chase' }, ]; class PacmanPlatform extends BaseZ80MachinePlatform implements Platform { @@ -18,92 +22,50 @@ class PacmanPlatform extends BaseZ80MachinePlatform implements Pl readVRAMAddress(a) { if (a < 0x400) return this.machine.vram[a]; else if (a < 0x800) return this.machine.cram[a-0x400]; - else return this.machine.oram[a-0x800]; + else return this.machine.ram[0x7f0 + ((a-0x800) & 0xf)]; } - // Override ROM size to include program + graphics + palette - getROMSize() { return 0x6200; } // 16KB program + 8KB graphics + palette space - getMemoryMap = function() { return { main:[ - {name:'Program ROM',start:0x0000,size:0x4000,type:'rom'}, - {name:'Graphics ROM',start:0x4000,size:0x2000,type:'rom'}, - {name:'Palette ROM',start:0x6000,size:0x200,type:'rom'}, - {name:'Video RAM',start:0x4000,size:0x400,type:'ram'}, - {name:'Color RAM',start:0x4400,size:0x400,type:'ram'}, - {name:'Work RAM',start:0x4800,size:0x7F0,type:'ram'}, - {name:'Sprite RAM',start:0x4FF0,size:0x10,type:'ram'}, - {name:'I/O Registers',start:0x5000,size:0x100,type:'io'}, + {name:'Program ROM', start:0x0000,size:0x4000,type:'rom'}, + {name:'Video RAM', start:0x4000,size:0x400, type:'ram'}, + {name:'Color RAM', start:0x4400,size:0x400, type:'ram'}, + {name:'Work RAM', start:0x4800,size:0x7f0, type:'ram'}, + {name:'Sprite RAM', start:0x4ff0,size:0x10, type:'ram'}, + {name:'I/O Regs', start:0x5000,size:0x100, type:'io'}, + {name:'Color PROM', start:0x6000,size:0x20, type:'rom'}, + {name:'Palette PROM',start:0x6100,size:0x100, type:'rom'}, + {name:'Wave ROM', start:0x6200,size:0x100, type:'rom'}, ] } }; showHelp() { return "https://8bitworkshop.com/docs/platforms/arcade/index.html#pacman-hardware" } getDebugTree() { let tree = super.getDebugTree(); - - // Add palette visualization from extracted ROM data tree['palette'] = { $$: () => { let paletteData = {}; - for (let i = 0; i < this.machine.palette.length; i++) { - let color = this.machine.palette[i]; - let hex = '#' + (color & 0xffffff).toString(16).padStart(6, '0'); - paletteData[`color_${i.toString().padStart(2, '0')}`] = hex; + for (let i = 0; i < this.machine.gfx.colors.length; i++) { + let color = this.machine.gfx.colors[i]; + paletteData[`color_${i.toString().padStart(2, '0')}`] = + '#' + (color & 0xffffff).toString(16).padStart(6, '0'); } return paletteData; } }; - - // Add character ROM visualization - tree['charROM'] = { - $$: () => { - let charData = {}; - for (let i = 0; i < Math.min(64, this.machine.charROM.length / 16); i++) { - let charBytes = []; - for (let j = 0; j < 16; j++) { - let addr = i * 16 + j; - if (addr < this.machine.charROM.length) { - charBytes.push('$' + this.machine.charROM[addr].toString(16).padStart(2, '0')); - } - } - charData[`char_${i.toString().padStart(2, '0')}`] = charBytes.join(' '); - } - return charData; - } - }; - - // Add sprite RAM tree['sprites'] = { $$: () => { let spriteData = {}; for (let i = 0; i < 8; i++) { - let base = i * 2; - if (base < this.machine.oram.length) { - spriteData[`sprite_${i}`] = { - shape: '$' + this.machine.oram[base].toString(16).padStart(2, '0'), - color: '$' + this.machine.oram[base + 1].toString(16).padStart(2, '0') - }; - } + let base = 0x7f0 + i * 2; + spriteData[`sprite_${i}`] = { + shape: '$' + this.machine.ram[base].toString(16).padStart(2, '0'), + color: '$' + this.machine.ram[base + 1].toString(16).padStart(2, '0'), + x: this.machine.gfx.spritePos[i * 2], + y: this.machine.gfx.spritePos[i * 2 + 1], + }; } return spriteData; } }; - - // Add sprite coordinates - tree['sprite_coords'] = { - $$: () => { - let coordData = {}; - for (let i = 0; i < 8; i++) { - let base = 0x10 + i * 2; - if (base < this.machine.oram.length) { - coordData[`sprite_${i}_coords`] = { - x: this.machine.oram[base], - y: this.machine.oram[base + 1] - }; - } - } - return coordData; - } - }; - return tree; } } diff --git a/src/worker/platforms.ts b/src/worker/platforms.ts index c45457ff..e4933dd4 100644 --- a/src/worker/platforms.ts +++ b/src/worker/platforms.ts @@ -69,10 +69,10 @@ export var PLATFORM_PARAMS = { 'pacman': { arch: 'z80', code_start: 0x0, - rom_size: 0x6200, - data_start: 0x4000, - data_size: 0x800, - stack_end: 0x4800, + rom_size: 0x8000, // 16KB prog + 8KB gfx + palette, padded to 32KB + data_start: 0x4800, // Pacman RAM starts at 0x4800 + data_size: 0x7f0, // 0x4800-0x4fef + stack_end: 0x4fc0, // top of usable RAM (sprite attrs at 0x4ff0-0x4fff) }, 'williams': { arch: '6809', From 416f1e672a32ac253c31fe244d8411d082d020d7 Mon Sep 17 00:00:00 2001 From: MikeDX Date: Thu, 30 Jul 2026 12:15:31 +0100 Subject: [PATCH 3/4] Remove pacman_rom.c and maze.c from branch Keep these as local-only demos; they are not ready to merge. --- presets/pacman/maze.c | 206 ----- presets/pacman/pacman_rom.c | 1558 ----------------------------------- 2 files changed, 1764 deletions(-) delete mode 100644 presets/pacman/maze.c delete mode 100644 presets/pacman/pacman_rom.c diff --git a/presets/pacman/maze.c b/presets/pacman/maze.c deleted file mode 100644 index 1a204fe6..00000000 --- a/presets/pacman/maze.c +++ /dev/null @@ -1,206 +0,0 @@ -#include - -typedef unsigned char byte; -typedef unsigned short word; - -// Hardware memory addresses for Pacman -byte __at (0x4000) vram[32][36]; // Video RAM - rotated layout! -byte __at (0x4400) cram[32][36]; // Color RAM - -struct { - byte xpos; - byte ypos; - byte color; - byte shape; -} __at (0x4FF0) sprites[8]; - -// Hardware control registers -byte __at (0x5000) interrupt_enable; -byte __at (0x5001) sound_enable; -byte __at (0x5003) flip_screen; - -// Input registers -volatile byte __at (0x5000) input0; -volatile byte __at (0x5040) input1; - -#define START1 !(input1 & 0x20) - -// Video frame counter -volatile byte video_framecount; - -// NMI interrupt handler -void rst_66() __interrupt { - video_framecount++; -} - -// Entry point -void start() { -__asm - LD SP,#0x4800 - EI - LD BC, #l__INITIALIZER+1 - LD A, B - LD DE, #s__INITIALIZED - LD HL, #s__INITIALIZER - LDIR -__endasm; - main(); -} - -void wait_for_frame() { - byte initial_framecount = video_framecount; - *(volatile byte*)0x50C0 = 0; // Reset watchdog - while (video_framecount == initial_framecount); -} - -// Simple maze characters -#define WALL_H 0x01 // Horizontal wall -#define WALL_V 0x02 // Vertical wall -#define WALL_TL 0x03 // Top-left corner -#define WALL_TR 0x04 // Top-right corner -#define WALL_BL 0x05 // Bottom-left corner -#define WALL_BR 0x06 // Bottom-right corner -#define DOT 0x07 // Dot -#define POWER_DOT 0x08 // Power pellet -#define SPACE 0x00 // Empty space - -// Colors -#define BLUE 0x01 // Wall color -#define YELLOW 0x09 // Dot color -#define WHITE 0x0F // Power pellet color - -void draw_maze() { - byte x, y; - - // Clear screen - for (x = 0; x < 32; x++) { - for (y = 0; y < 36; y++) { - vram[x][y] = SPACE; - cram[x][y] = 0; - } - } - - // Draw outer walls - for (y = 1; y < 35; y++) { - vram[1][y] = WALL_V; // Left wall - vram[30][y] = WALL_V; // Right wall - cram[1][y] = BLUE; - cram[30][y] = BLUE; - } - - for (x = 1; x < 31; x++) { - vram[x][1] = WALL_H; // Top wall - vram[x][34] = WALL_H; // Bottom wall - cram[x][1] = BLUE; - cram[x][34] = BLUE; - } - - // Draw corners - vram[1][1] = WALL_TL; - vram[30][1] = WALL_TR; - vram[1][34] = WALL_BL; - vram[30][34] = WALL_BR; - cram[1][1] = BLUE; - cram[30][1] = BLUE; - cram[1][34] = BLUE; - cram[30][34] = BLUE; - - // Draw some inner maze structure - for (x = 5; x < 27; x += 4) { - for (y = 5; y < 30; y += 6) { - vram[x][y] = WALL_H; - vram[x+1][y] = WALL_H; - vram[x][y+1] = WALL_V; - vram[x][y+2] = WALL_V; - cram[x][y] = BLUE; - cram[x+1][y] = BLUE; - cram[x][y+1] = BLUE; - cram[x][y+2] = BLUE; - } - } - - // Add dots in corridors - for (x = 3; x < 29; x += 2) { - for (y = 3; y < 32; y += 2) { - if (vram[x][y] == SPACE) { - vram[x][y] = DOT; - cram[x][y] = YELLOW; - } - } - } - - // Add power pellets in corners - vram[3][3] = POWER_DOT; - vram[28][3] = POWER_DOT; - vram[3][31] = POWER_DOT; - vram[28][31] = POWER_DOT; - cram[3][3] = WHITE; - cram[28][3] = WHITE; - cram[3][31] = WHITE; - cram[28][31] = WHITE; -} - -void draw_title() { - const char* title = "PAC-MAN MAZE DEMO"; - byte i; - byte x = 15; // Center-ish position - byte y = 18; // Middle of screen - - for (i = 0; title[i]; i++) { - vram[x][y + i] = title[i] - 0x20 + 0x10; // ASCII to character offset - cram[x][y + i] = YELLOW; - } -} - -void animate_power_pellets() { - static byte flash_counter = 0; - byte color; - - flash_counter++; - color = (flash_counter & 0x10) ? WHITE : BLUE; - - cram[3][3] = color; - cram[28][3] = color; - cram[3][31] = color; - cram[28][31] = color; -} - -void main() { - // Initialize hardware - interrupt_enable = 1; - sound_enable = 1; - flip_screen = 0; - - // Draw the maze - draw_maze(); - draw_title(); - - // Hide sprites - for (byte i = 0; i < 8; i++) { - sprites[i].xpos = 0; - sprites[i].ypos = 0; - } - - // Main loop - animate power pellets - while (1) { - wait_for_frame(); - animate_power_pellets(); - - if (START1) break; - } - - // Show exit message - const char* exit_msg = "PRESS START TO EXIT"; - byte x = 14; - byte y = 8; - - for (byte i = 0; exit_msg[i]; i++) { - vram[x][y + i] = exit_msg[i] - 0x20 + 0x10; - cram[x][y + i] = WHITE; - } - - while(1) { - wait_for_frame(); - if (START1) break; - } -} \ No newline at end of file diff --git a/presets/pacman/pacman_rom.c b/presets/pacman/pacman_rom.c deleted file mode 100644 index c62c145d..00000000 --- a/presets/pacman/pacman_rom.c +++ /dev/null @@ -1,1558 +0,0 @@ -// Pacman ROM data - converted from original arcade ROMs -// This file contains the original Pacman program, graphics, and palette data - -#include - -typedef unsigned char byte; -typedef unsigned short word; -typedef signed char sbyte; - -// program_rom (16384 bytes) -const char __at (0x0000) program_rom[0x4000] = { - 0xf3,0x3e,0x3f,0xed,0x47,0xc3,0x0b,0x23,0x77,0x23,0x10,0xfc,0xc9,0xc3,0x0e,0x07, - 0x85,0x6f,0x3e,0x00,0x8c,0x67,0x7e,0xc9,0x78,0x87,0xd7,0x5f,0x23,0x56,0xeb,0xc9, - 0xe1,0x87,0xd7,0x5f,0x23,0x56,0xeb,0xe9,0xe1,0x46,0x23,0x4e,0x23,0xe5,0x18,0x12, - 0x11,0x90,0x4c,0x06,0x10,0xc3,0x51,0x00,0xaf,0x32,0x00,0x50,0x32,0x07,0x50,0xc3, - 0x38,0x00,0x2a,0x80,0x4c,0x70,0x2c,0x71,0x2c,0x20,0x02,0x2e,0xc0,0x22,0x80,0x4c, - 0xc9,0x1a,0xa7,0x28,0x06,0x1c,0x1c,0x1c,0x10,0xf7,0xc9,0xe1,0x06,0x03,0x7e,0x12, - 0x23,0x1c,0x10,0xfa,0xe9,0xc3,0x2d,0x20,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, - 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x01,0x03,0x04, - 0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x14,0xf5,0x32,0xc0, - 0x50,0xaf,0x32,0x00,0x50,0xf3,0xc5,0xd5,0xe5,0xdd,0xe5,0xfd,0xe5,0x21,0x8c,0x4e, - 0x11,0x50,0x50,0x01,0x10,0x00,0xed,0xb0,0x3a,0xcc,0x4e,0xa7,0x3a,0xcf,0x4e,0x20, - 0x03,0x3a,0x9f,0x4e,0x32,0x45,0x50,0x3a,0xdc,0x4e,0xa7,0x3a,0xdf,0x4e,0x20,0x03, - 0x3a,0xaf,0x4e,0x32,0x4a,0x50,0x3a,0xec,0x4e,0xa7,0x3a,0xef,0x4e,0x20,0x03,0x3a, - 0xbf,0x4e,0x32,0x4f,0x50,0x21,0x02,0x4c,0x11,0x22,0x4c,0x01,0x1c,0x00,0xed,0xb0, - 0xdd,0x21,0x20,0x4c,0xdd,0x7e,0x02,0x07,0x07,0xdd,0x77,0x02,0xdd,0x7e,0x04,0x07, - 0x07,0xdd,0x77,0x04,0xdd,0x7e,0x06,0x07,0x07,0xdd,0x77,0x06,0xdd,0x7e,0x08,0x07, - 0x07,0xdd,0x77,0x08,0xdd,0x7e,0x0a,0x07,0x07,0xdd,0x77,0x0a,0xdd,0x7e,0x0c,0x07, - 0x07,0xdd,0x77,0x0c,0x3a,0xd1,0x4d,0xfe,0x01,0x20,0x38,0xdd,0x21,0x20,0x4c,0x3a, - 0xa4,0x4d,0x87,0x5f,0x16,0x00,0xdd,0x19,0x2a,0x24,0x4c,0xed,0x5b,0x34,0x4c,0xdd, - 0x7e,0x00,0x32,0x24,0x4c,0xdd,0x7e,0x01,0x32,0x25,0x4c,0xdd,0x7e,0x10,0x32,0x34, - 0x4c,0xdd,0x7e,0x11,0x32,0x35,0x4c,0xdd,0x75,0x00,0xdd,0x74,0x01,0xdd,0x73,0x10, - 0xdd,0x72,0x11,0x3a,0xa6,0x4d,0xa7,0xca,0x76,0x01,0xed,0x4b,0x22,0x4c,0xed,0x5b, - 0x32,0x4c,0x2a,0x2a,0x4c,0x22,0x22,0x4c,0x2a,0x3a,0x4c,0x22,0x32,0x4c,0xed,0x43, - 0x2a,0x4c,0xed,0x53,0x3a,0x4c,0x21,0x22,0x4c,0x11,0xf2,0x4f,0x01,0x0c,0x00,0xed, - 0xb0,0x21,0x32,0x4c,0x11,0x62,0x50,0x01,0x0c,0x00,0xed,0xb0,0xcd,0xdc,0x01,0xcd, - 0x21,0x02,0xcd,0xc8,0x03,0x3a,0x00,0x4e,0xa7,0x28,0x12,0xcd,0x9d,0x03,0xcd,0x90, - 0x14,0xcd,0x1f,0x14,0xcd,0x67,0x02,0xcd,0xad,0x02,0xcd,0xfd,0x02,0x3a,0x00,0x4e, - 0x3d,0x20,0x06,0x32,0xac,0x4e,0x32,0xbc,0x4e,0xcd,0x0c,0x2d,0xcd,0xc1,0x2c,0xfd, - 0xe1,0xdd,0xe1,0xe1,0xd1,0xc1,0x3a,0x00,0x4e,0xa7,0x28,0x08,0x3a,0x40,0x50,0xe6, - 0x10,0xca,0x00,0x00,0x3e,0x01,0x32,0x00,0x50,0xfb,0xf1,0xc9,0x21,0x84,0x4c,0x34, - 0x23,0x35,0x23,0x11,0x19,0x02,0x01,0x01,0x04,0x34,0x7e,0xe6,0x0f,0xeb,0xbe,0x20, - 0x13,0x0c,0x1a,0xc6,0x10,0xe6,0xf0,0x12,0x23,0xbe,0x20,0x08,0x0c,0xeb,0x36,0x00, - 0x23,0x13,0x10,0xe5,0x21,0x8a,0x4c,0x71,0x2c,0x7e,0x87,0x87,0x86,0x3c,0x77,0x2c, - 0x7e,0x87,0x86,0x87,0x87,0x86,0x3c,0x77,0xc9,0x06,0xa0,0x0a,0x60,0x0a,0x60,0x0a, - 0xa0,0x21,0x90,0x4c,0x3a,0x8a,0x4c,0x4f,0x06,0x10,0x7e,0xa7,0x28,0x2f,0xe6,0xc0, - 0x07,0x07,0xb9,0x30,0x28,0x35,0x7e,0xe6,0x3f,0x20,0x22,0x77,0xc5,0xe5,0x2c,0x7e, - 0x2c,0x46,0x21,0x5b,0x02,0xe5,0xe7,0x94,0x08,0xa3,0x06,0x8e,0x05,0x72,0x12,0x00, - 0x10,0x0b,0x10,0x63,0x02,0x2b,0x21,0xf0,0x21,0xb9,0x22,0xe1,0xc1,0x2c,0x2c,0x2c, - 0x10,0xc8,0xc9,0xef,0x1c,0x86,0xc9,0x3a,0x6e,0x4e,0xfe,0x99,0x17,0x32,0x06,0x50, - 0x1f,0xd0,0x3a,0x00,0x50,0x47,0xcb,0x00,0x3a,0x66,0x4e,0x17,0xe6,0x0f,0x32,0x66, - 0x4e,0xd6,0x0c,0xcc,0xdf,0x02,0xcb,0x00,0x3a,0x67,0x4e,0x17,0xe6,0x0f,0x32,0x67, - 0x4e,0xd6,0x0c,0xc2,0x9a,0x02,0x21,0x69,0x4e,0x34,0xcb,0x00,0x3a,0x68,0x4e,0x17, - 0xe6,0x0f,0x32,0x68,0x4e,0xd6,0x0c,0xc0,0x21,0x69,0x4e,0x34,0xc9,0x3a,0x69,0x4e, - 0xa7,0xc8,0x47,0x3a,0x6a,0x4e,0x5f,0xfe,0x00,0xc2,0xc4,0x02,0x3e,0x01,0x32,0x07, - 0x50,0xcd,0xdf,0x02,0x7b,0xfe,0x08,0xc2,0xce,0x02,0xaf,0x32,0x07,0x50,0x1c,0x7b, - 0x32,0x6a,0x4e,0xd6,0x10,0xc0,0x32,0x6a,0x4e,0x05,0x78,0x32,0x69,0x4e,0xc9,0x3a, - 0x6b,0x4e,0x21,0x6c,0x4e,0x34,0x96,0xc0,0x77,0x3a,0x6d,0x4e,0x21,0x6e,0x4e,0x86, - 0x27,0xd2,0xf6,0x02,0x3e,0x99,0x77,0x21,0x9c,0x4e,0xcb,0xce,0xc9,0x21,0xce,0x4d, - 0x34,0x7e,0xe6,0x0f,0x20,0x1f,0x7e,0x0f,0x0f,0x0f,0x0f,0x47,0x3a,0xd6,0x4d,0x2f, - 0xb0,0x4f,0x3a,0x6e,0x4e,0xd6,0x01,0x30,0x02,0xaf,0x4f,0x28,0x01,0x79,0x32,0x05, - 0x50,0x79,0x32,0x04,0x50,0xdd,0x21,0xd8,0x43,0xfd,0x21,0xc5,0x43,0x3a,0x00,0x4e, - 0xfe,0x03,0xca,0x44,0x03,0x3a,0x03,0x4e,0xfe,0x02,0xd2,0x44,0x03,0xcd,0x69,0x03, - 0xcd,0x76,0x03,0xc9,0x3a,0x09,0x4e,0xa7,0x3a,0xce,0x4d,0xc2,0x59,0x03,0xcb,0x67, - 0xcc,0x69,0x03,0xc4,0x83,0x03,0xc3,0x61,0x03,0xcb,0x67,0xcc,0x76,0x03,0xc4,0x90, - 0x03,0x3a,0x70,0x4e,0xa7,0xcc,0x90,0x03,0xc9,0xdd,0x36,0x00,0x50,0xdd,0x36,0x01, - 0x55,0xdd,0x36,0x02,0x31,0xc9,0xfd,0x36,0x00,0x50,0xfd,0x36,0x01,0x55,0xfd,0x36, - 0x02,0x32,0xc9,0xdd,0x36,0x00,0x40,0xdd,0x36,0x01,0x40,0xdd,0x36,0x02,0x40,0xc9, - 0xfd,0x36,0x00,0x40,0xfd,0x36,0x01,0x40,0xfd,0x36,0x02,0x40,0xc9,0x3a,0x06,0x4e, - 0xd6,0x05,0xd8,0x2a,0x08,0x4d,0x06,0x08,0x0e,0x10,0x7d,0x32,0x06,0x4d,0x32,0xd2, - 0x4d,0x91,0x32,0x02,0x4d,0x32,0x04,0x4d,0x7c,0x80,0x32,0x03,0x4d,0x32,0x07,0x4d, - 0x91,0x32,0x05,0x4d,0x32,0xd3,0x4d,0xc9,0x3a,0x00,0x4e,0xe7,0xd4,0x03,0xfe,0x03, - 0xe5,0x05,0xbe,0x06,0x3a,0x01,0x4e,0xe7,0xdc,0x03,0x0c,0x00,0xef,0x00,0x00,0xef, - 0x06,0x00,0xef,0x01,0x00,0xef,0x14,0x00,0xef,0x18,0x00,0xef,0x04,0x00,0xef,0x1e, - 0x00,0xef,0x07,0x00,0x21,0x01,0x4e,0x34,0x21,0x01,0x50,0x36,0x01,0xc9,0xcd,0xa1, - 0x2b,0x3a,0x6e,0x4e,0xa7,0x28,0x0c,0xaf,0x32,0x04,0x4e,0x32,0x02,0x4e,0x21,0x00, - 0x4e,0x34,0xc9,0x3a,0x02,0x4e,0xe7,0x5f,0x04,0x0c,0x00,0x71,0x04,0x0c,0x00,0x7f, - 0x04,0x0c,0x00,0x85,0x04,0x0c,0x00,0x8b,0x04,0x0c,0x00,0x99,0x04,0x0c,0x00,0x9f, - 0x04,0x0c,0x00,0xa5,0x04,0x0c,0x00,0xb3,0x04,0x0c,0x00,0xb9,0x04,0x0c,0x00,0xbf, - 0x04,0x0c,0x00,0xcd,0x04,0x0c,0x00,0xd3,0x04,0x0c,0x00,0xd8,0x04,0x0c,0x00,0xe0, - 0x04,0x0c,0x00,0x1c,0x05,0x4b,0x05,0x56,0x05,0x61,0x05,0x6c,0x05,0x7c,0x05,0xef, - 0x00,0x01,0xef,0x01,0x00,0xef,0x04,0x00,0xef,0x1e,0x00,0x0e,0x0c,0xcd,0x85,0x05, - 0xc9,0x21,0x04,0x43,0x3e,0x01,0xcd,0xbf,0x05,0x0e,0x0c,0xcd,0x85,0x05,0xc9,0x0e, - 0x14,0xcd,0x93,0x05,0xc9,0x0e,0x0d,0xcd,0x93,0x05,0xc9,0x21,0x07,0x43,0x3e,0x03, - 0xcd,0xbf,0x05,0x0e,0x0c,0xcd,0x85,0x05,0xc9,0x0e,0x16,0xcd,0x93,0x05,0xc9,0x0e, - 0x0f,0xcd,0x93,0x05,0xc9,0x21,0x0a,0x43,0x3e,0x05,0xcd,0xbf,0x05,0x0e,0x0c,0xcd, - 0x85,0x05,0xc9,0x0e,0x33,0xcd,0x93,0x05,0xc9,0x0e,0x2f,0xcd,0x93,0x05,0xc9,0x21, - 0x0d,0x43,0x3e,0x07,0xcd,0xbf,0x05,0x0e,0x0c,0xcd,0x85,0x05,0xc9,0x0e,0x35,0xcd, - 0x93,0x05,0xc9,0x0e,0x31,0xc3,0x80,0x05,0xef,0x1c,0x11,0x0e,0x12,0xc3,0x85,0x05, - 0x0e,0x13,0xcd,0x85,0x05,0xcd,0x79,0x08,0x35,0xef,0x11,0x00,0xef,0x05,0x01,0xef, - 0x10,0x14,0xef,0x04,0x01,0x3e,0x01,0x32,0x14,0x4e,0xaf,0x32,0x70,0x4e,0x32,0x15, - 0x4e,0x21,0x32,0x43,0x36,0x14,0x3e,0xfc,0x11,0x20,0x00,0x06,0x1c,0xdd,0x21,0x40, - 0x40,0xdd,0x77,0x11,0xdd,0x77,0x13,0xdd,0x19,0x10,0xf6,0xc9,0x21,0xa0,0x4d,0x06, - 0x21,0x3a,0x3a,0x4d,0x90,0x20,0x05,0x36,0x01,0xc3,0x8e,0x05,0xcd,0x17,0x10,0xcd, - 0x17,0x10,0xcd,0x23,0x0e,0xcd,0x0d,0x0c,0xcd,0xd6,0x0b,0xcd,0xa5,0x05,0xcd,0xfe, - 0x1e,0xcd,0x25,0x1f,0xcd,0x4c,0x1f,0xcd,0x73,0x1f,0xc9,0x21,0xa1,0x4d,0x06,0x20, - 0x3a,0x32,0x4d,0xc3,0x24,0x05,0x21,0xa2,0x4d,0x06,0x22,0x3a,0x32,0x4d,0xc3,0x24, - 0x05,0x21,0xa3,0x4d,0x06,0x24,0x3a,0x32,0x4d,0xc3,0x24,0x05,0x3a,0xd0,0x4d,0x47, - 0x3a,0xd1,0x4d,0x80,0xfe,0x06,0xca,0x8e,0x05,0xc3,0x2c,0x05,0xcd,0xbe,0x06,0xc9, - 0x3a,0x75,0x4e,0x81,0x4f,0x06,0x1c,0xcd,0x42,0x00,0xf7,0x4a,0x02,0x00,0x21,0x02, - 0x4e,0x34,0xc9,0x3a,0x75,0x4e,0x81,0x4f,0x06,0x1c,0xcd,0x42,0x00,0xf7,0x45,0x02, - 0x00,0xcd,0x8e,0x05,0xc9,0x3a,0xb5,0x4d,0xa7,0xc8,0xaf,0x32,0xb5,0x4d,0x3a,0x30, - 0x4d,0xee,0x02,0x32,0x3c,0x4d,0x47,0x21,0xff,0x32,0xdf,0x22,0x26,0x4d,0xc9,0x36, - 0xb1,0x2c,0x36,0xb3,0x2c,0x36,0xb5,0x01,0x1e,0x00,0x09,0x36,0xb0,0x2c,0x36,0xb2, - 0x2c,0x36,0xb4,0x11,0x00,0x04,0x19,0x77,0x2d,0x77,0x2d,0x77,0xa7,0xed,0x42,0x77, - 0x2d,0x77,0x2d,0x77,0xc9,0x3a,0x03,0x4e,0xe7,0xf3,0x05,0x1b,0x06,0x74,0x06,0x0c, - 0x00,0xa8,0x06,0xcd,0xa1,0x2b,0xef,0x00,0x01,0xef,0x01,0x00,0xef,0x1c,0x07,0xef, - 0x1c,0x0b,0xef,0x1e,0x00,0x21,0x03,0x4e,0x34,0x3e,0x01,0x32,0xd6,0x4d,0x3a,0x71, - 0x4e,0xfe,0xff,0xc8,0xef,0x1c,0x0a,0xef,0x1f,0x00,0xc9,0xcd,0xa1,0x2b,0x3a,0x6e, - 0x4e,0xfe,0x01,0x06,0x09,0x20,0x02,0x06,0x08,0xcd,0x5e,0x2c,0x3a,0x6e,0x4e,0xfe, - 0x01,0x3a,0x40,0x50,0x28,0x0c,0xcb,0x77,0x20,0x08,0x3e,0x01,0x32,0x70,0x4e,0xc3, - 0x49,0x06,0xcb,0x6f,0xc0,0xaf,0x32,0x70,0x4e,0x3a,0x6b,0x4e,0xa7,0x28,0x15,0x3a, - 0x70,0x4e,0xa7,0x3a,0x6e,0x4e,0x28,0x03,0xc6,0x99,0x27,0xc6,0x99,0x27,0x32,0x6e, - 0x4e,0xcd,0xa1,0x2b,0x21,0x03,0x4e,0x34,0xaf,0x32,0xd6,0x4d,0x3c,0x32,0xcc,0x4e, - 0x32,0xdc,0x4e,0xc9,0xef,0x00,0x01,0xef,0x01,0x01,0xef,0x02,0x00,0xef,0x12,0x00, - 0xef,0x03,0x00,0xef,0x1c,0x03,0xef,0x1c,0x06,0xef,0x18,0x00,0xef,0x1b,0x00,0xaf, - 0x32,0x13,0x4e,0x3a,0x6f,0x4e,0x32,0x14,0x4e,0x32,0x15,0x4e,0xef,0x1a,0x00,0xf7, - 0x57,0x01,0x00,0x21,0x03,0x4e,0x34,0xc9,0x21,0x15,0x4e,0x35,0xcd,0x6a,0x2b,0xaf, - 0x32,0x03,0x4e,0x32,0x02,0x4e,0x32,0x04,0x4e,0x21,0x00,0x4e,0x34,0xc9,0x3a,0x04, - 0x4e,0xe7,0x79,0x08,0x99,0x08,0x0c,0x00,0xcd,0x08,0x0d,0x09,0x0c,0x00,0x40,0x09, - 0x0c,0x00,0x72,0x09,0x88,0x09,0x0c,0x00,0xd2,0x09,0xd8,0x09,0x0c,0x00,0xe8,0x09, - 0x0c,0x00,0xfe,0x09,0x0c,0x00,0x02,0x0a,0x0c,0x00,0x04,0x0a,0x0c,0x00,0x06,0x0a, - 0x0c,0x00,0x08,0x0a,0x0c,0x00,0x0a,0x0a,0x0c,0x00,0x0c,0x0a,0x0c,0x00,0x0e,0x0a, - 0x0c,0x00,0x2c,0x0a,0x0c,0x00,0x7c,0x0a,0xa0,0x0a,0x0c,0x00,0xa3,0x0a,0x78,0xa7, - 0x20,0x04,0x2a,0x0a,0x4e,0x7e,0xdd,0x21,0x96,0x07,0x47,0x87,0x87,0x80,0x80,0x5f, - 0x16,0x00,0xdd,0x19,0xdd,0x7e,0x00,0x87,0x47,0x87,0x87,0x4f,0x87,0x87,0x81,0x80, - 0x5f,0x16,0x00,0x21,0x0f,0x33,0x19,0xcd,0x14,0x08,0xdd,0x7e,0x01,0x32,0xb0,0x4d, - 0xdd,0x7e,0x02,0x47,0x87,0x80,0x5f,0x16,0x00,0x21,0x43,0x08,0x19,0xcd,0x3a,0x08, - 0xdd,0x7e,0x03,0x87,0x5f,0x16,0x00,0xfd,0x21,0x4f,0x08,0xfd,0x19,0xfd,0x6e,0x00, - 0xfd,0x66,0x01,0x22,0xbb,0x4d,0xdd,0x7e,0x04,0x87,0x5f,0x16,0x00,0xfd,0x21,0x61, - 0x08,0xfd,0x19,0xfd,0x6e,0x00,0xfd,0x66,0x01,0x22,0xbd,0x4d,0xdd,0x7e,0x05,0x87, - 0x5f,0x16,0x00,0xfd,0x21,0x73,0x08,0xfd,0x19,0xfd,0x6e,0x00,0xfd,0x66,0x01,0x22, - 0x95,0x4d,0xcd,0xea,0x2b,0xc9,0x03,0x01,0x01,0x00,0x02,0x00,0x04,0x01,0x02,0x01, - 0x03,0x00,0x04,0x01,0x03,0x02,0x04,0x01,0x04,0x02,0x03,0x02,0x05,0x01,0x05,0x00, - 0x03,0x02,0x06,0x02,0x05,0x01,0x03,0x03,0x03,0x02,0x05,0x02,0x03,0x03,0x06,0x02, - 0x05,0x02,0x03,0x03,0x06,0x02,0x05,0x00,0x03,0x04,0x07,0x02,0x05,0x01,0x03,0x04, - 0x03,0x02,0x05,0x02,0x03,0x04,0x06,0x02,0x05,0x02,0x03,0x05,0x07,0x02,0x05,0x00, - 0x03,0x05,0x07,0x02,0x05,0x02,0x03,0x05,0x05,0x02,0x05,0x01,0x03,0x06,0x07,0x02, - 0x05,0x02,0x03,0x06,0x07,0x02,0x05,0x02,0x03,0x06,0x08,0x02,0x05,0x02,0x03,0x06, - 0x07,0x02,0x05,0x02,0x03,0x07,0x08,0x02,0x05,0x02,0x03,0x07,0x08,0x02,0x06,0x02, - 0x03,0x07,0x08,0x02,0x11,0x46,0x4d,0x01,0x1c,0x00,0xed,0xb0,0x01,0x0c,0x00,0xa7, - 0xed,0x42,0xed,0xb0,0x01,0x0c,0x00,0xa7,0xed,0x42,0xed,0xb0,0x01,0x0c,0x00,0xa7, - 0xed,0x42,0xed,0xb0,0x01,0x0e,0x00,0xed,0xb0,0xc9,0x11,0xb8,0x4d,0x01,0x03,0x00, - 0xed,0xb0,0xc9,0x14,0x1e,0x46,0x00,0x1e,0x3c,0x00,0x00,0x32,0x00,0x00,0x00,0x14, - 0x0a,0x1e,0x0f,0x28,0x14,0x32,0x19,0x3c,0x1e,0x50,0x28,0x64,0x32,0x78,0x3c,0x8c, - 0x46,0xc0,0x03,0x48,0x03,0xd0,0x02,0x58,0x02,0xe0,0x01,0x68,0x01,0xf0,0x00,0x78, - 0x00,0x01,0x00,0xf0,0x00,0xf0,0x00,0xb4,0x00,0x21,0x09,0x4e,0xaf,0x06,0x0b,0xcf, - 0xcd,0xc9,0x24,0x2a,0x73,0x4e,0x22,0x0a,0x4e,0x21,0x0a,0x4e,0x11,0x38,0x4e,0x01, - 0x2e,0x00,0xed,0xb0,0x21,0x04,0x4e,0x34,0xc9,0x3a,0x00,0x4e,0x3d,0x20,0x06,0x3e, - 0x09,0x32,0x04,0x4e,0xc9,0xef,0x11,0x00,0xef,0x1c,0x83,0xef,0x04,0x00,0xef,0x05, - 0x00,0xef,0x10,0x00,0xef,0x1a,0x00,0xf7,0x54,0x00,0x00,0xf7,0x54,0x06,0x00,0x3a, - 0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0x32,0x03,0x50,0xc3,0x94,0x08,0x3a,0x00,0x50, - 0xcb,0x67,0xc2,0xde,0x08,0x21,0x04,0x4e,0x36,0x0e,0xef,0x13,0x00,0xc9,0x3a,0x0e, - 0x4e,0xfe,0xf4,0x20,0x06,0x21,0x04,0x4e,0x36,0x0c,0xc9,0xcd,0x17,0x10,0xcd,0x17, - 0x10,0xcd,0xdd,0x13,0xcd,0x42,0x0c,0xcd,0x23,0x0e,0xcd,0x36,0x0e,0xcd,0xc3,0x0a, - 0xcd,0xd6,0x0b,0xcd,0x0d,0x0c,0xcd,0x6c,0x0e,0xcd,0xad,0x0e,0xc9,0x3e,0x01,0x32, - 0x12,0x4e,0xcd,0x87,0x24,0x21,0x04,0x4e,0x34,0x3a,0x14,0x4e,0xa7,0x20,0x1f,0x3a, - 0x70,0x4e,0xa7,0x28,0x19,0x3a,0x42,0x4e,0xa7,0x28,0x13,0x3a,0x09,0x4e,0xc6,0x03, - 0x4f,0x06,0x1c,0xcd,0x42,0x00,0xef,0x1c,0x05,0xf7,0x54,0x00,0x00,0xc9,0x34,0xc9, - 0x3a,0x70,0x4e,0xa7,0x28,0x06,0x3a,0x42,0x4e,0xa7,0x20,0x15,0x3a,0x14,0x4e,0xa7, - 0x20,0x1a,0xcd,0xa1,0x2b,0xef,0x1c,0x05,0xf7,0x54,0x00,0x00,0x21,0x04,0x4e,0x34, - 0xc9,0xcd,0xa6,0x0a,0x3a,0x09,0x4e,0xee,0x01,0x32,0x09,0x4e,0x3e,0x09,0x32,0x04, - 0x4e,0xc9,0xaf,0x32,0x02,0x4e,0x32,0x04,0x4e,0x32,0x70,0x4e,0x32,0x09,0x4e,0x32, - 0x03,0x50,0x3e,0x01,0x32,0x00,0x4e,0xc9,0xef,0x00,0x01,0xef,0x01,0x01,0xef,0x02, - 0x00,0xef,0x11,0x00,0xef,0x13,0x00,0xef,0x03,0x00,0xef,0x04,0x00,0xef,0x05,0x00, - 0xef,0x10,0x00,0xef,0x1a,0x00,0xef,0x1c,0x06,0x3a,0x00,0x4e,0xfe,0x03,0x28,0x06, - 0xef,0x1c,0x05,0xef,0x1d,0x00,0xf7,0x54,0x00,0x00,0x3a,0x00,0x4e,0x3d,0x28,0x04, - 0xf7,0x54,0x06,0x00,0x3a,0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0x32,0x03,0x50,0xc3, - 0x94,0x08,0x3e,0x03,0x32,0x04,0x4e,0xc9,0xf7,0x54,0x00,0x00,0x21,0x04,0x4e,0x34, - 0xaf,0x32,0xac,0x4e,0x32,0xbc,0x4e,0xc9,0x0e,0x02,0x06,0x01,0xcd,0x42,0x00,0xf7, - 0x42,0x00,0x00,0x21,0x00,0x00,0xcd,0x7e,0x26,0x21,0x04,0x4e,0x34,0xc9,0x0e,0x00, - 0x18,0xe8,0x18,0xe4,0x18,0xf8,0x18,0xe0,0x18,0xf4,0x18,0xdc,0x18,0xf0,0xef,0x00, - 0x01,0xef,0x06,0x00,0xef,0x11,0x00,0xef,0x13,0x00,0xef,0x04,0x01,0xef,0x05,0x01, - 0xef,0x10,0x13,0xf7,0x43,0x00,0x00,0x21,0x04,0x4e,0x34,0xc9,0xaf,0x32,0xac,0x4e, - 0x32,0xbc,0x4e,0x3e,0x02,0x32,0xcc,0x4e,0x32,0xdc,0x4e,0x3a,0x13,0x4e,0xfe,0x14, - 0x38,0x02,0x3e,0x14,0xe7,0x6f,0x0a,0x08,0x21,0x6f,0x0a,0x6f,0x0a,0x9e,0x21,0x6f, - 0x0a,0x6f,0x0a,0x6f,0x0a,0x97,0x22,0x6f,0x0a,0x6f,0x0a,0x6f,0x0a,0x97,0x22,0x6f, - 0x0a,0x6f,0x0a,0x6f,0x0a,0x97,0x22,0x6f,0x0a,0x6f,0x0a,0x6f,0x0a,0x6f,0x0a,0x21, - 0x04,0x4e,0x34,0x34,0xaf,0x32,0xcc,0x4e,0x32,0xdc,0x4e,0xc9,0xaf,0x32,0xcc,0x4e, - 0x32,0xdc,0x4e,0x06,0x07,0x21,0x0c,0x4e,0xcf,0xcd,0xc9,0x24,0x21,0x04,0x4e,0x34, - 0x21,0x13,0x4e,0x34,0x2a,0x0a,0x4e,0x7e,0xfe,0x14,0xc8,0x23,0x22,0x0a,0x4e,0xc9, - 0xc3,0x88,0x09,0xc3,0xd2,0x09,0x06,0x2e,0xdd,0x21,0x0a,0x4e,0xfd,0x21,0x38,0x4e, - 0xdd,0x56,0x00,0xfd,0x5e,0x00,0xfd,0x72,0x00,0xdd,0x73,0x00,0xdd,0x23,0xfd,0x23, - 0x10,0xee,0xc9,0x3a,0xa4,0x4d,0xa7,0xc0,0xdd,0x21,0x00,0x4c,0xfd,0x21,0xc8,0x4d, - 0x11,0x00,0x01,0xfd,0xbe,0x00,0xc2,0xd2,0x0b,0xfd,0x36,0x00,0x0e,0x3a,0xa6,0x4d, - 0xa7,0x28,0x1b,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30,0x13,0x21,0xac,0x4e,0xcb,0xfe, - 0x3e,0x09,0xdd,0xbe,0x0b,0x20,0x04,0xcb,0xbe,0x3e,0x09,0x32,0x0b,0x4c,0x3a,0xa7, - 0x4d,0xa7,0x28,0x1d,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30,0x27,0x3e,0x11,0xdd,0xbe, - 0x03,0x28,0x07,0xdd,0x36,0x03,0x11,0xc3,0x33,0x0b,0xdd,0x36,0x03,0x12,0xc3,0x33, - 0x0b,0x3e,0x01,0xdd,0xbe,0x03,0x28,0x07,0xdd,0x36,0x03,0x01,0xc3,0x33,0x0b,0xdd, - 0x36,0x03,0x01,0x3a,0xa8,0x4d,0xa7,0x28,0x1d,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30, - 0x27,0x3e,0x11,0xdd,0xbe,0x05,0x28,0x07,0xdd,0x36,0x05,0x11,0xc3,0x68,0x0b,0xdd, - 0x36,0x05,0x12,0xc3,0x68,0x0b,0x3e,0x03,0xdd,0xbe,0x05,0x28,0x07,0xdd,0x36,0x05, - 0x03,0xc3,0x68,0x0b,0xdd,0x36,0x05,0x03,0x3a,0xa9,0x4d,0xa7,0x28,0x1d,0x2a,0xcb, - 0x4d,0xa7,0xed,0x52,0x30,0x27,0x3e,0x11,0xdd,0xbe,0x07,0x28,0x07,0xdd,0x36,0x07, - 0x11,0xc3,0x9d,0x0b,0xdd,0x36,0x07,0x12,0xc3,0x9d,0x0b,0x3e,0x05,0xdd,0xbe,0x07, - 0x28,0x07,0xdd,0x36,0x07,0x05,0xc3,0x9d,0x0b,0xdd,0x36,0x07,0x05,0x3a,0xaa,0x4d, - 0xa7,0x28,0x1d,0x2a,0xcb,0x4d,0xa7,0xed,0x52,0x30,0x27,0x3e,0x11,0xdd,0xbe,0x09, - 0x28,0x07,0xdd,0x36,0x09,0x11,0xc3,0xd2,0x0b,0xdd,0x36,0x09,0x12,0xc3,0xd2,0x0b, - 0x3e,0x07,0xdd,0xbe,0x09,0x28,0x07,0xdd,0x36,0x09,0x07,0xc3,0xd2,0x0b,0xdd,0x36, - 0x09,0x07,0xfd,0x35,0x00,0xc9,0x06,0x19,0x3a,0x02,0x4e,0xfe,0x22,0xc2,0xe2,0x0b, - 0x06,0x00,0xdd,0x21,0x00,0x4c,0x3a,0xac,0x4d,0xa7,0xca,0xf0,0x0b,0xdd,0x70,0x03, - 0x3a,0xad,0x4d,0xa7,0xca,0xfa,0x0b,0xdd,0x70,0x05,0x3a,0xae,0x4d,0xa7,0xca,0x04, - 0x0c,0xdd,0x70,0x07,0x3a,0xaf,0x4d,0xa7,0xc8,0xdd,0x70,0x09,0xc9,0x21,0xcf,0x4d, - 0x34,0x3e,0x0a,0xbe,0xc0,0x36,0x00,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x15,0x21,0x64, - 0x44,0x3e,0x10,0xbe,0x20,0x02,0x3e,0x00,0x77,0x32,0x78,0x44,0x32,0x84,0x47,0x32, - 0x98,0x47,0xc9,0x21,0x32,0x47,0x3e,0x10,0xbe,0x20,0x02,0x3e,0x00,0x77,0x32,0x78, - 0x46,0xc9,0x3a,0xa4,0x4d,0xa7,0xc0,0x3a,0x94,0x4d,0x07,0x32,0x94,0x4d,0xd0,0x3a, - 0xa0,0x4d,0xa7,0xc2,0x90,0x0c,0xdd,0x21,0x05,0x33,0xfd,0x21,0x00,0x4d,0xcd,0x00, - 0x20,0x22,0x00,0x4d,0x3e,0x03,0x32,0x28,0x4d,0x32,0x2c,0x4d,0x3a,0x00,0x4d,0xfe, - 0x64,0xc2,0x90,0x0c,0x21,0x2c,0x2e,0x22,0x0a,0x4d,0x21,0x00,0x01,0x22,0x14,0x4d, - 0x22,0x1e,0x4d,0x3e,0x02,0x32,0x28,0x4d,0x32,0x2c,0x4d,0x3e,0x01,0x32,0xa0,0x4d, - 0x3a,0xa1,0x4d,0xfe,0x01,0xca,0xfb,0x0c,0xfe,0x00,0xc2,0xc1,0x0c,0x3a,0x02,0x4d, - 0xfe,0x78,0xcc,0x2e,0x1f,0xfe,0x80,0xcc,0x2e,0x1f,0x3a,0x2d,0x4d,0x32,0x29,0x4d, - 0xdd,0x21,0x20,0x4d,0xfd,0x21,0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0xc3,0xfb, - 0x0c,0xdd,0x21,0x05,0x33,0xfd,0x21,0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0x3e, - 0x03,0x32,0x2d,0x4d,0x32,0x29,0x4d,0x3a,0x02,0x4d,0xfe,0x64,0xc2,0xfb,0x0c,0x21, - 0x2c,0x2e,0x22,0x0c,0x4d,0x21,0x00,0x01,0x22,0x16,0x4d,0x22,0x20,0x4d,0x3e,0x02, - 0x32,0x29,0x4d,0x32,0x2d,0x4d,0x3e,0x01,0x32,0xa1,0x4d,0x3a,0xa2,0x4d,0xfe,0x01, - 0xca,0x93,0x0d,0xfe,0x00,0xc2,0x2c,0x0d,0x3a,0x04,0x4d,0xfe,0x78,0xcc,0x55,0x1f, - 0xfe,0x80,0xcc,0x55,0x1f,0x3a,0x2e,0x4d,0x32,0x2a,0x4d,0xdd,0x21,0x22,0x4d,0xfd, - 0x21,0x04,0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0xc3,0x93,0x0d,0x3a,0xa2,0x4d,0xfe, - 0x03,0xc2,0x59,0x0d,0xdd,0x21,0xff,0x32,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22, - 0x04,0x4d,0xaf,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0x3a,0x05,0x4d,0xfe,0x80,0xc2,0x93, - 0x0d,0x3e,0x02,0x32,0xa2,0x4d,0xc3,0x93,0x0d,0xdd,0x21,0x05,0x33,0xfd,0x21,0x04, - 0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0x3e,0x03,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0x3a, - 0x04,0x4d,0xfe,0x64,0xc2,0x93,0x0d,0x21,0x2c,0x2e,0x22,0x0e,0x4d,0x21,0x00,0x01, - 0x22,0x18,0x4d,0x22,0x22,0x4d,0x3e,0x02,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0x3e,0x01, - 0x32,0xa2,0x4d,0x3a,0xa3,0x4d,0xfe,0x01,0xc8,0xfe,0x00,0xc2,0xc0,0x0d,0x3a,0x06, - 0x4d,0xfe,0x78,0xcc,0x7c,0x1f,0xfe,0x80,0xcc,0x7c,0x1f,0x3a,0x2f,0x4d,0x32,0x2b, - 0x4d,0xdd,0x21,0x24,0x4d,0xfd,0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0xc9, - 0x3a,0xa3,0x4d,0xfe,0x03,0xc2,0xea,0x0d,0xdd,0x21,0x03,0x33,0xfd,0x21,0x06,0x4d, - 0xcd,0x00,0x20,0x22,0x06,0x4d,0x3e,0x02,0x32,0x2b,0x4d,0x32,0x2f,0x4d,0x3a,0x07, - 0x4d,0xfe,0x80,0xc0,0x3e,0x02,0x32,0xa3,0x4d,0xc9,0xdd,0x21,0x05,0x33,0xfd,0x21, - 0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0x3e,0x03,0x32,0x2b,0x4d,0x32,0x2f,0x4d, - 0x3a,0x06,0x4d,0xfe,0x64,0xc0,0x21,0x2c,0x2e,0x22,0x10,0x4d,0x21,0x00,0x01,0x22, - 0x1a,0x4d,0x22,0x24,0x4d,0x3e,0x02,0x32,0x2b,0x4d,0x32,0x2f,0x4d,0x3e,0x01,0x32, - 0xa3,0x4d,0xc9,0x21,0xc4,0x4d,0x34,0x3e,0x08,0xbe,0xc0,0x36,0x00,0x3a,0xc0,0x4d, - 0xee,0x01,0x32,0xc0,0x4d,0xc9,0x3a,0xa6,0x4d,0xa7,0xc0,0x3a,0xc1,0x4d,0xfe,0x07, - 0xc8,0x87,0x2a,0xc2,0x4d,0x23,0x22,0xc2,0x4d,0x5f,0x16,0x00,0xdd,0x21,0x86,0x4d, - 0xdd,0x19,0xdd,0x5e,0x00,0xdd,0x56,0x01,0xa7,0xed,0x52,0xc0,0xcb,0x3f,0x3c,0x32, - 0xc1,0x4d,0x21,0x01,0x01,0x22,0xb1,0x4d,0x22,0xb3,0x4d,0xc9,0x3a,0xa5,0x4d,0xa7, - 0x28,0x05,0xaf,0x32,0xac,0x4e,0xc9,0x21,0xac,0x4e,0x06,0xe0,0x3a,0x0e,0x4e,0xfe, - 0xe4,0x38,0x06,0x78,0xa6,0xcb,0xe7,0x77,0xc9,0xfe,0xd4,0x38,0x06,0x78,0xa6,0xcb, - 0xdf,0x77,0xc9,0xfe,0xb4,0x38,0x06,0x78,0xa6,0xcb,0xd7,0x77,0xc9,0xfe,0x74,0x38, - 0x06,0x78,0xa6,0xcb,0xcf,0x77,0xc9,0x78,0xa6,0xcb,0xc7,0x77,0xc9,0x3a,0xa5,0x4d, - 0xa7,0xc0,0x3a,0xd4,0x4d,0xa7,0xc0,0x3a,0x0e,0x4e,0xfe,0x46,0x28,0x0e,0xfe,0xaa, - 0xc0,0x3a,0x0d,0x4e,0xa7,0xc0,0x21,0x0d,0x4e,0x34,0x18,0x09,0x3a,0x0c,0x4e,0xa7, - 0xc0,0x21,0x0c,0x4e,0x34,0x21,0x94,0x80,0x22,0xd2,0x4d,0x21,0xfd,0x0e,0x3a,0x13, - 0x4e,0xfe,0x14,0x38,0x02,0x3e,0x14,0x47,0x87,0x80,0xd7,0x32,0x0c,0x4c,0x23,0x7e, - 0x32,0x0d,0x4c,0x23,0x7e,0x32,0xd4,0x4d,0xf7,0x8a,0x04,0x00,0xc9,0x00,0x14,0x06, - 0x01,0x0f,0x07,0x02,0x15,0x08,0x02,0x15,0x08,0x04,0x14,0x09,0x04,0x14,0x09,0x05, - 0x17,0x0a,0x05,0x17,0x0a,0x06,0x09,0x0b,0x06,0x09,0x0b,0x03,0x16,0x0c,0x03,0x16, - 0x0c,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d, - 0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x07,0x16,0x0d,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x36, - 0xaf,0x32,0xd4,0x4d,0x21,0x00,0x00,0x22,0xd2,0x4d,0xc9,0xef,0x1c,0x9b,0x3a,0x00, - 0x4e,0x3d,0xc8,0xef,0x1c,0xa2,0xc9,0xcd,0x91,0x12,0x3a,0xa5,0x4d,0xa7,0xc0,0xcd, - 0x66,0x10,0xcd,0x94,0x10,0xcd,0x9e,0x10,0xcd,0xa8,0x10,0xcd,0xb4,0x10,0x3a,0xa4, - 0x4d,0xa7,0xca,0x39,0x10,0xcd,0x35,0x12,0xc9,0xcd,0x1d,0x17,0xcd,0x89,0x17,0x3a, - 0xa4,0x4d,0xa7,0xc0,0xcd,0x06,0x18,0xcd,0x36,0x1b,0xcd,0x4b,0x1c,0xcd,0x22,0x1d, - 0xcd,0xf9,0x1d,0x3a,0x04,0x4e,0xfe,0x03,0xc0,0xcd,0x76,0x13,0xcd,0x69,0x20,0xcd, - 0x8c,0x20,0xcd,0xaf,0x20,0xc9,0x3a,0xab,0x4d,0xa7,0xc8,0x3d,0x20,0x08,0x32,0xab, - 0x4d,0x3c,0x32,0xac,0x4d,0xc9,0x3d,0x20,0x08,0x32,0xab,0x4d,0x3c,0x32,0xad,0x4d, - 0xc9,0x3d,0x20,0x08,0x32,0xab,0x4d,0x3c,0x32,0xae,0x4d,0xc9,0x32,0xaf,0x4d,0x3d, - 0x32,0xab,0x4d,0xc9,0x3a,0xac,0x4d,0xe7,0x0c,0x00,0xc0,0x10,0xd2,0x10,0x3a,0xad, - 0x4d,0xe7,0x0c,0x00,0x18,0x11,0x2a,0x11,0x3a,0xae,0x4d,0xe7,0x0c,0x00,0x5c,0x11, - 0x6e,0x11,0x8f,0x11,0x3a,0xaf,0x4d,0xe7,0x0c,0x00,0xc9,0x11,0xdb,0x11,0xfc,0x11, - 0xcd,0xd8,0x1b,0x2a,0x00,0x4d,0x11,0x64,0x80,0xa7,0xed,0x52,0xc0,0x21,0xac,0x4d, - 0x34,0xc9,0xdd,0x21,0x01,0x33,0xfd,0x21,0x00,0x4d,0xcd,0x00,0x20,0x22,0x00,0x4d, - 0x3e,0x01,0x32,0x28,0x4d,0x32,0x2c,0x4d,0x3a,0x00,0x4d,0xfe,0x80,0xc0,0x21,0x2f, - 0x2e,0x22,0x0a,0x4d,0x22,0x31,0x4d,0xaf,0x32,0xa0,0x4d,0x32,0xac,0x4d,0x32,0xa7, - 0x4d,0xdd,0x21,0xac,0x4d,0xdd,0xb6,0x00,0xdd,0xb6,0x01,0xdd,0xb6,0x02,0xdd,0xb6, - 0x03,0xc0,0x21,0xac,0x4e,0xcb,0xb6,0xc9,0xcd,0xaf,0x1c,0x2a,0x02,0x4d,0x11,0x64, - 0x80,0xa7,0xed,0x52,0xc0,0x21,0xad,0x4d,0x34,0xc9,0xdd,0x21,0x01,0x33,0xfd,0x21, - 0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0x3e,0x01,0x32,0x29,0x4d,0x32,0x2d,0x4d, - 0x3a,0x02,0x4d,0xfe,0x80,0xc0,0x21,0x2f,0x2e,0x22,0x0c,0x4d,0x22,0x33,0x4d,0xaf, - 0x32,0xa1,0x4d,0x32,0xad,0x4d,0x32,0xa8,0x4d,0xc3,0x01,0x11,0xcd,0x86,0x1d,0x2a, - 0x04,0x4d,0x11,0x64,0x80,0xa7,0xed,0x52,0xc0,0x21,0xae,0x4d,0x34,0xc9,0xdd,0x21, - 0x01,0x33,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0x3e,0x01,0x32,0x2a, - 0x4d,0x32,0x2e,0x4d,0x3a,0x04,0x4d,0xfe,0x80,0xc0,0x21,0xae,0x4d,0x34,0xc9,0xdd, - 0x21,0x03,0x33,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22,0x04,0x4d,0x3e,0x02,0x32, - 0x2a,0x4d,0x32,0x2e,0x4d,0x3a,0x05,0x4d,0xfe,0x90,0xc0,0x21,0x2f,0x30,0x22,0x0e, - 0x4d,0x22,0x35,0x4d,0x3e,0x01,0x32,0x2a,0x4d,0x32,0x2e,0x4d,0xaf,0x32,0xa2,0x4d, - 0x32,0xae,0x4d,0x32,0xa9,0x4d,0xc3,0x01,0x11,0xcd,0x5d,0x1e,0x2a,0x06,0x4d,0x11, - 0x64,0x80,0xa7,0xed,0x52,0xc0,0x21,0xaf,0x4d,0x34,0xc9,0xdd,0x21,0x01,0x33,0xfd, - 0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0x3e,0x01,0x32,0x2b,0x4d,0x32,0x2f, - 0x4d,0x3a,0x06,0x4d,0xfe,0x80,0xc0,0x21,0xaf,0x4d,0x34,0xc9,0xdd,0x21,0xff,0x32, - 0xfd,0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0xaf,0x32,0x2b,0x4d,0x32,0x2f, - 0x4d,0x3a,0x07,0x4d,0xfe,0x70,0xc0,0x21,0x2f,0x2c,0x22,0x10,0x4d,0x22,0x37,0x4d, - 0x3e,0x01,0x32,0x2b,0x4d,0x32,0x2f,0x4d,0xaf,0x32,0xa3,0x4d,0x32,0xaf,0x4d,0x32, - 0xaa,0x4d,0xc3,0x01,0x11,0x3a,0xd1,0x4d,0xe7,0x3f,0x12,0x0c,0x00,0x3f,0x12,0x21, - 0x00,0x4c,0x3a,0xa4,0x4d,0x87,0x5f,0x16,0x00,0x19,0x3a,0xd1,0x4d,0xa7,0x20,0x27, - 0x3a,0xd0,0x4d,0x06,0x27,0x80,0x47,0x3a,0x72,0x4e,0x4f,0x3a,0x09,0x4e,0xa1,0x28, - 0x04,0xcb,0xf0,0xcb,0xf8,0x70,0x23,0x36,0x18,0x3e,0x00,0x32,0x0b,0x4c,0xf7,0x4a, - 0x03,0x00,0x21,0xd1,0x4d,0x34,0xc9,0x36,0x20,0x3e,0x09,0x32,0x0b,0x4c,0x3a,0xa4, - 0x4d,0x32,0xab,0x4d,0xaf,0x32,0xa4,0x4d,0x32,0xd1,0x4d,0x21,0xac,0x4e,0xcb,0xf6, - 0xc9,0x3a,0xa5,0x4d,0xe7,0x0c,0x00,0xb7,0x12,0xb7,0x12,0xb7,0x12,0xb7,0x12,0xcb, - 0x12,0xf9,0x12,0x06,0x13,0x0e,0x13,0x16,0x13,0x1e,0x13,0x26,0x13,0x2e,0x13,0x36, - 0x13,0x3e,0x13,0x46,0x13,0x53,0x13,0x2a,0xc5,0x4d,0x23,0x22,0xc5,0x4d,0x11,0x78, - 0x00,0xa7,0xed,0x52,0xc0,0x3e,0x05,0x32,0xa5,0x4d,0xc9,0x21,0x00,0x00,0xcd,0x7e, - 0x26,0x3e,0x34,0x11,0xb4,0x00,0x4f,0x3a,0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0x28, - 0x04,0x3e,0xc0,0xb1,0x4f,0x79,0x32,0x0a,0x4c,0x2a,0xc5,0x4d,0x23,0x22,0xc5,0x4d, - 0xa7,0xed,0x52,0xc0,0x21,0xa5,0x4d,0x34,0xc9,0x21,0xbc,0x4e,0xcb,0xe6,0x3e,0x35, - 0x11,0xc3,0x00,0xc3,0xd6,0x12,0x3e,0x36,0x11,0xd2,0x00,0xc3,0xd6,0x12,0x3e,0x37, - 0x11,0xe1,0x00,0xc3,0xd6,0x12,0x3e,0x38,0x11,0xf0,0x00,0xc3,0xd6,0x12,0x3e,0x39, - 0x11,0xff,0x00,0xc3,0xd6,0x12,0x3e,0x3a,0x11,0x0e,0x01,0xc3,0xd6,0x12,0x3e,0x3b, - 0x11,0x1d,0x01,0xc3,0xd6,0x12,0x3e,0x3c,0x11,0x2c,0x01,0xc3,0xd6,0x12,0x3e,0x3d, - 0x11,0x3b,0x01,0xc3,0xd6,0x12,0x21,0xbc,0x4e,0x36,0x20,0x3e,0x3e,0x11,0x59,0x01, - 0xc3,0xd6,0x12,0x3e,0x3f,0x32,0x0a,0x4c,0x2a,0xc5,0x4d,0x23,0x22,0xc5,0x4d,0x11, - 0xb8,0x01,0xa7,0xed,0x52,0xc0,0x21,0x14,0x4e,0x35,0x21,0x15,0x4e,0x35,0xcd,0x75, - 0x26,0x21,0x04,0x4e,0x34,0xc9,0x3a,0xa6,0x4d,0xa7,0xc8,0xdd,0x21,0xa7,0x4d,0xdd, - 0x7e,0x00,0xdd,0xb6,0x01,0xdd,0xb6,0x02,0xdd,0xb6,0x03,0xca,0x98,0x13,0x2a,0xcb, - 0x4d,0x2b,0x22,0xcb,0x4d,0x7c,0xb5,0xc0,0x21,0x0b,0x4c,0x36,0x09,0x3a,0xac,0x4d, - 0xa7,0xc2,0xa7,0x13,0x32,0xa7,0x4d,0x3a,0xad,0x4d,0xa7,0xc2,0xb1,0x13,0x32,0xa8, - 0x4d,0x3a,0xae,0x4d,0xa7,0xc2,0xbb,0x13,0x32,0xa9,0x4d,0x3a,0xaf,0x4d,0xa7,0xc2, - 0xc5,0x13,0x32,0xaa,0x4d,0xaf,0x32,0xcb,0x4d,0x32,0xcc,0x4d,0x32,0xa6,0x4d,0x32, - 0xc8,0x4d,0x32,0xd0,0x4d,0x21,0xac,0x4e,0xcb,0xae,0xcb,0xbe,0xc9,0x21,0x9e,0x4d, - 0x3a,0x0e,0x4e,0xbe,0xca,0xee,0x13,0x21,0x00,0x00,0x22,0x97,0x4d,0xc9,0x2a,0x97, - 0x4d,0x23,0x22,0x97,0x4d,0xed,0x5b,0x95,0x4d,0xa7,0xed,0x52,0xc0,0x21,0x00,0x00, - 0x22,0x97,0x4d,0x3a,0xa1,0x4d,0xa7,0xf5,0xcc,0x86,0x20,0xf1,0xc8,0x3a,0xa2,0x4d, - 0xa7,0xf5,0xcc,0xa9,0x20,0xf1,0xc8,0x3a,0xa3,0x4d,0xa7,0xcc,0xd1,0x20,0xc9,0x3a, - 0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0xc8,0x47,0xdd,0x21,0x00,0x4c,0x1e,0x08,0x0e, - 0x08,0x16,0x07,0x3a,0x00,0x4d,0x83,0xdd,0x77,0x13,0x3a,0x01,0x4d,0x2f,0x82,0xdd, - 0x77,0x12,0x3a,0x02,0x4d,0x83,0xdd,0x77,0x15,0x3a,0x03,0x4d,0x2f,0x82,0xdd,0x77, - 0x14,0x3a,0x04,0x4d,0x83,0xdd,0x77,0x17,0x3a,0x05,0x4d,0x2f,0x81,0xdd,0x77,0x16, - 0x3a,0x06,0x4d,0x83,0xdd,0x77,0x19,0x3a,0x07,0x4d,0x2f,0x81,0xdd,0x77,0x18,0x3a, - 0x08,0x4d,0x83,0xdd,0x77,0x1b,0x3a,0x09,0x4d,0x2f,0x81,0xdd,0x77,0x1a,0x3a,0xd2, - 0x4d,0x83,0xdd,0x77,0x1d,0x3a,0xd3,0x4d,0x2f,0x81,0xdd,0x77,0x1c,0xc3,0xfe,0x14, - 0x3a,0x72,0x4e,0x47,0x3a,0x09,0x4e,0xa0,0xc0,0x47,0x1e,0x09,0x0e,0x07,0x16,0x06, - 0xdd,0x21,0x00,0x4c,0x3a,0x00,0x4d,0x2f,0x83,0xdd,0x77,0x13,0x3a,0x01,0x4d,0x82, - 0xdd,0x77,0x12,0x3a,0x02,0x4d,0x2f,0x83,0xdd,0x77,0x15,0x3a,0x03,0x4d,0x82,0xdd, - 0x77,0x14,0x3a,0x04,0x4d,0x2f,0x83,0xdd,0x77,0x17,0x3a,0x05,0x4d,0x81,0xdd,0x77, - 0x16,0x3a,0x06,0x4d,0x2f,0x83,0xdd,0x77,0x19,0x3a,0x07,0x4d,0x81,0xdd,0x77,0x18, - 0x3a,0x08,0x4d,0x2f,0x83,0xdd,0x77,0x1b,0x3a,0x09,0x4d,0x81,0xdd,0x77,0x1a,0x3a, - 0xd2,0x4d,0x2f,0x83,0xdd,0x77,0x1d,0x3a,0xd3,0x4d,0x81,0xdd,0x77,0x1c,0x3a,0xa5, - 0x4d,0xa7,0xc2,0x4b,0x15,0x3a,0xa4,0x4d,0xa7,0xc2,0xb4,0x15,0x21,0x1c,0x15,0xe5, - 0x3a,0x30,0x4d,0xe7,0x8c,0x16,0xb1,0x16,0xd6,0x16,0xf7,0x16,0x78,0xa7,0x28,0x2b, - 0x0e,0xc0,0x3a,0x0a,0x4c,0x57,0xa1,0x20,0x05,0x7a,0xb1,0xc3,0x48,0x15,0x3a,0x30, - 0x4d,0xfe,0x02,0x20,0x09,0xcb,0x7a,0x28,0x12,0x7a,0xa9,0xc3,0x48,0x15,0xfe,0x03, - 0x20,0x09,0xcb,0x72,0x28,0x05,0x7a,0xa9,0x32,0x0a,0x4c,0x21,0xc0,0x4d,0x56,0x3e, - 0x1c,0x82,0xdd,0x77,0x02,0xdd,0x77,0x04,0xdd,0x77,0x06,0xdd,0x77,0x08,0x0e,0x20, - 0x3a,0xac,0x4d,0xa7,0x20,0x06,0x3a,0xa7,0x4d,0xa7,0x20,0x09,0x3a,0x2c,0x4d,0x87, - 0x82,0x81,0xdd,0x77,0x02,0x3a,0xad,0x4d,0xa7,0x20,0x06,0x3a,0xa8,0x4d,0xa7,0x20, - 0x09,0x3a,0x2d,0x4d,0x87,0x82,0x81,0xdd,0x77,0x04,0x3a,0xae,0x4d,0xa7,0x20,0x06, - 0x3a,0xa9,0x4d,0xa7,0x20,0x09,0x3a,0x2e,0x4d,0x87,0x82,0x81,0xdd,0x77,0x06,0x3a, - 0xaf,0x4d,0xa7,0x20,0x06,0x3a,0xaa,0x4d,0xa7,0x20,0x09,0x3a,0x2f,0x4d,0x87,0x82, - 0x81,0xdd,0x77,0x08,0xcd,0xe6,0x15,0xcd,0x2d,0x16,0xcd,0x52,0x16,0x78,0xa7,0xc8, - 0x0e,0xc0,0x3a,0x02,0x4c,0xb1,0x32,0x02,0x4c,0x3a,0x04,0x4c,0xb1,0x32,0x04,0x4c, - 0x3a,0x06,0x4c,0xb1,0x32,0x06,0x4c,0x3a,0x08,0x4c,0xb1,0x32,0x08,0x4c,0x3a,0x0c, - 0x4c,0xb1,0x32,0x0c,0x4c,0xc9,0x3a,0x06,0x4e,0xd6,0x05,0xd8,0x3a,0x09,0x4d,0xe6, - 0x0f,0xfe,0x0c,0x38,0x04,0x16,0x18,0x18,0x12,0xfe,0x08,0x38,0x04,0x16,0x14,0x18, - 0x0a,0xfe,0x04,0x38,0x04,0x16,0x10,0x18,0x02,0x16,0x14,0xdd,0x72,0x04,0x14,0xdd, - 0x72,0x06,0x14,0xdd,0x72,0x08,0x14,0xdd,0x72,0x0c,0xdd,0x36,0x0a,0x3f,0x16,0x16, - 0xdd,0x72,0x05,0xdd,0x72,0x07,0xdd,0x72,0x09,0xdd,0x72,0x0d,0xc9,0x3a,0x07,0x4e, - 0xa7,0xc8,0x57,0x3a,0x3a,0x4d,0xd6,0x3d,0x20,0x04,0xdd,0x36,0x0b,0x00,0x7a,0xfe, - 0x0a,0xd8,0xdd,0x36,0x02,0x32,0xdd,0x36,0x03,0x1d,0xfe,0x0c,0xd8,0xdd,0x36,0x02, - 0x33,0xc9,0x3a,0x08,0x4e,0xa7,0xc8,0x57,0x3a,0x3a,0x4d,0xd6,0x3d,0x20,0x04,0xdd, - 0x36,0x0b,0x00,0x7a,0xfe,0x01,0xd8,0x3a,0xc0,0x4d,0x1e,0x08,0x83,0xdd,0x77,0x02, - 0x7a,0xfe,0x03,0xd8,0x3a,0x01,0x4d,0xe6,0x08,0x0f,0x0f,0x0f,0x1e,0x0a,0x83,0xdd, - 0x77,0x0c,0x3c,0x3c,0xdd,0x77,0x02,0xdd,0x36,0x0d,0x1e,0xc9,0x3a,0x09,0x4d,0xe6, - 0x07,0xfe,0x06,0x38,0x05,0xdd,0x36,0x0a,0x30,0xc9,0xfe,0x04,0x38,0x05,0xdd,0x36, - 0x0a,0x2e,0xc9,0xfe,0x02,0x38,0x05,0xdd,0x36,0x0a,0x2c,0xc9,0xdd,0x36,0x0a,0x2e, - 0xc9,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x06,0x38,0x05,0xdd,0x36,0x0a,0x2f,0xc9,0xfe, - 0x04,0x38,0x05,0xdd,0x36,0x0a,0x2d,0xc9,0xfe,0x02,0x38,0x05,0xdd,0x36,0x0a,0x2f, - 0xc9,0xdd,0x36,0x0a,0x30,0xc9,0x3a,0x09,0x4d,0xe6,0x07,0xfe,0x06,0x38,0x08,0x1e, - 0x2e,0xcb,0xfb,0xdd,0x73,0x0a,0xc9,0xfe,0x04,0x38,0x04,0x1e,0x2c,0x18,0xf2,0xfe, - 0x02,0x30,0xec,0x1e,0x30,0x18,0xea,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x06,0x38,0x05, - 0xdd,0x36,0x0a,0x30,0xc9,0xfe,0x04,0x38,0x08,0x1e,0x2f,0xcb,0xf3,0xdd,0x73,0x0a, - 0xc9,0xfe,0x02,0x38,0x04,0x1e,0x2d,0x18,0xf2,0x1e,0x2f,0x18,0xee,0x06,0x04,0xed, - 0x5b,0x39,0x4d,0x3a,0xaf,0x4d,0xa7,0x20,0x09,0x2a,0x37,0x4d,0xa7,0xed,0x52,0xca, - 0x63,0x17,0x05,0x3a,0xae,0x4d,0xa7,0x20,0x09,0x2a,0x35,0x4d,0xa7,0xed,0x52,0xca, - 0x63,0x17,0x05,0x3a,0xad,0x4d,0xa7,0x20,0x09,0x2a,0x33,0x4d,0xa7,0xed,0x52,0xca, - 0x63,0x17,0x05,0x3a,0xac,0x4d,0xa7,0x20,0x09,0x2a,0x31,0x4d,0xa7,0xed,0x52,0xca, - 0x63,0x17,0x05,0x78,0x32,0xa4,0x4d,0x32,0xa5,0x4d,0xa7,0xc8,0x21,0xa6,0x4d,0x5f, - 0x16,0x00,0x19,0x7e,0xa7,0xc8,0xaf,0x32,0xa5,0x4d,0x21,0xd0,0x4d,0x34,0x46,0x04, - 0xcd,0x5a,0x2a,0x21,0xbc,0x4e,0xcb,0xde,0xc9,0x3a,0xa4,0x4d,0xa7,0xc0,0x3a,0xa6, - 0x4d,0xa7,0xc8,0x0e,0x04,0x06,0x04,0xdd,0x21,0x08,0x4d,0x3a,0xaf,0x4d,0xa7,0x20, - 0x13,0x3a,0x06,0x4d,0xdd,0x96,0x00,0xb9,0x30,0x0a,0x3a,0x07,0x4d,0xdd,0x96,0x01, - 0xb9,0xda,0x63,0x17,0x05,0x3a,0xae,0x4d,0xa7,0x20,0x13,0x3a,0x04,0x4d,0xdd,0x96, - 0x00,0xb9,0x30,0x0a,0x3a,0x05,0x4d,0xdd,0x96,0x01,0xb9,0xda,0x63,0x17,0x05,0x3a, - 0xad,0x4d,0xa7,0x20,0x13,0x3a,0x02,0x4d,0xdd,0x96,0x00,0xb9,0x30,0x0a,0x3a,0x03, - 0x4d,0xdd,0x96,0x01,0xb9,0xda,0x63,0x17,0x05,0x3a,0xac,0x4d,0xa7,0x20,0x13,0x3a, - 0x00,0x4d,0xdd,0x96,0x00,0xb9,0x30,0x0a,0x3a,0x01,0x4d,0xdd,0x96,0x01,0xb9,0xda, - 0x63,0x17,0x05,0xc3,0x63,0x17,0x21,0x9d,0x4d,0x3e,0xff,0xbe,0xca,0x11,0x18,0x35, - 0xc9,0x3a,0xa6,0x4d,0xa7,0xca,0x2f,0x18,0x2a,0x4c,0x4d,0x29,0x22,0x4c,0x4d,0x2a, - 0x4a,0x4d,0xed,0x6a,0x22,0x4a,0x4d,0xd0,0x21,0x4c,0x4d,0x34,0xc3,0x43,0x18,0x2a, - 0x48,0x4d,0x29,0x22,0x48,0x4d,0x2a,0x46,0x4d,0xed,0x6a,0x22,0x46,0x4d,0xd0,0x21, - 0x48,0x4d,0x34,0x3a,0x0e,0x4e,0x32,0x9e,0x4d,0x3a,0x72,0x4e,0x4f,0x3a,0x09,0x4e, - 0xa1,0x4f,0x21,0x3a,0x4d,0x7e,0x06,0x21,0x90,0x38,0x09,0x7e,0x06,0x3b,0x90,0x30, - 0x03,0xc3,0xab,0x18,0x3e,0x01,0x32,0xbf,0x4d,0x3a,0x00,0x4e,0xfe,0x01,0xca,0x19, - 0x1a,0x3a,0x04,0x4e,0xfe,0x10,0xd2,0x19,0x1a,0x79,0xa7,0x28,0x06,0x3a,0x40,0x50, - 0xc3,0x86,0x18,0x3a,0x00,0x50,0xcb,0x4f,0xc2,0x99,0x18,0x2a,0x03,0x33,0x3e,0x02, - 0x32,0x30,0x4d,0x22,0x1c,0x4d,0xc3,0x50,0x19,0xcb,0x57,0xc2,0x50,0x19,0x2a,0xff, - 0x32,0xaf,0x32,0x30,0x4d,0x22,0x1c,0x4d,0xc3,0x50,0x19,0x3a,0x00,0x4e,0xfe,0x01, - 0xca,0x19,0x1a,0x3a,0x04,0x4e,0xfe,0x10,0xd2,0x19,0x1a,0x79,0xa7,0x28,0x06,0x3a, - 0x40,0x50,0xc3,0xc8,0x18,0x3a,0x00,0x50,0xcb,0x4f,0xca,0xc9,0x1a,0xcb,0x57,0xca, - 0xd9,0x1a,0xcb,0x47,0xca,0xe8,0x1a,0xcb,0x5f,0xca,0xf8,0x1a,0x2a,0x1c,0x4d,0x22, - 0x26,0x4d,0x06,0x01,0xdd,0x21,0x26,0x4d,0xfd,0x21,0x39,0x4d,0xcd,0x0f,0x20,0xe6, - 0xc0,0xd6,0xc0,0x20,0x4b,0x05,0xc2,0x16,0x19,0x3a,0x30,0x4d,0x0f,0xda,0x0b,0x19, - 0x3a,0x09,0x4d,0xe6,0x07,0xfe,0x04,0xc8,0xc3,0x40,0x19,0x3a,0x08,0x4d,0xe6,0x07, - 0xfe,0x04,0xc8,0xc3,0x40,0x19,0xdd,0x21,0x1c,0x4d,0xcd,0x0f,0x20,0xe6,0xc0,0xd6, - 0xc0,0x20,0x2d,0x3a,0x30,0x4d,0x0f,0xda,0x35,0x19,0x3a,0x09,0x4d,0xe6,0x07,0xfe, - 0x04,0xc8,0xc3,0x50,0x19,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x04,0xc8,0xc3,0x50,0x19, - 0x2a,0x26,0x4d,0x22,0x1c,0x4d,0x05,0xca,0x50,0x19,0x3a,0x3c,0x4d,0x32,0x30,0x4d, - 0xdd,0x21,0x1c,0x4d,0xfd,0x21,0x08,0x4d,0xcd,0x00,0x20,0x3a,0x30,0x4d,0x0f,0xda, - 0x75,0x19,0x7d,0xe6,0x07,0xfe,0x04,0xca,0x85,0x19,0xda,0x71,0x19,0x2d,0xc3,0x85, - 0x19,0x2c,0xc3,0x85,0x19,0x7c,0xe6,0x07,0xfe,0x04,0xca,0x85,0x19,0xda,0x84,0x19, - 0x25,0xc3,0x85,0x19,0x24,0x22,0x08,0x4d,0xcd,0x18,0x20,0x22,0x39,0x4d,0xdd,0x21, - 0xbf,0x4d,0xdd,0x7e,0x00,0xdd,0x36,0x00,0x00,0xa7,0xc0,0x3a,0xd2,0x4d,0xa7,0x28, - 0x2c,0x3a,0xd4,0x4d,0xa7,0x28,0x26,0x2a,0x08,0x4d,0x11,0x94,0x80,0xa7,0xed,0x52, - 0x20,0x1b,0x06,0x19,0x4f,0xcd,0x42,0x00,0x0e,0x15,0x81,0x4f,0x06,0x1c,0xcd,0x42, - 0x00,0xcd,0x04,0x10,0xf7,0x54,0x05,0x00,0x21,0xbc,0x4e,0xcb,0xd6,0x3e,0xff,0x32, - 0x9d,0x4d,0x2a,0x39,0x4d,0xcd,0x65,0x00,0x7e,0xfe,0x10,0x28,0x03,0xfe,0x14,0xc0, - 0xdd,0x21,0x0e,0x4e,0xdd,0x34,0x00,0xe6,0x0f,0xcb,0x3f,0x06,0x40,0x70,0x06,0x19, - 0x4f,0xcb,0x39,0xcd,0x42,0x00,0x3c,0xfe,0x01,0xca,0xfd,0x19,0x87,0x32,0x9d,0x4d, - 0xcd,0x08,0x1b,0xcd,0x6a,0x1a,0x21,0xbc,0x4e,0x3a,0x0e,0x4e,0x0f,0x38,0x05,0xcb, - 0xc6,0xcb,0x8e,0xc9,0xcb,0x86,0xcb,0xce,0xc9,0x21,0x1c,0x4d,0x7e,0xa7,0xca,0x2e, - 0x1a,0x3a,0x08,0x4d,0xe6,0x07,0xfe,0x04,0xca,0x38,0x1a,0xc3,0x5c,0x1a,0x3a,0x09, - 0x4d,0xe6,0x07,0xfe,0x04,0xc2,0x5c,0x1a,0x3e,0x05,0xcd,0xd0,0x1e,0x38,0x03,0xef, - 0x17,0x00,0xdd,0x21,0x26,0x4d,0xfd,0x21,0x12,0x4d,0xcd,0x00,0x20,0x22,0x12,0x4d, - 0x2a,0x26,0x4d,0x22,0x1c,0x4d,0x3a,0x3c,0x4d,0x32,0x30,0x4d,0xdd,0x21,0x1c,0x4d, - 0xfd,0x21,0x08,0x4d,0xcd,0x00,0x20,0xc3,0x85,0x19,0x3a,0x9d,0x4d,0xfe,0x06,0xc0, - 0x2a,0xbd,0x4d,0x22,0xcb,0x4d,0x3e,0x01,0x32,0xa6,0x4d,0x32,0xa7,0x4d,0x32,0xa8, - 0x4d,0x32,0xa9,0x4d,0x32,0xaa,0x4d,0x32,0xb1,0x4d,0x32,0xb2,0x4d,0x32,0xb3,0x4d, - 0x32,0xb4,0x4d,0x32,0xb5,0x4d,0xaf,0x32,0xc8,0x4d,0x32,0xd0,0x4d,0xdd,0x21,0x00, - 0x4c,0xdd,0x36,0x02,0x1c,0xdd,0x36,0x04,0x1c,0xdd,0x36,0x06,0x1c,0xdd,0x36,0x08, - 0x1c,0xdd,0x36,0x03,0x11,0xdd,0x36,0x05,0x11,0xdd,0x36,0x07,0x11,0xdd,0x36,0x09, - 0x11,0x21,0xac,0x4e,0xcb,0xee,0xcb,0xbe,0xc9,0x2a,0x03,0x33,0x3e,0x02,0x32,0x3c, - 0x4d,0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x2a,0xff,0x32,0xaf,0x32,0x3c,0x4d, - 0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x2a,0x05,0x33,0x3e,0x03,0x32,0x3c,0x4d, - 0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x2a,0x01,0x33,0x3e,0x01,0x32,0x3c,0x4d, - 0x22,0x26,0x4d,0x06,0x00,0xc3,0xe4,0x18,0x3a,0x12,0x4e,0xa7,0xca,0x14,0x1b,0x21, - 0x9f,0x4d,0x34,0xc9,0x3a,0xa3,0x4d,0xa7,0xc0,0x3a,0xa2,0x4d,0xa7,0xca,0x25,0x1b, - 0x21,0x11,0x4e,0x34,0xc9,0x3a,0xa1,0x4d,0xa7,0xca,0x31,0x1b,0x21,0x10,0x4e,0x34, - 0xc9,0x21,0x0f,0x4e,0x34,0xc9,0x3a,0xa0,0x4d,0xa7,0xc8,0x3a,0xac,0x4d,0xa7,0xc0, - 0xcd,0xd7,0x20,0x2a,0x31,0x4d,0x01,0x99,0x4d,0xcd,0x5a,0x20,0x3a,0x99,0x4d,0xa7, - 0xca,0x6a,0x1b,0x2a,0x60,0x4d,0x29,0x22,0x60,0x4d,0x2a,0x5e,0x4d,0xed,0x6a,0x22, - 0x5e,0x4d,0xd0,0x21,0x60,0x4d,0x34,0xc3,0xd8,0x1b,0x3a,0xa7,0x4d,0xa7,0xca,0x88, - 0x1b,0x2a,0x5c,0x4d,0x29,0x22,0x5c,0x4d,0x2a,0x5a,0x4d,0xed,0x6a,0x22,0x5a,0x4d, - 0xd0,0x21,0x5c,0x4d,0x34,0xc3,0xd8,0x1b,0x3a,0xb7,0x4d,0xa7,0xca,0xa6,0x1b,0x2a, - 0x50,0x4d,0x29,0x22,0x50,0x4d,0x2a,0x4e,0x4d,0xed,0x6a,0x22,0x4e,0x4d,0xd0,0x21, - 0x50,0x4d,0x34,0xc3,0xd8,0x1b,0x3a,0xb6,0x4d,0xa7,0xca,0xc4,0x1b,0x2a,0x54,0x4d, - 0x29,0x22,0x54,0x4d,0x2a,0x52,0x4d,0xed,0x6a,0x22,0x52,0x4d,0xd0,0x21,0x54,0x4d, - 0x34,0xc3,0xd8,0x1b,0x2a,0x58,0x4d,0x29,0x22,0x58,0x4d,0x2a,0x56,0x4d,0xed,0x6a, - 0x22,0x56,0x4d,0xd0,0x21,0x58,0x4d,0x34,0x21,0x14,0x4d,0x7e,0xa7,0xca,0xed,0x1b, - 0x3a,0x00,0x4d,0xe6,0x07,0xfe,0x04,0xca,0xf7,0x1b,0xc3,0x36,0x1c,0x3a,0x01,0x4d, - 0xe6,0x07,0xfe,0x04,0xc2,0x36,0x1c,0x3e,0x01,0xcd,0xd0,0x1e,0x38,0x1b,0x3a,0xa7, - 0x4d,0xa7,0xca,0x0b,0x1c,0xef,0x0c,0x00,0xc3,0x19,0x1c,0x2a,0x0a,0x4d,0xcd,0x52, - 0x20,0x7e,0xfe,0x1a,0x28,0x03,0xef,0x08,0x00,0xcd,0xfe,0x1e,0xdd,0x21,0x1e,0x4d, - 0xfd,0x21,0x0a,0x4d,0xcd,0x00,0x20,0x22,0x0a,0x4d,0x2a,0x1e,0x4d,0x22,0x14,0x4d, - 0x3a,0x2c,0x4d,0x32,0x28,0x4d,0xdd,0x21,0x14,0x4d,0xfd,0x21,0x00,0x4d,0xcd,0x00, - 0x20,0x22,0x00,0x4d,0xcd,0x18,0x20,0x22,0x31,0x4d,0xc9,0x3a,0xa1,0x4d,0xfe,0x01, - 0xc0,0x3a,0xad,0x4d,0xa7,0xc0,0x2a,0x33,0x4d,0x01,0x9a,0x4d,0xcd,0x5a,0x20,0x3a, - 0x9a,0x4d,0xa7,0xca,0x7d,0x1c,0x2a,0x6c,0x4d,0x29,0x22,0x6c,0x4d,0x2a,0x6a,0x4d, - 0xed,0x6a,0x22,0x6a,0x4d,0xd0,0x21,0x6c,0x4d,0x34,0xc3,0xaf,0x1c,0x3a,0xa8,0x4d, - 0xa7,0xca,0x9b,0x1c,0x2a,0x68,0x4d,0x29,0x22,0x68,0x4d,0x2a,0x66,0x4d,0xed,0x6a, - 0x22,0x66,0x4d,0xd0,0x21,0x68,0x4d,0x34,0xc3,0xaf,0x1c,0x2a,0x64,0x4d,0x29,0x22, - 0x64,0x4d,0x2a,0x62,0x4d,0xed,0x6a,0x22,0x62,0x4d,0xd0,0x21,0x64,0x4d,0x34,0x21, - 0x16,0x4d,0x7e,0xa7,0xca,0xc4,0x1c,0x3a,0x02,0x4d,0xe6,0x07,0xfe,0x04,0xca,0xce, - 0x1c,0xc3,0x0d,0x1d,0x3a,0x03,0x4d,0xe6,0x07,0xfe,0x04,0xc2,0x0d,0x1d,0x3e,0x02, - 0xcd,0xd0,0x1e,0x38,0x1b,0x3a,0xa8,0x4d,0xa7,0xca,0xe2,0x1c,0xef,0x0d,0x00,0xc3, - 0xf0,0x1c,0x2a,0x0c,0x4d,0xcd,0x52,0x20,0x7e,0xfe,0x1a,0x28,0x03,0xef,0x09,0x00, - 0xcd,0x25,0x1f,0xdd,0x21,0x20,0x4d,0xfd,0x21,0x0c,0x4d,0xcd,0x00,0x20,0x22,0x0c, - 0x4d,0x2a,0x20,0x4d,0x22,0x16,0x4d,0x3a,0x2d,0x4d,0x32,0x29,0x4d,0xdd,0x21,0x16, - 0x4d,0xfd,0x21,0x02,0x4d,0xcd,0x00,0x20,0x22,0x02,0x4d,0xcd,0x18,0x20,0x22,0x33, - 0x4d,0xc9,0x3a,0xa2,0x4d,0xfe,0x01,0xc0,0x3a,0xae,0x4d,0xa7,0xc0,0x2a,0x35,0x4d, - 0x01,0x9b,0x4d,0xcd,0x5a,0x20,0x3a,0x9b,0x4d,0xa7,0xca,0x54,0x1d,0x2a,0x78,0x4d, - 0x29,0x22,0x78,0x4d,0x2a,0x76,0x4d,0xed,0x6a,0x22,0x76,0x4d,0xd0,0x21,0x78,0x4d, - 0x34,0xc3,0x86,0x1d,0x3a,0xa9,0x4d,0xa7,0xca,0x72,0x1d,0x2a,0x74,0x4d,0x29,0x22, - 0x74,0x4d,0x2a,0x72,0x4d,0xed,0x6a,0x22,0x72,0x4d,0xd0,0x21,0x74,0x4d,0x34,0xc3, - 0x86,0x1d,0x2a,0x70,0x4d,0x29,0x22,0x70,0x4d,0x2a,0x6e,0x4d,0xed,0x6a,0x22,0x6e, - 0x4d,0xd0,0x21,0x70,0x4d,0x34,0x21,0x18,0x4d,0x7e,0xa7,0xca,0x9b,0x1d,0x3a,0x04, - 0x4d,0xe6,0x07,0xfe,0x04,0xca,0xa5,0x1d,0xc3,0xe4,0x1d,0x3a,0x05,0x4d,0xe6,0x07, - 0xfe,0x04,0xc2,0xe4,0x1d,0x3e,0x03,0xcd,0xd0,0x1e,0x38,0x1b,0x3a,0xa9,0x4d,0xa7, - 0xca,0xb9,0x1d,0xef,0x0e,0x00,0xc3,0xc7,0x1d,0x2a,0x0e,0x4d,0xcd,0x52,0x20,0x7e, - 0xfe,0x1a,0x28,0x03,0xef,0x0a,0x00,0xcd,0x4c,0x1f,0xdd,0x21,0x22,0x4d,0xfd,0x21, - 0x0e,0x4d,0xcd,0x00,0x20,0x22,0x0e,0x4d,0x2a,0x22,0x4d,0x22,0x18,0x4d,0x3a,0x2e, - 0x4d,0x32,0x2a,0x4d,0xdd,0x21,0x18,0x4d,0xfd,0x21,0x04,0x4d,0xcd,0x00,0x20,0x22, - 0x04,0x4d,0xcd,0x18,0x20,0x22,0x35,0x4d,0xc9,0x3a,0xa3,0x4d,0xfe,0x01,0xc0,0x3a, - 0xaf,0x4d,0xa7,0xc0,0x2a,0x37,0x4d,0x01,0x9c,0x4d,0xcd,0x5a,0x20,0x3a,0x9c,0x4d, - 0xa7,0xca,0x2b,0x1e,0x2a,0x84,0x4d,0x29,0x22,0x84,0x4d,0x2a,0x82,0x4d,0xed,0x6a, - 0x22,0x82,0x4d,0xd0,0x21,0x84,0x4d,0x34,0xc3,0x5d,0x1e,0x3a,0xaa,0x4d,0xa7,0xca, - 0x49,0x1e,0x2a,0x80,0x4d,0x29,0x22,0x80,0x4d,0x2a,0x7e,0x4d,0xed,0x6a,0x22,0x7e, - 0x4d,0xd0,0x21,0x80,0x4d,0x34,0xc3,0x5d,0x1e,0x2a,0x7c,0x4d,0x29,0x22,0x7c,0x4d, - 0x2a,0x7a,0x4d,0xed,0x6a,0x22,0x7a,0x4d,0xd0,0x21,0x7c,0x4d,0x34,0x21,0x1a,0x4d, - 0x7e,0xa7,0xca,0x72,0x1e,0x3a,0x06,0x4d,0xe6,0x07,0xfe,0x04,0xca,0x7c,0x1e,0xc3, - 0xbb,0x1e,0x3a,0x07,0x4d,0xe6,0x07,0xfe,0x04,0xc2,0xbb,0x1e,0x3e,0x04,0xcd,0xd0, - 0x1e,0x38,0x1b,0x3a,0xaa,0x4d,0xa7,0xca,0x90,0x1e,0xef,0x0f,0x00,0xc3,0x9e,0x1e, - 0x2a,0x10,0x4d,0xcd,0x52,0x20,0x7e,0xfe,0x1a,0x28,0x03,0xef,0x0b,0x00,0xcd,0x73, - 0x1f,0xdd,0x21,0x24,0x4d,0xfd,0x21,0x10,0x4d,0xcd,0x00,0x20,0x22,0x10,0x4d,0x2a, - 0x24,0x4d,0x22,0x1a,0x4d,0x3a,0x2f,0x4d,0x32,0x2b,0x4d,0xdd,0x21,0x1a,0x4d,0xfd, - 0x21,0x06,0x4d,0xcd,0x00,0x20,0x22,0x06,0x4d,0xcd,0x18,0x20,0x22,0x37,0x4d,0xc9, - 0x87,0x4f,0x06,0x00,0x21,0x09,0x4d,0x09,0x7e,0xfe,0x1d,0xc2,0xe3,0x1e,0x36,0x3d, - 0xc3,0xfc,0x1e,0xfe,0x3e,0xc2,0xed,0x1e,0x36,0x1e,0xc3,0xfc,0x1e,0x06,0x21,0x90, - 0xda,0xfc,0x1e,0x7e,0x06,0x3b,0x90,0xd2,0xfc,0x1e,0xa7,0xc9,0x37,0xc9,0x3a,0xb1, - 0x4d,0xa7,0xc8,0xaf,0x32,0xb1,0x4d,0x21,0xff,0x32,0x3a,0x28,0x4d,0xee,0x02,0x32, - 0x2c,0x4d,0x47,0xdf,0x22,0x1e,0x4d,0x3a,0x02,0x4e,0xfe,0x22,0xc0,0x22,0x14,0x4d, - 0x78,0x32,0x28,0x4d,0xc9,0x3a,0xb2,0x4d,0xa7,0xc8,0xaf,0x32,0xb2,0x4d,0x21,0xff, - 0x32,0x3a,0x29,0x4d,0xee,0x02,0x32,0x2d,0x4d,0x47,0xdf,0x22,0x20,0x4d,0x3a,0x02, - 0x4e,0xfe,0x22,0xc0,0x22,0x16,0x4d,0x78,0x32,0x29,0x4d,0xc9,0x3a,0xb3,0x4d,0xa7, - 0xc8,0xaf,0x32,0xb3,0x4d,0x21,0xff,0x32,0x3a,0x2a,0x4d,0xee,0x02,0x32,0x2e,0x4d, - 0x47,0xdf,0x22,0x22,0x4d,0x3a,0x02,0x4e,0xfe,0x22,0xc0,0x22,0x18,0x4d,0x78,0x32, - 0x2a,0x4d,0xc9,0x3a,0xb4,0x4d,0xa7,0xc8,0xaf,0x32,0xb4,0x4d,0x21,0xff,0x32,0x3a, - 0x2b,0x4d,0xee,0x02,0x32,0x2f,0x4d,0x47,0xdf,0x22,0x24,0x4d,0x3a,0x02,0x4e,0xfe, - 0x22,0xc0,0x22,0x1a,0x4d,0x78,0x32,0x2b,0x4d,0xc9,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5d,0xe1, - 0xfd,0x7e,0x00,0xdd,0x86,0x00,0x6f,0xfd,0x7e,0x01,0xdd,0x86,0x01,0x67,0xc9,0xcd, - 0x00,0x20,0xcd,0x65,0x00,0x7e,0xa7,0xc9,0x7d,0xcb,0x3f,0xcb,0x3f,0xcb,0x3f,0xc6, - 0x20,0x6f,0x7c,0xcb,0x3f,0xcb,0x3f,0xcb,0x3f,0xc6,0x1e,0x67,0xc9,0xf5,0xc5,0x7d, - 0xd6,0x20,0x6f,0x7c,0xd6,0x20,0x67,0x06,0x00,0xcb,0x24,0xcb,0x24,0xcb,0x24,0xcb, - 0x24,0xcb,0x10,0xcb,0x24,0xcb,0x10,0x4c,0x26,0x00,0x09,0x01,0x40,0x40,0x09,0xc1, - 0xf1,0xc9,0xcd,0x65,0x00,0x11,0x00,0x04,0x19,0xc9,0xcd,0x52,0x20,0x7e,0xfe,0x1b, - 0x20,0x04,0x3e,0x01,0x02,0xc9,0xaf,0x02,0xc9,0x3a,0xa1,0x4d,0xa7,0xc0,0x3a,0x12, - 0x4e,0xa7,0xca,0x7e,0x20,0x3a,0x9f,0x4d,0xfe,0x07,0xc0,0xc3,0x86,0x20,0x21,0xb8, - 0x4d,0x3a,0x0f,0x4e,0xbe,0xd8,0x3e,0x02,0x32,0xa1,0x4d,0xc9,0x3a,0xa2,0x4d,0xa7, - 0xc0,0x3a,0x12,0x4e,0xa7,0xca,0xa1,0x20,0x3a,0x9f,0x4d,0xfe,0x11,0xc0,0xc3,0xa9, - 0x20,0x21,0xb9,0x4d,0x3a,0x10,0x4e,0xbe,0xd8,0x3e,0x03,0x32,0xa2,0x4d,0xc9,0x3a, - 0xa3,0x4d,0xa7,0xc0,0x3a,0x12,0x4e,0xa7,0xca,0xc9,0x20,0x3a,0x9f,0x4d,0xfe,0x20, - 0xc0,0xaf,0x32,0x12,0x4e,0x32,0x9f,0x4d,0xc9,0x21,0xba,0x4d,0x3a,0x11,0x4e,0xbe, - 0xd8,0x3e,0x03,0x32,0xa3,0x4d,0xc9,0x3a,0xa3,0x4d,0xa7,0xc8,0x21,0x0e,0x4e,0x3a, - 0xb6,0x4d,0xa7,0xc2,0xf4,0x20,0x3e,0xf4,0x96,0x47,0x3a,0xbb,0x4d,0x90,0xd8,0x3e, - 0x01,0x32,0xb6,0x4d,0x3a,0xb7,0x4d,0xa7,0xc0,0x3e,0xf4,0x96,0x47,0x3a,0xbc,0x4d, - 0x90,0xd8,0x3e,0x01,0x32,0xb7,0x4d,0xc9,0x3a,0x06,0x4e,0xe7,0x1a,0x21,0x40,0x21, - 0x4b,0x21,0x0c,0x00,0x70,0x21,0x7b,0x21,0x86,0x21,0x3a,0x3a,0x4d,0xd6,0x21,0x20, - 0x0f,0x3c,0x32,0xa0,0x4d,0x32,0xb7,0x4d,0xcd,0x06,0x05,0x21,0x06,0x4e,0x34,0xc9, - 0xcd,0x06,0x18,0xcd,0x06,0x18,0xcd,0x36,0x1b,0xcd,0x36,0x1b,0xcd,0x23,0x0e,0xc9, - 0x3a,0x3a,0x4d,0xd6,0x1e,0xc2,0x30,0x21,0xc3,0x2b,0x21,0x3a,0x32,0x4d,0xd6,0x1e, - 0xc2,0x36,0x21,0xcd,0x70,0x1a,0xaf,0x32,0xac,0x4e,0x32,0xbc,0x4e,0xcd,0xa5,0x05, - 0x22,0x1c,0x4d,0x3a,0x3c,0x4d,0x32,0x30,0x4d,0xf7,0x45,0x07,0x00,0xc3,0x2b,0x21, - 0x3a,0x32,0x4d,0xd6,0x2f,0xc2,0x36,0x21,0xc3,0x2b,0x21,0x3a,0x32,0x4d,0xd6,0x3d, - 0xc2,0x30,0x21,0xc3,0x2b,0x21,0xcd,0x06,0x18,0xcd,0x06,0x18,0x3a,0x3a,0x4d,0xd6, - 0x3d,0xc0,0x32,0x06,0x4e,0xf7,0x45,0x00,0x00,0x21,0x04,0x4e,0x34,0xc9,0x3a,0x07, - 0x4e,0xfd,0x21,0xd2,0x41,0xe7,0xc2,0x21,0x0c,0x00,0xe1,0x21,0xf5,0x21,0x0c,0x22, - 0x1e,0x22,0x44,0x22,0x5d,0x22,0x0c,0x00,0x6a,0x22,0x0c,0x00,0x86,0x22,0x0c,0x00, - 0x8d,0x22,0x3e,0x01,0x32,0xd2,0x45,0x32,0xd3,0x45,0x32,0xf2,0x45,0x32,0xf3,0x45, - 0xcd,0x06,0x05,0xfd,0x36,0x00,0x60,0xfd,0x36,0x01,0x61,0xf7,0x43,0x08,0x00,0x18, - 0x0f,0x3a,0x3a,0x4d,0xd6,0x2c,0xc2,0x30,0x21,0x3c,0x32,0xa0,0x4d,0x32,0xb7,0x4d, - 0x21,0x07,0x4e,0x34,0xc9,0x3a,0x01,0x4d,0xfe,0x77,0x28,0x05,0xfe,0x78,0xc2,0x30, - 0x21,0x21,0x84,0x20,0x22,0x4e,0x4d,0x22,0x50,0x4d,0x18,0xe4,0x3a,0x01,0x4d,0xd6, - 0x78,0xc2,0x37,0x22,0xfd,0x36,0x00,0x62,0xfd,0x36,0x01,0x63,0x18,0xd2,0x3a,0x01, - 0x4d,0xd6,0x7b,0x20,0x12,0xfd,0x36,0x00,0x64,0xfd,0x36,0x01,0x65,0xfd,0x36,0x20, - 0x66,0xfd,0x36,0x21,0x67,0x18,0xb9,0xcd,0x06,0x18,0xcd,0x06,0x18,0xcd,0x36,0x1b, - 0xcd,0x23,0x0e,0xc9,0x3a,0x01,0x4d,0xd6,0x7e,0x20,0xec,0xfd,0x36,0x00,0x68,0xfd, - 0x36,0x01,0x69,0xfd,0x36,0x20,0x6a,0xfd,0x36,0x21,0x6b,0x18,0x93,0x3a,0x01,0x4d, - 0xd6,0x80,0x20,0xd3,0xf7,0x4f,0x08,0x00,0x18,0x86,0x21,0x01,0x4d,0x34,0x34,0xfd, - 0x36,0x00,0x6c,0xfd,0x36,0x01,0x6d,0xfd,0x36,0x20,0x40,0xfd,0x36,0x21,0x40,0xf7, - 0x4a,0x08,0x00,0xc3,0xf0,0x21,0xf7,0x54,0x08,0x00,0xc3,0xf0,0x21,0xaf,0x32,0x07, - 0x4e,0x21,0x04,0x4e,0x34,0x34,0xc9,0x3a,0x08,0x4e,0xe7,0xa7,0x22,0xbe,0x22,0x0c, - 0x00,0xdd,0x22,0xf5,0x22,0xfe,0x22,0x3a,0x3a,0x4d,0xd6,0x25,0xc2,0x30,0x21,0x3c, - 0x32,0xa0,0x4d,0x32,0xb7,0x4d,0xcd,0x06,0x05,0x21,0x08,0x4e,0x34,0xc9,0x3a,0x01, - 0x4d,0xfe,0xff,0x28,0x05,0xfe,0xfe,0xc2,0x30,0x21,0x3c,0x3c,0x32,0x01,0x4d,0x3e, - 0x01,0x32,0xb1,0x4d,0xcd,0xfe,0x1e,0xf7,0x4a,0x09,0x00,0x18,0xdc,0x3a,0x32,0x4d, - 0xd6,0x2d,0x28,0xd5,0x3a,0x00,0x4d,0x32,0xd2,0x4d,0x3a,0x01,0x4d,0xd6,0x08,0x32, - 0xd3,0x4d,0xc3,0x30,0x21,0x3a,0x32,0x4d,0xd6,0x1e,0x28,0xbd,0x18,0xe6,0xaf,0x32, - 0x08,0x4e,0xf7,0x45,0x00,0x00,0x21,0x04,0x4e,0x34,0xc9,0x21,0x00,0x50,0x06,0x08, - 0xaf,0x77,0x2c,0x10,0xfc,0x21,0x00,0x40,0x06,0x04,0x32,0xc0,0x50,0x32,0x07,0x50, - 0x3e,0x40,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf1,0x06,0x04,0x32,0xc0,0x50,0xaf,0x32, - 0x07,0x50,0x3e,0x0f,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf0,0xed,0x5e,0x3e,0xfa,0xd3, - 0x00,0xaf,0x32,0x07,0x50,0x3c,0x32,0x00,0x50,0xfb,0x76,0x32,0xc0,0x50,0x31,0xc0, - 0x4f,0xaf,0x21,0x00,0x50,0x01,0x08,0x08,0xcf,0x21,0x00,0x4c,0x06,0xbe,0xcf,0xcf, - 0xcf,0xcf,0x21,0x40,0x50,0x06,0x40,0xcf,0x32,0xc0,0x50,0xcd,0x0d,0x24,0x32,0xc0, - 0x50,0x06,0x00,0xcd,0xed,0x23,0x32,0xc0,0x50,0x21,0xc0,0x4c,0x22,0x80,0x4c,0x22, - 0x82,0x4c,0x3e,0xff,0x06,0x40,0xcf,0x3e,0x01,0x32,0x00,0x50,0xfb,0x2a,0x82,0x4c, - 0x7e,0xa7,0xfa,0x8d,0x23,0x36,0xff,0x2c,0x46,0x36,0xff,0x2c,0x20,0x02,0x2e,0xc0, - 0x22,0x82,0x4c,0x21,0x8d,0x23,0xe5,0xe7,0xed,0x23,0xd7,0x24,0x19,0x24,0x48,0x24, - 0x3d,0x25,0x8b,0x26,0x0d,0x24,0x98,0x26,0x30,0x27,0x6c,0x27,0xa9,0x27,0xf1,0x27, - 0x3b,0x28,0x65,0x28,0x8f,0x28,0xb9,0x28,0x0d,0x00,0xa2,0x26,0xc9,0x24,0x35,0x2a, - 0xd0,0x26,0x87,0x24,0xe8,0x23,0xe3,0x28,0xe0,0x2a,0x5a,0x2a,0x6a,0x2b,0xea,0x2b, - 0x5e,0x2c,0xa1,0x2b,0x75,0x26,0xb2,0x26,0x21,0x04,0x4e,0x34,0xc9,0x78,0xe7,0xf3, - 0x23,0x00,0x24,0x3e,0x40,0x01,0x04,0x00,0x21,0x00,0x40,0xcf,0x0d,0x20,0xfc,0xc9, - 0x3e,0x40,0x21,0x40,0x40,0x01,0x04,0x80,0xcf,0x0d,0x20,0xfc,0xc9,0xaf,0x01,0x04, - 0x00,0x21,0x00,0x44,0xcf,0x0d,0x20,0xfc,0xc9,0x21,0x00,0x40,0x01,0x35,0x34,0x0a, - 0xa7,0xc8,0xfa,0x2c,0x24,0x5f,0x16,0x00,0x19,0x2b,0x03,0x0a,0x23,0x77,0xf5,0xe5, - 0x11,0xe0,0x83,0x7d,0xe6,0x1f,0x87,0x26,0x00,0x6f,0x19,0xd1,0xa7,0xed,0x52,0xf1, - 0xee,0x01,0x77,0xeb,0x03,0xc3,0x1f,0x24,0x21,0x00,0x40,0xdd,0x21,0x16,0x4e,0xfd, - 0x21,0xb5,0x35,0x16,0x00,0x06,0x1e,0x0e,0x08,0xdd,0x7e,0x00,0xfd,0x5e,0x00,0x19, - 0x07,0x30,0x02,0x36,0x10,0xfd,0x23,0x0d,0x20,0xf2,0xdd,0x23,0x05,0x20,0xe8,0x21, - 0x34,0x4e,0x11,0x64,0x40,0xed,0xa0,0x11,0x78,0x40,0xed,0xa0,0x11,0x84,0x43,0xed, - 0xa0,0x11,0x98,0x43,0xed,0xa0,0xc9,0x21,0x00,0x40,0xdd,0x21,0x16,0x4e,0xfd,0x21, - 0xb5,0x35,0x16,0x00,0x06,0x1e,0x0e,0x08,0xfd,0x5e,0x00,0x19,0x7e,0xfe,0x10,0x37, - 0x28,0x01,0x3f,0xdd,0xcb,0x00,0x16,0xfd,0x23,0x0d,0x20,0xec,0xdd,0x23,0x05,0x20, - 0xe5,0x21,0x64,0x40,0x11,0x34,0x4e,0xed,0xa0,0x21,0x78,0x40,0xed,0xa0,0x21,0x84, - 0x43,0xed,0xa0,0x21,0x98,0x43,0xed,0xa0,0xc9,0x21,0x16,0x4e,0x3e,0xff,0x06,0x1e, - 0xcf,0x3e,0x14,0x06,0x04,0xcf,0xc9,0x58,0x78,0xfe,0x02,0x3e,0x1f,0x28,0x02,0x3e, - 0x10,0x21,0x40,0x44,0x01,0x04,0x80,0xcf,0x0d,0x20,0xfc,0x3e,0x0f,0x06,0x40,0x21, - 0xc0,0x47,0xcf,0x7b,0xfe,0x01,0xc0,0x3e,0x1a,0x11,0x20,0x00,0x06,0x06,0xdd,0x21, - 0xa0,0x45,0xdd,0x77,0x0c,0xdd,0x77,0x18,0xdd,0x19,0x10,0xf6,0x3e,0x1b,0x06,0x05, - 0xdd,0x21,0x40,0x44,0xdd,0x77,0x0e,0xdd,0x77,0x0f,0xdd,0x77,0x10,0xdd,0x19,0x10, - 0xf3,0x06,0x05,0xdd,0x21,0x20,0x47,0xdd,0x77,0x0e,0xdd,0x77,0x0f,0xdd,0x77,0x10, - 0xdd,0x19,0x10,0xf3,0x3e,0x18,0x32,0xed,0x45,0x32,0x0d,0x46,0xc9,0xdd,0x21,0x00, - 0x4c,0xdd,0x36,0x02,0x20,0xdd,0x36,0x04,0x20,0xdd,0x36,0x06,0x20,0xdd,0x36,0x08, - 0x20,0xdd,0x36,0x0a,0x2c,0xdd,0x36,0x0c,0x3f,0xdd,0x36,0x03,0x01,0xdd,0x36,0x05, - 0x03,0xdd,0x36,0x07,0x05,0xdd,0x36,0x09,0x07,0xdd,0x36,0x0b,0x09,0xdd,0x36,0x0d, - 0x00,0x78,0xa7,0xc2,0x0f,0x26,0x21,0x64,0x80,0x22,0x00,0x4d,0x21,0x7c,0x80,0x22, - 0x02,0x4d,0x21,0x7c,0x90,0x22,0x04,0x4d,0x21,0x7c,0x70,0x22,0x06,0x4d,0x21,0xc4, - 0x80,0x22,0x08,0x4d,0x21,0x2c,0x2e,0x22,0x0a,0x4d,0x22,0x31,0x4d,0x21,0x2f,0x2e, - 0x22,0x0c,0x4d,0x22,0x33,0x4d,0x21,0x2f,0x30,0x22,0x0e,0x4d,0x22,0x35,0x4d,0x21, - 0x2f,0x2c,0x22,0x10,0x4d,0x22,0x37,0x4d,0x21,0x38,0x2e,0x22,0x12,0x4d,0x22,0x39, - 0x4d,0x21,0x00,0x01,0x22,0x14,0x4d,0x22,0x1e,0x4d,0x21,0x01,0x00,0x22,0x16,0x4d, - 0x22,0x20,0x4d,0x21,0xff,0x00,0x22,0x18,0x4d,0x22,0x22,0x4d,0x21,0xff,0x00,0x22, - 0x1a,0x4d,0x22,0x24,0x4d,0x21,0x00,0x01,0x22,0x1c,0x4d,0x22,0x26,0x4d,0x21,0x02, - 0x01,0x22,0x28,0x4d,0x22,0x2c,0x4d,0x21,0x03,0x03,0x22,0x2a,0x4d,0x22,0x2e,0x4d, - 0x3e,0x02,0x32,0x30,0x4d,0x32,0x3c,0x4d,0x21,0x00,0x00,0x22,0xd2,0x4d,0xc9,0x21, - 0x94,0x00,0x22,0x00,0x4d,0x22,0x02,0x4d,0x22,0x04,0x4d,0x22,0x06,0x4d,0x21,0x32, - 0x1e,0x22,0x0a,0x4d,0x22,0x0c,0x4d,0x22,0x0e,0x4d,0x22,0x10,0x4d,0x22,0x31,0x4d, - 0x22,0x33,0x4d,0x22,0x35,0x4d,0x22,0x37,0x4d,0x21,0x00,0x01,0x22,0x14,0x4d,0x22, - 0x16,0x4d,0x22,0x18,0x4d,0x22,0x1a,0x4d,0x22,0x1e,0x4d,0x22,0x20,0x4d,0x22,0x22, - 0x4d,0x22,0x24,0x4d,0x22,0x1c,0x4d,0x22,0x26,0x4d,0x21,0x28,0x4d,0x3e,0x02,0x06, - 0x09,0xcf,0x32,0x3c,0x4d,0x21,0x94,0x08,0x22,0x08,0x4d,0x21,0x32,0x1f,0x22,0x12, - 0x4d,0x22,0x39,0x4d,0xc9,0x21,0x00,0x00,0x22,0xd2,0x4d,0x22,0x08,0x4d,0x22,0x00, - 0x4d,0x22,0x02,0x4d,0x22,0x04,0x4d,0x22,0x06,0x4d,0xc9,0x3e,0x55,0x32,0x94,0x4d, - 0x05,0xc8,0x3e,0x01,0x32,0xa0,0x4d,0xc9,0x3e,0x01,0x32,0x00,0x4e,0xaf,0x32,0x01, - 0x4e,0xc9,0xaf,0x11,0x00,0x4d,0x21,0x00,0x4e,0x12,0x13,0xa7,0xed,0x52,0xc2,0xa6, - 0x26,0xc9,0xdd,0x21,0x36,0x41,0x3a,0x71,0x4e,0xe6,0x0f,0xc6,0x30,0xdd,0x77,0x00, - 0x3a,0x71,0x4e,0x0f,0x0f,0x0f,0x0f,0xe6,0x0f,0xc8,0xc6,0x30,0xdd,0x77,0x20,0xc9, - 0x3a,0x80,0x50,0x47,0xe6,0x03,0xc2,0xde,0x26,0x21,0x6e,0x4e,0x36,0xff,0x4f,0x1f, - 0xce,0x00,0x32,0x6b,0x4e,0xe6,0x02,0xa9,0x32,0x6d,0x4e,0x78,0x0f,0x0f,0xe6,0x03, - 0x3c,0xfe,0x04,0x20,0x01,0x3c,0x32,0x6f,0x4e,0x78,0x0f,0x0f,0x0f,0x0f,0xe6,0x03, - 0x21,0x28,0x27,0xd7,0x32,0x71,0x4e,0x78,0x07,0x2f,0xe6,0x01,0x32,0x75,0x4e,0x78, - 0x07,0x07,0x2f,0xe6,0x01,0x47,0x21,0x2c,0x27,0xdf,0x22,0x73,0x4e,0x3a,0x40,0x50, - 0x07,0x2f,0xe6,0x01,0x32,0x72,0x4e,0xc9,0x10,0x15,0x20,0xff,0x68,0x00,0x7d,0x00, - 0x3a,0xc1,0x4d,0xcb,0x47,0xc2,0x58,0x27,0x3a,0xb6,0x4d,0xa7,0x20,0x1a,0x3a,0x04, - 0x4e,0xfe,0x03,0x20,0x13,0x2a,0x0a,0x4d,0x3a,0x2c,0x4d,0x11,0x1d,0x22,0xcd,0x66, - 0x29,0x22,0x1e,0x4d,0x32,0x2c,0x4d,0xc9,0x2a,0x0a,0x4d,0xed,0x5b,0x39,0x4d,0x3a, - 0x2c,0x4d,0xcd,0x66,0x29,0x22,0x1e,0x4d,0x32,0x2c,0x4d,0xc9,0x3a,0xc1,0x4d,0xcb, - 0x47,0xc2,0x8e,0x27,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x13,0x2a,0x0c,0x4d,0x3a,0x2d, - 0x4d,0x11,0x1d,0x39,0xcd,0x66,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0xed,0x5b, - 0x39,0x4d,0x2a,0x1c,0x4d,0x29,0x29,0x19,0xeb,0x2a,0x0c,0x4d,0x3a,0x2d,0x4d,0xcd, - 0x66,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0x3a,0xc1,0x4d,0xcb,0x47,0xc2,0xcb, - 0x27,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x13,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0x11,0x40, - 0x20,0xcd,0x66,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d,0xc9,0xed,0x4b,0x0a,0x4d,0xed, - 0x5b,0x39,0x4d,0x2a,0x1c,0x4d,0x29,0x19,0x7d,0x87,0x91,0x6f,0x7c,0x87,0x90,0x67, - 0xeb,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0xcd,0x66,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d, - 0xc9,0x3a,0xc1,0x4d,0xcb,0x47,0xc2,0x13,0x28,0x3a,0x04,0x4e,0xfe,0x03,0x20,0x13, - 0x2a,0x10,0x4d,0x3a,0x2f,0x4d,0x11,0x40,0x3b,0xcd,0x66,0x29,0x22,0x24,0x4d,0x32, - 0x2f,0x4d,0xc9,0xdd,0x21,0x39,0x4d,0xfd,0x21,0x10,0x4d,0xcd,0xea,0x29,0x11,0x40, - 0x00,0xa7,0xed,0x52,0xda,0x00,0x28,0x2a,0x10,0x4d,0xed,0x5b,0x39,0x4d,0x3a,0x2f, - 0x4d,0xcd,0x66,0x29,0x22,0x24,0x4d,0x32,0x2f,0x4d,0xc9,0x3a,0xac,0x4d,0xa7,0xca, - 0x55,0x28,0x11,0x2c,0x2e,0x2a,0x0a,0x4d,0x3a,0x2c,0x4d,0xcd,0x66,0x29,0x22,0x1e, - 0x4d,0x32,0x2c,0x4d,0xc9,0x2a,0x0a,0x4d,0x3a,0x2c,0x4d,0xcd,0x1e,0x29,0x22,0x1e, - 0x4d,0x32,0x2c,0x4d,0xc9,0x3a,0xad,0x4d,0xa7,0xca,0x7f,0x28,0x11,0x2c,0x2e,0x2a, - 0x0c,0x4d,0x3a,0x2d,0x4d,0xcd,0x66,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0x2a, - 0x0c,0x4d,0x3a,0x2d,0x4d,0xcd,0x1e,0x29,0x22,0x20,0x4d,0x32,0x2d,0x4d,0xc9,0x3a, - 0xae,0x4d,0xa7,0xca,0xa9,0x28,0x11,0x2c,0x2e,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0xcd, - 0x66,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d,0xc9,0x2a,0x0e,0x4d,0x3a,0x2e,0x4d,0xcd, - 0x1e,0x29,0x22,0x22,0x4d,0x32,0x2e,0x4d,0xc9,0x3a,0xaf,0x4d,0xa7,0xca,0xd3,0x28, - 0x11,0x2c,0x2e,0x2a,0x10,0x4d,0x3a,0x2f,0x4d,0xcd,0x66,0x29,0x22,0x24,0x4d,0x32, - 0x2f,0x4d,0xc9,0x2a,0x10,0x4d,0x3a,0x2f,0x4d,0xcd,0x1e,0x29,0x22,0x24,0x4d,0x32, - 0x2f,0x4d,0xc9,0x3a,0xa7,0x4d,0xa7,0xca,0xfe,0x28,0x2a,0x12,0x4d,0xed,0x5b,0x0c, - 0x4d,0x3a,0x3c,0x4d,0xcd,0x66,0x29,0x22,0x26,0x4d,0x32,0x3c,0x4d,0xc9,0x2a,0x39, - 0x4d,0xed,0x4b,0x0c,0x4d,0x7d,0x87,0x91,0x6f,0x7c,0x87,0x90,0x67,0xeb,0x2a,0x12, - 0x4d,0x3a,0x3c,0x4d,0xcd,0x66,0x29,0x22,0x26,0x4d,0x32,0x3c,0x4d,0xc9,0x22,0x3e, - 0x4d,0xee,0x02,0x32,0x3d,0x4d,0xcd,0x23,0x2a,0xe6,0x03,0x21,0x3b,0x4d,0x77,0x87, - 0x5f,0x16,0x00,0xdd,0x21,0xff,0x32,0xdd,0x19,0xfd,0x21,0x3e,0x4d,0x3a,0x3d,0x4d, - 0xbe,0xca,0x57,0x29,0xcd,0x0f,0x20,0xe6,0xc0,0xd6,0xc0,0x28,0x0a,0xdd,0x6e,0x00, - 0xdd,0x66,0x01,0x3a,0x3b,0x4d,0xc9,0xdd,0x23,0xdd,0x23,0x21,0x3b,0x4d,0x7e,0x3c, - 0xe6,0x03,0x77,0xc3,0x3d,0x29,0x22,0x3e,0x4d,0xed,0x53,0x40,0x4d,0x32,0x3b,0x4d, - 0xee,0x02,0x32,0x3d,0x4d,0x21,0xff,0xff,0x22,0x44,0x4d,0xdd,0x21,0xff,0x32,0xfd, - 0x21,0x3e,0x4d,0x21,0xc7,0x4d,0x36,0x00,0x3a,0x3d,0x4d,0xbe,0xca,0xc6,0x29,0xcd, - 0x00,0x20,0x22,0x42,0x4d,0xcd,0x65,0x00,0x7e,0xe6,0xc0,0xd6,0xc0,0x28,0x27,0xdd, - 0xe5,0xfd,0xe5,0xdd,0x21,0x40,0x4d,0xfd,0x21,0x42,0x4d,0xcd,0xea,0x29,0xfd,0xe1, - 0xdd,0xe1,0xeb,0x2a,0x44,0x4d,0xa7,0xed,0x52,0xda,0xc6,0x29,0xed,0x53,0x44,0x4d, - 0x3a,0xc7,0x4d,0x32,0x3b,0x4d,0xdd,0x23,0xdd,0x23,0x21,0xc7,0x4d,0x34,0x3e,0x04, - 0xbe,0xc2,0x88,0x29,0x3a,0x3b,0x4d,0x87,0x5f,0x16,0x00,0xdd,0x21,0xff,0x32,0xdd, - 0x19,0xdd,0x6e,0x00,0xdd,0x66,0x01,0xcb,0x3f,0xc9,0xdd,0x7e,0x00,0xfd,0x46,0x00, - 0x90,0xd2,0xf9,0x29,0x78,0xdd,0x46,0x00,0x90,0xcd,0x12,0x2a,0xe5,0xdd,0x7e,0x01, - 0xfd,0x46,0x01,0x90,0xd2,0x0c,0x2a,0x78,0xdd,0x46,0x01,0x90,0xcd,0x12,0x2a,0xc1, - 0x09,0xc9,0x67,0x5f,0x2e,0x00,0x55,0x0e,0x08,0x29,0xd2,0x1e,0x2a,0x19,0x0d,0xc2, - 0x19,0x2a,0xc9,0x2a,0xc9,0x4d,0x54,0x5d,0x29,0x29,0x19,0x23,0x7c,0xe6,0x1f,0x67, - 0x7e,0x22,0xc9,0x4d,0xc9,0x11,0x40,0x40,0x21,0xc0,0x43,0xa7,0xed,0x52,0xc8,0x1a, - 0xfe,0x10,0xca,0x53,0x2a,0xfe,0x12,0xca,0x53,0x2a,0xfe,0x14,0xca,0x53,0x2a,0x13, - 0xc3,0x38,0x2a,0x3e,0x40,0x12,0x13,0xc3,0x38,0x2a,0x3a,0x00,0x4e,0xfe,0x01,0xc8, - 0x21,0x17,0x2b,0xdf,0xeb,0xcd,0x0b,0x2b,0x7b,0x86,0x27,0x77,0x23,0x7a,0x8e,0x27, - 0x77,0x5f,0x23,0x3e,0x00,0x8e,0x27,0x77,0x57,0xeb,0x29,0x29,0x29,0x29,0x3a,0x71, - 0x4e,0x3d,0xbc,0xdc,0x33,0x2b,0xcd,0xaf,0x2a,0x13,0x13,0x13,0x21,0x8a,0x4e,0x06, - 0x03,0x1a,0xbe,0xd8,0x20,0x05,0x1b,0x2b,0x10,0xf7,0xc9,0xcd,0x0b,0x2b,0x11,0x88, - 0x4e,0x01,0x03,0x00,0xed,0xb0,0x1b,0x01,0x04,0x03,0x21,0xf2,0x43,0x18,0x0f,0x3a, - 0x09,0x4e,0x01,0x04,0x03,0x21,0xfc,0x43,0xa7,0x28,0x03,0x21,0xe9,0x43,0x1a,0x0f, - 0x0f,0x0f,0x0f,0xcd,0xce,0x2a,0x1a,0xcd,0xce,0x2a,0x1b,0x10,0xf1,0xc9,0xe6,0x0f, - 0x28,0x04,0x0e,0x00,0x18,0x07,0x79,0xa7,0x28,0x03,0x3e,0x40,0x0d,0x77,0x2b,0xc9, - 0x06,0x00,0xcd,0x5e,0x2c,0xaf,0x21,0x80,0x4e,0x06,0x08,0xcf,0x01,0x04,0x03,0x11, - 0x82,0x4e,0x21,0xfc,0x43,0xcd,0xbe,0x2a,0x01,0x04,0x03,0x11,0x86,0x4e,0x21,0xe9, - 0x43,0x3a,0x70,0x4e,0xa7,0x20,0xb7,0x0e,0x06,0x18,0xb3,0x3a,0x09,0x4e,0x21,0x80, - 0x4e,0xa7,0xc8,0x21,0x84,0x4e,0xc9,0x10,0x00,0x50,0x00,0x00,0x02,0x00,0x04,0x00, - 0x08,0x00,0x16,0x00,0x01,0x00,0x03,0x00,0x05,0x00,0x07,0x00,0x10,0x00,0x20,0x00, - 0x30,0x00,0x50,0x13,0x6b,0x62,0x1b,0xcb,0x46,0xc0,0xcb,0xc6,0x21,0x9c,0x4e,0xcb, - 0xc6,0x21,0x14,0x4e,0x34,0x21,0x15,0x4e,0x34,0x46,0x21,0x1a,0x40,0x0e,0x05,0x78, - 0xa7,0x28,0x0e,0xfe,0x06,0x30,0x0a,0x3e,0x20,0xcd,0x8f,0x2b,0x2b,0x2b,0x0d,0x10, - 0xf6,0x0d,0xf8,0xcd,0x7e,0x2b,0x2b,0x2b,0x18,0xf7,0x3a,0x00,0x4e,0xfe,0x01,0xc8, - 0xcd,0xcd,0x2b,0x12,0x44,0x09,0x0a,0x02,0x21,0x15,0x4e,0x46,0x18,0xcc,0x3e,0x40, - 0xe5,0xd5,0x77,0x23,0x77,0x11,0x1f,0x00,0x19,0x77,0x23,0x77,0xd1,0xe1,0xc9,0xe5, - 0xd5,0x11,0x1f,0x00,0x77,0x3c,0x23,0x77,0x3c,0x19,0x77,0x3c,0x23,0x77,0xd1,0xe1, - 0xc9,0x3a,0x6e,0x4e,0xfe,0xff,0x20,0x05,0x06,0x02,0xc3,0x5e,0x2c,0x06,0x01,0xcd, - 0x5e,0x2c,0x3a,0x6e,0x4e,0xe6,0xf0,0x28,0x09,0x0f,0x0f,0x0f,0x0f,0xc6,0x30,0x32, - 0x34,0x40,0x3a,0x6e,0x4e,0xe6,0x0f,0xc6,0x30,0x32,0x33,0x40,0xc9,0xe1,0x5e,0x23, - 0x56,0x23,0x4e,0x23,0x46,0x23,0x7e,0x23,0xe5,0xeb,0x11,0x20,0x00,0xe5,0xc5,0x71, - 0x23,0x10,0xfc,0xc1,0xe1,0x19,0x3d,0x20,0xf4,0xc9,0x3a,0x00,0x4e,0xfe,0x01,0xc8, - 0x3a,0x13,0x4e,0x3c,0xfe,0x08,0xd2,0x2e,0x2c,0x11,0x08,0x3b,0x47,0x0e,0x07,0x21, - 0x04,0x40,0x1a,0xcd,0x8f,0x2b,0x3e,0x04,0x84,0x67,0x13,0x1a,0xcd,0x80,0x2b,0x3e, - 0xfc,0x84,0x67,0x13,0x23,0x23,0x0d,0x10,0xe9,0x0d,0xf8,0xcd,0x7e,0x2b,0x3e,0x04, - 0x84,0x67,0xaf,0xcd,0x80,0x2b,0x3e,0xfc,0x84,0x67,0x23,0x23,0x18,0xeb,0xfe,0x13, - 0x38,0x02,0x3e,0x13,0xd6,0x07,0x4f,0x06,0x00,0x21,0x08,0x3b,0x09,0x09,0xeb,0x06, - 0x07,0xc3,0xfd,0x2b,0x47,0xe6,0x0f,0xc6,0x00,0x27,0x4f,0x78,0xe6,0xf0,0x28,0x0b, - 0x0f,0x0f,0x0f,0x0f,0x47,0xaf,0xc6,0x16,0x27,0x10,0xfb,0x81,0x27,0xc9,0x21,0xa5, - 0x36,0xdf,0x5e,0x23,0x56,0xdd,0x21,0x00,0x44,0xdd,0x19,0xdd,0xe5,0x11,0x00,0xfc, - 0xdd,0x19,0x11,0xff,0xff,0xcb,0x7e,0x20,0x03,0x11,0xe0,0xff,0x23,0x78,0x01,0x00, - 0x00,0x87,0x38,0x28,0x7e,0xfe,0x2f,0x28,0x09,0xdd,0x77,0x00,0x23,0xdd,0x19,0x04, - 0x18,0xf2,0x23,0xdd,0xe1,0x7e,0xa7,0xfa,0xa4,0x2c,0x7e,0xdd,0x77,0x00,0x23,0xdd, - 0x19,0x10,0xf7,0xc9,0xdd,0x77,0x00,0xdd,0x19,0x10,0xf9,0xc9,0x7e,0xfe,0x2f,0x28, - 0x0a,0xdd,0x36,0x00,0x40,0x23,0xdd,0x19,0x04,0x18,0xf1,0x23,0x04,0xed,0xb1,0x18, - 0xd2,0x21,0xc8,0x3b,0xdd,0x21,0xcc,0x4e,0xfd,0x21,0x8c,0x4e,0xcd,0x44,0x2d,0x47, - 0x3a,0xcc,0x4e,0xa7,0x28,0x04,0x78,0x32,0x91,0x4e,0x21,0xcc,0x3b,0xdd,0x21,0xdc, - 0x4e,0xfd,0x21,0x92,0x4e,0xcd,0x44,0x2d,0x47,0x3a,0xdc,0x4e,0xa7,0x28,0x04,0x78, - 0x32,0x96,0x4e,0x21,0xd0,0x3b,0xdd,0x21,0xec,0x4e,0xfd,0x21,0x97,0x4e,0xcd,0x44, - 0x2d,0x47,0x3a,0xec,0x4e,0xa7,0xc8,0x78,0x32,0x9b,0x4e,0xc9,0x21,0x30,0x3b,0xdd, - 0x21,0x9c,0x4e,0xfd,0x21,0x8c,0x4e,0xcd,0xee,0x2d,0x32,0x91,0x4e,0x21,0x40,0x3b, - 0xdd,0x21,0xac,0x4e,0xfd,0x21,0x92,0x4e,0xcd,0xee,0x2d,0x32,0x96,0x4e,0x21,0x80, - 0x3b,0xdd,0x21,0xbc,0x4e,0xfd,0x21,0x97,0x4e,0xcd,0xee,0x2d,0x32,0x9b,0x4e,0xaf, - 0x32,0x90,0x4e,0xc9,0xdd,0x7e,0x00,0xa7,0xca,0xf4,0x2d,0x4f,0x06,0x08,0x1e,0x80, - 0x7b,0xa1,0x20,0x05,0xcb,0x3b,0x10,0xf8,0xc9,0xdd,0x7e,0x02,0xa3,0x20,0x07,0xdd, - 0x73,0x02,0x05,0xdf,0x18,0x0c,0xdd,0x35,0x0c,0xc2,0xd7,0x2d,0xdd,0x6e,0x06,0xdd, - 0x66,0x07,0x7e,0x23,0xdd,0x75,0x06,0xdd,0x74,0x07,0xfe,0xf0,0x38,0x27,0x21,0x6c, - 0x2d,0xe5,0xe6,0x0f,0xe7,0x55,0x2f,0x65,0x2f,0x77,0x2f,0x89,0x2f,0x9b,0x2f,0x0c, - 0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c, - 0x00,0x0c,0x00,0xad,0x2f,0x47,0xe6,0x1f,0x28,0x03,0xdd,0x70,0x0d,0xdd,0x4e,0x09, - 0xdd,0x7e,0x0b,0xe6,0x08,0x28,0x02,0x0e,0x00,0xdd,0x71,0x0f,0x78,0x07,0x07,0x07, - 0xe6,0x07,0x21,0xb0,0x3b,0xd7,0xdd,0x77,0x0c,0x78,0xe6,0x1f,0x28,0x09,0xe6,0x0f, - 0x21,0xb8,0x3b,0xd7,0xdd,0x77,0x0e,0xdd,0x6e,0x0e,0x26,0x00,0xdd,0x7e,0x0d,0xe6, - 0x10,0x28,0x02,0x3e,0x01,0xdd,0x86,0x04,0xca,0xe8,0x2e,0xc3,0xe4,0x2e,0xdd,0x7e, - 0x00,0xa7,0x20,0x27,0xdd,0x7e,0x02,0xa7,0xc8,0xdd,0x36,0x02,0x00,0xdd,0x36,0x0d, - 0x00,0xdd,0x36,0x0e,0x00,0xdd,0x36,0x0f,0x00,0xfd,0x36,0x00,0x00,0xfd,0x36,0x01, - 0x00,0xfd,0x36,0x02,0x00,0xfd,0x36,0x03,0x00,0xaf,0xc9,0x4f,0x06,0x08,0x1e,0x80, - 0x7b,0xa1,0x20,0x05,0xcb,0x3b,0x10,0xf8,0xc9,0xdd,0x7e,0x02,0xa3,0x20,0x3f,0xdd, - 0x73,0x02,0x05,0x78,0x07,0x07,0x07,0x4f,0x06,0x00,0xe5,0x09,0xdd,0xe5,0xd1,0x13, - 0x13,0x13,0x01,0x08,0x00,0xed,0xb0,0xe1,0xdd,0x7e,0x06,0xe6,0x7f,0xdd,0x77,0x0c, - 0xdd,0x7e,0x04,0xdd,0x77,0x0e,0xdd,0x7e,0x09,0x47,0x0f,0x0f,0x0f,0x0f,0xe6,0x0f, - 0xdd,0x77,0x0b,0xe6,0x08,0x20,0x07,0xdd,0x70,0x0f,0xdd,0x36,0x0d,0x00,0xdd,0x35, - 0x0c,0x20,0x5a,0xdd,0x7e,0x08,0xa7,0x28,0x10,0xdd,0x35,0x08,0x20,0x0b,0x7b,0x2f, - 0xdd,0xa6,0x00,0xdd,0x77,0x00,0xc3,0xee,0x2d,0xdd,0x7e,0x06,0xe6,0x7f,0xdd,0x77, - 0x0c,0xdd,0xcb,0x06,0x7e,0x28,0x16,0xdd,0x7e,0x05,0xed,0x44,0xdd,0x77,0x05,0xdd, - 0xcb,0x0d,0x46,0xdd,0xcb,0x0d,0xc6,0x28,0x24,0xdd,0xcb,0x0d,0x86,0xdd,0x7e,0x04, - 0xdd,0x86,0x07,0xdd,0x77,0x04,0xdd,0x77,0x0e,0xdd,0x7e,0x09,0xdd,0x86,0x0a,0xdd, - 0x77,0x09,0x47,0xdd,0x7e,0x0b,0xe6,0x08,0x20,0x03,0xdd,0x70,0x0f,0xdd,0x7e,0x0e, - 0xdd,0x86,0x05,0xdd,0x77,0x0e,0x6f,0x26,0x00,0xdd,0x7e,0x03,0xe6,0x70,0x28,0x08, - 0x0f,0x0f,0x0f,0x0f,0x47,0x29,0x10,0xfd,0xfd,0x75,0x00,0x7d,0x0f,0x0f,0x0f,0x0f, - 0xfd,0x77,0x01,0xfd,0x74,0x02,0x7c,0x0f,0x0f,0x0f,0x0f,0xfd,0x77,0x03,0xdd,0x7e, - 0x0b,0xe7,0x22,0x2f,0x26,0x2f,0x2b,0x2f,0x3c,0x2f,0x43,0x2f,0x4a,0x2f,0x4b,0x2f, - 0x4c,0x2f,0x4d,0x2f,0x4e,0x2f,0x4f,0x2f,0x50,0x2f,0x51,0x2f,0x52,0x2f,0x53,0x2f, - 0x54,0x2f,0xdd,0x7e,0x0f,0xc9,0xdd,0x7e,0x0f,0x18,0x09,0x3a,0x84,0x4c,0xe6,0x01, - 0xdd,0x7e,0x0f,0xc0,0xe6,0x0f,0xc8,0x3d,0xdd,0x77,0x0f,0xc9,0x3a,0x84,0x4c,0xe6, - 0x03,0x18,0xed,0x3a,0x84,0x4c,0xe6,0x07,0x18,0xe6,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, - 0xc9,0xc9,0xc9,0xc9,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e,0xdd,0x77,0x06,0x23, - 0x7e,0xdd,0x77,0x07,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e,0x23,0xdd,0x75,0x06, - 0xdd,0x74,0x07,0xdd,0x77,0x03,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e,0x23,0xdd, - 0x75,0x06,0xdd,0x74,0x07,0xdd,0x77,0x04,0xc9,0xdd,0x6e,0x06,0xdd,0x66,0x07,0x7e, - 0x23,0xdd,0x75,0x06,0xdd,0x74,0x07,0xdd,0x77,0x09,0xc9,0xdd,0x6e,0x06,0xdd,0x66, - 0x07,0x7e,0x23,0xdd,0x75,0x06,0xdd,0x74,0x07,0xdd,0x77,0x0b,0xc9,0xdd,0x7e,0x02, - 0x2f,0xdd,0xa6,0x00,0xdd,0x77,0x00,0xc3,0xf4,0x2d,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x4c, - 0x21,0x00,0x00,0x01,0x00,0x10,0x32,0xc0,0x50,0x79,0x86,0x4f,0x7d,0xc6,0x02,0x6f, - 0xfe,0x02,0xd2,0x09,0x30,0x24,0x10,0xee,0x79,0xa7,0x20,0x15,0x32,0x07,0x50,0x7c, - 0xfe,0x30,0xc2,0x03,0x30,0x26,0x00,0x2c,0x7d,0xfe,0x02,0xda,0x03,0x30,0xc3,0x42, - 0x30,0x25,0x7c,0xe6,0xf0,0x32,0x07,0x50,0x0f,0x0f,0x0f,0x0f,0x5f,0x06,0x00,0xc3, - 0xbd,0x30,0x31,0x54,0x31,0x06,0xff,0xe1,0xd1,0x48,0x32,0xc0,0x50,0x79,0xa3,0x77, - 0xc6,0x33,0x4f,0x2c,0x7d,0xe6,0x0f,0xc2,0x4d,0x30,0x79,0x87,0x87,0x81,0xc6,0x31, - 0x4f,0x7d,0xa7,0xc2,0x4d,0x30,0x24,0x15,0xc2,0x4a,0x30,0x3b,0x3b,0x3b,0x3b,0xe1, - 0xd1,0x48,0x32,0xc0,0x50,0x79,0xa3,0x4f,0x7e,0xa3,0xb9,0xc2,0xb5,0x30,0xc6,0x33, - 0x4f,0x2c,0x7d,0xe6,0x0f,0xc2,0x75,0x30,0x79,0x87,0x87,0x81,0xc6,0x31,0x4f,0x7d, - 0xa7,0xc2,0x75,0x30,0x24,0x15,0xc2,0x72,0x30,0x3b,0x3b,0x3b,0x3b,0x78,0xd6,0x10, - 0x47,0x10,0xa4,0xf1,0xd1,0xfe,0x44,0xc2,0x45,0x30,0x7b,0xee,0xf0,0xc2,0x45,0x30, - 0x06,0x01,0xc3,0xbd,0x30,0x7b,0xe6,0x01,0xee,0x01,0x5f,0x06,0x00,0x31,0xc0,0x4f, - 0xd9,0x21,0x00,0x4c,0x06,0x04,0x32,0xc0,0x50,0x36,0x00,0x2c,0x20,0xfb,0x24,0x10, - 0xf5,0x21,0x00,0x40,0x06,0x04,0x32,0xc0,0x50,0x3e,0x40,0x77,0x2c,0x20,0xfc,0x24, - 0x10,0xf4,0x06,0x04,0x32,0xc0,0x50,0x3e,0x0f,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf4, - 0xd9,0x10,0x08,0x06,0x23,0xcd,0x5e,0x2c,0xc3,0x74,0x31,0x7b,0xc6,0x30,0x32,0x84, - 0x41,0xc5,0xe5,0x06,0x24,0xcd,0x5e,0x2c,0xe1,0x7c,0xfe,0x40,0x2a,0x6c,0x31,0x38, - 0x11,0xfe,0x4c,0x2a,0x6e,0x31,0x30,0x0a,0xfe,0x44,0x2a,0x70,0x31,0x38,0x03,0x2a, - 0x72,0x31,0x7d,0x32,0x04,0x42,0x7c,0x32,0x64,0x42,0x3a,0x00,0x50,0x47,0x3a,0x40, - 0x50,0xb0,0xe6,0x01,0x20,0x11,0xc1,0x79,0xe6,0x0f,0x47,0x79,0xe6,0xf0,0x0f,0x0f, - 0x0f,0x0f,0x4f,0xed,0x43,0x85,0x41,0x32,0xc0,0x50,0x3a,0x40,0x50,0xe6,0x10,0x28, - 0xf6,0xc3,0x0b,0x23,0x00,0x4c,0x0f,0x04,0x00,0x4c,0xf0,0x04,0x00,0x40,0x0f,0x04, - 0x00,0x40,0xf0,0x04,0x00,0x44,0x0f,0x04,0x00,0x44,0xf0,0x04,0x4f,0x40,0x41,0x57, - 0x41,0x56,0x41,0x43,0x21,0x06,0x50,0x3e,0x01,0x77,0x2d,0x20,0xfc,0xaf,0x32,0x03, - 0x50,0xd6,0x04,0xd3,0x00,0x31,0xc0,0x4f,0x32,0xc0,0x50,0xaf,0x32,0x00,0x4e,0x3c, - 0x32,0x01,0x4e,0x32,0x00,0x50,0xfb,0x3a,0x00,0x50,0x2f,0x47,0xe6,0xe0,0x28,0x05, - 0x3e,0x02,0x32,0x9c,0x4e,0x3a,0x40,0x50,0x2f,0x4f,0xe6,0x60,0x28,0x05,0x3e,0x01, - 0x32,0x9c,0x4e,0x78,0xb1,0xe6,0x01,0x28,0x05,0x3e,0x08,0x32,0xbc,0x4e,0x78,0xb1, - 0xe6,0x02,0x28,0x05,0x3e,0x04,0x32,0xbc,0x4e,0x78,0xb1,0xe6,0x04,0x28,0x05,0x3e, - 0x10,0x32,0xbc,0x4e,0x78,0xb1,0xe6,0x08,0x28,0x05,0x3e,0x20,0x32,0xbc,0x4e,0x3a, - 0x80,0x50,0xe6,0x03,0xc6,0x25,0x47,0xcd,0x5e,0x2c,0x3a,0x80,0x50,0x0f,0x0f,0x0f, - 0x0f,0xe6,0x03,0xfe,0x03,0x20,0x08,0x06,0x2a,0xcd,0x5e,0x2c,0xc3,0x1c,0x32,0x07, - 0x5f,0xd5,0x06,0x2b,0xcd,0x5e,0x2c,0x06,0x2e,0xcd,0x5e,0x2c,0xd1,0x16,0x00,0x21, - 0xf9,0x32,0x19,0x7e,0x32,0x2a,0x42,0x23,0x7e,0x32,0x4a,0x42,0x3a,0x80,0x50,0x0f, - 0x0f,0xe6,0x03,0xc6,0x31,0xfe,0x34,0x20,0x01,0x3c,0x32,0x0c,0x42,0x06,0x29,0xcd, - 0x5e,0x2c,0x3a,0x40,0x50,0x07,0xe6,0x01,0xc6,0x2c,0x47,0xcd,0x5e,0x2c,0x3a,0x40, - 0x50,0xe6,0x10,0xca,0x88,0x31,0xaf,0x32,0x00,0x50,0xf3,0x21,0x07,0x50,0xaf,0x77, - 0x2d,0x20,0xfc,0x31,0xe2,0x3a,0x06,0x03,0xd9,0xe1,0xd1,0x32,0xc0,0x50,0xc1,0x3e, - 0x3c,0x77,0x23,0x72,0x23,0x10,0xf8,0x3b,0x3b,0xc1,0x71,0x23,0x3e,0x3f,0x77,0x23, - 0x10,0xf8,0x3b,0x3b,0x1d,0xc2,0x5b,0x32,0xf1,0xd9,0x10,0xdc,0x31,0xc0,0x4f,0x06, - 0x08,0xcd,0xed,0x32,0x10,0xfb,0x32,0xc0,0x50,0x3a,0x40,0x50,0xe6,0x10,0x28,0xf6, - 0x3a,0x40,0x50,0xe6,0x60,0xc2,0x4b,0x23,0x06,0x08,0xcd,0xed,0x32,0x10,0xfb,0x3a, - 0x40,0x50,0xe6,0x10,0xc2,0x4b,0x23,0x1e,0x01,0x06,0x04,0x32,0xc0,0x50,0xcd,0xed, - 0x32,0x3a,0x00,0x50,0xa3,0x20,0xf4,0xcd,0xed,0x32,0x32,0xc0,0x50,0x3a,0x00,0x50, - 0xee,0xff,0x20,0xf3,0x10,0xe5,0xcb,0x03,0x7b,0xfe,0x10,0xda,0xa9,0x32,0x21,0x00, - 0x40,0x06,0x04,0x3e,0x40,0x77,0x2c,0x20,0xfc,0x24,0x10,0xf7,0xcd,0xf4,0x3a,0x32, - 0xc0,0x50,0x3a,0x40,0x50,0xe6,0x10,0xca,0xdf,0x32,0xc3,0x4b,0x23,0x32,0xc0,0x50, - 0x21,0x00,0x28,0x2b,0x7c,0xb5,0x20,0xfb,0xc9,0x30,0x31,0x35,0x31,0x30,0x32,0x00, - 0xff,0x01,0x00,0x00,0x01,0xff,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0xff,0x00,0x55, - 0x2a,0x55,0x2a,0x55,0x55,0x55,0x55,0x55,0x2a,0x55,0x2a,0x52,0x4a,0xa5,0x94,0x25, - 0x25,0x25,0x25,0x22,0x22,0x22,0x22,0x01,0x01,0x01,0x01,0x58,0x02,0x08,0x07,0x60, - 0x09,0x10,0x0e,0x68,0x10,0x70,0x17,0x14,0x19,0x52,0x4a,0xa5,0x94,0xaa,0x2a,0x55, - 0x55,0x55,0x2a,0x55,0x2a,0x52,0x4a,0xa5,0x94,0x92,0x24,0x25,0x49,0x48,0x24,0x22, - 0x91,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x55,0x2a,0x55,0x2a,0x55,0x55,0x55,0x55,0xaa,0x2a,0x55,0x55,0x55, - 0x2a,0x55,0x2a,0x52,0x4a,0xa5,0x94,0x48,0x24,0x22,0x91,0x21,0x44,0x44,0x08,0x58, - 0x02,0x34,0x08,0xd8,0x09,0xb4,0x0f,0x58,0x11,0x08,0x16,0x34,0x17,0x55,0x55,0x55, - 0x55,0xd5,0x6a,0xd5,0x6a,0xaa,0x6a,0x55,0xd5,0x55,0x55,0x55,0x55,0xaa,0x2a,0x55, - 0x55,0x92,0x24,0x92,0x24,0x22,0x22,0x22,0x22,0xa4,0x01,0x54,0x06,0xf8,0x07,0xa8, - 0x0c,0xd4,0x0d,0x84,0x12,0xb0,0x13,0xd5,0x6a,0xd5,0x6a,0xd6,0x5a,0xad,0xb5,0xd6, - 0x5a,0xad,0xb5,0xd5,0x6a,0xd5,0x6a,0xaa,0x6a,0x55,0xd5,0x92,0x24,0x25,0x49,0x48, - 0x24,0x22,0x91,0xa4,0x01,0x54,0x06,0xf8,0x07,0xa8,0x0c,0xd4,0x0d,0xfe,0xff,0xff, - 0xff,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0xb6,0x6d,0x6d,0xdb,0x6d,0x6d,0x6d, - 0x6d,0xd6,0x5a,0xad,0xb5,0x25,0x25,0x25,0x25,0x92,0x24,0x92,0x24,0x2c,0x01,0xdc, - 0x05,0x08,0x07,0xb8,0x0b,0xe4,0x0c,0xfe,0xff,0xff,0xff,0xd5,0x6a,0xd5,0x6a,0xd5, - 0x6a,0xd5,0x6a,0xb6,0x6d,0x6d,0xdb,0x6d,0x6d,0x6d,0x6d,0xd6,0x5a,0xad,0xb5,0x48, - 0x24,0x22,0x91,0x92,0x24,0x92,0x24,0x2c,0x01,0xdc,0x05,0x08,0x07,0xb8,0x0b,0xe4, - 0x0c,0xfe,0xff,0xff,0xff,0x40,0xfc,0xd0,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, - 0xd4,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xd0,0xd2,0xd2,0xd2,0xd2,0xd6, - 0xd8,0xd2,0xd2,0xd2,0xd2,0xd4,0xfc,0xda,0x09,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc, - 0xfc,0xfc,0xfc,0xda,0x05,0xde,0xe4,0x05,0xdc,0xfc,0xda,0x02,0xe6,0xe8,0xea,0x02, - 0xe6,0xea,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xe6, - 0xea,0x02,0xe7,0xeb,0x02,0xe6,0xea,0x02,0xdc,0xfc,0xda,0x02,0xde,0xfc,0xe4,0x02, - 0xde,0xe4,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xde, - 0xe4,0x05,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x02,0xde,0xfc,0xe4,0x02,0xde,0xe4,0x02, - 0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xdc,0xfc,0xfc,0xfc,0xda,0x02,0xde,0xf2,0xe8,0xe8, - 0xea,0x02,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x02,0xe7,0xe9,0xeb,0x02,0xe7,0xeb,0x02, - 0xe7,0xd2,0xd2,0xd2,0xeb,0x02,0xe7,0xd2,0xd2,0xd2,0xeb,0x02,0xe7,0xe9,0xe9,0xe9, - 0xeb,0x02,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x1b,0xde,0xe4,0x02,0xdc,0xfc,0xda,0x02, - 0xe6,0xe8,0xf8,0x02,0xf6,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xf8,0x02,0xf6,0xe8,0xe8, - 0xe8,0xea,0x02,0xe6,0xf8,0x02,0xf6,0xe8,0xe8,0xf4,0xe4,0x02,0xdc,0xfc,0xda,0x02, - 0xde,0xfc,0xe4,0x02,0xf7,0xe9,0xe9,0xf5,0xf3,0xe9,0xe9,0xf9,0x02,0xf7,0xe9,0xe9, - 0xe9,0xeb,0x02,0xde,0xe4,0x02,0xf7,0xe9,0xe9,0xf5,0xe4,0x02,0xdc,0xfc,0xda,0x02, - 0xde,0xfc,0xe4,0x05,0xde,0xe4,0x0b,0xde,0xe4,0x05,0xde,0xe4,0x02,0xdc,0xfc,0xda, - 0x02,0xde,0xfc,0xe4,0x02,0xe6,0xea,0x02,0xde,0xe4,0x02,0xec,0xd3,0xd3,0xd3,0xee, - 0x02,0xe6,0xea,0x02,0xde,0xe4,0x02,0xe6,0xea,0x02,0xde,0xe4,0x02,0xdc,0xfc,0xda, - 0x02,0xe7,0xe9,0xeb,0x02,0xde,0xe4,0x02,0xe7,0xeb,0x02,0xdc,0xfc,0xfc,0xfc,0xda, - 0x02,0xde,0xe4,0x02,0xe7,0xeb,0x02,0xde,0xe4,0x02,0xe7,0xeb,0x02,0xdc,0xfc,0xda, - 0x06,0xde,0xe4,0x05,0xf0,0xfc,0xfc,0xfc,0xda,0x02,0xde,0xe4,0x05,0xde,0xe4,0x05, - 0xdc,0xfc,0xfa,0xe8,0xe8,0xe8,0xea,0x02,0xde,0xf2,0xe8,0xe8,0xea,0x02,0xce,0xfc, - 0xfc,0xfc,0xda,0x02,0xde,0xf2,0xe8,0xe8,0xea,0x02,0xde,0xf2,0xe8,0xe8,0xea,0x02, - 0xdc,0x00,0x00,0x00,0x00,0x62,0x01,0x02,0x01,0x01,0x01,0x01,0x0c,0x01,0x01,0x04, - 0x01,0x01,0x01,0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x04,0x03,0x0c,0x03,0x01, - 0x01,0x01,0x03,0x04,0x04,0x03,0x0c,0x06,0x03,0x04,0x04,0x03,0x0c,0x06,0x03,0x04, - 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x04,0x0f,0x03,0x06,0x04, - 0x04,0x0f,0x03,0x06,0x04,0x04,0x01,0x01,0x01,0x0c,0x03,0x01,0x01,0x01,0x03,0x04, - 0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x01,0x01, - 0x01,0x01,0x03,0x0c,0x01,0x01,0x01,0x03,0x01,0x01,0x01,0x08,0x18,0x08,0x18,0x04, - 0x01,0x01,0x01,0x01,0x03,0x0c,0x01,0x01,0x01,0x03,0x01,0x01,0x01,0x04,0x04,0x03, - 0x0c,0x03,0x03,0x03,0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x04,0x01,0x01,0x01, - 0x0c,0x03,0x01,0x01,0x01,0x03,0x04,0x04,0x0f,0x03,0x06,0x04,0x04,0x0f,0x03,0x06, - 0x04,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, - 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x04,0x04,0x03,0x0c,0x06, - 0x03,0x04,0x04,0x03,0x0c,0x06,0x03,0x04,0x04,0x03,0x0c,0x03,0x01,0x01,0x01,0x03, - 0x04,0x04,0x03,0x0c,0x03,0x03,0x03,0x04,0x01,0x02,0x01,0x01,0x01,0x01,0x0c,0x01, - 0x01,0x04,0x01,0x01,0x01,0x13,0x37,0x23,0x37,0x32,0x37,0x41,0x37,0x5a,0x37,0x6a, - 0x37,0x7a,0x37,0x86,0x37,0x9d,0x37,0xb1,0x37,0x00,0x3d,0x21,0x3d,0xfd,0x37,0x67, - 0x3d,0xe3,0x3d,0x86,0x3d,0x02,0x3e,0x4c,0x38,0x5a,0x38,0x3c,0x3d,0x57,0x3d,0xd3, - 0x3d,0x76,0x3d,0xf2,0x3d,0x01,0x00,0x02,0x00,0x03,0x00,0xbc,0x38,0xc4,0x38,0xce, - 0x38,0xd8,0x38,0xe2,0x38,0xec,0x38,0xf6,0x38,0x00,0x39,0x0a,0x39,0x1a,0x39,0x6f, - 0x39,0x2a,0x39,0x58,0x39,0x41,0x39,0x4f,0x3e,0x86,0x39,0x97,0x39,0xb0,0x39,0xbd, - 0x39,0xca,0x39,0xa5,0x3d,0x21,0x3e,0xc4,0x3d,0x40,0x3e,0x95,0x3d,0x11,0x3e,0xb4, - 0x3d,0x30,0x3e,0xd4,0x83,0x48,0x49,0x47,0x48,0x40,0x53,0x43,0x4f,0x52,0x45,0x2f, - 0x8f,0x2f,0x80,0x3b,0x80,0x43,0x52,0x45,0x44,0x49,0x54,0x40,0x40,0x40,0x2f,0x8f, - 0x2f,0x80,0x3b,0x80,0x46,0x52,0x45,0x45,0x40,0x50,0x4c,0x41,0x59,0x2f,0x8f,0x2f, - 0x80,0x8c,0x02,0x50,0x4c,0x41,0x59,0x45,0x52,0x40,0x4f,0x4e,0x45,0x2f,0x85,0x2f, - 0x10,0x10,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x10,0x10,0x8c,0x02,0x50,0x4c,0x41,0x59, - 0x45,0x52,0x40,0x54,0x57,0x4f,0x2f,0x85,0x2f,0x80,0x92,0x02,0x47,0x41,0x4d,0x45, - 0x40,0x40,0x4f,0x56,0x45,0x52,0x2f,0x81,0x2f,0x80,0x52,0x02,0x52,0x45,0x41,0x44, - 0x59,0x5b,0x2f,0x89,0x2f,0x90,0xee,0x02,0x50,0x55,0x53,0x48,0x40,0x53,0x54,0x41, - 0x52,0x54,0x40,0x42,0x55,0x54,0x54,0x4f,0x4e,0x2f,0x87,0x2f,0x80,0xb2,0x02,0x31, - 0x40,0x50,0x4c,0x41,0x59,0x45,0x52,0x40,0x4f,0x4e,0x4c,0x59,0x40,0x2f,0x85,0x2f, - 0x80,0xb2,0x02,0x31,0x40,0x4f,0x52,0x40,0x32,0x40,0x50,0x4c,0x41,0x59,0x45,0x52, - 0x53,0x2f,0x85,0x00,0x2f,0x00,0x80,0x00,0x96,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40, - 0x50,0x55,0x43,0x4b,0x4d,0x41,0x4e,0x40,0x46,0x4f,0x52,0x40,0x40,0x40,0x30,0x30, - 0x30,0x40,0x5d,0x5e,0x5f,0x2f,0x8e,0x2f,0x80,0xba,0x02,0x5c,0x40,0x28,0x29,0x2a, - 0x2b,0x2c,0x2d,0x2e,0x40,0x31,0x39,0x38,0x30,0x2f,0x83,0x2f,0x80,0xc3,0x02,0x43, - 0x48,0x41,0x52,0x41,0x43,0x54,0x45,0x52,0x40,0x3a,0x40,0x4e,0x49,0x43,0x4b,0x4e, - 0x41,0x4d,0x45,0x2f,0x8f,0x2f,0x80,0x65,0x01,0x26,0x41,0x4b,0x41,0x42,0x45,0x49, - 0x26,0x2f,0x81,0x2f,0x80,0x45,0x01,0x26,0x4d,0x41,0x43,0x4b,0x59,0x26,0x2f,0x81, - 0x2f,0x80,0x48,0x01,0x26,0x50,0x49,0x4e,0x4b,0x59,0x26,0x2f,0x83,0x2f,0x80,0x48, - 0x01,0x26,0x4d,0x49,0x43,0x4b,0x59,0x26,0x2f,0x83,0x2f,0x80,0x76,0x02,0x10,0x40, - 0x31,0x30,0x40,0x5d,0x5e,0x5f,0x2f,0x9f,0x2f,0x80,0x78,0x02,0x14,0x40,0x35,0x30, - 0x40,0x5d,0x5e,0x5f,0x2f,0x9f,0x2f,0x80,0x5d,0x02,0x28,0x29,0x2a,0x2b,0x2c,0x2d, - 0x2e,0x2f,0x83,0x2f,0x80,0xc5,0x02,0x40,0x4f,0x49,0x4b,0x41,0x4b,0x45,0x3b,0x3b, - 0x3b,0x3b,0x2f,0x81,0x2f,0x80,0xc5,0x02,0x40,0x55,0x52,0x43,0x48,0x49,0x4e,0x3b, - 0x3b,0x3b,0x3b,0x3b,0x2f,0x81,0x2f,0x80,0xc8,0x02,0x40,0x4d,0x41,0x43,0x48,0x49, - 0x42,0x55,0x53,0x45,0x3b,0x3b,0x2f,0x83,0x2f,0x80,0xc8,0x02,0x40,0x52,0x4f,0x4d, - 0x50,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x2f,0x83,0x2f,0x80,0x12,0x02,0x81,0x85, - 0x2f,0x83,0x2f,0x90,0x32,0x02,0x40,0x82,0x85,0x40,0x2f,0x83,0x2f,0x90,0x32,0x02, - 0x40,0x83,0x85,0x40,0x2f,0x83,0x2f,0x90,0x32,0x02,0x40,0x84,0x85,0x40,0x2f,0x83, - 0x2f,0x90,0x32,0x02,0x40,0x86,0x8d,0x8e,0x2f,0x83,0x2f,0x90,0x32,0x02,0x87,0x88, - 0x8d,0x8e,0x2f,0x83,0x2f,0x90,0x32,0x02,0x89,0x8a,0x8d,0x8e,0x2f,0x83,0x2f,0x90, - 0x32,0x02,0x8b,0x8c,0x8d,0x8e,0x2f,0x83,0x2f,0x90,0x04,0x03,0x4d,0x45,0x4d,0x4f, - 0x52,0x59,0x40,0x40,0x4f,0x4b,0x2f,0x8f,0x2f,0x80,0x04,0x03,0x42,0x41,0x44,0x40, - 0x40,0x40,0x40,0x52,0x40,0x4d,0x2f,0x8f,0x2f,0x80,0x08,0x03,0x31,0x40,0x43,0x4f, - 0x49,0x4e,0x40,0x40,0x31,0x40,0x43,0x52,0x45,0x44,0x49,0x54,0x40,0x2f,0x8f,0x2f, - 0x80,0x08,0x03,0x32,0x40,0x43,0x4f,0x49,0x4e,0x53,0x40,0x31,0x40,0x43,0x52,0x45, - 0x44,0x49,0x54,0x40,0x2f,0x8f,0x2f,0x80,0x08,0x03,0x31,0x40,0x43,0x4f,0x49,0x4e, - 0x40,0x40,0x32,0x40,0x43,0x52,0x45,0x44,0x49,0x54,0x53,0x2f,0x8f,0x2f,0x80,0x08, - 0x03,0x46,0x52,0x45,0x45,0x40,0x40,0x50,0x4c,0x41,0x59,0x40,0x40,0x40,0x40,0x40, - 0x40,0x40,0x2f,0x8f,0x2f,0x80,0x0a,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40,0x40,0x4e, - 0x4f,0x4e,0x45,0x2f,0x8f,0x2f,0x80,0x0a,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40,0x2f, - 0x8f,0x2f,0x80,0x0c,0x03,0x50,0x55,0x43,0x4b,0x4d,0x41,0x4e,0x2f,0x8f,0x2f,0x80, - 0x0e,0x03,0x54,0x41,0x42,0x4c,0x45,0x40,0x40,0x2f,0x8f,0x2f,0x80,0x0e,0x03,0x55, - 0x50,0x52,0x49,0x47,0x48,0x54,0x2f,0x8f,0x2f,0x80,0x0a,0x02,0x30,0x30,0x30,0x2f, - 0x8f,0x2f,0x80,0x6b,0x01,0x26,0x41,0x4f,0x53,0x55,0x4b,0x45,0x26,0x2f,0x85,0x2f, - 0x80,0x4b,0x01,0x26,0x4d,0x55,0x43,0x4b,0x59,0x26,0x2f,0x85,0x2f,0x80,0x6e,0x01, - 0x26,0x47,0x55,0x5a,0x55,0x54,0x41,0x26,0x2f,0x87,0x2f,0x80,0x4e,0x01,0x26,0x4d, - 0x4f,0x43,0x4b,0x59,0x26,0x2f,0x87,0x2f,0x80,0xcb,0x02,0x40,0x4b,0x49,0x4d,0x41, - 0x47,0x55,0x52,0x45,0x3b,0x3b,0x2f,0x85,0x2f,0x80,0xcb,0x02,0x40,0x53,0x54,0x59, - 0x4c,0x49,0x53,0x54,0x3b,0x3b,0x3b,0x3b,0x2f,0x85,0x2f,0x80,0xce,0x02,0x40,0x4f, - 0x54,0x4f,0x42,0x4f,0x4b,0x45,0x3b,0x3b,0x3b,0x2f,0x87,0x2f,0x80,0xce,0x02,0x40, - 0x43,0x52,0x59,0x42,0x41,0x42,0x59,0x3b,0x3b,0x3b,0x3b,0x2f,0x87,0x2f,0x80,0x01, - 0x01,0x03,0x01,0x01,0x01,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x04,0x04, - 0x04,0x06,0x02,0x02,0x02,0x02,0x04,0x02,0x04,0x04,0x04,0x06,0x02,0x02,0x02,0x02, - 0x01,0x01,0x01,0x01,0x02,0x04,0x04,0x04,0x06,0x02,0x02,0x02,0x02,0x06,0x04,0x05, - 0x01,0x01,0x03,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x03,0x01,0x01,0x04,0x01,0x01, - 0x01,0x6c,0x05,0x01,0x01,0x01,0x18,0x04,0x04,0x18,0x05,0x01,0x01,0x01,0x17,0x02, - 0x03,0x04,0x16,0x04,0x03,0x01,0x01,0x01,0x76,0x01,0x01,0x01,0x01,0x03,0x01,0x01, - 0x01,0x02,0x04,0x02,0x04,0x0e,0x02,0x04,0x02,0x04,0x02,0x04,0x0b,0x01,0x01,0x01, - 0x02,0x04,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x0e,0x02,0x04,0x02,0x04,0x02, - 0x01,0x02,0x01,0x0a,0x01,0x01,0x01,0x01,0x03,0x01,0x01,0x01,0x03,0x01,0x01,0x03, - 0x04,0x00,0x02,0x40,0x01,0x3e,0x3d,0x10,0x40,0x40,0x0e,0x3d,0x3e,0x10,0xc2,0x43, - 0x01,0x3e,0x3d,0x10,0x21,0xa2,0x40,0x11,0x4f,0x3a,0x36,0x14,0x1a,0xa7,0xc8,0x13, - 0x85,0x6f,0xd2,0xfa,0x3a,0x24,0x18,0xf2,0x90,0x14,0x94,0x0f,0x98,0x15,0x98,0x15, - 0xa0,0x14,0xa0,0x14,0xa4,0x17,0xa4,0x17,0xa8,0x09,0xa8,0x09,0x9c,0x16,0x9c,0x16, - 0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16,0xac,0x16, - 0x73,0x20,0x00,0x0c,0x00,0x0a,0x1f,0x00,0x72,0x20,0xfb,0x87,0x00,0x02,0x0f,0x00, - 0x36,0x20,0x04,0x8c,0x00,0x00,0x06,0x00,0x36,0x28,0x05,0x8b,0x00,0x00,0x06,0x00, - 0x36,0x30,0x06,0x8a,0x00,0x00,0x06,0x00,0x36,0x3c,0x07,0x89,0x00,0x00,0x06,0x00, - 0x36,0x48,0x08,0x88,0x00,0x00,0x06,0x00,0x24,0x00,0x06,0x08,0x00,0x00,0x0a,0x00, - 0x40,0x70,0xfa,0x10,0x00,0x00,0x0a,0x00,0x70,0x04,0x00,0x00,0x00,0x00,0x08,0x00, - 0x42,0x18,0xfd,0x06,0x00,0x01,0x0c,0x00,0x42,0x04,0x03,0x06,0x00,0x01,0x0c,0x00, - 0x56,0x0c,0xff,0x8c,0x00,0x02,0x0f,0x00,0x05,0x00,0x02,0x20,0x00,0x01,0x0c,0x00, - 0x41,0x20,0xff,0x86,0xfe,0x1c,0x0f,0xff,0x70,0x00,0x01,0x0c,0x00,0x01,0x08,0x00, - 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x57,0x5c,0x61,0x67,0x6d,0x74,0x7b, - 0x82,0x8a,0x92,0x9a,0xa3,0xad,0xb8,0xc3,0xd4,0x3b,0xf3,0x3b,0x58,0x3c,0x95,0x3c, - 0xde,0x3c,0xdf,0x3c,0xf1,0x02,0xf2,0x03,0xf3,0x0f,0xf4,0x01,0x82,0x70,0x69,0x82, - 0x70,0x69,0x83,0x70,0x6a,0x83,0x70,0x6a,0x82,0x70,0x69,0x82,0x70,0x69,0x89,0x8b, - 0x8d,0x8e,0xff,0xf1,0x02,0xf2,0x03,0xf3,0x0f,0xf4,0x01,0x67,0x50,0x30,0x47,0x30, - 0x67,0x50,0x30,0x47,0x30,0x67,0x50,0x30,0x47,0x30,0x4b,0x10,0x4c,0x10,0x4d,0x10, - 0x4e,0x10,0x67,0x50,0x30,0x47,0x30,0x67,0x50,0x30,0x47,0x30,0x67,0x50,0x30,0x47, - 0x30,0x4b,0x10,0x4c,0x10,0x4d,0x10,0x4e,0x10,0x67,0x50,0x30,0x47,0x30,0x67,0x50, - 0x30,0x47,0x30,0x67,0x50,0x30,0x47,0x30,0x4b,0x10,0x4c,0x10,0x4d,0x10,0x4e,0x10, - 0x77,0x20,0x4e,0x10,0x4d,0x10,0x4c,0x10,0x4a,0x10,0x47,0x10,0x46,0x10,0x65,0x30, - 0x66,0x30,0x67,0x40,0x70,0xf0,0xfb,0x3b,0xf1,0x00,0xf2,0x02,0xf3,0x0f,0xf4,0x00, - 0x42,0x50,0x4e,0x50,0x49,0x50,0x46,0x50,0x4e,0x49,0x70,0x66,0x70,0x43,0x50,0x4f, - 0x50,0x4a,0x50,0x47,0x50,0x4f,0x4a,0x70,0x67,0x70,0x42,0x50,0x4e,0x50,0x49,0x50, - 0x46,0x50,0x4e,0x49,0x70,0x66,0x70,0x45,0x46,0x47,0x50,0x47,0x48,0x49,0x50,0x49, - 0x4a,0x4b,0x50,0x6e,0xff,0xf1,0x01,0xf2,0x01,0xf3,0x0f,0xf4,0x00,0x26,0x67,0x26, - 0x67,0x26,0x67,0x23,0x44,0x42,0x47,0x30,0x67,0x2a,0x8b,0x70,0x26,0x67,0x26,0x67, - 0x26,0x67,0x23,0x44,0x42,0x47,0x30,0x67,0x23,0x84,0x70,0x26,0x67,0x26,0x67,0x26, - 0x67,0x23,0x44,0x42,0x47,0x30,0x67,0x29,0x6a,0x2b,0x6c,0x30,0x2c,0x6d,0x40,0x2b, - 0x6c,0x29,0x6a,0x67,0x20,0x29,0x6a,0x40,0x26,0x87,0x70,0xf0,0x9d,0x3c,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x96,0x03,0x42,0x4f,0x4e,0x55,0x53,0x40,0x50,0x41,0x43,0x3b,0x4d,0x41,0x4e,0x40, - 0x46,0x4f,0x52,0x40,0x40,0x40,0x30,0x30,0x30,0x40,0x5d,0x5e,0x5f,0x2f,0x8e,0x2f, - 0x80,0x3a,0x03,0x5c,0x40,0x31,0x39,0x38,0x30,0x40,0x4d,0x49,0x44,0x57,0x41,0x59, - 0x40,0x4d,0x46,0x47,0x25,0x43,0x4f,0x25,0x2f,0x83,0x2f,0x80,0x3d,0x03,0x5c,0x40, - 0x31,0x39,0x38,0x30,0x40,0x4d,0x49,0x44,0x57,0x41,0x59,0x40,0x4d,0x46,0x47,0x25, - 0x43,0x4f,0x25,0x2f,0x83,0x2f,0x80,0xc5,0x02,0x3b,0x53,0x48,0x41,0x44,0x4f,0x57, - 0x40,0x40,0x40,0x2f,0x81,0x2f,0x80,0x65,0x01,0x26,0x42,0x4c,0x49,0x4e,0x4b,0x59, - 0x26,0x40,0x2f,0x81,0x2f,0x80,0xc8,0x02,0x3b,0x53,0x50,0x45,0x45,0x44,0x59,0x40, - 0x40,0x40,0x2f,0x83,0x2f,0x80,0x68,0x01,0x26,0x50,0x49,0x4e,0x4b,0x59,0x26,0x40, - 0x40,0x2f,0x83,0x2f,0x80,0xcb,0x02,0x3b,0x42,0x41,0x53,0x48,0x46,0x55,0x4c,0x40, - 0x40,0x2f,0x85,0x2f,0x80,0x6b,0x01,0x26,0x49,0x4e,0x4b,0x59,0x26,0x40,0x40,0x40, - 0x2f,0x85,0x2f,0x80,0xce,0x02,0x3b,0x50,0x4f,0x4b,0x45,0x59,0x40,0x40,0x40,0x40, - 0x2f,0x87,0x2f,0x80,0x6e,0x01,0x26,0x43,0x4c,0x59,0x44,0x45,0x26,0x40,0x40,0x2f, - 0x87,0x2f,0x80,0xc5,0x02,0x3b,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x3b,0x2f, - 0x81,0x2f,0x80,0x65,0x01,0x26,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x26,0x2f,0x81, - 0x2f,0x80,0xc8,0x02,0x3b,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x3b,0x2f,0x83, - 0x2f,0x80,0x68,0x01,0x26,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x26,0x2f,0x83,0x2f, - 0x80,0xcb,0x02,0x3b,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x3b,0x2f,0x85,0x2f, - 0x80,0x6b,0x01,0x26,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x26,0x2f,0x85,0x2f,0x80, - 0xce,0x02,0x3b,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x3b,0x2f,0x87,0x2f,0x80, - 0x6e,0x01,0x26,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x26,0x2f,0x87,0x2f,0x80,0x0c, - 0x03,0x50,0x41,0x43,0x3b,0x4d,0x41,0x4e,0x2f,0x8f,0x2f,0x80,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x8d,0x00,0x75,0x73, -}; - -// graphics_rom (8192 bytes) -const char __at (0x4000) graphics_rom[0x2000] = {/*{w:8,h:8,np:2,count:256,brev:1}*/ - 0xcc,0xee,0x11,0x11,0x33,0xee,0xcc,0x00,0x11,0x33,0x66,0x44,0x44,0x33,0x11,0x00, - 0x11,0x11,0xff,0xff,0x11,0x11,0x00,0x00,0x00,0x00,0x77,0x77,0x22,0x00,0x00,0x00, - 0x11,0x99,0xdd,0xdd,0xff,0x77,0x33,0x00,0x33,0x77,0x55,0x44,0x44,0x66,0x22,0x00, - 0x66,0xff,0x99,0x99,0x99,0x33,0x22,0x00,0x44,0x66,0x77,0x55,0x44,0x44,0x00,0x00, - 0x44,0xff,0xff,0x44,0x44,0xcc,0xcc,0x00,0x00,0x77,0x77,0x66,0x33,0x11,0x00,0x00, - 0xee,0xff,0x11,0x11,0x11,0x33,0x22,0x00,0x00,0x55,0x55,0x55,0x55,0x77,0x77,0x00, - 0x66,0xff,0x99,0x99,0x99,0xff,0xee,0x00,0x00,0x44,0x44,0x44,0x66,0x33,0x11,0x00, - 0x00,0x00,0x88,0xff,0x77,0x00,0x00,0x00,0x66,0x77,0x55,0x44,0x44,0x66,0x66,0x00, - 0x66,0x77,0xdd,0xdd,0x99,0x99,0x66,0x00,0x00,0x33,0x44,0x44,0x55,0x77,0x33,0x00, - 0xcc,0xee,0xbb,0x99,0x99,0x99,0x00,0x00,0x33,0x77,0x44,0x44,0x44,0x77,0x33,0x00, - 0xff,0xff,0x44,0x44,0x44,0xff,0xff,0x00,0x11,0x33,0x66,0x44,0x66,0x33,0x11,0x00, - 0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00,0x33,0x77,0x44,0x44,0x44,0x77,0x77,0x00, - 0x22,0x33,0x11,0x11,0x33,0xee,0xcc,0x00,0x22,0x66,0x44,0x44,0x66,0x33,0x11,0x00, - 0xcc,0xee,0x33,0x11,0x11,0xff,0xff,0x00,0x11,0x33,0x66,0x44,0x44,0x77,0x77,0x00, - 0x11,0x99,0x99,0x99,0xff,0xff,0x00,0x00,0x44,0x44,0x44,0x44,0x77,0x77,0x00,0x00, - 0x00,0x88,0x88,0x88,0x88,0xff,0xff,0x00,0x44,0x44,0x44,0x44,0x44,0x77,0x77,0x00, - 0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, - 0x00,0x00,0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00, - 0x00,0x00,0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00, - 0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x0e,0x0c,0x03,0x07,0x0f,0x0f,0x0f,0x0f,0x07,0x03, - 0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x0e,0x0c,0x03,0x07,0x0f,0x0f,0x0f,0x0f,0x07,0x03, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x77,0xff,0xff,0xff,0xee,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33, - 0xee,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x33,0x33,0x33,0x11,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0xcc,0xee,0xff,0xff,0xff, - 0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x77,0x33,0x22,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xdd,0x00,0xee,0xdd,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xdd,0x00,0xee,0xdd,0x00,0x00, - 0xff,0xff,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0xff,0xcc,0xcc,0xcc,0xcc,0xff,0xff, - 0xbb,0xbb,0xbb,0xbb,0xff,0xff,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0x11,0x00,0x00, - 0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0xcc,0xcc,0xff,0xff,0x00,0x00,0x77,0xff, - 0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0x77,0xff,0xcc,0xcc,0xff,0xff, - 0x33,0x33,0x33,0x33,0x33,0x33,0xff,0xee,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xff,0x77, - 0x33,0x33,0x33,0x33,0xff,0xee,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xff,0x77,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x88,0xcc,0x22,0x22,0x66,0xcc,0x88,0x00,0x33,0x77,0xcc,0x88,0x88,0x77,0x33,0x00, - 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x00,0x00,0x00, - 0x22,0x22,0xaa,0xaa,0xee,0xee,0x66,0x00,0x66,0xff,0xbb,0x99,0x99,0xcc,0x44,0x00, - 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x88,0xdd,0xff,0xbb,0x99,0x88,0x00,0x00, - 0x88,0xee,0xee,0x88,0x88,0x88,0x88,0x00,0x00,0xff,0xff,0xcc,0x66,0x33,0x11,0x00, - 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x11,0xbb,0xaa,0xaa,0xaa,0xee,0xee,0x00, - 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x00,0x99,0x99,0x99,0xdd,0x77,0x33,0x00, - 0x00,0x00,0x00,0xee,0xee,0x00,0x00,0x00,0xcc,0xee,0xbb,0x99,0x88,0xcc,0xcc,0x00, - 0xcc,0xee,0xaa,0xaa,0x22,0x22,0xcc,0x00,0x00,0x66,0x99,0x99,0xbb,0xff,0x66,0x00, - 0x88,0xcc,0x66,0x22,0x22,0x22,0x00,0x00,0x77,0xff,0x99,0x99,0x99,0xff,0x66,0x00, - 0x00,0x00,0x00,0x00,0x88,0x44,0x22,0x00,0x88,0x44,0x22,0x11,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x00,0x00,0x00, - 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0x88, - 0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xff, - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xee,0xee,0x88,0x88,0x88,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0xcc,0x77,0x33,0x00, - 0xcc,0xee,0x22,0x22,0x22,0xee,0xee,0x00,0x66,0xff,0x99,0x99,0x99,0xff,0xff,0x00, - 0x44,0x66,0x22,0x22,0x66,0xcc,0x88,0x00,0x44,0xcc,0x88,0x88,0xcc,0x77,0x33,0x00, - 0x88,0xcc,0x66,0x22,0x22,0xee,0xee,0x00,0x33,0x77,0xcc,0x88,0x88,0xff,0xff,0x00, - 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x88,0x99,0x99,0x99,0xff,0xff,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x88,0x99,0x99,0x99,0x99,0xff,0xff,0x00, - 0xee,0xee,0x22,0x22,0x66,0xcc,0x88,0x00,0x99,0x99,0x99,0x88,0xcc,0x77,0x33,0x00, - 0xee,0xee,0x00,0x00,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x11,0x11,0xff,0xff,0x00, - 0x22,0x22,0xee,0xee,0x22,0x22,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, - 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x88,0xcc,0x66,0x33,0x11,0xff,0xff,0x00, - 0x22,0x22,0x22,0x22,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00, - 0xee,0xee,0x00,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x77,0x33,0x77,0xff,0xff,0x00, - 0xee,0xee,0xcc,0x88,0x00,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x77,0xff,0xff,0x00, - 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, - 0x00,0x88,0x88,0x88,0x88,0xee,0xee,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0xff,0x00, - 0xaa,0xcc,0xee,0xaa,0x22,0xee,0xcc,0x00,0x77,0xff,0x88,0x88,0x88,0xff,0x77,0x00, - 0x22,0x66,0xee,0xcc,0x88,0xee,0xee,0x00,0x77,0xff,0x99,0x88,0x88,0xff,0xff,0x00, - 0xcc,0xee,0x22,0x22,0x22,0x66,0x44,0x00,0x00,0x55,0xdd,0x99,0x99,0xff,0x66,0x00, - 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0x88,0x88,0xff,0xff,0x88,0x88,0x00,0x00, - 0xcc,0xee,0x22,0x22,0x22,0xee,0xcc,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0x00, - 0x00,0x88,0xcc,0xee,0xcc,0x88,0x00,0x00,0xff,0xff,0x11,0x00,0x11,0xff,0xff,0x00, - 0xee,0xee,0xcc,0x88,0xcc,0xee,0xee,0x00,0xff,0xff,0x11,0x33,0x11,0xff,0xff,0x00, - 0x66,0xee,0xcc,0x88,0xcc,0xee,0x66,0x00,0xcc,0xee,0x77,0x33,0x77,0xee,0xcc,0x00, - 0x00,0x00,0xee,0xee,0x00,0x00,0x00,0x00,0xee,0xff,0x11,0x11,0xff,0xee,0x00,0x00, - 0x22,0x22,0x22,0xaa,0xee,0xee,0x66,0x00,0xcc,0xee,0xff,0xbb,0x99,0x88,0x88,0x00, - 0x00,0x00,0x00,0x00,0x88,0x22,0x00,0x00,0x00,0xcc,0xee,0xff,0x33,0x00,0x00,0x00, - 0xcc,0x22,0x11,0x55,0x55,0x99,0x22,0xcc,0x33,0x44,0x88,0xaa,0xaa,0x99,0x44,0x33, - 0x00,0x00,0x00,0x00,0x88,0x88,0x88,0xee,0x22,0x22,0x00,0x11,0x22,0x22,0x22,0x33, - 0xaa,0xaa,0xaa,0x22,0x00,0x00,0x00,0xee,0x22,0x22,0x22,0x11,0x00,0x22,0x22,0x33, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22, - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x33,0x77,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00, - 0x33,0x33,0x77,0x77,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, - 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00, - 0x33,0x33,0x33,0x33,0x33,0x77,0x77,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, - 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0xee,0xee,0xee,0x00,0x00,0x00, - 0x33,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xee,0xee,0xee,0x66,0x22,0x22,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x22,0xcc,0x00,0x22,0xee,0x22,0x00,0x00,0x88,0x77,0x00,0x00,0xff,0x44,0x00,0x00, - 0x22,0xcc,0x00,0xcc,0x22,0x22,0x22,0x44,0x88,0x77,0x00,0x88,0xdd,0xaa,0x88,0x88, - 0x22,0xcc,0x00,0xcc,0x22,0x22,0x22,0x44,0x88,0x77,0x00,0x99,0xaa,0xaa,0xaa,0xee, - 0x22,0xcc,0x00,0x00,0x00,0xee,0x00,0x00,0x88,0x77,0x00,0xcc,0xbb,0x88,0x88,0xcc, - 0x00,0xcc,0x22,0x22,0xcc,0x00,0xcc,0x22,0x00,0x77,0x88,0x88,0x77,0x00,0x77,0x88, - 0xcc,0x22,0x22,0xcc,0x00,0x22,0xee,0x22,0x77,0x88,0x88,0x77,0x00,0x00,0xff,0x44, - 0x66,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x66,0x00,0x00,0x00,0x00,0x00,0x00, - 0xcc,0x22,0x22,0xcc,0x00,0x22,0x22,0xaa,0x77,0x88,0x88,0x77,0x00,0x66,0x99,0x88, - 0x22,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00, - 0xcc,0x22,0x22,0xcc,0x00,0xcc,0x22,0x22,0x77,0x88,0x88,0x77,0x00,0x88,0xdd,0xaa, - 0x22,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0xee,0x00,0x00,0x00,0x00,0x00,0x00, - 0xcc,0x22,0x22,0xcc,0x00,0xcc,0x22,0x22,0x77,0x88,0x88,0x77,0x00,0x99,0xaa,0xaa, - 0x22,0xcc,0x00,0xcc,0x22,0x22,0xcc,0x00,0x88,0x77,0x00,0x77,0x88,0x88,0x77,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x88, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0x20,0x90,0x80,0x00,0x00,0x30,0x30,0x10,0x10,0x00,0x00, - 0x41,0x21,0x12,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x08,0x0c,0x0c,0x8c,0x0c,0x00,0x00,0x00,0x07,0x0f,0x0f,0xc3,0x1f, - 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x0f,0x2f,0x4f,0x0e,0x00,0x00, - 0x00,0x00,0x00,0x07,0x4f,0x0f,0xa7,0x87,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10, - 0xd3,0x87,0x97,0x0f,0x2f,0x07,0x00,0x00,0x33,0x10,0x10,0x10,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x08,0x0e,0x8e,0x1f,0x0f, - 0x0c,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x4f,0x1f,0x0f,0x4f,0x0e,0x08,0x00,0x00, - 0x00,0x00,0x01,0x03,0x87,0x87,0x87,0x47,0x00,0x00,0x00,0x10,0x10,0x30,0x30,0x10, - 0xef,0x47,0x07,0x07,0x03,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x08,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0c,0x0c,0x0c,0x08,0x08,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x00, - 0x00,0x00,0x00,0x01,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02, - 0x0f,0x0b,0x0c,0x0f,0x01,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x0c,0x68,0x68,0x68,0x6e,0x6e,0x00,0x00,0x03,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x68,0x68,0x68,0x68,0x68,0x0c,0x00,0x00,0x0f,0x0f,0x07,0x0c,0x0f,0x03,0x00,0x00, - 0x00,0x00,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x20, - 0x87,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x10,0x00,0x01,0x01,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x0c,0x0f,0xcf,0x2f,0x0f,0x0f, - 0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x00,0x00, - 0x00,0x00,0x00,0x30,0x52,0x61,0xf1,0xbc,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03, - 0xd2,0x63,0x52,0x30,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0x48,0x84,0xc2,0xe0,0x00,0x00,0xe0,0xb4,0x7c,0xe1,0x5b,0xa5, - 0x68,0x84,0xc0,0x80,0x00,0x00,0x00,0x00,0xf5,0xe1,0x5a,0xbe,0xe0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0f,0x33,0x31,0x71,0xf3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xf3,0x71,0x31,0x33,0x0f,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x8e,0xcf,0x88, - 0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x88,0xcf,0x8e,0x0c,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0xf1,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20, - 0xe0,0xf1,0xe0,0xe0,0x00,0x00,0x00,0x00,0x20,0x20,0x10,0x10,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xdd, - 0x22,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xef,0x67,0x77,0x33,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x11,0x23,0x67,0x77,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x79,0x69,0x0f,0x1f,0xff,0xff,0x33,0x00, - 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x33,0x79,0x69,0x0f,0x1f,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0x88,0x00,0x88,0xcc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0x88,0x00,0x88,0xcc,0xcc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0x00,0x33,0x74,0x74,0xf8,0xf9,0xf9,0xf9, - 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xff,0xf9,0xf9,0xf9,0xf8,0x74,0x74,0x33,0x00, - 0xff,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xff, - 0x00,0xcc,0xe2,0xe2,0xf1,0xf9,0xf9,0xf9,0xff,0xf0,0xf0,0xfe,0x11,0x00,0x00,0x00, - 0xf9,0xf9,0xf9,0xf1,0xe2,0xe2,0xcc,0x00,0x00,0x00,0x00,0x11,0xfe,0xf0,0xf0,0xff, - 0xff,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xf8,0xff,0xf0,0xf0,0xfe,0x11,0x00,0x00,0x00, - 0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x11,0xfe,0xf0,0xf0,0xff, - 0xff,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1, - 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xff,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, - 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xe2,0xe2,0xf1,0xf1,0xf1,0xf1, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xf1,0xe2,0xe2,0xcc,0x00, - 0x00,0x33,0x74,0x74,0xf8,0xf8,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xf8,0xf8,0xf8,0x74,0x74,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1, - 0x00,0x00,0x00,0x00,0x33,0x74,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xf8,0x74,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf0,0x00,0x00,0x00,0x00,0xff,0xf0,0xf0,0xf0, - 0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00,0xf0,0xf0,0xf0,0xff,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xe2,0xf1,0xf1, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xe2,0xcc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0xff,0xf8,0xf8,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf9,0xf8,0xf8,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xf1,0xf1,0xf9, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0xf1,0xf1,0xff,0x00,0x00,0x00,0x00, - 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0, - 0xf0,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0xf0,0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1, - 0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0x00,0x00,0x00,0x11,0xfe,0xf0,0xf0,0xf0, - 0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xfe,0x11,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x33,0x74,0xf8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf8,0xf8,0x74,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xe2,0xf1,0xf1, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf1,0xf1,0xe2,0xcc,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x88,0xf7,0xf0,0xf0,0xf0,0xf9,0xf9,0xf9,0xf8,0xf8,0xf8,0xf8,0xf8, - 0xf0,0xf0,0xf0,0xf7,0x88,0x00,0x00,0x00,0xf8,0xf8,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x08,0x0c,0x0c,0x8c,0x0c,0x00,0x00,0x30,0x30,0x10,0x10,0x00,0x00, - 0x00,0x00,0x00,0x00,0xc0,0x20,0x90,0x80,0x00,0x00,0x00,0x07,0x0f,0x0f,0xc3,0x1f, - 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x41,0x21,0x12,0x03,0x03,0x01,0x00,0x00,0x07,0x08,0x0f,0x2f,0x4f,0x0e,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10, - 0x00,0x00,0x00,0x07,0x4f,0x0f,0xa7,0x87,0x00,0x00,0x00,0x08,0x0e,0x8e,0x1f,0x0f, - 0x0c,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x33,0x10,0x10,0x10,0x00,0x00,0x00,0x00, - 0xd3,0x87,0x97,0x0f,0x2f,0x07,0x00,0x00,0x4f,0x1f,0x0f,0x4f,0x0e,0x08,0x00,0x00, - 0x00,0x00,0x00,0x08,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x00,0x10,0x10,0x30,0x30,0x10, - 0x00,0x00,0x01,0x03,0x87,0x87,0x87,0x47,0x00,0x00,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0c,0x0c,0x0c,0x08,0x08,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xef,0x47,0x07,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x00, - 0x00,0x00,0x0c,0x68,0x68,0x68,0x6e,0x6e,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02, - 0x00,0x00,0x00,0x01,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x03,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x68,0x68,0x68,0x68,0x68,0x0c,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, - 0x0f,0x0b,0x0c,0x0f,0x01,0x00,0x00,0x00,0x0f,0x0f,0x07,0x0c,0x0f,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x08,0x0c,0x0c,0x0c,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x20, - 0x00,0x00,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x0c,0x0f,0xcf,0x2f,0x0f,0x0f, - 0x08,0x0c,0x0c,0x08,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x01,0x01,0x00,0x00,0x00, - 0x87,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0c,0x00,0x00, - 0x00,0x00,0x00,0x80,0x48,0x84,0xc2,0xe0,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03, - 0x00,0x00,0x00,0x30,0x52,0x61,0xf1,0xbc,0x00,0x00,0xe0,0xb4,0x7c,0xe1,0x5b,0xa5, - 0x68,0x84,0xc0,0x80,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00, - 0xd2,0x63,0x52,0x30,0x00,0x00,0x00,0x00,0xf5,0xe1,0x5a,0xbe,0xe0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x0f,0x33,0x31,0x71,0xf3,0x00,0x00,0x00,0x08,0x0c,0x8e,0xcf,0x88, - 0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xf0,0xf3,0x71,0x31,0x33,0x0f,0x00,0x00,0xff,0x88,0xcf,0x8e,0x0c,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xcc,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x20, - 0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0xf1,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xdd, - 0x22,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x10,0x10,0x00,0x00,0x00,0x00, - 0xe0,0xf1,0xe0,0xe0,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xee,0xcc,0x88,0x8c,0x4e,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0x7f,0xbf,0x7f,0xaf,0x5f,0x7f,0xff, - 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, - 0x00,0xcc,0xee,0xee,0x8c,0x08,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0x7f,0xbf,0x7f,0xaf,0x5f,0x7f,0xff, - 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, - 0x00,0x00,0x00,0xee,0xee,0xee,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x60,0x69,0x0f,0x71,0x69,0x0f,0x17,0x00,0x00,0x00,0x88,0xee,0xff,0xff,0xff, - 0xcc,0xcc,0xcc,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x77,0x33,0x00,0x00,0x00, - 0x00,0xee,0xee,0xee,0xcc,0xcc,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x60,0x69,0x0f,0x71,0x69,0x0f,0x17,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, - 0xcc,0xcc,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x33,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x44,0xee,0xee,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x00, - 0xee,0x66,0x66,0xee,0xee,0xee,0x66,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x44,0xee,0xee,0xee,0xee,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x66,0x66,0x66,0x66,0xee,0xee,0x66,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x07,0x07,0x03, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x0f,0x0f,0x0f,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x07,0x0f,0x0f,0x0f,0x0f, - 0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x0e, - 0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0c,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x0f,0x0f,0x0f,0x0e,0x0c,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x0f, - 0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x07,0x07,0x03, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x0f,0x0f,0x0f,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, - 0x00,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x00,0x00,0x08,0x08,0x0c,0x0c,0x0e,0x0e, - 0x00,0x00,0x00,0x08,0x08,0x08,0x0c,0x0c,0x03,0x07,0x07,0x07,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0c,0x07,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x0f,0x0f,0x0f,0x0e,0x0c,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x00,0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f, - 0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x07,0x07,0x03, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x0f,0x0f,0x0f,0x07,0x03,0x01,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x07,0x00, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03, - 0x00,0x00,0x01,0x03,0x07,0x0f,0x0f,0x0f,0x00,0x07,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x03,0x07,0x07,0x07,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0c,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x00,0x0f,0x0f,0x0f,0x0e,0x0c,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0c,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x00,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0x00,0x08,0x0c,0x0e,0x0f,0x0f,0x0f, - 0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, - 0x00,0xe0,0xc0,0x80,0xc0,0xe0,0xe0,0x80,0x00,0x00,0x00,0x10,0x30,0x30,0x70,0x70, - 0x00,0x10,0xf0,0xf0,0xf0,0xf3,0xf3,0xf0,0x00,0xf0,0xf1,0xf2,0xf2,0xf1,0xf1,0xf2, - 0x80,0xe0,0xe0,0xc0,0x80,0xc0,0xe0,0x00,0x70,0x70,0x30,0x30,0x10,0x00,0x00,0x00, - 0xf0,0xf3,0xf3,0xf0,0xf0,0xf0,0x10,0x00,0xf2,0xf1,0xf1,0xf2,0xf2,0xf1,0xf0,0x00, - 0x00,0xc0,0xe0,0xe0,0xc0,0x80,0xc0,0xe0,0x00,0x00,0x00,0x10,0x30,0x30,0x70,0x70, - 0x00,0x10,0xf0,0xf0,0xf0,0xf3,0xf3,0xf0,0x00,0xf0,0xf1,0xf2,0xf2,0xf1,0xf1,0xf2, - 0xe0,0xc0,0x80,0xc0,0xe0,0xe0,0xc0,0x00,0x70,0x70,0x30,0x30,0x10,0x00,0x00,0x00, - 0xf0,0xf3,0xf3,0xf0,0xf0,0xf0,0x10,0x00,0xf2,0xf1,0xf1,0xf2,0xf2,0xf1,0xf0,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x00,0xff,0xff,0x7f,0x7f,0xff,0xff,0xff, - 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x11,0x00,0xff,0x7f,0x7f,0xff,0xff,0xff,0xff,0x00, - 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x00,0xff,0xff,0x7f,0x7f,0xff,0xff,0xff, - 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xbc,0x3c,0x0f,0x8f,0xff,0xff,0x11,0x00,0xff,0x7f,0x7f,0xff,0xff,0xff,0xff,0x00, - 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x00,0xff,0xff,0x7f,0xf3,0xf3,0x7f,0xff, - 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x11,0x00,0xff,0x7f,0xf3,0xf3,0x7f,0xff,0xff,0x00, - 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x00,0xff,0xff,0x7f,0xf3,0xf3,0x7f,0xff, - 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xff,0xcf,0x8f,0x8f,0xcf,0xff,0x11,0x00,0xff,0x7f,0xf3,0xf3,0x7f,0xff,0xff,0x00, - 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0xff,0xff,0xff,0xff,0x7f,0x7f,0xff, - 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, - 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x11,0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x00,0xff,0xff,0xff,0xff,0x7f,0x7f,0xff, - 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0xff,0xff,0x8f,0x0f,0x3c,0xbc,0x11,0x00,0xff,0xff,0xff,0x7f,0x7f,0xff,0xff,0x00, - 0x00,0xee,0xcc,0x88,0xcc,0xee,0xee,0x88,0x00,0x00,0x00,0x01,0x30,0x30,0x67,0x77, - 0x00,0x11,0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x67,0x30,0x30,0x01,0x00,0x00,0x00, - 0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0xcc,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x00,0x00,0x01,0x30,0x30,0x67,0x77, - 0x00,0x11,0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xee,0xcc,0x88,0xcc,0xee,0xee,0xcc,0x00,0x77,0x67,0x30,0x30,0x01,0x00,0x00,0x00, - 0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x08,0x07,0x00,0x06,0x09,0x08,0x08,0x06,0x02,0x0c,0x00,0x02,0x02,0x0a,0x06,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x08,0x07,0x00,0x00,0x0f,0x04,0x02,0x01,0x02,0x0c,0x00,0x08,0x0e,0x08,0x08,0x08, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x08,0x07,0x00,0x06,0x09,0x09,0x09,0x06,0x02,0x0c,0x00,0x0c,0x02,0x02,0x02,0x0c, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x07,0x08,0x08,0x07,0x00,0x07,0x08,0x08,0x0c,0x02,0x02,0x0c,0x00,0x0c,0x02,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x07,0x00,0x09,0x09,0x09,0x07,0x00,0x0f,0x0c,0x00,0x0c,0x02,0x02,0x0c,0x00,0x0e, - 0x00,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x77, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11, - 0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, - 0x88,0xcc,0xee,0xff,0xff,0xff,0x77,0x00,0x33,0x77,0xff,0xff,0xff,0xff,0xcc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x00,0x77,0xff,0xff,0xff,0xee,0xcc,0x00,0x00,0xcc,0xcc,0x88,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, - 0x88,0xcc,0xee,0xff,0xff,0xff,0x77,0x00,0x00,0x00,0x00,0x00,0x88,0xcc,0xcc,0x00, - 0x00,0x00,0x00,0x00,0x88,0x88,0xcc,0xcc,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x00,0x00,0x88,0x88,0xcc,0xcc,0xcc,0x00,0x00,0x00,0x33,0x33,0x77,0x77,0x77, - 0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, - 0xee,0xee,0xee,0xff,0xff,0xff,0x77,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0x00, - 0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x00,0x77,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xcc,0xff,0xff,0xff,0xee,0x00, - 0x00,0x00,0x00,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, - 0xcc,0xff,0xff,0xff,0xff,0xff,0x77,0x00,0x00,0x00,0xee,0xff,0xff,0xff,0xcc,0x00, - 0x00,0x00,0x00,0x00,0x88,0x88,0xcc,0xcc,0x00,0x00,0x00,0x11,0x33,0x33,0x77,0x77, - 0x00,0x00,0x77,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xcc,0xff,0xff,0xff,0xff,0xff, - 0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x77,0x77,0x77,0x33,0x33,0x11,0x00,0x00, - 0xff,0xff,0xff,0xff,0xff,0xff,0x77,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xcc,0x00, - 0x01,0x02,0x04,0x0c,0x08,0x84,0x84,0x08,0x01,0x00,0x00,0x00,0x09,0x05,0x03,0x00, - 0x00,0x08,0x07,0x78,0xfa,0xf5,0xea,0x7b,0x00,0x00,0x00,0x0b,0xb5,0xea,0x77,0x32, - 0x08,0x84,0x84,0x08,0x0c,0x04,0x02,0x01,0x00,0x01,0x01,0x01,0x03,0x04,0x08,0x00, - 0x26,0x5d,0xb2,0x7c,0x07,0x00,0x00,0x00,0x72,0xe6,0xcc,0xfc,0xe3,0x0e,0x00,0x00, - 0x00,0x60,0x60,0xe0,0xe0,0xe8,0xcc,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x67,0x77, - 0x00,0x11,0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x00,0x00,0xf0,0xf8,0xfd,0xff,0xff,0xff, - 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x67,0x00,0x00,0x01,0x00,0x00,0x00, - 0xff,0x3f,0x1f,0x1f,0x3f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x60,0x60,0xe0,0xe0,0xe8,0xcc,0x88,0x00,0x00,0x00,0x11,0x23,0x23,0x77,0x77, - 0x00,0x11,0xff,0x1d,0x0c,0x0f,0x1f,0xff,0x00,0x00,0xf0,0xf8,0xfd,0xff,0xff,0xff, - 0x88,0xee,0xee,0xcc,0x88,0xcc,0xee,0x00,0x77,0x77,0x23,0x23,0x11,0x00,0x00,0x00, - 0xff,0x1d,0x0c,0x0f,0x1f,0xff,0x11,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x00,0x00,0x00,0x00, - 0x00,0x00,0xff,0xff,0xff,0x77,0x33,0x11,0x00,0x00,0x00,0xcc,0xee,0xee,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x00, - 0x00,0x11,0x33,0x77,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xee,0xee,0xcc,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x77,0xff,0x77,0x77,0x33,0x11,0x11,0x00,0x00,0xcc,0xee,0xee,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x11,0x11,0x33,0x77,0x77,0xff,0x77,0xee,0xff,0xff,0xff,0xee,0xee,0xcc,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x33,0x33,0x33,0x11,0x11,0x11,0x00,0x00,0x88,0xcc,0xee,0xee,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x11,0x11,0x11,0x33,0x33,0x33,0xee,0xff,0xff,0xff,0xee,0xee,0xcc,0x88, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0xcc,0xee,0xee,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0xee,0xff,0xff,0xff,0xff,0xee,0xee,0xcc, - 0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x77,0x77,0x77,0xff,0xff,0xff, - 0x00,0x88,0x88,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x77,0x77,0x77,0x66, - 0x00,0x00,0x88,0x88,0xcc,0xcc,0xcc,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x77,0x77,0xff, - 0x00,0x88,0xcc,0xcc,0xcc,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x77,0x77,0x33,0x33,0x33,0x11, - 0x00,0x00,0xcc,0xee,0xee,0xee,0xee,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x77, - 0x88,0xcc,0xee,0xee,0xee,0xee,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x33,0x33,0x11,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x44,0xee,0xee,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x77, - 0xcc,0xee,0xee,0xee,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x77,0x33,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33, - 0xcc,0xee,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x33,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x22,0x44,0x11,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x11,0x00,0x00,0x00,0x11,0x99,0x44,0x00,0x00, - 0x00,0x22,0x11,0x88,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x11,0x22,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x22,0x22,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - -// palette_rom (32 bytes) -const char __at (0x6000) palette_rom[0x20] = {/*{pal:444}*/ - 0x00,0x07,0x66,0xff,0x00,0x0f,0xcc,0xff,0x00,0x3f,0x00,0xff,0x3f,0x3f,0x00,0xff, - 0x00,0x3f,0x3f,0xff,0x3f,0x00,0x3f,0xff,0x3f,0x3f,0x3f,0xff,0x3f,0x3f,0x0f,0xff, -}; From 5e030d97075c9e4fe6100ed87d9a229662085b6a Mon Sep 17 00:00:00 2001 From: MikeDX Date: Sat, 1 Aug 2026 15:09:15 +0100 Subject: [PATCH 4/4] Fix Pac-Man hardware map to match real PCB / MAME Treat 0x4800-0x4BFF as open bus and map 1KB work RAM at 0x4C00, use maskable IM2 VBLANK only, and move the shared CRT/linker layout onto that map so demos and Namco soft sound regs stop colliding. Co-authored-by: Cursor --- presets/pacman/chase.c | 32 +------ presets/pacman/climber.c | 24 +---- presets/pacman/hello.c | 25 +----- presets/pacman/music.c | 41 +-------- presets/pacman/pacman_common.c | 160 +++++++++++++++++++++++++++++++-- presets/pacman/pacman_common.h | 10 +++ presets/pacman/siege.c | 37 +------- presets/pacman/solarian.c | 35 +------- presets/pacman/sprites.c | 26 +----- src/machine/pacman.ts | 28 +++--- src/platform/pacman.ts | 7 +- src/worker/platforms.ts | 11 ++- 12 files changed, 202 insertions(+), 234 deletions(-) diff --git a/presets/pacman/chase.c b/presets/pacman/chase.c index b11930b8..b55b91af 100644 --- a/presets/pacman/chase.c +++ b/presets/pacman/chase.c @@ -10,35 +10,6 @@ void music_update(void); -void start(void) __naked { -__asm - ld sp, #0x4fc0 - ld bc, #l__INITIALIZER - ld a, b - or a, c - jr z, 00001$ - ld de, #s__INITIALIZED - ld hl, #s__INITIALIZER - ldir -00001$: - jp _main - .ds 0x66 - (. - _start) - push af - push bc - push de - push hl - ld a, (_video_framecount) - inc a - ld (_video_framecount), a - call _music_update - pop hl - pop de - pop bc - pop af - retn -__endasm; -} - /* 14×13 cells × 16px = 28×26 tiles — fills the Pac-Man playfield */ #define MAP_W 14 #define MAP_H 13 @@ -855,7 +826,8 @@ void game_loop(void) { } void main(void) { - interrupt_enable = 1; + pac_vblank_hook = music_update; + pac_irq_enable(); sound_enable = 1; flip_screen = 0; watchdog = 0; diff --git a/presets/pacman/climber.c b/presets/pacman/climber.c index f1ad1a88..7a231d79 100644 --- a/presets/pacman/climber.c +++ b/presets/pacman/climber.c @@ -12,28 +12,6 @@ //#link "pacman_common.c" #include "pacman_common.h" -void start(void) __naked { -__asm - ld sp, #0x4fc0 - ld bc, #l__INITIALIZER - ld a, b - or a, c - jr z, 00001$ - ld de, #s__INITIALIZED - ld hl, #s__INITIALIZER - ldir -00001$: - jp _main - .ds 0x66 - (. - _start) - push af - ld a, (_video_framecount) - inc a - ld (_video_framecount), a - pop af - retn -__endasm; -} - #define COLS 28 #define VIEW_H 28 #define VIEW_Y0 4 @@ -493,7 +471,7 @@ void play_scene(void) { void main(void) { video_framecount = 0; - interrupt_enable = 1; + pac_irq_enable(); sound_enable = 1; flip_screen = 0; watchdog = 0; diff --git a/presets/pacman/hello.c b/presets/pacman/hello.c index 73d44431..a39aae9d 100644 --- a/presets/pacman/hello.c +++ b/presets/pacman/hello.c @@ -7,29 +7,6 @@ //#link "pacman_common.c" #include "pacman_common.h" -/* Startup + NMI @ 0x0066 (must be in the main object so it links at 0x0000) */ -void start(void) __naked { -__asm - ld sp, #0x4fc0 - ld bc, #l__INITIALIZER - ld a, b - or a, c - jr z, 00001$ - ld de, #s__INITIALIZED - ld hl, #s__INITIALIZER - ldir -00001$: - jp _main - .ds 0x66 - (. - _start) - push af - ld a, (_video_framecount) - inc a - ld (_video_framecount), a - pop af - retn -__endasm; -} - void main(void) { byte x, y, frame; @@ -38,7 +15,7 @@ void main(void) { frame = 0; video_framecount = 0; - interrupt_enable = 1; + pac_irq_enable(); sound_enable = 1; flip_screen = 0; watchdog = 0; diff --git a/presets/pacman/music.c b/presets/pacman/music.c index cbd58bf5..efc9737d 100644 --- a/presets/pacman/music.c +++ b/presets/pacman/music.c @@ -3,7 +3,7 @@ * Score + player logic ported from presets/coleco/musicplayer.c * ("Making Arcade Games in C" style note stream). * - * Music advances in the VBlank NMI so tempo stays steady while the + * Music advances in the VBLANK IRQ hook so tempo stays steady while the * main loop draws meters / handles input. * * Controls: Start restarts the tune. Left/Right pick waveform 0-7. @@ -13,40 +13,6 @@ void music_update(void); -void start(void) __naked { -__asm - ld sp, #0x4fc0 - ld bc, #l__INITIALIZER - ld a, b - or a, c - jr z, 00001$ - ld de, #s__INITIALIZED - ld hl, #s__INITIALIZER - ldir -00001$: - jp _main - .ds 0x66 - (. - _start) - ; NMI @ 0x0066 — frame tick + music player - push af - push bc - push de - push hl - push ix - push iy - ld a, (_video_framecount) - inc a - ld (_video_framecount), a - call _music_update - pop iy - pop ix - pop hl - pop de - pop bc - pop af - retn -__endasm; -} - /* Note → WSG frequency (voice-0 scale, ≈ Hz * 11). Same indexing as Coleco. */ const word note_table[64] = { 1126, 597, 632, 670, 710, 752, 796, 844, @@ -325,7 +291,7 @@ void music_update(void) { void music_start(const byte* music) { byte i; - music_enable = 0; /* pause NMI player while resetting */ + music_enable = 0; /* pause IRQ player while resetting */ music_ptr = music; cur_duration = 0; rr_ch = 2; @@ -361,7 +327,8 @@ void main(void) { byte left_prev = 0; byte right_prev = 0; - interrupt_enable = 1; + pac_vblank_hook = music_update; + pac_irq_enable(); sound_enable = 1; flip_screen = 0; watchdog = 0; diff --git a/presets/pacman/pacman_common.c b/presets/pacman/pacman_common.c index d8ab4405..d7a2f306 100644 --- a/presets/pacman/pacman_common.c +++ b/presets/pacman/pacman_common.c @@ -1,11 +1,145 @@ /* * Shared Pac-Man hardware helpers for 8bitworkshop demos. - * Per-demo graphics are appended to each game .c file. + * + * Owns the reset/IRQ CRT at absolute 0x0000 (_HEADER). Real Pac-Man VBLANK + * is a maskable IRQ (IM2), not NMI — same as MAME. Optional per-game work + * goes through pac_vblank_hook (set before pac_irq_enable()). + * + * Game demos must NOT define start(); call pac_irq_enable() from main. */ +#pragma opt_code_speed #include "pacman_common.h" +/* + * Absolute CRT0 @ 0x0000 (ABS _HEADER, through ~0xC9). Game _CODE starts + * at 0xCA (platforms.ts codeseg_start) — fills through what was empty + * space up to 0x1FF, then onward. Do not name this function start — that + * would place a second _start label in _CODE. + */ +static void pac_crt0(void) __naked { +__asm + .area _HEADER (ABS) + .org 0x0000 +_start:: + jp real_start + + .org 0x0010 + ; RST 10/18/20 (Namco sound engine) + .db 0x85,0x6f,0x3e,0x00,0x8c,0x67,0x7e,0xc9,0x78,0x87,0xd7,0x5f,0x23,0x56,0xeb,0xc9 + .db 0xe1,0x87,0xd7,0x5f,0x23,0x56,0xeb,0xe9 + + ; IM2: OUT (0),#0x38 → CPU fetches word at 0x0038 + .org 0x0038 + .dw vblank_isr + +vblank_isr: + push af + push bc + push de + push hl + push ix + push iy + + ; Ack IRQ (MAME holds INT until 0x5000 bit0 is cleared) + xor a + ld (0x5000), a + + ; Latch software sound regs → hardware WSG + ld hl, #0x4e8c + ld de, #0x5050 + ld bc, #0x0010 + ldir + + ld a, (0x4ecc) + and a + ld a, (0x4ecf) + jr nz, 00010$ + ld a, (0x4e9f) +00010$: + ld (0x5045), a + ld a, (0x4edc) + and a + ld a, (0x4edf) + jr nz, 00011$ + ld a, (0x4eaf) +00011$: + ld (0x504a), a + ld a, (0x4eec) + and a + ld a, (0x4eef) + jr nz, 00012$ + ld a, (0x4ebf) +00012$: + ld (0x504f), a + + ; Frame counter — ONLY the relocatable symbol. Do NOT touch absolute + ; 0x4C84 (arcade ROM timer): our _DATA lives in 0x4C00+ and that + ; address is inside BSS (often near pac_vblank_hook / last byte). + ld a, (_video_framecount) + inc a + ld (_video_framecount), a + + call _pac_run_vblank_hook + + ld a, #1 + ld (0x5000), a + + pop iy + pop ix + pop hl + pop de + pop bc + pop af + ei + reti + +real_start: + ld sp, #0x4fc0 + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr z, 00001$ + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir +00001$: + ld hl, #0x4e8c + ld de, #0x4e8d + ld (hl), #0 + ld bc, #0x006f + ldir + + ; BSS not cleared; keep optional VBLANK hook null until game sets it + xor a + ld (_pac_vblank_hook+0), a + ld (_pac_vblank_hook+1), a + + xor a + ld i, a + im 2 + ld a, #0x38 + out (0), a + + jp _main + .area _CODE +__endasm; +} + volatile byte video_framecount; +/* Optional game VBLANK work (Namco sound engine, etc.). BSS → NULL. */ +void (*pac_vblank_hook)(void); + +void pac_run_vblank_hook(void) { + if (pac_vblank_hook) + pac_vblank_hook(); +} + +void pac_irq_enable(void) { + interrupt_enable = 1; + __asm__("ei"); +} + word vram_addr(byte x, byte y) { if (y < 2) return 0x3c0 + (word)y * 32 + (29 - x); @@ -22,6 +156,11 @@ void poke_tile(byte x, byte y, byte tile, byte pal) { *((byte*)(0x4400 + a)) = pal; } +void poke_pal(byte x, byte y, byte pal) { + if (x >= 28 || y >= 36) return; + *((byte*)(0x4400 + vram_addr(x, y))) = pal; +} + byte peek_tile(byte x, byte y) { if (x >= 28 || y >= 36) return T_BLANK; return *((byte*)(0x4000 + vram_addr(x, y))); @@ -42,13 +181,18 @@ void wait_vblank(void) { } void put_digit(byte x, byte y, byte d, byte pal) { - poke_tile(x, y, (byte)('0' + (d % 10)), pal); + if (d > 9) d = 9; + poke_tile(x, y, (byte)('0' + d), pal); } -/* Arcade tile ROM uses ASCII codes for 0-9 / A-Z; space = 0x40 */ +/* Arcade tile ROM: 0-9/A-Z mostly ASCII; space=0x40; extras remapped below. */ void put_char(byte x, byte y, char ch, byte pal) { byte t; if (ch == ' ' || ch == '\t') t = T_BLANK; + else if (ch == '!') t = 0x5B; + else if (ch == '-') t = 0x3B; + else if (ch == '/') t = 0x3A; + else if (ch == '"') t = 0x26; else if (ch >= 'a' && ch <= 'z') t = (byte)(ch - 'a' + 'A'); else t = (byte)ch; poke_tile(x, y, t, pal); @@ -63,10 +207,12 @@ void put_string(byte x, byte y, const char* s, byte pal) { /* Sprite regs: shape/color @ 0x4FF0, coords @ 0x5060 (bottom-right origin) */ void set_sprite_ex(byte i, byte shape, byte color, byte sx, byte sy, byte flags) { - ((byte*)0x4ff0)[i * 2] = (shape << 2) | (flags & 3); - ((byte*)0x4ff0)[i * 2 + 1] = color; - ((byte*)0x5060)[i * 2] = 239 - sx; - ((byte*)0x5060)[i * 2 + 1] = 272 - sy; + byte* attr = (byte*)(0x4ff0 + (i << 1)); + byte* pos = (byte*)(0x5060 + (i << 1)); + attr[0] = (byte)((shape << 2) | (flags & 3)); + attr[1] = color; + pos[0] = (byte)(239 - sx); + pos[1] = (byte)(272 - sy); } void set_sprite(byte i, byte shape, byte color, byte sx, byte sy) { diff --git a/presets/pacman/pacman_common.h b/presets/pacman/pacman_common.h index fc8d7eba..d535e7f5 100644 --- a/presets/pacman/pacman_common.h +++ b/presets/pacman/pacman_common.h @@ -4,6 +4,9 @@ * Link helpers only: * //#link "pacman_common.c" * + * CRT0 (reset + IM2 VBLANK IRQ) lives in pacman_common — do not define start(). + * Optional per-frame work: set pac_vblank_hook, then pac_irq_enable(). + * * Each demo owns its own graphics (tile/sprite/PROM data appended at the * end of that .c file). Do not share one gfx object across demos. * @@ -28,10 +31,16 @@ void main(void); extern volatile byte video_framecount; +/* Optional VBLANK callback (Namco sound engine, etc.). NULL = none. */ +extern void (*pac_vblank_hook)(void); +void pac_run_vblank_hook(void); +void pac_irq_enable(void); + #define UP1 (!(input0 & 0x01)) #define LEFT1 (!(input0 & 0x02)) #define RIGHT1 (!(input0 & 0x04)) #define DOWN1 (!(input0 & 0x08)) +/* Homebrew: Space in 8bw. On real PCB IN0 bit7 is SERVICE1 (active low). */ #define FIRE1 (!(input0 & 0x80)) #define COIN1 (!(input0 & 0x20)) #define START1 (!(input1 & 0x20)) @@ -77,6 +86,7 @@ extern volatile byte video_framecount; word vram_addr(byte x, byte y); void poke_tile(byte x, byte y, byte tile, byte pal); +void poke_pal(byte x, byte y, byte pal); byte peek_tile(byte x, byte y); void clrscr(byte pal); void wait_vblank(void); diff --git a/presets/pacman/siege.c b/presets/pacman/siege.c index 27e080a1..68c6b063 100644 --- a/presets/pacman/siege.c +++ b/presets/pacman/siege.c @@ -1,38 +1,3 @@ -/* - * Siege — Blockade-style two-player game for Pac-Man hardware. - * Ported from presets/coleco/siegegame.c ("Making Arcade Games in C"). - * - * Player 1: joystick. Player 2: AI. - * First to MAX_SCORE wins. Speed increases each round. - * - * Graphics for this file are appended at the bottom (private copy). - */ -//#link "pacman_common.c" -#include "pacman_common.h" - -/* Startup + NMI @ 0x0066 */ -void start(void) __naked { -__asm - ld sp, #0x4fc0 - ld bc, #l__INITIALIZER - ld a, b - or a, c - jr z, 00001$ - ld de, #s__INITIALIZED - ld hl, #s__INITIALIZER - ldir -00001$: - jp _main - .ds 0x66 - (. - _start) - push af - ld a, (_video_framecount) - inc a - ld (_video_framecount), a - pop af - retn -__endasm; -} - #define COLS 28 #define ROWS 36 #define PLAY_Y0 2 @@ -262,7 +227,7 @@ void play_game(void) { void main(void) { video_framecount = 0; - interrupt_enable = 1; + pac_irq_enable(); sound_enable = 1; flip_screen = 0; watchdog = 0; diff --git a/presets/pacman/solarian.c b/presets/pacman/solarian.c index a27f7307..40856447 100644 --- a/presets/pacman/solarian.c +++ b/presets/pacman/solarian.c @@ -1,36 +1,3 @@ -/* - * Solarian — Galaxian-style shooter for Pac-Man hardware. - * Ported from presets/galaxian-scramble/shoot2.c - * - * Controls: Left/Right move, Space fire, Enter/Start to begin. - * Graphics for this file are appended at the bottom (private copy). - */ -//#link "pacman_common.c" -#include "pacman_common.h" - -/* Startup + NMI @ 0x0066 (must be in the main object so it links at 0x0000) */ -void start(void) __naked { -__asm - ld sp, #0x4fc0 - ld bc, #l__INITIALIZER - ld a, b - or a, c - jr z, 00001$ - ld de, #s__INITIALIZED - ld hl, #s__INITIALIZER - ldir -00001$: - jp _main - .ds 0x66 - (. - _start) - push af - ld a, (_video_framecount) - inc a - ld (_video_framecount), a - pop af - retn -__endasm; -} - #define ENEMIES_PER_ROW 7 #define ENEMY_ROWS 4 @@ -467,7 +434,7 @@ void play_round(void) { } void main(void) { - interrupt_enable = 1; + pac_irq_enable(); sound_enable = 1; flip_screen = 0; watchdog = 0; diff --git a/presets/pacman/sprites.c b/presets/pacman/sprites.c index ccefbf4f..39f0b792 100644 --- a/presets/pacman/sprites.c +++ b/presets/pacman/sprites.c @@ -5,30 +5,6 @@ //#link "pacman_common.c" #include "pacman_common.h" -/* Startup + NMI @ 0x0066 (must be in the main object so it links at 0x0000) */ -void start(void) __naked { -__asm - ld sp, #0x4fc0 - ld bc, #l__INITIALIZER - ld a, b - or a, c - jr z, 00001$ - ld de, #s__INITIALIZED - ld hl, #s__INITIALIZER - ldir -00001$: - jp _main - .ds 0x66 - (. - _start) - push af - ld a, (_video_framecount) - inc a - ld (_video_framecount), a - pop af - retn -__endasm; -} - - void main(void) { byte px, py; byte ax, ay; @@ -36,7 +12,7 @@ void main(void) { sbyte adx, ady; video_framecount = 0; - interrupt_enable = 1; + pac_irq_enable(); sound_enable = 1; flip_screen = 0; watchdog = 0; diff --git a/src/machine/pacman.ts b/src/machine/pacman.ts index 3599d9ee..00f33b0e 100644 --- a/src/machine/pacman.ts +++ b/src/machine/pacman.ts @@ -164,8 +164,8 @@ class PacmanVideo { // 8 sprites (reverse order). Coords are from bottom-right origin. for (var s = 7; s >= 0; s--) { - var info = this.ram[0x7f0 + s * 2]; // 0x4ff0 - var palNo = this.ram[0x7f0 + s * 2 + 1]; + var info = this.ram[0x3f0 + s * 2]; // 0x4ff0 + var palNo = this.ram[0x3f0 + s * 2 + 1]; var sx = SCREEN_W - this.spritePos[s * 2] + 15; var sy = SCREEN_H - this.spritePos[s * 2 + 1] - 16; this.getPalette(palNo, pal); @@ -192,7 +192,8 @@ export class PacmanMachine extends BasicScanlineMachine { rotate = 0; cpu: Z80 = new Z80(); - ram = new Uint8Array(0x800); + /** Work RAM 0x4C00-0x4FFF (real PCB; 0x4800-0x4BFF is open bus). */ + ram = new Uint8Array(0x400); vram = new Uint8Array(0x400); cram = new Uint8Array(0x400); oram = new Uint8Array(0x100); // kept for platform debug tree compat @@ -254,7 +255,9 @@ export class PacmanMachine extends BasicScanlineMachine { if (a < 0x4000) return this.rom[a]; if (a < 0x4400) return this.vram[a - 0x4000]; if (a < 0x4800) return this.cram[a - 0x4400]; - if (a < 0x5000) return this.ram[a - 0x4800]; + // 0x4800-0x4BFF: open bus on real Pac-Man (MAME returns 0xBF / nop) + if (a < 0x4c00) return 0xbf; + if (a < 0x5000) return this.ram[a - 0x4c00]; if (a < 0x5100) { var io = a & 0xc0; if (io === 0x00) return ((~this.inputs[0]) & 0xff) | 0x10; // IN0 @@ -271,7 +274,8 @@ export class PacmanMachine extends BasicScanlineMachine { if (a < 0x4000) return; if (a < 0x4400) { this.vram[a - 0x4000] = v; return; } if (a < 0x4800) { this.cram[a - 0x4400] = v; return; } - if (a < 0x5000) { this.ram[a - 0x4800] = v; return; } + if (a < 0x4c00) return; // open bus — writes discarded (matches MAME nopw) + if (a < 0x5000) { this.ram[a - 0x4c00] = v; return; } if ((a & 0xfff8) === 0x5000) { var bit = a & 7; if (bit === 0) this.interruptEnabled = v & 1; @@ -379,7 +383,7 @@ export class PacmanMachine extends BasicScanlineMachine { private drainVBlankIsr() { if (!this.pendingVBlankIsr) return; this.pendingVBlankIsr = false; - // After vectoring, return PC is on the stack; RETN restores SP to this value. + // After vectoring, return PC is on the stack; RETI restores SP to this value. var spDone = this.cpu.getSP() + 2; var guard = 100000; while (this.cpu.getSP() !== spDone && --guard > 0) { @@ -395,13 +399,13 @@ export class PacmanMachine extends BasicScanlineMachine { throw new EmuHalt("WATCHDOG FIRED"); } if (this.interruptEnabled) { - // Real Pac-Man ROM uses IM 2; C demos use NMI @ 0x66 (like Galaxian) - if (this.cpu.saveState().im === 2) { - this.cpu.interrupt(this.interruptVector); - } else { - this.cpu.NMI(); + // Real hardware / MAME: maskable VBLANK IRQ (IM2 + OUT vector). + // Only mark pending if the CPU actually took the IRQ (IFF1 set). + var spBefore = this.cpu.getSP(); + this.cpu.interrupt(this.interruptVector); + if (this.cpu.getSP() !== spBefore) { + this.pendingVBlankIsr = true; } - this.pendingVBlankIsr = true; } return steps; } diff --git a/src/platform/pacman.ts b/src/platform/pacman.ts index b6c55233..f2ad4409 100644 --- a/src/platform/pacman.ts +++ b/src/platform/pacman.ts @@ -22,14 +22,15 @@ class PacmanPlatform extends BaseZ80MachinePlatform implements Pl readVRAMAddress(a) { if (a < 0x400) return this.machine.vram[a]; else if (a < 0x800) return this.machine.cram[a-0x400]; - else return this.machine.ram[0x7f0 + ((a-0x800) & 0xf)]; + else return this.machine.ram[0x3f0 + ((a-0x800) & 0xf)]; } getMemoryMap = function() { return { main:[ {name:'Program ROM', start:0x0000,size:0x4000,type:'rom'}, {name:'Video RAM', start:0x4000,size:0x400, type:'ram'}, {name:'Color RAM', start:0x4400,size:0x400, type:'ram'}, - {name:'Work RAM', start:0x4800,size:0x7f0, type:'ram'}, + {name:'Open Bus', start:0x4800,size:0x400, type:'ram'}, + {name:'Work RAM', start:0x4c00,size:0x3f0, type:'ram'}, {name:'Sprite RAM', start:0x4ff0,size:0x10, type:'ram'}, {name:'I/O Regs', start:0x5000,size:0x100, type:'io'}, {name:'Color PROM', start:0x6000,size:0x20, type:'rom'}, @@ -55,7 +56,7 @@ class PacmanPlatform extends BaseZ80MachinePlatform implements Pl $$: () => { let spriteData = {}; for (let i = 0; i < 8; i++) { - let base = 0x7f0 + i * 2; + let base = 0x3f0 + i * 2; spriteData[`sprite_${i}`] = { shape: '$' + this.machine.ram[base].toString(16).padStart(2, '0'), color: '$' + this.machine.ram[base + 1].toString(16).padStart(2, '0'), diff --git a/src/worker/platforms.ts b/src/worker/platforms.ts index e4933dd4..c0a29cb1 100644 --- a/src/worker/platforms.ts +++ b/src/worker/platforms.ts @@ -69,10 +69,15 @@ export var PLATFORM_PARAMS = { 'pacman': { arch: 'z80', code_start: 0x0, + /* ABS CRT (_HEADER) ends ~0xCA; _CODE follows immediately (uses former hole). */ + codeseg_start: 0xca, rom_size: 0x8000, // 16KB prog + 8KB gfx + palette, padded to 32KB - data_start: 0x4800, // Pacman RAM starts at 0x4800 - data_size: 0x7f0, // 0x4800-0x4fef - stack_end: 0x4fc0, // top of usable RAM (sprite attrs at 0x4ff0-0x4fff) + /* Real hardware: 0x4800-0x4BFF open bus; work RAM 0x4C00-0x4FEF. + * Namco sound soft-regs live at 0x4E8C-0x4EFB — keep _DATA below that + * or the WSG engine stomps game vars every VBLANK (e.g. mouth anim). */ + data_start: 0x4c00, + data_size: 0x28c, // 0x4c00-0x4e8b (stop before sound soft-regs) + stack_end: 0x4fc0, // above sound block; sprite attrs at 0x4ff0-0x4fff }, 'williams': { arch: '6809',