Cleaning up before adding submodules

This commit is contained in:
Godzil 2019-03-04 12:34:10 +00:00
parent f622dafc8a
commit d1d11f4b8f
107 changed files with 0 additions and 76021 deletions

451
gd/GD.cpp
View File

@ -1,451 +0,0 @@
/*
* Copyright (c) 2011 by James Bowman <jamesb@excamera.com>
* Gameduino library for arduino.
*
*/
#ifdef MAPLE_IDE
#include "wirish.h"
HardwareSPI SPI(1);
#include "GD.h"
#else
#include "WProgram.h"
#include <avr/pgmspace.h>
#include <SPI.h>
#include <GD.h>
#endif
GDClass GD;
void GDClass::begin()
{
delay(250); // give Gameduino time to boot
pinMode(SS_PIN, OUTPUT);
digitalWrite(SS_PIN, HIGH);
#ifdef MAPLE_IDE
SPI.begin(SPI_4_5MHZ, MSBFIRST, 0);
if (GD.rd(REV) == 0x11) { // Rev 1.1 can handle SPI at 9MHz
SPI.begin(SPI_9MHZ, MSBFIRST, 0);
}
#else
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPSR = (1 << SPI2X);
#endif
GD.wr(J1_RESET, 1); // HALT coprocessor
GD.wr(VIDEO_MODE, MODE_800x600_72);
__wstart(RAM_SPR); // Hide all sprites
for (int i = 0; i < 512; i++)
GD.xhide();
__end();
fill(RAM_PIC, 0, 1024 * 10); // Zero all character RAM
fill(RAM_SPRPAL, 0, 2048); // Sprite palletes black
fill(RAM_SPRIMG, 0, 64 * 256); // Clear all sprite data
fill(VOICES, 0, 256); // Silence
fill(PALETTE16A, 0, 128); // Black 16-, 4-palletes and COMM
GD.wr16(SCROLL_X, 0);
GD.wr16(SCROLL_Y, 0);
GD.wr(JK_MODE, 0);
GD.wr(SPR_DISABLE, 0);
GD.wr(SPR_PAGE, 0);
GD.wr(IOMODE, 0);
GD.wr16(BG_COLOR, 0);
GD.wr16(SAMPLE_L, 0);
GD.wr16(SAMPLE_R, 0);
GD.wr16(SCREENSHOT_Y, 0);
GD.wr(MODULATOR, 64);
}
void GDClass::end() {
}
void GDClass::__start(unsigned int addr) // start an SPI transaction to addr
{
digitalWrite(SS_PIN, LOW);
SPI.transfer(highByte(addr));
SPI.transfer(lowByte(addr));
}
void GDClass::__wstart(unsigned int addr) // start an SPI write transaction to addr
{
__start(0x8000|addr);
}
void GDClass::__wstartspr(unsigned int sprnum)
{
__start((0x8000 | RAM_SPR) + (sprnum << 2));
spr = 0;
}
void GDClass::__end() // end the SPI transaction
{
digitalWrite(SS_PIN, HIGH);
}
byte GDClass::rd(unsigned int addr)
{
__start(addr);
byte r = SPI.transfer(0);
__end();
return r;
}
void GDClass::wr(unsigned int addr, byte v)
{
__wstart(addr);
SPI.transfer(v);
__end();
}
unsigned int GDClass::rd16(unsigned int addr)
{
unsigned int r;
__start(addr);
r = SPI.transfer(0);
r |= (SPI.transfer(0) << 8);
__end();
return r;
}
void GDClass::wr16(unsigned int addr, unsigned int v)
{
__wstart(addr);
SPI.transfer(lowByte(v));
SPI.transfer(highByte(v));
__end();
}
void GDClass::fill(int addr, byte v, unsigned int count)
{
__wstart(addr);
while (count--)
SPI.transfer(v);
__end();
}
void GDClass::copy(unsigned int addr, PROGMEM prog_uchar *src, int count)
{
__wstart(addr);
while (count--) {
SPI.transfer(pgm_read_byte_near(src));
src++;
}
__end();
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
void GDClass::copy(unsigned int addr, uint_farptr_t src, int count)
{
__wstart(addr);
while (count--) {
SPI.transfer(pgm_read_byte_far(src));
src++;
}
__end();
}
#endif
void GDClass::microcode(PROGMEM prog_uchar *src, int count)
{
wr(J1_RESET, 1);
copy(J1_CODE, src, count);
wr(J1_RESET, 0);
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
void GDClass::microcode(uint_farptr_t src, int count)
{
wr(J1_RESET, 1);
copy(J1_CODE, src, count);
wr(J1_RESET, 0);
}
#endif
void GDClass::setpal(int pal, unsigned int rgb)
{
wr16(RAM_PAL + (pal << 1), rgb);
}
void GDClass::sprite(int spr, int x, int y, byte image, byte palette, byte rot, byte jk)
{
__wstart(RAM_SPR + (spr << 2));
SPI.transfer(lowByte(x));
SPI.transfer((palette << 4) | (rot << 1) | (highByte(x) & 1));
SPI.transfer(lowByte(y));
SPI.transfer((jk << 7) | (image << 1) | (highByte(y) & 1));
__end();
}
void GDClass::xsprite(int ox, int oy, signed char x, signed char y, byte image, byte palette, byte rot, byte jk)
{
if (rot & 2)
x = -16-x;
if (rot & 4)
y = -16-y;
if (rot & 1) {
int s;
s = x; x = y; y = s;
}
ox += x;
oy += y;
SPI.transfer(lowByte(ox));
SPI.transfer((palette << 4) | (rot << 1) | (highByte(ox) & 1));
SPI.transfer(lowByte(oy));
SPI.transfer((jk << 7) | (image << 1) | (highByte(oy) & 1));
spr++;
}
void GDClass::xhide()
{
SPI.transfer(lowByte(400));
SPI.transfer(highByte(400));
SPI.transfer(lowByte(400));
SPI.transfer(highByte(400));
spr++;
}
void GDClass::plots(int ox, int oy, PROGMEM sprplot *psp, byte count, byte rot, byte jk)
{
while (count--) {
struct sprplot sp;
memcpy_P((void*)&sp, psp++, sizeof(sp));
GD.xsprite(ox, oy, sp.x, sp.y, sp.image, sp.palette, rot, jk);
}
}
void GDClass::sprite2x2(int spr, int x, int y, byte image, byte palette, byte rot, byte jk)
{
__wstart(0x3000 + (spr << 2));
GD.xsprite(x, y, -16, -16, image + 0, palette, rot, jk);
GD.xsprite(x, y, 0, -16, image + 1, palette, rot, jk);
GD.xsprite(x, y, -16, 0, image + 2, palette, rot, jk);
GD.xsprite(x, y, 0, 0, image + 3, palette, rot, jk);
__end();
}
void GDClass::waitvblank()
{
// Wait for the VLANK to go from 0 to 1: this is the start
// of the vertical blanking interval.
while (rd(VBLANK) == 1)
;
while (rd(VBLANK) == 0)
;
}
/* Fixed ascii font, useful for debug */
#include "font8x8.h"
static byte stretch[16] = {
0x00, 0x03, 0x0c, 0x0f,
0x30, 0x33, 0x3c, 0x3f,
0xc0, 0xc3, 0xcc, 0xcf,
0xf0, 0xf3, 0xfc, 0xff
};
void GDClass::ascii()
{
long i;
for (i = 0; i < 768; i++) {
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
byte b = pgm_read_byte_far(GET_FAR_ADDRESS(font8x8) + i);
#else
byte b = pgm_read_byte(font8x8 + i);
#endif
byte h = stretch[b >> 4];
byte l = stretch[b & 0xf];
GD.wr(0x1000 + (16 * ' ') + (2 * i), h);
GD.wr(0x1000 + (16 * ' ') + (2 * i) + 1, l);
}
for (i = 0x20; i < 0x80; i++) {
GD.setpal(4 * i + 0, TRANSPARENT);
GD.setpal(4 * i + 3, RGB(255,255,255));
}
GD.fill(RAM_PIC, ' ', 4096);
}
void GDClass::putstr(int x, int y, const char *s)
{
GD.__wstart((y << 6) + x);
while (*s)
SPI.transfer(*s++);
GD.__end();
}
void GDClass::voice(int v, byte wave, unsigned int freq, byte lamp, byte ramp)
{
__wstart(VOICES + (v << 2));
SPI.transfer(lowByte(freq));
SPI.transfer(highByte(freq) | (wave << 7));
SPI.transfer(lamp);
SPI.transfer(ramp);
__end();
}
void GDClass::screenshot(unsigned int frame)
{
int yy, xx;
byte undone[38]; // 300-long bitmap of lines pending
// initialize to 300 ones
memset(undone, 0xff, 37);
undone[37] = 0xf;
int nundone = 300;
Serial.write(0xa5); // sync byte
Serial.write(lowByte(frame));
Serial.write(highByte(frame));
while (nundone) {
// find a pending line a short distance ahead of the raster
int hwline = GD.rd16(SCREENSHOT_Y) & 0x1ff;
for (yy = (hwline + 7) % 300; ((undone[yy>>3] >> (yy&7)) & 1) == 0; yy = (yy + 1) % 300)
;
GD.wr16(SCREENSHOT_Y, 0x8000 | yy); // ask for it
// housekeeping while waiting: mark line done and send yy
undone[yy>>3] ^= (1 << (yy&7));
nundone--;
Serial.write(lowByte(yy));
Serial.write(highByte(yy));
while ((GD.rd(SCREENSHOT_Y + 1) & 0x80) == 0)
;
// Now send the line, compressing zero pixels
uint16_t zeroes = 0;
for (xx = 0; xx < 800; xx += 2) {
uint16_t v = GD.rd16(SCREENSHOT + xx);
if (v == 0) {
zeroes++;
} else {
if (zeroes) {
Serial.write(lowByte(zeroes));
Serial.write(0x80 | highByte(zeroes));
zeroes = 0;
}
Serial.write(lowByte(v));
Serial.write(highByte(v));
}
}
if (zeroes) {
Serial.write(lowByte(zeroes));
Serial.write(0x80 | highByte(zeroes));
}
}
GD.wr16(SCREENSHOT_Y, 0); // restore screen to normal
}
// near ptr version
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
static GDflashbits GDFB;
void GDClass::uncompress(unsigned int addr, prog_uchar *src)
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
while (items--) {
if (GDFB.get1() == 0) {
GD.wr(addr++, GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
GD.wr(addr, GD.rd(addr + offset));
addr++;
}
}
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_far(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte mask;
};
static GDflashbitsF GDFBF;
void GDClass::uncompress(unsigned int addr, uint_farptr_t src)
{
GDFBF.begin(src);
byte b_off = GDFBF.getn(4);
byte b_len = GDFBF.getn(4);
byte minlen = GDFBF.getn(2);
unsigned short items = GDFBF.getn(16);
while (items--) {
if (GDFBF.get1() == 0) {
GD.wr(addr++, GDFBF.getn(8));
} else {
int offset = -GDFBF.getn(b_off) - 1;
int l = GDFBF.getn(b_len) + minlen;
while (l--) {
GD.wr(addr, GD.rd(addr + offset));
addr++;
}
}
}
}
#endif

250
gd/GD.h
View File

@ -1,250 +0,0 @@
/*
* Copyright (C) 2011 by James Bowman <jamesb@excamera.com>
* Gameduino library for arduino.
*
*/
#ifndef _GD_H_INCLUDED
#define _GD_H_INCLUDED
// define SS_PIN before including "GD.h" to override this
#ifndef SS_PIN
#define SS_PIN 9
#endif
#ifdef MAPLE_IDE
#include <stdarg.h>
#include "wirish.h"
typedef const unsigned char prog_uchar;
typedef const signed char prog_char;
typedef const unsigned short prog_uint16_t;
typedef const unsigned long prog_uint32_t;
#define Serial SerialUSB
#define pgm_read_byte(x) (*(prog_uchar*)(x))
#define pgm_read_byte_near(x) pgm_read_byte(x)
#define pgm_read_word(x) (*(prog_uint16_t*)(x))
#define pgm_read_word_near(x) pgm_read_word(x)
#define pgm_read_dword(x) (*(prog_uint32_t*)(x))
#define pgm_read_dword_near(x) pgm_read_dword(x)
#define PROGMEM const
#define memcpy_P(a,b,c) memcpy((a), (b), (c))
extern HardwareSPI SPI;
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#endif
struct sprplot
{
char x, y;
byte image, palette;
};
class GDClass {
public:
static void begin();
static void end();
static void __start(unsigned int addr);
static void __wstart(unsigned int addr);
static void __end(void);
static byte rd(unsigned int addr);
static void wr(unsigned int addr, byte v);
static unsigned int rd16(unsigned int addr);
static void wr16(unsigned int addr, unsigned int v);
static void fill(int addr, byte v, unsigned int count);
static void copy(unsigned int addr, prog_uchar *src, int count);
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static void copy(unsigned int addr, uint_farptr_t src, int count);
static void microcode(uint_farptr_t src, int count);
static void uncompress(unsigned int addr, uint_farptr_t src);
#endif
static void setpal(int pal, unsigned int rgb);
static void sprite(int spr, int x, int y, byte image, byte palette, byte rot = 0, byte jk = 0);
static void sprite2x2(int spr, int x, int y, byte image, byte palette, byte rot = 0, byte jk = 0);
static void waitvblank();
static void microcode(prog_uchar *src, int count);
static void uncompress(unsigned int addr, prog_uchar *src);
static void voice(int v, byte wave, unsigned int freq, byte lamp, byte ramp);
static void ascii();
static void putstr(int x, int y, const char *s);
static void screenshot(unsigned int frame);
void __wstartspr(unsigned int spr = 0);
void xsprite(int ox, int oy, signed char x, signed char y, byte image, byte palette, byte rot = 0, byte jk = 0);
void xhide();
void plots(int ox, int oy, PROGMEM sprplot *psp, byte count, byte rot, byte jk);
byte spr; // Current sprite, incremented by xsprite/xhide above
};
#define GD_HAS_PLOTS 1 // have the 'GD.plots' method
extern GDClass GD;
#define RGB(r,g,b) ((((r) >> 3) << 10) | (((g) >> 3) << 5) | ((b) >> 3))
#define TRANSPARENT (1 << 15) // transparent for chars and sprites
#define RAM_PIC 0x0000 // Screen Picture, 64 x 64 = 4096 bytes
#define RAM_CHR 0x1000 // Screen Characters, 256 x 16 = 4096 bytes
#define RAM_PAL 0x2000 // Screen Character Palette, 256 x 8 = 2048 bytes
#define IDENT 0x2800
#define REV 0x2801
#define FRAME 0x2802
#define VBLANK 0x2803
#define SCROLL_X 0x2804
#define SCROLL_Y 0x2806
#define JK_MODE 0x2808
#define J1_RESET 0x2809
#define SPR_DISABLE 0x280a
#define SPR_PAGE 0x280b
#define IOMODE 0x280c
#define BG_COLOR 0x280e
#define SAMPLE_L 0x2810
#define SAMPLE_R 0x2812
#define MODULATOR 0x2814
#define VIDEO_MODE 0x2815
#define MODE_800x600_72 0
#define MODE_800x600_60 1
#define SCREENSHOT_Y 0x281e
#define PALETTE16A 0x2840 // 16-color palette RAM A, 32 bytes
#define PALETTE16B 0x2860 // 16-color palette RAM B, 32 bytes
#define PALETTE4A 0x2880 // 4-color palette RAM A, 8 bytes
#define PALETTE4B 0x2888 // 4-color palette RAM A, 8 bytes
#define COMM 0x2890 // Communication buffer
#define COLLISION 0x2900 // Collision detection RAM, 256 bytes
#define VOICES 0x2a00 // Voice controls
#define J1_CODE 0x2b00 // J1 coprocessor microcode RAM
#define SCREENSHOT 0x2c00 // screenshot line RAM
#define RAM_SPR 0x3000 // Sprite Control, 512 x 4 = 2048 bytes
#define RAM_SPRPAL 0x3800 // Sprite Palettes, 4 x 256 = 2048 bytes
#define RAM_SPRIMG 0x4000 // Sprite Image, 64 x 256 = 16384 bytes
#ifndef GET_FAR_ADDRESS // at some point this will become official... https://savannah.nongnu.org/patch/?6352
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define GET_FAR_ADDRESS(var) \
({ \
uint_farptr_t tmp; \
\
__asm__ __volatile__( \
\
"ldi %A0, lo8(%1)" "\n\t" \
"ldi %B0, hi8(%1)" "\n\t" \
"ldi %C0, hh8(%1)" "\n\t" \
"clr %D0" "\n\t" \
: \
"=d" (tmp) \
: \
"p" (&(var)) \
); \
tmp; \
})
#else
#define GET_FAR_ADDRESS(var) (var)
#endif
#endif
// simple utilities for accessing the asset library in a filesystem-like
// way
// Details of the flash chip:
// http://www.atmel.com/dyn/resources/prod_documents/doc3638.pdf
const int FLASHSEL = 2; // flash SPI select pin
class Asset {
private:
uint32_t addr; // pointer into flash memory
uint16_t remain; // number of remaing unread bytes
byte find_name(const char *name) {
// addr points at a directory, scan for name, if found set addr
// to the entry and return 1, otherwise return 0.
while (true) {
static struct {
char name[12];
uint16_t length;
uint32_t addr;
} de;
read(&de.name, 12);
read(&de.length, 2);
read(&de.addr, 4);
if (de.name[0] == 0)
return 0; // end of dir, no match found
if (strcmp(de.name, name) == 0) {
remain = de.length;
addr = de.addr;
return 1;
}
}
}
public:
int open(const char *d, ...) {
va_list ap;
va_start(ap, d);
addr = 512L * 640;
remain = 1024;
pinMode(FLASHSEL, OUTPUT);
digitalWrite(FLASHSEL, HIGH);
do {
if (!find_name(d))
return 0;
d = va_arg(ap, const char *);
} while (d != NULL);
return 1;
}
int read(void *dst, uint16_t n) {
GD.wr(IOMODE, 'F');
digitalWrite(FLASHSEL, LOW);
SPI.transfer(0x03);
SPI.transfer((byte)(addr >> 16));
SPI.transfer((byte)(addr >> 8));
SPI.transfer((byte)(addr >> 0));
uint16_t actual = min(n, remain); // actual bytes read
byte *bdst = (byte*)dst;
for (uint16_t a = actual; a; a--) {
byte b = SPI.transfer(0);
*bdst++ = b;
addr++;
if ((511 & (uint16_t)addr) == 264)
addr = addr - 264 + 512;
}
remain -= actual;
digitalWrite(FLASHSEL, HIGH);
GD.wr(IOMODE, 0);
return actual;
}
void load(uint16_t dst) {
while (remain) {
byte buf[16];
uint16_t n = min(remain, sizeof(buf));
read(buf, n);
GD.__wstart(dst);
for (byte i = 0; i < n; i++)
SPI.transfer(buf[i]);
GD.__end();
dst += n;
}
}
uint16_t available() {
return remain;
}
};
#endif

View File

@ -1,180 +0,0 @@
#include <SPI.h>
#include <GD.h>
void readn(byte *dst, unsigned int addr, int c)
{
GD.__start(addr);
while (c--)
*dst++ = SPI.transfer(0);
GD.__end();
}
#define NBALLS 80
static byte coll[NBALLS];
static void load_coll()
{
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
while (GD.rd(VBLANK) == 1) // Wait until display
;
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
readn(coll, COLLISION, NBALLS);
}
struct ball {
int x, y;
signed char vx, vy;
byte lasthit;
};
static struct ball balls[NBALLS];
#include "stone_wall_texture.h" // texture from 3dmd.net project
#include "sphere.h"
static void plot_balls()
{
byte i;
for (i = 0; i < NBALLS; i++)
GD.sprite(i, balls[i].x >> 4, balls[i].y >> 4, 0, 0, 0);
}
// Place all balls so that none collide. Do this by placing all at
// random, then moving until there are no collisions
static byte anycolliding()
{
plot_balls();
load_coll();
byte i;
for (i = 0; i < NBALLS; i++)
if (coll[i] != 0xff)
return 1;
return 0;
}
static void place_balls()
{
byte i;
for (i = 0; i < NBALLS; i++) {
balls[i].x = (2 + random(380)) << 4;
balls[i].y = (2 + random(280)) << 4;
balls[i].vx = random(-128,127);
balls[i].vy = random(-128,127);
balls[i].lasthit = 255;
}
while (anycolliding()) {
for (i = 0; i < NBALLS; i++) {
if (coll[i] != 0xff) {
balls[i].x = (2 + random(380)) << 4;
balls[i].y = (2 + random(280)) << 4;
}
}
}
}
void setup()
{
int i;
GD.begin();
GD.wr(JK_MODE, 0);
GD.copy(RAM_CHR, stone_wall_texture_chr, sizeof(stone_wall_texture_chr));
GD.copy(RAM_PAL, stone_wall_texture_pal, sizeof(stone_wall_texture_pal));
for (i = 0; i < 4096; i++)
GD.wr(RAM_PIC + i, (i & 15) + ((i >> 6) << 4));
GD.copy(RAM_SPRIMG, sphere_img, sizeof(sphere_img));
GD.copy(RAM_SPRPAL, sphere_pal, sizeof(sphere_pal));
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
place_balls();
}
float dot(float x1, float y1, float x2, float y2)
{
return (x1 * x2) + (y1 * y2);
}
// Collide ball a with ball b, compute new velocities.
// Algorithm from
// http://stackoverflow.com/questions/345838/ball-to-ball-collision-detection-and-handling
void collide(struct ball *a, struct ball *b)
{
float collision_x, collision_y;
collision_x = a->x - b->x;
collision_y = a->y - b->y;
float distance = sqrt(collision_x * collision_x + collision_y * collision_y);
float rdistance = 1.0 / distance;
collision_x *= rdistance;
collision_y *= rdistance;
float aci = dot(a->vx, a->vy, collision_x, collision_y);
float bci = dot(b->vx, b->vy, collision_x, collision_y);
float acf = bci;
float bcf = aci;
a->vx += int((acf - aci) * collision_x);
a->vy += int((acf - aci) * collision_y);
b->vx += int((bcf - bci) * collision_x);
b->vy += int((bcf - bci) * collision_y);
}
#define LWALL (0 << 4)
#define RWALL (384 << 4)
#define TWALL (0 << 4)
#define BWALL (284 << 4)
static int timer;
void loop()
{
int i;
plot_balls();
load_coll();
struct ball *pb;
for (i = NBALLS, pb = balls; i--; pb++, i) {
if ((pb->x <= LWALL)) {
pb->x = LWALL;
pb->vx = -pb->vx;
}
if ((pb->x >= RWALL)) {
pb->x = RWALL;
pb->vx = -pb->vx;
}
if ((pb->y <= TWALL)) {
pb->y = TWALL;
pb->vy = -pb->vy;
}
if ((pb->y >= BWALL)) {
pb->y = BWALL;
pb->vy = -pb->vy;
}
}
for (i = 1; i < NBALLS; i++) {
byte other = coll[i];
if ((balls[i].lasthit != other) && other != 0xff) {
collide(&balls[i], &balls[other]);
}
balls[i].lasthit = other;
}
for (i = NBALLS, pb = balls; i--; pb++, i) {
pb->x += pb->vx;
pb->y += pb->vy;
}
if (++timer == 2000) {
place_balls();
delay(1000);
timer = 0;
}
}

View File

@ -1,55 +0,0 @@
static PROGMEM prog_uchar sphere_img[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0b, 0x12, 0x20, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x0f, 0x17, 0x23, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x0e, 0x16, 0x1e, 0x27, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x11, 0x17, 0x1f, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x0c, 0x12, 0x19, 0x22, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x10, 0x15, 0x1b, 0x25, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x08, 0x0d, 0x14, 0x1a, 0x21, 0x27, 0x27, 0x27, 0xff,
0xff, 0x03, 0x01, 0x02, 0x03, 0x05, 0x0a, 0x0d, 0x13, 0x18, 0x1d, 0x26, 0x27, 0x27, 0x27, 0xff,
0xff, 0x0b, 0x06, 0x07, 0x09, 0x0c, 0x10, 0x14, 0x18, 0x1c, 0x24, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x12, 0x0f, 0x0e, 0x11, 0x12, 0x15, 0x1a, 0x1d, 0x24, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x20, 0x17, 0x16, 0x17, 0x19, 0x1b, 0x21, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0xff, 0x23, 0x1e, 0x1f, 0x22, 0x25, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff,
0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
static PROGMEM prog_uchar sphere_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xde, 0x7b, 0xbd, 0x77, 0x9c, 0x73, 0x9c, 0x73, 0x7b, 0x6f,
0x7b, 0x6f, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x39, 0x67, 0x18, 0x63, 0xf7, 0x5e, 0xf7, 0x5e,
0xf7, 0x5e, 0xf7, 0x5e, 0xb5, 0x56, 0xb5, 0x56, 0x94, 0x52, 0x73, 0x4e, 0x73, 0x4e, 0x52, 0x4a,
0x52, 0x4a, 0x31, 0x46, 0x31, 0x46, 0xef, 0x3d, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xad, 0x35,
0xad, 0x35, 0xad, 0x35, 0x8c, 0x31, 0x8c, 0x31, 0x6b, 0x2d, 0x6b, 0x2d, 0x4a, 0x29, 0x29, 0x25,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
};

View File

@ -1,431 +0,0 @@
static PROGMEM prog_uchar stone_wall_texture_pic[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
};
static PROGMEM prog_uchar stone_wall_texture_chr[] = {
0xc8, 0x1b, 0xc9, 0x67, 0x18, 0x47, 0x21, 0x3e, 0x8a, 0x7d, 0xbc, 0x4d, 0x95, 0x1c, 0x90, 0x37,
0x8a, 0xdc, 0xba, 0xdf, 0x0a, 0xdc, 0xa2, 0x16, 0x0c, 0x57, 0x30, 0x57, 0x00, 0xfd, 0x2b, 0xa7,
0x5c, 0x03, 0x73, 0x8a, 0x5a, 0xcb, 0x76, 0x9c, 0x7c, 0xa9, 0x6e, 0x3e, 0x7c, 0xe3, 0x6a, 0x2e,
0x1f, 0xc4, 0x8a, 0x91, 0xfa, 0xf1, 0x3a, 0x01, 0x3b, 0x05, 0xba, 0x55, 0x8e, 0x11, 0xf2, 0xdd,
0x05, 0x22, 0x00, 0xb7, 0x2c, 0x8f, 0x5f, 0x32, 0xd4, 0xca, 0x17, 0xc8, 0xb7, 0xc8, 0x59, 0xb9,
0x0c, 0x33, 0x29, 0x8f, 0xde, 0xb3, 0x55, 0xf0, 0x55, 0xc3, 0x55, 0x8f, 0xa9, 0xb3, 0x55, 0xa3,
0xc5, 0xc1, 0x51, 0x55, 0xf8, 0x3d, 0x48, 0xab, 0x2a, 0xac, 0xf0, 0x02, 0x40, 0x24, 0x40, 0x0f,
0xdf, 0xf0, 0xbf, 0x84, 0xfd, 0x05, 0xa4, 0x58, 0xa5, 0x01, 0x8a, 0x10, 0x66, 0x6c, 0x2b, 0x50,
0xdf, 0xbe, 0x16, 0xfb, 0xc0, 0xfb, 0xe5, 0x08, 0xe9, 0x04, 0xe9, 0x70, 0xc5, 0xf5, 0xe5, 0xfa,
0x5d, 0x80, 0xad, 0x05, 0x0f, 0xc2, 0x5f, 0xea, 0x3d, 0x42, 0x34, 0x4a, 0x0b, 0x4a, 0x0d, 0x49,
0xaa, 0x77, 0xa5, 0x4d, 0x35, 0x4d, 0x06, 0x4f, 0x3e, 0x76, 0x3c, 0x5a, 0xf0, 0xfa, 0xc0, 0x31,
0x8c, 0xa3, 0x0f, 0x6e, 0x30, 0xfb, 0x4d, 0xb3, 0x69, 0xe8, 0x66, 0x8b, 0xa8, 0x47, 0xc0, 0x05,
0xa8, 0x43, 0x14, 0xe7, 0x16, 0x7c, 0x98, 0x30, 0x27, 0x6c, 0xa6, 0x50, 0x02, 0xf0, 0xe9, 0x44,
0xd5, 0x15, 0x19, 0xd0, 0xc2, 0xfb, 0x8f, 0x30, 0x11, 0x7e, 0x19, 0x0b, 0x2c, 0x2e, 0xa3, 0xb2,
0x58, 0x01, 0xac, 0xc0, 0xf1, 0x63, 0x8c, 0x41, 0xac, 0x04, 0xfa, 0x4d, 0xab, 0x09, 0xeb, 0x4d,
0x36, 0x7d, 0x56, 0xfd, 0x65, 0xf5, 0x9a, 0x15, 0x88, 0xa6, 0x02, 0x85, 0x04, 0xaa, 0x08, 0xaf,
0x46, 0x94, 0x41, 0xf0, 0xd9, 0xfa, 0x0f, 0xd2, 0xa9, 0x76, 0x81, 0xd2, 0x29, 0xf6, 0x88, 0x5d,
0x41, 0x6d, 0x01, 0x2d, 0x09, 0x0d, 0xa2, 0x2f, 0xa8, 0x2f, 0xa8, 0x2f, 0x48, 0x3f, 0x41, 0xdf,
0x96, 0x69, 0x95, 0xea, 0x99, 0xbf, 0x90, 0xff, 0x90, 0x3e, 0x82, 0x1e, 0x02, 0x17, 0x00, 0x17,
0xab, 0x11, 0xbf, 0x14, 0xfe, 0x0e, 0xea, 0x06, 0x22, 0x07, 0x14, 0x55, 0x30, 0x84, 0x6a, 0x96,
0xa9, 0xda, 0xff, 0xf2, 0x5c, 0xc2, 0xd5, 0xfa, 0x17, 0x0a, 0x97, 0x72, 0x00, 0x5c, 0x8a, 0x14,
0xea, 0xf0, 0x56, 0x50, 0x9d, 0xdc, 0x9d, 0x1c, 0xa4, 0x0e, 0xa0, 0x2b, 0x72, 0xe5, 0xfe, 0xb5,
0x08, 0xa6, 0x09, 0x55, 0xe9, 0x56, 0xca, 0x9a, 0x32, 0x66, 0x3e, 0x6f, 0x3e, 0x0f, 0x30, 0xe7,
0xb9, 0x16, 0xe5, 0x50, 0x05, 0x2a, 0x50, 0xaa, 0x4f, 0xe2, 0x3f, 0x82, 0xfb, 0x88, 0x3e, 0x20,
0x01, 0xd5, 0x0d, 0xdd, 0xfa, 0x62, 0xef, 0x6f, 0xe2, 0xe7, 0x79, 0xe5, 0xea, 0xb4, 0xfd, 0x0f,
0x7f, 0x51, 0x67, 0xb1, 0xe6, 0x97, 0xfc, 0x70, 0x67, 0x24, 0xf9, 0x25, 0xee, 0x72, 0xf6, 0x74,
0xbd, 0xbf, 0xbe, 0xf9, 0xfb, 0x22, 0xfc, 0xa8, 0x6b, 0x54, 0x50, 0x54, 0x10, 0x51, 0xa5, 0x56,
0x25, 0x8f, 0x04, 0x1a, 0x64, 0x26, 0x84, 0x88, 0x85, 0xb9, 0x4a, 0xe1, 0x6b, 0xbb, 0x18, 0xfe,
0x88, 0x9f, 0xa0, 0x3f, 0x62, 0xc1, 0x89, 0xd5, 0x2f, 0xd8, 0x3c, 0xd6, 0x03, 0x2a, 0xa1, 0x15,
0xfa, 0xfa, 0xec, 0x7f, 0xa3, 0x15, 0x2b, 0x5e, 0x07, 0x5a, 0xc4, 0x58, 0x2b, 0x60, 0x92, 0x7a,
0x95, 0x9a, 0x56, 0x7a, 0x59, 0xf8, 0x3a, 0xff, 0xcf, 0x0b, 0x3f, 0x83, 0xc0, 0x8b, 0x0f, 0xe8,
0xff, 0xc0, 0xff, 0xa4, 0x4a, 0x2d, 0x69, 0x12, 0xf5, 0x64, 0x7d, 0x92, 0x1d, 0x93, 0x9d, 0x91,
0x10, 0x7e, 0x40, 0x05, 0xa1, 0x11, 0x95, 0xbb, 0xaa, 0xad, 0xaa, 0xfb, 0xa7, 0xbe, 0x11, 0xb1,
0xea, 0x78, 0xba, 0x34, 0xe8, 0xe5, 0xe0, 0xe5, 0xaa, 0xd5, 0xf8, 0x95, 0xac, 0x11, 0x0e, 0xf4,
0xbe, 0xf4, 0xe9, 0xf0, 0xff, 0x71, 0xea, 0xdc, 0xad, 0x50, 0xe9, 0x44, 0xa5, 0x54, 0xba, 0x58,
0x3e, 0x81, 0xc9, 0x18, 0xfd, 0x1b, 0x39, 0x3d, 0x4c, 0x1d, 0x41, 0x3a, 0x4f, 0x6a, 0x5e, 0xa5,
0x03, 0xe5, 0xf6, 0x66, 0xbe, 0x3a, 0x7a, 0x5a, 0x2b, 0xc5, 0xe3, 0xcf, 0x4c, 0xc1, 0xcd, 0x14,
0xff, 0xfc, 0xcc, 0x7f, 0x41, 0x95, 0x01, 0x08, 0x84, 0x49, 0xa9, 0x6a, 0x45, 0x64, 0x28, 0x73,
0x8a, 0x01, 0x88, 0x5d, 0xa3, 0x77, 0xaf, 0xf7, 0x8f, 0x75, 0x0d, 0xf1, 0x17, 0xec, 0x11, 0x20,
0x95, 0xf8, 0x95, 0x20, 0xe4, 0xfc, 0x60, 0x40, 0x5c, 0xe8, 0x59, 0x30, 0xe8, 0x7f, 0x0a, 0x9e,
0x9a, 0x45, 0xa5, 0x8e, 0x95, 0x43, 0x9f, 0x43, 0x7b, 0x83, 0xd9, 0xc1, 0x97, 0x46, 0xff, 0xf5,
0x83, 0xc0, 0xcf, 0x81, 0x7a, 0x14, 0xea, 0x55, 0x3b, 0xd5, 0x2e, 0xd5, 0x0b, 0xd5, 0x7a, 0xf9,
0xd4, 0xde, 0xb6, 0x5f, 0x9e, 0x5d, 0xa9, 0x95, 0xac, 0x15, 0xbc, 0x17, 0xb8, 0x0f, 0xe0, 0x15,
0xf3, 0x48, 0xd8, 0xea, 0x54, 0x51, 0xc1, 0x76, 0xfe, 0x19, 0xf4, 0x02, 0xde, 0x5a, 0xe5, 0xaa,
0xfb, 0xf4, 0x3c, 0xf5, 0x09, 0xf5, 0x2d, 0xb0, 0xc1, 0xa1, 0xb6, 0xa1, 0xea, 0x57, 0x3d, 0x51,
0xbe, 0x29, 0xdf, 0x16, 0x60, 0x3d, 0x9c, 0x35, 0x90, 0xe5, 0x40, 0x2e, 0x0e, 0xd9, 0xb5, 0x7f,
0x55, 0xe3, 0x57, 0xb4, 0x4e, 0xb5, 0xea, 0xd0, 0x4b, 0xc1, 0x0b, 0x03, 0x7f, 0x2c, 0xcc, 0x6a,
0x0b, 0x58, 0xfe, 0xef, 0x30, 0xeb, 0xc2, 0xeb, 0x3d, 0x9a, 0xfd, 0x99, 0x0a, 0x55, 0xb9, 0x7c,
0x7a, 0xd0, 0x07, 0xe1, 0xe2, 0xe2, 0xa9, 0xe5, 0x49, 0xf5, 0x5a, 0xf8, 0x15, 0xb8, 0x55, 0xf5,
0x50, 0xfa, 0x97, 0xea, 0x9a, 0xe5, 0x94, 0xe1, 0xbc, 0x03, 0x40, 0x0d, 0xb0, 0xd5, 0x5c, 0xdb,
0x8b, 0x3d, 0x05, 0x57, 0xd5, 0x7f, 0x75, 0xe3, 0xe0, 0xa0, 0xc0, 0x38, 0xc3, 0x32, 0x88, 0xe5,
0x44, 0x55, 0x4d, 0x53, 0x0e, 0x0c, 0xfc, 0x54, 0xce, 0xa3, 0x0a, 0x83, 0x6a, 0x70, 0xa9, 0xe4,
0xa5, 0x3e, 0xa5, 0x0d, 0x34, 0x2d, 0x18, 0xde, 0xa8, 0xf6, 0x13, 0xba, 0x7a, 0xf8, 0x60, 0x37,
0x27, 0x54, 0x15, 0x75, 0x03, 0xe4, 0x00, 0xac, 0x2b, 0xef, 0x2b, 0xed, 0x3a, 0xb0, 0xe4, 0x97,
0x43, 0xeb, 0xb5, 0x6b, 0x9f, 0x9a, 0xed, 0x6a, 0x75, 0x55, 0x40, 0x41, 0x6b, 0xc0, 0x2d, 0x78,
0x82, 0xaa, 0x00, 0xea, 0x0e, 0xf1, 0x6f, 0x81, 0xfe, 0x15, 0xfd, 0x54, 0xf0, 0x58, 0xb1, 0x53,
0x96, 0x5b, 0xd5, 0x6f, 0x3f, 0xab, 0x0e, 0xc6, 0x06, 0xc7, 0x09, 0xc6, 0x0f, 0x36, 0xf8, 0xea,
0x74, 0x29, 0xfe, 0x68, 0x5f, 0xd2, 0x5d, 0x60, 0xaf, 0xe1, 0x16, 0x0b, 0x40, 0x27, 0xe6, 0xa7,
0x25, 0x55, 0x54, 0x68, 0x60, 0x2b, 0x83, 0xe8, 0x3f, 0x28, 0xf3, 0x9b, 0xff, 0x0e, 0xff, 0x25,
0x7f, 0xf0, 0x34, 0x4a, 0x95, 0xa2, 0x3e, 0x97, 0xba, 0x80, 0x5a, 0x75, 0x68, 0xd0, 0x40, 0xc1,
0x85, 0x95, 0x14, 0xa5, 0xc8, 0xa6, 0x02, 0x56, 0x73, 0x95, 0x2b, 0xf8, 0xfc, 0x31, 0xf3, 0x33,
0x8f, 0x84, 0xc2, 0x84, 0xb1, 0xd6, 0xee, 0x17, 0x33, 0x94, 0x8f, 0x5f, 0xef, 0xee, 0x55, 0x28,
0x7b, 0xc3, 0xfa, 0x44, 0x6b, 0x13, 0xf4, 0x07, 0x43, 0x4e, 0x55, 0x6b, 0xe7, 0xaf, 0x67, 0xb1,
0x36, 0xf5, 0x76, 0xf4, 0xf4, 0xec, 0x96, 0xc0, 0x6f, 0x71, 0x1b, 0x5f, 0x0b, 0xeb, 0xdb, 0xe9,
0x55, 0x6b, 0xb5, 0x83, 0x0a, 0xc3, 0x36, 0x03, 0xfa, 0x83, 0x85, 0xb2, 0xf5, 0xbe, 0xfd, 0x6a,
0x0f, 0x8a, 0x2e, 0x4b, 0x0b, 0x47, 0x88, 0x7d, 0x0a, 0x77, 0x01, 0xcf, 0xc1, 0x51, 0x6b, 0x69,
0xba, 0xa8, 0xb5, 0x50, 0x0b, 0x03, 0x3c, 0xeb, 0x2b, 0x99, 0xf8, 0x95, 0xff, 0xa6, 0x94, 0xf9,
0xf2, 0x99, 0xc6, 0xa5, 0x0a, 0xa7, 0x16, 0x4f, 0x6c, 0xc4, 0x91, 0x06, 0xb5, 0xb2, 0x8c, 0xc0,
0xea, 0xbf, 0xc0, 0x30, 0xff, 0xf8, 0xdc, 0x01, 0x56, 0x95, 0x01, 0x52, 0xe1, 0x48, 0x09, 0x6a,
0x8e, 0xea, 0xf8, 0xf5, 0x78, 0xe1, 0x0c, 0xc1, 0x5c, 0x39, 0x65, 0xe5, 0xe2, 0xa7, 0x23, 0xe9,
0x0b, 0x90, 0x02, 0xbd, 0x09, 0xc7, 0x3c, 0xb5, 0x8c, 0x57, 0xeb, 0x76, 0x02, 0xff, 0x25, 0x91,
0x83, 0x78, 0x81, 0x61, 0x8d, 0x45, 0x8d, 0x57, 0x0d, 0x57, 0x2d, 0xf1, 0xa8, 0x01, 0x3f, 0xa0,
0xc7, 0x63, 0xf7, 0x68, 0xc1, 0x68, 0x01, 0x68, 0x57, 0x6b, 0x5f, 0xe8, 0xcc, 0x2b, 0x97, 0xa8,
0xf3, 0x31, 0x00, 0x3f, 0xac, 0x11, 0xcf, 0xfb, 0x57, 0x06, 0x54, 0xa2, 0xd7, 0x8a, 0xd4, 0xe2,
0xae, 0x95, 0xfa, 0x14, 0x7f, 0x55, 0x70, 0x34, 0x7e, 0x83, 0x3f, 0x3b, 0x3f, 0x3f, 0xc2, 0x80,
0x44, 0xc4, 0x52, 0xea, 0x5a, 0x95, 0x5e, 0x55, 0x9a, 0x4f, 0x3e, 0x0d, 0xe5, 0x4d, 0xc0, 0xf7,
0xa2, 0xad, 0x43, 0x4f, 0xab, 0x38, 0x47, 0x7b, 0x3d, 0x6e, 0x7f, 0x6c, 0x79, 0x82, 0x4a, 0xa3,
0x2a, 0xfc, 0xa3, 0xfc, 0x89, 0x7c, 0x83, 0xd5, 0x8b, 0x5d, 0x06, 0xd6, 0x8d, 0x54, 0x05, 0x56,
0x7d, 0xd9, 0x9c, 0xbf, 0xfc, 0xac, 0xba, 0x69, 0xad, 0x5e, 0x65, 0x4e, 0x68, 0x06, 0x54, 0x05,
0x38, 0x2a, 0x20, 0x0e, 0x00, 0x3e, 0x50, 0xf9, 0x1a, 0xf9, 0x26, 0xe5, 0x1a, 0xd2, 0xa7, 0x95,
0x05, 0xd2, 0x01, 0xa8, 0x24, 0x35, 0x7f, 0xf8, 0xf2, 0x8a, 0xb5, 0xa6, 0x85, 0x8c, 0x41, 0xe9,
0x6b, 0x65, 0xb0, 0x7d, 0xd3, 0x18, 0x7d, 0xf6, 0xcf, 0x49, 0xbf, 0x05, 0xe5, 0x10, 0x09, 0xd6,
0xfd, 0x0f, 0x41, 0x6a, 0xe0, 0x06, 0x01, 0x6b, 0x91, 0x2b, 0x5b, 0xab, 0x52, 0xde, 0x04, 0xdb,
0x80, 0xdf, 0xb7, 0x17, 0xb5, 0x17, 0xe4, 0x3e, 0xb4, 0x6b, 0xa2, 0x77, 0x6c, 0x4a, 0x31, 0x4a,
0xa5, 0x00, 0x96, 0x02, 0xd6, 0x73, 0xe9, 0x51, 0x3f, 0x57, 0xf3, 0x99, 0x0f, 0xe6, 0x3b, 0xfe,
0x24, 0x0c, 0x52, 0x08, 0x7a, 0xa3, 0x4f, 0x50, 0xae, 0x36, 0xfa, 0xf3, 0xef, 0xf5, 0xc0, 0xd5,
0xb6, 0xc3, 0x42, 0x36, 0x88, 0xbc, 0xbb, 0x3e, 0xea, 0x8f, 0x75, 0x4f, 0x75, 0xef, 0xf9, 0xc3,
0xb2, 0x44, 0xe4, 0x4d, 0xc5, 0xab, 0xbd, 0x06, 0x30, 0x4a, 0x28, 0x2a, 0x33, 0x81, 0xbf, 0x25,
0xb0, 0x16, 0xfe, 0x5c, 0xbd, 0x68, 0x7d, 0x48, 0xf5, 0x89, 0x25, 0xbd, 0x2e, 0xac, 0xaf, 0x82,
0x6b, 0x8d, 0x2b, 0x04, 0x7d, 0x51, 0x5f, 0xf5, 0xd5, 0x00, 0xb3, 0x6d, 0x87, 0xab, 0x5c, 0xaa,
0xa6, 0x70, 0x88, 0x6e, 0x8a, 0x57, 0xe8, 0x23, 0xbb, 0xbf, 0xc0, 0x03, 0xe9, 0x88, 0x56, 0x25,
0x5d, 0x17, 0xdc, 0x19, 0xc4, 0x77, 0xc0, 0xba, 0x0e, 0xc6, 0x75, 0xc9, 0xae, 0xe8, 0xab, 0xe1,
0xc0, 0xdd, 0x38, 0xf0, 0x50, 0xf0, 0xdb, 0x33, 0x4b, 0xf1, 0xe1, 0x21, 0xe9, 0x2d, 0x23, 0xad,
0xac, 0x11, 0xee, 0x10, 0xc7, 0x93, 0x44, 0xef, 0x43, 0xe7, 0x51, 0x23, 0x7f, 0x96, 0x5e, 0x7e,
0xf5, 0x55, 0xd7, 0x55, 0xfd, 0xe8, 0xfe, 0xa2, 0xf2, 0xae, 0x7a, 0x80, 0x72, 0x02, 0x70, 0xa8,
0xa5, 0xa2, 0x55, 0x83, 0xc1, 0x82, 0xf0, 0x4a, 0xf3, 0x91, 0xff, 0x25, 0xff, 0x25, 0xaf, 0xe6,
0xb4, 0x37, 0x9e, 0xe4, 0x65, 0x5c, 0xd4, 0x76, 0x37, 0xc7, 0xcd, 0x37, 0x90, 0xe9, 0xc9, 0xaa,
0xae, 0xe7, 0xa1, 0xbf, 0xa2, 0x14, 0x08, 0x70, 0xab, 0x5f, 0x01, 0xc5, 0xef, 0xe5, 0xfc, 0xc0,
0xf1, 0x76, 0xcc, 0xb2, 0x5c, 0x09, 0x34, 0xaa, 0x79, 0x4a, 0xc6, 0xbb, 0xc6, 0xad, 0x04, 0x04,
0x96, 0x8a, 0x31, 0x50, 0xb6, 0x94, 0x35, 0x5f, 0x5b, 0x49, 0x39, 0x42, 0x73, 0x82, 0xdb, 0x40,
0x41, 0xa8, 0x94, 0x6a, 0x14, 0x51, 0xf0, 0x15, 0xf9, 0xd5, 0xff, 0xfe, 0x88, 0xfa, 0x24, 0x89,
0x36, 0xa2, 0xb2, 0x00, 0xba, 0xc8, 0xbe, 0xa5, 0x79, 0x22, 0x55, 0x46, 0x55, 0x63, 0x54, 0x9f,
0xa6, 0x40, 0x6a, 0x23, 0x89, 0x4e, 0x13, 0x0a, 0x60, 0x08, 0x7f, 0x55, 0xfc, 0xac, 0xfc, 0x50,
0xb3, 0x11, 0x95, 0xc0, 0x59, 0x02, 0x75, 0x3e, 0x14, 0x5a, 0x58, 0xc7, 0x20, 0xaf, 0xba, 0xcf,
0xa9, 0x9f, 0xe5, 0xaf, 0xe1, 0xd7, 0xd6, 0x8a, 0xa9, 0x7b, 0x15, 0x6b, 0x40, 0x01, 0x40, 0x12,
0x74, 0xaa, 0x40, 0xfb, 0x71, 0xef, 0xd1, 0xfd, 0x01, 0xb7, 0x4e, 0xb3, 0x1f, 0x95, 0x7e, 0x93,
0x3c, 0x7f, 0xbf, 0x8b, 0x27, 0xac, 0x80, 0x51, 0xf1, 0x56, 0x45, 0x60, 0xaf, 0x61, 0xe2, 0xa9,
0x41, 0x82, 0x54, 0xae, 0x07, 0xa8, 0x93, 0xbb, 0xc7, 0xbc, 0xf1, 0x75, 0xd1, 0x9f, 0x00, 0x3e,
0x62, 0x09, 0x11, 0x2b, 0xe0, 0xf7, 0xc3, 0x5e, 0xc5, 0xdf, 0xad, 0xda, 0x2e, 0xef, 0x83, 0xd9,
0xfe, 0xec, 0xbb, 0x39, 0x2f, 0x28, 0xbc, 0x05, 0xb8, 0x15, 0x28, 0x52, 0x85, 0xa0, 0x4b, 0xe4,
0x1f, 0xf5, 0x07, 0xfb, 0x27, 0xf7, 0x25, 0xfa, 0x65, 0x90, 0xa5, 0x82, 0x84, 0x62, 0xd1, 0x28,
0x95, 0x72, 0x95, 0x4f, 0x6d, 0x23, 0x0b, 0x92, 0xfa, 0x87, 0xda, 0x28, 0x9b, 0x38, 0xb0, 0x50,
0x67, 0x30, 0x58, 0x00, 0x6c, 0x08, 0x6c, 0xaf, 0x59, 0xfb, 0xfd, 0x8c, 0xee, 0x6b, 0x2a, 0xef,
0x5b, 0x9e, 0xca, 0xf5, 0x03, 0x75, 0x28, 0x15, 0xb3, 0x9c, 0x60, 0xe2, 0xef, 0x92, 0xbd, 0xfa,
0xa8, 0x5b, 0x51, 0xfe, 0x71, 0xd7, 0xf4, 0x02, 0xca, 0xe4, 0x09, 0x57, 0xe8, 0x15, 0xb7, 0x27,
0x14, 0xfa, 0x40, 0x7e, 0x40, 0x6e, 0x10, 0xf8, 0xc1, 0x7b, 0xf5, 0xfa, 0xda, 0x8f, 0xf7, 0x96,
0x32, 0x82, 0x03, 0x2e, 0x80, 0x32, 0x62, 0xf5, 0xff, 0x96, 0xce, 0x59, 0x52, 0x54, 0xcf, 0x94,
0x69, 0x5b, 0xb5, 0x27, 0xe5, 0x03, 0xc5, 0xcb, 0x88, 0xa3, 0x40, 0xa2, 0x5a, 0x2b, 0x50, 0xff,
0x02, 0xf9, 0x2a, 0x55, 0x09, 0x57, 0x29, 0xf5, 0x2b, 0xf9, 0x93, 0xfd, 0x93, 0xbe, 0x87, 0xd8,
0x78, 0x9f, 0x08, 0xbf, 0xc0, 0xbf, 0x46, 0x91, 0x1b, 0x5c, 0x1c, 0x63, 0x04, 0x67, 0xa5, 0x25,
0x33, 0xf5, 0x32, 0xd6, 0x00, 0xd0, 0xda, 0x7e, 0xd5, 0x61, 0x0a, 0x63, 0xf9, 0xbf, 0xde, 0xe0,
0x95, 0x42, 0xdf, 0x01, 0xbe, 0xf9, 0xb8, 0xbb, 0xe9, 0xf1, 0xeb, 0x7c, 0x66, 0x40, 0x5a, 0xd0,
0x5b, 0xa6, 0x1a, 0x76, 0xa4, 0x7d, 0xdf, 0x72, 0xc3, 0x35, 0xc0, 0xdf, 0xcd, 0xa8, 0xd5, 0x2a,
0xe1, 0x13, 0x02, 0x0b, 0xda, 0x07, 0x14, 0x11, 0x6d, 0x3e, 0x3e, 0x6c, 0x98, 0x38, 0x91, 0xbe,
0x26, 0xa8, 0x11, 0xcb, 0x15, 0x8e, 0xa4, 0xac, 0xd8, 0xa4, 0xdd, 0xa9, 0x37, 0xe5, 0x0f, 0xa6,
0xba, 0x45, 0xc0, 0x51, 0xef, 0x2b, 0xcf, 0x83, 0xc5, 0xbc, 0x15, 0x29, 0xa4, 0xc6, 0x4a, 0xca,
0x0d, 0xd7, 0xf1, 0x9f, 0x79, 0x8f, 0x96, 0xaa, 0xaa, 0x5c, 0xac, 0x5f, 0x70, 0x3d, 0xc0, 0x3d,
0x20, 0x1c, 0x4e, 0x3a, 0x4f, 0x24, 0x42, 0x94, 0x2a, 0xad, 0xef, 0x45, 0xae, 0x4a, 0xf2, 0xd3,
0xd8, 0x70, 0x0d, 0xd1, 0x04, 0xc9, 0x81, 0xff, 0xa5, 0x3e, 0xaa, 0xf6, 0x25, 0xf9, 0x14, 0x1a,
0x30, 0xe2, 0xe7, 0xba, 0xa4, 0xf0, 0xb8, 0xe5, 0x18, 0x8f, 0x15, 0x77, 0x8d, 0xde, 0xe1, 0x78,
0x9a, 0xa1, 0xb6, 0xf3, 0x96, 0x90, 0xea, 0xb1, 0x7a, 0x46, 0x4d, 0x03, 0xf1, 0x81, 0xbe, 0xdf,
0xbe, 0xe1, 0xb7, 0xb0, 0xc9, 0x42, 0xf7, 0xc6, 0x51, 0xc7, 0x57, 0x4e, 0xcc, 0xb2, 0x66, 0xb2,
0x2a, 0xbd, 0x1c, 0xfd, 0xac, 0xc4, 0x65, 0xf0, 0xaa, 0x0c, 0x54, 0x45, 0xa9, 0xcb, 0x72, 0xc0,
0x30, 0xa5, 0x70, 0x9a, 0xf0, 0x56, 0x11, 0x82, 0x13, 0x3a, 0x13, 0x76, 0x27, 0xfe, 0x42, 0xfe,
0xf1, 0x52, 0xf8, 0x50, 0xf0, 0x12, 0xe0, 0x28, 0xc9, 0x00, 0x91, 0x83, 0x55, 0xff, 0x1b, 0xea,
0xba, 0x96, 0x6b, 0x5d, 0x3f, 0x95, 0x3f, 0xee, 0xd5, 0xa5, 0xc0, 0x1a, 0x40, 0x5e, 0x00, 0x6e,
0xb3, 0x4c, 0x3f, 0xcb, 0x0a, 0x25, 0x3c, 0xe5, 0x6d, 0xa9, 0x74, 0xbd, 0x8e, 0x5e, 0xb1, 0xb7,
0x31, 0x14, 0xb5, 0x12, 0xa1, 0x4a, 0xae, 0xf5, 0xee, 0xf2, 0xca, 0x25, 0x3f, 0xf5, 0x0a, 0xcd,
0x3c, 0x3e, 0x22, 0x50, 0x6d, 0x13, 0x51, 0x3f, 0x89, 0xab, 0xbe, 0x41, 0x0d, 0x83, 0xc8, 0xca,
0x95, 0x09, 0x15, 0x0a, 0x29, 0x95, 0x64, 0x05, 0x6c, 0xfd, 0x8d, 0xfe, 0xfc, 0xf2, 0xf3, 0x0a,
0xd3, 0x3b, 0xc0, 0xaf, 0x47, 0x9e, 0x1f, 0x4e, 0x30, 0x4a, 0x35, 0x59, 0x43, 0xfb, 0xd3, 0x68,
0xe6, 0x31, 0xd5, 0xdd, 0xa0, 0x31, 0x03, 0xe9, 0xa3, 0xb9, 0xba, 0xdf, 0x7a, 0xf8, 0x9b, 0x1d,
0x56, 0xcc, 0x55, 0x3f, 0x5b, 0xa3, 0x69, 0xb3, 0x5a, 0xb3, 0xaa, 0xe0, 0x35, 0xf0, 0xc2, 0x82,
0x6f, 0xeb, 0x9d, 0xda, 0x27, 0xdc, 0xad, 0x76, 0x51, 0x64, 0x54, 0x30, 0x02, 0x13, 0xf9, 0x83,
0x8e, 0xeb, 0xa0, 0xab, 0x96, 0xec, 0xfd, 0x83, 0xe4, 0x18, 0x68, 0x17, 0x3f, 0xd9, 0xa7, 0xf5,
0x3b, 0xb5, 0x3c, 0x90, 0x23, 0x81, 0xfc, 0x97, 0xea, 0xb4, 0xde, 0x0c, 0x5b, 0xd0, 0x19, 0x95,
0x49, 0x5e, 0x58, 0x6c, 0xda, 0xcf, 0xfe, 0xec, 0x3b, 0x2a, 0x2c, 0x20, 0x11, 0x45, 0x85, 0x6c,
0xdb, 0xc1, 0x71, 0x07, 0xd6, 0x07, 0xc0, 0x17, 0x0a, 0x9f, 0xe7, 0xa8, 0xfd, 0xe8, 0xbb, 0x8b,
0xc2, 0x31, 0xc2, 0xf0, 0x37, 0x1d, 0xd7, 0x51, 0x47, 0x1c, 0x8b, 0x69, 0xcc, 0xea, 0x5f, 0x2a,
0x2c, 0x6c, 0xd8, 0x54, 0xd0, 0x59, 0x81, 0x5a, 0x01, 0x7f, 0x16, 0xff, 0x12, 0xff, 0x4b, 0xfb,
0x10, 0x5f, 0x3a, 0xb3, 0xd6, 0xd1, 0xe6, 0x51, 0x67, 0x72, 0x7e, 0xa2, 0xf1, 0x53, 0x7c, 0x70,
0xd7, 0xe2, 0xf1, 0x02, 0xc8, 0x3a, 0xf1, 0x0a, 0xc7, 0x4a, 0x5d, 0x48, 0x7f, 0xd9, 0x00, 0xe1,
0x04, 0x4d, 0x01, 0x34, 0x1f, 0x5c, 0x3f, 0xd5, 0x5d, 0xb5, 0xff, 0xaa, 0xaa, 0x6a, 0xef, 0xaa,
0xa2, 0x17, 0x90, 0x2b, 0x55, 0x7f, 0x25, 0x9f, 0x49, 0xbb, 0x17, 0xa6, 0x8b, 0x94, 0x36, 0x90,
0x15, 0x5b, 0x01, 0x42, 0x2a, 0xc5, 0x7d, 0xd5, 0xf7, 0xb1, 0xa6, 0xa1, 0xaa, 0x53, 0xab, 0xc7,
0x0e, 0xda, 0x17, 0xd6, 0xfc, 0xf1, 0xbe, 0x77, 0x97, 0xfc, 0x19, 0x0d, 0xcd, 0xea, 0x32, 0xb6,
0x03, 0x23, 0x15, 0x27, 0x01, 0x27, 0x55, 0x07, 0x5d, 0x87, 0xf3, 0x2b, 0x91, 0x60, 0x58, 0x61,
0x30, 0xf5, 0x41, 0x6e, 0x1d, 0xcf, 0xcd, 0xb2, 0x1f, 0x9a, 0x5b, 0x6f, 0x09, 0xad, 0x52, 0xd4,
0x3d, 0x30, 0xff, 0x52, 0xd0, 0x6a, 0x4a, 0x5a, 0x84, 0x62, 0x05, 0x5e, 0x18, 0xbd, 0x12, 0xff,
0x23, 0xfc, 0x6f, 0xaa, 0x2f, 0x8b, 0xab, 0x2f, 0xf2, 0xe7, 0xce, 0x9c, 0x3a, 0xd5, 0xd9, 0x57,
0x5b, 0xe2, 0xdb, 0x97, 0xdd, 0xdb, 0x27, 0x88, 0x93, 0x45, 0xf8, 0xde, 0x80, 0x5d, 0xce, 0xa4,
0x33, 0x95, 0xc6, 0x4c, 0x0f, 0x3b, 0x00, 0x13, 0x76, 0x64, 0x6f, 0x6a, 0xec, 0x28, 0x44, 0xac,
0x25, 0x42, 0xb9, 0xb4, 0xb1, 0x92, 0x81, 0x98, 0x4c, 0x9a, 0x9f, 0x01, 0xef, 0x27, 0xef, 0x0b,
0xfc, 0xfb, 0xff, 0xc2, 0x55, 0x3c, 0x15, 0xfa, 0x54, 0xea, 0x6c, 0x4a, 0x31, 0x3a, 0x4e, 0xa0,
0xf7, 0xc0, 0x97, 0xc0, 0x35, 0xe0, 0x25, 0x60, 0x2d, 0xa2, 0x3e, 0xa3, 0xb5, 0xa9, 0xf5, 0xfb,
0x09, 0x7e, 0x0b, 0xf9, 0x3f, 0xe1, 0xed, 0x51, 0xd6, 0x99, 0xdc, 0xe2, 0x7a, 0x60, 0x7a, 0x80,
0xc8, 0x46, 0xd2, 0x54, 0x88, 0x64, 0xbe, 0x5b, 0x82, 0x5f, 0x11, 0x0f, 0x28, 0xcf, 0x3a, 0x0f,
0x9a, 0x8f, 0x25, 0x47, 0x7d, 0xf7, 0xd0, 0xb4, 0x44, 0x73, 0xe8, 0x9e, 0x58, 0x88, 0x12, 0x90,
0x65, 0x9a, 0xad, 0x55, 0x9d, 0x56, 0xbe, 0xda, 0x35, 0xab, 0x4a, 0xf0, 0x00, 0xc0, 0xc0, 0x00,
0x4a, 0x36, 0xaf, 0x1e, 0xb0, 0xd5, 0xf0, 0x5c, 0xf6, 0x56, 0x0a, 0xfb, 0x3b, 0xe7, 0x59, 0xa0,
0xaa, 0x46, 0xa9, 0x45, 0x6b, 0x4e, 0x19, 0xcf, 0x5d, 0x4f, 0x27, 0xfc, 0x39, 0x97, 0x36, 0x75,
0x7f, 0x72, 0xff, 0x94, 0xfd, 0x84, 0x5d, 0xa5, 0x56, 0x03, 0x66, 0xa8, 0x0d, 0xa8, 0x59, 0x28,
0xd3, 0x09, 0xff, 0xe9, 0x66, 0xa2, 0x82, 0x54, 0x20, 0xd5, 0x88, 0xf3, 0x0b, 0xfd, 0x19, 0x7d,
0x72, 0x7f, 0xb8, 0xee, 0x81, 0xc1, 0x1d, 0x10, 0xbf, 0x41, 0x20, 0x77, 0xa0, 0x5b, 0x48, 0x6e,
0x18, 0x2a, 0x59, 0x37, 0x3f, 0xbb, 0x3a, 0x9a, 0x7d, 0x29, 0x94, 0x5a, 0xb1, 0x0b, 0xe4, 0x15,
0xfc, 0x95, 0xae, 0x9e, 0xb1, 0x53, 0xfe, 0x5e, 0x92, 0x9a, 0x23, 0x5a, 0x03, 0x6e, 0x03, 0xf9,
0x68, 0xda, 0x6f, 0x1a, 0x38, 0x1f, 0x20, 0x4d, 0x1f, 0x7f, 0x1f, 0xa3, 0x4b, 0x28, 0xe7, 0xe9,
0x92, 0xec, 0xc8, 0x41, 0x28, 0xa9, 0x3c, 0x21, 0xf1, 0x39, 0xf5, 0x31, 0xb8, 0xc4, 0xf8, 0x5a,
0x19, 0xa5, 0xfa, 0xbe, 0x02, 0x0e, 0x08, 0x8f, 0xfc, 0xdb, 0xfd, 0x6b, 0x95, 0xca, 0xb9, 0xb1,
0x80, 0xa6, 0x09, 0x77, 0x7a, 0x77, 0xe1, 0xec, 0xc2, 0xff, 0x65, 0xb6, 0xa9, 0x50, 0x55, 0x56,
0x50, 0x08, 0x40, 0x29, 0x40, 0xa7, 0xf0, 0x6f, 0x54, 0x56, 0xb0, 0x56, 0xf7, 0x9e, 0xfe, 0x6e,
0x07, 0x37, 0x24, 0xc4, 0x07, 0xf3, 0x2e, 0xae, 0xca, 0xe7, 0x22, 0xd5, 0x62, 0x35, 0xfa, 0x0d,
0x64, 0xbd, 0xc8, 0x01, 0x34, 0x51, 0x98, 0x68, 0xd9, 0x5a, 0x91, 0xe9, 0x7f, 0x9a, 0xbf, 0xc7,
0x59, 0x29, 0x59, 0x94, 0xf5, 0x50, 0x77, 0xf3, 0x72, 0xb3, 0xc9, 0xda, 0xa2, 0x0f, 0x6a, 0x05,
0xc6, 0x12, 0x05, 0xa2, 0x64, 0x4f, 0x5a, 0x5f, 0x96, 0x4c, 0x50, 0x9f, 0x2c, 0xaf, 0x92, 0xcf,
0x50, 0x42, 0x71, 0x7e, 0x7c, 0xba, 0xd4, 0x3d, 0xb2, 0x45, 0x47, 0xcd, 0x57, 0x7c, 0x2b, 0xef,
0xe4, 0x20, 0x21, 0x0a, 0x1b, 0x96, 0x57, 0x08, 0x93, 0xc9, 0x53, 0x1a, 0x6f, 0xa9, 0x3f, 0x79,
0x0e, 0xfa, 0x67, 0x6a, 0xe5, 0x27, 0xec, 0x34, 0x24, 0x0d, 0x7d, 0x77, 0xd1, 0x2d, 0x1d, 0x1d,
0x3d, 0x63, 0xb2, 0x42, 0xf0, 0x92, 0xe8, 0x05, 0xd9, 0x58, 0x3d, 0x42, 0x34, 0xa6, 0x82, 0xcc,
0x74, 0x28, 0x6a, 0x03, 0xfc, 0xe5, 0x1c, 0x49, 0x9f, 0x09, 0x1c, 0xab, 0x9e, 0xb5, 0xb4, 0xd4,
0x97, 0x16, 0x40, 0xaa, 0x80, 0x59, 0x50, 0x54, 0xf1, 0x64, 0xf2, 0x7e, 0x37, 0xfc, 0x4d, 0xc3,
0xa3, 0xd5, 0xb0, 0xc9, 0x0d, 0xd8, 0xff, 0xca, 0xf3, 0xca, 0x50, 0x82, 0x46, 0x21, 0x64, 0x27,
0xf1, 0x26, 0x04, 0xbb, 0x75, 0xe6, 0x2c, 0x33, 0x38, 0x3f, 0x1a, 0x82, 0x58, 0xed, 0x47, 0xc5,
0xc3, 0xed, 0x04, 0xaa, 0x1e, 0xa0, 0x2a, 0xdc, 0x17, 0x71, 0x53, 0xf5, 0x7f, 0xed, 0xfa, 0x5c,
0xeb, 0xa5, 0x22, 0xf7, 0xb8, 0x25, 0x6c, 0x25, 0xdc, 0x26, 0xf8, 0xa9, 0xa0, 0xa5, 0xb7, 0xd5,
0x01, 0x1c, 0x05, 0x50, 0xbf, 0x13, 0xbf, 0x74, 0x0f, 0x46, 0x0f, 0x92, 0x0f, 0xca, 0x0f, 0x8a,
0x77, 0x14, 0x72, 0xb0, 0x77, 0xc0, 0x91, 0x53, 0x06, 0xab, 0x1a, 0xb5, 0xeb, 0x6c, 0xef, 0x85,
0x5d, 0xfb, 0x46, 0xfe, 0xa5, 0xfa, 0xb7, 0xa0, 0xea, 0x40, 0x79, 0x40, 0xea, 0x40, 0x99, 0x90,
0x7e, 0xd2, 0x3e, 0x84, 0x0e, 0xc3, 0x2e, 0x88, 0x6e, 0xa2, 0x73, 0xa2, 0x63, 0xb5, 0x45, 0x21,
0x07, 0xb5, 0x1f, 0xe0, 0x4d, 0xb0, 0x4f, 0x2d, 0x55, 0x64, 0x4a, 0xa4, 0xea, 0x94, 0xab, 0xd1,
0x2c, 0xd0, 0x83, 0xf1, 0xd7, 0x75, 0xc0, 0x32, 0xea, 0xa7, 0x02, 0xab, 0xd4, 0xa5, 0xd2, 0xa5,
0xfd, 0x24, 0xff, 0xb4, 0xbc, 0xf2, 0x06, 0x14, 0xec, 0x0d, 0xb8, 0x0a, 0xc1, 0x20, 0x54, 0x86,
0xc3, 0xea, 0x3f, 0xcb, 0x8d, 0x8d, 0x2c, 0x71, 0xe1, 0x74, 0x09, 0x7e, 0x05, 0xfe, 0xb8, 0xb8,
0x17, 0x4b, 0xe4, 0x95, 0x45, 0x64, 0x35, 0xd0, 0x6a, 0x3b, 0x8a, 0xb5, 0xfd, 0x8d, 0x83, 0xef,
0x88, 0xa5, 0xee, 0xc1, 0xe9, 0xb8, 0xb9, 0xb7, 0x06, 0xad, 0xe5, 0x88, 0x8d, 0x23, 0x72, 0x6f,
0x40, 0xda, 0xa3, 0x99, 0x21, 0x6b, 0x40, 0x63, 0x31, 0x4c, 0xc1, 0xb0, 0x31, 0x83, 0xe6, 0x8f,
0x7a, 0x59, 0x6b, 0x57, 0x2d, 0xd5, 0x3e, 0x17, 0x9c, 0xbc, 0x9e, 0xf0, 0x3f, 0x0a, 0x22, 0x02,
0x6f, 0xe7, 0xaa, 0x9b, 0xa7, 0x35, 0x17, 0xc0, 0x0f, 0x7c, 0x0f, 0x71, 0x34, 0xb4, 0xad, 0xb0,
0x57, 0xe9, 0xae, 0xc5, 0xdb, 0x0a, 0x5a, 0xe2, 0xf7, 0xdd, 0xbd, 0xcb, 0x85, 0x84, 0x00, 0x07,
0x36, 0xf0, 0x99, 0xb3, 0x45, 0xf1, 0x0f, 0x51, 0x4d, 0x61, 0xda, 0x9e, 0xd6, 0x91, 0x75, 0xb1,
0xa3, 0xec, 0x8c, 0xb8, 0x33, 0x34, 0xe0, 0xfa, 0xac, 0x09, 0xee, 0xf5, 0xbb, 0xd5, 0xa9, 0x56,
0xa6, 0xd2, 0x07, 0xd0, 0x05, 0x70, 0x29, 0x51, 0xaa, 0x4a, 0x69, 0xaa, 0xdf, 0xf6, 0xff, 0xe6,
0xa4, 0xc4, 0x90, 0x90, 0x93, 0x72, 0x81, 0x1a, 0xa5, 0x46, 0x25, 0x3d, 0x63, 0xf5, 0x08, 0xff,
0x6d, 0x74, 0xd4, 0x39, 0x75, 0xe8, 0xf5, 0xcb, 0x1f, 0x7b, 0x04, 0x18, 0x5f, 0xc8, 0x57, 0x0b,
0xa2, 0x02, 0xf2, 0x80, 0xf8, 0x84, 0x07, 0xa4, 0x51, 0x27, 0x5d, 0xf3, 0x7f, 0x67, 0xd9, 0xcb,
0x73, 0x33, 0xfc, 0xe0, 0x5c, 0xbc, 0x34, 0x04, 0x8c, 0xc5, 0xc3, 0xb5, 0x2a, 0x93, 0xaa, 0xc7,
0x65, 0x0f, 0xa8, 0xcf, 0x03, 0xaa, 0xce, 0x59, 0x33, 0x52, 0x9a, 0xac, 0x52, 0xf6, 0x6e, 0x30,
0xaf, 0x56, 0x13, 0x9a, 0x0c, 0x5e, 0x30, 0xd5, 0xc3, 0x27, 0xfd, 0x42, 0xb1, 0x5e, 0x93, 0x62,
0x93, 0x2c, 0xbd, 0x8b, 0x50, 0xdb, 0x24, 0xed, 0x9f, 0xbc, 0xed, 0xff, 0x8f, 0xcc, 0x76, 0x73,
0x95, 0x02, 0x10, 0x49, 0xfd, 0x1a, 0xc3, 0x08, 0x0f, 0xe9, 0xfb, 0x09, 0xc4, 0x98, 0xf5, 0xe8,
0x0f, 0xfa, 0x6c, 0x67, 0x60, 0xe7, 0x70, 0xff, 0xdb, 0xcf, 0xfa, 0xbc, 0x0a, 0x58, 0x69, 0xec,
0x3a, 0xeb, 0x2a, 0xc3, 0xcb, 0x01, 0x9c, 0x00, 0xf2, 0x50, 0xd5, 0x98, 0x98, 0xe6, 0x98, 0x85,
0xc0, 0xab, 0x00, 0x28, 0x0f, 0x00, 0x3d, 0x02, 0xd5, 0x21, 0x07, 0x29, 0x7c, 0xef, 0x5d, 0x69,
0x9e, 0x44, 0xcf, 0xd3, 0x49, 0x90, 0x5e, 0xdc, 0x46, 0x57, 0x1a, 0xc1, 0xa9, 0x7d, 0xac, 0x5e,
0xd5, 0xde, 0x55, 0xec, 0x59, 0xe2, 0xd7, 0xa8, 0x5a, 0xa0, 0xeb, 0x80, 0xf0, 0x28, 0x8a, 0xf0,
0x62, 0xbd, 0x64, 0x1f, 0xd0, 0x0e, 0xd0, 0x4a, 0x51, 0x08, 0x15, 0x25, 0x6d, 0xfd, 0xab, 0xfe,
0xf3, 0xaf, 0x95, 0x97, 0xb6, 0x9d, 0x1b, 0x7e, 0xcf, 0x35, 0xf3, 0x15, 0x00, 0x54, 0x57, 0x0d,
0xe8, 0x3d, 0x32, 0x11, 0xc8, 0xd5, 0xfc, 0xd7, 0x70, 0xdc, 0xd0, 0x1a, 0x4a, 0x28, 0x4a, 0x2a,
0xbd, 0x02, 0xe5, 0x2a, 0x08, 0x39, 0xfa, 0xa5, 0x68, 0x95, 0xfb, 0xdf, 0x7a, 0x5c, 0xe2, 0x5a,
0x0a, 0x57, 0xba, 0xd3, 0xec, 0x1b, 0xe0, 0x0b, 0x9b, 0x81, 0xac, 0x61, 0xe2, 0x04, 0xb2, 0x15,
0x7a, 0x72, 0x99, 0xa3, 0x55, 0xa3, 0x55, 0x93, 0x53, 0xb3, 0x6e, 0x80, 0xfb, 0x02, 0xcf, 0xfa,
0x91, 0x09, 0xaa, 0x8b, 0xe2, 0x85, 0x85, 0x88, 0x15, 0x0f, 0xa0, 0x77, 0x0f, 0xf9, 0xfb, 0x8e,
0x25, 0x02, 0x69, 0xe6, 0x14, 0x44, 0x09, 0xac, 0x14, 0xbe, 0x01, 0x72, 0x3c, 0x16, 0x73, 0x6a,
0x57, 0xfd, 0x58, 0x29, 0x7c, 0xef, 0xc0, 0x2c, 0x0a, 0x2a, 0x0b, 0xf7, 0x38, 0xf7, 0x03, 0x3f,
0x78, 0xda, 0x48, 0xc6, 0x1b, 0xf7, 0xe7, 0xc2, 0x57, 0x52, 0x3f, 0x51, 0x0c, 0x36, 0xb1, 0xcb,
0x57, 0x4e, 0x14, 0x1c, 0xc1, 0x33, 0xcc, 0x11, 0xc6, 0xa1, 0x09, 0x2c, 0xa8, 0xa5, 0xa9, 0x6f,
0x5f, 0x4c, 0x57, 0xe8, 0xb8, 0xd0, 0x5b, 0x82, 0x5d, 0x8a, 0x7a, 0x3b, 0x54, 0x83, 0x7a, 0x8b,
0x97, 0x10, 0xe7, 0xc4, 0xf0, 0x72, 0xfc, 0xd2, 0x3e, 0xfe, 0x07, 0xca, 0x15, 0xfb, 0x5f, 0x44,
0x55, 0x23, 0x56, 0xce, 0x57, 0x08, 0x90, 0x2e, 0x6e, 0xa8, 0x4f, 0x8f, 0xbf, 0x2b, 0xac, 0x2f,
0x80, 0x4a, 0x00, 0x22, 0x4a, 0x07, 0x7c, 0x0a, 0x7a, 0x24, 0x6e, 0xc3, 0x4c, 0x32, 0x4c, 0x1e,
0xbf, 0x7f, 0xbe, 0x1f, 0xbb, 0x06, 0xeb, 0x12, 0xf3, 0x3b, 0xc4, 0x56, 0x40, 0x16, 0xd4, 0x1e,
0x6a, 0xa9, 0x9a, 0x0a, 0x7f, 0x85, 0x7f, 0x8b, 0x7f, 0x82, 0xff, 0x82, 0xdf, 0x86, 0xef, 0x85,
0x7e, 0x7f, 0xa5, 0xe4, 0xb9, 0xec, 0xa5, 0x93, 0x95, 0x80, 0xc3, 0x0c, 0x9a, 0xab, 0xbc, 0x2d,
0xb0, 0x43, 0xd4, 0x41, 0xd5, 0x07, 0xb8, 0x05, 0xa5, 0x0e, 0xad, 0x42, 0xba, 0x7e, 0xfb, 0xab,
0x95, 0x0d, 0x05, 0x4c, 0x3d, 0x58, 0x4d, 0x40, 0xdd, 0x5a, 0xc0, 0x06, 0x2a, 0xbf, 0xaa, 0x97,
0xfe, 0x62, 0xfd, 0x08, 0xcd, 0x42, 0x90, 0x68, 0x33, 0x92, 0xa0, 0x50, 0xcf, 0x6b, 0x32, 0x58,
0xc2, 0x9e, 0x40, 0xa0, 0x60, 0xb9, 0x70, 0x56, 0xd4, 0x61, 0xa6, 0x7f, 0x6d, 0x57, 0x6e, 0x3f,
0x3b, 0xbe, 0x6a, 0xaf, 0x5b, 0x40, 0x75, 0x77, 0x31, 0x40, 0x2b, 0x55, 0x09, 0x93, 0x16, 0xfc,
0x80, 0x1d, 0xa2, 0x9f, 0x81, 0x9f, 0x1a, 0xb4, 0x52, 0x75, 0x08, 0x79, 0x80, 0x56, 0x1d, 0x74,
0x88, 0xfd, 0x02, 0x72, 0xad, 0x45, 0xf7, 0x27, 0x9a, 0x8c, 0x7b, 0xc1, 0xeb, 0x22, 0xb1, 0x87,
0x59, 0xbf, 0x1c, 0x35, 0xc0, 0x05, 0xcc, 0x25, 0x3c, 0x26, 0xc3, 0xac, 0x5a, 0x7f, 0x9a, 0xd9,
0xfc, 0xd1, 0xb3, 0xc4, 0xb9, 0x95, 0xb6, 0xd8, 0xab, 0x54, 0x8a, 0x50, 0x88, 0x02, 0xba, 0xc6,
0xad, 0x86, 0x80, 0xe8, 0x8f, 0x22, 0x52, 0x40, 0x71, 0x9a, 0x32, 0xaf, 0x70, 0x2e, 0x3f, 0x3b,
0x29, 0x61, 0x38, 0xe1, 0x62, 0x10, 0xc2, 0x9e, 0xc3, 0xd7, 0x06, 0x8b, 0x38, 0x33, 0x56, 0x4b,
0x1f, 0xfc, 0xd3, 0xfc, 0x24, 0xea, 0x19, 0xa5, 0x0a, 0x84, 0x1a, 0xf5, 0x42, 0x01, 0x09, 0x4d,
0xd4, 0x27, 0x5f, 0x9f, 0xbd, 0x90, 0xf2, 0x92, 0x8c, 0x88, 0xbf, 0x24, 0x83, 0x18, 0x00, 0x2a,
};
static PROGMEM prog_uchar stone_wall_texture_pal[] = {
0x06, 0x21, 0xc5, 0x18, 0xa3, 0x14, 0x8a, 0x31, 0x69, 0x2d, 0x83, 0x10, 0xed, 0x3d, 0x27, 0x25,
0x83, 0x14, 0xac, 0x39, 0xc5, 0x1c, 0x27, 0x29, 0x06, 0x25, 0x8a, 0x31, 0x41, 0x0c, 0xa3, 0x18,
0x06, 0x25, 0xcc, 0x3d, 0x62, 0x10, 0xc4, 0x1c, 0x62, 0x0c, 0xed, 0x3d, 0x49, 0x2d, 0xc4, 0x1c,
0x27, 0x29, 0xa4, 0x18, 0x8a, 0x35, 0x06, 0x21, 0x89, 0x31, 0x27, 0x29, 0xe5, 0x1c, 0x62, 0x0c,
0xe6, 0x20, 0x82, 0x10, 0xcd, 0x3d, 0x48, 0x2d, 0x27, 0x25, 0xe5, 0x1c, 0xcc, 0x39, 0x83, 0x14,
0x2f, 0x46, 0x28, 0x25, 0xa3, 0x14, 0xab, 0x35, 0x48, 0x2d, 0x82, 0x10, 0xc5, 0x18, 0x06, 0x21,
0xa4, 0x18, 0xab, 0x39, 0x27, 0x25, 0x62, 0x10, 0x06, 0x21, 0x69, 0x2d, 0x83, 0x10, 0xe5, 0x1c,
0xe6, 0x1c, 0x69, 0x2d, 0x62, 0x0c, 0xa4, 0x18, 0xab, 0x35, 0xe6, 0x1c, 0x28, 0x25, 0xa3, 0x10,
0x69, 0x31, 0x06, 0x21, 0xed, 0x41, 0x83, 0x14, 0xec, 0x41, 0x68, 0x31, 0x2e, 0x4a, 0x62, 0x10,
0xcc, 0x3d, 0x48, 0x2d, 0xe5, 0x1c, 0x41, 0x0c, 0x06, 0x21, 0x8a, 0x31, 0xc4, 0x18, 0x41, 0x08,
0x06, 0x21, 0x62, 0x0c, 0x69, 0x2d, 0xa4, 0x14, 0x62, 0x10, 0x48, 0x2d, 0xab, 0x39, 0xe6, 0x20,
0xc4, 0x18, 0x89, 0x35, 0x26, 0x29, 0x41, 0x08, 0xc5, 0x1c, 0x41, 0x0c, 0x28, 0x29, 0xed, 0x3d,
0xc4, 0x18, 0xed, 0x41, 0x69, 0x2d, 0x27, 0x25, 0xab, 0x35, 0x48, 0x29, 0xc4, 0x18, 0x06, 0x21,
0x06, 0x21, 0x48, 0x29, 0x8a, 0x35, 0x0e, 0x42, 0x48, 0x2d, 0xab, 0x39, 0x06, 0x21, 0xa3, 0x14,
0xe5, 0x1c, 0xcc, 0x39, 0x28, 0x29, 0x82, 0x10, 0xab, 0x35, 0x83, 0x10, 0x27, 0x25, 0xe5, 0x1c,
0xed, 0x3d, 0x62, 0x10, 0x06, 0x21, 0x69, 0x2d, 0x62, 0x0c, 0x07, 0x25, 0xc4, 0x18, 0xcc, 0x39,
0xed, 0x3d, 0x48, 0x29, 0xe5, 0x1c, 0xa3, 0x10, 0x48, 0x29, 0x0d, 0x42, 0xc4, 0x1c, 0x82, 0x10,
0xa3, 0x14, 0x05, 0x25, 0x69, 0x31, 0xed, 0x41, 0x27, 0x29, 0xc4, 0x18, 0x83, 0x14, 0xab, 0x39,
0xcc, 0x39, 0xa3, 0x14, 0x61, 0x0c, 0x06, 0x25, 0xc4, 0x1c, 0xa3, 0x14, 0x62, 0x0c, 0x48, 0x2d,
0x48, 0x29, 0xab, 0x39, 0x82, 0x14, 0x0e, 0x46, 0x69, 0x31, 0xed, 0x41, 0x83, 0x14, 0x07, 0x25,
0x62, 0x0c, 0x27, 0x29, 0xac, 0x39, 0xe5, 0x1c, 0x89, 0x35, 0x0d, 0x46, 0xa3, 0x14, 0x06, 0x25,
0xc4, 0x1c, 0x48, 0x2d, 0x2e, 0x46, 0xaa, 0x35, 0xc5, 0x18, 0x06, 0x21, 0x62, 0x10, 0xab, 0x35,
0x28, 0x25, 0xcd, 0x39, 0x83, 0x10, 0xc5, 0x18, 0x62, 0x0c, 0x28, 0x25, 0xab, 0x35, 0xc5, 0x18,
0x28, 0x25, 0x8b, 0x31, 0x83, 0x10, 0x06, 0x21, 0xab, 0x35, 0x62, 0x0c, 0xe5, 0x1c, 0x28, 0x25,
0x48, 0x29, 0xe6, 0x1c, 0xa4, 0x14, 0x61, 0x0c, 0x21, 0x08, 0x06, 0x25, 0xab, 0x39, 0x83, 0x14,
0x0e, 0x42, 0x62, 0x10, 0x69, 0x31, 0xe5, 0x1c, 0x48, 0x29, 0xe5, 0x1c, 0x41, 0x0c, 0xab, 0x39,
0x0d, 0x42, 0x47, 0x2d, 0xab, 0x39, 0xc4, 0x18, 0xab, 0x39, 0xe5, 0x20, 0x20, 0x08, 0x62, 0x10,
0xa4, 0x14, 0x06, 0x21, 0xed, 0x3d, 0x69, 0x2d, 0xab, 0x35, 0x2f, 0x46, 0x06, 0x21, 0xa3, 0x14,
0xee, 0x3d, 0xc4, 0x18, 0x27, 0x25, 0x69, 0x31, 0x62, 0x10, 0x69, 0x31, 0xe6, 0x1c, 0x2f, 0x46,
0x8b, 0x31, 0x83, 0x10, 0x06, 0x21, 0x30, 0x4a, 0x27, 0x25, 0xe5, 0x1c, 0xed, 0x3d, 0x82, 0x10,
0xe6, 0x1c, 0x2f, 0x46, 0x6a, 0x2d, 0x62, 0x0c, 0xc5, 0x1c, 0x62, 0x0c, 0xab, 0x39, 0x27, 0x25,
0x62, 0x0c, 0xc4, 0x14, 0x6a, 0x2d, 0x07, 0x21, 0x8a, 0x31, 0xc5, 0x18, 0x83, 0x10, 0x07, 0x21,
0xcc, 0x39, 0x83, 0x10, 0xc5, 0x18, 0x27, 0x29, 0x06, 0x25, 0xc4, 0x1c, 0x69, 0x31, 0x62, 0x10,
0x41, 0x08, 0xab, 0x39, 0x06, 0x21, 0xa4, 0x18, 0x06, 0x25, 0x69, 0x2d, 0x0e, 0x42, 0xa4, 0x18,
0x47, 0x2d, 0x82, 0x10, 0xcc, 0x3d, 0xe5, 0x20, 0x83, 0x14, 0xcc, 0x39, 0x48, 0x29, 0x06, 0x21,
0xcc, 0x39, 0xc4, 0x18, 0x69, 0x2d, 0x27, 0x25, 0xe5, 0x1c, 0xcb, 0x39, 0x83, 0x10, 0x28, 0x25,
0x48, 0x29, 0x2e, 0x46, 0xa3, 0x14, 0xab, 0x39, 0xc5, 0x1c, 0x8b, 0x35, 0x83, 0x10, 0x07, 0x25,
0xc5, 0x1c, 0x82, 0x10, 0xcc, 0x39, 0x27, 0x29, 0x49, 0x2d, 0x07, 0x25, 0xe5, 0x1c, 0x83, 0x10,
0x83, 0x10, 0x8a, 0x31, 0xe5, 0x1c, 0x07, 0x25, 0x83, 0x14, 0x48, 0x29, 0xe6, 0x1c, 0xab, 0x35,
0x62, 0x10, 0xc5, 0x18, 0x06, 0x21, 0x69, 0x2d, 0xe6, 0x20, 0x48, 0x2d, 0xa4, 0x14, 0x41, 0x08,
0x8a, 0x31, 0x27, 0x25, 0xe5, 0x1c, 0x83, 0x10, 0x62, 0x0c, 0xe6, 0x20, 0x49, 0x2d, 0xa4, 0x14,
0xc4, 0x1c, 0x62, 0x0c, 0x27, 0x25, 0xab, 0x39, 0xc5, 0x1c, 0x48, 0x29, 0x2f, 0x46, 0x8b, 0x35,
0x0e, 0x42, 0x83, 0x10, 0x06, 0x21, 0x6a, 0x31, 0xe5, 0x1c, 0xcc, 0x3d, 0xa3, 0x18, 0x27, 0x25,
0xc4, 0x1c, 0xed, 0x41, 0x27, 0x29, 0x89, 0x31, 0x06, 0x21, 0xa4, 0x18, 0x27, 0x29, 0xaa, 0x35,
0x83, 0x10, 0xed, 0x3d, 0xe5, 0x1c, 0x48, 0x29, 0x62, 0x0c, 0xc5, 0x18, 0xab, 0x39, 0x27, 0x25,
0xe5, 0x1c, 0xcc, 0x3d, 0x48, 0x29, 0x83, 0x14, 0x62, 0x0c, 0xc4, 0x18, 0xab, 0x35, 0x27, 0x25,
0x83, 0x10, 0x48, 0x2d, 0x41, 0x08, 0xc5, 0x18, 0xab, 0x35, 0x28, 0x29, 0xa4, 0x14, 0xe6, 0x1c,
0xcc, 0x39, 0x83, 0x10, 0x50, 0x4a, 0x06, 0x21, 0xaa, 0x39, 0xa4, 0x14, 0x48, 0x29, 0x2e, 0x46,
0x62, 0x0c, 0x07, 0x21, 0x8b, 0x31, 0xc5, 0x18, 0xe5, 0x1c, 0xcc, 0x39, 0x83, 0x14, 0x48, 0x29,
0xe6, 0x20, 0x69, 0x2d, 0xcd, 0x3d, 0x83, 0x10, 0x8a, 0x35, 0xe5, 0x1c, 0x27, 0x25, 0x83, 0x10,
0x0e, 0x42, 0x8a, 0x31, 0x27, 0x25, 0xa4, 0x18, 0xed, 0x41, 0x06, 0x21, 0x69, 0x31, 0x82, 0x10,
0xc4, 0x1c, 0x48, 0x29, 0xcc, 0x3d, 0x62, 0x10, 0x27, 0x29, 0x06, 0x21, 0xa3, 0x14, 0xac, 0x39,
0xab, 0x39, 0x48, 0x29, 0xe6, 0x1c, 0x83, 0x10, 0x41, 0x08, 0xa4, 0x14, 0x8a, 0x31, 0x06, 0x21,
0x27, 0x25, 0x83, 0x10, 0xe5, 0x1c, 0x8a, 0x31, 0x28, 0x29, 0xcc, 0x39, 0x83, 0x10, 0xe5, 0x1c,
0x42, 0x0c, 0x8a, 0x31, 0xc5, 0x18, 0x07, 0x25, 0xe6, 0x1c, 0x62, 0x0c, 0x28, 0x25, 0xab, 0x35,
0x62, 0x0c, 0x28, 0x25, 0xc5, 0x18, 0x0f, 0x42, 0x62, 0x10, 0xcc, 0x39, 0x48, 0x29, 0xe5, 0x1c,
0xcd, 0x39, 0x62, 0x0c, 0xe6, 0x1c, 0x48, 0x29, 0xa4, 0x14, 0xcc, 0x39, 0x06, 0x25, 0x48, 0x29,
0xe6, 0x20, 0x48, 0x2d, 0xa3, 0x14, 0xcc, 0x3d, 0x62, 0x0c, 0xe5, 0x1c, 0xed, 0x41, 0x69, 0x2d,
0x69, 0x2d, 0x41, 0x08, 0xe6, 0x20, 0xcd, 0x3d, 0x48, 0x2d, 0xcc, 0x3d, 0xe5, 0x20, 0x82, 0x10,
0x61, 0x0c, 0x49, 0x2d, 0xe5, 0x20, 0xcc, 0x3d, 0x06, 0x21, 0x48, 0x29, 0x62, 0x10, 0xed, 0x3d,
0xcc, 0x3d, 0xa3, 0x14, 0xe6, 0x20, 0x48, 0x29, 0x41, 0x08, 0x49, 0x2d, 0xe6, 0x20, 0xa4, 0x14,
0x62, 0x10, 0x27, 0x25, 0xab, 0x35, 0xc5, 0x1c, 0xe6, 0x1c, 0x48, 0x29, 0xc4, 0x18, 0x83, 0x10,
0xc4, 0x18, 0x83, 0x10, 0x06, 0x21, 0x69, 0x31, 0xc5, 0x1c, 0xab, 0x35, 0x27, 0x25, 0x83, 0x10,
0xab, 0x35, 0xc4, 0x18, 0x62, 0x0c, 0x07, 0x21, 0xc5, 0x18, 0x83, 0x10, 0x27, 0x21, 0x69, 0x2d,
0x48, 0x29, 0xe6, 0x1c, 0xa4, 0x14, 0xab, 0x35, 0x8a, 0x31, 0x82, 0x10, 0x07, 0x21, 0xc4, 0x18,
0xa3, 0x14, 0x28, 0x29, 0xed, 0x41, 0xe6, 0x20, 0x62, 0x10, 0xc4, 0x1c, 0x8a, 0x35, 0x06, 0x25,
0xc5, 0x1c, 0x27, 0x29, 0xab, 0x39, 0x62, 0x0c, 0x27, 0x25, 0xc5, 0x1c, 0x41, 0x08, 0xab, 0x39,
0x48, 0x2d, 0xed, 0x41, 0xe6, 0x20, 0x61, 0x0c, 0xed, 0x3d, 0x07, 0x25, 0xc4, 0x18, 0x62, 0x0c,
0x83, 0x10, 0xab, 0x35, 0x07, 0x25, 0xe5, 0x1c, 0x06, 0x21, 0x83, 0x10, 0xcc, 0x39, 0x69, 0x2d,
0xa4, 0x18, 0x62, 0x10, 0x6a, 0x31, 0xe6, 0x20, 0x49, 0x29, 0xe5, 0x1c, 0x83, 0x10, 0xee, 0x3d,
0xaa, 0x35, 0x27, 0x29, 0x82, 0x10, 0xe5, 0x1c, 0xa3, 0x14, 0xcc, 0x39, 0x48, 0x29, 0x06, 0x21,
0x83, 0x10, 0x0e, 0x42, 0xab, 0x35, 0x06, 0x21, 0x62, 0x0c, 0x27, 0x25, 0xe5, 0x1c, 0x69, 0x2d,
0x83, 0x10, 0x8a, 0x31, 0x27, 0x25, 0xc5, 0x1c, 0x06, 0x21, 0x8a, 0x31, 0x41, 0x08, 0xa4, 0x14,
0x27, 0x29, 0xab, 0x35, 0x83, 0x14, 0xe5, 0x1c, 0x62, 0x0c, 0xab, 0x39, 0xc4, 0x18, 0x27, 0x29,
0xa4, 0x18, 0x49, 0x2d, 0x41, 0x0c, 0xe5, 0x20, 0x20, 0x04, 0x82, 0x10, 0x06, 0x21, 0xcc, 0x3d,
0x83, 0x10, 0x69, 0x31, 0xee, 0x41, 0x27, 0x25, 0x27, 0x25, 0xab, 0x39, 0x62, 0x0c, 0x50, 0x4a,
0x83, 0x14, 0x06, 0x25, 0x0d, 0x46, 0x89, 0x35, 0xab, 0x35, 0x27, 0x25, 0xe5, 0x1c, 0x62, 0x10,
0xa4, 0x14, 0x06, 0x21, 0x0e, 0x42, 0x69, 0x2d, 0xab, 0x35, 0x06, 0x21, 0xc5, 0x18, 0x48, 0x29,
0xe5, 0x1c, 0x27, 0x25, 0x82, 0x14, 0xaa, 0x35, 0x8b, 0x35, 0x27, 0x25, 0x62, 0x10, 0xe5, 0x1c,
0x07, 0x25, 0xa4, 0x14, 0x8a, 0x31, 0x41, 0x0c, 0x28, 0x25, 0xa3, 0x14, 0x8a, 0x31, 0xe6, 0x1c,
0x83, 0x10, 0x27, 0x25, 0x8a, 0x31, 0xe5, 0x1c, 0xe6, 0x20, 0x49, 0x2d, 0x62, 0x0c, 0xc4, 0x18,
0xe5, 0x1c, 0x89, 0x31, 0x27, 0x25, 0x82, 0x10, 0x83, 0x14, 0x48, 0x2d, 0x41, 0x0c, 0xe5, 0x20,
0x41, 0x08, 0xcc, 0x39, 0xc4, 0x18, 0x28, 0x29, 0x61, 0x0c, 0xac, 0x39, 0xc4, 0x18, 0x07, 0x21,
0xe6, 0x20, 0x82, 0x10, 0xc4, 0x18, 0x8a, 0x31, 0x06, 0x21, 0x28, 0x29, 0xc4, 0x18, 0xab, 0x35,
0x83, 0x10, 0x0e, 0x46, 0xab, 0x39, 0x27, 0x29, 0x62, 0x0c, 0x07, 0x21, 0xab, 0x39, 0xc4, 0x18,
0x82, 0x10, 0x48, 0x29, 0xed, 0x3d, 0x06, 0x21, 0xa3, 0x14, 0x27, 0x25, 0xe5, 0x1c, 0xab, 0x35,
0xc4, 0x18, 0x06, 0x21, 0x61, 0x0c, 0x8a, 0x31, 0xe5, 0x1c, 0x27, 0x25, 0x83, 0x10, 0xaa, 0x35,
0x69, 0x2d, 0xe5, 0x1c, 0xa3, 0x14, 0x41, 0x0c, 0x62, 0x0c, 0x48, 0x29, 0xe6, 0x1c, 0xc4, 0x18,
0x62, 0x10, 0xc4, 0x18, 0x69, 0x31, 0x06, 0x21, 0x06, 0x21, 0x89, 0x31, 0xc4, 0x18, 0x62, 0x0c,
0x68, 0x31, 0x83, 0x14, 0xc5, 0x1c, 0x06, 0x25, 0x62, 0x0c, 0x06, 0x21, 0xc4, 0x18, 0x48, 0x2d,
0xec, 0x41, 0x47, 0x2d, 0x82, 0x14, 0xe5, 0x1c, 0xc5, 0x1c, 0x61, 0x0c, 0x28, 0x29, 0xa3, 0x14,
0x62, 0x10, 0x27, 0x25, 0xc5, 0x1c, 0xab, 0x35, 0x62, 0x0c, 0x06, 0x21, 0xc5, 0x1c, 0x6a, 0x31,
0xe6, 0x20, 0xee, 0x41, 0x69, 0x2d, 0x62, 0x10, 0x49, 0x29, 0xe6, 0x1c, 0x62, 0x0c, 0xa4, 0x18,
0xc5, 0x18, 0x8a, 0x35, 0x27, 0x25, 0x61, 0x0c, 0x8a, 0x31, 0x07, 0x25, 0x82, 0x10, 0xc5, 0x1c,
0xe6, 0x20, 0x8a, 0x31, 0xc4, 0x18, 0x62, 0x0c, 0xa3, 0x14, 0xe5, 0x1c, 0x62, 0x10, 0x47, 0x29,
0x27, 0x25, 0xe5, 0x1c, 0x83, 0x10, 0xac, 0x35, 0x27, 0x25, 0xe5, 0x18, 0x62, 0x0c, 0x89, 0x31,
0x06, 0x21, 0x8a, 0x31, 0x83, 0x10, 0xc4, 0x18, 0x83, 0x10, 0xc5, 0x18, 0x8a, 0x31, 0x06, 0x21,
0x41, 0x0c, 0x27, 0x25, 0x83, 0x14, 0xc5, 0x1c, 0x27, 0x25, 0x6a, 0x2d, 0xa3, 0x14, 0x0f, 0x42,
0x62, 0x10, 0xe5, 0x1c, 0x69, 0x2d, 0x06, 0x21, 0xcc, 0x39, 0x07, 0x25, 0xc4, 0x18, 0x62, 0x0c,
0xc4, 0x18, 0x41, 0x0c, 0x06, 0x21, 0x8a, 0x31, 0x48, 0x29, 0xe5, 0x20, 0x20, 0x04, 0x83, 0x14,
0x69, 0x2d, 0xc4, 0x18, 0xed, 0x3d, 0x27, 0x25, 0xc4, 0x18, 0x62, 0x0c, 0x06, 0x25, 0xaa, 0x35,
0xa3, 0x14, 0x41, 0x08, 0x48, 0x2d, 0xc5, 0x1c, 0x62, 0x10, 0x06, 0x21, 0x8a, 0x35, 0xc4, 0x18,
0xe6, 0x1c, 0x62, 0x10, 0xa4, 0x18, 0x6a, 0x31, 0x26, 0x25, 0x83, 0x10, 0xc5, 0x18, 0x8a, 0x31,
0xcc, 0x39, 0x82, 0x10, 0x27, 0x25, 0xc5, 0x18, 0x8a, 0x31, 0xc5, 0x18, 0x83, 0x10, 0x27, 0x21,
0x82, 0x10, 0x68, 0x31, 0xc4, 0x1c, 0x26, 0x29, 0x82, 0x10, 0xe6, 0x20, 0x68, 0x2d, 0xc5, 0x18,
0xed, 0x3d, 0xa3, 0x14, 0x28, 0x29, 0x8a, 0x31, 0xc4, 0x14, 0x28, 0x25, 0x07, 0x21, 0x8a, 0x31,
0x06, 0x21, 0xc5, 0x1c, 0x69, 0x2d, 0x83, 0x10, 0x48, 0x29, 0x83, 0x14, 0x41, 0x08, 0xc4, 0x1c,
0xc4, 0x18, 0x06, 0x25, 0x62, 0x10, 0xaa, 0x39, 0x06, 0x25, 0x82, 0x14, 0x69, 0x31, 0xc5, 0x1c,
0xa4, 0x14, 0x69, 0x2d, 0xe6, 0x1c, 0x62, 0x0c, 0xab, 0x35, 0xe5, 0x1c, 0x83, 0x14, 0x27, 0x29,
0x48, 0x29, 0xc4, 0x18, 0x62, 0x0c, 0xe6, 0x20, 0xe5, 0x1c, 0xa4, 0x18, 0x62, 0x0c, 0x69, 0x2d,
0x83, 0x10, 0x27, 0x25, 0xab, 0x35, 0xc5, 0x1c, 0xc4, 0x18, 0x8a, 0x31, 0x06, 0x21, 0x62, 0x0c,
0xe5, 0x1c, 0xa4, 0x14, 0x48, 0x29, 0x62, 0x0c, 0x48, 0x29, 0xe6, 0x1c, 0x62, 0x0c, 0xc4, 0x18,
0x8a, 0x31, 0x62, 0x0c, 0x07, 0x25, 0xa4, 0x14, 0xcc, 0x39, 0x48, 0x2d, 0xe5, 0x1c, 0x62, 0x0c,
0xab, 0x35, 0x06, 0x21, 0xc4, 0x18, 0x28, 0x29, 0x48, 0x29, 0x62, 0x0c, 0xed, 0x3d, 0xe6, 0x1c,
0x62, 0x0c, 0xab, 0x35, 0xc4, 0x18, 0x27, 0x25, 0xc4, 0x18, 0x62, 0x10, 0xe6, 0x20, 0x49, 0x2d,
0x20, 0x04, 0xab, 0x39, 0xe5, 0x20, 0x83, 0x14, 0xa4, 0x14, 0x48, 0x29, 0xe6, 0x20, 0x62, 0x0c,
0xa4, 0x18, 0xe6, 0x20, 0x69, 0x2d, 0x62, 0x0c, 0xac, 0x39, 0x83, 0x10, 0x48, 0x2d, 0x06, 0x21,
0x89, 0x35, 0x06, 0x25, 0xa3, 0x18, 0x47, 0x2d, 0xc4, 0x18, 0x06, 0x21, 0x8a, 0x31, 0x62, 0x10,
0x62, 0x0c, 0x48, 0x29, 0xa4, 0x14, 0xe6, 0x1c, 0x06, 0x1d, 0x48, 0x29, 0x83, 0x10, 0xc5, 0x18,
0x89, 0x31, 0x83, 0x10, 0x27, 0x29, 0xed, 0x41, 0xc5, 0x18, 0x27, 0x25, 0x83, 0x14, 0x41, 0x0c,
0x82, 0x10, 0xc4, 0x18, 0x69, 0x2d, 0x06, 0x21, 0x62, 0x10, 0x27, 0x25, 0xc5, 0x1c, 0xee, 0x41,
0x83, 0x14, 0xcc, 0x39, 0x69, 0x2d, 0xe6, 0x20, 0x51, 0x4a, 0xcc, 0x35, 0x83, 0x14, 0x07, 0x25,
0x49, 0x2d, 0xe5, 0x1c, 0xcc, 0x39, 0x83, 0x14, 0xe6, 0x20, 0x62, 0x10, 0xa4, 0x18, 0x69, 0x31,
0x41, 0x0c, 0xe6, 0x20, 0xa4, 0x18, 0x49, 0x2d, 0x27, 0x25, 0xe5, 0x1c, 0x41, 0x0c, 0xa4, 0x14,
0xe6, 0x20, 0x48, 0x29, 0x83, 0x10, 0xcc, 0x39, 0xac, 0x39, 0xa4, 0x18, 0x48, 0x2d, 0x27, 0x25,
0xcc, 0x3d, 0x06, 0x21, 0x83, 0x14, 0x69, 0x2d, 0x62, 0x10, 0xc4, 0x18, 0x27, 0x25, 0xab, 0x35,
0x06, 0x21, 0x83, 0x10, 0xc4, 0x18, 0x69, 0x2d, 0x28, 0x29, 0x6a, 0x31, 0x06, 0x21, 0xa4, 0x14,
0x28, 0x29, 0xe5, 0x1c, 0x83, 0x14, 0xcc, 0x39, 0xc5, 0x1c, 0x62, 0x0c, 0xa3, 0x14, 0x49, 0x29,
};

View File

@ -1,59 +0,0 @@
#include <SPI.h>
#include <GD.h>
void spr(int x, int y, byte pal)
{
static int sprnum = 0;
GD.sprite(sprnum++, x, y, 0, pal, 0);
}
static unsigned int random_color()
{
return RGB(64 + random(192), 64 + random(192), 64 + random(192));
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0,"Sprite palettes");
for (i = 0; i < 256; i++)
GD.wr(RAM_SPRIMG + i, i);
// Fill all the palettes with random colors
for (i = 0; i < (4 * 256); i++)
GD.wr16(RAM_SPRPAL + (i << 1), random_color());
for (i = 0; i < 16; i++) {
GD.wr16(PALETTE16A + (i << 1), random_color());
GD.wr16(PALETTE16B + (i << 1), random_color());
}
for (i = 0; i < 4; i++) {
GD.wr16(PALETTE4A + (i << 1), random_color());
GD.wr16(PALETTE4B + (i << 1), random_color());
}
GD.putstr(0, 8, "Four 256-color palettes");
for (i = 0; i < 4; i++)
spr(200 + 20 * i, (8 * 8), i);
GD.putstr(0, 12, "Two 16-color palettes");
for (i = 0; i < 2; i++) {
spr(200 + 20 * i, (8 * 12), 0x4 | i);
spr(200 + 20 * i, (8 * 12) + 20, 0x6 | i);
}
GD.putstr(0, 18, "Two 4-color palettes");
for (i = 0; i < 2; i++) {
spr(200 + 20 * i, (8 * 18), 0x8 | i);
spr(200 + 20 * i, (8 * 18) + 20, 0xa | i);
spr(200 + 20 * i, (8 * 18) + 40, 0xc | i);
spr(200 + 20 * i, (8 * 18) + 60, 0xe | i);
}
}
void loop()
{
}

View File

@ -1,55 +0,0 @@
static PROGMEM prog_uchar r_img[] = {
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x09, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x04, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0c, 0x00, 0x01, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0c, 0x00, 0x02, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x06, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0d, 0x09, 0x01, 0x01, 0x0b, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x08, 0x00, 0x05, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0d, 0x04, 0x00, 0x08, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0a, 0x00, 0x02, 0x0c, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
};
static PROGMEM prog_uchar r_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xdf, 0x7b, 0xbf, 0x77, 0x5f, 0x6f, 0x3f, 0x6b, 0xbf, 0x5e, 0x7f, 0x5a,
0xbf, 0x45, 0x7f, 0x41, 0x3f, 0x39, 0x9f, 0x28, 0x5f, 0x24, 0x1f, 0x1c, 0x1f, 0x1c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

View File

@ -1,28 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "r.h"
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0,"Sprite rotation");
GD.copy(RAM_SPRIMG, r_img, sizeof(r_img));
GD.copy(RAM_SPRPAL, r_pal, sizeof(r_pal));
for (i = 0; i < 8; i++) {
char msg[] = "ROT=.";
byte y = 3 + 4 * i;
msg[4] = '0' + i;
GD.putstr(18, y, msg);
GD.sprite(i, 200, 8 * y, 0, 0, i);
}
}
void loop()
{
}

View File

@ -1,291 +0,0 @@
static PROGMEM prog_uchar platformer_pic[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03, 0x00,
0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x15, 0x16, 0x17, 0x18, 0x15, 0x16, 0x17, 0x18, 0x15, 0x16, 0x17, 0x18, 0x15, 0x16, 0x17, 0x18,
0x19, 0x19, 0x1a, 0x1b, 0x19, 0x19, 0x1a, 0x1b, 0x19, 0x19, 0x1a, 0x1b, 0x19, 0x19, 0x1a, 0x1b,
0x1c, 0x1d, 0x1e, 0x1f, 0x1c, 0x1d, 0x1e, 0x1f, 0x1c, 0x1d, 0x1e, 0x1f, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x20, 0x21, 0x22, 0x23, 0x20, 0x21, 0x22, 0x23, 0x20, 0x21, 0x22, 0x23,
0x24, 0x25, 0x26, 0x27, 0x24, 0x25, 0x26, 0x27, 0x24, 0x25, 0x26, 0x27, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2a, 0x2b, 0x28, 0x29, 0x2a, 0x2b, 0x28, 0x29, 0x2a, 0x2b, 0x28, 0x29, 0x2a, 0x2b,
0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
0x2c, 0x2c, 0x2c, 0x2c, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
0x2c, 0x2c, 0x2c, 0x2c, 0x33, 0x34, 0x39, 0x36, 0x3a, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
0x3c, 0x3d, 0x3d, 0x3e, 0x3f, 0x40, 0x40, 0x41, 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e, 0x4f, 0x50, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e, 0x4f, 0x50, 0x50, 0x51, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e, 0x4f, 0x50, 0x50, 0x51, 0x56, 0x57, 0x58, 0x59,
0x5a, 0x5b, 0x5c, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x2c, 0x2c, 0x5e, 0x5f, 0x60, 0x61, 0x2c, 0x2c,
0x62, 0x63, 0x64, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x2c, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x2c,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x9b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x9c,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
};
static PROGMEM prog_uchar platformer_chr[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x41, 0x55, 0x54,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9, 0x55, 0xaa, 0x60, 0x55, 0x54,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x6a, 0x00, 0xaa, 0x0a, 0xaa, 0x05, 0xaa,
0xaa, 0xa5, 0xaa, 0x50, 0x55, 0x0a, 0x00, 0x2a, 0x95, 0x2a, 0x54, 0xa9, 0x02, 0xa9, 0xaa, 0xa5,
0x40, 0x2a, 0x2a, 0xaa, 0x0a, 0xaa, 0x81, 0xa5, 0xa8, 0x00, 0xaa, 0xa5, 0x5a, 0x95, 0x05, 0x54,
0x95, 0x00, 0xa9, 0x55, 0x2a, 0x00, 0x4a, 0xaa, 0x4a, 0xaa, 0x52, 0x80, 0x54, 0x00, 0xa9, 0x55,
0x56, 0xaa, 0x05, 0x6a, 0x50, 0x55, 0x94, 0x00, 0x54, 0x2a, 0x50, 0xa9, 0x41, 0x55, 0x28, 0x00,
0xaa, 0xa5, 0xaa, 0x50, 0x55, 0x0a, 0x00, 0x2a, 0x95, 0x06, 0x54, 0x01, 0x02, 0xa0, 0xaa, 0xa9,
0x40, 0x2a, 0x2a, 0xaa, 0x0a, 0xaa, 0x81, 0xa5, 0xa0, 0x00, 0xaa, 0xaa, 0x5a, 0xa8, 0x05, 0x41,
0x95, 0x00, 0xa9, 0x55, 0x2a, 0x00, 0x4a, 0xaa, 0x4a, 0xaa, 0x52, 0x80, 0x54, 0x00, 0xa5, 0x55,
0x56, 0xaa, 0x05, 0x6a, 0x50, 0x55, 0x94, 0x00, 0x54, 0x2a, 0x50, 0xa9, 0x41, 0x55, 0x04, 0x00,
0x9f, 0x55, 0x25, 0x5a, 0x0a, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x8a, 0xa9, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xbf, 0x7f, 0x6a, 0x6f, 0x00, 0x5b, 0x00, 0x15, 0x00, 0x19, 0x00, 0x06, 0x00, 0x01,
0xff, 0xff, 0xff, 0xbf, 0xfe, 0xbf, 0xfa, 0xae, 0xaa, 0x5a, 0x55, 0x45, 0xa9, 0x00, 0x54, 0x00,
0xfb, 0xea, 0xea, 0xa5, 0xea, 0x5f, 0xa5, 0x57, 0x95, 0x55, 0x41, 0xa9, 0x00, 0x54, 0x00, 0x00,
0xaa, 0xae, 0xaf, 0xfd, 0xff, 0xfd, 0xff, 0xf5, 0x5f, 0x56, 0xa5, 0x58, 0x0a, 0xa0, 0x00, 0x00,
0xad, 0xfe, 0x6a, 0xfa, 0x95, 0xa9, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa5, 0x00, 0x90, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x45, 0x15, 0x00, 0x00, 0x15, 0x01, 0x40, 0x55, 0x15, 0x41, 0x55, 0x55, 0x55, 0x55, 0x55,
0x10, 0x00, 0x05, 0x41, 0x40, 0x00, 0x14, 0x00, 0x45, 0x54, 0x54, 0x15, 0x55, 0x55, 0x55, 0x55,
0x00, 0x00, 0x50, 0x00, 0x00, 0x10, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x01, 0x15, 0x55, 0x55,
0x00, 0x00, 0x00, 0x54, 0x40, 0x00, 0x05, 0x50, 0x00, 0x01, 0x55, 0x55, 0x44, 0x05, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x54, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x51, 0x55,
0x54, 0x55, 0x41, 0x05, 0x55, 0x55, 0x00, 0x00, 0x15, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x50, 0x04, 0x15, 0x55, 0x54, 0x00, 0x01, 0x51, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x15, 0x01, 0x40, 0x55, 0x55, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x41, 0x15, 0x14, 0x00, 0x55, 0x54, 0x55, 0x01, 0x11, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0x01, 0x55, 0x55, 0x00, 0x00, 0x50, 0x54, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x50, 0x11, 0x05, 0x54, 0x50, 0x01, 0x01, 0x50, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0x54, 0x00, 0x04, 0x05, 0x55, 0x55, 0x01, 0x10, 0x50, 0x05,
0x55, 0x55, 0x55, 0x55, 0x55, 0x41, 0x40, 0x54, 0x01, 0x01, 0x55, 0x54, 0x44, 0x00, 0x00, 0x50,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x54, 0x15, 0x15, 0x45, 0x40, 0x00, 0x04, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x41, 0x41, 0x55, 0x15, 0x40, 0x00, 0x15, 0x51, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x15, 0x55, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x54, 0x55, 0x45, 0x00, 0x00, 0x15, 0x05, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x51, 0x00, 0x40, 0x15, 0x05, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x04, 0x50, 0x40, 0x15, 0x05, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x50, 0x45, 0x00, 0x10, 0x15, 0x40, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x10, 0x55, 0x40, 0x00, 0x15, 0x40, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x80, 0xa8, 0x04, 0xa0, 0x01, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa8, 0x00, 0x56, 0x80, 0x95, 0x60, 0x65, 0x58, 0x99, 0x58, 0xa5, 0x56, 0x99, 0x56, 0xa5, 0x56,
0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x52, 0x55, 0x4b, 0x55, 0x2f, 0x54, 0xbf, 0x54, 0xff,
0x55, 0x00, 0x40, 0xaa, 0x2a, 0xfa, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xea, 0xfe, 0xaa, 0xea, 0xaa,
0xaa, 0x00, 0xff, 0xa8, 0xfd, 0x56, 0xd5, 0x55, 0x55, 0x75, 0xd7, 0xfd, 0xff, 0xfd, 0xff, 0xfd,
0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x8f, 0xff, 0xa3, 0xff, 0xa8, 0xff, 0x96, 0x3f, 0x56, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x01, 0x50, 0x01, 0x44, 0x01, 0x50, 0x01, 0x44, 0x01, 0x50, 0x01, 0x44, 0x01, 0x50, 0x01,
0x52, 0xfe, 0x52, 0xfa, 0x52, 0xfa, 0x4b, 0xfa, 0x4f, 0xfa, 0x4f, 0xea, 0x4f, 0xea, 0x4f, 0xea,
0x55, 0x40, 0x54, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x15, 0x01, 0x55, 0x15, 0x55, 0x55, 0x54,
0xfc, 0x29, 0xfe, 0xaa, 0xc2, 0xaa, 0x02, 0xa8, 0x02, 0x80, 0x00, 0x00, 0x3f, 0x00, 0xff, 0x02,
0xa8, 0x1f, 0xa8, 0x1f, 0x80, 0x1f, 0x00, 0x07, 0x00, 0x07, 0x02, 0x87, 0x2a, 0x87, 0x2a, 0x87,
0x4f, 0xea, 0x4c, 0x2a, 0x60, 0x2a, 0x60, 0x28, 0x60, 0x00, 0x63, 0xc0, 0x4f, 0xc0, 0x4f, 0xc2,
0xaa, 0x15, 0xa8, 0x55, 0x80, 0x55, 0x00, 0x54, 0x00, 0x40, 0x02, 0x00, 0x2a, 0x00, 0xaa, 0x01,
0x80, 0x2d, 0x82, 0xad, 0xaa, 0xad, 0xea, 0xad, 0xea, 0x89, 0xe8, 0x09, 0xc0, 0x09, 0x80, 0x09,
0x00, 0x00, 0x3f, 0xff, 0x3f, 0xbf, 0x3f, 0x95, 0x3a, 0x95, 0x3d, 0x55, 0x3d, 0x55, 0x3d, 0x55,
0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x00, 0x02, 0xff, 0xf2, 0xff, 0xfa, 0x55, 0xfa, 0x55, 0xaa, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42,
0xaa, 0xaa, 0x95, 0x55, 0x95, 0xd5, 0x95, 0xc0, 0x9f, 0xc0, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00,
0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xa9, 0xff, 0xf9, 0xff, 0xf5, 0x00, 0xf5, 0x00, 0x55, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29,
0xff, 0xff, 0xc0, 0x00, 0xc0, 0x80, 0xc0, 0x95, 0xca, 0x95, 0xc1, 0x55, 0xc1, 0x55, 0xc1, 0x55,
0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xa8, 0xff, 0xf8, 0xff, 0xf0, 0x55, 0xf0, 0x55, 0x00, 0x55, 0x68, 0x55, 0x68, 0x55, 0x68,
0x55, 0x55, 0x43, 0xff, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb,
0xaa, 0xaa, 0x00, 0x05, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f,
0xaa, 0xaa, 0x00, 0x55, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff,
0x55, 0x55, 0x20, 0x89, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65,
0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29,
0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42,
0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81,
0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x55, 0x55, 0x55, 0x55,
0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0x55, 0x55, 0x55, 0x55,
0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0x55, 0x55, 0x55, 0x55,
0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00,
0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb,
0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a,
0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa,
0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10,
0xaa, 0xaa, 0x00, 0x00, 0xcc, 0xcc, 0xff, 0xff, 0x55, 0x55, 0xaa, 0xaa, 0x7f, 0xf5, 0x57, 0xfd,
0x55, 0x55, 0x4d, 0x00, 0x79, 0x3f, 0x79, 0x3f, 0x79, 0x3f, 0x79, 0x3f, 0x79, 0xaa, 0x55, 0x55,
0x55, 0x55, 0x02, 0x4d, 0xfe, 0x79, 0xfe, 0x79, 0xfe, 0x79, 0xfe, 0x79, 0xaa, 0x79, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x95, 0xa9, 0x40, 0x94, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0xd5, 0x00, 0x00, 0x22, 0x08, 0x8a, 0x22, 0x2a,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x55, 0x0a, 0x55, 0x40, 0x44, 0x00, 0x10, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x55, 0xa8, 0x15, 0x82, 0x81,
0x40, 0x15, 0x54, 0x01, 0x55, 0x40, 0x15, 0x50, 0x01, 0x54, 0x40, 0x15, 0x54, 0x01, 0x55, 0x40,
0x40, 0x24, 0x4f, 0xe7, 0x4f, 0xe7, 0x4f, 0xe7, 0x4f, 0xe7, 0x4f, 0xe7, 0x6a, 0xa7, 0x55, 0x55,
0x4a, 0xac, 0xc9, 0x5c, 0xc9, 0x5c, 0xc9, 0x5c, 0xc9, 0x5c, 0xc9, 0x5c, 0xcf, 0xfc, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xa5, 0xaa, 0x90, 0xaa, 0x40, 0xa9, 0x03, 0xa4, 0x0f, 0x90, 0x03, 0x40, 0x0f,
0x40, 0xaa, 0x0a, 0xab, 0x2a, 0xae, 0xaa, 0xbb, 0xaa, 0xee, 0xab, 0xbb, 0xaa, 0xef, 0xab, 0xbb,
0x55, 0x44, 0xd5, 0x11, 0xd4, 0x44, 0xd5, 0x10, 0xd4, 0x40, 0xd1, 0x10, 0x44, 0x4a, 0x51, 0x2a,
0x2a, 0x65, 0xaa, 0x98, 0xaa, 0x67, 0xa9, 0x98, 0xaa, 0x67, 0xa9, 0x98, 0xfa, 0x66, 0xfd, 0x99,
0x54, 0xff, 0x51, 0x0f, 0x54, 0x43, 0x95, 0x10, 0x55, 0x44, 0x95, 0x51, 0x65, 0x54, 0x95, 0x51,
0xaa, 0xaa, 0x0a, 0xaa, 0xf2, 0xaa, 0x3c, 0xaa, 0x4f, 0x2a, 0x53, 0xca, 0x50, 0xf2, 0x54, 0x3c,
0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa4, 0xaa, 0x90, 0xaa, 0x90, 0xaa, 0x40, 0xaa, 0x40, 0xa9, 0x00,
0x55, 0x40, 0x55, 0x00, 0x54, 0x40, 0x51, 0x00, 0x54, 0x50, 0x51, 0x55, 0x45, 0x55, 0x11, 0x55,
0xa2, 0x21, 0x88, 0x81, 0x22, 0x05, 0x88, 0x95, 0x21, 0x57, 0x55, 0x55, 0x55, 0x57, 0x55, 0x55,
0x44, 0xbf, 0x12, 0xef, 0x47, 0xbf, 0x1e, 0xff, 0x4b, 0xbf, 0x1e, 0xff, 0x4b, 0xbf, 0x1e, 0xff,
0xaa, 0x33, 0xa9, 0x8c, 0xaa, 0x73, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c,
0x40, 0x03, 0x80, 0x00, 0x60, 0x00, 0x94, 0x00, 0x65, 0x40, 0x99, 0x55, 0x65, 0x55, 0x99, 0x55,
0x94, 0x0f, 0x64, 0x0f, 0x98, 0x03, 0xa7, 0x00, 0xac, 0xc0, 0xf3, 0x30, 0xfc, 0xc0, 0xff, 0x30,
0x40, 0x00, 0x40, 0x00, 0x90, 0x00, 0xa4, 0x00, 0xa4, 0x00, 0x69, 0x00, 0x69, 0x00, 0x5a, 0x40,
0xa9, 0x00, 0xa9, 0x00, 0xa4, 0x00, 0xa4, 0x00, 0xa4, 0x03, 0xa4, 0x00, 0x90, 0x03, 0x90, 0x0c,
0x45, 0x55, 0x15, 0x55, 0x45, 0x58, 0x15, 0x42, 0x45, 0x08, 0x15, 0x02, 0x54, 0x08, 0x14, 0x22,
0xaa, 0xa9, 0xaa, 0xa6, 0xce, 0xa9, 0x33, 0xa6, 0xcf, 0xe9, 0x3f, 0xe6, 0xcf, 0xe9, 0x3f, 0xf6,
0x4b, 0xff, 0x1e, 0xff, 0x47, 0xff, 0x12, 0xff, 0x44, 0xff, 0x11, 0x3f, 0x44, 0x0f, 0x11, 0x00,
0x55, 0x1e, 0x55, 0x4b, 0x55, 0x2e, 0x55, 0x7b, 0x55, 0xee, 0x56, 0xbb, 0x5a, 0xee, 0xaa, 0xbb,
0x8a, 0xaa, 0x22, 0xaa, 0x8a, 0x95, 0x22, 0x55, 0x89, 0x55, 0x21, 0x55, 0x8b, 0x55, 0x2d, 0x55,
0xa8, 0x88, 0xaa, 0x20, 0x5a, 0x88, 0x56, 0x22, 0x55, 0x88, 0x55, 0xa2, 0x55, 0x48, 0x55, 0x62,
0x50, 0x6a, 0x50, 0x6a, 0x54, 0x1a, 0x54, 0x1a, 0x54, 0x1a, 0x54, 0x1a, 0x55, 0x06, 0x55, 0x06,
0xd0, 0x02, 0xd0, 0x08, 0xd0, 0x02, 0x40, 0x08, 0x40, 0x02, 0x40, 0x08, 0x40, 0x02, 0x40, 0x88,
0x50, 0x08, 0x10, 0x22, 0x50, 0x88, 0x50, 0x22, 0x50, 0x88, 0x50, 0x22, 0x50, 0x88, 0x50, 0x22,
0x55, 0x52, 0xd5, 0x58, 0x55, 0x52, 0xd5, 0x58, 0x75, 0x52, 0xd5, 0x58, 0x75, 0x52, 0xd5, 0x58,
0x44, 0x00, 0x11, 0x00, 0x44, 0x00, 0x11, 0x00, 0x44, 0x00, 0x11, 0x00, 0x44, 0x00, 0x11, 0x0a,
0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0xa5, 0x44,
0x87, 0x55, 0x2d, 0x55, 0x87, 0x55, 0x2d, 0x55, 0x87, 0x55, 0x2d, 0x55, 0x87, 0x55, 0x2d, 0x55,
0xaa, 0x9c, 0xaa, 0xa3, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c, 0xaa, 0x63,
0x55, 0x07, 0x55, 0x07, 0x15, 0x07, 0x55, 0x41, 0x15, 0x41, 0x55, 0x41, 0x15, 0x41, 0x56, 0x41,
0x81, 0x53, 0x81, 0x7c, 0x81, 0x53, 0x81, 0x7c, 0x85, 0x5f, 0x85, 0x74, 0x85, 0x5f, 0x85, 0x74,
0xa8, 0xcc, 0xa8, 0x33, 0xa8, 0xcc, 0xaa, 0x33, 0xaa, 0xcc, 0xaa, 0xb3, 0xaa, 0x6c, 0xaa, 0x99,
0xaa, 0xbd, 0xaa, 0xb7, 0xaa, 0xbd, 0xaa, 0xf7, 0xaa, 0xfd, 0xab, 0xf7, 0xaf, 0xfd, 0x3f, 0xf7,
0x44, 0x3f, 0x11, 0xff, 0x44, 0xff, 0x12, 0xff, 0x47, 0xff, 0x12, 0xff, 0x4b, 0xff, 0x1e, 0xff,
0xa8, 0xcc, 0xaa, 0x33, 0xaa, 0xcc, 0xaa, 0xb3, 0xaa, 0x4c, 0xaa, 0xb3, 0xaa, 0x6c, 0xaa, 0x93,
0x8b, 0x55, 0x21, 0x55, 0x8b, 0x55, 0x22, 0x55, 0x88, 0x55, 0x22, 0x95, 0x88, 0xa5, 0x22, 0xaa,
0x55, 0x4c, 0x55, 0xb3, 0x55, 0x4c, 0x55, 0x33, 0x55, 0xcc, 0x57, 0x33, 0x5f, 0xcc, 0xff, 0x33,
0x8f, 0xe8, 0x0f, 0xe8, 0x8f, 0xe8, 0x0f, 0xe8, 0xbf, 0xd8, 0x3f, 0xd8, 0xbf, 0xd8, 0x3f, 0xd8,
0x85, 0x5f, 0x85, 0x74, 0x85, 0x5c, 0x85, 0x74, 0x85, 0x5c, 0x85, 0x5c, 0x85, 0x74, 0x85, 0x5c,
0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11,
0x45, 0x56, 0x15, 0x59, 0x45, 0x56, 0x15, 0x59, 0x45, 0x56, 0x45, 0x56, 0x15, 0x59, 0x45, 0x56,
0x4b, 0xff, 0x1e, 0xff, 0x4b, 0xff, 0x1f, 0xff, 0x4a, 0xff, 0x4b, 0xff, 0x1e, 0xff, 0x4b, 0xff,
0x55, 0x1e, 0x55, 0x4b, 0x55, 0x1e, 0x55, 0x1e, 0x55, 0x4b, 0x55, 0x1e, 0x55, 0x4b, 0x55, 0x1e,
0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xa5,
0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x22, 0x5a, 0x88,
0xd5, 0x6c, 0x15, 0x6c, 0xd5, 0x6c, 0xd5, 0x6c, 0x15, 0x6c, 0xd5, 0x6c, 0x15, 0x6c, 0xd5, 0x6c,
0x85, 0x74, 0x85, 0x5c, 0x85, 0x74, 0x85, 0x5c, 0x81, 0x70, 0x81, 0x50, 0x81, 0x70, 0x81, 0x50,
0xaa, 0x99, 0xaa, 0x6c, 0xaa, 0xb3, 0xaa, 0xcc, 0xaa, 0x33, 0xa8, 0xcc, 0xa8, 0x33, 0xa8, 0xcc,
0x80, 0x0c, 0x50, 0x03, 0x54, 0x0c, 0x55, 0x03, 0x55, 0x0c, 0x55, 0x43, 0x55, 0x4c, 0x55, 0x43,
0x4e, 0xff, 0x1b, 0xff, 0x46, 0xff, 0x11, 0xff, 0x44, 0xff, 0x11, 0x7f, 0x44, 0x5f, 0x11, 0x55,
0xaa, 0x8c, 0xaa, 0x73, 0xaa, 0x8c, 0xaa, 0x33, 0xaa, 0xcc, 0xab, 0x33, 0xaf, 0xcc, 0xff, 0x33,
0x88, 0x15, 0x22, 0x55, 0x88, 0x55, 0x23, 0x55, 0x89, 0x55, 0x23, 0x55, 0x8d, 0x55, 0x27, 0x55,
0xa9, 0x11, 0xaa, 0x44, 0xaa, 0x11, 0xaa, 0x84, 0xaa, 0xd1, 0xaa, 0x84, 0xaa, 0xe1, 0xaa, 0xb4,
0x80, 0x1e, 0xc0, 0x1e, 0xa0, 0x3e, 0xe0, 0x3e, 0xa0, 0x3e, 0xe0, 0x3e, 0xa8, 0xbe, 0xea, 0xbe,
0x80, 0x03, 0x80, 0x0c, 0x80, 0x03, 0x80, 0x0c, 0x80, 0x03, 0x80, 0x0c, 0x80, 0x03, 0x80, 0x4c,
0x55, 0x05, 0x55, 0x05, 0x15, 0x05, 0x55, 0x41, 0x15, 0x41, 0x55, 0x41, 0x15, 0x41, 0x56, 0x41,
};
static PROGMEM prog_uchar platformer_pal[] = {
0x9f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0x00, 0x00,
0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0x7f, 0x36, 0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73, 0x7f, 0x36, 0x3f, 0x5f, 0xff, 0x52, 0x00, 0x00,
0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73,
0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x7f, 0x36, 0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73,
0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x00, 0x00,
0x7f, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x9f, 0x3a, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x3a, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00,
0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00,
0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00,
0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00, 0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00,
0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00, 0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x36, 0xba, 0x32, 0x1f, 0x4b, 0x00, 0x00,
0x1f, 0x4b, 0xba, 0x32, 0xdb, 0x36, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0x0b, 0x27, 0xf3, 0x47,
0x00, 0x00, 0x1f, 0x4b, 0x0b, 0x27, 0xf3, 0x47, 0x1f, 0x4b, 0x87, 0x16, 0x00, 0x00, 0x0b, 0x27,
0x00, 0x00, 0x25, 0x02, 0x87, 0x16, 0x1f, 0x4b, 0xdb, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xba, 0x32, 0xdb, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0x0b, 0x27, 0xf3, 0x47,
0x8f, 0x37, 0x0b, 0x27, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x27, 0x25, 0x02, 0x87, 0x16, 0x8f, 0x37,
0x87, 0x16, 0x00, 0x00, 0x25, 0x02, 0x1f, 0x4b, 0x8f, 0x37, 0x00, 0x00, 0x0b, 0x27, 0xf3, 0x47,
0x0b, 0x27, 0x87, 0x16, 0x8f, 0x37, 0x00, 0x00, 0x25, 0x02, 0x00, 0x00, 0x87, 0x16, 0x0b, 0x27,
0xa3, 0x66, 0x29, 0x73, 0xe4, 0x49, 0xb2, 0x7f, 0xa3, 0x66, 0x29, 0x73, 0xb2, 0x7f, 0x00, 0x00,
0xa3, 0x66, 0x29, 0x73, 0xe4, 0x49, 0xb2, 0x7f, 0x32, 0x47, 0x95, 0x53, 0xee, 0x36, 0xac, 0x2e,
0x32, 0x47, 0x95, 0x53, 0xee, 0x36, 0x00, 0x00, 0x32, 0x47, 0xac, 0x2e, 0xee, 0x36, 0x95, 0x53,
0xbf, 0x4f, 0x5e, 0x43, 0x9c, 0x2a, 0xfd, 0x36, 0xbf, 0x4f, 0x5e, 0x43, 0xfd, 0x36, 0x00, 0x00,
0x9c, 0x2a, 0x5e, 0x43, 0xfd, 0x36, 0xbf, 0x4f, 0x45, 0x2e, 0x00, 0x00, 0xff, 0x7f, 0x8f, 0x57,
0x8f, 0x57, 0xea, 0x42, 0x00, 0x00, 0x45, 0x2e, 0xea, 0x42, 0x45, 0x2e, 0x00, 0x00, 0xa0, 0x19,
0x45, 0x2e, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x00, 0xa3, 0x66, 0x29, 0x73, 0xb2, 0x7f, 0x00, 0x00,
0x29, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x73, 0xe4, 0x49, 0xa3, 0x66, 0x00, 0x00,
0x32, 0x47, 0x95, 0x53, 0xee, 0x36, 0x00, 0x00, 0x32, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xee, 0x36, 0x32, 0x47, 0xac, 0x2e, 0x00, 0x00, 0xbf, 0x4f, 0x5e, 0x43, 0xfd, 0x36, 0x00, 0x00,
0x5e, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x36, 0x9c, 0x2a, 0x5e, 0x43, 0x00, 0x00,
0x45, 0x2e, 0x00, 0x00, 0xff, 0x7f, 0x8f, 0x57, 0xea, 0x42, 0x00, 0x00, 0x8f, 0x57, 0x45, 0x2e,
0xea, 0x42, 0x00, 0x00, 0x45, 0x2e, 0xa0, 0x19, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x00, 0x00, 0x00,
0x45, 0x2e, 0x00, 0x00, 0xff, 0x7f, 0x8f, 0x57, 0xea, 0x42, 0x8f, 0x57, 0x45, 0x2e, 0x00, 0x00,
0xea, 0x42, 0x45, 0x2e, 0xa0, 0x19, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x00, 0x00, 0x00,
0x8c, 0x7e, 0x01, 0x45, 0x00, 0x00, 0x84, 0x59, 0x20, 0x7f, 0x00, 0x00, 0x80, 0x49, 0x40, 0x62,
0x20, 0x7f, 0x00, 0x00, 0x80, 0x49, 0x40, 0x62, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0x00, 0x00, 0x4f, 0x5b, 0x88, 0x42, 0x2e, 0x57, 0x1f, 0x4b,
0xa8, 0x46, 0x2e, 0x57, 0x67, 0x3e, 0x1f, 0x4b, 0x67, 0x3e, 0x1f, 0x4b, 0x88, 0x42, 0x00, 0x00,
0x01, 0x45, 0x84, 0x59, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7f, 0x00, 0x00, 0x80, 0x49, 0x40, 0x62,
0x00, 0x00, 0x40, 0x62, 0x20, 0x7f, 0x80, 0x49, 0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0xd1, 0x73,
0x4f, 0x5b, 0x88, 0x42, 0xd1, 0x73, 0x6e, 0x6f, 0xc9, 0x4a, 0x2e, 0x57, 0x2c, 0x67, 0x8f, 0x6f,
0xeb, 0x5e, 0x88, 0x42, 0xc9, 0x4a, 0x2c, 0x67, 0xa8, 0x5a, 0xeb, 0x62, 0x2c, 0x67, 0x67, 0x3e,
0x67, 0x3e, 0xa8, 0x5a, 0x1f, 0x4b, 0x88, 0x42, 0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0x00, 0x00,
0xd1, 0x73, 0x4f, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6f, 0x2e, 0x57, 0xd1, 0x73, 0xc9, 0x4a,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0x88, 0x42, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a,
0xeb, 0x62, 0x88, 0x42, 0xc9, 0x4a, 0xa8, 0x5a, 0x67, 0x3e, 0xa8, 0x5a, 0xeb, 0x62, 0x88, 0x42,
0x1f, 0x4b, 0x67, 0x3e, 0x88, 0x42, 0x00, 0x00, 0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0xd1, 0x73,
0xd1, 0x73, 0x4f, 0x5b, 0x6e, 0x6f, 0x00, 0x00, 0xd1, 0x73, 0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a, 0x88, 0x42,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x2c, 0x67, 0x67, 0x3e, 0xeb, 0x62, 0x88, 0x42, 0x00, 0x00,
0x88, 0x42, 0x67, 0x3e, 0x1f, 0x4b, 0x00, 0x00, 0x4f, 0x5b, 0x88, 0x42, 0xd1, 0x73, 0x1f, 0x4b,
0xd1, 0x73, 0x4f, 0x5b, 0x6e, 0x6f, 0x00, 0x00, 0x2e, 0x57, 0x6e, 0x6f, 0xc9, 0x4a, 0xd1, 0x73,
0xc9, 0x4a, 0x2e, 0x57, 0x2c, 0x67, 0x00, 0x00, 0x88, 0x42, 0xc9, 0x4a, 0x2c, 0x67, 0x00, 0x00,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x2c, 0x67, 0x67, 0x3e, 0xa8, 0x5a, 0xeb, 0x62, 0x88, 0x42,
0x88, 0x42, 0x67, 0x3e, 0xa8, 0x5a, 0x1f, 0x4b, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0xd1, 0x73, 0x2e, 0x57, 0x4f, 0x5b, 0x6e, 0x6f, 0x4f, 0x5b, 0xc9, 0x4a, 0x6e, 0x6f, 0x2e, 0x57,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0xc9, 0x4a, 0xeb, 0x62, 0x2c, 0x67, 0x88, 0x42,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x2c, 0x67, 0x67, 0x3e, 0xeb, 0x62, 0xa8, 0x5a, 0x88, 0x42,
0x67, 0x3e, 0xeb, 0x62, 0x88, 0x42, 0xa8, 0x5a, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0x2e, 0x57, 0x4f, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x5b, 0x2e, 0x57, 0xc9, 0x4a, 0x00, 0x00,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a, 0x88, 0x42,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x00, 0x00, 0x67, 0x3e, 0xeb, 0x62, 0x88, 0x42, 0x00, 0x00,
0x67, 0x3e, 0xa8, 0x5a, 0xeb, 0x62, 0x88, 0x42, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0xd1, 0x73, 0x2e, 0x57, 0x4f, 0x5b, 0x6e, 0x6f, 0x2e, 0x57, 0x6e, 0x6f, 0x4f, 0x5b, 0xc9, 0x4a,
0x2e, 0x57, 0xc9, 0x4a, 0x6e, 0x6f, 0x2c, 0x67, 0x88, 0x42, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a,
0x88, 0x42, 0xeb, 0x62, 0xc9, 0x4a, 0x2c, 0x67, 0x67, 0x3e, 0x88, 0x42, 0xeb, 0x62, 0xa8, 0x5a,
0xa8, 0x5a, 0xeb, 0x62, 0x67, 0x3e, 0x88, 0x42, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0x88, 0x42, 0x67, 0x3e, 0xa8, 0x5a, 0x00, 0x00,
};

View File

@ -1,124 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "platformer.h"
int atxy(int x, int y)
{
return (y << 6) + x;
}
// copy a (w,h) rectangle from the source image (x,y) into picture RAM
static void rect(unsigned int dst, byte x, byte y, byte w, byte h)
{
prog_uchar *src = platformer_pic + (16 * y) + x;
while (h--) {
GD.copy(dst, src, w);
dst += 64;
src += 16;
}
}
#define SINGLE(x, y) (pgm_read_byte_near(&platformer_pic[(y) * 16 + (x)]))
// Draw a random 8-character wide background column at picture RAM dst
void draw_column(unsigned int dst)
{
byte y;
byte x;
byte ch;
// Clouds and sky, 11 lines
rect(dst, 0, 0, 8, 11);
// bottom plain sky, lines 11-28
ch = SINGLE(0,11);
for (y = 11; y < 28; y++)
GD.fill(dst + (y << 6), ch, 8);
// randomly choose between background elements
byte what = random(256);
if (what < 10) {
// big mushroom thing
y = random(11, 18);
rect(dst + atxy(0, y), 8, 18, 8, 9);
y += 9;
byte i;
while (y < 28) {
rect(dst + atxy(0, y), 8, 23 + (i & 3), 8, 1);
i++, y++;
}
} else if (what < 32) {
// pair of green bollards
for (x = 0; x < 8; x += 4) {
y = random(20, 25);
rect(dst + atxy(x, y), 6, 11, 4, 3);
y += 3;
while (y < 28) {
rect(dst + atxy(x, y), 6, 13, 4, 1);
y++;
}
}
} else {
// hills
for (x = 0; x < 8; x += 2) {
y = random(20, 25);
rect(dst + atxy(x, y), 4, 11, 2, 3);
y += 3;
while (y < 28) {
rect(dst + atxy(x, y), 4, 13, 2, 1);
y++;
}
}
// foreground blocks
x = random(5);
y = random(11, 24);
byte blk = random(4);
rect(dst + atxy(x, y), blk * 4, 14, 4, 3);
y += 3;
while (y < 28) {
rect(dst + atxy(x, y), blk * 4, 17, 4, 1);
y++;
}
}
// Ground, line 28
ch = SINGLE(0,18);
GD.fill(dst + atxy(0,28), ch, 8);
// Underground, line 29
ch = SINGLE(0,19);
GD.fill(dst + atxy(0,29), ch, 8);
}
unsigned long xscroll;
void setup()
{
GD.begin();
GD.copy(RAM_CHR, platformer_chr, sizeof(platformer_chr));
GD.copy(RAM_PAL, platformer_pal, sizeof(platformer_pal));
int i;
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
for (i = 0; i < 64; i += 8) {
draw_column(atxy(i, 0));
}
}
void loop()
{
xscroll++;
if ((xscroll & 63) == 0) {
// figure out where to draw the 64-pixel draw_column
// offscreen_pixel is the pixel x draw_column that is offscreen...
int offscreen_pixel = ((xscroll + (7 * 64)) & 511);
// offscreen_ch is the character address
byte offscreen_ch = (offscreen_pixel >> 3);
draw_column(atxy(offscreen_ch, 0));
}
GD.waitvblank();
GD.wr16(SCROLL_X, xscroll);
}

View File

@ -1,922 +0,0 @@
static PROGMEM prog_uchar pickups2_img[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x02, 0x41, 0x43, 0x45, 0x46, 0x49, 0x4c, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x4f, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x26, 0x10, 0x26, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x26, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x2a, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x02, 0x2a, 0x26, 0x26, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x2a, 0x26, 0x10, 0x26, 0x26, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x10, 0x10, 0x26, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x02, 0x41, 0x43, 0x45, 0x46, 0x49, 0x4c, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x02, 0x14, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x14, 0x2d, 0x30, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x1c, 0x02, 0x14, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x30, 0x2f, 0x1b, 0x00, 0x02, 0x2d, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x1c, 0x1b, 0x00, 0x14, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x30, 0x2f, 0x1c, 0x1b, 0x15, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x32, 0x30, 0x2f, 0x2d, 0x20, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x10, 0x0a, 0x10, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x04, 0x0a, 0x10, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x10, 0x0a, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x11, 0x10, 0x11, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x12, 0x04, 0x12, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x10, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x12, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0xff, 0x34, 0xff, 0x34, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x17, 0x3f, 0x34, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4e, 0x4c, 0x49, 0x49, 0x4c, 0x4d, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x47, 0x44, 0x42, 0x43, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x47, 0x43, 0x42, 0x41, 0x41, 0x42, 0x46, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x47, 0x43, 0x02, 0x41, 0x41, 0x42, 0x46, 0x49, 0x4b, 0x4d, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x47, 0x43, 0x42, 0x41, 0x41, 0x42, 0x44, 0x46, 0x49, 0x4b, 0x4d, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x47, 0x43, 0x41, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4e, 0xff,
0xff, 0xff, 0x4d, 0x47, 0x43, 0x42, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff,
0xff, 0xff, 0x4c, 0x47, 0x43, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff, 0xff,
0xff, 0x4c, 0x47, 0x42, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff, 0xff, 0xff,
0x4c, 0x47, 0x42, 0x41, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff,
0x47, 0x41, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x29, 0x26, 0x26, 0x26, 0x26, 0x26, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x29, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x29, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x29, 0x13, 0x10, 0x0a, 0x04, 0x04, 0x07, 0x07, 0x0a, 0x0a, 0x10, 0x13, 0x29, 0xff, 0xff,
0xff, 0x26, 0x10, 0x0a, 0x04, 0x07, 0x07, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x26, 0xff, 0xff,
0xff, 0x29, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x29, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x29, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x29, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x2a, 0x2a, 0x27, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x2a, 0x27, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x12, 0x0a, 0x10, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0c, 0x04, 0x0c, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0c, 0x07, 0x0a, 0x10, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x0a, 0x0c, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x34, 0xff, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x4d, 0x4a, 0x48, 0x4d, 0x3f, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x4a, 0x43, 0x41, 0x43, 0x46, 0x49, 0x46, 0x48, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x48, 0x43, 0x02, 0x02, 0x41, 0x43, 0x43, 0x41, 0x41, 0x48, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x46, 0x02, 0x02, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x48, 0xff, 0xff,
0xff, 0xff, 0x4a, 0x46, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x46, 0xff, 0xff,
0xff, 0xff, 0x4a, 0x46, 0x02, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x48, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x46, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x46, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x46, 0x48, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x46, 0x41, 0x41, 0x46, 0x41, 0x46, 0x48, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x4a, 0x46, 0x46, 0x49, 0x46, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x49, 0x4d, 0xff, 0x4d, 0x49, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x43, 0x49, 0x4d, 0x49, 0x43, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x49, 0x43, 0x41, 0x02, 0x43, 0x49, 0x43, 0x02, 0x02, 0x43, 0x49, 0xff, 0xff, 0xff,
0xff, 0xff, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43, 0xff, 0xff, 0xff,
0xff, 0xff, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x14, 0x1b, 0x1b, 0x43, 0x43, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x14, 0x1b, 0x1b, 0x1b, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x50, 0x53, 0x50, 0x50, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x50, 0x53, 0x55, 0xff, 0x50, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x51, 0x53, 0x50, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x02, 0x1b, 0x2d, 0x2f, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x44, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x44, 0x15, 0x15, 0x32, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x15, 0x00, 0x15, 0x32, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x00, 0x02, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x00, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x00, 0x02, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x15, 0x00, 0x02, 0x15, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x15, 0x02, 0x15, 0x44, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x44, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x02, 0x1b, 0x2d, 0x2f, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x4d, 0x49, 0x49, 0x3f, 0x23, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x34, 0x3f, 0x43, 0x41, 0x43, 0x3f, 0x3f, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x3f, 0x34, 0x3f, 0x41, 0x41, 0x3f, 0x41, 0x43, 0x43, 0x49, 0x3f, 0x4d, 0xff, 0xff,
0x4d, 0x49, 0x43, 0x3f, 0x41, 0x41, 0x3f, 0x34, 0x3f, 0x41, 0x41, 0x3f, 0x34, 0x3f, 0x4d, 0xff,
0x49, 0x3f, 0x3f, 0x43, 0x41, 0x3f, 0x34, 0x23, 0x34, 0x3f, 0x41, 0x3f, 0x23, 0x34, 0x3f, 0xff,
0x3f, 0x34, 0x23, 0x3f, 0x43, 0x41, 0x3f, 0x3f, 0x3f, 0x41, 0x43, 0x43, 0x3f, 0x3f, 0x4c, 0xff,
0x4d, 0x3f, 0x34, 0x3f, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0x49, 0x4d, 0xff,
0xff, 0x4d, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x08, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x07, 0x04, 0x07, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x49, 0x43, 0x43, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x4a, 0x49, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x49, 0x4c, 0x4a, 0x4a, 0x4c, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x45, 0x43, 0x49, 0x4c, 0x4c, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x43, 0x49, 0x4c, 0x49, 0x43, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x45, 0x43, 0x45, 0x49, 0x4c, 0x49, 0x4c, 0x4c, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x43, 0x49, 0x45, 0x49, 0x4c, 0x4c, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x4c, 0x4c, 0x4c, 0x4a, 0x4c, 0x4a, 0x43, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x45, 0x49, 0x4c, 0x49, 0x45, 0x4a, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x2d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x02, 0x02, 0x2d, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x02, 0x2d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x28, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x13, 0x13, 0x28, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x13, 0x28, 0x28, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x13, 0x26, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x13, 0x28, 0x2a, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x13, 0x10, 0x04, 0x13, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x13, 0x10, 0x13, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x13, 0x28, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x10, 0x4d, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x10, 0x49, 0x43, 0x04, 0x10, 0x43, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x4d, 0x49, 0x49, 0x43, 0x10, 0x49, 0x49, 0x10, 0x43, 0x49, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x2a, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x10, 0x10, 0x43, 0x49, 0x43, 0x4d, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x43, 0x49, 0x49, 0x49, 0x4d, 0xff,
0xff, 0x2a, 0x26, 0x26, 0x2a, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x49, 0x43, 0x49, 0x4d, 0xff,
0xff, 0x2a, 0x26, 0x2a, 0x02, 0x2d, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff,
0xff, 0x2a, 0x26, 0x26, 0x2a, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x2a, 0x2a, 0x2a, 0x4d, 0x49, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x02, 0x49, 0x49, 0x49, 0x49, 0x49, 0x26, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x49, 0x49, 0x49, 0x02, 0x04, 0x26, 0x49, 0x26, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff,
0xff, 0x49, 0x10, 0x49, 0x02, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x49, 0x4d, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x49, 0x10, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x10, 0x04, 0x10, 0x26, 0x26, 0x26, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x4d, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x34, 0x02, 0x34, 0x34, 0x34, 0x34, 0x34, 0x17, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x34, 0x34, 0x34, 0x02, 0x03, 0x22, 0x34, 0x17, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff,
0xff, 0x34, 0x17, 0x34, 0x02, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x34, 0x17, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x34, 0x17, 0x02, 0x22, 0x22, 0x22, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2d, 0x02, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x02, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2d, 0x2d, 0x2d, 0x02, 0x15, 0x1b, 0x2d, 0x02, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff,
0xff, 0x2d, 0x02, 0x2d, 0x02, 0x33, 0x33, 0x33, 0x33, 0x33, 0x2d, 0x33, 0x2d, 0x33, 0xff, 0xff,
0xff, 0xff, 0x2d, 0x02, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x2d, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2d, 0x02, 0x15, 0x1b, 0x2d, 0x15, 0x2d, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2d, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x33, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0x10, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x49, 0x43, 0x2a, 0x10, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x04, 0x10, 0x34, 0x26, 0x2a, 0x10, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x43, 0x49, 0x10, 0x10, 0x10, 0x26, 0x2a, 0x10, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x04, 0x10, 0x34, 0x26, 0x49, 0x43, 0x10, 0x26, 0x2a, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x26, 0x43, 0x49, 0x26, 0x10, 0x10, 0x26, 0x26, 0x26, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x10, 0x10, 0x26, 0x26, 0x26, 0x26, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x26, 0x26, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x4d, 0x49, 0x43, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x4d, 0x43, 0x02, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x4d, 0x49, 0x43, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x43, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x43, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x34, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x17, 0x3f, 0x17, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x3f, 0x3f, 0x3f, 0x22, 0x17, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x17, 0x34, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x34, 0x17, 0x34, 0x3f, 0xff, 0xff,
0xff, 0x3f, 0x17, 0x34, 0x3f, 0x3f, 0x3f, 0x34, 0x3f, 0x3f, 0x3f, 0x34, 0x17, 0x3f, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x17, 0x16, 0x3f, 0x17, 0x3f, 0x17, 0x3f, 0x16, 0x17, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x22, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x22, 0x17, 0x3f, 0x3f, 0x3f, 0x17, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x22, 0x17, 0x16, 0x3f, 0x17, 0x3f, 0x16, 0x17, 0x22, 0x34, 0x3f, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x22, 0x17, 0x16, 0x3f, 0x22, 0x3f, 0x17, 0x17, 0x22, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x22, 0x17, 0x3f, 0x34, 0x3f, 0x34, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x33, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x33, 0x4d, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x47, 0x2d, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x2d, 0x47, 0x4d, 0xff, 0xff,
0xff, 0x49, 0x44, 0x02, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x02, 0x44, 0x49, 0xff, 0xff,
0xff, 0x49, 0x46, 0x15, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x15, 0x46, 0x49, 0xff, 0xff,
0xff, 0x4d, 0x4a, 0x2d, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x2d, 0x4a, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x33, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x33, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x04, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x04, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x10, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x0a, 0x10, 0x10, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x2a, 0xff, 0x10, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x04, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0x28, 0x10, 0x04, 0x07, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x28, 0xff, 0xff,
0xff, 0x28, 0x0d, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0d, 0x28, 0xff, 0xff,
0xff, 0x28, 0x10, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x28, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x04, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x10, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x03, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x46, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x03, 0x45, 0x42, 0x45, 0x03, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x45, 0x1b, 0x02, 0x1b, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x46, 0x45, 0x43, 0x33, 0x02, 0x33, 0x43, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff,
0xff, 0x4b, 0x49, 0x46, 0x45, 0x43, 0x20, 0x1b, 0x20, 0x43, 0x45, 0x46, 0x49, 0x4b, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x46, 0x45, 0x03, 0x43, 0x42, 0x43, 0x03, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x45, 0x43, 0x43, 0x43, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x4b, 0x49, 0x46, 0x45, 0x46, 0x49, 0x4b, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x34,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x2a, 0x3f, 0x34, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x27, 0x2a, 0x3f, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x10, 0x04, 0x10, 0x13, 0x2a, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x28, 0x10, 0x13, 0x28, 0x2a, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x10, 0x04, 0x10, 0x13, 0x28, 0x2a, 0x2a, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x28, 0x13, 0x13, 0x28, 0x2a, 0x2a, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x04, 0x10, 0x13, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x11, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x1e, 0x04, 0x11, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x12, 0x10, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x2a, 0x0a, 0x11, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x32, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x32, 0x1c, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x32, 0x2f, 0x1c, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x33, 0x2f, 0x2d, 0x1c, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2f, 0x2d, 0x1c, 0x15, 0x2d, 0x32, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x2f, 0x2d, 0x1c, 0x30, 0x15, 0x03, 0x20, 0x30, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x30, 0x1c, 0x1c, 0x15, 0x03, 0x20, 0x30, 0x33, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x20, 0x1c, 0x1c, 0x2f, 0x2f, 0x32, 0x30, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x20, 0x1c, 0x2f, 0x13, 0x10, 0x13, 0x32, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x20, 0x2f, 0x13, 0x10, 0x04, 0x10, 0x32, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x30, 0x10, 0x0a, 0x10, 0x13, 0x32, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x30, 0x13, 0x10, 0x13, 0x30, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x30, 0x30, 0x30, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x04, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x32, 0x2d, 0x03, 0x15, 0x1b, 0x1b, 0x1c, 0x2d, 0x32, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x04, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x29, 0x1e, 0x29, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x0a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x10, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0a, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x04, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0x37, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x4a, 0x4c, 0x3b, 0x02, 0x1a, 0x25, 0x3b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x02, 0x45, 0x49, 0x25, 0x1a, 0x17, 0x1a, 0x34, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x46, 0x43, 0x43, 0x45, 0x3b, 0x25, 0x1a, 0x25, 0x3b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x46, 0x45, 0x4a, 0x4c, 0x3b, 0x37, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x4c, 0x2a, 0xff, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xff, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x20, 0x14, 0x02, 0x14, 0x20, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x20, 0x14, 0x02, 0x00, 0x02, 0x14, 0x20, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x30, 0x20, 0x02, 0x00, 0x02, 0x20, 0x30, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x20, 0x00, 0x14, 0x20, 0x02, 0x20, 0x14, 0x00, 0x20, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x02, 0x33, 0x33, 0x33, 0x2d, 0x33, 0x33, 0x33, 0x02, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x20, 0x33, 0x33, 0x2d, 0x33, 0x2d, 0x33, 0x33, 0x20, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x30, 0x14, 0x02, 0x33, 0x33, 0x33, 0x02, 0x14, 0x30, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x20, 0x20, 0x14, 0x00, 0x14, 0x20, 0x20, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2d, 0x33, 0xff, 0x33, 0x02, 0x33, 0x02, 0x33, 0x02, 0x33, 0xff, 0x33, 0x2d, 0xff, 0xff,
0x33, 0x02, 0x2d, 0x02, 0x33, 0x30, 0x20, 0x00, 0x20, 0x30, 0x33, 0x02, 0x2d, 0x02, 0x33, 0xff,
0xff, 0x2d, 0x33, 0xff, 0x2d, 0xff, 0x33, 0x30, 0x33, 0xff, 0x2d, 0xff, 0x33, 0x2d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x34, 0x17, 0x38, 0x34, 0x38, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x34, 0x38, 0x10, 0x13, 0x38, 0x17, 0x38, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x13, 0x10, 0x04, 0x04, 0x0a, 0x10, 0x38, 0x34, 0x17, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0x04, 0x04, 0x0a, 0x0a, 0x0a, 0x10, 0x38, 0x34, 0x10, 0x13, 0xff, 0xff,
0xff, 0xff, 0x13, 0x10, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x38, 0x10, 0x13, 0xff, 0xff,
0xff, 0xff, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x2a, 0xff, 0xff,
0xff, 0xff, 0xff, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x10, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x13, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x10, 0x04, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x02, 0x2d, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x14, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x2d, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x2f, 0x2d, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x03, 0x03, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x45, 0x45, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x54, 0x03, 0x47, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x53, 0x54, 0x54, 0x03, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x54, 0x01, 0x03, 0x55, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1b, 0x01, 0x54, 0x54, 0x54, 0x03, 0x1b, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1b, 0x54, 0x01, 0x02, 0x54, 0x01, 0x14, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x15, 0x03, 0x54, 0x54, 0x54, 0x03, 0x1b, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x01, 0x54, 0x03, 0x1b, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x29, 0x28, 0x26, 0x26, 0x26, 0x4c, 0x43, 0x26, 0x26, 0x26, 0x28, 0x2a, 0xff,
0xff, 0xff, 0x29, 0x10, 0x10, 0x10, 0x10, 0x4c, 0x43, 0x10, 0x04, 0x10, 0x2a, 0x10, 0x28, 0x2a,
0xff, 0xff, 0x13, 0x0d, 0x0d, 0x0d, 0x4d, 0x4c, 0x49, 0x0d, 0x0d, 0x2a, 0x10, 0x2a, 0x2a, 0x28,
0xff, 0xff, 0x29, 0x13, 0x13, 0x49, 0x13, 0x4c, 0x49, 0x13, 0x13, 0x13, 0x2a, 0x13, 0x28, 0x2a,
0xff, 0x29, 0x28, 0x26, 0x26, 0x26, 0x4c, 0x43, 0x4c, 0x49, 0x26, 0x26, 0x26, 0x28, 0x2a, 0xff,
0x29, 0x10, 0x10, 0x10, 0x10, 0x4c, 0x43, 0x10, 0x04, 0x10, 0x2a, 0x10, 0x28, 0x2a, 0xff, 0xff,
0x13, 0x0d, 0x0d, 0x0d, 0x0d, 0x4c, 0x49, 0x0d, 0x10, 0x2a, 0x10, 0x2a, 0x2a, 0x28, 0xff, 0xff,
0x29, 0x13, 0x13, 0x13, 0x4c, 0x4c, 0x49, 0x13, 0x13, 0x13, 0x2a, 0x13, 0x28, 0x2a, 0xff, 0xff,
0xff, 0x29, 0x28, 0x28, 0x49, 0x28, 0x4c, 0x49, 0x28, 0x28, 0x28, 0x28, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x34, 0xff, 0xff,
0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff, 0xff,
0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff, 0xff,
0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x34, 0xff,
0xff, 0x22, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff,
0xff, 0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff,
0xff, 0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff,
0xff, 0xff, 0x34, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xff,
0xff, 0x40, 0x00, 0x02, 0x02, 0x03, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x20, 0x40, 0xff,
0xff, 0x40, 0x02, 0x3d, 0x3a, 0x39, 0x36, 0x36, 0x36, 0x36, 0x39, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x03, 0x3d, 0x3a, 0x36, 0x31, 0x21, 0x21, 0x31, 0x36, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x03, 0x3d, 0x3a, 0x36, 0x31, 0x21, 0x21, 0x31, 0x36, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x39, 0x36, 0x35, 0x31, 0x31, 0x35, 0x36, 0x39, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x39, 0x36, 0x35, 0x31, 0x31, 0x35, 0x36, 0x39, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x39, 0x36, 0x36, 0x35, 0x35, 0x36, 0x36, 0x39, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x3a, 0x39, 0x36, 0x36, 0x36, 0x36, 0x39, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x1b, 0x3e, 0x3d, 0x3a, 0x39, 0x39, 0x39, 0x39, 0x3a, 0x3d, 0x3e, 0x1b, 0x40, 0xff,
0xff, 0xff, 0x40, 0x1b, 0x3e, 0x3d, 0x3a, 0x3a, 0x3a, 0x3a, 0x3d, 0x3e, 0x1b, 0x40, 0xff, 0xff,
0xff, 0xff, 0xff, 0x40, 0x1b, 0x3e, 0x3d, 0x3d, 0x3d, 0x3d, 0x3e, 0x1b, 0x40, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x40, 0x1b, 0x3e, 0x3e, 0x3e, 0x3e, 0x1b, 0x40, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x1b, 0x1b, 0x1b, 0x1b, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x40, 0x40, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x43, 0x49, 0x13, 0x2a, 0x13, 0x2a, 0x49, 0x43, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x2a, 0x10, 0x2a, 0x2a, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x2a, 0x13, 0x2a, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x33, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x33, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x32, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x15, 0x2d, 0x32, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x30, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x30, 0x14, 0x2d, 0x30, 0x33, 0x14, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x30, 0x14, 0x2d, 0x30, 0x33, 0xff, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x30, 0x33, 0x33, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x15, 0x2d, 0x30, 0x33, 0x10, 0x1e, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2d, 0x30, 0x33, 0x26, 0x10, 0x04, 0x1e, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x33, 0x33, 0x33, 0x28, 0x10, 0x04, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x28, 0x26, 0x29, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x04, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x04, 0x10, 0x0c, 0x0c, 0x0c, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x04, 0x10, 0x26, 0x13, 0x13, 0x13, 0x26, 0x0c, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0x27, 0x13, 0x10, 0x26, 0x13, 0x04, 0x0c, 0x10, 0x13, 0x26, 0x10, 0x0d, 0x27, 0xff, 0xff,
0xff, 0x13, 0x09, 0x0c, 0x13, 0x04, 0x0c, 0x0a, 0x0c, 0x10, 0x13, 0x0c, 0x10, 0x13, 0xff, 0xff,
0xff, 0x13, 0x10, 0x0c, 0x13, 0x10, 0x0c, 0x0a, 0x0c, 0x10, 0x13, 0x0c, 0x10, 0x13, 0xff, 0xff,
0xff, 0x27, 0x09, 0x10, 0x26, 0x13, 0x10, 0x0c, 0x10, 0x13, 0x26, 0x10, 0x0d, 0x27, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x0c, 0x26, 0x13, 0x13, 0x13, 0x26, 0x0c, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x0c, 0x0c, 0x0c, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x10, 0x10, 0x10, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x43, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x33, 0x15, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x15, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x15, 0x33, 0x34, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x15, 0x2d, 0xff, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2d, 0x15, 0x2d, 0x33, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2d, 0x33, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x4b, 0x49, 0x47, 0x49, 0x4b, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x06, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4b, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x4b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x41, 0x49, 0x43, 0x49, 0x43, 0x41, 0x49, 0x49, 0x43, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x43, 0x4d, 0x49, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x28, 0x4d, 0x10, 0x4d, 0x47, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x04, 0x0a, 0x49, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x10, 0x0a, 0x10, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x0a, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x04, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x10, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0x2a, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x04, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x4d, 0x4d, 0x4d, 0x43, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x0a, 0x4d, 0x43, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x04, 0x33, 0x10, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x33, 0x33, 0x33, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x33, 0x0a, 0x10, 0x33, 0x1e, 0x28, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x28, 0x13, 0x04, 0x33, 0x33, 0x33, 0x10, 0x1e, 0x28, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x33, 0x0a, 0x10, 0x33, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x33, 0x33, 0x33, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x10, 0x33, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0x2a, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0xff, 0xff, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x2a, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x02, 0x1c, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x03, 0x1c, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x47, 0x43, 0x47, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4b, 0x47, 0x43, 0x41, 0x43, 0x47, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x4b, 0x47, 0x43, 0x47, 0x4b, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x27, 0x13, 0x4b, 0x47, 0x4b, 0x13, 0x27, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x04, 0x2a, 0x4b, 0x2a, 0x13, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x0a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x2a, 0xff, 0xff,
0xff, 0x27, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x27, 0xff, 0xff,
0xff, 0x27, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x27, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x10, 0x13, 0x27, 0x2a, 0x27, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x27, 0x13, 0x10, 0x13, 0x27, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1f, 0x05, 0x05, 0x0e, 0x0e, 0x0f, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x0e, 0x0f, 0x2b, 0x2b, 0x2b, 0x2b, 0x1f, 0x0f, 0x0f, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x0e, 0x0f, 0x2b, 0x0f, 0x05, 0x0b, 0x0b, 0x0f, 0x2b, 0x1d, 0x0f, 0x1f, 0xff, 0xff,
0xff, 0x0e, 0x0f, 0x2b, 0x0f, 0x05, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x2b, 0x1d, 0x0f, 0x1f, 0xff,
0xff, 0x0f, 0x2b, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x2b, 0x0f, 0x2b, 0xff,
0x0f, 0x1d, 0x2b, 0x0f, 0x05, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x1d, 0x0f, 0x1f,
0x0e, 0x2b, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0b, 0x0f, 0x2b,
0x0f, 0x1f, 0x0f, 0x0f, 0x0f, 0x0b, 0x0f, 0x0f, 0x1d, 0x1d, 0x0f, 0x0f, 0x0f, 0x0b, 0x0f, 0x2b,
0x0f, 0x1f, 0x0f, 0x0f, 0x0f, 0x05, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0f, 0x2b,
0x2b, 0x0f, 0x1d, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0e, 0x0f, 0x2b, 0x2c,
0xff, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x05, 0x0f, 0x1d, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x2b, 0xff,
0xff, 0x2b, 0x0f, 0x0f, 0x1d, 0x05, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x2b, 0x2c, 0xff,
0xff, 0xff, 0x2b, 0x0f, 0x0f, 0x0f, 0x0b, 0x0b, 0x0e, 0x1d, 0x0f, 0x0f, 0x2b, 0x2c, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2b, 0x1f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x2b, 0x2b, 0x2c, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x32, 0x2a, 0x10, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x32, 0x32, 0x33, 0x2f, 0x2a, 0x2d, 0xff, 0x26, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x32, 0x2f, 0x2f, 0x2f, 0x32, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x30, 0x2f, 0x1c, 0x1b, 0x20, 0x2f, 0x32, 0x32, 0x33, 0x3c, 0xff, 0xff, 0xff,
0xff, 0x33, 0x30, 0x2f, 0x1c, 0x03, 0x15, 0x1b, 0x20, 0x2f, 0x30, 0x32, 0x33, 0x3c, 0xff, 0xff,
0xff, 0x33, 0x2f, 0x20, 0x14, 0x15, 0x15, 0x1b, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff,
0xff, 0x33, 0x2f, 0x20, 0x15, 0x15, 0x1b, 0x1b, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff,
0xff, 0x33, 0x30, 0x2f, 0x20, 0x1b, 0x1b, 0x20, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff,
0xff, 0xff, 0x33, 0x30, 0x2d, 0x20, 0x20, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x30, 0x2f, 0x2f, 0x2f, 0x30, 0x32, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3c, 0x33, 0x32, 0x32, 0x33, 0x33, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x26, 0x10, 0x04, 0x0a, 0x0a, 0x10, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0c, 0x26, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x26, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x2a, 0x26, 0x13, 0x13, 0x13, 0x13, 0x13, 0x26, 0x2a, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x34, 0x34, 0x17, 0x34, 0x17, 0x34, 0x17, 0x34, 0x34, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x43, 0x49, 0x4d, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x24, 0x1b, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x1b, 0x24, 0xff,
0x1a, 0x02, 0x49, 0x44, 0x44, 0x44, 0x44, 0x55, 0x44, 0x44, 0x55, 0x44, 0x49, 0x02, 0x1a, 0xff,
0x1a, 0x00, 0x49, 0x41, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x49, 0x00, 0x1a, 0xff,
0x23, 0x00, 0x49, 0x41, 0x41, 0x41, 0x41, 0x41, 0x55, 0x41, 0x41, 0x41, 0x49, 0x00, 0x23, 0xff,
0x34, 0x02, 0x49, 0x43, 0x41, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0x02, 0x34, 0xff,
0x3f, 0x34, 0x02, 0x49, 0x44, 0x41, 0x41, 0x41, 0x41, 0x41, 0x44, 0x49, 0x02, 0x34, 0x3f, 0xff,
0xff, 0x3f, 0x34, 0x02, 0x48, 0x47, 0x44, 0x41, 0x44, 0x47, 0x48, 0x02, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x1a, 0x02, 0x00, 0x00, 0x00, 0x02, 0x1a, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x34, 0x23, 0x1a, 0x17, 0x1a, 0x23, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x24, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x24, 0xff, 0xff, 0xff, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x38, 0x24, 0x34, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x3b, 0xff, 0xff, 0xff, 0xff, 0x38, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x3b, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff, 0x4c, 0x02, 0x41, 0x43, 0x4c, 0xff, 0xff,
0xff, 0xff, 0x4c, 0x02, 0x41, 0x43, 0x4c, 0xff, 0xff, 0x4c, 0x47, 0x43, 0x47, 0x4c, 0xff, 0xff,
0xff, 0xff, 0x4c, 0x47, 0x43, 0x47, 0x4c, 0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x1b, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x33, 0x33, 0x1b, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x1a, 0x34, 0x3f, 0x33, 0x1b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x1a, 0x18, 0x1a, 0x34, 0x3f, 0x1b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x1a, 0x17, 0x16, 0x17, 0x1a, 0x34, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x19, 0x17, 0x16, 0x17, 0x19, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x19, 0x17, 0x16, 0x17, 0x19, 0x24, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x1a, 0x17, 0x16, 0x17, 0x1a, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x1a, 0x18, 0x1a, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x1b, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff,
0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff,
0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff,
0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff,
0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff,
0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff,
0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
static PROGMEM prog_uchar pickups2_pal[] = {
0xff, 0x7f, 0xbd, 0x77, 0x9c, 0x73, 0x5a, 0x6b, 0x31, 0x7f, 0x24, 0x7b, 0x10, 0x7f, 0xef, 0x7e,
0xcf, 0x7e, 0xce, 0x7e, 0xcc, 0x7a, 0xe3, 0x76, 0xab, 0x76, 0x8b, 0x76, 0xa3, 0x6e, 0x83, 0x6a,
0x6b, 0x72, 0x6a, 0x6e, 0x4a, 0x6e, 0x2a, 0x6a, 0x18, 0x63, 0xd6, 0x5a, 0xe0, 0x03, 0x80, 0x03,
0x40, 0x03, 0x20, 0x03, 0xe0, 0x02, 0xb5, 0x56, 0x73, 0x4e, 0x42, 0x62, 0x09, 0x66, 0x02, 0x5e,
0x31, 0x46, 0x33, 0x26, 0xa0, 0x02, 0x80, 0x02, 0x40, 0x02, 0x20, 0x02, 0xe9, 0x65, 0xe9, 0x61,
0xc9, 0x5d, 0xa8, 0x5d, 0x88, 0x59, 0xe2, 0x55, 0xa2, 0x51, 0xef, 0x3d, 0x79, 0x7c, 0xce, 0x39,
0x8c, 0x31, 0xf2, 0x21, 0x4a, 0x29, 0x08, 0x21, 0xe0, 0x01, 0xd1, 0x1d, 0x90, 0x19, 0xa0, 0x01,
0x80, 0x01, 0x4e, 0x15, 0x2d, 0x15, 0x40, 0x01, 0xe7, 0x1c, 0xec, 0x10, 0xab, 0x0c, 0xe0, 0x00,
0x85, 0x00, 0x00, 0x7c, 0x00, 0x78, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x64, 0x00, 0x60, 0x00, 0x58,
0x00, 0x54, 0x00, 0x4c, 0x00, 0x48, 0x00, 0x40, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x2c, 0x1f, 0x00,
0x1c, 0x00, 0x17, 0x00, 0x16, 0x00, 0x0f, 0x00, 0x0c, 0x00, 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, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
};

View File

@ -1,658 +0,0 @@
static PROGMEM prog_uchar sprites256_pic[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x05, 0x06, 0x06, 0x06, 0x07, 0x00, 0x08, 0x09, 0x0a,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0d, 0x0e, 0x0f, 0x10, 0x00, 0x11, 0x12, 0x13, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1a, 0x00, 0x1b, 0x1c, 0x1d, 0x00, 0x11, 0x1e, 0x1f, 0x20, 0x00, 0x21, 0x22, 0x23, 0x24,
0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x26, 0x27, 0x28, 0x00, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
0x32, 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, 0x34, 0x35, 0x36, 0x37, 0x00, 0x00, 0x00, 0x00, 0x38, 0x39, 0x3a, 0x3b, 0x39, 0x3c, 0x3d,
0x39, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3f, 0x39, 0x40, 0x41, 0x42, 0x00, 0x43, 0x44, 0x45, 0x39, 0x46, 0x47, 0x48, 0x49, 0x4a,
0x4b, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x4d, 0x4e, 0x4e, 0x4e, 0x4f, 0x00, 0x50, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, 0x57,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x5f, 0x00, 0x60, 0x42, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x00, 0x66,
0x67, 0x68, 0x69, 0x6a, 0x00, 0x05, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x06, 0x07,
0x73, 0x74, 0x75, 0x76, 0x00, 0x77, 0x78, 0x79, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x00, 0x80,
0x81, 0x82, 0x83, 0x84, 0x00, 0x11, 0x85, 0x86, 0x87, 0x11, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d,
0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x80,
0x9d, 0x00, 0x9e, 0x9f, 0xa0, 0x11, 0xa1, 0xa2, 0x00, 0x11, 0x88, 0x00, 0x11, 0x88, 0x00, 0xa3,
0x39, 0xa4, 0xa5, 0x39, 0xa6, 0xa7, 0xa8, 0xa9, 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, 0xab, 0xac, 0x00, 0xad, 0x39, 0xae, 0x80,
0xaf, 0x00, 0xb0, 0xb1, 0xb2, 0x11, 0xb3, 0x00, 0x00, 0x11, 0x88, 0x00, 0xb4, 0xb5, 0x00, 0xb6,
0x39, 0xb7, 0xb8, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0x80,
0xc5, 0xc6, 0xc7, 0xc8, 0x00, 0x11, 0x88, 0x00, 0x00, 0x11, 0x88, 0x00, 0xc9, 0xca, 0xcb, 0xcc,
0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0x00, 0x80,
0xdc, 0xdd, 0xde, 0xdf, 0x00, 0xe0, 0xe1, 0x00, 0x00, 0xe0, 0xe1, 0x00, 0xe2, 0xe3, 0xe4, 0x00,
0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static PROGMEM prog_uchar sprites256_chr[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x56, 0x3f,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x3f, 0xfa, 0xaa, 0xaa, 0xaa,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xaf, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0xab, 0x15, 0xaa, 0xb1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x05, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa1,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x2a, 0x4b, 0xff, 0xff, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x08, 0x0f, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x52, 0xaa, 0xff, 0x52, 0xff, 0xfe,
0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x5e,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0f, 0x8d, 0x55, 0xd5, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x43, 0xea, 0x55, 0x4a, 0x55, 0x53,
0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x80, 0x00, 0x60, 0x00, 0x58, 0x00, 0x5c, 0x00, 0x57, 0x00, 0x55, 0x00, 0x55, 0x80, 0x55, 0xc0,
0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xaa, 0xa8,
0x55, 0x6f, 0x55, 0x3f, 0x54, 0xff, 0x53, 0xff, 0x4f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa0, 0xaa, 0x35, 0xab, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xf8, 0xaf, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa9, 0xea, 0xa9, 0x53, 0xa9, 0x55, 0x4d,
0xa9, 0x72, 0xab, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xea, 0xaa, 0x2a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x2a, 0xaa, 0xea, 0xaa,
0xff, 0x2a, 0xff, 0x6a, 0xff, 0x6a, 0xff, 0x6a, 0xff, 0x6a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0xaa,
0xff, 0xaa, 0xff, 0xaa, 0xff, 0xaa, 0xff, 0xaa, 0xff, 0xaa, 0xff, 0x17, 0xff, 0xff, 0xff, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x28, 0x3f, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x55, 0x8d, 0x55, 0xaa, 0xd5,
0x55, 0x5e, 0x55, 0x52, 0x55, 0x7a, 0x55, 0x4a, 0x55, 0x4a, 0x55, 0x6a, 0x55, 0xea, 0x55, 0x2a,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0xaa, 0xa9, 0xaa, 0xab,
0xf6, 0xaa, 0xda, 0xaa, 0x2a, 0xaa, 0x6a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x50, 0x93, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0x01, 0xaa, 0xab,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0xff,
0xaa, 0xa8, 0xaa, 0xa9, 0xaa, 0xa3, 0xaa, 0x8f, 0xaa, 0x3f, 0xa8, 0xff, 0xa7, 0xff, 0x9f, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x52,
0xfd, 0xaa, 0xfc, 0xaa, 0xf6, 0xaa, 0xd2, 0xaa, 0xca, 0xaa, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0x8d, 0x53, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x6b, 0xf3, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0e, 0xaa, 0x55, 0xea, 0x55, 0x4a,
0xaa, 0x90, 0xaa, 0xa7, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0xe0, 0x00, 0xf4, 0x00, 0xf8, 0x00, 0xf8, 0x00,
0x55, 0x2a, 0x55, 0x2a, 0x55, 0x2a, 0x55, 0xea, 0x55, 0xea, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xea,
0xaa, 0xa8, 0xaa, 0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0xf5, 0xad, 0x55,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff, 0x55, 0xbf,
0xa3, 0x55, 0xaa, 0xd5, 0xaa, 0x85, 0xaa, 0xa1, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x55, 0x95, 0x55, 0x85, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54,
0x55, 0x54, 0x55, 0x52, 0x55, 0x4f, 0x55, 0x3f, 0x56, 0xff, 0x5b, 0xff, 0x6f, 0xff, 0xbf, 0xff,
0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0xaa, 0xa1, 0xaa, 0xb5,
0xaa, 0xb5, 0xaa, 0xd5, 0xab, 0x55, 0xad, 0x55, 0x85, 0x55, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xa5, 0xaa, 0xad, 0xaa, 0xa9, 0xaa, 0xa8, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xa8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfd, 0xaa, 0xfd, 0xaa, 0xfc, 0xaa, 0xfc, 0xaa, 0xfc, 0xaa, 0xff, 0xaa, 0xfc, 0xaa, 0xfc, 0xaa,
0x55, 0xaa, 0x55, 0xea, 0x55, 0xea, 0x55, 0xea, 0x55, 0x2a, 0x55, 0x2a, 0x55, 0x6a, 0x55, 0x7a,
0xa5, 0x55, 0xb5, 0x55, 0x95, 0x55, 0x15, 0x55, 0x15, 0x55, 0xd5, 0x55, 0xd5, 0x55, 0x15, 0x55,
0xaa, 0x9f, 0xaa, 0xa3, 0xaa, 0xa7, 0xaa, 0xa7, 0xaa, 0xab, 0xaa, 0xab, 0xaa, 0xab, 0xaa, 0xab,
0xea, 0xaa, 0xda, 0xaa, 0xda, 0xaa, 0xca, 0xaa, 0xca, 0xaa, 0xca, 0xaa, 0xca, 0xaa, 0xda, 0xaa,
0xaa, 0xa3, 0xaa, 0x8f, 0xaa, 0x3f, 0xa9, 0xff, 0xab, 0xff, 0xab, 0xff, 0xab, 0xff, 0xab, 0xff,
0xff, 0x2a, 0xfc, 0xaa, 0xf6, 0xaa, 0xda, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40,
0xaa, 0xaa, 0xaa, 0xaa, 0x4a, 0xaa, 0xf4, 0xaa, 0xff, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x83, 0xf7, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x54, 0x55, 0x56, 0x55, 0x52, 0x55, 0x4a, 0x57, 0x2a, 0xf2, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x57, 0x00, 0x57, 0x00, 0x56, 0x00, 0x54, 0x00, 0x5c, 0x00, 0x58, 0x00, 0x70, 0x00, 0xc0, 0x00,
0xaa, 0x9f, 0xaa, 0x8f, 0xaa, 0xa7, 0xaa, 0xa3, 0xaa, 0xa9, 0xaa, 0xa8, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x6a, 0xaa, 0x3a, 0xaa,
0xd5, 0x55, 0xd5, 0x55, 0x85, 0x55, 0xb5, 0x55, 0xac, 0x55, 0xaa, 0xc0, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xa7, 0xaa, 0xa3, 0xaa, 0xaf, 0xaa, 0x8f, 0xaa, 0x3f, 0x90, 0xff, 0xff, 0xff, 0xff, 0xff,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xa4,
0x25, 0x55, 0x25, 0x55, 0x35, 0x55, 0x15, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0f, 0xaa, 0x55, 0x43, 0x55, 0x55, 0x55, 0x55,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0x03, 0xaa, 0xaa, 0xaa, 0xaa,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x94, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xa8, 0xaa, 0xa1, 0xaa, 0x85, 0xa8, 0xd5, 0x0d, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x7a, 0xaa, 0x5e, 0xaa, 0x57, 0x2a, 0x55, 0x4a, 0x55, 0x5c, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a, 0xaa, 0x7c, 0x0a, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0x80, 0xf5, 0x55, 0x55, 0x55, 0x55,
0xff, 0xf2, 0xff, 0x4a, 0xfd, 0x2a, 0xf2, 0xaa, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xaa, 0xa3,
0x55, 0x55, 0x55, 0x55, 0x55, 0x5a, 0x55, 0x8f, 0x53, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff,
0x55, 0x55, 0x55, 0x55, 0x02, 0xba, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xf0, 0x55, 0xaa, 0xb5, 0xaa, 0xa5, 0xaa, 0xa5, 0xaa, 0xa5,
0x00, 0x00, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55,
0x00, 0x00, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55,
0x55, 0x5e, 0x55, 0x4a, 0x55, 0x7a, 0x55, 0x2a, 0x55, 0xea, 0x55, 0xea, 0x55, 0xea, 0x55, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0x55, 0x54, 0x55, 0x56,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x40, 0x4a, 0xaa, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x03, 0xea, 0x55, 0x53, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x95, 0x50, 0x0e, 0x50, 0x00, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x55, 0x01, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x50, 0x55, 0x50,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x81, 0xa8, 0x7f, 0x87, 0xff,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3c, 0x1a, 0xff, 0xfc, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xa3, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x40, 0x55, 0x40,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x0f, 0x53, 0xaa, 0x7a, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x0f, 0x55, 0xa8, 0x55, 0xa8, 0x55,
0x05, 0x55, 0x05, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x05, 0x55,
0x55, 0x40, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x40, 0x55, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x55,
0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x53, 0x55, 0x7a,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5f, 0x02, 0x2a, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xf0, 0x16, 0xff, 0xfc, 0xff, 0xff,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xca, 0xaa, 0x5c, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa1, 0xaa, 0x9f,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x7c, 0x02, 0x2a, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xaf, 0xc0, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x05, 0xff, 0xfd, 0xff, 0xfd,
0xaa, 0xff, 0xaa, 0xff, 0xaa, 0x3f, 0xaa, 0x3f, 0xaa, 0x7f, 0xaa, 0x7f, 0xaa, 0x8f, 0xaa, 0x9f,
0xaa, 0xa8, 0xaa, 0xab, 0xaa, 0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0x2a, 0xaa, 0xd2, 0xaa, 0xfd, 0x4a, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x42, 0xaa, 0xff, 0x52, 0xff, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x85, 0x55,
0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55,
0xaa, 0xa4, 0xaa, 0xa7, 0xaa, 0xae, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa3, 0xdf, 0xb5, 0x55, 0xd5, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0xf9, 0x55, 0xfe, 0x55,
0xa3, 0x55, 0xaa, 0xd5, 0xaa, 0x15, 0xaa, 0x85, 0xaa, 0xad, 0xaa, 0xa1, 0xaa, 0xab, 0xaa, 0xa8,
0x55, 0x7e, 0x55, 0x79, 0x55, 0x71, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xa2, 0x60, 0x00,
0xfc, 0xaa, 0xfc, 0xaa, 0xfc, 0xaa, 0xfc, 0xaa, 0xfc, 0xaa, 0xff, 0xaa, 0x94, 0xaa, 0xaa, 0xaa,
0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40,
0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0x05, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x55, 0x40,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00,
0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x54, 0x55, 0x5e, 0x55, 0x52,
0x03, 0x6a, 0x0d, 0xaa, 0x3a, 0xaa, 0xda, 0xaa, 0x6a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xfc, 0xaa, 0xf2, 0xaa, 0xca, 0xaa,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0xaa, 0x4f, 0xaa, 0xa3, 0xaa, 0xa7,
0xab, 0x15, 0xaa, 0x85, 0xaa, 0xa1, 0xaa, 0xa8, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x6a, 0xaa, 0xea, 0xaa, 0x1a, 0xaa, 0x3a, 0xaa,
0x00, 0x95, 0x02, 0x55, 0x0d, 0x55, 0x05, 0x55, 0x35, 0x55, 0x25, 0x55, 0x25, 0x55, 0x15, 0x55,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0x95, 0xff, 0x15, 0xff, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xc3, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa9, 0xea, 0xa9, 0x43, 0xa9, 0x55, 0x4d, 0x55, 0x55,
0xaa, 0xa1, 0xaa, 0xad, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x93, 0xff, 0xa9, 0x3f, 0xaa, 0xa4, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xd0, 0xaa, 0xff, 0xd4,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55,
0x5c, 0x00, 0x55, 0x80, 0x55, 0x70, 0x55, 0x58, 0x55, 0x56, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x6a, 0xaa, 0x2a, 0xaa,
0xff, 0xfc, 0xff, 0xfe, 0xff, 0xf1, 0xff, 0xf1, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xf5,
0x54, 0xaa, 0x57, 0xaa, 0x55, 0xaa, 0x55, 0x2a, 0x55, 0x2a, 0x55, 0xea, 0x55, 0xea, 0x55, 0xea,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0x2a, 0xaa, 0x2a, 0xaa, 0xea, 0xaa, 0xea, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa,
0xff, 0xfd, 0xff, 0xfc, 0xff, 0xf2, 0xff, 0xfa, 0xff, 0xda, 0xff, 0xca, 0xff, 0xca, 0xff, 0xca,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xa3, 0xaa, 0xaf, 0xaa, 0x9f, 0xaa, 0x9f, 0xaa, 0x8f, 0xaa, 0x8f, 0xaa, 0xbf, 0xaa, 0xbf,
0xca, 0xaa, 0xea, 0xaa, 0x6a, 0xaa, 0x2a, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xaa, 0xa8, 0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xb5, 0x55, 0xa5, 0x55, 0xa1, 0x55, 0xa1, 0x55, 0xad, 0x55, 0xad, 0x55, 0xa9, 0x55, 0xa9, 0x55,
0xbf, 0xff, 0x8f, 0xff, 0x8f, 0xff, 0x8f, 0xff, 0x9f, 0xff, 0xaf, 0xff, 0xa3, 0xff, 0xa8, 0xff,
0xaa, 0xd5, 0xaa, 0x35, 0xaa, 0xa3, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xbc, 0x05, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xc5, 0x55, 0xab, 0x55, 0xaa, 0x85, 0xaa, 0xad,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x35, 0x55, 0xa3, 0x55, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x6a, 0xaa, 0x0e, 0xaa,
0x93, 0xff, 0xa9, 0x3f, 0xaa, 0x8f, 0xaa, 0x9f, 0xaa, 0x9f, 0xaa, 0x9f, 0xaa, 0x9f, 0xaa, 0x7f,
0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x80, 0x00, 0x40, 0x00,
0xaa, 0xa5, 0xaa, 0xad, 0xaa, 0xad, 0xaa, 0xad, 0xaa, 0xa1, 0xaa, 0xa1, 0xaa, 0xab, 0xaa, 0xa8,
0x55, 0xea, 0x55, 0xea, 0x55, 0xea, 0x55, 0x2a, 0x55, 0x2a, 0x55, 0xaa, 0x57, 0xaa, 0x54, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54,
0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0xd5, 0x55, 0xd5, 0x55, 0x15, 0x55, 0x15, 0x55, 0x55, 0x55,
0x55, 0x60, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40,
0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x52, 0xaa, 0x5e, 0xaa,
0xff, 0xea, 0xff, 0xea, 0xff, 0xea, 0xff, 0xea, 0xff, 0xea, 0xff, 0xea, 0xff, 0xca, 0xff, 0xda,
0x55, 0x6a, 0x55, 0x6a, 0x55, 0x4a, 0x55, 0x4a, 0x55, 0x7a, 0x55, 0x7a, 0x55, 0x5a, 0x55, 0x52,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0x6a, 0xaa, 0x2a, 0xaa, 0xea, 0xaa, 0xda, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x2a, 0x55, 0x4a, 0x55, 0x5c, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0xff, 0xaa, 0x81, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xfa, 0xaa, 0x54, 0xea, 0x55, 0x7a, 0x55, 0x4a,
0x55, 0x5b, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xca,
0xab, 0x40, 0xaa, 0xad, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x02, 0x9a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x6a, 0xf6, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xaa, 0xab, 0xaa, 0xa4, 0xaa, 0x9c, 0xaa, 0xb0, 0xa9, 0xc0,
0x2a, 0xaa, 0x6a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xae, 0xaa, 0xa3, 0xaa, 0xa1,
0xd5, 0x55, 0xb5, 0x55, 0xa3, 0xdf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a, 0xaa,
0xab, 0x55, 0xad, 0x55, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xa8, 0xaa, 0xab, 0xaa, 0xa1, 0xaa, 0xad, 0xaa, 0x85, 0xaa, 0x15, 0xaa, 0xd5, 0xa3, 0x55,
0xa3, 0xff, 0xa3, 0xff, 0xa3, 0xff, 0xa7, 0xff, 0xab, 0xff, 0xa9, 0xff, 0xaa, 0x3f, 0xaa, 0x4f,
0xaa, 0x85, 0xaa, 0xa3, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x35, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x5b, 0x55, 0x53, 0x55, 0x56, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x6a, 0xaa, 0xea, 0xaa, 0x3a, 0xaa, 0x0d, 0xaa, 0x03, 0x6a,
0x90, 0x00, 0xa4, 0x00, 0xa9, 0xc0, 0xaa, 0x97, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x69, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xaa, 0xa8, 0xaa, 0x87, 0xa1, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x15, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55,
0xaa, 0xaa, 0xa1, 0xaa, 0xaf, 0x16, 0xaf, 0xff, 0xaf, 0xff, 0xaf, 0xff, 0xaf, 0xff, 0xaf, 0xff,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x0f, 0xd5, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x4a, 0x55, 0x4a, 0x55, 0x2a, 0x03, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0xaa, 0xad, 0xaa, 0xb5,
0xea, 0xaa, 0xea, 0xaa, 0x2a, 0xaa, 0x6a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0x9c, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x2a, 0xaa, 0x7c, 0x2a, 0x55, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xff, 0xff, 0xff, 0xff, 0x01, 0x5d, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xa8, 0x80, 0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x53, 0xaa, 0x3a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50,
0x72, 0xaa, 0x57, 0x2a, 0x55, 0x7c, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xff, 0xff, 0xff, 0xfc, 0x3c, 0x1a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x5e, 0xaa, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x05, 0x55, 0x05, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x40, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x8d, 0xaa, 0xa8, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0x5f, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x9f, 0xaa, 0xa1, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0x2a, 0xaa, 0x5f, 0x02, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xa0, 0x3f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xbc, 0xc1, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x95, 0x55, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x5a, 0xaa, 0x5a, 0xaa, 0x5f, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0x03, 0xfe, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaf, 0xc0, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xfe, 0x40, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static PROGMEM prog_uchar sprites256_pal[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x3d, 0x00, 0x00, 0xc6, 0x18, 0xbd, 0x77,
0x08, 0x21, 0x00, 0x00, 0xff, 0x7f, 0xd6, 0x5a, 0x00, 0x00, 0xff, 0x7f, 0xbd, 0x77, 0x18, 0x63,
0x29, 0x25, 0x00, 0x00, 0xff, 0x7f, 0xde, 0x7b, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x42, 0x08, 0x52, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x18, 0x63, 0xff, 0x7f,
0xde, 0x7b, 0x00, 0x00, 0xff, 0x7f, 0x18, 0x63, 0x63, 0x0c, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f,
0x00, 0x00, 0xff, 0x7f, 0xef, 0x3d, 0xbd, 0x77, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f, 0x42, 0x08,
0x42, 0x08, 0x00, 0x00, 0xff, 0x7f, 0x94, 0x52, 0x18, 0x63, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x63, 0x0c, 0xd6, 0x5a, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x5a, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00,
0x39, 0x67, 0x00, 0x00, 0xa5, 0x14, 0xff, 0x7f, 0x18, 0x63, 0x00, 0x00, 0xff, 0x7f, 0xe7, 0x1c,
0x00, 0x00, 0xff, 0x7f, 0x21, 0x04, 0xe7, 0x1c, 0xc6, 0x18, 0x00, 0x00, 0xff, 0x7f, 0xf7, 0x5e,
0x63, 0x0c, 0x9c, 0x73, 0x00, 0x00, 0x10, 0x42, 0x00, 0x00, 0x63, 0x0c, 0x00, 0x00, 0x00, 0x00,
0x08, 0x21, 0x42, 0x08, 0xff, 0x7f, 0xd6, 0x5a, 0xf7, 0x5e, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f,
0x6b, 0x2d, 0xf7, 0x5e, 0x00, 0x00, 0xff, 0x7f, 0xde, 0x7b, 0x00, 0x00, 0xff, 0x7f, 0x52, 0x4a,
0xbd, 0x77, 0x00, 0x00, 0xff, 0x7f, 0x08, 0x21, 0xd6, 0x5a, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10,
0x5a, 0x6b, 0xad, 0x35, 0xff, 0x7f, 0xe7, 0x1c, 0x9c, 0x73, 0x6b, 0x2d, 0x00, 0x00, 0xff, 0x7f,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0xff, 0x7f, 0x4a, 0x29, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00,
0xc6, 0x18, 0x18, 0x63, 0x00, 0x00, 0xff, 0x7f, 0x94, 0x52, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x8c, 0x31, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x18, 0x63, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10,
0x00, 0x00, 0xff, 0x7f, 0x8c, 0x31, 0x21, 0x04, 0xe7, 0x1c, 0x00, 0x00, 0xff, 0x7f, 0xb5, 0x56,
0x63, 0x0c, 0xde, 0x7b, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0xce, 0x39, 0xff, 0x7f, 0xff, 0x7f,
0xf7, 0x5e, 0x00, 0x00, 0xff, 0x7f, 0xde, 0x7b, 0x08, 0x21, 0xff, 0x7f, 0xff, 0x7f, 0x00, 0x00,
0x18, 0x63, 0x00, 0x00, 0xff, 0x7f, 0xe7, 0x1c, 0x84, 0x10, 0x00, 0x00, 0xd6, 0x5a, 0xff, 0x7f,
0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0x08, 0x21, 0x21, 0x04, 0x00, 0x00, 0xf7, 0x5e, 0x42, 0x08,
0x42, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0c, 0x00, 0x00, 0xf7, 0x5e, 0xff, 0x7f,
0x5a, 0x6b, 0x42, 0x08, 0xff, 0x7f, 0xf7, 0x5e, 0x84, 0x10, 0x00, 0x00, 0xff, 0x7f, 0xb5, 0x56,
0xe7, 0x1c, 0xf7, 0x5e, 0x00, 0x00, 0x21, 0x04, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xde, 0x7b, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f, 0x6b, 0x2d, 0x00, 0x00, 0xff, 0x7f, 0x5a, 0x6b,
0x84, 0x10, 0x00, 0x00, 0xd6, 0x5a, 0x00, 0x00, 0x9c, 0x73, 0xc6, 0x18, 0x00, 0x00, 0xff, 0x7f,
0xff, 0x7f, 0x18, 0x63, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f,
0x18, 0x63, 0xe7, 0x1c, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x29, 0x25, 0x9c, 0x73, 0x00, 0x00, 0xff, 0x7f,
0x8c, 0x31, 0x00, 0x00, 0xff, 0x7f, 0x21, 0x04, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0xa5, 0x14,
0x00, 0x00, 0xff, 0x7f, 0xc6, 0x18, 0x18, 0x63, 0x29, 0x25, 0xde, 0x7b, 0x00, 0x00, 0xff, 0x7f,
0xa5, 0x14, 0x5a, 0x6b, 0xff, 0x7f, 0xde, 0x7b, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0xad, 0x35,
0xd6, 0x5a, 0xa5, 0x14, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x7b, 0x6f, 0xff, 0x7f, 0xce, 0x39,
0xff, 0x7f, 0x00, 0x00, 0x94, 0x52, 0xe7, 0x1c, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x84, 0x10, 0x00, 0x00, 0xff, 0x7f, 0x73, 0x4e, 0xbd, 0x77, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f,
0x00, 0x00, 0x6b, 0x2d, 0x9c, 0x73, 0xff, 0x7f, 0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0xa5, 0x14,
0x42, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0xa5, 0x14,
0xbd, 0x77, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x9c, 0x73, 0x00, 0x00, 0xff, 0x7f, 0x8c, 0x31,
0x21, 0x04, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f, 0xa5, 0x14, 0x08, 0x21, 0x00, 0x00, 0xde, 0x7b,
0x18, 0x63, 0x00, 0x00, 0x84, 0x10, 0xff, 0x7f, 0xd6, 0x5a, 0x00, 0x00, 0xbd, 0x77, 0xff, 0x7f,
0x5a, 0x6b, 0x29, 0x25, 0x00, 0x00, 0xff, 0x7f, 0xe7, 0x1c, 0x00, 0x00, 0xff, 0x7f, 0x39, 0x67,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x14, 0x00, 0x00, 0xff, 0x7f, 0x39, 0x67,
0x08, 0x21, 0xff, 0x7f, 0x21, 0x04, 0xf7, 0x5e, 0x00, 0x00, 0x8c, 0x31, 0x00, 0x00, 0xff, 0x7f,
0x21, 0x04, 0x00, 0x00, 0xff, 0x7f, 0xad, 0x35, 0x00, 0x00, 0xff, 0x7f, 0x7b, 0x6f, 0x29, 0x25,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0xbd, 0x77, 0x10, 0x42, 0x00, 0x00, 0xff, 0x7f,
0x42, 0x08, 0x4a, 0x29, 0x7b, 0x6f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0x00, 0x00, 0xff, 0x7f, 0xde, 0x7b, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0xbd, 0x77,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x5e, 0x4a, 0x29,
0x9c, 0x73, 0x00, 0x00, 0xff, 0x7f, 0x8c, 0x31, 0xbd, 0x77, 0x6b, 0x2d, 0x00, 0x00, 0xff, 0x7f,
0x63, 0x0c, 0x7b, 0x6f, 0x00, 0x00, 0x31, 0x46, 0x42, 0x08, 0x31, 0x46, 0x00, 0x00, 0x5a, 0x6b,
0x9c, 0x73, 0x00, 0x00, 0xff, 0x7f, 0x29, 0x25, 0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0xde, 0x7b,
0xa5, 0x14, 0x00, 0x00, 0x10, 0x42, 0xff, 0x7f, 0x7b, 0x6f, 0x4a, 0x29, 0x00, 0x00, 0xff, 0x7f,
0x21, 0x04, 0x5a, 0x6b, 0xff, 0x7f, 0x08, 0x21, 0x00, 0x00, 0x31, 0x46, 0x00, 0x00, 0xff, 0x7f,
0xc6, 0x18, 0xf7, 0x5e, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10, 0x00, 0x00, 0x10, 0x42, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0xf7, 0x5e,
0x94, 0x52, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10, 0xce, 0x39, 0xff, 0x7f, 0xde, 0x7b, 0x21, 0x04,
0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10, 0x7b, 0x6f, 0xff, 0x7f, 0x08, 0x21, 0x00, 0x00,
0x00, 0x00, 0xf7, 0x5e, 0x63, 0x0c, 0xff, 0x7f, 0xff, 0x7f, 0xef, 0x3d, 0x00, 0x00, 0xff, 0x7f,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f, 0x21, 0x04,
0x00, 0x00, 0x7b, 0x6f, 0xff, 0x7f, 0xa5, 0x14, 0xb5, 0x56, 0x84, 0x10, 0x00, 0x00, 0xff, 0x7f,
0xd6, 0x5a, 0x42, 0x08, 0x00, 0x00, 0xff, 0x7f, 0x29, 0x25, 0x21, 0x04, 0xff, 0x7f, 0xbd, 0x77,
0x5a, 0x6b, 0x42, 0x08, 0x00, 0x00, 0xef, 0x3d, 0x00, 0x00, 0xff, 0x7f, 0x39, 0x67, 0xa5, 0x14,
0x42, 0x08, 0x00, 0x00, 0x52, 0x4a, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x73, 0x4e, 0x84, 0x10,
0xc6, 0x18, 0x00, 0x00, 0xff, 0x7f, 0xf7, 0x5e, 0x52, 0x4a, 0x7b, 0x6f, 0x00, 0x00, 0x00, 0x00,
0x7b, 0x6f, 0xad, 0x35, 0x00, 0x00, 0xff, 0x7f, 0xf7, 0x5e, 0x4a, 0x29, 0xff, 0x7f, 0x00, 0x00,
0x9c, 0x73, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x29, 0x25, 0x39, 0x67,
0xce, 0x39, 0xa5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x73, 0x4e, 0x00, 0x00, 0x63, 0x0c, 0xff, 0x7f,
0xad, 0x35, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0xbd, 0x77, 0x00, 0x00, 0x00, 0x00,
0xe7, 0x1c, 0xde, 0x7b, 0x00, 0x00, 0xd6, 0x5a, 0x42, 0x08, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x73, 0x8c, 0x31, 0x00, 0x00, 0xff, 0x7f,
0xa5, 0x14, 0xef, 0x3d, 0x00, 0x00, 0xff, 0x7f, 0x94, 0x52, 0xa5, 0x14, 0x00, 0x00, 0xff, 0x7f,
0xad, 0x35, 0x00, 0x00, 0xff, 0x7f, 0x9c, 0x73, 0x9c, 0x73, 0x4a, 0x29, 0x00, 0x00, 0xff, 0x7f,
0x94, 0x52, 0x00, 0x00, 0xff, 0x7f, 0x63, 0x0c, 0xad, 0x35, 0x00, 0x00, 0xff, 0x7f, 0xde, 0x7b,
0xe7, 0x1c, 0x00, 0x00, 0xff, 0x7f, 0xd6, 0x5a, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f, 0xe7, 0x1c,
0xb5, 0x56, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0c, 0x52, 0x4a, 0x42, 0x08, 0x00, 0x00, 0xff, 0x7f,
0x00, 0x00, 0xf7, 0x5e, 0x7b, 0x6f, 0xde, 0x7b, 0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f, 0x63, 0x0c,
0xad, 0x35, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xde, 0x7b, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xe7, 0x1c, 0x00, 0x00, 0xde, 0x7b, 0xd6, 0x5a, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xde, 0x7b, 0x00, 0x00, 0xff, 0x7f, 0x9c, 0x73, 0x21, 0x04, 0xc6, 0x18, 0x00, 0x00, 0xff, 0x7f,
0x9c, 0x73, 0x00, 0x00, 0xff, 0x7f, 0x8c, 0x31, 0x10, 0x42, 0xa5, 0x14, 0x00, 0x00, 0xff, 0x7f,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xbd, 0x77, 0x00, 0x00, 0xff, 0x7f, 0x6b, 0x2d, 0x42, 0x08, 0x94, 0x52, 0x00, 0x00, 0xff, 0x7f,
0x84, 0x10, 0x00, 0x00, 0xff, 0x7f, 0xd6, 0x5a, 0x5a, 0x6b, 0xff, 0x7f, 0xff, 0x7f, 0x29, 0x25,
0x00, 0x00, 0xbd, 0x77, 0x08, 0x21, 0x18, 0x63, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0xd6, 0x5a,
0x21, 0x04, 0x31, 0x46, 0xff, 0x7f, 0x7b, 0x6f, 0xe7, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f,
0x21, 0x04, 0x7b, 0x6f, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0x7b, 0x6f, 0xff, 0x7f, 0xc6, 0x18,
0xce, 0x39, 0xa5, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0xf7, 0x5e,
0x94, 0x52, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10, 0xad, 0x35, 0xff, 0x7f, 0x21, 0x04, 0xde, 0x7b,
0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0x84, 0x10, 0xf7, 0x5e, 0xa5, 0x14, 0x00, 0x00, 0xff, 0x7f,
0x73, 0x4e, 0x00, 0x00, 0xff, 0x7f, 0xe7, 0x1c, 0x42, 0x08, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
0x21, 0x04, 0x00, 0x00, 0xce, 0x39, 0x39, 0x67, 0x00, 0x00, 0x9c, 0x73, 0xff, 0x7f, 0xc6, 0x18,
0x00, 0x00, 0xd6, 0x5a, 0xff, 0x7f, 0x63, 0x0c, 0x94, 0x52, 0xa5, 0x14, 0x00, 0x00, 0xff, 0x7f,
0xc6, 0x18, 0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0x18, 0x63, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
0xff, 0x7f, 0x8c, 0x31, 0x00, 0x00, 0xff, 0x7f, 0x39, 0x67, 0x00, 0x00, 0xff, 0x7f, 0xe7, 0x1c,
0x42, 0x08, 0x00, 0x00, 0xff, 0x7f, 0x52, 0x4a, 0x4a, 0x29, 0x00, 0x00, 0xff, 0x7f, 0xb5, 0x56,
0x73, 0x4e, 0xa5, 0x14, 0x00, 0x00, 0x7b, 0x6f, 0xd6, 0x5a, 0x42, 0x08, 0x00, 0x00, 0x6b, 0x2d,
0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x8c, 0x31, 0xf7, 0x5e, 0xde, 0x7b, 0x00, 0x00, 0xff, 0x7f,
0x7b, 0x6f, 0x00, 0x00, 0xff, 0x7f, 0x6b, 0x2d, 0x8c, 0x31, 0x39, 0x67, 0x00, 0x00, 0x21, 0x04,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x10, 0x42,
0xbd, 0x77, 0x10, 0x42, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x7b, 0x6f, 0x00, 0x00, 0x42, 0x08,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x9c, 0x73, 0x00, 0x00, 0xce, 0x39, 0x00, 0x00, 0xad, 0x35, 0xff, 0x7f, 0x7b, 0x6f,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0xf7, 0x5e,
0x7b, 0x6f, 0x00, 0x00, 0xff, 0x7f, 0x6b, 0x2d, 0xde, 0x7b, 0x00, 0x00, 0xff, 0x7f, 0xf7, 0x5e,
0xe7, 0x1c, 0x00, 0x00, 0xff, 0x7f, 0x94, 0x52, 0x63, 0x0c, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
0xce, 0x39, 0x00, 0x00, 0xff, 0x7f, 0x63, 0x0c, 0xf7, 0x5e, 0x00, 0x00, 0xff, 0x7f, 0xbd, 0x77,
0x10, 0x42, 0x00, 0x00, 0xff, 0x7f, 0xbd, 0x77, 0x00, 0x00, 0xc6, 0x18, 0x5a, 0x6b, 0xff, 0x7f,
};

View File

@ -1,79 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "pickups2.h"
#include "sprites256.h"
struct sprite
{
int x;
int y;
signed char vx, vy;
} sprites[256];
void plot()
{
int i;
for (i = 0; i < 256; i++) {
GD.sprite(i, sprites[i].x >> 4, sprites[i].y >> 4, i % 47, 0, 0);
}
}
#define LWALL (0 << 4)
#define RWALL (384 << 4)
#define TWALL (0 << 4)
#define BWALL (284 << 4)
void move()
{
int i;
sprite *ps;
for (i = 256, ps = sprites; i--; ps++) {
if ((ps->x <= LWALL)) {
ps->x = LWALL;
ps->vx = -ps->vx;
}
if ((ps->x >= RWALL)) {
ps->x = RWALL;
ps->vx = -ps->vx;
}
if ((ps->y <= TWALL)) {
ps->y = TWALL;
ps->vy = -ps->vy;
}
if ((ps->y >= BWALL)) {
ps->y = BWALL;
ps->vy = -ps->vy;
}
ps->x += ps->vx;
ps->y += ps->vy;
}
}
void setup()
{
int i;
GD.begin();
GD.copy(RAM_PIC, sprites256_pic, sizeof(sprites256_pic));
GD.copy(RAM_CHR, sprites256_chr, sizeof(sprites256_chr));
GD.copy(RAM_PAL, sprites256_pal, sizeof(sprites256_pal));
GD.copy(RAM_SPRIMG, pickups2_img, sizeof(pickups2_img));
GD.copy(RAM_SPRPAL, pickups2_pal, sizeof(pickups2_pal));
for (i = 0; i < 256; i++) {
sprites[i].x = random(400 << 4);
sprites[i].y = random(300 << 4);
sprites[i].vx = random(-16,16);
sprites[i].vy = random(-16,16);
}
}
void loop()
{
plot();
move();
}

File diff suppressed because it is too large Load Diff

View File

@ -1,156 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "instruments.h"
// midi frequency table
static PROGMEM prog_uint16_t midifreq[128] = {
32,34,36,38,41,43,46,48,51,55,58,61,65,69,73,77,82,87,92,97,103,110,116,123,130,138,146,155,164,174,184,195,207,220,233,246,261,277,293,311,329,349,369,391,415,440,466,493,523,554,587,622,659,698,739,783,830,880,932,987,1046,1108,1174,1244,1318,1396,1479,1567,1661,1760,1864,1975,2093,2217,2349,2489,2637,2793,2959,3135,3322,3520,3729,3951,4186,4434,4698,4978,5274,5587,5919,6271,6644,7040,7458,7902,8372,8869,9397,9956,10548,11175,11839,12543,13289,14080,14917,15804,16744,17739,18794,19912,21096,22350,23679,25087,26579,28160,29834,31608,33488,35479,37589,39824,42192,44701,47359,50175
};
class player {
public:
byte voices, duration;
prog_uchar *amps;
byte fv;
player() {
duration = 0;
}
void begin(PROGMEM prog_uchar *instr, byte note, byte firstvoice) {
voices = pgm_read_byte(instr++);
duration = pgm_read_byte(instr++);
uint16_t midi = pgm_read_word(midifreq + note);
fv = firstvoice;
for (byte i = 0; i < voices; i++) {
uint16_t w = pgm_read_word(instr);
GD.voice(fv + i, 0, (long(w) * midi) >> 10, 0, 0);
instr += 2;
}
amps = instr;
}
void update() {
for (byte j = 0; j < voices; j++) {
byte v = pgm_read_byte(amps++) >> 2;
GD.wr(VOICES + 4 * (fv + j) + 2, v);
GD.wr(VOICES + 4 * (fv + j) + 3, v);
}
duration--;
}
byte available() {
return duration != 0;
}
};
static struct {
byte t, note;
} pacman[] = {
{ 0, 71 },
{ 2, 83 },
{ 4, 78 },
{ 6, 75 },
{ 8, 83 },
{ 9, 78 },
{ 12, 75 },
{ 16, 72 },
{ 18, 84 },
{ 20, 79 },
{ 22, 76 },
{ 24, 84 },
{ 25, 79 },
{ 28, 76 },
{ 32, 71 },
{ 34, 83 },
{ 36, 78 },
{ 38, 75 },
{ 40, 83 },
{ 41, 78 },
{ 44, 75 },
{ 48, 75 },
{ 49, 76 },
{ 50, 77 },
{ 52, 77 },
{ 53, 78 },
{ 54, 79 },
{ 56, 79 },
{ 57, 80 },
{ 58, 81 },
{ 60, 83 }
};
static void pickinstrument(prog_uchar* &instdata, byte &pitchdrop, byte n)
{
char* name = "";
switch (n) {
case 0: name = "chimebar"; instdata = chimebar; pitchdrop = 0; break;
case 1: name = "piano"; instdata = piano; pitchdrop = 4; break;
case 2: name = "flute"; instdata = flute; pitchdrop = 0; break;
case 3: name = "harp"; instdata = harp; pitchdrop = 1; break;
case 4: name = "glock"; instdata = glock; pitchdrop = 5; break;
case 5: name = "nylon"; instdata = nylon; pitchdrop = 2; break;
case 6: name = "bass"; instdata = bass; pitchdrop = 4; break;
case 7: name = "clarinet"; instdata = clarinet; pitchdrop = 1; break;
case 8: name = "recorder"; instdata = recorder; pitchdrop = 1; break;
case 9: name = "musicbox"; instdata = musicbox; pitchdrop = 0; break;
case 10: name = "guitar"; instdata = guitar; pitchdrop = 3; break;
case 11: name = "oboe"; instdata = oboe; pitchdrop = 2; break;
case 12: name = "organ"; instdata = organ; pitchdrop = 2; break;
}
GD.fill(64, ' ', 128);
GD.putstr(0, 2, name);
}
#include "showvoices.h"
#include "sphere.h"
void setup()
{
GD.begin();
GD.ascii();
GD.copy(RAM_SPRIMG, sphere_img, sizeof(sphere_img));
GD.copy(RAM_SPRPAL, sphere_pal, sizeof(sphere_pal));
for (byte i = 0; i < 64; i++)
GD.sprite(i, 100, 284 * i / 64, 0, 0);
GD.microcode(showvoices_code, sizeof(showvoices_code));
GD.putstr(0, 0, "Synthesized instruments");
}
void loop()
{
player p[4];
byte nextv = 0;
byte v;
for (byte inst = 0; inst < 13; inst++) {
prog_uchar* instdata;
byte pitchdrop;
pickinstrument(instdata, pitchdrop, inst);
byte t = 0;
byte i = 0;
while (i < sizeof(pacman) / sizeof(pacman[0])) {
if (t == pacman[i].t) {
p[nextv].begin(instdata, pacman[i].note - 12 * pitchdrop, 16 * nextv);
nextv = (nextv + 1) & 3;
i++;
}
for (int d = 4; d; d--) {
for (v = 0; v < 4; v++)
if (p[v].available())
p[v].update();
GD.waitvblank();
}
t++;
}
byte anyplaying;
do {
anyplaying = 0;
for (v = 0; v < 4; v++) {
byte playing = p[v].available();
anyplaying |= playing;
if (playing)
p[v].update();
}
GD.waitvblank();
} while (anyplaying);
}
}

View File

@ -1,28 +0,0 @@
static PROGMEM prog_uchar showvoices_code[] = {
0x81,0x15,
0x00,0x80,
0x81,0x60,
0x04,0x80,
0x03,0x6D,
0x00,0xAA,
0x03,0x62,
0x02,0x80,
0x03,0x62,
0x00,0x60,
0x00,0x6C,
0x00,0x66,
0x81,0x61,
0x04,0x80,
0x03,0x6D,
0x00,0xB0,
0x03,0x62,
0x02,0x80,
0x03,0x62,
0x23,0x60,
0x03,0x61,
0x00,0x6A,
0x3F,0x80,
0x03,0x63,
0x82,0x15,
0x0C,0x70,
};

View File

@ -1,55 +0,0 @@
static PROGMEM prog_uchar sphere_img[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0b, 0x12, 0x20, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x0f, 0x17, 0x23, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x0e, 0x16, 0x1e, 0x27, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x11, 0x17, 0x1f, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x0c, 0x12, 0x19, 0x22, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x10, 0x15, 0x1b, 0x25, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x08, 0x0d, 0x14, 0x1a, 0x21, 0x27, 0x27, 0x27, 0xff,
0xff, 0x03, 0x01, 0x02, 0x03, 0x05, 0x0a, 0x0d, 0x13, 0x18, 0x1d, 0x26, 0x27, 0x27, 0x27, 0xff,
0xff, 0x0b, 0x06, 0x07, 0x09, 0x0c, 0x10, 0x14, 0x18, 0x1c, 0x24, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x12, 0x0f, 0x0e, 0x11, 0x12, 0x15, 0x1a, 0x1d, 0x24, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x20, 0x17, 0x16, 0x17, 0x19, 0x1b, 0x21, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0xff, 0x23, 0x1e, 0x1f, 0x22, 0x25, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff,
0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
static PROGMEM prog_uchar sphere_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xde, 0x7b, 0xbd, 0x77, 0x9c, 0x73, 0x9c, 0x73, 0x7b, 0x6f,
0x7b, 0x6f, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x39, 0x67, 0x18, 0x63, 0xf7, 0x5e, 0xf7, 0x5e,
0xf7, 0x5e, 0xf7, 0x5e, 0xb5, 0x56, 0xb5, 0x56, 0x94, 0x52, 0x73, 0x4e, 0x73, 0x4e, 0x52, 0x4a,
0x52, 0x4a, 0x31, 0x46, 0x31, 0x46, 0xef, 0x3d, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xad, 0x35,
0xad, 0x35, 0xad, 0x35, 0x8c, 0x31, 0x8c, 0x31, 0x6b, 0x2d, 0x6b, 0x2d, 0x4a, 0x29, 0x29, 0x25,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
};

View File

@ -1,691 +0,0 @@
static PROGMEM prog_uchar mont[] = {
0xa1, 0x70, 0x03, 0x05, 0x8f, 0xe0, 0x06, 0x0a, 0x98, 0x26, 0x05, 0x05, 0xa9, 0x4d, 0x0a, 0x0a,
0xa2, 0xb8, 0x01, 0x02, 0xaf, 0xba, 0x01, 0x02, 0x82, 0xb5, 0x01, 0x01, 0x89, 0x26, 0x05, 0x02,
0xae, 0x2e, 0x05, 0x02, 0x9c, 0x1e, 0x05, 0x01, 0x8a, 0xe0, 0x06, 0x02, 0xbd, 0xeb, 0x06, 0x02,
0x86, 0xd4, 0x06, 0x01, 0xb1, 0x4d, 0x0a, 0x04, 0xa3, 0x5d, 0x0a, 0x04, 0x83, 0x3c, 0x0a, 0x03,
0xbf, 0x70, 0x03, 0x04, 0xba, 0x75, 0x03, 0x04, 0xa5, 0x6a, 0x03, 0x03, 0x8e, 0xdc, 0x00, 0x05,
0x91, 0xdd, 0x00, 0x05, 0x8b, 0xda, 0x00, 0x04, 0xab, 0xe0, 0x06, 0x01, 0x9b, 0xc0, 0x0d, 0x03,
0x80, 0x70, 0x03, 0x01, 0x9e, 0xe0, 0x06, 0x03, 0x81, 0xb8, 0x01, 0x01, 0xb4, 0x70, 0x03, 0x03,
0xb8, 0x6e, 0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0xa8, 0xdc, 0x00, 0x04, 0xb0, 0xb8, 0x01, 0x09,
0x8d, 0xc0, 0x0d, 0x06, 0xb7, 0xb8, 0x01, 0x06, 0x84, 0xdc, 0x00, 0x04, 0x99, 0xc0, 0x0d, 0x01,
0x0c, 0x92, 0x26, 0x05, 0x06, 0x0c, 0x58, 0x69, 0x61, 0x4f, 0x78, 0x67, 0xb8, 0x6e, 0x00, 0x04,
0x88, 0xdc, 0x00, 0x09, 0xa4, 0xb8, 0x01, 0x04, 0xb5, 0x70, 0x03, 0x09, 0x77, 0x4d, 0x94, 0xe0,
0x06, 0x06, 0x9a, 0x70, 0x03, 0x06, 0x0c, 0x52, 0x95, 0x26, 0x05, 0x06, 0x92, 0x93, 0x02, 0x06,
0x0c, 0x78, 0x48, 0x93, 0x6e, 0x00, 0x04, 0xb7, 0xdc, 0x00, 0x09, 0x64, 0x75, 0x88, 0xb8, 0x01,
0x04, 0x8f, 0x70, 0x03, 0x09, 0x5a, 0x54, 0xac, 0x70, 0x03, 0x06, 0x0c, 0x52, 0x55, 0x9f, 0x26,
0x05, 0x06, 0x0c, 0x96, 0x26, 0x05, 0x05, 0xb9, 0x4d, 0x0a, 0x0a, 0xbe, 0x70, 0x03, 0x05, 0x95,
0xe0, 0x06, 0x0a, 0x53, 0x77, 0x48, 0x4f, 0x90, 0xb8, 0x01, 0x04, 0xa6, 0x70, 0x03, 0x09, 0x6c,
0x9a, 0xe0, 0x06, 0x06, 0x8d, 0x70, 0x03, 0x06, 0x0c, 0x5f, 0xb6, 0x26, 0x05, 0x06, 0x0c, 0x55,
0x7e, 0x79, 0x56, 0x94, 0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0x97, 0x70, 0x03, 0x05, 0x98,
0xe0, 0x06, 0x0a, 0xb3, 0x6e, 0x00, 0x04, 0x92, 0xdc, 0x00, 0x09, 0x68, 0x70, 0x88, 0xdc, 0x00,
0x04, 0x9d, 0xb8, 0x01, 0x09, 0x50, 0x66, 0x4d, 0x5a, 0xb9, 0x4d, 0x0a, 0x06, 0x8d, 0x93, 0x02,
0x06, 0x0c, 0x76, 0xb8, 0x26, 0x05, 0x06, 0x0c, 0x58, 0x57, 0x7c, 0x54, 0x52, 0x73, 0x93, 0x6e,
0x00, 0x04, 0xac, 0xdc, 0x00, 0x09, 0xad, 0xb8, 0x01, 0x04, 0x94, 0x70, 0x03, 0x09, 0x4d, 0x79,
0xa8, 0xe0, 0x06, 0x06, 0x8d, 0x70, 0x03, 0x06, 0x0c, 0x78, 0x95, 0x26, 0x05, 0x06, 0xb3, 0x93,
0x02, 0x06, 0x0c, 0xa0, 0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0x92, 0x70, 0x03, 0x05, 0xb0,
0xe0, 0x06, 0x0a, 0x53, 0x6c, 0x54, 0x6d, 0xb2, 0xb8, 0x01, 0x04, 0x85, 0x70, 0x03, 0x09, 0x4d,
0x68, 0x8f, 0x70, 0x03, 0x06, 0x0c, 0x73, 0x55, 0x87, 0x26, 0x05, 0x06, 0x0c, 0x70, 0x52, 0x60,
0x7c, 0xa4, 0x6e, 0x00, 0x04, 0x97, 0xdc, 0x00, 0x09, 0x48, 0x5d, 0x8d, 0xdc, 0x00, 0x04, 0x88,
0xb8, 0x01, 0x09, 0x72, 0x45, 0x4f, 0xa6, 0xe0, 0x06, 0x06, 0x93, 0x70, 0x03, 0x06, 0x0c, 0x47,
0xb2, 0x26, 0x05, 0x06, 0x0c, 0x7a, 0x65, 0x7f, 0x43, 0x71, 0x63, 0x85, 0x2d, 0x09, 0x04, 0x8c,
0x3c, 0x09, 0x04, 0xa8, 0x1e, 0x09, 0x03, 0x92, 0x0f, 0x03, 0x04, 0xbf, 0x14, 0x03, 0x04, 0xb1,
0x0a, 0x03, 0x03, 0x64, 0x57, 0x95, 0x6e, 0x00, 0x04, 0xba, 0xdc, 0x00, 0x09, 0x83, 0xb8, 0x01,
0x04, 0xbc, 0x70, 0x03, 0x09, 0x97, 0xc0, 0x0d, 0x06, 0x53, 0x66, 0xb5, 0xb8, 0x01, 0x06, 0x59,
0x8f, 0x3f, 0x0c, 0x01, 0x0c, 0x72, 0x98, 0x26, 0x05, 0x06, 0x0c, 0xa1, 0x26, 0x05, 0x05, 0xb7,
0x4d, 0x0a, 0x0a, 0x90, 0x70, 0x03, 0x05, 0x9d, 0xe0, 0x06, 0x0a, 0x7a, 0x55, 0x48, 0x4d, 0x43,
0x7c, 0xb0, 0xb8, 0x01, 0x04, 0xad, 0x70, 0x03, 0x09, 0x75, 0x57, 0x87, 0xe0, 0x06, 0x06, 0xbc,
0x70, 0x03, 0x06, 0x0c, 0x58, 0x97, 0x26, 0x05, 0x06, 0xa9, 0x93, 0x02, 0x06, 0x0c, 0x50, 0x5d,
0x61, 0x77, 0x96, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0x93, 0x70, 0x03, 0x05, 0x99, 0xe0,
0x06, 0x0a, 0x98, 0x6e, 0x00, 0x04, 0x90, 0xdc, 0x00, 0x09, 0xb5, 0xdc, 0x00, 0x04, 0xa6, 0xb8,
0x01, 0x09, 0x70, 0x6d, 0x7c, 0x47, 0xb2, 0x70, 0x03, 0x06, 0x0c, 0x69, 0x57, 0x8d, 0x26, 0x05,
0x06, 0x0c, 0x59, 0x53, 0x63, 0x56, 0x58, 0x50, 0x97, 0x6e, 0x00, 0x04, 0xb0, 0xdc, 0x00, 0x09,
0x75, 0x66, 0xaa, 0xdc, 0x00, 0x04, 0xbe, 0xb8, 0x01, 0x09, 0x9a, 0xb8, 0x01, 0x04, 0xba, 0x70,
0x03, 0x09, 0x72, 0xbc, 0xe0, 0x06, 0x06, 0xb2, 0x70, 0x03, 0x06, 0x0c, 0x4d, 0xb5, 0x26, 0x05,
0x06, 0x0c, 0xb3, 0x26, 0x05, 0x05, 0xa0, 0x4d, 0x0a, 0x0a, 0x87, 0x70, 0x03, 0x05, 0xb6, 0xe0,
0x06, 0x0a, 0x70, 0x57, 0x6a, 0x7e, 0x5a, 0x7a, 0x90, 0xb8, 0x01, 0x04, 0x9a, 0x70, 0x03, 0x09,
0xb0, 0x4d, 0x0a, 0x06, 0x72, 0x7c, 0xb7, 0x93, 0x02, 0x06, 0x0c, 0x75, 0x83, 0x26, 0x05, 0x06,
0x0c, 0x76, 0x47, 0x60, 0x73, 0x94, 0x26, 0x05, 0x05, 0x88, 0x4d, 0x0a, 0x0a, 0xbe, 0x70, 0x03,
0x05, 0xa9, 0xe0, 0x06, 0x0a, 0x8d, 0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0xa3, 0xdc, 0x00,
0x04, 0x98, 0xb8, 0x01, 0x09, 0x50, 0x5a, 0x77, 0x70, 0x9f, 0xe0, 0x06, 0x06, 0x93, 0x70, 0x03,
0x06, 0x0c, 0x43, 0xa1, 0x26, 0x05, 0x06, 0xa6, 0x93, 0x02, 0x06, 0x0c, 0x69, 0x7e, 0x48, 0x54,
0xa0, 0x26, 0x05, 0x05, 0xb6, 0x4d, 0x0a, 0x0a, 0xbc, 0x70, 0x03, 0x05, 0xba, 0xe0, 0x06, 0x0a,
0x72, 0x4d, 0xb0, 0x6e, 0x00, 0x04, 0x9a, 0xdc, 0x00, 0x09, 0x58, 0x63, 0x94, 0xdc, 0x00, 0x04,
0x97, 0xb8, 0x01, 0x09, 0xb2, 0xb8, 0x01, 0x04, 0xa4, 0x70, 0x03, 0x09, 0x53, 0x5f, 0x93, 0x70,
0x03, 0x06, 0x0c, 0x66, 0x61, 0xb5, 0x26, 0x05, 0x06, 0x0c, 0x7a, 0x7c, 0x60, 0x76, 0x70, 0x5a,
0x54, 0x57, 0x72, 0x64, 0xa7, 0xb8, 0x01, 0x04, 0x98, 0x70, 0x03, 0x09, 0xb3, 0xdc, 0x00, 0x04,
0x9d, 0xb8, 0x01, 0x09, 0x96, 0x6e, 0x00, 0x04, 0x8d, 0xdc, 0x00, 0x09, 0x53, 0xa1, 0xe0, 0x06,
0x06, 0xb0, 0x70, 0x03, 0x06, 0x0c, 0x75, 0x97, 0x26, 0x05, 0x06, 0x0c, 0xa9, 0x70, 0x03, 0x05,
0xa6, 0xe0, 0x06, 0x0a, 0x87, 0x26, 0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x71, 0x52, 0x7f, 0x68,
0x4c, 0x45, 0x9a, 0x2d, 0x08, 0x04, 0xb2, 0x3a, 0x08, 0x04, 0xb6, 0x1f, 0x08, 0x03, 0xa8, 0xe3,
0x02, 0x04, 0xbe, 0xe8, 0x02, 0x04, 0xb9, 0xdf, 0x02, 0x03, 0x4d, 0x56, 0x73, 0x5d, 0x58, 0x67,
0x94, 0xdc, 0x00, 0x04, 0xa5, 0xb8, 0x01, 0x09, 0x83, 0x6e, 0x00, 0x04, 0xb3, 0xdc, 0x00, 0x09,
0x57, 0x70, 0x61, 0x98, 0xc0, 0x0d, 0x06, 0x92, 0xb8, 0x01, 0x06, 0x4f, 0xa3, 0x8f, 0x0b, 0x01,
0x0c, 0x96, 0x26, 0x05, 0x06, 0x0c, 0x7b, 0x47, 0x69, 0x66, 0x73, 0x43, 0x54, 0x65, 0xa7, 0x6e,
0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0xad, 0xb8, 0x01, 0x04, 0x93, 0x70, 0x03, 0x09, 0x52, 0x58,
0x97, 0xe0, 0x06, 0x06, 0x88, 0x70, 0x03, 0x06, 0x0c, 0x56, 0xa0, 0x26, 0x05, 0x06, 0xbc, 0x93,
0x02, 0x06, 0x0c, 0x75, 0x67, 0x9d, 0x6e, 0x00, 0x04, 0xb8, 0xdc, 0x00, 0x09, 0x53, 0x6d, 0xb0,
0xb8, 0x01, 0x04, 0xa7, 0x70, 0x03, 0x09, 0x48, 0x57, 0x87, 0x70, 0x03, 0x06, 0x0c, 0x7c, 0x60,
0xb5, 0x26, 0x05, 0x06, 0x0c, 0xbf, 0x26, 0x05, 0x05, 0xa5, 0x4d, 0x0a, 0x0a, 0xb3, 0x70, 0x03,
0x05, 0x94, 0xe0, 0x06, 0x0a, 0x78, 0x5d, 0x70, 0x67, 0x98, 0xb8, 0x01, 0x04, 0x8f, 0x70, 0x03,
0x09, 0x47, 0x99, 0xe0, 0x06, 0x06, 0xb7, 0x70, 0x03, 0x06, 0x0c, 0x75, 0xac, 0x26, 0x05, 0x06,
0x0c, 0x73, 0x54, 0x65, 0x7f, 0x97, 0x26, 0x05, 0x05, 0x9f, 0x4d, 0x0a, 0x0a, 0x83, 0x70, 0x03,
0x05, 0xa6, 0xe0, 0x06, 0x0a, 0xbf, 0x6e, 0x00, 0x04, 0xaa, 0xdc, 0x00, 0x09, 0xb1, 0xdc, 0x00,
0x04, 0xa1, 0xb8, 0x01, 0x09, 0x58, 0x4f, 0x77, 0x59, 0x9d, 0x4d, 0x0a, 0x06, 0xa0, 0x93, 0x02,
0x06, 0x0c, 0x6c, 0x85, 0x26, 0x05, 0x06, 0x0c, 0x43, 0x66, 0x5f, 0x57, 0x6a, 0x7f, 0xb3, 0x6e,
0x00, 0x04, 0x9f, 0xdc, 0x00, 0x09, 0x99, 0xb8, 0x01, 0x04, 0x90, 0x70, 0x03, 0x09, 0x60, 0x5d,
0xa5, 0xe0, 0x06, 0x06, 0x88, 0x70, 0x03, 0x06, 0x0c, 0x45, 0xb8, 0x26, 0x05, 0x06, 0x93, 0x93,
0x02, 0x06, 0x0c, 0xba, 0x26, 0x05, 0x05, 0x8c, 0x4d, 0x0a, 0x0a, 0xbb, 0x70, 0x03, 0x05, 0x9d,
0xe0, 0x06, 0x0a, 0x73, 0x5f, 0x50, 0x59, 0xa4, 0xb8, 0x01, 0x04, 0x83, 0x70, 0x03, 0x09, 0x48,
0x65, 0xa7, 0x70, 0x03, 0x06, 0x0c, 0x53, 0x78, 0xad, 0x26, 0x05, 0x06, 0x0c, 0x7b, 0x5d, 0x7a,
0x4c, 0x85, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x71, 0x61, 0x92, 0xdc, 0x00, 0x04, 0xac,
0xb8, 0x01, 0x09, 0x43, 0x64, 0x67, 0xaa, 0xe0, 0x06, 0x06, 0xa6, 0x70, 0x03, 0x06, 0x0c, 0x6d,
0xba, 0x26, 0x05, 0x06, 0x0c, 0x68, 0x79, 0x7e, 0x5a, 0x72, 0x76, 0xb0, 0x2d, 0x09, 0x04, 0xbe,
0x3c, 0x09, 0x04, 0x88, 0x1e, 0x09, 0x03, 0xad, 0x0f, 0x03, 0x04, 0xa0, 0x14, 0x03, 0x04, 0xb8,
0x0a, 0x03, 0x03, 0x69, 0x45, 0x83, 0x6e, 0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0x93, 0xb8, 0x01,
0x04, 0xbb, 0x70, 0x03, 0x09, 0xa8, 0xc0, 0x0d, 0x06, 0x66, 0x6a, 0xbc, 0xb8, 0x01, 0x06, 0x63,
0xb7, 0x4d, 0x0a, 0x01, 0xa5, 0x2d, 0x08, 0x01, 0x0c, 0x7a, 0xa1, 0x26, 0x05, 0x06, 0x0c, 0x95,
0x26, 0x05, 0x05, 0xb9, 0x4d, 0x0a, 0x0a, 0x98, 0x70, 0x03, 0x05, 0xa7, 0xe0, 0x06, 0x0a, 0x43,
0x75, 0x52, 0x6c, 0x7b, 0x53, 0xac, 0xb8, 0x01, 0x04, 0x94, 0x70, 0x03, 0x09, 0x7c, 0x68, 0x83,
0xe0, 0x06, 0x06, 0xa9, 0x70, 0x03, 0x06, 0x0c, 0x61, 0xb3, 0x26, 0x05, 0x06, 0x85, 0x93, 0x02,
0x06, 0x0c, 0x58, 0x67, 0x79, 0x55, 0x8c, 0x26, 0x05, 0x05, 0x8f, 0x4d, 0x0a, 0x0a, 0xba, 0x70,
0x03, 0x05, 0x92, 0xe0, 0x06, 0x0a, 0x9f, 0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0x99, 0xdc,
0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x54, 0x6c, 0x69, 0x43, 0xa1, 0x70, 0x03, 0x06, 0x0c, 0x45,
0x73, 0xa8, 0x26, 0x05, 0x06, 0x0c, 0x7a, 0x52, 0x4c, 0x4f, 0x72, 0x5f, 0x9d, 0x6e, 0x00, 0x04,
0xa7, 0xdc, 0x00, 0x09, 0x59, 0x7f, 0xb2, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01, 0x09, 0xa3, 0xb8,
0x01, 0x04, 0x90, 0x70, 0x03, 0x09, 0x61, 0xac, 0xe0, 0x06, 0x06, 0xb1, 0x70, 0x03, 0x06, 0x0c,
0x68, 0xaa, 0x26, 0x05, 0x06, 0x0c, 0xa1, 0x26, 0x05, 0x05, 0xb5, 0x4d, 0x0a, 0x0a, 0x98, 0x70,
0x03, 0x05, 0x94, 0xe0, 0x06, 0x0a, 0x5d, 0x67, 0x72, 0x52, 0x50, 0x63, 0xa8, 0xb8, 0x01, 0x04,
0x96, 0x70, 0x03, 0x09, 0xbf, 0x4d, 0x0a, 0x06, 0x71, 0x6c, 0x90, 0x93, 0x02, 0x06, 0x65, 0x9a,
0x2d, 0x09, 0x01, 0xb2, 0x3f, 0x0c, 0x01, 0x0c, 0x6a, 0x92, 0x26, 0x05, 0x06, 0x0c, 0x58, 0x54,
0x61, 0x75, 0x99, 0x26, 0x05, 0x05, 0x8c, 0x4d, 0x0a, 0x0a, 0x8d, 0x70, 0x03, 0x05, 0x93, 0xe0,
0x06, 0x0a, 0xbb, 0x6e, 0x00, 0x04, 0x83, 0xdc, 0x00, 0x09, 0x97, 0xdc, 0x00, 0x04, 0xa6, 0xb8,
0x01, 0x09, 0x68, 0x56, 0x50, 0x7f, 0xa4, 0xe0, 0x06, 0x06, 0xb9, 0x70, 0x03, 0x06, 0x0c, 0x52,
0x90, 0x26, 0x05, 0x06, 0x96, 0x93, 0x02, 0x06, 0x0c, 0x53, 0x4d, 0x59, 0x4c, 0xa1, 0x26, 0x05,
0x05, 0xb3, 0x4d, 0x0a, 0x0a, 0x8d, 0x70, 0x03, 0x05, 0xaa, 0xe0, 0x06, 0x0a, 0x43, 0x7b, 0x9f,
0x6e, 0x00, 0x04, 0xba, 0xdc, 0x00, 0x09, 0x66, 0x57, 0xa9, 0xdc, 0x00, 0x04, 0x83, 0xb8, 0x01,
0x09, 0xac, 0xb8, 0x01, 0x04, 0x87, 0x70, 0x03, 0x09, 0x79, 0x64, 0x97, 0x70, 0x03, 0x06, 0x0c,
0x56, 0x50, 0x99, 0x26, 0x05, 0x06, 0x92, 0xb7, 0x07, 0x01, 0x0c, 0x6a, 0x4d, 0x61, 0x73, 0x95,
0xe0, 0x06, 0x12, 0xa6, 0xec, 0x06, 0x0f, 0x85, 0xd3, 0x06, 0x0a, 0xb5, 0xf8, 0x06, 0x05, 0x8d,
0xc7, 0x06, 0x03, 0x8c, 0xcc, 0x0d, 0x02, 0x7a, 0x5f, 0xa7, 0x6e, 0x00, 0x04, 0xbc, 0xdc, 0x00,
0x09, 0x69, 0x43, 0x8f, 0xdc, 0x00, 0x04, 0xa9, 0xb8, 0x01, 0x09, 0x6c, 0x47, 0x87, 0xb8, 0x01,
0x04, 0xa8, 0x70, 0x03, 0x09, 0x57, 0xbb, 0xe0, 0x06, 0x06, 0x98, 0x70, 0x03, 0x06, 0x0c, 0x45,
0x66, 0x4c, 0x4d, 0x75, 0x55, 0xb9, 0x2d, 0x09, 0x12, 0xa1, 0x3d, 0x09, 0x0f, 0x85, 0x1c, 0x09,
0x0a, 0xac, 0x4e, 0x09, 0x05, 0x8d, 0x0c, 0x09, 0x03, 0x9d, 0x6b, 0x12, 0x02, 0x59, 0x94, 0x26,
0x05, 0x06, 0x0c, 0x90, 0x70, 0x03, 0x05, 0x95, 0xe0, 0x06, 0x0a, 0xa3, 0x26, 0x05, 0x05, 0xbf,
0x4d, 0x0a, 0x0a, 0x61, 0x45, 0x6c, 0x4d, 0x79, 0x5d, 0xb3, 0x4d, 0x0a, 0x1a, 0xba, 0x5f, 0x0a,
0x15, 0xb6, 0x3a, 0x0a, 0x0e, 0x9d, 0x71, 0x0a, 0x08, 0xa5, 0x28, 0x0a, 0x04, 0x99, 0xac, 0x14,
0x03, 0x51, 0x4b, 0x4e, 0x60, 0x78, 0x6d, 0x70, 0x48, 0x7e, 0x4a, 0x7d, 0x46, 0x49, 0x5c, 0x6e,
0x62, 0x42, 0x6f, 0xb0, 0xb8, 0x01, 0x02, 0xb5, 0xba, 0x01, 0x02, 0x96, 0xb5, 0x01, 0x01, 0x8c,
0x26, 0x05, 0x02, 0xae, 0x2e, 0x05, 0x02, 0xa6, 0x1e, 0x05, 0x01, 0xad, 0xe0, 0x06, 0x02, 0xa1,
0xeb, 0x06, 0x02, 0xa2, 0xd4, 0x06, 0x01, 0x9f, 0xdc, 0x00, 0x05, 0xbe, 0xdd, 0x00, 0x05, 0xb8,
0xda, 0x00, 0x04, 0x41, 0x74, 0x40, 0x5e, 0x5b, 0x6b, 0x7c, 0x67, 0x69, 0x4f, 0x68, 0x47, 0x83,
0x6e, 0x00, 0x04, 0x86, 0xdc, 0x00, 0x09, 0xa4, 0xdc, 0x00, 0x04, 0xb1, 0xb8, 0x01, 0x09, 0x58,
0x54, 0x7b, 0xbb, 0x4d, 0x0a, 0x06, 0x82, 0xe0, 0x06, 0x06, 0x94, 0x16, 0x04, 0x06, 0x52, 0x72,
0x5a, 0x77, 0x44, 0x18, 0x63, 0x7f, 0x50, 0x55, 0x43, 0x46, 0x93, 0x6e, 0x00, 0x04, 0xa3, 0xdc,
0x00, 0x09, 0x8b, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x63, 0x53, 0xaa, 0x6e, 0x00,
0x04, 0xab, 0xdc, 0x00, 0x09, 0x4b, 0x4e, 0xa9, 0xb8, 0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x18,
0x9e, 0x26, 0x05, 0x05, 0x8b, 0x4d, 0x0a, 0x0a, 0x80, 0x70, 0x03, 0x05, 0xbd, 0xe0, 0x06, 0x0a,
0x6a, 0x6b, 0x69, 0x44, 0x9b, 0xb8, 0x01, 0x04, 0xa3, 0x70, 0x03, 0x09, 0x18, 0x40, 0x7d, 0x4b,
0x5e, 0x8d, 0x26, 0x05, 0x05, 0xb2, 0x4d, 0x0a, 0x0a, 0xb4, 0x70, 0x03, 0x05, 0x86, 0xe0, 0x06,
0x0a, 0x80, 0x6e, 0x00, 0x04, 0x9a, 0xdc, 0x00, 0x09, 0x71, 0x64, 0xac, 0xdc, 0x00, 0x04, 0xa0,
0xb8, 0x01, 0x09, 0x63, 0x5b, 0x18, 0x74, 0x46, 0x72, 0x4d, 0x40, 0x5a, 0xbf, 0x6e, 0x00, 0x04,
0x84, 0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x9a, 0x70, 0x03, 0x09, 0x18, 0x81, 0x26, 0x05,
0x05, 0x93, 0x4d, 0x0a, 0x0a, 0xbc, 0x70, 0x03, 0x05, 0xb7, 0xe0, 0x06, 0x0a, 0x44, 0x7f, 0x52,
0x5a, 0x9a, 0xb8, 0x01, 0x04, 0x9c, 0x70, 0x03, 0x09, 0x18, 0x7c, 0x77, 0x41, 0x53, 0x83, 0x6e,
0x00, 0x04, 0x97, 0xdc, 0x00, 0x09, 0x60, 0x6c, 0x91, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01, 0x09,
0x5a, 0x5c, 0x18, 0x43, 0x57, 0xb7, 0x6e, 0x00, 0x04, 0x9c, 0xdc, 0x00, 0x09, 0xa3, 0xb8, 0x01,
0x04, 0xbd, 0x70, 0x03, 0x09, 0x18, 0x83, 0x26, 0x05, 0x05, 0xa4, 0x4d, 0x0a, 0x0a, 0x9e, 0x70,
0x03, 0x05, 0xbc, 0xe0, 0x06, 0x0a, 0x5c, 0x77, 0x40, 0x51, 0x63, 0x7d, 0x89, 0xb8, 0x01, 0x04,
0x97, 0x70, 0x03, 0x09, 0x18, 0x7c, 0x5e, 0x43, 0x64, 0xb2, 0x26, 0x05, 0x05, 0x9a, 0x4d, 0x0a,
0x0a, 0xaa, 0x70, 0x03, 0x05, 0x80, 0xe0, 0x06, 0x0a, 0xa7, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00,
0x09, 0xa3, 0xdc, 0x00, 0x04, 0xb4, 0xb8, 0x01, 0x09, 0x49, 0x57, 0x18, 0x40, 0x6a, 0x72, 0x5a,
0x4e, 0x67, 0x85, 0x6e, 0x00, 0x04, 0x92, 0xdc, 0x00, 0x09, 0x63, 0x74, 0x91, 0xdc, 0x00, 0x04,
0x83, 0xb8, 0x01, 0x09, 0xa0, 0xb8, 0x01, 0x04, 0x8f, 0x70, 0x03, 0x09, 0x18, 0xbd, 0x26, 0x05,
0x05, 0x98, 0x4d, 0x0a, 0x0a, 0x95, 0x70, 0x03, 0x05, 0xb9, 0xe0, 0x06, 0x0a, 0x52, 0x45, 0x51,
0x43, 0x60, 0x4f, 0x90, 0xb8, 0x01, 0x04, 0x88, 0x70, 0x03, 0x09, 0x18, 0x79, 0x55, 0x58, 0x7d,
0x8e, 0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0x8f, 0x70, 0x03, 0x05, 0x98, 0xe0, 0x06, 0x0a,
0x9c, 0x6e, 0x00, 0x04, 0x8b, 0xdc, 0x00, 0x09, 0x86, 0xdc, 0x00, 0x04, 0x8a, 0xb8, 0x01, 0x09,
0x50, 0x48, 0x18, 0x58, 0x4f, 0x7c, 0x4e, 0xbc, 0x26, 0x05, 0x05, 0x87, 0x4d, 0x0a, 0x0a, 0xac,
0x70, 0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0x83, 0x2d, 0x09, 0x1a, 0xa7, 0x3d, 0x09, 0x15, 0x80,
0x1c, 0x09, 0x0e, 0x8f, 0x4e, 0x09, 0x08, 0x90, 0x0c, 0x09, 0x04, 0x93, 0x6b, 0x12, 0x03, 0x4b,
0x5c, 0xbf, 0x6e, 0x00, 0x04, 0x9c, 0xdc, 0x00, 0x09, 0x4a, 0x46, 0xb7, 0xdc, 0x00, 0x04, 0xb4,
0xb8, 0x01, 0x09, 0xb9, 0xb8, 0x01, 0x04, 0xb1, 0x70, 0x03, 0x09, 0x18, 0x41, 0x6c, 0x7c, 0x47,
0x65, 0x73, 0x76, 0x59, 0x7a, 0x5d, 0x5c, 0x7f, 0x74, 0x77, 0x79, 0x71, 0xa3, 0xb8, 0x01, 0x04,
0xaa, 0x70, 0x03, 0x09, 0xb7, 0xdc, 0x00, 0x04, 0x8e, 0xb8, 0x01, 0x09, 0xaf, 0x6e, 0x00, 0x04,
0x95, 0xdc, 0x00, 0x09, 0x18, 0x9c, 0x70, 0x03, 0x05, 0x89, 0xe0, 0x06, 0x0a, 0xb6, 0x26, 0x05,
0x05, 0xa0, 0x4d, 0x0a, 0x0a, 0x40, 0x43, 0x67, 0x4f, 0x50, 0x53, 0xb1, 0x3f, 0x0c, 0x1a, 0x81,
0x55, 0x0c, 0x15, 0x83, 0x2a, 0x0c, 0x0e, 0x97, 0x6b, 0x0c, 0x08, 0x90, 0x14, 0x0c, 0x04, 0xb9,
0x95, 0x18, 0x03, 0x55, 0x6f, 0x4e, 0x77, 0x6a, 0x63, 0xbf, 0xdc, 0x00, 0x04, 0xb7, 0xb8, 0x01,
0x09, 0x9a, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x54, 0x42, 0x7b, 0xa3, 0x4d, 0x0a, 0x06,
0x99, 0xe0, 0x06, 0x06, 0x80, 0x96, 0x04, 0x06, 0x18, 0x60, 0x76, 0x49, 0x5c, 0x69, 0x5a, 0x77,
0x7f, 0x95, 0x6e, 0x00, 0x04, 0xba, 0xdc, 0x00, 0x09, 0x93, 0xb8, 0x01, 0x04, 0x8b, 0x70, 0x03,
0x09, 0x18, 0x7a, 0x55, 0x82, 0x6e, 0x00, 0x04, 0x8a, 0xdc, 0x00, 0x09, 0x4b, 0x53, 0xaf, 0xb8,
0x01, 0x04, 0x95, 0x70, 0x03, 0x09, 0x18, 0x91, 0x26, 0x05, 0x05, 0x92, 0x4d, 0x0a, 0x0a, 0x98,
0x70, 0x03, 0x05, 0xab, 0xe0, 0x06, 0x0a, 0x42, 0x4a, 0x55, 0x6f, 0x86, 0xb8, 0x01, 0x04, 0x9d,
0x70, 0x03, 0x09, 0x18, 0x58, 0x6b, 0x51, 0x52, 0x95, 0x26, 0x05, 0x05, 0xaa, 0x4d, 0x0a, 0x0a,
0xbc, 0x70, 0x03, 0x05, 0xaf, 0xe0, 0x06, 0x0a, 0x91, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09,
0xbb, 0xdc, 0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x5d, 0x46, 0x18, 0x7c, 0x6f, 0x6a, 0x55, 0x51,
0x4e, 0x8f, 0x6e, 0x00, 0x04, 0x95, 0xdc, 0x00, 0x09, 0xbc, 0xb8, 0x01, 0x04, 0x86, 0x70, 0x03,
0x09, 0x18, 0xbd, 0x26, 0x05, 0x05, 0xaf, 0x4d, 0x0a, 0x0a, 0x9e, 0x70, 0x03, 0x05, 0xab, 0xe0,
0x06, 0x0a, 0x55, 0x4f, 0x7c, 0x46, 0x84, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09, 0x18, 0x6b,
0x5e, 0x7d, 0x6f, 0x8f, 0x6e, 0x00, 0x04, 0xb7, 0xdc, 0x00, 0x09, 0x7b, 0x7f, 0x86, 0xdc, 0x00,
0x04, 0xa0, 0xb8, 0x01, 0x09, 0x5b, 0x44, 0x18, 0xbd, 0x8f, 0x0b, 0x19, 0x91, 0xa4, 0x0b, 0x15,
0xb4, 0x7b, 0x0b, 0x0e, 0xa9, 0xb9, 0x0b, 0x07, 0x92, 0x66, 0x0b, 0x04, 0xa4, 0x34, 0x17, 0x03,
0x77, 0x4f, 0x87, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x89, 0xb8, 0x01, 0x04, 0x8b, 0x70,
0x03, 0x09, 0x05, 0x41, 0x43, 0x50, 0x71, 0x57, 0x79, 0x13, 0x8e, 0x26, 0x05, 0x05, 0xbf, 0x4d,
0x0a, 0x0a, 0xb9, 0x70, 0x03, 0x05, 0x90, 0xe0, 0x06, 0x0a, 0x48, 0x47, 0x60, 0x46, 0x49, 0x4b,
0x85, 0xb8, 0x01, 0x04, 0x9e, 0x70, 0x03, 0x09, 0x18, 0x50, 0x79, 0x4e, 0x7f, 0xbc, 0x26, 0x05,
0x05, 0x88, 0x4d, 0x0a, 0x0a, 0x93, 0x70, 0x03, 0x05, 0xab, 0xe0, 0x06, 0x0a, 0x83, 0x6e, 0x00,
0x04, 0xb6, 0xdc, 0x00, 0x09, 0xa0, 0xdc, 0x00, 0x04, 0x95, 0xb8, 0x01, 0x09, 0x45, 0x5e, 0x18,
0x6b, 0x53, 0x48, 0x7c, 0x9d, 0x3f, 0x0c, 0x1a, 0x97, 0x55, 0x0c, 0x15, 0xb7, 0x2a, 0x0c, 0x0e,
0x9a, 0x6b, 0x0c, 0x08, 0xbb, 0x14, 0x0c, 0x04, 0x9b, 0x95, 0x18, 0x03, 0x43, 0x76, 0xaf, 0x6e,
0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0x60, 0x55, 0xb6, 0xdc, 0x00, 0x04, 0x85, 0xb8, 0x01, 0x09,
0xa0, 0xb8, 0x01, 0x04, 0x88, 0x70, 0x03, 0x09, 0x02, 0x64, 0x69, 0x51, 0x52, 0x74, 0x7d, 0x16,
0x89, 0x26, 0x05, 0x05, 0x87, 0x4d, 0x0a, 0x0a, 0x91, 0x70, 0x03, 0x05, 0x9c, 0xe0, 0x06, 0x0a,
0x67, 0x6f, 0x45, 0x76, 0x60, 0x48, 0x95, 0xb8, 0x01, 0x04, 0x92, 0x70, 0x03, 0x09, 0x18, 0x51,
0x5c, 0x49, 0x47, 0x85, 0x26, 0x05, 0x05, 0xb3, 0x4d, 0x0a, 0x0a, 0x81, 0x70, 0x03, 0x05, 0x9e,
0xe0, 0x06, 0x0a, 0x8e, 0x6e, 0x00, 0x04, 0x9c, 0xdc, 0x00, 0x09, 0x8d, 0xdc, 0x00, 0x04, 0x89,
0xb8, 0x01, 0x09, 0x52, 0x55, 0x16, 0x7b, 0x57, 0x77, 0x5a, 0x5b, 0x5d, 0x02, 0x41, 0x5e, 0x73,
0x45, 0x82, 0x26, 0x05, 0x05, 0x86, 0x4d, 0x0a, 0x0a, 0x9e, 0x70, 0x03, 0x05, 0xb9, 0xe0, 0x06,
0x0a, 0x8b, 0x8f, 0x0b, 0x1a, 0xaa, 0xa4, 0x0b, 0x15, 0xb4, 0x7b, 0x0b, 0x0e, 0x98, 0xb9, 0x0b,
0x08, 0x88, 0x66, 0x0b, 0x04, 0xbc, 0x34, 0x17, 0x03, 0x5c, 0x4e, 0x85, 0x6e, 0x00, 0x04, 0xa7,
0xdc, 0x00, 0x09, 0x49, 0x4d, 0x8e, 0xdc, 0x00, 0x04, 0x83, 0xb8, 0x01, 0x09, 0xa0, 0xb8, 0x01,
0x04, 0x9c, 0x70, 0x03, 0x09, 0x18, 0x79, 0x5e, 0x42, 0x46, 0x45, 0x67, 0x81, 0x6e, 0x00, 0x04,
0x89, 0xdc, 0x00, 0x09, 0x43, 0x4e, 0x9a, 0xdc, 0x00, 0x04, 0x8d, 0xb8, 0x01, 0x09, 0x60, 0x5c,
0xbf, 0xb8, 0x01, 0x04, 0xb1, 0x70, 0x03, 0x09, 0x18, 0x90, 0x70, 0x03, 0x05, 0x8f, 0xe0, 0x06,
0x0a, 0xb7, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0x48, 0x6a, 0x4b, 0x74, 0x58, 0x7c, 0x8a,
0x4d, 0x0a, 0x17, 0x9c, 0x5f, 0x0a, 0x13, 0xb9, 0x3a, 0x0a, 0x0c, 0xa9, 0x71, 0x0a, 0x07, 0xaf,
0x28, 0x0a, 0x04, 0x94, 0xac, 0x14, 0x03, 0x78, 0x7e, 0x5f, 0x70, 0x75, 0x56, 0x4c, 0x66, 0x6e,
0x61, 0x62, 0x6d, 0xaa, 0xb8, 0x01, 0x02, 0x97, 0xba, 0x01, 0x02, 0x8c, 0xb5, 0x01, 0x01, 0xa1,
0x26, 0x05, 0x02, 0x83, 0x2e, 0x05, 0x02, 0x98, 0x1e, 0x05, 0x01, 0x9e, 0xe0, 0x06, 0x02, 0xa5,
0xeb, 0x06, 0x02, 0x96, 0xd4, 0x06, 0x01, 0xa2, 0xdc, 0x00, 0x05, 0xa6, 0xdd, 0x00, 0x05, 0xa0,
0xda, 0x00, 0x04, 0x8b, 0xe0, 0x06, 0x01, 0xad, 0xc0, 0x0d, 0x03, 0x88, 0x70, 0x03, 0x01, 0xa7,
0xe0, 0x06, 0x03, 0xbe, 0xb8, 0x01, 0x01, 0xbc, 0x70, 0x03, 0x03, 0x41, 0x49, 0x5a, 0x4d, 0x71,
0x7f, 0xb5, 0x6e, 0x00, 0x04, 0xb8, 0xdc, 0x00, 0x09, 0x92, 0xdc, 0x00, 0x04, 0x9b, 0xb8, 0x01,
0x09, 0x59, 0x63, 0x40, 0xb2, 0x4d, 0x0a, 0x06, 0x84, 0xe0, 0x06, 0x06, 0x9f, 0x26, 0x05, 0x06,
0x18, 0x7d, 0x77, 0x50, 0x4f, 0x78, 0x75, 0x81, 0x6e, 0x00, 0x04, 0x90, 0xdc, 0x00, 0x09, 0xba,
0xb8, 0x01, 0x04, 0xb0, 0x70, 0x03, 0x09, 0x18, 0x50, 0x41, 0xb5, 0x6e, 0x00, 0x04, 0xb6, 0xdc,
0x00, 0x09, 0x70, 0x7a, 0x91, 0xb8, 0x01, 0x04, 0x89, 0x70, 0x03, 0x09, 0x18, 0xbf, 0x26, 0x05,
0x05, 0x8e, 0x4d, 0x0a, 0x0a, 0x82, 0x70, 0x03, 0x05, 0xb1, 0xe0, 0x06, 0x0a, 0x75, 0x76, 0x51,
0x49, 0x91, 0xb8, 0x01, 0x04, 0xb7, 0x70, 0x03, 0x09, 0x18, 0x71, 0x42, 0x4e, 0x7f, 0xb6, 0x26,
0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0xba, 0x70, 0x03, 0x05, 0xbb, 0xe0, 0x06, 0x0a, 0xb8, 0x6e,
0x00, 0x04, 0x99, 0xdc, 0x00, 0x09, 0x52, 0x5b, 0x81, 0xdc, 0x00, 0x04, 0x8f, 0xb8, 0x01, 0x09,
0x51, 0x77, 0x18, 0x7a, 0x7b, 0x63, 0x76, 0x78, 0x59, 0x85, 0x6e, 0x00, 0x04, 0xae, 0xdc, 0x00,
0x09, 0xb4, 0xb8, 0x01, 0x04, 0xa3, 0x70, 0x03, 0x09, 0x18, 0xa4, 0x26, 0x05, 0x05, 0x8e, 0x4d,
0x0a, 0x0a, 0x80, 0x70, 0x03, 0x05, 0xb3, 0xe0, 0x06, 0x0a, 0x45, 0x6e, 0x63, 0x74, 0x85, 0xb8,
0x01, 0x04, 0x9a, 0x70, 0x03, 0x09, 0x18, 0x40, 0x73, 0x64, 0x4e, 0xab, 0x6e, 0x00, 0x04, 0x90,
0xdc, 0x00, 0x09, 0x41, 0x4f, 0xb1, 0xdc, 0x00, 0x04, 0x86, 0xb8, 0x01, 0x09, 0x5a, 0x45, 0x18,
0x50, 0x6b, 0xb0, 0x6e, 0x00, 0x04, 0x9a, 0xdc, 0x00, 0x09, 0x90, 0xb8, 0x01, 0x04, 0xb7, 0x70,
0x03, 0x09, 0x18, 0x8d, 0x26, 0x05, 0x05, 0xab, 0x4d, 0x0a, 0x0a, 0x93, 0x70, 0x03, 0x05, 0xbb,
0xe0, 0x06, 0x0a, 0x70, 0x5a, 0x71, 0x46, 0x50, 0x77, 0xb4, 0xb8, 0x01, 0x04, 0x9d, 0x70, 0x03,
0x09, 0x18, 0x7b, 0x53, 0x6b, 0x4d, 0xb6, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0xbf, 0x70,
0x03, 0x05, 0xae, 0xe0, 0x06, 0x0a, 0x86, 0x6e, 0x00, 0x04, 0x80, 0xdc, 0x00, 0x09, 0x99, 0xdc,
0x00, 0x04, 0x9b, 0xb8, 0x01, 0x09, 0x74, 0x5d, 0x18, 0x6e, 0x7f, 0x7d, 0x76, 0x40, 0x46, 0x87,
0x6e, 0x00, 0x04, 0xab, 0xdc, 0x00, 0x09, 0x59, 0x5b, 0xba, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01,
0x09, 0x9b, 0xb8, 0x01, 0x04, 0x86, 0x70, 0x03, 0x09, 0x18, 0xb5, 0x26, 0x05, 0x05, 0x8f, 0x4d,
0x0a, 0x0a, 0xa4, 0x70, 0x03, 0x05, 0xa3, 0xe0, 0x06, 0x0a, 0x6b, 0x47, 0x40, 0x7a, 0x5b, 0x46,
0xbf, 0xb8, 0x01, 0x04, 0xbd, 0x70, 0x03, 0x09, 0x18, 0x63, 0x64, 0x75, 0x4f, 0xba, 0x26, 0x05,
0x05, 0x92, 0x4d, 0x0a, 0x0a, 0x95, 0x70, 0x03, 0x05, 0x9d, 0xe0, 0x06, 0x0a, 0xbb, 0x6e, 0x00,
0x04, 0xb4, 0xdc, 0x00, 0x09, 0x82, 0xdc, 0x00, 0x04, 0x90, 0xb8, 0x01, 0x09, 0x7d, 0x7f, 0x18,
0x55, 0x5d, 0x7a, 0x52, 0xba, 0x26, 0x05, 0x05, 0x92, 0x4d, 0x0a, 0x0a, 0xa3, 0x70, 0x03, 0x05,
0x86, 0xe0, 0x06, 0x0a, 0x95, 0xe0, 0x06, 0x14, 0xbf, 0xec, 0x06, 0x10, 0x9a, 0xd3, 0x06, 0x0b,
0x89, 0xf8, 0x06, 0x06, 0xa8, 0xc7, 0x06, 0x03, 0x9d, 0xcc, 0x0d, 0x02, 0x7b, 0x74, 0x87, 0x6e,
0x00, 0x04, 0x8d, 0xdc, 0x00, 0x09, 0x50, 0x42, 0xa4, 0xdc, 0x00, 0x04, 0x91, 0xb8, 0x01, 0x09,
0xab, 0xb8, 0x01, 0x04, 0xb0, 0x70, 0x03, 0x09, 0x0e, 0x69, 0x4a, 0x6f, 0x54, 0x79, 0x5c, 0x0a,
0x63, 0x46, 0x7a, 0x52, 0x68, 0x49, 0x55, 0x5a, 0x5d, 0x7f, 0xac, 0xb7, 0x07, 0x15, 0x86, 0xc5,
0x07, 0x12, 0x89, 0xa9, 0x07, 0x0c, 0xb1, 0xd3, 0x07, 0x06, 0xae, 0x9b, 0x07, 0x03, 0xa8, 0x7c,
0x0f, 0x03, 0x4d, 0x47, 0x51, 0x64, 0x70, 0x6b, 0xa9, 0xb8, 0x01, 0x04, 0x91, 0x70, 0x03, 0x09,
0xbb, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01, 0x09, 0xbf, 0x6e, 0x00, 0x04, 0x94, 0xdc, 0x00, 0x09,
0x18, 0xb6, 0x70, 0x03, 0x05, 0x93, 0xe0, 0x06, 0x0a, 0xb0, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a,
0x0a, 0x46, 0x68, 0x49, 0x6c, 0x6e, 0x71, 0x81, 0x2d, 0x08, 0x11, 0xaf, 0x3b, 0x08, 0x0e, 0x9d,
0x1e, 0x08, 0x09, 0xb9, 0x4a, 0x08, 0x05, 0xb5, 0x0f, 0x08, 0x03, 0x99, 0x68, 0x10, 0x02, 0x54,
0x7f, 0x52, 0x7b, 0x69, 0x51, 0x91, 0xdc, 0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x82, 0x6e, 0x00,
0x04, 0x9b, 0xdc, 0x00, 0x09, 0x44, 0x72, 0xab, 0x4d, 0x0a, 0x06, 0x90, 0xe0, 0x06, 0x06, 0x5f,
0x84, 0xc7, 0x05, 0x06, 0x18, 0x70, 0x63, 0x53, 0x76, 0x42, 0x5b, 0x51, 0x7f, 0xb1, 0x6e, 0x00,
0x04, 0xb3, 0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0xb8, 0x70, 0x03, 0x09, 0x18, 0x71, 0x73,
0x86, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09, 0x78, 0x52, 0xa9, 0xb8, 0x01, 0x04, 0xbd, 0x70,
0x03, 0x09, 0x18, 0xb2, 0x26, 0x05, 0x05, 0xae, 0x4d, 0x0a, 0x0a, 0x92, 0x70, 0x03, 0x05, 0x80,
0xe0, 0x06, 0x0a, 0x9f, 0x2d, 0x09, 0x11, 0x89, 0x3d, 0x09, 0x0e, 0x94, 0x1c, 0x09, 0x09, 0xb3,
0x4e, 0x09, 0x05, 0xb0, 0x0c, 0x09, 0x03, 0xb4, 0x6b, 0x12, 0x02, 0x4e, 0x46, 0x69, 0x7d, 0xac,
0xb8, 0x01, 0x04, 0x9c, 0x70, 0x03, 0x09, 0x18, 0x40, 0x52, 0x72, 0x6e, 0xa3, 0x26, 0x05, 0x05,
0x95, 0x4d, 0x0a, 0x0a, 0x8a, 0x70, 0x03, 0x05, 0xb1, 0xe0, 0x06, 0x0a, 0x41, 0x6f, 0x75, 0x59,
0x79, 0x5d, 0xb9, 0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0xae, 0xdc, 0x00, 0x04, 0xa9, 0xb8,
0x01, 0x09, 0x5c, 0x6c, 0x18, 0x71, 0x4a, 0x63, 0x55, 0x79, 0x72, 0xa3, 0x6e, 0x00, 0x04, 0x80,
0xdc, 0x00, 0x09, 0xb5, 0xb8, 0x01, 0x04, 0xaf, 0x70, 0x03, 0x09, 0x18, 0x9b, 0x26, 0x05, 0x05,
0x82, 0x4d, 0x0a, 0x0a, 0xb1, 0x70, 0x03, 0x05, 0x87, 0xe0, 0x06, 0x0a, 0x8d, 0x4d, 0x0a, 0x11,
0xac, 0x5f, 0x0a, 0x0e, 0xbb, 0x3a, 0x0a, 0x09, 0xbf, 0x71, 0x0a, 0x05, 0xb8, 0x28, 0x0a, 0x03,
0xb6, 0xac, 0x14, 0x02, 0x40, 0x63, 0x75, 0x6f, 0x8f, 0xb8, 0x01, 0x04, 0xb2, 0x70, 0x03, 0x09,
0x18, 0x71, 0x47, 0x42, 0x5b, 0x49, 0x70, 0x73, 0x54, 0x74, 0x5f, 0x86, 0x6e, 0x00, 0x04, 0xba,
0xdc, 0x00, 0x09, 0x69, 0x6e, 0xb3, 0xdc, 0x00, 0x04, 0xb9, 0xb8, 0x01, 0x09, 0x72, 0x4f, 0x18,
0x6c, 0x4d, 0x76, 0x78, 0x7b, 0x7f, 0xb1, 0x2d, 0x09, 0x11, 0xb0, 0x3d, 0x09, 0x0e, 0xb6, 0x1c,
0x09, 0x09, 0x89, 0x4e, 0x09, 0x05, 0xb4, 0x0c, 0x09, 0x03, 0xbb, 0x6b, 0x12, 0x02, 0x7a, 0x46,
0xb8, 0x6e, 0x00, 0x04, 0x99, 0xdc, 0x00, 0x09, 0xb7, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09,
0x44, 0xac, 0x96, 0x04, 0x06, 0x18, 0x9a, 0x26, 0x05, 0x05, 0x9f, 0x4d, 0x0a, 0x0a, 0xaf, 0x70,
0x03, 0x05, 0x93, 0xe0, 0x06, 0x0a, 0x78, 0x59, 0x79, 0x73, 0x5b, 0x77, 0x95, 0xb8, 0x01, 0x04,
0xa8, 0x70, 0x03, 0x09, 0x18, 0x53, 0x6f, 0x5a, 0x5f, 0x8d, 0x26, 0x05, 0x05, 0x92, 0x4d, 0x0a,
0x0a, 0x9c, 0x70, 0x03, 0x05, 0x8f, 0xe0, 0x06, 0x0a, 0x9a, 0x6e, 0x00, 0x04, 0x81, 0xdc, 0x00,
0x09, 0xb3, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01, 0x09, 0x68, 0x55, 0x18, 0x5c, 0x4f, 0x52, 0x4d,
0x95, 0xb7, 0x07, 0x11, 0xba, 0xc5, 0x07, 0x0e, 0x9f, 0xa9, 0x07, 0x09, 0x91, 0xd3, 0x07, 0x05,
0xa8, 0x9b, 0x07, 0x03, 0xb7, 0x7c, 0x0f, 0x02, 0x41, 0x5a, 0x82, 0x6e, 0x00, 0x04, 0x8d, 0xdc,
0x00, 0x09, 0x40, 0x73, 0x86, 0xdc, 0x00, 0x04, 0xb9, 0xb8, 0x01, 0x09, 0x81, 0xb8, 0x01, 0x04,
0xa4, 0x70, 0x03, 0x09, 0x18, 0xbf, 0x26, 0x05, 0x05, 0x9d, 0x4d, 0x0a, 0x0a, 0x99, 0x70, 0x03,
0x05, 0x85, 0xe0, 0x06, 0x0a, 0x49, 0x70, 0x71, 0x74, 0x76, 0x7b, 0x42, 0x4d, 0x79, 0x46, 0x41,
0x64, 0xb1, 0xb8, 0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x18, 0x59, 0x45, 0x5d, 0x7f, 0x87, 0x26,
0x05, 0x05, 0xae, 0x4d, 0x0a, 0x0a, 0x8e, 0x70, 0x03, 0x05, 0xa9, 0xe0, 0x06, 0x0a, 0x9b, 0x6e,
0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0x9d, 0xdc, 0x00, 0x04, 0xb4, 0xb8, 0x01, 0x09, 0x71, 0x44,
0x18, 0x69, 0x4e, 0x6e, 0x47, 0x8f, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0x99, 0x70, 0x03,
0x05, 0x8a, 0xe0, 0x06, 0x0a, 0x87, 0x1f, 0x06, 0x11, 0x94, 0x2a, 0x06, 0x0e, 0xbd, 0x15, 0x06,
0x09, 0xbf, 0x35, 0x06, 0x05, 0xb6, 0x0a, 0x06, 0x03, 0x80, 0x4a, 0x0c, 0x02, 0x72, 0x5b, 0xb5,
0x6e, 0x00, 0x04, 0x89, 0xdc, 0x00, 0x09, 0x74, 0x5d, 0x82, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01,
0x09, 0xb3, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09, 0x18, 0x59, 0x4a, 0x63, 0x4f, 0x68, 0x51,
0x55, 0x77, 0x7a, 0x5f, 0x49, 0x75, 0xb0, 0x6e, 0x00, 0x04, 0xaf, 0xdc, 0x00, 0x09, 0x42, 0x52,
0xa8, 0xdc, 0x00, 0x04, 0xb5, 0xb8, 0x01, 0x09, 0x5b, 0x73, 0x86, 0xb8, 0x01, 0x04, 0x8d, 0x70,
0x03, 0x09, 0x18, 0x84, 0x70, 0x03, 0x05, 0xb4, 0xe0, 0x06, 0x0a, 0x9b, 0x26, 0x05, 0x05, 0x8f,
0x4d, 0x0a, 0x0a, 0x40, 0x47, 0x54, 0x76, 0x7d, 0x7f, 0xba, 0x4d, 0x0a, 0x15, 0x91, 0x5f, 0x0a,
0x12, 0xb8, 0x3a, 0x0a, 0x0c, 0xbb, 0x71, 0x0a, 0x06, 0x92, 0x28, 0x0a, 0x03, 0xae, 0xac, 0x14,
0x03, 0x81, 0xe0, 0x06, 0x1a, 0xbf, 0xec, 0x06, 0x15, 0xa9, 0xd3, 0x06, 0x0e, 0x9d, 0xf8, 0x06,
0x08, 0x8e, 0xc7, 0x06, 0x04, 0x9f, 0xcc, 0x0d, 0x03, 0x60, 0x62, 0x66, 0x6a, 0x4c, 0x57, 0x58,
0x61, 0x43, 0x56, 0x65, 0x5e, 0xb9, 0xb8, 0x01, 0x02, 0xb2, 0xba, 0x01, 0x02, 0x93, 0xb5, 0x01,
0x01, 0x83, 0x26, 0x05, 0x02, 0xa2, 0x2e, 0x05, 0x02, 0x9a, 0x1e, 0x05, 0x01, 0x98, 0xe0, 0x06,
0x02, 0xb7, 0xeb, 0x06, 0x02, 0xa4, 0xd4, 0x06, 0x01, 0x85, 0xdc, 0x00, 0x05, 0x97, 0xdd, 0x00,
0x05, 0xa5, 0xda, 0x00, 0x04, 0x7c, 0x7e, 0x48, 0x67, 0x4b, 0x6d, 0x8a, 0xe0, 0x06, 0x01, 0xb3,
0xc0, 0x0d, 0x03, 0x9c, 0x70, 0x03, 0x01, 0x87, 0xe0, 0x06, 0x03, 0x8c, 0xb8, 0x01, 0x01, 0x89,
0x70, 0x03, 0x03, 0x70, 0x6f, 0x68, 0x75, 0x4d, 0x46, 0x96, 0x6e, 0x00, 0x04, 0xaf, 0xdc, 0x00,
0x09, 0xa1, 0xdc, 0x00, 0x04, 0xaa, 0xb8, 0x01, 0x09, 0x6c, 0x50, 0x6b, 0x82, 0x4d, 0x0a, 0x06,
0xa0, 0xe0, 0x06, 0x06, 0x86, 0x16, 0x04, 0x06, 0x80, 0xe0, 0x06, 0x04, 0xb0, 0x26, 0x05, 0x04,
0x90, 0x70, 0x03, 0x04, 0x18, 0x5b, 0x4f, 0x74, 0x44, 0x56, 0x6f, 0xb6, 0x6e, 0x00, 0x04, 0xa8,
0xdc, 0x00, 0x09, 0xa6, 0xb8, 0x01, 0x04, 0x96, 0x70, 0x03, 0x09, 0x18, 0x68, 0x76, 0xb6, 0x6e,
0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0x56, 0x66, 0xb5, 0xb8, 0x01, 0x04, 0xb4, 0x70, 0x03, 0x09,
0x18, 0xbd, 0x26, 0x05, 0x05, 0xa8, 0x4d, 0x0a, 0x0a, 0x95, 0x70, 0x03, 0x05, 0xac, 0xe0, 0x06,
0x0a, 0x76, 0x67, 0x74, 0x75, 0xa7, 0xb8, 0x01, 0x04, 0xaf, 0x70, 0x03, 0x09, 0x18, 0x6c, 0x55,
0x68, 0x7d, 0xb6, 0x26, 0x05, 0x05, 0x95, 0x4d, 0x0a, 0x0a, 0x8d, 0x70, 0x03, 0x05, 0xbe, 0xe0,
0x06, 0x0a, 0xac, 0x6e, 0x00, 0x04, 0xa8, 0xdc, 0x00, 0x09, 0x61, 0x6a, 0x9b, 0xdc, 0x00, 0x04,
0xaa, 0xb8, 0x01, 0x09, 0x6f, 0x67, 0x18, 0x4d, 0x7e, 0x55, 0x76, 0x68, 0x6c, 0x88, 0x6e, 0x00,
0x04, 0x94, 0xdc, 0x00, 0x09, 0x96, 0xb8, 0x01, 0x04, 0x8b, 0x70, 0x03, 0x09, 0x18, 0xbd, 0x26,
0x05, 0x05, 0xaf, 0x4d, 0x0a, 0x0a, 0x9e, 0x70, 0x03, 0x05, 0x99, 0xe0, 0x06, 0x0a, 0x48, 0x54,
0x4b, 0x56, 0xa1, 0xb8, 0x01, 0x04, 0xb1, 0x70, 0x03, 0x09, 0x18, 0x59, 0x5e, 0x7d, 0x6f, 0xac,
0x6e, 0x00, 0x04, 0x8f, 0xdc, 0x00, 0x09, 0x6a, 0x5b, 0x88, 0xdc, 0x00, 0x04, 0x84, 0xb8, 0x01,
0x09, 0x61, 0x71, 0x18, 0x41, 0x69, 0x4e, 0x7f, 0x5d, 0x5f, 0xa8, 0x1f, 0x06, 0x1a, 0xb4, 0x2a,
0x06, 0x15, 0xa9, 0x15, 0x06, 0x0e, 0x8d, 0x35, 0x06, 0x08, 0x96, 0x0a, 0x06, 0x04, 0xbd, 0x4a,
0x0c, 0x03, 0x6c, 0x4f, 0x8e, 0x6e, 0x00, 0x04, 0xbf, 0xdc, 0x00, 0x09, 0x95, 0xb8, 0x01, 0x04,
0x99, 0x70, 0x03, 0x09, 0x18, 0xa3, 0x26, 0x05, 0x05, 0xb1, 0x4d, 0x0a, 0x0a, 0x8f, 0x70, 0x03,
0x05, 0xb5, 0xe0, 0x06, 0x0a, 0x4e, 0x7f, 0x48, 0x44, 0x59, 0x55, 0xaf, 0xb8, 0x01, 0x04, 0xac,
0x70, 0x03, 0x09, 0x18, 0x75, 0x4f, 0x71, 0x63, 0xab, 0x26, 0x05, 0x05, 0xa6, 0x4d, 0x0a, 0x0a,
0x95, 0x70, 0x03, 0x05, 0xb6, 0xe0, 0x06, 0x0a, 0x9e, 0x6e, 0x00, 0x04, 0xad, 0xdc, 0x00, 0x09,
0x99, 0xdc, 0x00, 0x04, 0x9b, 0xb8, 0x01, 0x09, 0x6c, 0x6f, 0x18, 0x55, 0x76, 0x6b, 0x66, 0x6d,
0x5e, 0xac, 0x6e, 0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0x59, 0x5b, 0xbe, 0xdc, 0x00, 0x04, 0xa6,
0xb8, 0x01, 0x09, 0xab, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x9f, 0x26, 0x05, 0x05,
0xbf, 0x4d, 0x0a, 0x0a, 0xa3, 0x70, 0x03, 0x05, 0x95, 0xe0, 0x06, 0x0a, 0x6c, 0x75, 0x66, 0x7e,
0x6b, 0x4e, 0x81, 0xb8, 0x01, 0x04, 0xaf, 0x70, 0x03, 0x09, 0x18, 0x63, 0x55, 0x7f, 0x5f, 0x9f,
0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0xa7, 0x70, 0x03, 0x05, 0x88, 0xe0, 0x06, 0x0a, 0x8b,
0x6e, 0x00, 0x04, 0x9b, 0xdc, 0x00, 0x09, 0xb1, 0xdc, 0x00, 0x04, 0xac, 0xb8, 0x01, 0x09, 0x41,
0x6f, 0x18, 0x48, 0x67, 0x7c, 0x5f, 0x9f, 0x26, 0x05, 0x05, 0xa1, 0x4d, 0x0a, 0x0a, 0xa7, 0x70,
0x03, 0x05, 0x8f, 0xe0, 0x06, 0x0a, 0xb5, 0x2d, 0x09, 0x1a, 0x8e, 0x3d, 0x09, 0x15, 0xaa, 0x1c,
0x09, 0x0e, 0xb6, 0x4e, 0x09, 0x08, 0x9e, 0x0c, 0x09, 0x04, 0xbe, 0x6b, 0x12, 0x03, 0x5b, 0x4b,
0xa3, 0x6e, 0x00, 0x04, 0xaf, 0xdc, 0x00, 0x09, 0x71, 0x6c, 0xab, 0xdc, 0x00, 0x04, 0x99, 0xb8,
0x01, 0x09, 0xa6, 0xb8, 0x01, 0x04, 0xad, 0x70, 0x03, 0x09, 0x18, 0x4f, 0x67, 0x61, 0x5f, 0x6e,
0x51, 0x52, 0x78, 0x7a, 0x7b, 0x63, 0x6f, 0x59, 0x6b, 0x6d, 0x66, 0x84, 0xb8, 0x01, 0x04, 0xbb,
0x70, 0x03, 0x09, 0xbf, 0xdc, 0x00, 0x04, 0x99, 0xb8, 0x01, 0x09, 0x91, 0x6e, 0x00, 0x04, 0x9d,
0xdc, 0x00, 0x09, 0x18, 0x88, 0x70, 0x03, 0x05, 0xb1, 0xe0, 0x06, 0x0a, 0xae, 0x26, 0x05, 0x05,
0x9f, 0x4d, 0x0a, 0x0a, 0x68, 0x69, 0x4d, 0x74, 0x56, 0x7d, 0x6a, 0x4e, 0x7e, 0x76, 0x5e, 0x75,
0x94, 0x3f, 0x0c, 0x1a, 0xb4, 0x55, 0x0c, 0x15, 0xa6, 0x2a, 0x0c, 0x0e, 0xac, 0x6b, 0x0c, 0x08,
0xab, 0x14, 0x0c, 0x04, 0xa9, 0x95, 0x18, 0x03, 0xaf, 0x2d, 0x08, 0x1a, 0xb5, 0x3b, 0x08, 0x15,
0x95, 0x1e, 0x08, 0x0e, 0x9e, 0x4a, 0x08, 0x08, 0x9b, 0x0f, 0x08, 0x04, 0xba, 0x68, 0x10, 0x03,
0x51, 0x5d, 0x59, 0x7f, 0x7b, 0x44, 0xb8, 0xdc, 0x00, 0x04, 0xa3, 0xb8, 0x01, 0x09, 0xbf, 0x6e,
0x00, 0x04, 0xad, 0xdc, 0x00, 0x09, 0x46, 0x60, 0x42, 0x84, 0x4d, 0x0a, 0x06, 0x9d, 0xe0, 0x06,
0x06, 0x81, 0x96, 0x04, 0x06, 0x70, 0x40, 0x82, 0x26, 0x05, 0x04, 0xa0, 0xb7, 0x07, 0x04, 0x8d,
0xdb, 0x03, 0x04, 0x50, 0x18, 0x6e, 0x5f, 0x48, 0x71, 0x6d, 0x7f, 0x78, 0x63, 0xae, 0x6e, 0x00,
0x04, 0x99, 0xdc, 0x00, 0x09, 0xad, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x59, 0x6e,
0x99, 0x6e, 0x00, 0x04, 0x9f, 0xdc, 0x00, 0x09, 0x6d, 0x4e, 0xae, 0xb8, 0x01, 0x04, 0xb0, 0x70,
0x03, 0x09, 0x18, 0x80, 0x26, 0x05, 0x05, 0xb6, 0x4d, 0x0a, 0x0a, 0xb1, 0x70, 0x03, 0x05, 0xad,
0xe0, 0x06, 0x0a, 0x59, 0x5f, 0x70, 0x6e, 0xa8, 0xb8, 0x01, 0x04, 0x9f, 0x70, 0x03, 0x09, 0x18,
0x71, 0x6d, 0x40, 0x76, 0xa3, 0x26, 0x05, 0x05, 0x99, 0x4d, 0x0a, 0x0a, 0xa7, 0x70, 0x03, 0x05,
0x88, 0xe0, 0x06, 0x0a, 0xb0, 0x6e, 0x00, 0x04, 0xbf, 0xdc, 0x00, 0x09, 0xbd, 0xdc, 0x00, 0x04,
0x90, 0xb8, 0x01, 0x09, 0x68, 0x5f, 0x18, 0x48, 0x67, 0x59, 0x63, 0x70, 0x7f, 0x8f, 0x6e, 0x00,
0x04, 0xb1, 0xdc, 0x00, 0x09, 0x9f, 0xb8, 0x01, 0x04, 0x86, 0x70, 0x03, 0x09, 0x18, 0xbe, 0x26,
0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x8b, 0x70, 0x03, 0x05, 0xa8, 0xe0, 0x06, 0x0a, 0x71, 0x4f,
0x46, 0x5f, 0xad, 0xb8, 0x01, 0x04, 0xaa, 0x70, 0x03, 0x09, 0x18, 0x68, 0x4b, 0x7b, 0x7e, 0x99,
0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09, 0x50, 0x7d, 0xb0, 0xdc, 0x00, 0x04, 0x96, 0xb8, 0x01,
0x09, 0x6a, 0x6d, 0x18, 0x6f, 0x55, 0x7a, 0x5b, 0x5e, 0x75, 0xbc, 0x8f, 0x0b, 0x19, 0x88, 0xa4,
0x0b, 0x15, 0x9e, 0x7b, 0x0b, 0x0e, 0xbe, 0xb9, 0x0b, 0x07, 0xae, 0x66, 0x0b, 0x04, 0x80, 0x34,
0x17, 0x03, 0xb1, 0x2d, 0x09, 0x1a, 0xaf, 0x3d, 0x09, 0x15, 0x8b, 0x1c, 0x09, 0x0e, 0xad, 0x4e,
0x09, 0x08, 0x90, 0x0c, 0x09, 0x04, 0xba, 0x6b, 0x12, 0x03, 0x59, 0x4e, 0x91, 0x6e, 0x00, 0x04,
0x8e, 0xdc, 0x00, 0x09, 0xa1, 0xb8, 0x01, 0x04, 0xa3, 0x70, 0x03, 0x09, 0x05, 0x66, 0x69, 0x6b,
0x6c, 0x74, 0x54, 0x13, 0x9f, 0x26, 0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x99, 0x70, 0x03, 0x05,
0xa8, 0xe0, 0x06, 0x0a, 0x51, 0x4e, 0x70, 0x56, 0x61, 0x63, 0xa7, 0xb8, 0x01, 0x04, 0x92, 0x70,
0x03, 0x09, 0x18, 0x68, 0x59, 0x7b, 0x5f, 0xa8, 0x26, 0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x86,
0x70, 0x03, 0x05, 0xb4, 0xe0, 0x06, 0x0a, 0xb5, 0x6e, 0x00, 0x04, 0xbf, 0xdc, 0x00, 0x09, 0x8e,
0xdc, 0x00, 0x04, 0xaa, 0xb8, 0x01, 0x09, 0x52, 0x67, 0x18, 0x74, 0x46, 0x68, 0x7b, 0xa3, 0x3f,
0x0c, 0x1a, 0xb4, 0x55, 0x0c, 0x15, 0xbd, 0x2a, 0x0c, 0x0e, 0xac, 0x6b, 0x0c, 0x08, 0xa8, 0x14,
0x0c, 0x04, 0xa1, 0x95, 0x18, 0x03, 0x75, 0x7f, 0x99, 0x6e, 0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09,
0x6a, 0x4e, 0xbf, 0xdc, 0x00, 0x04, 0x91, 0xb8, 0x01, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x8e, 0x70,
0x03, 0x09, 0x02, 0x40, 0x48, 0x6e, 0x5e, 0x7c, 0x7e, 0x16, 0xb8, 0x26, 0x05, 0x05, 0x9f, 0x4d,
0x0a, 0x0a, 0x94, 0x70, 0x03, 0x05, 0xb0, 0xe0, 0x06, 0x0a, 0x59, 0x67, 0x51, 0x7f, 0x52, 0x4e,
0xa9, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09, 0x18, 0x70, 0x54, 0x78, 0x5f, 0xbc, 0x26, 0x05,
0x05, 0x99, 0x4d, 0x0a, 0x0a, 0xbb, 0x70, 0x03, 0x05, 0xb8, 0xe0, 0x06, 0x0a, 0x8e, 0x6e, 0x00,
0x04, 0x94, 0xdc, 0x00, 0x09, 0x9f, 0xdc, 0x00, 0x04, 0x9e, 0xb8, 0x01, 0x09, 0x69, 0x5b, 0x16,
0x61, 0x63, 0x68, 0x6c, 0x74, 0x7d, 0x02, 0x78, 0x7b, 0x59, 0x7c, 0xab, 0x26, 0x05, 0x05, 0xb0,
0x4d, 0x0a, 0x0a, 0x96, 0x70, 0x03, 0x05, 0x80, 0xe0, 0x06, 0x0a, 0x9b, 0x8f, 0x0b, 0x1a, 0xa7,
0xa4, 0x0b, 0x15, 0x88, 0x7b, 0x0b, 0x0e, 0xbb, 0xb9, 0x0b, 0x08, 0xa3, 0x66, 0x0b, 0x04, 0xb6,
0x34, 0x17, 0x03, 0x54, 0x4e, 0xb5, 0x6e, 0x00, 0x04, 0xb8, 0xdc, 0x00, 0x09, 0x5e, 0x5f, 0x94,
0xdc, 0x00, 0x04, 0x95, 0xb8, 0x01, 0x09, 0x86, 0xb8, 0x01, 0x04, 0xa8, 0x70, 0x03, 0x09, 0x18,
0x40, 0x56, 0x70, 0x6b, 0x78, 0x75, 0xb8, 0x6e, 0x00, 0x04, 0xa1, 0xdc, 0x00, 0x09, 0x54, 0x55,
0x80, 0xdc, 0x00, 0x04, 0x95, 0xb8, 0x01, 0x09, 0x68, 0x46, 0xa9, 0xb8, 0x01, 0x04, 0x96, 0x70,
0x03, 0x09, 0x18, 0xac, 0x70, 0x03, 0x05, 0x9e, 0xe0, 0x06, 0x0a, 0xa6, 0x26, 0x05, 0x05, 0x8f,
0x4d, 0x0a, 0x0a, 0x4b, 0x6d, 0x6f, 0x50, 0x71, 0x7a, 0x5b, 0x67, 0x48, 0x63, 0x76, 0x7b, 0xa3,
0x4d, 0x0a, 0x17, 0x8b, 0x5f, 0x0a, 0x13, 0x8e, 0x3a, 0x0a, 0x0c, 0xaf, 0x71, 0x0a, 0x07, 0xb4,
0x28, 0x0a, 0x04, 0xab, 0xac, 0x14, 0x03, 0xa8, 0x2d, 0x08, 0x1a, 0x90, 0x3b, 0x08, 0x15, 0xbe,
0x1e, 0x08, 0x0e, 0xae, 0x4a, 0x08, 0x08, 0x88, 0x0f, 0x08, 0x04, 0x92, 0x68, 0x10, 0x03, 0xba,
0xe0, 0x06, 0x1a, 0xbd, 0xec, 0x06, 0x15, 0xa7, 0xd3, 0x06, 0x0e, 0xbf, 0xf8, 0x06, 0x08, 0xbc,
0xc7, 0x06, 0x04, 0x91, 0xcc, 0x0d, 0x03, 0x65, 0x45, 0x57, 0x79, 0x72, 0x53, 0x62, 0x43, 0x5a,
0x58, 0x64, 0x77, 0xb7, 0xb8, 0x01, 0x02, 0x86, 0xba, 0x01, 0x02, 0xbb, 0xb5, 0x01, 0x01, 0x9b,
0x26, 0x05, 0x02, 0x94, 0x2e, 0x05, 0x02, 0xb5, 0x1e, 0x05, 0x01, 0xad, 0xe0, 0x06, 0x02, 0x85,
0xeb, 0x06, 0x02, 0xa5, 0xd4, 0x06, 0x01, 0xb2, 0xdc, 0x00, 0x05, 0x98, 0xdd, 0x00, 0x05, 0xb1,
0xda, 0x00, 0x04, 0x49, 0x4c, 0x5c, 0x47, 0x4a, 0x73, 0x9c, 0xe0, 0x06, 0x01, 0xb0, 0xc0, 0x0d,
0x03, 0x97, 0x70, 0x03, 0x01, 0xa4, 0xe0, 0x06, 0x03, 0xb9, 0xb8, 0x01, 0x01, 0x93, 0x70, 0x03,
0x03, 0x78, 0x61, 0x40, 0x55, 0x69, 0x56, 0x99, 0x6e, 0x00, 0x04, 0xa2, 0xdc, 0x00, 0x09, 0x80,
0xdc, 0x00, 0x04, 0x89, 0xb8, 0x01, 0x09, 0x41, 0x5d, 0x44, 0xb3, 0x4d, 0x0a, 0x06, 0xaa, 0xe0,
0x06, 0x06, 0x81, 0x26, 0x05, 0x06, 0x42, 0x83, 0x26, 0x05, 0x04, 0x60, 0x9a, 0x2d, 0x08, 0x04,
0x9f, 0x16, 0x04, 0x04, 0x4d, 0x18, 0x66, 0x4f, 0x6c, 0x5e, 0x59, 0x62, 0x87, 0x6e, 0x00, 0x04,
0x8f, 0xdc, 0x00, 0x09, 0x9d, 0xb8, 0x01, 0x04, 0xb6, 0x70, 0x03, 0x09, 0x18, 0x4f, 0x47, 0x8d,
0x6e, 0x00, 0x04, 0xa6, 0xdc, 0x00, 0x09, 0x5d, 0x76, 0x87, 0xb8, 0x01, 0x04, 0x82, 0x70, 0x03,
0x09, 0x18, 0xa1, 0x26, 0x05, 0x05, 0x8a, 0x4d, 0x0a, 0x0a, 0x96, 0x70, 0x03, 0x05, 0xb8, 0xe0,
0x06, 0x0a, 0x4d, 0x66, 0x42, 0x47, 0x9e, 0xb8, 0x01, 0x04, 0xb6, 0x70, 0x03, 0x09, 0x18, 0x78,
0x56, 0x61, 0x4a, 0x8a, 0x26, 0x05, 0x05, 0xa2, 0x4d, 0x0a, 0x0a, 0xa0, 0x70, 0x03, 0x05, 0x99,
0xe0, 0x06, 0x0a, 0x9d, 0x6e, 0x00, 0x04, 0x87, 0xdc, 0x00, 0x09, 0x40, 0x49, 0xa6, 0xdc, 0x00,
0x04, 0x82, 0xb8, 0x01, 0x09, 0x76, 0x5e, 0x18, 0x60, 0x59, 0x4a, 0x62, 0x5d, 0x47, 0x8a, 0x6e,
0x00, 0x04, 0x9d, 0xdc, 0x00, 0x09, 0x84, 0xb8, 0x01, 0x04, 0x95, 0x70, 0x03, 0x09, 0x18, 0xa9,
0x26, 0x05, 0x05, 0x89, 0x4d, 0x0a, 0x0a, 0x8c, 0x70, 0x03, 0x05, 0xb8, 0xe0, 0x06, 0x0a, 0x4a,
0x5d, 0x44, 0x55, 0x8d, 0xb8, 0x01, 0x04, 0x8f, 0x70, 0x03, 0x09, 0x18, 0x78, 0x4c, 0x69, 0x49,
0xa0, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x42, 0x66, 0x8a, 0xdc, 0x00, 0x04, 0x99, 0xb8,
0x01, 0x09, 0x4d, 0x4f, 0x18, 0x67, 0x51, 0x7a, 0x7c, 0x7d, 0x7f, 0x68, 0x6e, 0x50, 0x48, 0x52,
0x7e, 0xa8, 0xe0, 0x06, 0x1a, 0xba, 0xec, 0x06, 0x15, 0xae, 0xd3, 0x06, 0x0e, 0x84, 0xf8, 0x06,
0x08, 0xa1, 0xc7, 0x06, 0x04, 0x9e, 0xcc, 0x0d, 0x03, 0x8c, 0x26, 0x05, 0x1a, 0x8f, 0x2f, 0x05,
0x15, 0xbd, 0x1d, 0x05, 0x0e, 0xa6, 0x38, 0x05, 0x08, 0x95, 0x14, 0x05, 0x04, 0x89, 0x56, 0x0a,
0x03, 0x60, 0x69, 0xa0, 0x6e, 0x00, 0x04, 0x82, 0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x96,
0x70, 0x03, 0x09, 0x18, 0x9d, 0x26, 0x05, 0x05, 0xbe, 0x4d, 0x0a, 0x0a, 0x90, 0x70, 0x03, 0x05,
0xa2, 0xe0, 0x06, 0x0a, 0x60, 0x42, 0x59, 0x4a, 0x52, 0x56, 0xbc, 0xb8, 0x01, 0x04, 0xa0, 0x70,
0x03, 0x09, 0x18, 0x50, 0x62, 0x5d, 0x7e, 0x80, 0x26, 0x05, 0x05, 0x99, 0x4d, 0x0a, 0x0a, 0xb6,
0x70, 0x03, 0x05, 0xbe, 0xe0, 0x06, 0x0a, 0x92, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x90,
0xdc, 0x00, 0x04, 0x9d, 0xb8, 0x01, 0x09, 0x60, 0x7c, 0x18, 0x7e, 0x76, 0x40, 0x59, 0x48, 0x52,
0x88, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x50, 0x5d, 0xbe, 0xdc, 0x00, 0x04, 0x8a, 0xb8,
0x01, 0x09, 0xb6, 0xb8, 0x01, 0x04, 0xa2, 0x70, 0x03, 0x09, 0x18, 0x82, 0x26, 0x05, 0x05, 0x99,
0x4d, 0x0a, 0x0a, 0xbc, 0x70, 0x03, 0x05, 0x92, 0xe0, 0x06, 0x0a, 0x48, 0x69, 0x4a, 0x7e, 0x62,
0x76, 0xa7, 0xb8, 0x01, 0x04, 0xb8, 0x70, 0x03, 0x09, 0x18, 0x52, 0x7c, 0x59, 0x42, 0x90, 0x26,
0x05, 0x05, 0x92, 0x4d, 0x0a, 0x0a, 0x8a, 0x70, 0x03, 0x05, 0x88, 0xe0, 0x06, 0x0a, 0x82, 0x6e,
0x00, 0x04, 0xbe, 0xdc, 0x00, 0x09, 0x91, 0xdc, 0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x78, 0x67,
0x18, 0x48, 0x4a, 0x50, 0x52, 0x8a, 0x26, 0x05, 0x05, 0x96, 0x4d, 0x0a, 0x0a, 0xb8, 0x70, 0x03,
0x05, 0x87, 0xe0, 0x06, 0x0a, 0x42, 0x7e, 0x9d, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x51,
0x7f, 0xb6, 0xdc, 0x00, 0x04, 0xa7, 0xb8, 0x01, 0x09, 0xa9, 0xb8, 0x01, 0x04, 0xbf, 0x70, 0x03,
0x09, 0x0e, 0x6b, 0x4b, 0x4e, 0x6f, 0x63, 0x74, 0x0a, 0x78, 0x47, 0x4a, 0x56, 0x80, 0xb7, 0x07,
0x15, 0x8a, 0xc5, 0x07, 0x12, 0xab, 0xa9, 0x07, 0x0c, 0xb4, 0xd3, 0x07, 0x06, 0xa0, 0x9b, 0x07,
0x03, 0x82, 0x7c, 0x0f, 0x03, 0x48, 0x5d, 0x76, 0x67, 0x69, 0x7f, 0x8e, 0xb8, 0x01, 0x04, 0xbc,
0x70, 0x03, 0x09, 0x92, 0xdc, 0x00, 0x04, 0x9d, 0xb8, 0x01, 0x09, 0x8b, 0x6e, 0x00, 0x04, 0xa3,
0xdc, 0x00, 0x09, 0x18, 0x90, 0x70, 0x03, 0x05, 0x91, 0xe0, 0x06, 0x0a, 0x88, 0x26, 0x05, 0x05,
0xa2, 0x4d, 0x0a, 0x0a, 0x66, 0x49, 0x4c, 0x4f, 0x55, 0x7d, 0x61, 0x44, 0x68, 0x6e, 0x7a, 0x5e,
0x40, 0x60, 0x42, 0x4a, 0x6b, 0x74, 0x8a, 0x2d, 0x08, 0x11, 0xba, 0x3b, 0x08, 0x0e, 0xbe, 0x1e,
0x08, 0x09, 0xa8, 0x4a, 0x08, 0x05, 0xae, 0x0f, 0x08, 0x03, 0x8f, 0x68, 0x10, 0x02, 0x9e, 0x96,
0x04, 0x1a, 0xb6, 0x9e, 0x04, 0x15, 0x96, 0x8e, 0x04, 0x0e, 0x84, 0xa7, 0x04, 0x08, 0x99, 0x86,
0x04, 0x04, 0xac, 0x35, 0x09, 0x03, 0x8d, 0x1f, 0x06, 0x1a, 0xb8, 0x2a, 0x06, 0x15, 0xa7, 0x15,
0x06, 0x0e, 0xa9, 0x35, 0x06, 0x08, 0x8c, 0x0a, 0x06, 0x04, 0xbf, 0x4a, 0x0c, 0x03, 0x63, 0x4b,
0x52, 0x5d, 0x7c, 0x4e, 0xaf, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01, 0x09, 0xbc, 0x6e, 0x00, 0x04,
0x82, 0xdc, 0x00, 0x09, 0x6a, 0x73, 0xa1, 0x4d, 0x0a, 0x06, 0xbd, 0xe0, 0x06, 0x06, 0x41, 0x80,
0xc7, 0x05, 0x06, 0x43, 0xb3, 0x96, 0x04, 0x04, 0x5a, 0x95, 0x2d, 0x09, 0x04, 0x5f, 0xab, 0xe0,
0x06, 0x04, 0x18, 0x48, 0x62, 0x50, 0x51, 0x42, 0x7c, 0x52, 0x6f, 0xa3, 0x6e, 0x00, 0x04, 0x83,
0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x82, 0x70, 0x03, 0x09, 0x18, 0x43, 0x63, 0x83, 0x6e,
0x00, 0x04, 0xbc, 0xdc, 0x00, 0x09, 0x52, 0x42, 0x91, 0xb8, 0x01, 0x04, 0xa0, 0x70, 0x03, 0x09,
0x18, 0x89, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0xaa, 0x70, 0x03, 0x05, 0xa6, 0xe0, 0x06,
0x0a, 0xaf, 0x2d, 0x09, 0x11, 0x9a, 0x3d, 0x09, 0x0e, 0x8b, 0x1c, 0x09, 0x09, 0x92, 0x4e, 0x09,
0x05, 0x88, 0x0c, 0x09, 0x03, 0x81, 0x6b, 0x12, 0x02, 0x43, 0x7c, 0x60, 0x51, 0x82, 0xb8, 0x01,
0x04, 0x91, 0x70, 0x03, 0x09, 0x18, 0x6a, 0x66, 0x49, 0x63, 0xa6, 0x26, 0x05, 0x05, 0x90, 0x4d,
0x0a, 0x0a, 0x83, 0x70, 0x03, 0x05, 0x87, 0xe0, 0x06, 0x0a, 0x68, 0x4a, 0x6e, 0x4f, 0x7a, 0x7e,
0xa2, 0x6e, 0x00, 0x04, 0x9f, 0xdc, 0x00, 0x09, 0xa3, 0xdc, 0x00, 0x04, 0xaa, 0xb8, 0x01, 0x09,
0x51, 0x42, 0x18, 0x43, 0x47, 0x50, 0x66, 0x62, 0x5f, 0x87, 0x6e, 0x00, 0x04, 0xb4, 0xdc, 0x00,
0x09, 0xa0, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x83, 0x26, 0x05, 0x05, 0x82, 0x4d,
0x0a, 0x0a, 0xae, 0x70, 0x03, 0x05, 0x8a, 0xe0, 0x06, 0x0a, 0x91, 0x4d, 0x0a, 0x11, 0x9f, 0x5f,
0x0a, 0x0e, 0xbe, 0x3a, 0x0a, 0x09, 0xa2, 0x71, 0x0a, 0x05, 0x8f, 0x28, 0x0a, 0x03, 0xbc, 0xac,
0x14, 0x02, 0x74, 0x47, 0x60, 0x4e, 0xa6, 0xb8, 0x01, 0x04, 0x89, 0x70, 0x03, 0x09, 0x18, 0x4a,
0x6e, 0x42, 0x43, 0x41, 0x48, 0x4b, 0x6f, 0x52, 0x5a, 0xa8, 0x6e, 0x00, 0x04, 0x8b, 0xdc, 0x00,
0x09, 0x6a, 0x63, 0x92, 0xdc, 0x00, 0x04, 0x90, 0xb8, 0x01, 0x09, 0x49, 0x66, 0x18, 0x67, 0x69,
0x4c, 0x4d, 0x78, 0x7f, 0x44, 0x76, 0x6c, 0x56, 0x59, 0x5e, 0x62, 0x4f, 0x51, 0x7c, 0x7e, 0x5f,
0xa7, 0x2d, 0x09, 0x11, 0x8d, 0x3d, 0x09, 0x0e, 0x8c, 0x1c, 0x09, 0x09, 0x87, 0x4e, 0x09, 0x05,
0x91, 0x0c, 0x09, 0x03, 0xa2, 0x6b, 0x12, 0x02, 0x82, 0x0f, 0x03, 0x0e, 0xbc, 0x15, 0x03, 0x0c,
0xa6, 0x0a, 0x03, 0x08, 0x96, 0x1a, 0x03, 0x04, 0x83, 0x05, 0x03, 0x02, 0xbf, 0x25, 0x06, 0x02,
0x9d, 0x96, 0x04, 0x0e, 0x9f, 0x9e, 0x04, 0x0c, 0x8e, 0x8e, 0x04, 0x08, 0xa3, 0xa7, 0x04, 0x04,
0xb6, 0x86, 0x04, 0x02, 0xa9, 0x35, 0x09, 0x02, 0xa0, 0xe0, 0x06, 0x0e, 0x9e, 0xec, 0x06, 0x0c,
0xb8, 0xd3, 0x06, 0x08, 0xac, 0xf8, 0x06, 0x04, 0xae, 0xc7, 0x06, 0x02, 0xaf, 0xcc, 0x0d, 0x02,
0x68, 0x4b, 0x99, 0x6e, 0x00, 0x04, 0x84, 0xdc, 0x00, 0x09, 0xbe, 0xb8, 0x01, 0x04, 0xa8, 0x70,
0x03, 0x09, 0x40, 0x8f, 0x96, 0x04, 0x06, 0x18, 0x80, 0x26, 0x05, 0x05, 0x8b, 0x4d, 0x0a, 0x0a,
0x9a, 0x70, 0x03, 0x05, 0x88, 0xe0, 0x06, 0x0a, 0x59, 0x44, 0x50, 0x52, 0x68, 0x7e, 0x90, 0xb8,
0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x18, 0x48, 0x5a, 0x40, 0x4b, 0x8b, 0x26, 0x05, 0x05, 0x9a,
0x4d, 0x0a, 0x0a, 0xba, 0x70, 0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0xb4, 0x6e, 0x00, 0x04, 0x88,
0xdc, 0x00, 0x09, 0x80, 0xdc, 0x00, 0x04, 0x89, 0xb8, 0x01, 0x09, 0x50, 0x44, 0x18, 0x41, 0x7a,
0x5a, 0x4b, 0x8a, 0xb7, 0x07, 0x11, 0x92, 0xc5, 0x07, 0x0e, 0x8b, 0xa9, 0x07, 0x09, 0xa8, 0xd3,
0x07, 0x05, 0x9a, 0x9b, 0x07, 0x03, 0xaa, 0x7c, 0x0f, 0x02, 0x48, 0x74, 0xb4, 0x6e, 0x00, 0x04,
0x90, 0xdc, 0x00, 0x09, 0x40, 0x49, 0xba, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01, 0x09, 0x89, 0xb8,
0x01, 0x04, 0xbe, 0x70, 0x03, 0x09, 0x18, 0x99, 0x26, 0x05, 0x05, 0x88, 0x4d, 0x0a, 0x0a, 0x84,
0x70, 0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0x62, 0x47, 0x67, 0x4c, 0x4d, 0x51, 0x50, 0x74, 0x40,
0x7a, 0x49, 0x7e, 0x80, 0xb8, 0x01, 0x04, 0xa2, 0x70, 0x03, 0x09, 0x18, 0x41, 0x44, 0x48, 0x59,
0xba, 0x26, 0x05, 0x05, 0x88, 0x4d, 0x0a, 0x0a, 0xb4, 0x70, 0x03, 0x05, 0x91, 0xe0, 0x06, 0x0a,
0x87, 0x6e, 0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0x99, 0xdc, 0x00, 0x04, 0x81, 0xb8, 0x01, 0x09,
0x40, 0x62, 0x18, 0x51, 0x74, 0x48, 0x7a, 0x89, 0x26, 0x05, 0x05, 0x84, 0x4d, 0x0a, 0x0a, 0x8d,
0x70, 0x03, 0x05, 0x80, 0xe0, 0x06, 0x0a, 0xbe, 0x1f, 0x06, 0x11, 0x90, 0x2a, 0x06, 0x0e, 0x8c,
0x15, 0x06, 0x09, 0x91, 0x35, 0x06, 0x05, 0xba, 0x0a, 0x06, 0x03, 0xa2, 0x4a, 0x0c, 0x02, 0x67,
0x47, 0xa7, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x59, 0x41, 0x99, 0xdc, 0x00, 0x04, 0x87,
0xb8, 0x01, 0x09, 0x81, 0xb8, 0x01, 0x04, 0xb4, 0x70, 0x03, 0x09, 0x18, 0x40, 0x4d, 0x49, 0x44,
0x68, 0x4a, 0x4b, 0x52, 0x5a, 0x6a, 0x48, 0x67, 0xa8, 0x6e, 0x00, 0x04, 0x8d, 0xdc, 0x00, 0x09,
0x59, 0x47, 0x9a, 0xdc, 0x00, 0x04, 0x89, 0xb8, 0x01, 0x09, 0x41, 0x74, 0x8a, 0xb8, 0x01, 0x04,
0x8b, 0x70, 0x03, 0x09, 0x18, 0x84, 0x70, 0x03, 0x05, 0x87, 0xe0, 0x06, 0x0a, 0x88, 0x26, 0x05,
0x05, 0xa7, 0x4d, 0x0a, 0x0a, 0x60, 0x6c, 0x6e, 0x6f, 0x78, 0x5e, 0x63, 0x69, 0x4e, 0x76, 0x5d,
0x5f, 0x42, 0x43, 0x66, 0x56, 0x7c, 0x7f, 0x62, 0x4c, 0x50, 0x51, 0x7a, 0x7e, 0xaf, 0xba, 0x02,
0x1a, 0xa9, 0xbf, 0x02, 0x15, 0x90, 0xb5, 0x02, 0x0e, 0xbf, 0xc4, 0x02, 0x08, 0x82, 0xb0, 0x02,
0x04, 0xb8, 0x79, 0x05, 0x03, 0x91, 0x16, 0x04, 0x1a, 0xa6, 0x1d, 0x04, 0x15, 0xb4, 0x0f, 0x04,
0x0e, 0x96, 0x25, 0x04, 0x08, 0xb6, 0x07, 0x04, 0x04, 0xac, 0x34, 0x08, 0x03, 0xbe, 0xe0, 0x06,
0x1a, 0x83, 0xec, 0x06, 0x15, 0x9e, 0xd3, 0x06, 0x0e, 0x8e, 0xf8, 0x06, 0x08, 0x81, 0xc7, 0x06,
0x04, 0x9f, 0xcc, 0x0d, 0x03, 0xba, 0x2d, 0x08, 0x1a, 0x9d, 0x3b, 0x08, 0x15, 0x80, 0x1e, 0x08,
0x0e, 0x8c, 0x4a, 0x08, 0x08, 0xa3, 0x0f, 0x08, 0x04, 0xa0, 0x68, 0x10, 0x03, 0xa2, 0x4d, 0x0a,
0x11, 0xae, 0x5f, 0x0a, 0x0e, 0xaa, 0x3a, 0x0a, 0x09, 0x92, 0x71, 0x0a, 0x05, 0x99, 0x28, 0x0a,
0x03, 0xbc, 0xac, 0x14, 0x02, 0x58, 0x71, 0x72, 0x7b, 0x46, 0x77, 0x5b, 0x54, 0x75, 0x65, 0x6d,
0x45, 0x98, 0x26, 0x05, 0x02, 0xb1, 0x2e, 0x05, 0x02, 0xad, 0x1e, 0x05, 0x01, 0xa5, 0xe0, 0x06,
0x02, 0x94, 0xeb, 0x06, 0x02, 0xb5, 0xd4, 0x06, 0x01, 0x86, 0x5d, 0x01, 0x04, 0xbb, 0x5f, 0x01,
0x04, 0xb7, 0x5b, 0x01, 0x03, 0x85, 0xae, 0x00, 0x04, 0x9b, 0xaf, 0x00, 0x04, 0xb2, 0xad, 0x00,
0x03, 0x79, 0x53, 0x64, 0x57, 0x70, 0x5c, 0xb9, 0x74, 0x05, 0x03, 0x97, 0xe9, 0x0a, 0x06, 0xa4,
0xba, 0x02, 0x03, 0x9c, 0x74, 0x05, 0x06, 0xb0, 0x5d, 0x01, 0x03, 0x93, 0xba, 0x02, 0x06, 0x68,
0x4d, 0x49, 0x5a, 0x4a, 0x4b, 0x8b, 0xae, 0x00, 0x04, 0x8a, 0x5d, 0x01, 0x09, 0x89, 0x57, 0x00,
0x04, 0x9a, 0xae, 0x00, 0x09, 0x4f, 0x7d, 0x61, 0xa8, 0x4d, 0x0a, 0x06, 0xa1, 0xe0, 0x06, 0x06,
0x8d, 0x70, 0x03, 0x06, 0x6b, 0x73, 0x55, 0x8f, 0x26, 0x05, 0x04, 0xab, 0xe0, 0x06, 0x04, 0x95,
0x4d, 0x0a, 0x04, 0x18, 0x48, 0x67, 0x44, 0x47, 0x49, 0x5a, 0x4a, 0x4b, 0xbd, 0x57, 0x00, 0x04,
0x89, 0xae, 0x00, 0x09, 0x87, 0x5d, 0x01, 0x04, 0x88, 0xba, 0x02, 0x09, 0x18, 0x49, 0x7d, 0x84,
0x57, 0x00, 0x04, 0x8a, 0xae, 0x00, 0x09, 0x48, 0x47, 0xa7, 0x5d, 0x01, 0x04, 0x88, 0xba, 0x02,
0x09, 0x18, 0x89, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0x9a, 0x70, 0x03, 0x05, 0x87, 0xe0,
0x06, 0x0a, 0x4a, 0x44, 0x48, 0x67, 0x88, 0x5d, 0x01, 0x04, 0x84, 0xba, 0x02, 0x09, 0x18, 0x5a,
0x47, 0x49, 0x7d, 0x89, 0x26, 0x05, 0x05, 0x9a, 0x4d, 0x0a, 0x0a, 0xa7, 0x70, 0x03, 0x05, 0xbd,
0xe0, 0x06, 0x0a, 0x8a, 0x57, 0x00, 0x04, 0x87, 0xae, 0x00, 0x09, 0x8b, 0xae, 0x00, 0x04, 0xb3,
0x5d, 0x01, 0x09, 0x48, 0x44, 0x18, 0x7d, 0x67, 0x49, 0x5a, 0x4a, 0x47, 0xbd, 0x57, 0x00, 0x04,
0x88, 0xae, 0x00, 0x09, 0x8a, 0x5d, 0x01, 0x04, 0x87, 0xba, 0x02, 0x09, 0x18, 0x89, 0x26, 0x05,
0x05, 0xa7, 0x4d, 0x0a, 0x0a, 0x84, 0x70, 0x03, 0x05, 0x9a, 0xe0, 0x06, 0x0a, 0x48, 0x7d, 0x4a,
0x47, 0x8a, 0x5d, 0x01, 0x04, 0x87, 0xba, 0x02, 0x09, 0x18, 0x5a, 0x44, 0x49, 0x67, 0x89, 0x57,
0x00, 0x04, 0xa7, 0xae, 0x00, 0x09, 0x73, 0x4b, 0x8b, 0xae, 0x00, 0x04, 0xb3, 0x5d, 0x01, 0x09,
0x4a, 0x47, 0x18, 0x56, 0x66, 0x6c, 0x51, 0x74, 0x76, 0x42, 0x69, 0x6f, 0x50, 0x78, 0x7f, 0x41,
0x43, 0x4e, 0x7e, 0x5e, 0x5f, 0x40, 0x60, 0x63, 0x4c, 0x7a, 0x5d, 0xac, 0x26, 0x05, 0x1a, 0xb8,
0x2f, 0x05, 0x15, 0xa9, 0x1d, 0x05, 0x0e, 0x9d, 0x38, 0x05, 0x08, 0x9a, 0x14, 0x05, 0x04, 0xbe,
0x56, 0x0a, 0x03, 0x49, 0x67, 0xba, 0x57, 0x00, 0x04, 0xb4, 0xae, 0x00, 0x09, 0x83, 0x5d, 0x01,
0x04, 0xa6, 0xba, 0x02, 0x09, 0x18, 0xa0, 0x26, 0x05, 0x05, 0x9e, 0x4d, 0x0a, 0x0a, 0xaf, 0x70,
0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0x7a, 0x74, 0x73, 0x4b, 0x43, 0x66, 0xb6, 0x5d, 0x01, 0x04,
0xb3, 0xba, 0x02, 0x09, 0x18, 0x41, 0x6f, 0x60, 0x5e, 0x84, 0x26, 0x05, 0x05, 0x8c, 0x4d, 0x0a,
0x0a, 0x89, 0x70, 0x03, 0x05, 0x83, 0xe0, 0x06, 0x0a, 0x8b, 0x57, 0x00, 0x04, 0xaf, 0xae, 0x00,
0x09, 0xa3, 0xae, 0x00, 0x04, 0xa0, 0x5d, 0x01, 0x09, 0x73, 0x76, 0x10, 0x4d, 0x61, 0x68, 0x08,
0x49, 0x43, 0x4c, 0x44, 0x4b, 0x6f, 0xb3, 0x57, 0x00, 0x04, 0x82, 0xae, 0x00, 0x09, 0x60, 0x63,
0x81, 0xae, 0x00, 0x04, 0x8e, 0x5d, 0x01, 0x09, 0xa1, 0x5d, 0x01, 0x04, 0xa3, 0xba, 0x02, 0x09,
0x18, 0x8c, 0x26, 0x05, 0x05, 0x80, 0x4d, 0x0a, 0x0a, 0x91, 0x70, 0x03, 0x05, 0x96, 0xe0, 0x06,
0x0a, 0x42, 0x73, 0x41, 0x4e, 0x61, 0x63, 0x81, 0x5d, 0x01, 0x04, 0x82, 0xba, 0x02, 0x09, 0x18,
0x51, 0x56, 0x40, 0x4c, 0xaf, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0xa6, 0x70, 0x03, 0x05,
0x9e, 0xe0, 0x06, 0x0a, 0x91, 0x57, 0x00, 0x04, 0x89, 0xae, 0x00, 0x09, 0x9f, 0xae, 0x00, 0x04,
0xba, 0x5d, 0x01, 0x09, 0x41, 0x42, 0x18, 0x5e, 0x66, 0x7d, 0x6f, 0xa0, 0x26, 0x05, 0x05, 0x82,
0x4d, 0x0a, 0x0a, 0xb4, 0x70, 0x03, 0x05, 0x8c, 0xe0, 0x06, 0x0a, 0x8d, 0xe0, 0x06, 0x1a, 0x8e,
0xec, 0x06, 0x15, 0x87, 0xd3, 0x06, 0x0e, 0x90, 0xf8, 0x06, 0x08, 0x81, 0xc7, 0x06, 0x04, 0x80,
0xcc, 0x0d, 0x03, 0x51, 0x49, 0xaf, 0x57, 0x00, 0x04, 0xa3, 0xae, 0x00, 0x09, 0x7a, 0x5f, 0x8b,
0xae, 0x00, 0x04, 0x84, 0x5d, 0x01, 0x09, 0xa1, 0x5d, 0x01, 0x04, 0x9e, 0xba, 0x02, 0x09, 0x0e,
0x62, 0x6a, 0x6e, 0x52, 0x59, 0x7c, 0x02, 0x40, 0x41, 0x47, 0x4d, 0x4e, 0x50, 0x08, 0x4c, 0x74,
0x60, 0x42, 0x80, 0xb7, 0x07, 0x15, 0xbd, 0xc5, 0x07, 0x12, 0x87, 0xa9, 0x07, 0x0c, 0x82, 0xd3,
0x07, 0x06, 0xa8, 0x9b, 0x07, 0x03, 0x8d, 0x7c, 0x0f, 0x03, 0x63, 0x6f, 0xbc, 0x57, 0x00, 0x04,
0x90, 0xae, 0x00, 0x09, 0x4b, 0x44, 0x8c, 0xae, 0x00, 0x04, 0x92, 0x5d, 0x01, 0x09, 0x61, 0x5e,
0xaf, 0x5d, 0x01, 0x04, 0x99, 0xba, 0x02, 0x09, 0x18, 0xa3, 0x70, 0x03, 0x05, 0xae, 0xe0, 0x06,
0x0a, 0xb6, 0x26, 0x05, 0x05, 0x91, 0x4d, 0x0a, 0x0a, 0x69, 0x6c, 0x78, 0x5a, 0x5d, 0x7e, 0x40,
0x42, 0x47, 0x68, 0x4d, 0x7d, 0x8b, 0x2d, 0x08, 0x11, 0xba, 0x3b, 0x08, 0x0e, 0xb8, 0x1e, 0x08,
0x09, 0xac, 0x4a, 0x08, 0x05, 0xbd, 0x0f, 0x08, 0x03, 0xbf, 0x68, 0x10, 0x02, 0x88, 0x1f, 0x06,
0x1a, 0xa8, 0x2a, 0x06, 0x15, 0xa7, 0x15, 0x06, 0x0e, 0xa9, 0x35, 0x06, 0x08, 0x87, 0x0a, 0x06,
0x04, 0x82, 0x4a, 0x0c, 0x03, 0x72, 0x5b, 0x45, 0x7b, 0x46, 0x77, 0x9a, 0x87, 0x01, 0x08, 0x8d,
0x8a, 0x01, 0x08, 0xbe, 0x85, 0x01, 0x07, 0x9f, 0xc3, 0x00, 0x08, 0x8a, 0xc5, 0x00, 0x08, 0x89,
0xc2, 0x00, 0x07, 0xa6, 0x0f, 0x03, 0x08, 0xbb, 0x14, 0x03, 0x08, 0x85, 0x0a, 0x03, 0x07, 0x70,
0x53, 0x5c, 0x64, 0x79, 0x57, 0xa1, 0x1f, 0x06, 0x03, 0xa2, 0x3f, 0x0c, 0x06, 0xb4, 0x0f, 0x03,
0x03, 0x86, 0x1f, 0x06, 0x06, 0x81, 0x87, 0x01, 0x03, 0xb9, 0x0f, 0x03, 0x06, 0x50, 0x7c, 0x52,
0x4c, 0x59, 0x6f, 0xb3, 0xc3, 0x00, 0x04, 0x99, 0x87, 0x01, 0x09, 0x8c, 0x61, 0x00, 0x04, 0x84,
0xc3, 0x00, 0x09, 0x55, 0x6b, 0x4f, 0x0c, 0x41, 0x79, 0x74, 0x46, 0x61, 0x62, 0x0c, 0x51, 0x76,
0x63, 0x6e, 0x44, 0x4c, 0x59, 0x73, 0xaa, 0x61, 0x00, 0x04, 0xb3, 0xc3, 0x00, 0x09, 0x9e, 0x87,
0x01, 0x04, 0x81, 0x0f, 0x03, 0x09, 0x18, 0x7b, 0x45, 0x66, 0x49, 0x4a, 0x5f, 0x5a, 0x4d, 0x7e,
0x6a, 0x73, 0x41, 0x5e, 0x18, 0xb2, 0x2d, 0x09, 0x11, 0x95, 0x3d, 0x09, 0x0e, 0x90, 0x1c, 0x09,
0x09, 0xb0, 0x4e, 0x09, 0x05, 0xb4, 0x0c, 0x09, 0x03, 0x9e, 0x6b, 0x12, 0x02, 0x18, 0x4b, 0x6c,
0x78, 0x7a, 0x7d, 0x7f, 0x30, 0x8e, 0x4d, 0x0a, 0x11, 0xb3, 0x5f, 0x0a, 0x0e, 0xbc, 0x3a, 0x0a,
0x09, 0xa6, 0x71, 0x0a, 0x05, 0x8d, 0x28, 0x0a, 0x03, 0xbe, 0xac, 0x14, 0x02, 0xae, 0x26, 0x05,
0x08, 0x18, 0x70, 0x50, 0x72, 0x74, 0x55, 0x5e, 0x6e, 0xba, 0x74, 0x05, 0x08, 0x18, 0x42, 0x47,
0x48, 0x69, 0x67, 0x68, 0x66, 0x4d, 0x4e, 0x73, 0x7c, 0x7e, 0x8b, 0x2d, 0x09, 0x11, 0x87, 0x3d,
0x09, 0x0e, 0xab, 0x1c, 0x09, 0x09, 0xaf, 0x4e, 0x09, 0x05, 0xbd, 0x0c, 0x09, 0x03, 0xb7, 0x6b,
0x12, 0x02, 0x96, 0xe0, 0x06, 0x1a, 0xb9, 0xec, 0x06, 0x15, 0xae, 0xd3, 0x06, 0x0e, 0x9b, 0xf8,
0x06, 0x08, 0x8e, 0xc7, 0x06, 0x04, 0x95, 0xcc, 0x0d, 0x03, 0x7a, 0x88, 0x1f, 0x06, 0x08, 0x18,
0x48, 0xaa, 0x70, 0x03, 0x08, 0xb3, 0xe0, 0x06, 0x08, 0x0c, 0x6a, 0x9a, 0xdb, 0x03, 0x08, 0x0c,
0x73, 0x5a, 0x91, 0x16, 0x04, 0x08, 0xa0, 0xb7, 0x07, 0x08, 0x0c, 0x51, 0xba, 0x96, 0x04, 0x08,
0x0c, 0x8f, 0xb7, 0x07, 0x11, 0xbb, 0xc5, 0x07, 0x0e, 0x89, 0xa9, 0x07, 0x09, 0xa2, 0xd3, 0x07,
0x05, 0xa8, 0x9b, 0x07, 0x03, 0x9f, 0x7c, 0x0f, 0x02, 0x60, 0x7a, 0x9e, 0x26, 0x05, 0x08, 0x9c,
0x87, 0x01, 0x08, 0xbe, 0x2d, 0x08, 0x08, 0x0c, 0x5c, 0x5e, 0x92, 0x74, 0x05, 0x08, 0x84, 0xed,
0x01, 0x08, 0x0c, 0x4b, 0x47, 0x6b, 0x6f, 0x77, 0x7d, 0x7e, 0x44, 0x52, 0x9e, 0x1f, 0x06, 0x08,
0xbe, 0x4b, 0x02, 0x08, 0xb7, 0x2d, 0x09, 0x08, 0x0c, 0x7e, 0x5e, 0x9a, 0xe0, 0x06, 0x08, 0x92,
0x0f, 0x03, 0x08, 0x82, 0x87, 0x01, 0x08, 0x0c, 0x77, 0x42, 0x52, 0x5a, 0xa1, 0xb7, 0x07, 0x08,
0xb6, 0xdb, 0x03, 0x08, 0xaa, 0x4b, 0x02, 0x08, 0xa4, 0x4d, 0x0a, 0x08, 0x0c, 0xa3, 0xf6, 0x00,
0x06, 0x8c, 0xed, 0x01, 0x0c, 0x6a, 0x76, 0x61, 0x97, 0x2d, 0x08, 0x08, 0xb4, 0x96, 0x04, 0x08,
0xa9, 0x0f, 0x03, 0x08, 0x85, 0xa4, 0x00, 0x08, 0x0c, 0x8a, 0x1f, 0x06, 0x11, 0x83, 0x2a, 0x06,
0x0e, 0x88, 0x15, 0x06, 0x09, 0x91, 0x35, 0x06, 0x05, 0xbc, 0x0a, 0x06, 0x03, 0xb2, 0x4a, 0x0c,
0x02, 0xb8, 0x49, 0x01, 0x08, 0x93, 0x4b, 0x01, 0x08, 0xba, 0x47, 0x01, 0x07, 0xb0, 0x49, 0x01,
0x06, 0x8b, 0x93, 0x02, 0x0c, 0x64, 0x69, 0x74, 0x57, 0x86, 0x2d, 0x09, 0x08, 0xb6, 0x1f, 0x06,
0x08, 0xa4, 0x96, 0x04, 0x08, 0xa1, 0x4b, 0x02, 0x08, 0x9a, 0xe9, 0x0a, 0x08, 0xa6, 0xdc, 0x00,
0x08, 0xbe, 0xb8, 0x01, 0x08, 0x0c, 0xac, 0xed, 0x01, 0x08, 0xb3, 0xf1, 0x01, 0x08, 0x99, 0xea,
0x01, 0x07, 0x84, 0x93, 0x02, 0x06, 0x92, 0x26, 0x05, 0x0c, 0x90, 0xdc, 0x00, 0x06, 0xaa, 0xb8,
0x01, 0x0c, 0x61, 0x64, 0x76, 0x46, 0xa7, 0x4d, 0x0a, 0x08, 0xb4, 0xb7, 0x07, 0x08, 0x81, 0x1f,
0x06, 0x08, 0xa0, 0x0f, 0x03, 0x08, 0xa1, 0x70, 0x03, 0x08, 0x0c, 0x62, 0x68, 0x49, 0x4f, 0x7b,
0x5f, 0x78, 0x7a, 0x53, 0xbd, 0x93, 0x02, 0x08, 0x89, 0x97, 0x02, 0x08, 0xba, 0x8f, 0x02, 0x07,
0xb7, 0x70, 0x03, 0x06, 0x9f, 0xe0, 0x06, 0x0c, 0x86, 0xb8, 0x01, 0x06, 0xa2, 0x70, 0x03, 0x0c,
0x5a, 0x60, 0x41, 0x74, 0x67, 0xa8, 0xe9, 0x0a, 0x08, 0xa9, 0x2d, 0x09, 0x08, 0x97, 0xb7, 0x07,
0x08, 0x8f, 0x96, 0x04, 0x08, 0x9c, 0x3f, 0x0c, 0x08, 0x8d, 0x93, 0x02, 0x08, 0x82, 0x26, 0x05,
0x08, 0x08, 0x5c, 0x04, 0x59, 0x73, 0x6c, 0xa7, 0xdb, 0x03, 0x08, 0xb3, 0xe2, 0x03, 0x08, 0x81,
0xd5, 0x03, 0x07, 0x63, 0x4c, 0x80, 0x26, 0x05, 0x06, 0xb4, 0x4d, 0x0a, 0x0c, 0xbf, 0x4d, 0x0a,
0x06, 0xa4, 0x9a, 0x14, 0x0c, 0x50, 0x6a, 0x8c, 0x93, 0x02, 0x06, 0x9c, 0x26, 0x05, 0x0c, 0x4f,
0x57, 0x69, 0x68, 0xa0, 0x3f, 0x0c, 0x08, 0xac, 0x2d, 0x09, 0x08, 0x9e, 0x0f, 0x03, 0x08, 0x45,
0x87, 0xe0, 0x06, 0x08, 0x0c, 0x4e, 0x6e, 0x56, 0x79, 0x5b, 0x55, 0x43, 0x48, 0x4a, 0x51, 0x72,
0x7c, 0x49, 0x7a, 0x7d, 0x41, 0x73, 0x67, 0x58, 0x71, 0x6d, 0x54, 0x65, 0x75, 0x99, 0x26, 0x05,
0x08, 0xb8, 0x2e, 0x05, 0x08, 0x98, 0x1e, 0x05, 0x07, 0xa9, 0xdc, 0x00, 0x06, 0xb5, 0xdd, 0x00,
0x06, 0x90, 0xda, 0x00, 0x05, 0x8a, 0x6e, 0x00, 0x06, 0x8e, 0x6e, 0x00, 0x06, 0x83, 0x6d, 0x00,
0x05, 0x64, 0x7f, 0x70, 0x4b, 0x52, 0x44, 0x5f, 0x77, 0x40, 0x74, 0x9b, 0xe0, 0x06, 0x06, 0xbb,
0xc0, 0x0d, 0x0c, 0xb4, 0x4d, 0x0a, 0x06, 0x8f, 0x9a, 0x14, 0x0c, 0x62, 0x46, 0x5c, 0x4c, 0xbd,
0x70, 0x03, 0x06, 0x85, 0xe0, 0x06, 0x0c, 0x80, 0xdc, 0x00, 0x04, 0x91, 0xb8, 0x01, 0x09, 0xa2,
0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0x5e, 0x6c, 0x60, 0xbc, 0xc0, 0x0d, 0x08, 0x88, 0x4d,
0x0a, 0x08, 0x97, 0xe0, 0x06, 0x08, 0x92, 0xdc, 0x00, 0x06, 0xaf, 0x6e, 0x00, 0x06, 0x42, 0x47,
0x61, 0x4d, 0x7e, 0x66, 0x8c, 0xe0, 0x06, 0x08, 0x18, 0x4a, 0x43, 0x4e, 0x50, 0x69, 0x75, 0xa3,
0x6e, 0x00, 0x06, 0xa7, 0x6e, 0x00, 0x06, 0x9a, 0x6d, 0x00, 0x05, 0x82, 0xb8, 0x01, 0x06, 0xab,
0xba, 0x01, 0x06, 0x94, 0xb5, 0x01, 0x05, 0x62, 0x72, 0x40, 0x51, 0xad, 0x6e, 0x00, 0x04, 0x8b,
0xdc, 0x00, 0x09, 0x89, 0xb8, 0x01, 0x04, 0xbf, 0x70, 0x03, 0x09, 0x6f, 0x52, 0x9f, 0x6e, 0x00,
0x06, 0x96, 0xb8, 0x01, 0x06, 0x18, 0x5a, 0x63, 0x67, 0x92, 0x6e, 0x00, 0x06, 0xb5, 0x6e, 0x00,
0x06, 0xa4, 0x6d, 0x00, 0x05, 0x42, 0x6b, 0x54, 0xa6, 0xb8, 0x01, 0x06, 0x81, 0xba, 0x01, 0x06,
0x94, 0xb5, 0x01, 0x05, 0x7b, 0x5b, 0x4b, 0x6d, 0x8b, 0x6e, 0x00, 0x04, 0x82, 0xdc, 0x00, 0x09,
0x49, 0x7f, 0xbb, 0xb8, 0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x5f, 0xa3, 0x6e, 0x00, 0x06, 0x56,
0x8e, 0xb8, 0x01, 0x06, 0x4c, 0x18, 0x52, 0x64, 0x75, 0x41, 0x54, 0x66, 0x8c, 0xb8, 0x01, 0x06,
0xbe, 0xba, 0x01, 0x06, 0x81, 0xb5, 0x01, 0x05, 0x42, 0x4b, 0x7b, 0x44, 0xa2, 0xb8, 0x01, 0x04,
0x9d, 0x70, 0x03, 0x09, 0x63, 0x4e, 0xac, 0xb8, 0x01, 0x06, 0x18, 0x84, 0x6e, 0x00, 0x06, 0x93,
0x6e, 0x00, 0x06, 0x87, 0x6d, 0x00, 0x05, 0xab, 0xdc, 0x00, 0x06, 0x9a, 0xdd, 0x00, 0x06, 0xb1,
0xda, 0x00, 0x05, 0x41, 0x4c, 0x7e, 0xa4, 0x6e, 0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0x89, 0xdc,
0x00, 0x04, 0x8d, 0xb8, 0x01, 0x09, 0x62, 0x5d, 0xa9, 0x6e, 0x00, 0x06, 0x81, 0xdc, 0x00, 0x06,
0x6c, 0x18, 0x53, 0x44, 0x47, 0xa0, 0x6e, 0x00, 0x06, 0xb9, 0x6e, 0x00, 0x06, 0xa1, 0x6d, 0x00,
0x05, 0x86, 0xb8, 0x01, 0x06, 0x8a, 0xba, 0x01, 0x06, 0xb0, 0xb5, 0x01, 0x05, 0x64, 0x75, 0xa6,
0x6e, 0x00, 0x04, 0xac, 0xdc, 0x00, 0x09, 0xa8, 0xb8, 0x01, 0x04, 0xa7, 0x70, 0x03, 0x09, 0x69,
0xaf, 0x6e, 0x00, 0x06, 0x94, 0xb8, 0x01, 0x06, 0x18, 0x60, 0x79, 0x61, 0x70, 0x4a, 0x46, 0xa2,
0xb8, 0x01, 0x06, 0x8b, 0xba, 0x01, 0x06, 0xaa, 0xb5, 0x01, 0x05, 0x6c, 0x66, 0x68, 0x67, 0x9b,
0xb8, 0x01, 0x04, 0x93, 0x70, 0x03, 0x09, 0x6f, 0x54, 0x90, 0xb8, 0x01, 0x06, 0x18, 0x8c, 0x6e,
0x00, 0x06, 0xa4, 0x6e, 0x00, 0x06, 0xb3, 0x6d, 0x00, 0x05, 0x71, 0x5a, 0x6b, 0x8e, 0xdc, 0x00,
0x06, 0xbb, 0xdd, 0x00, 0x06, 0xaf, 0xda, 0x00, 0x05, 0x62, 0x4b, 0x6a, 0xb0, 0x6e, 0x00, 0x04,
0x9f, 0xdc, 0x00, 0x09, 0x49, 0x4d, 0x87, 0xdc, 0x00, 0x04, 0xac, 0xb8, 0x01, 0x09, 0x53, 0x5b,
0xa9, 0x6e, 0x00, 0x06, 0x41, 0x86, 0xdc, 0x00, 0x06, 0x50, 0x18, 0x64, 0x73, 0x4c, 0xa7, 0x6e,
0x00, 0x06, 0x94, 0x6e, 0x00, 0x06, 0xab, 0x6d, 0x00, 0x05, 0x9a, 0xb8, 0x01, 0x06, 0xb6, 0xba,
0x01, 0x06, 0x93, 0xb5, 0x01, 0x05, 0x70, 0x5f, 0xbf, 0x6e, 0x00, 0x04, 0x9b, 0xdc, 0x00, 0x09,
0x9c, 0xb8, 0x01, 0x04, 0xa0, 0x70, 0x03, 0x09, 0x69, 0xa9, 0x6e, 0x00, 0x06, 0x90, 0xb8, 0x01,
0x06, 0x18, 0x6b, 0x54, 0x67, 0x7b, 0x4e, 0x6f, 0x5a, 0x53, 0x76, 0xab, 0xb8, 0x01, 0x06, 0x83,
0xba, 0x01, 0x06, 0xb9, 0xb5, 0x01, 0x05, 0x5b, 0x7f, 0x6c, 0x47, 0x60, 0x5c, 0x8d, 0xb8, 0x01,
0x04, 0xa3, 0x70, 0x03, 0x09, 0x69, 0x46, 0x50, 0xae, 0xb8, 0x01, 0x06, 0x18, 0xb6, 0x6e, 0x00,
0x06, 0xb0, 0x6e, 0x00, 0x06, 0x81, 0x6d, 0x00, 0x05, 0x90, 0xdc, 0x00, 0x06, 0xad, 0xdd, 0x00,
0x06, 0x84, 0xda, 0x00, 0x05, 0x43, 0x79, 0x6b, 0xa0, 0x6e, 0x00, 0x04, 0x94, 0xdc, 0x00, 0x09,
0xa5, 0xdc, 0x00, 0x04, 0xb2, 0xb8, 0x01, 0x09, 0x63, 0x4d, 0x89, 0x6e, 0x00, 0x06, 0x86, 0xdc,
0x00, 0x06, 0x6e, 0x18, 0x70, 0x41, 0x76, 0xb1, 0x6e, 0x00, 0x06, 0x81, 0x6e, 0x00, 0x06, 0x9b,
0x6d, 0x00, 0x05, 0x50, 0x44, 0x6d, 0xaf, 0xdc, 0x00, 0x06, 0xb9, 0xdd, 0x00, 0x06, 0x8c, 0xda,
0x00, 0x05, 0x87, 0xb8, 0x01, 0x06, 0xa2, 0xba, 0x01, 0x06, 0xa1, 0xb5, 0x01, 0x05, 0x60, 0x54,
0xa6, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09, 0x72, 0x65, 0x8d, 0xdc, 0x00, 0x04, 0xb3, 0xb8,
0x01, 0x09, 0xa5, 0xb8, 0x01, 0x04, 0x92, 0x70, 0x03, 0x09, 0x49, 0xab, 0x6e, 0x00, 0x06, 0x46,
0x83, 0xdc, 0x00, 0x06, 0xac, 0xb8, 0x01, 0x06, 0x18, 0x71, 0x5b, 0x41, 0x79, 0x4c, 0x6f, 0x61,
0x62, 0x47, 0x81, 0xb8, 0x01, 0x06, 0x91, 0xba, 0x01, 0x06, 0x86, 0xb5, 0x01, 0x05, 0x4e, 0x66,
0x73, 0x4d, 0x52, 0x65, 0x9d, 0xb8, 0x01, 0x04, 0xb2, 0x70, 0x03, 0x09, 0x6b, 0x43, 0x6c, 0xaa,
0xb8, 0x01, 0x06, 0x18, 0xa7, 0x6e, 0x00, 0x06, 0xad, 0x6e, 0x00, 0x06, 0xa0, 0x6d, 0x00, 0x05,
0xae, 0xdc, 0x00, 0x06, 0xba, 0xdd, 0x00, 0x06, 0x9f, 0xda, 0x00, 0x05, 0x41, 0x46, 0x51, 0xbf,
0x6e, 0x00, 0x04, 0x83, 0xdc, 0x00, 0x09, 0xa3, 0xdc, 0x00, 0x04, 0x9b, 0xb8, 0x01, 0x09, 0x72,
0x5d, 0xa5, 0x6e, 0x00, 0x06, 0xbe, 0xdc, 0x00, 0x06, 0x6a, 0x18, 0x60, 0x6d, 0x67, 0x96, 0x6e,
0x00, 0x06, 0xa1, 0x6e, 0x00, 0x06, 0x95, 0x6d, 0x00, 0x05, 0x7a, 0x6e, 0x5f, 0x8c, 0xdc, 0x00,
0x06, 0x9a, 0xdd, 0x00, 0x06, 0xb2, 0xda, 0x00, 0x05, 0x92, 0xb8, 0x01, 0x06, 0x9f, 0xba, 0x01,
0x06, 0xa6, 0xb5, 0x01, 0x05, 0x43, 0x7f, 0xb7, 0x6e, 0x00, 0x04, 0x83, 0xdc, 0x00, 0x09, 0x5b,
0x63, 0x93, 0xdc, 0x00, 0x04, 0x8e, 0xb8, 0x01, 0x09, 0x89, 0xb8, 0x01, 0x04, 0xba, 0x70, 0x03,
0x09, 0x65, 0xad, 0x6e, 0x00, 0x06, 0x7e, 0xae, 0xdc, 0x00, 0x06, 0x81, 0xb8, 0x01, 0x06, 0x18,
0x61, 0x55, 0x56, 0xa0, 0x6e, 0x00, 0x06, 0x8d, 0x6e, 0x00, 0x06, 0xaf, 0x6d, 0x00, 0x05, 0x5a,
0x4c, 0x72, 0x95, 0xdc, 0x00, 0x06, 0xbe, 0xdd, 0x00, 0x06, 0xbf, 0xda, 0x00, 0x05, 0x52, 0x66,
0x5f, 0x94, 0xb8, 0x01, 0x06, 0x9b, 0xba, 0x01, 0x06, 0xb2, 0xb5, 0x01, 0x05, 0x43, 0x77, 0xa6,
0x6e, 0x00, 0x04, 0x96, 0xdc, 0x00, 0x09, 0x53, 0x4e, 0xab, 0xdc, 0x00, 0x04, 0x90, 0xb8, 0x01,
0x09, 0x49, 0x7a, 0x86, 0xb8, 0x01, 0x04, 0x9c, 0x70, 0x03, 0x09, 0x6d, 0x91, 0x6e, 0x00, 0x06,
0x6e, 0xbb, 0xdc, 0x00, 0x06, 0x41, 0x84, 0xb8, 0x01, 0x06, 0x18, 0x78, 0x59, 0x58, 0x60, 0x4d,
0x6f, 0x55, 0x7e, 0x7f, 0x72, 0x5b, 0x54, 0x74, 0x4f, 0x7d, 0x45, 0x56, 0x66, 0x50, 0x6b, 0x5c,
0x46, 0x57, 0x48, 0x7c, 0x51, 0x7b, 0x44,
};

View File

@ -1,109 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "mont.h"
// visualize voice (v) at amplitude (a) on an 8x8 grid
void visualize(byte v, byte a)
{
int x = 64 + ((v & 7) * 34);
int y = 14 + ((v >> 3) * 34);
byte sprnum = (v << 2); // draw each voice using four sprites
GD.sprite(sprnum++, x + 16, y + 16, a, 0, 0);
GD.sprite(sprnum++, x + 0, y + 16, a, 0, 2);
GD.sprite(sprnum++, x + 16, y + 0, a, 0, 4);
GD.sprite(sprnum++, x + 0, y + 0, a, 0, 6);
}
void setup()
{
int i;
GD.begin();
GD.wr16(RAM_SPRPAL + 2 * 255, TRANSPARENT);
// draw 32 circles into 32 sprite images
for (i = 0; i < 32; i++) {
GD.wr16(RAM_SPRPAL + 2 * i, RGB(8 * i, 64, 255 - 8 * i));
int dst = RAM_SPRIMG + 256 * i;
GD.__wstart(dst);
byte x, y;
int r2 = min(i * i, 256);
for (y = 0; y < 16; y++) {
for (x = 0; x < 16; x++) {
byte pixel;
if ((x * x + y * y) <= r2)
pixel = i; // use color above
else
pixel = 0xff; // transparent
SPI.transfer(pixel);
}
}
GD.__end();
}
for (i = 0; i < 64; i++)
visualize(i, 0);
}
byte amp[64]; // current voice amplitude
byte target[64]; // target voice amplitude
// Set volume for voice v to a
void setvol(byte v, byte a)
{
GD.__wstart(VOICES + (v << 2) + 2);
SPI.transfer(a);
SPI.transfer(a);
GD.__end();
}
void adsr() // handle ADSR for 64 voices
{
byte v;
for (v = 0; v < 64; v++) {
int d = target[v] - amp[v]; // +ve means need to increase
if (d) {
if (d > 0)
amp[v] += 4; // attack
else
amp[v]--; // decay
setvol(v, amp[v]);
visualize(v, amp[v]);
}
}
}
void loop()
{
prog_uchar *pc;
long started = millis();
int ticks = 0;
for (pc = mont; pc < mont + sizeof(mont);) {
byte cmd = pgm_read_byte_near(pc++); // upper 2 bits are command code
if ((cmd & 0xc0) == 0) {
// Command 0x00: pause N*5 milliseconds
ticks += (cmd & 63);
while (millis() < (started + ticks * 5)) {
adsr();
delay(1);
}
} else {
byte v = (cmd & 63);
byte a;
if ((cmd & 0xc0) == 0x40) {
// Command 0x40: silence voice
target[v] = 0;
} else if ((cmd & 0xc0) == 0x80) {
// Command 0x80: set voice frequency and amplitude
byte flo = pgm_read_byte_near(pc++);
byte fhi = pgm_read_byte_near(pc++);
GD.__wstart(VOICES + 4 * v);
SPI.transfer(flo);
SPI.transfer(fhi);
GD.__end();
target[v] = pgm_read_byte_near(pc++);
}
}
}
}

View File

@ -1,229 +0,0 @@
#include <SPI.h>
#include <GD.h>
// ----------------------------------------------------------------------
// controller: buttons on Arduino pins 3,4,5,6 with 7 grounded
// ----------------------------------------------------------------------
static void controller_init()
{
// Configure input pins with internal pullups
byte i;
for (i = 3; i < 7; i++) {
pinMode(i, INPUT);
digitalWrite(i, HIGH);
}
// drive pin 7 low
pinMode(7, OUTPUT);
digitalWrite(7, 0);
}
#define CONTROL_LEFT 1
#define CONTROL_RIGHT 2
#define CONTROL_UP 4
#define CONTROL_DOWN 8
static byte controller_sense()
{
byte r = 0;
if (!digitalRead(5))
r |= CONTROL_DOWN;
if (!digitalRead(4))
r |= CONTROL_UP;
if (!digitalRead(6))
r |= CONTROL_LEFT;
if (!digitalRead(3))
r |= CONTROL_RIGHT;
return r;
}
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
struct dirent {
char name[12];
uint16_t length;
uint32_t addr;
};
static uint32_t flash_readn(byte *dst, uint32_t src, size_t n)
{
SEL_local();
SPI.transfer(0x03);
SPI.transfer((byte)(src >> 16));
SPI.transfer((byte)(src >> 8));
SPI.transfer((byte)(src >> 0));
while (n--) {
*dst++ = SPI.transfer(0);
src++;
if ((511 & (uint16_t)src) == 264)
src = src - 264 + 512;
}
UNSEL_local();
return src;
}
uint16_t samp_len;
uint32_t samp_ptr;
static dirent de;
static byte find_name(uint32_t &ptr, uint16_t &len, uint32_t dirptr, char *name)
{
while (true) {
dirptr = flash_readn((byte*)&de, dirptr, sizeof(de));
if (de.name[0] == 0)
return 0; // end of dir, no match found
if (strcmp(de.name, name) == 0) {
len = de.length;
ptr = de.addr;
return 1;
}
}
}
static byte ninstruments;
static dirent instruments[32];
struct active {
byte instrument;
uint32_t addr;
uint16_t pos, length;
uint16_t x, y;
};
#define NACTIVE 3
static active playing[NACTIVE];
struct active *findidle()
{
byte i;
for (i = 0; i < NACTIVE; i++)
if (playing[i].addr == 0)
return &playing[i];
return NULL;
}
static void kickoff(byte i)
{
active *p = findidle();
if (p) {
p->addr = instruments[i].addr;
p->pos = 0;
p->length = instruments[i].length;
p->x = 0;
p->y = 16 + 16 * i;
}
}
static void fromflash(uint16_t dst, uint32_t src, uint16_t len)
{
while (len--) {
byte v;
src = flash_readn(&v, src, 1);
GD.wr(dst++, v);
}
}
static byte sprstr(int x, int y, byte spr, const char *txt)
{
char c;
while ((c = *txt++) != 0) {
GD.sprite(spr++, x, y, (c - ' ') >> 2, 8 + ((c & 3) << 1), 0);
x += 11;
}
return spr;
}
// add all samples from dir
void add_samples(uint32_t dir)
{
dirent *pi = &instruments[ninstruments];
while (dir = flash_readn((byte*)pi, dir, sizeof(*pi)), pi->name[0]) {
pi++, ninstruments++;
}
}
void setup()
{
controller_init();
GD.begin();
GD.ascii();
pinMode(FLOCAL, OUTPUT);
UNSEL_local();
GD.wr(IOMODE, 'F');
uint32_t assetroot = 512L * 640;
uint32_t dk;
uint16_t dkl;
find_name(dk, dkl, assetroot, "voice");
add_samples(dk);
find_name(dk, dkl, assetroot, "drumkit");
add_samples(dk);
byte i;
for (i = 0; i < ninstruments; i++) {
byte x = (50 - strlen(instruments[i].name)) >> 1;
GD.putstr(x, 2 + i, instruments[i].name);
}
uint32_t sd;
uint16_t sdl;
if (1) {
find_name(dk, dkl, assetroot, "pickups");
find_name(sd, sdl, dk, "pal");
fromflash(RAM_SPRPAL, sd, sdl);
find_name(sd, sdl, dk, "img");
fromflash(RAM_SPRIMG, sd, sdl);
}
}
#include "soundbuffer.h"
#define SOUNDBUFFER 0x3f00
int cursor;
void loop()
{
GD.microcode(soundbuffer_code, sizeof(soundbuffer_code));
byte writepointer = 0;
for (;;) {
active *p;
byte i;
byte readpointer = GD.rd(COMM+0);
byte fullness = writepointer - readpointer;
while (fullness < 254) {
char total = 0;
for (p = playing, i = 0; i < NACTIVE; p++, i++) {
if (p->addr) {
char v;
p->addr = flash_readn((byte*)&v, p->addr, 1);
total += (v >> 1);
if (++p->pos >= p->length)
p->addr = 0;
}
}
GD.wr(SOUNDBUFFER + writepointer++, total);
fullness++;
}
GD.waitvblank();
GD.sprite(0, 142, 11 + 8 * cursor, 47, 0, 0);
GD.sprite(1, 238, 11 + 8 * cursor, 47, 0, 2);
static byte prev;
byte press;
press = controller_sense();
press = random(16);
if (prev == 0) {
if (press & CONTROL_DOWN)
cursor = min(ninstruments - 1, cursor + 1);
if (press & CONTROL_UP)
cursor = max(0, cursor - 1);
if (press & (CONTROL_RIGHT | CONTROL_LEFT))
kickoff(cursor);
}
prev = press;
}
}

View File

@ -1,42 +0,0 @@
static PROGMEM prog_uchar soundbuffer_code[] = {
0x86,0x15,
0x01,0x80,
0x0F,0x72,
0x00,0x66,
0x81,0x55,
0x0F,0x72,
0x00,0x80,
0xEB,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x81,0x61,
0x83,0x55,
0x00,0x80,
0x03,0x68,
0x00,0x66,
0xA6,0x35,
0x90,0xA8,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x00,0xBF,
0x03,0x62,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x11,0xA8,
0x23,0x60,
0x03,0x61,
0x13,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x90,0xA8,
0x23,0x60,
0x03,0x61,
0x6A,0x98,
0x03,0x62,
0x87,0x15,
0x0C,0x70,
};

File diff suppressed because it is too large Load Diff

View File

@ -1,124 +0,0 @@
#include <SPI.h>
#include <GD.h>
struct voice
{
float f;
float a;
} voices[16];
void load()
{
byte v;
unsigned int gg = 0;
float sum = 0.0;
for (v = 0; v < 16; v++) {
sum += voices[v].a;
}
float scale = 255.0 / sum;
for (v = 0; v < 16; v++) {
byte a = int(voices[v].a * scale);
GD.voice(v, 0, int(4 * voices[v].f), a, a);
}
}
struct sprite
{
int x;
int y;
} sprites[64];
static int sprnum;
void note(byte voice, byte m, byte vel)
{
if (voice == 0 && vel) {
sprites[sprnum].x = 384;
sprites[sprnum].y = 284 - 8 * m;
sprnum = (sprnum + 1) & 63;
}
float f0 = 440 * pow(2.0, (m - 69) / 12.0);
float a0 = vel / 120.;
if (voice == 0) {
float choirA[] = { 3.5, 1.6, .7, 3.7, 1, 2 };
byte v;
for (v = 0; v < 6; v++) {
voices[v].f = (v + 1) * f0;
voices[v].a = a0 * choirA[v] / 3.7;
}
} else {
voices[voice].f = f0;
voices[voice].a = a0;
}
}
static void pause(int n)
{
load();
long started = millis();
while (millis() < (started + n * 3 / 2)) {
GD.waitvblank();
byte i;
for (i = 0; i < 64; i++) {
if (sprites[i].x > -16) {
GD.sprite(i, sprites[i].x, sprites[i].y, 0, 0, 0);
sprites[i].x--;
} else {
GD.sprite(i, 400, 400, 0, 0, 0);
}
}
}
}
#define PAUSE(x) 255,x
#define NOTE(v, p, a) v, p, a
static PROGMEM prog_uchar widor_toccata[] = {
#include "music.h"
};
static void play()
{
prog_uchar *pc = widor_toccata;
while (pc < (widor_toccata + sizeof(widor_toccata))) {
byte a = pgm_read_byte_near(pc++);
byte b = pgm_read_byte_near(pc++);
if (a == 255) {
pause(b);
} else {
byte c = pgm_read_byte_near(pc++);
note(a, b, c);
}
}
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.wr16(RAM_SPRPAL + (0 * 2), 0x8000);
GD.wr16(RAM_SPRPAL + (1 * 2), RGB(255, 255, 255));
GD.fill(RAM_SPRIMG, 0, 256);
GD.wr(RAM_SPRIMG + 0x78, 1);
GD.wr(RAM_SPRIMG + 0x98, 1);
GD.wr(RAM_SPRIMG + 0x87, 1);
GD.wr(RAM_SPRIMG + 0x89, 1);
GD.wr(RAM_SPRIMG + 0x88, 1);
GD.putstr(0, 0,"Widor's Toccata");
}
void loop()
{
play();
delay(2000);
int i;
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
}

View File

@ -1,70 +0,0 @@
#include <SPI.h>
#include <GD.h>
static void playsample(Asset &a)
{
while (a.available()) {
byte b;
a.read(&b, 1);
GD.wr(SAMPLE_L + 1, b);
GD.wr(SAMPLE_R + 1, b);
delayMicroseconds(80);
}
}
static void say(const char *word)
{
Asset a;
a.open("voice", word, NULL);
playsample(a);
}
void setup()
{
GD.begin();
// Say "Gameduino ready"
say("game");
say("duino");
delay(100);
say("ready");
// Load the pickups starting at sprite 0.
// First copy pickups/pal into RAM_SPRPAL, then
// pickups/img into RAM_SPRIMG.
Asset a;
a.open("pickups", "pal", NULL);
a.load(RAM_SPRPAL);
a.open("pickups", "img", NULL);
a.load(RAM_SPRIMG);
}
void loop()
{
// Scatter sprites across the screen
for (int i = 0; i < 256; i++)
GD.sprite(i, random(400), random(300), random(47), 0, 0);
// Play a random instrument from the 12 in the drumkit
static const char *drums[12] = {
"bassdrum2",
"bassdrum4",
"clap",
"conga2",
"conga3",
"cowbell1",
"cymbal1",
"cymbal3",
"hihat1",
"hihat2",
"snaredrum2",
"snaredrum3"
};
Asset drum;
drum.open("drumkit", drums[random(12)], NULL);
playsample(drum);
// Say "game over"
say("game");
say("over");
}

View File

@ -1,145 +0,0 @@
#include <SPI.h>
#include <GD.h>
// replicate a 2-bit color across the whole byte. Optimization for setpixel
byte replicate(byte color)
{
return (color << 6) | (color << 4) | (color << 2) | color;
}
// Set pixel at (x,y) to color. (note that color is replicated).
void setpixel(byte x, byte y, byte color)
{
/*
Because of the way the sprites are laid out in setup(), it's not too
hard to translate the pixel (x,y) to an address and mask. Taking the
two byte values as x7-x0 and y7-y0, the address of the pixel is:
x5 x4 y7 y6 y5 y4 y3 y2 y1 y0 x3 x2 x1 x0
(x6, x7) gives the value of the mask.
*/
unsigned int addr = RAM_SPRIMG | (x & 0xf) | (y << 4) | ((x & 0x30) << 8);
byte mask = 0xc0 >> ((x >> 5) & 6);
GD.wr(addr, (GD.rd(addr) & ~mask) | (color & mask));
}
// Draw color line from (x0,y0) to (x1,y1).
void line(byte x0, byte y0, byte x1, byte y1, byte color)
{
byte swap;
#define SWAP(a, b) (swap = (a), (a) = (b), (b) = swap)
color = replicate(color);
byte steep = abs(y1 - y0) > abs(x1 - x0);
if (steep) {
SWAP(x0, y0);
SWAP(x1, y1);
}
if (x0 > x1) {
SWAP(x0, x1);
SWAP(y0, y1);
}
int deltax = x1 - x0;
int deltay = abs(y1 - y0);
int error = deltax / 2;
char ystep;
if (y0 < y1)
ystep = 1;
else
ystep = -1;
byte x;
byte y = y0;
for (x = x0; x < x1; x++) {
if (steep)
setpixel(y, x, color);
else
setpixel(x, y, color);
error -= deltay;
if (error < 0) {
y += ystep;
error += deltax;
}
}
}
struct point {
int x, y;
char xv, yv;
};
static struct point triangle[3];
#define RANDOM_RGB() RGB(random(256),random(256),random(256))
// Restart the drawing
static void restart()
{
// Clear the screen
GD.fill(RAM_SPRIMG, 0, 16384);
// Position triangle at random
byte i;
for (i = 0; i < 3; i++) {
triangle[i].x = 3 + random(250);
triangle[i].y = 3 + random(250);
}
triangle[0].xv = 1;
triangle[0].yv = 1;
triangle[1].xv = -1;
triangle[1].yv = 1;
triangle[2].xv = 1;
triangle[2].yv = -1;
// Choose a random palette
GD.wr16(PALETTE4A, RGB(0,0,0));
GD.wr16(PALETTE4A + 2, RANDOM_RGB());
GD.wr16(PALETTE4A + 4, RANDOM_RGB());
GD.wr16(PALETTE4A + 6, RANDOM_RGB());
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0,"Bitmap demonstration");
// Draw 256 sprites left to right, top to bottom, all in 4-color
// palette mode. By doing them in column-wise order, the address
// calculation in setpixel is made simpler.
// First 64 use bits 0-1, next 64 use bits 2-4, etc.
// This gives a 256 x 256 4-color bitmap.
for (i = 0; i < 256; i++) {
int x = 72 + 16 * ((i >> 4) & 15);
int y = 22 + 16 * (i & 15);
int image = i & 63; /* image 0-63 */
int pal = 3 - (i >> 6); /* palettes bits in columns 3,2,1,0 */
GD.sprite(i, x, y, image, 0x8 | (pal << 1), 0);
}
restart();
}
void loop()
{
static byte color;
if (random(1000) == 0)
restart();
line(triangle[0].x, triangle[0].y, triangle[1].x, triangle[1].y, color);
line(triangle[1].x, triangle[1].y, triangle[2].x, triangle[2].y, color);
line(triangle[2].x, triangle[2].y, triangle[0].x, triangle[0].y, color);
color = (color + 1) & 3;
byte i;
for (i = 0; i < 3; i++) {
triangle[i].x += triangle[i].xv;
triangle[i].y += triangle[i].yv;
if (triangle[i].x == 0 || triangle[i].x == 255)
triangle[i].xv = -triangle[i].xv;
if (triangle[i].y == 0 || triangle[i].y == 255)
triangle[i].yv = -triangle[i].yv;
}
}

View File

@ -1,47 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "rasterinterrupt.h"
#define LINETIME_US 41.6 // time for one raster line in microseconds
#define delayLines(n) delayMicroseconds(int(n * LINETIME_US))
static int line;
#define BLACK
#define RED RGB(255, 0, 0)
void service()
{
delayLines(0.5); // wait half a line: puts us in middle of screen
if (line == 150) {
GD.wr16(BG_COLOR, RGB(255, 0, 0)); // turn red at line 150
line = 170;
} else {
GD.wr16(BG_COLOR, RGB(0, 0, 0)); // turn black at line 170
line = 150;
}
GD.wr16(COMM+0, line); // Set next split line
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0, "Raster interrupts");
pinMode(2, INPUT); // Arduino reads on pin 2
GD.wr(IOMODE, 'J'); // pin 2 is under microprogram control
line = 150;
GD.wr16(COMM+0, line); // Set first split line
// The raster interrupt microprogram
GD.microcode(rasterinterrupt_code, sizeof(rasterinterrupt_code));
// call 'rising' every time pin 2 rises
attachInterrupt(0, service, RISING);
}
void loop()
{
}

View File

@ -1,32 +0,0 @@
static PROGMEM prog_uchar rasterinterrupt_code[] = {
0x8C,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x80,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0x00,0x80,
0xEF,0xFF,
0x00,0x66,
0x23,0x60,
0x03,0x61,
0x90,0xA8,
0x83,0x55,
0xFF,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x03,0x68,
0xF1,0xFF,
0x00,0x66,
0x23,0x60,
0x03,0x61,
0x91,0x15,
0x0C,0x70,
};

View File

@ -1,72 +0,0 @@
#include <SPI.h>
#include <GD.h>
void readn(byte *dst, unsigned int addr, int c)
{
GD.__start(addr);
while (c--)
*dst++ = SPI.transfer(0);
GD.__end();
}
static byte coll[256];
static void load_coll()
{
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
while (GD.rd(VBLANK) == 1) // Wait until display
;
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
readn(coll, COLLISION, sizeof(coll));
}
void setup()
{
int i;
GD.begin();
GD.wr(JK_MODE, 1);
GD.wr16(RAM_PAL, RGB(255,255,255));
// Use the 4 palettes:
// 0 pink, for J sprites
// 1 green, for K sprites
// 2 dark pink, J collisions
// 3 dark green, K collisions
for (i = 0; i < 256; i++) {
GD.wr16(RAM_SPRPAL + (0 * 512) + (i << 1), RGB(255, 0, 255));
GD.wr16(RAM_SPRPAL + (1 * 512) + (i << 1), RGB(0, 255, 0));
GD.wr16(RAM_SPRPAL + (2 * 512) + (i << 1), RGB(100, 0, 100));
GD.wr16(RAM_SPRPAL + (3 * 512) + (i << 1), RGB(0, 100, 0));
}
}
byte spr;
static void polar(float th, int r, byte jk)
{
// add 2 to the palette if this sprite is colliding
byte colliding = coll[spr] != 0xff;
GD.sprite(spr, 200 + int(r * sin(th)), 142 + int(r * cos(th)), 0, jk + (colliding ? 2 : 0), 0, jk);
spr++;
}
void loop()
{
byte i;
float th;
spr = 0;
// draw the J sprites (pink)
for (i = 0; i < 5; i++) {
th = (millis() / 3000.) + 2 * PI * i / 5;
polar(th, 134, 0);
}
// draw the K sprites (green)
randomSeed(4);
for (i = 0; i < 17; i++) {
th = (millis() / float(random(1000,3000))) + 2 * PI * i / 17;
polar(th, 134, 1);
}
load_coll();
}

View File

@ -1,16 +0,0 @@
static PROGMEM prog_uchar random_code[] = {
0x81,0x15,
0x00,0x80,
0xED,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x81,0x61,
0x23,0x60,
0x03,0x61,
0x00,0x6A,
0xFF,0x9F,
0x03,0x63,
0x82,0x15,
0x0C,0x70,
};

View File

@ -1,21 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "random.h"
void setup()
{
GD.begin();
int i;
for (i = 0; i < 256; i++) {
GD.wr16(RAM_PAL + (4 * i + 0) * 2, RGB(0,0,0));
GD.wr16(RAM_PAL + (4 * i + 1) * 2, RGB(0x20,0x20,0x20));
GD.wr16(RAM_PAL + (4 * i + 2) * 2, RGB(0x40,0x40,0x40));
GD.wr16(RAM_PAL + (4 * i + 3) * 2, RGB(0xff,0xff,0xff));
}
GD.microcode(random_code, sizeof(random_code));
}
void loop()
{
}

View File

@ -1,69 +0,0 @@
static PROGMEM prog_uchar splitscreen_code[] = {
0xB3,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x6C,
0x80,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0x81,0x60,
0xFF,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x03,0x67,
0x8B,0x35,
0x0F,0x71,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x04,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x05,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x06,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x07,0xA8,
0x23,0x60,
0x03,0x61,
0x07,0x80,
0x03,0x69,
0x0A,0xA8,
0x23,0x60,
0x0F,0x71,
0x94,0xA8,
0x83,0x55,
0x8B,0x55,
0x96,0xA8,
0x93,0x55,
0x9A,0xA8,
0x83,0x55,
0x8B,0x55,
0x9C,0xA8,
0x93,0x55,
0x2C,0x81,
0x8B,0x55,
0x90,0xA8,
0x93,0x55,
0xB3,0x15,
0x0C,0x70,
};

View File

@ -1,57 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "splitscreen.h"
/*
For the splitscreen microprogram, the COMM area holds 8 short words
that control the 3-way screen split:
COMM+0 SCROLL_X for top section
COMM+2 SCROLL_Y for top section
COMM+4 Y-coordinate of start of middle section
COMM+6 SCROLL_X for middle section
COMM+8 SCROLL_Y for middle section
COMM+10 Y-coordinate of start of bottom section
COMM+12 SCROLL_X for bottom section
COMM+14 SCROLL_Y for bottom section
*/
#include "splitscreen_graphics.h"
void setup()
{
GD.begin();
GD.copy(RAM_PIC, splitscreen_pic, sizeof(splitscreen_pic));
GD.copy(RAM_CHR, splitscreen_chr, sizeof(splitscreen_chr));
GD.copy(RAM_PAL, splitscreen_pal, sizeof(splitscreen_pal));
GD.wr16(COMM+0, 0);
GD.wr16(COMM+2, 0);
GD.wr16(COMM+4, 100); // split at line 100
GD.wr16(COMM+6, 0);
GD.wr16(COMM+8, 140);
GD.wr16(COMM+10, 200); // split at line 200
GD.wr16(COMM+12, 0);
GD.wr16(COMM+14, (511 & (82 - 200))); // show line 82 at line 200
GD.microcode(splitscreen_code, sizeof(splitscreen_code));
}
// Set the scroll registers for the middle screen secion to (x, y)
static void scrollxy(uint16_t x, uint16_t y)
{
GD.wr16(COMM+6, x);
GD.wr16(COMM+8, y);
}
void loop()
{
static int i;
float th = i / 16.;
scrollxy(55 + 50 * cos(th), 150 + 50 * sin(th));
GD.wr16(COMM+12, i);
i++;
GD.waitvblank();
}

View File

@ -1,649 +0,0 @@
static PROGMEM prog_uchar splitscreen_pic[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x07, 0x0d, 0x07, 0x07, 0x07, 0x07, 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, 0x0f, 0x10, 0x00, 0x11, 0x12, 0x06, 0x13, 0x00, 0x14, 0x15, 0x16, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x07, 0x0d, 0x00, 0x06, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x06, 0x13, 0x00, 0x1c, 0x1d, 0x1e, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x07, 0x0d, 0x00, 0x06, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x06, 0x07, 0x07, 0x07, 0x24, 0x25, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x07, 0x0d, 0x00, 0x06, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x26, 0x27, 0x00, 0x28, 0x29, 0x06, 0x13, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x07, 0x0d, 0x00, 0x06, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x06, 0x13, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x07,
0x07, 0x07, 0x2f, 0x07, 0x0d, 0x00, 0x06, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x30, 0x31, 0x32, 0x07, 0x33, 0x34, 0x35, 0x07,
0x07, 0x08, 0x36, 0x37, 0x38, 0x39, 0x07, 0x3a, 0x3b, 0x00, 0x07, 0x0d, 0x00, 0x00, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x11, 0x12, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x35, 0x2f,
0x00, 0x42, 0x43, 0x44, 0x45, 0x46, 0x00, 0x47, 0x48, 0x49, 0x07, 0x0d, 0x00, 0x00, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x0b, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x35, 0x2f,
0x00, 0x4b, 0x4c, 0x4d, 0x07, 0x4e, 0x00, 0x00, 0x4f, 0x50, 0x07, 0x0d, 0x00, 0x00, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x51, 0x52, 0x00, 0x00, 0x53, 0x54, 0x35, 0x07,
0x07, 0x07, 0x55, 0x56, 0x07, 0x57, 0x00, 0x00, 0x58, 0x59, 0x07, 0x0d, 0x00, 0x00, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x26, 0x27, 0x00, 0x28, 0x29, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x35, 0x2f,
0x00, 0x60, 0x61, 0x62, 0x63, 0x64, 0x00, 0x65, 0x66, 0x67, 0x07, 0x0d, 0x00, 0x00, 0x0b, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x35, 0x2f,
0x00, 0x00, 0x6e, 0x6f, 0x70, 0x71, 0x07, 0x72, 0x73, 0x00, 0x07, 0x07, 0x07, 0x07, 0x0b, 0x07,
0x07, 0x07, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
0x7a, 0x7b, 0x7c, 0x7d, 0x74, 0x74, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x80, 0x81, 0x74,
0x82, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x83, 0x82, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e,
0x7e, 0x83, 0x74, 0x7e, 0x7e, 0x7e, 0x84, 0x74, 0x74, 0x74, 0x74, 0x85, 0x7e, 0x83, 0x74, 0x74,
0x74, 0x86, 0x07, 0x07, 0x87, 0x88, 0x89, 0x07, 0x07, 0x8a, 0x74, 0x86, 0x07, 0x07, 0x87, 0x88,
0x89, 0x07, 0x07, 0x8a, 0x74, 0x74, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x8b, 0x74,
0x8c, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x8d, 0x8c, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x8d, 0x74, 0x07, 0x07, 0x07, 0x07, 0x8e, 0x74, 0x74, 0x74, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0x90, 0x07, 0x91, 0x74, 0x74, 0x74, 0x92, 0x07, 0x93, 0x74, 0x90, 0x07, 0x91, 0x74, 0x74,
0x74, 0x92, 0x07, 0x93, 0x74, 0x74, 0x07, 0x07, 0x94, 0x74, 0x74, 0x95, 0x96, 0x07, 0x97, 0x98,
0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x07, 0x07, 0x9a, 0x07, 0x9b, 0x74, 0x74, 0x74, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0x9c, 0x07, 0x9d, 0x74, 0x74, 0x74, 0x9e, 0x9f, 0xa0, 0x74, 0x9c, 0x07, 0xa1, 0x74, 0x74,
0x74, 0x9e, 0x9f, 0xa0, 0x74, 0x74, 0x07, 0x07, 0x94, 0x74, 0x74, 0x74, 0xa2, 0x07, 0x07, 0x94,
0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x07, 0x07, 0xa3, 0x07, 0x07, 0x8e, 0x74, 0x74, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0xa4, 0x07, 0xa5, 0xa6, 0xa7, 0xa8, 0x74, 0x74, 0x74, 0x74, 0xa9, 0x07, 0x94, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x07, 0x07, 0x94, 0x74, 0x74, 0x74, 0xaa, 0x07, 0x07, 0xab,
0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x07, 0x07, 0x74, 0x9a, 0x07, 0x9b, 0x74, 0x74, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0xac, 0x07, 0x07, 0x07, 0x07, 0x07, 0xad, 0xae, 0xaf, 0x74, 0xa9, 0x07, 0x94, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x07, 0x07, 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0x07, 0xb4, 0x74,
0x8c, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x74, 0x8c, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x74, 0x74, 0x07, 0x07, 0x74, 0xa3, 0x07, 0x07, 0x8e, 0x74, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0x74, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0x07, 0xbb, 0xbc, 0xa9, 0x07, 0x94, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xbd, 0xbe, 0x74,
0x8c, 0x07, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x74, 0x8c, 0x07, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0,
0xc0, 0x74, 0x74, 0x07, 0x07, 0x74, 0xc1, 0x9a, 0x07, 0x9b, 0x74, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0xc2, 0x07, 0x07, 0xc3, 0xa9, 0x07, 0x94, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x07, 0x07, 0xc4, 0xc0, 0xc0, 0xc5, 0xc6, 0x07, 0xc7, 0x74,
0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x07, 0x07, 0x74, 0x74, 0xa3, 0x07, 0x07, 0x8e, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0xa9, 0x07, 0xc8, 0x74, 0x74, 0x74, 0xc9, 0x07, 0x07, 0xca, 0xa9, 0x07, 0xc8, 0x74, 0x74,
0x74, 0xc9, 0x07, 0x07, 0xca, 0x74, 0x07, 0x07, 0x94, 0x74, 0x74, 0x74, 0xcb, 0x07, 0xcc, 0x74,
0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x8c, 0x07, 0x99, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x07, 0x07, 0x74, 0x74, 0x74, 0x9a, 0x07, 0x9b, 0x8f, 0x07, 0x8d, 0x74, 0x74,
0x74, 0xcd, 0x07, 0xce, 0xcf, 0xb1, 0xd0, 0xd1, 0x07, 0xd2, 0xd3, 0xcd, 0x07, 0xce, 0xcf, 0xb1,
0xd0, 0xd1, 0x07, 0xd2, 0xd3, 0x74, 0x07, 0x07, 0x94, 0x74, 0x74, 0x74, 0xd4, 0x07, 0x07, 0x74,
0x8c, 0x07, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0x8c, 0x07, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6,
0xd6, 0xd7, 0x74, 0x07, 0x07, 0x74, 0x74, 0x74, 0xa3, 0x07, 0x07, 0x07, 0x07, 0x8d, 0x74, 0x74,
0x74, 0xd8, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xd9, 0x74, 0xd8, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0xd9, 0x74, 0x74, 0x07, 0x07, 0x94, 0x74, 0x74, 0x74, 0xda, 0x07, 0x07, 0x74,
0x8c, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x8d, 0x8c, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x8d, 0x74, 0x07, 0x07, 0x74, 0x74, 0x74, 0x74, 0xdb, 0x07, 0x07, 0x07, 0x8d, 0x74, 0x74,
0x74, 0x74, 0xdc, 0xdd, 0xde, 0xc0, 0xdf, 0xe0, 0xe1, 0xe2, 0x74, 0x74, 0xdc, 0xdd, 0xde, 0xc0,
0xdf, 0xe0, 0xe1, 0xe2, 0x74, 0x74, 0x9f, 0x9f, 0xe3, 0x74, 0x74, 0x74, 0xe4, 0x9f, 0x9f, 0x74,
0xe5, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xe6, 0xe5, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
0x9f, 0xe6, 0x74, 0x9f, 0x9f, 0x74, 0x74, 0x74, 0x74, 0xe7, 0x9f, 0x9f, 0x9f, 0xe6, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74,
};
static PROGMEM prog_uchar splitscreen_chr[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x56, 0x55, 0x70, 0x55, 0x00, 0x57, 0x00, 0x58, 0x00, 0x50, 0x00, 0x60, 0x00,
0x5a, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00,
0xbf, 0xc1, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x43, 0xaa,
0x55, 0x55, 0xe5, 0x55, 0x02, 0x55, 0x00, 0x95, 0x00, 0x25, 0x00, 0x35, 0x00, 0x05, 0x00, 0x09,
0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfa, 0x55, 0x00, 0x35, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x60, 0x00, 0x50, 0x00, 0x58, 0x00, 0x54, 0x00,
0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55,
0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40, 0x55, 0x40,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50,
0x60, 0x00, 0x70, 0x00, 0x70, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0xab, 0x55, 0xad, 0x55, 0xa1, 0x55, 0xa5, 0x55, 0xa5, 0x55, 0xa5, 0x55, 0xa5, 0x55, 0xa1, 0x55,
0x55, 0xea, 0x55, 0x6a, 0x55, 0x7a, 0x55, 0x4a, 0x55, 0x4a, 0x55, 0x5a, 0x55, 0x55, 0x55, 0x55,
0x55, 0x58, 0x55, 0x58, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00,
0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54,
0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xea, 0xaa, 0x4a, 0xaa, 0x5e, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x56, 0xaa, 0x56, 0xaa, 0x56, 0xaa,
0xa8, 0x55, 0xa8, 0x55, 0xab, 0x55, 0xab, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55,
0x6a, 0xaa, 0x7a, 0xaa, 0x7a, 0xaa, 0x4a, 0xaa, 0x4a, 0xaa, 0x5a, 0xaa, 0x52, 0xaa, 0x57, 0xaa,
0xa1, 0x55, 0xad, 0x55, 0xab, 0x15, 0xaa, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xea, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xaf, 0xc1, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xf9, 0x55, 0x03, 0x95, 0x00, 0x25,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16,
0x56, 0xaa, 0x56, 0xaa, 0x56, 0xaa, 0x52, 0xaa, 0x52, 0xaa, 0x5a, 0xaa, 0x7a, 0xaa, 0xaa, 0xaa,
0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xab, 0x55, 0xab, 0x55, 0xab, 0x55, 0xa8, 0x55,
0x00, 0x95, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0x0f, 0xaa, 0x55, 0x50, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x03, 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x54, 0xea, 0x55, 0x4a, 0x55, 0x5e, 0x55, 0x52,
0xaa, 0xa1, 0xaa, 0xad, 0xaa, 0xa9, 0xaa, 0xa8, 0xaa, 0xab, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xb1, 0xf0, 0x55,
0xa9, 0x55, 0xad, 0x55, 0xa1, 0x55, 0xb5, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x7a, 0xaa, 0x7a, 0xaa, 0x7a, 0xaa, 0x7a, 0xaa, 0x7a, 0xaa, 0x4a, 0xaa, 0x4a, 0xaa,
0x55, 0x55, 0xa5, 0x55, 0xa5, 0x55, 0xa1, 0x55, 0xa1, 0x55, 0xad, 0x55, 0xa9, 0x55, 0xa8, 0x55,
0x55, 0x56, 0x55, 0x56, 0x55, 0x56, 0x55, 0x56, 0x55, 0x52, 0x55, 0x52, 0x55, 0x5e, 0x55, 0x7a,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x55, 0x56, 0x55, 0x54,
0x5a, 0xaa, 0x5e, 0xaa, 0x52, 0xaa, 0x57, 0xaa, 0x55, 0xaa, 0x55, 0x7a, 0x55, 0x53, 0x55, 0x55,
0xaa, 0xf0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x50, 0xfe,
0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe9,
0xaa, 0xa9, 0xaa, 0xad, 0xaa, 0xa1, 0xaa, 0xa5, 0xaa, 0x95, 0xab, 0x55, 0xb1, 0x55, 0x55, 0x55,
0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x55, 0x54, 0x55, 0x5c, 0x55, 0x60,
0x55, 0x55, 0x55, 0xb0, 0x5c, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x5a, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfa, 0x55, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x35, 0x55, 0x09, 0x55, 0x01, 0x55, 0x02, 0x55, 0x03, 0x55,
0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55, 0x01, 0x55,
0xe9, 0x55, 0x00, 0xe5, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x55, 0x85, 0x55, 0xb5, 0x55, 0xa5, 0x55,
0x55, 0x55, 0x55, 0x56, 0x55, 0x70, 0x56, 0x00, 0x58, 0x00, 0x50, 0x00, 0x70, 0x00, 0x40, 0x00,
0x56, 0xbf, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaf, 0xc1, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0xf5, 0x55, 0xab, 0x55, 0xaa, 0x85, 0xaa, 0xa1, 0xaa, 0xa9, 0xaa, 0xab, 0xaa, 0xaa,
0x55, 0x7a, 0x55, 0x6a, 0x55, 0x6a, 0x55, 0x2a, 0x55, 0xea, 0x55, 0xea, 0x55, 0xea, 0x55, 0xaa,
0xaa, 0xaa, 0xaa, 0xa8, 0xaa, 0xa1, 0xaa, 0xa5, 0xaa, 0xb5, 0xaa, 0xb5, 0xaa, 0x85, 0xaa, 0x85,
0xb0, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xea, 0xaa, 0x4a, 0xaa, 0x52, 0xaa, 0x56, 0xaa, 0x57, 0xaa, 0x57, 0xaa, 0x57, 0xaa, 0x57, 0xaa,
0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x15, 0xaa, 0x15, 0xaa, 0x15, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5,
0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xea, 0xaa, 0x7a, 0xaa, 0x4a, 0xaa, 0x4a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa,
0xa1, 0x55, 0xad, 0x55, 0xad, 0x55, 0xa9, 0x55, 0xa9, 0x55, 0xa9, 0x54, 0xa9, 0x54, 0xa9, 0x57,
0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xf0, 0xad, 0x55, 0x85, 0x55, 0x95, 0x55, 0xd5, 0x55, 0xd5, 0x55, 0x15, 0x55, 0x15, 0x55,
0x6a, 0xc0, 0x55, 0x58, 0x55, 0x56, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x95, 0x55, 0x15, 0x55, 0x15, 0x55,
0x95, 0x55, 0xd5, 0x55, 0x15, 0x55, 0x15, 0x55, 0x25, 0x55, 0x25, 0x55, 0x35, 0x55, 0x35, 0x55,
0xaa, 0x85, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xac,
0x5a, 0xaa, 0x5a, 0xaa, 0x4a, 0xaa, 0x4a, 0xaa, 0x7a, 0xaa, 0x6a, 0xaa, 0xea, 0xaa, 0xaa, 0xaa,
0xa9, 0x57, 0xa9, 0x57, 0xad, 0x57, 0xad, 0x56, 0xad, 0x56, 0xa1, 0x56, 0xa5, 0x56, 0xb5, 0x56,
0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x60, 0x00, 0x60, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00,
0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x95, 0x00, 0x95, 0x00, 0x95, 0x00, 0x95, 0x00, 0x95,
0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x85, 0xaa, 0x85, 0xaa, 0x85,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x40,
0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xb1, 0xac, 0x15, 0xab, 0x15, 0xaa, 0xad, 0xaa, 0xab, 0xaa, 0xaa,
0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x80, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
0x6a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x2a, 0xaa, 0x2a, 0xaa,
0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00,
0x55, 0x80, 0x55, 0x80, 0x55, 0x80, 0x55, 0x40, 0x55, 0x40, 0x55, 0x70, 0x55, 0x70, 0x55, 0x60,
0xaa, 0x85, 0xaa, 0xb5, 0xaa, 0xb5, 0xaa, 0xa5, 0xaa, 0xa5, 0xaa, 0xad, 0xaa, 0xab, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xb0, 0x15,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15,
0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x56, 0xaa, 0x5e, 0xaa, 0xea, 0xaa,
0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0x95, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0xd5, 0xaa, 0x15,
0x56, 0xb0, 0x55, 0x58, 0x55, 0x56, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0xaa, 0x2a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa,
0x95, 0x57, 0x85, 0x57, 0xb5, 0x54, 0xa5, 0x54, 0xa5, 0x55, 0xa5, 0x55, 0xa5, 0x55, 0xa5, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x15, 0x55,
0x95, 0x55, 0x95, 0x55, 0xd5, 0x55, 0xd5, 0x55, 0x15, 0x55, 0x35, 0x55, 0x0d, 0x55, 0x00, 0xfa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0x55, 0x5e, 0x43, 0xea,
0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x55, 0x85, 0x55, 0x85, 0x55, 0x85, 0x55, 0x95, 0x55, 0x95, 0x55, 0xd5, 0x55, 0x15, 0x55,
0x55, 0x5a, 0x55, 0x5e, 0x55, 0x52, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0xaa, 0x4e, 0xaa, 0x54, 0xea, 0x55, 0x54,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x2a, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbd, 0xf0, 0x55,
0xaa, 0x55, 0xab, 0x55, 0xa8, 0x55, 0xad, 0x55, 0xa5, 0x55, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55,
0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55,
0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00,
0x6a, 0xaa, 0x7a, 0xaa, 0x5a, 0xaa, 0x52, 0xaa, 0x54, 0xaa, 0x55, 0x3a, 0x55, 0x57, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0xaa, 0x50, 0xfe,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbf, 0xc1,
0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xa9, 0xaa, 0xa1, 0xaa, 0x85, 0xab, 0x55, 0xc5, 0x55, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x72, 0x54, 0xaa, 0x4a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x5f, 0xf0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0xc0, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0xa8, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0xfd, 0x55, 0xaa, 0x83, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0xd5, 0x55, 0xa3, 0x55, 0xaa, 0x85, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0xa5, 0x55,
0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x80, 0x3d, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x8d, 0x55, 0xaa, 0x35, 0xaa, 0xa8, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xb5, 0x55, 0xa1, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15,
0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00,
0x55, 0x55, 0x55, 0x55, 0xaa, 0x95, 0xaa, 0x85, 0xaa, 0xa5, 0xaa, 0xa1, 0xaa, 0xa9, 0xaa, 0xa8,
0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55,
0x55, 0x7a, 0x55, 0x6a, 0x55, 0x2a, 0x55, 0xaa, 0x54, 0xaa, 0x56, 0xaa, 0x5e, 0xaa, 0x52, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x57, 0xf0,
0xa1, 0x55, 0xab, 0x55, 0xaa, 0x55, 0xaa, 0x15, 0xaa, 0x95, 0xaa, 0xb5, 0xaa, 0x85, 0xaa, 0xa5,
0xa8, 0x55, 0xaa, 0xd5, 0xaa, 0x95, 0xaa, 0x85, 0xaa, 0xad, 0xaa, 0xa1, 0xaa, 0xa9, 0xaa, 0xab,
0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15,
0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00,
0x55, 0x55, 0x15, 0x55, 0x95, 0x55, 0x85, 0x55, 0xa5, 0x55, 0xa1, 0x55, 0xa9, 0x55, 0xa8, 0x55,
0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55, 0x05, 0x55,
0x5a, 0xaa, 0x5a, 0xaa, 0x7a, 0xaa, 0x7a, 0xaa, 0x4a, 0xaa, 0x4a, 0xaa, 0x4a, 0xaa, 0x6a, 0xaa,
0xaa, 0xab, 0xaa, 0xb5, 0xaa, 0xd5, 0xa8, 0x55, 0xa9, 0x55, 0xa1, 0x55, 0xad, 0x55, 0xad, 0x55,
0x7a, 0xaa, 0x54, 0xaa, 0x55, 0xaa, 0x55, 0x2a, 0x55, 0x6a, 0x55, 0x6a, 0x55, 0x4a, 0x55, 0x7a,
0xaa, 0xad, 0xaa, 0xad, 0xaa, 0xa1, 0xaa, 0xa1, 0xaa, 0xa1, 0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa9,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xca, 0xaa, 0x57, 0xaa, 0x55, 0x4a, 0x55, 0x5a, 0x55, 0x52, 0x55, 0x56, 0x55, 0x56, 0x55, 0x54,
0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, 0x55, 0x95, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55,
0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50,
0xaa, 0xaa, 0x2a, 0xaa, 0x6a, 0xaa, 0x4a, 0xaa, 0x7a, 0xaa, 0x52, 0xaa, 0x5e, 0xaa, 0x54, 0xaa,
0xaa, 0x55, 0xaa, 0x15, 0xaa, 0xb5, 0xaa, 0x85, 0xaa, 0xad, 0xaa, 0xa1, 0xaa, 0xab, 0xaa, 0xa8,
0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55,
0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x58, 0x00, 0x58, 0x00,
0x00, 0x25, 0x00, 0x25, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa1, 0xaa, 0xa1, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xa5, 0x55, 0xa5, 0x55, 0xa5, 0x55, 0x85, 0x55, 0xb5, 0x55, 0xb5, 0x55, 0xb5, 0x55, 0xb5, 0x55,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x57, 0xaa, 0x55, 0xaa, 0x55, 0xea, 0x55, 0x6a, 0x55, 0x7a, 0x55, 0x52, 0x55, 0x5e, 0x55, 0x54,
0x4a, 0xaa, 0x4a, 0xaa, 0x4a, 0xaa, 0x7a, 0xaa, 0x7a, 0xaa, 0x5a, 0xaa, 0x5a, 0xaa, 0x52, 0xaa,
0xa1, 0x55, 0xa1, 0x55, 0xa9, 0x55, 0xa8, 0x55, 0xaa, 0x15, 0xaa, 0xa3, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xa0, 0xfd, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xa8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x40,
0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x55, 0x56, 0x55, 0x56, 0x55, 0x54, 0x55, 0x54,
0x95, 0x55, 0x95, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0xd5, 0x55, 0xd5, 0x55,
0x5e, 0xaa, 0x56, 0xaa, 0x54, 0xaa, 0x55, 0xaa, 0x55, 0x2a, 0x55, 0x6a, 0x55, 0x7a, 0x55, 0x54,
0x83, 0xf5, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x3d, 0x55, 0xaa, 0x35, 0xaa, 0xa8, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x55, 0x85, 0x55, 0xab, 0x55, 0xaa, 0xd5, 0xaa, 0x95,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x7c, 0xaa, 0xaa,
0x55, 0x56, 0x55, 0x5e, 0x55, 0x5a, 0x55, 0x4a, 0x55, 0x2a, 0x5e, 0xaa, 0x2a, 0xaa, 0xaa, 0xaa,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0xaa, 0xab, 0xaa, 0xa9, 0xaa, 0xa1, 0xaa, 0xa5, 0xaa, 0xb5,
0xea, 0xaa, 0x5c, 0xaa, 0x55, 0x72, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xf0, 0xaa, 0x55, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x02, 0xaa, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0x00, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a, 0xaa, 0x55, 0x5f, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0a, 0xaa, 0x57, 0xaa,
0xaa, 0x85, 0xaa, 0xad, 0xaa, 0xa1, 0xaa, 0xab, 0xaa, 0xa8, 0xaa, 0xa8, 0xaa, 0xaa, 0xaa, 0xaa,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0xaa, 0x35, 0x8d, 0x55, 0x83, 0xd5, 0xaa, 0xa3,
0xaa, 0xd5, 0xab, 0x55, 0x85, 0x55, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x4a, 0x55, 0x52, 0x55, 0x56, 0x55, 0x54, 0x55, 0x57, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55,
0xd5, 0x55, 0x15, 0x55, 0x15, 0x55, 0x15, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xf2, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0xaa, 0x52, 0xaa,
0xb5, 0x55, 0xa1, 0x55, 0xa8, 0x55, 0xaa, 0x15, 0xaa, 0xb5, 0xaa, 0xa5, 0xaa, 0xad, 0xaa, 0xa1,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x55, 0x56, 0x55, 0x54,
0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x95, 0x55, 0x15, 0x55, 0x15, 0x55,
0x54, 0xaa, 0x55, 0x2a, 0x55, 0x6a, 0x55, 0x4a, 0x55, 0x5a, 0x55, 0x52, 0x55, 0x52, 0x55, 0x5e,
0xaa, 0xa9, 0xaa, 0xab, 0xaa, 0xab, 0xaa, 0xa8, 0xaa, 0xa8, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xea, 0xaa, 0xea, 0xaa, 0xea, 0xaa, 0x6a, 0xaa, 0x6a, 0xaa, 0x4a, 0xaa, 0x7a, 0xaa, 0x7a, 0xaa,
0x85, 0x55, 0xa5, 0x55, 0xad, 0x55, 0xa1, 0x55, 0xa8, 0x55, 0xaa, 0xb5, 0xaa, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x0f, 0xfd, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xfc, 0xaa, 0xaa,
0x55, 0x54, 0x55, 0x56, 0x55, 0x52, 0x55, 0x7a, 0x55, 0xea, 0x5c, 0xaa, 0x2a, 0xaa, 0xaa, 0xaa,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x56, 0x55, 0x56,
0x15, 0x55, 0x95, 0x55, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x00, 0x09, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x50, 0x55, 0x55, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x54, 0x00,
0x05, 0x55, 0x09, 0x55, 0x01, 0x55, 0x02, 0x55, 0x00, 0x55, 0x00, 0x95, 0x00, 0x25, 0x00, 0x09,
0xaa, 0xa9, 0xaa, 0xad, 0xaa, 0xa5, 0xaa, 0x85, 0xaa, 0x95, 0xaa, 0xd5, 0xab, 0x55, 0xad, 0x55,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x2a, 0xaa, 0xea, 0xaa, 0x4a, 0xaa, 0x7a, 0xaa, 0x52, 0xaa, 0x56, 0xaa, 0x54, 0xaa, 0x55, 0xaa,
0x2a, 0xaa, 0x72, 0xaa, 0x55, 0xca, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xca, 0xaa, 0x55, 0x7f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x2a, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa8, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa0, 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xaa, 0xaa, 0xa3, 0xa8, 0xd5, 0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x2a, 0x55, 0x6a, 0x55, 0x4a, 0x55, 0x5a, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
};
static PROGMEM prog_uchar splitscreen_pal[] = {
0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x02, 0x1c, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x00, 0x00, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0xff, 0x7f, 0x1c, 0x2a, 0xbc, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x02, 0x1c, 0x2a, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x00, 0x00, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0xff, 0x7f, 0x1c, 0x2a, 0xbc, 0x56, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x2a, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x02, 0x1c, 0x2a, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0x00, 0x00,
0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0x1c, 0x02, 0x1c, 0x2a, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x02, 0x1c, 0x2a, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00,
0xff, 0x7f, 0x1c, 0x02, 0x1c, 0x2a, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0xff, 0x7f, 0x1c, 0x2a, 0xbc, 0x56, 0x00, 0x00, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0xff, 0x7f, 0xbc, 0x56, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x02, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56, 0x1c, 0x2a, 0x1c, 0x02, 0xff, 0x7f, 0xbc, 0x56,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0x4a, 0x29, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0x4a, 0x29, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x4a, 0x29,
0xb5, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x56, 0x00, 0x00, 0xff, 0x7f, 0x00, 0x00,
};

View File

@ -1,205 +0,0 @@
static PROGMEM prog_char ADDER_vertices[] = {
-28,0,63, 28,0,63, 47,0,-37, 47,0,-63, 28,-11,-63, -28,-11,-63, -47,0,-63, -47,0,-37, -28,11,-63, 28,11,-63, -28,11,20, 28,11,20, -28,-11,20, 28,-11,20, -17,4,45, 17,4,45, 17,6,37, -17,6,37
};
static PROGMEM prog_uchar ADDER_edges[] = {
14,17, 10,11, 5,6, 0,7, 8,9, 0,10, 1,11, 1,2, 6,7, 12,13, 5,12, 8,10, 4,13, 7,12, 2,13, 9,11, 7,10, 16,17, 4,5, 1,13, 0,12, 3,9, 2,3, 0,1, 6,8, 15,16, 2,11, 14,15, 3,4
};
static PROGMEM prog_char ANACONDA_vertices[] = {
0,1,-14, -10,-3,-9, -6,-11,0, 6,-11,0, 10,-3,-9, 0,11,-12, -17,3,-3, -10,-9,9, 10,-9,9, 17,3,-3, -10,13,-5, -17,0,7, 0,0,63, 17,0,7, 10,13,-5
};
static PROGMEM prog_uchar ANACONDA_edges[] = {
8,13, 7,12, 1,6, 7,11, 1,2, 5,14, 4,9, 12,13, 6,10, 10,12, 0,4, 2,7, 9,14, 12,14, 6,11, 2,3, 11,12, 0,1, 9,13, 5,10, 8,12, 3,8, 10,14, 0,5, 3,4
};
static PROGMEM prog_char ASP_vertices[] = {
0,-15,0, 0,-7,-38, 37,0,-38, 59,-2,0, 37,-12,24, -37,0,-38, -59,-2,0, -37,-12,24, 22,-6,63, -22,-6,63, 37,12,24, -37,12,24, 0,7,-38, -14,0,-38, 14,0,-38, 0,-3,-38, 0,3,-38
};
static PROGMEM prog_uchar ASP_edges[] = {
6,9, 10,11, 4,8, 5,6, 0,7, 8,10, 8,9, 2,12, 1,2, 6,7, 5,12, 10,12, 13,16, 1,5, 9,11, 0,4, 6,11, 13,15, 2,3, 11,12, 7,9, 0,1, 14,16, 3,8, 14,15, 3,4, 3,10
};
static PROGMEM prog_char ASTEROID_vertices[] = {
0,63,0, -63,-7,0, 0,-63,0, 55,-31,0, 47,39,0, 39,0,47, -31,0,55, 0,23,-59, 0,-39,-47
};
static PROGMEM prog_uchar ASTEROID_edges[] = {
0,1, 1,2, 4,7, 2,6, 3,7, 5,6, 7,8, 0,4, 2,8, 0,7, 1,7, 3,8, 0,6, 1,8, 0,5, 4,5, 2,3, 1,6, 2,5, 3,4, 3,5
};
static PROGMEM prog_char BARREL_vertices[] = {
63,42,0, 63,13,39, 63,-34,23, 63,-34,-23, 63,13,-39, -63,42,0, -63,13,39, -63,-34,23, -63,-34,-23, -63,13,-39
};
static PROGMEM prog_uchar BARREL_edges[] = {
0,1, 1,2, 6,7, 5,9, 5,6, 7,8, 2,7, 1,6, 3,8, 2,3, 0,4, 0,5, 8,9, 4,9, 3,4
};
static PROGMEM prog_char BOA_vertices[] = {
0,0,54, 0,23,-51, 22,-14,-58, -22,-14,-58, -22,23,-34, 22,23,-34, 36,0,-39, 14,-38,-46, -14,-38,-46, -36,0,-39, 0,4,-62, 7,-5,-62, -7,-5,-62
};
static PROGMEM prog_uchar BOA_edges[] = {
10,11, 5,6, 0,7, 8,9, 6,7, 10,12, 1,5, 0,4, 1,10, 2,6, 4,5, 1,4, 3,9, 0,5, 4,9, 0,8, 11,12, 2,7, 3,12, 2,11, 3,8, 0,6, 0,9, 7,8
};
static PROGMEM prog_char BOULDER_vertices[] = {
-29,59,-17, 48,11,19, 45,-11,-19, 3,0,-63, -45,54,-48, 8,-16,21, 32,27,-48
};
static PROGMEM prog_uchar BOULDER_edges[] = {
0,1, 1,2, 2,6, 4,6, 0,6, 4,5, 1,6, 1,5, 0,5, 3,6, 0,4, 2,3, 2,5, 3,4, 3,5
};
static PROGMEM prog_char CAPSULE_vertices[] = {
-12,0,63, -12,-24,-21, -12,24,-21, 36,0,0
};
static PROGMEM prog_uchar CAPSULE_edges[] = {
1,2, 0,1, 1,3, 2,3, 0,3, 0,2
};
static PROGMEM prog_char COBRA_vertices[] = {
15,0,37, -15,0,37, 0,12,11, -59,-1,-3, 59,-1,-3, -43,7,-19, 43,7,-19, 63,-3,-19, -63,-3,-19, 0,12,-19, -15,-11,-19, 15,-11,-19, -17,3,-19, -3,5,-19, 3,5,-19, 17,3,-19, 17,-5,-19, 3,-7,-19, -3,-7,-19, -17,-5,-19, 0,0,37, 0,0,44, -39,-2,-19, -39,2,-19, -43,0,-19, 39,2,-19, 43,0,-19, 39,-2,-19
};
static PROGMEM prog_uchar COBRA_edges[] = {
5,9, 6,9, 1,3, 10,11, 4,7, 14,17, 25,27, 18,19, 7,11, 2,5, 5,8, 1,2, 6,7, 2,9, 12,13, 8,10, 25,26, 1,5, 0,11, 0,4, 1,10, 16,17, 2,6, 22,24, 22,23, 14,15, 23,24, 3,5, 0,1, 26,27, 4,6, 12,19, 3,8, 0,6, 13,18, 15,16, 0,2
};
static PROGMEM prog_char COBRAMK1_vertices[] = {
-17,0,47, 17,0,47, -63,0,6, 63,0,6, -30,11,-36, 30,11,-36, -51,-11,-36, 51,-11,-36, 0,11,-5, 0,0,47, 0,0,57
};
static PROGMEM prog_uchar COBRAMK1_edges[] = {
0,1, 2,6, 6,7, 4,6, 4,8, 4,5, 5,7, 2,4, 0,6, 1,8, 1,3, 1,7, 3,7, 0,8, 0,2, 5,8, 3,5
};
static PROGMEM prog_char CONSTRICTOR_vertices[] = {
15,-5,63, -15,-5,63, -42,-5,31, -42,-5,-31, -15,10,-31, 15,10,-31, 42,-5,-31, 42,-5,31, 15,10,3, -15,10,3, 15,-5,48, -15,-5,48, 19,-5,-19, -19,-5,-19, 11,-5,-11, -11,-5,-11, 0,-5,0
};
static PROGMEM prog_uchar CONSTRICTOR_edges[] = {
5,6, 0,7, 8,9, 5,8, 1,2, 6,7, 2,9, 10,12, 3,6, 11,13, 12,14, 4,5, 13,15, 3,9, 2,3, 1,9, 4,9, 0,8, 0,1, 6,8, 7,8, 10,14, 11,15, 3,4
};
static PROGMEM prog_char CORIOLIS_vertices[] = {
63,0,63, 0,63,63, -63,0,63, 0,-63,63, 63,-63,0, 63,63,0, -63,63,0, -63,-63,0, 63,0,-63, 0,63,-63, -63,0,-63, 0,-63,-63, 3,-11,63, 3,11,63, -3,11,63, -3,-11,63
};
static PROGMEM prog_uchar CORIOLIS_edges[] = {
5,9, 6,9, 10,11, 4,8, 8,9, 1,6, 7,11, 3,7, 0,3, 5,8, 1,2, 12,13, 6,10, 1,5, 7,10, 0,4, 14,15, 2,7, 2,6, 8,11, 9,10, 2,3, 4,11, 0,1, 12,15, 13,14, 0,5, 3,4
};
static PROGMEM prog_char COUGAR_vertices[] = {
0,4,63, -18,0,37, -37,0,-37, 0,13,-37, 0,-13,-37, 18,0,37, 37,0,-37, -33,0,52, -56,0,-18, 33,0,52, 56,0,-18, 0,6,32, 0,7,23, -11,1,42, 11,1,42, -9,5,-37, -9,-5,-37, 9,-5,-37, 9,5,-37, 0,0,-37
};
static PROGMEM prog_uchar COUGAR_edges[] = {
5,9, 5,6, 2,8, 18,19, 11,14, 15,19, 0,3, 1,2, 12,13, 6,10, 3,6, 11,13, 17,18, 17,19, 12,14, 4,5, 1,4, 9,10, 2,3, 16,19, 11,12, 0,1, 4,6, 7,8, 1,7, 0,5, 15,16, 2,4
};
static PROGMEM prog_char DODO_vertices[] = {
0,38,50, 37,11,50, 22,-31,50, -22,-31,50, -37,11,50, 0,63,11, 59,19,11, 37,-50,11, -37,-50,11, -59,19,11, 37,50,-11, 59,-19,-11, 0,-63,-11, -59,-19,-11, -37,50,-11, 22,31,-50, 37,-11,-50, 0,-38,-50, -37,-11,-50, -22,31,-50, -4,8,50, -4,-8,50, 4,8,50, 4,-8,50
};
static PROGMEM prog_uchar DODO_edges[] = {
11,16, 8,13, 7,12, 10,15, 1,6, 7,11, 15,19, 18,19, 1,2, 5,14, 4,9, 20,21, 6,10, 14,19, 12,17, 0,4, 2,7, 9,14, 20,22, 6,11, 21,23, 22,23, 2,3, 17,18, 16,17, 0,1, 9,13, 5,10, 8,12, 15,16, 3,8, 13,18, 0,5, 3,4
};
static PROGMEM prog_char FERDELANCE_vertices[] = {
0,-8,63, -23,-8,-2, -7,-8,-30, 7,-8,-30, 23,-8,-2, -23,8,-2, -7,1,-30, 7,1,-30, 23,8,-2, 0,10,-11, -1,-6,56, -15,4,10, -9,8,-2, 1,-6,56, 15,4,10, 9,8,-2, 0,-8,-11, -8,-8,25, 8,-8,25
};
static PROGMEM prog_uchar FERDELANCE_edges[] = {
5,9, 6,9, 10,11, 4,8, 5,6, 8,9, 3,7, 1,2, 6,7, 10,12, 1,5, 0,4, 7,9, 16,18, 17,18, 2,6, 13,15, 14,15, 0,5, 0,8, 11,12, 16,17, 0,1, 13,14, 7,8, 2,3, 3,4
};
static PROGMEM prog_char GECKO_vertices[] = {
-9,-3,44, 9,-3,44, -15,7,-21, 15,7,-21, -63,0,-2, 63,0,-2, -19,-13,-21, 19,-13,-21, -7,-5,31, 7,-5,31, -7,-12,-15, 7,-12,-15
};
static PROGMEM prog_uchar GECKO_edges[] = {
0,1, 1,3, 6,7, 4,6, 0,6, 5,7, 2,4, 3,7, 1,5, 2,6, 2,3, 1,7, 0,4, 0,2, 3,5
};
static PROGMEM prog_char KRAIT_vertices[] = {
0,0,63, 0,11,-31, 0,-11,-31, 59,0,-1, -59,0,-1, 59,0,57, -59,0,57, 0,3,34, 0,4,24, -11,4,12, 11,4,12, 11,7,-25, 11,-7,-25, 23,0,-19, -11,7,-25, -11,-7,-25, -23,0,-19
};
static PROGMEM prog_uchar KRAIT_edges[] = {
0,1, 1,2, 1,3, 14,16, 12,13, 15,16, 8,10, 1,4, 2,4, 8,9, 2,3, 7,10, 0,4, 14,15, 0,3, 7,9, 11,12, 0,2, 7,8, 11,13
};
static PROGMEM prog_char MAMBA_vertices[] = {
0,0,63, -63,-7,-31, -31,7,-31, 31,7,-31, 63,-7,-31, -3,3,15, 3,3,15, 7,2,27, -7,2,27, -19,-3,15, 19,-3,15, -23,-6,-19, -15,-6,-19, 15,-6,-19, 23,-6,-19, -7,3,-31, 7,3,-31, 7,-3,-31, -7,-3,-31, -31,3,-31, 31,3,-31, 35,-3,-31, -35,-3,-31, -37,0,-31, 37,0,-31
};
static PROGMEM prog_uchar MAMBA_edges[] = {
22,23, 5,6, 19,22, 0,3, 5,8, 1,2, 6,7, 20,21, 9,11, 15,18, 0,4, 17,18, 10,13, 1,4, 2,3, 3,4, 11,12, 16,17, 0,1, 20,24, 13,14, 15,16, 10,14, 21,24, 19,23, 7,8, 0,2, 9,12
};
static PROGMEM prog_char MISSILE_vertices[] = {
0,0,63, 7,7,33, -7,7,33, -7,-7,33, 7,-7,33, 7,7,-40, -7,7,-40, -7,-7,-40, 7,-7,-40, 11,11,-40, -11,11,-40, -11,-11,-40, 11,-11,-40, 7,7,-11, -7,7,-11, -7,-7,-11, 7,-7,-11
};
static PROGMEM prog_uchar MISSILE_edges[] = {
5,9, 4,8, 5,6, 12,16, 5,13, 7,11, 3,7, 0,3, 5,8, 6,14, 1,2, 6,7, 7,15, 6,10, 1,5, 0,4, 8,16, 2,6, 1,4, 2,3, 0,1, 9,13, 8,12, 3,4, 10,14, 11,15, 7,8, 0,2
};
static PROGMEM prog_char MORAY_vertices[] = {
14,0,63, -14,0,63, 0,17,-38, -58,0,0, 58,0,0, 29,-26,-9, -29,-26,-9, -8,-3,-24, 8,-3,-24, 0,-17,-15, 12,2,47, 5,0,63, -12,2,47, -5,0,63
};
static PROGMEM prog_uchar MORAY_edges[] = {
1,2, 0,1, 1,3, 0,5, 5,6, 2,4, 8,9, 4,5, 2,6, 2,3, 3,6, 0,4, 1,6, 2,5, 7,8, 0,2, 7,9
};
static PROGMEM prog_char PLATELET_vertices[] = {
-20,-30,-12, -20,52,-12, 26,43,15, 13,-63,8
};
static PROGMEM prog_uchar PLATELET_edges[] = {
0,1, 1,2, 0,3, 2,3
};
static PROGMEM prog_char PYTHON_vertices[] = {
0,0,63, 0,13,13, 27,0,-4, -27,0,-4, 0,13,-9, 0,6,-31, -13,0,-31, 13,0,-31, 0,-13,13, 0,-13,-9, 0,-6,-31
};
static PROGMEM prog_uchar PYTHON_edges[] = {
1,3, 5,6, 2,8, 8,9, 0,3, 1,2, 2,9, 6,10, 3,6, 2,7, 7,10, 4,5, 1,4, 9,10, 3,9, 0,8, 0,1, 5,7, 0,2, 3,8, 3,4, 2,4
};
static PROGMEM prog_char SIDEWINDER_vertices[] = {
-31,0,35, 31,0,35, 63,0,-27, -63,0,-27, 0,15,-27, 0,-15,-27, -11,5,-27, 11,5,-27, 11,-5,-27, -11,-5,-27
};
static PROGMEM prog_uchar SIDEWINDER_edges[] = {
0,1, 1,2, 2,5, 6,7, 7,8, 6,9, 1,4, 8,9, 1,5, 0,5, 0,4, 0,3, 3,4, 2,4, 3,5
};
static PROGMEM prog_char SHUTTLE_vertices[] = {
0,-30,41, -30,0,41, 0,32,41, 32,0,41, -36,-36,-48, -36,36,-48, 36,36,-48, 36,-36,-48, 9,0,-48, 0,-3,-48, -9,0,-48, 0,5,-48, 0,-16,63, 5,-1,55, 7,19,45, 19,7,45, -5,-1,55, -5,19,45, -18,7,45
};
static PROGMEM prog_uchar SHUTTLE_edges[] = {
4,7, 10,11, 5,6, 0,7, 8,9, 2,12, 3,7, 2,5, 0,3, 1,2, 6,7, 1,5, 3,6, 0,4, 16,18, 16,17, 2,6, 4,5, 8,11, 13,15, 1,4, 0,12, 9,10, 2,3, 0,1, 3,12, 1,12, 13,14, 17,18, 14,15
};
static PROGMEM prog_char THARGLET_vertices[] = {
-14,0,63, -14,-59,18, -14,-37,-50, -14,37,-50, -14,59,18, 14,0,-12, 14,-15,-23, 14,-9,-40, 14,9,-40, 14,15,-23
};
static PROGMEM prog_uchar THARGLET_edges[] = {
0,1, 1,2, 6,7, 5,9, 5,6, 7,8, 2,7, 1,6, 3,8, 2,3, 0,4, 0,5, 8,9, 4,9, 3,4
};
static PROGMEM prog_char THARGOID_vertices[] = {
12,-18,18, 12,-26,0, 12,-18,-18, 12,0,-26, 12,18,-18, 12,26,0, 12,18,18, 12,0,26, -9,-44,44, -9,-63,0, -9,-44,-44, -9,0,-63, -9,44,-44, -9,63,0, -9,44,44, -9,0,63, -9,24,30, -9,24,-30, -9,-24,-30, -9,-24,30
};
static PROGMEM prog_uchar THARGOID_edges[] = {
10,11, 5,6, 5,13, 0,7, 8,9, 4,12, 6,14, 1,2, 0,8, 6,7, 7,15, 12,13, 8,15, 4,5, 3,11, 9,10, 2,3, 1,9, 2,10, 11,12, 0,1, 13,14, 14,15, 3,4
};
static PROGMEM prog_char TRANSPORTER_vertices[] = {
0,19,-49, -47,7,-49, -53,-5,-49, -47,-15,-49, 49,-15,-49, 55,-5,-49, 49,7,-49, 0,11,22, -57,-1,22, -63,-15,22, 63,-15,22, 57,-1,22, -21,-3,57, -24,-15,57, 26,-15,57, 21,-3,57, -9,11,3, -34,5,3, -9,13,-13, -34,7,-13, -21,11,-26, -21,9,-13, 9,13,-26, 34,7,-26, 21,9,-13, 9,11,-5, 34,5,-5, 21,7,15, 21,9,-5, -30,-15,-24, -30,-15,30, 32,-15,-24, 32,-15,30, -24,-5,-49, 24,-5,-49, 17,5,-49, -15,5,-49
};
static PROGMEM prog_uchar TRANSPORTER_edges[] = {
10,11, 5,6, 0,7, 8,9, 34,35, 7,11, 1,2, 7,15, 2,9, 12,13, 6,11, 35,36, 4,10, 4,5, 33,34, 3,9, 2,3, 33,36, 7,12, 11,15, 0,1, 9,13, 12,15, 5,10, 8,12, 13,14, 3,4, 0,6, 1,8, 10,14, 14,15, 7,8
};
static PROGMEM prog_char VIPER_vertices[] = {
0,0,63, 0,14,21, 0,-14,21, 42,0,-21, -42,0,-21, 21,-14,-21, -21,-14,-21, 21,14,-21, -21,14,-21, -28,0,-21, 28,0,-21, 7,7,-21, -7,7,-21, -7,-7,-21, 7,-7,-21
};
static PROGMEM prog_uchar VIPER_edges[] = {
0,1, 9,13, 2,5, 2,6, 10,11, 4,6, 4,8, 5,6, 1,7, 12,13, 1,8, 10,14, 11,14, 0,4, 3,7, 0,3, 7,8, 0,2, 9,12, 3,5
};
static PROGMEM prog_char WORM_vertices[] = {
18,-18,63, -18,-18,63, 9,10,27, -9,10,27, 27,-18,45, -27,-18,45, 46,-18,-45, -46,-18,-45, 14,25,-45, -14,25,-45
};
static PROGMEM prog_uchar WORM_edges[] = {
0,1, 1,3, 6,7, 6,8, 4,6, 2,8, 5,7, 2,4, 8,9, 1,5, 3,9, 2,3, 0,4, 7,9, 0,2, 3,5
};
static ship eliteships[] = {
{ "ADDER", 18, ADDER_vertices, 29, ADDER_edges },
{ "ANACONDA", 15, ANACONDA_vertices, 25, ANACONDA_edges },
{ "ASP", 17, ASP_vertices, 27, ASP_edges },
{ "ASTEROID", 9, ASTEROID_vertices, 21, ASTEROID_edges },
{ "BARREL", 10, BARREL_vertices, 15, BARREL_edges },
{ "BOA", 13, BOA_vertices, 24, BOA_edges },
{ "BOULDER", 7, BOULDER_vertices, 15, BOULDER_edges },
{ "CAPSULE", 4, CAPSULE_vertices, 6, CAPSULE_edges },
{ "COBRA", 28, COBRA_vertices, 37, COBRA_edges },
{ "COBRAMK1", 11, COBRAMK1_vertices, 17, COBRAMK1_edges },
{ "CONSTRICTOR", 17, CONSTRICTOR_vertices, 24, CONSTRICTOR_edges },
{ "CORIOLIS", 16, CORIOLIS_vertices, 28, CORIOLIS_edges },
{ "COUGAR", 20, COUGAR_vertices, 28, COUGAR_edges },
{ "DODO", 24, DODO_vertices, 34, DODO_edges },
{ "FERDELANCE", 19, FERDELANCE_vertices, 27, FERDELANCE_edges },
{ "GECKO", 12, GECKO_vertices, 15, GECKO_edges },
{ "KRAIT", 17, KRAIT_vertices, 20, KRAIT_edges },
{ "MAMBA", 25, MAMBA_vertices, 28, MAMBA_edges },
{ "MISSILE", 17, MISSILE_vertices, 28, MISSILE_edges },
{ "MORAY", 14, MORAY_vertices, 17, MORAY_edges },
{ "PLATELET", 4, PLATELET_vertices, 4, PLATELET_edges },
{ "PYTHON", 11, PYTHON_vertices, 22, PYTHON_edges },
{ "SIDEWINDER", 10, SIDEWINDER_vertices, 15, SIDEWINDER_edges },
{ "SHUTTLE", 19, SHUTTLE_vertices, 30, SHUTTLE_edges },
{ "THARGLET", 10, THARGLET_vertices, 15, THARGLET_edges },
{ "THARGOID", 20, THARGOID_vertices, 24, THARGOID_edges },
{ "TRANSPORTER", 37, TRANSPORTER_vertices, 32, TRANSPORTER_edges },
{ "VIPER", 15, VIPER_vertices, 20, VIPER_edges },
{ "WORM", 10, WORM_vertices, 16, WORM_edges },
};

View File

@ -1,25 +0,0 @@
static PROGMEM prog_uchar eraser_code[] = {
0x81,0x15,
0x98,0xA8,
0x00,0x60,
0x00,0x6C,
0x47,0x61,
0xFF,0xBF,
0xFF,0xFF,
0x81,0x60,
0x00,0x6C,
0x81,0x6B,
0x03,0x63,
0x81,0x61,
0x23,0x60,
0x03,0x61,
0x00,0x6A,
0x81,0x67,
0x87,0x35,
0x00,0x80,
0x97,0xA8,
0x23,0x60,
0x03,0x61,
0x95,0x15,
0x0C,0x70,
};

View File

@ -1,109 +0,0 @@
static PROGMEM prog_uchar wireframe_code[] = {
0xE0,0x15,
0x44,0x60,
0x0F,0x80,
0x03,0x63,
0x81,0x6B,
0x04,0x80,
0x03,0x69,
0xF0,0x8F,
0x03,0x63,
0x03,0x64,
0x81,0x6B,
0x30,0x80,
0x03,0x63,
0x00,0x6E,
0x03,0x64,
0x00,0xC0,
0x03,0x64,
0x81,0x60,
0x00,0x6C,
0x98,0xA8,
0x00,0x60,
0x00,0x6C,
0x8D,0x6B,
0x05,0x80,
0x03,0x69,
0x06,0x80,
0x03,0x63,
0x03,0x69,
0x03,0x64,
0x80,0x61,
0x23,0x60,
0x0F,0x71,
0x00,0x66,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x6C,
0x80,0x61,
0xA1,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0xFF,0x80,
0x0F,0x73,
0x96,0xA8,
0x00,0x60,
0x00,0x6C,
0xA0,0x55,
0x47,0x61,
0x90,0xA8,
0xA3,0x55,
0x95,0xA8,
0x00,0x60,
0x00,0x6C,
0x01,0x80,
0x03,0x69,
0x81,0x61,
0xAB,0x55,
0x92,0xA8,
0x00,0x60,
0x00,0x6C,
0x03,0x65,
0xDE,0x35,
0x81,0x61,
0x94,0xA8,
0x00,0x60,
0x00,0x6C,
0xC6,0x35,
0x00,0x6E,
0x81,0x55,
0x81,0x6B,
0x03,0x62,
0x81,0x60,
0x00,0x80,
0x03,0x68,
0xD7,0x35,
0x95,0xA8,
0x00,0x60,
0x00,0x6C,
0x03,0x62,
0x97,0xA8,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0xA1,0x55,
0xD8,0x15,
0x01,0x80,
0x47,0x61,
0x80,0x61,
0x8D,0x6B,
0x03,0x62,
0x80,0x61,
0xB9,0x15,
0x8D,0x6B,
0x0F,0x71,
0x97,0xA8,
0x00,0x60,
0x00,0x6C,
0xE0,0x35,
0xAD,0x55,
0x00,0x80,
0x97,0xA8,
0x23,0x60,
0x03,0x61,
0xE0,0x15,
0x0C,0x70,
};

View File

@ -1,263 +0,0 @@
#include <SPI.h>
#include <GD.h>
////////////////////////////////////////////////////////////////////////////////
// Plotter
////////////////////////////////////////////////////////////////////////////////
#include "wireframe.h"
#include "eraser.h"
// replicate a 2-bit color across the whole byte.
byte replicate(byte color)
{
return (color << 6) | (color << 4) | (color << 2) | color;
}
#define BLACK RGB(0,0,0)
#define WHITE RGB(255,255,255)
class PlotterClass
{
public:
void begin();
void line(byte x0, byte y0, byte x1, byte y1);
void show();
private:
byte flip;
byte plotting;
void erase();
void waitready();
};
PlotterClass Plotter;
void PlotterClass::waitready()
{
while (GD.rd(COMM+7))
;
}
void PlotterClass::erase()
{
byte color = flip ? 1 : 2;
plotting = 0;
GD.wr(J1_RESET, 1);
GD.wr(COMM+7, 1);
GD.wr(COMM+8, replicate(color ^ 3));
GD.microcode(eraser_code, sizeof(eraser_code));
}
void PlotterClass::begin()
{
// Draw 256 sprites left to right, top to bottom, all in 4-color
// palette mode. By doing them in column-wise order, the address
// calculation in setpixel is made simpler.
// First 64 use bits 0-1, next 64 use bits 2-4, etc.
// This gives a 256 x 256 4-color bitmap.
unsigned int i;
for (i = 0; i < 256; i++) {
int x = 72 + 16 * ((i >> 4) & 15);
int y = 22 + 16 * (i & 15);
int image = i & 63; /* image 0-63 */
int pal = 3 - (i >> 6); /* palettes bits in columns 3,2,1,0 */
GD.sprite(i, x, y, image, 0x8 | (pal << 1), 0);
}
flip = 0;
plotting = 0;
erase();
show();
}
void PlotterClass::show()
{
waitready();
if (flip == 1) {
GD.wr16(PALETTE4A, BLACK);
GD.wr16(PALETTE4A + 2, WHITE);
GD.wr16(PALETTE4A + 4, BLACK);
GD.wr16(PALETTE4A + 6, WHITE);
} else {
GD.wr16(PALETTE4A, BLACK);
GD.wr16(PALETTE4A + 2, BLACK);
GD.wr16(PALETTE4A + 4, WHITE);
GD.wr16(PALETTE4A + 6, WHITE);
}
flip ^= 1;
erase();
}
void PlotterClass::line(byte x0, byte y0, byte x1, byte y1)
{
byte swap;
#define SWAP(a, b) (swap = (a), (a) = (b), (b) = swap)
byte steep = abs(y1 - y0) > abs(x1 - x0);
if (steep) {
SWAP(x0, y0);
SWAP(x1, y1);
}
if (x0 > x1) {
SWAP(x0, x1);
SWAP(y0, y1);
}
int deltax = x1 - x0;
int deltay = abs(y1 - y0);
int error = deltax / 2;
signed char ystep;
if (y0 < y1)
ystep = 1;
else
ystep = -1;
byte x;
byte y = y0;
waitready();
if (!plotting) {
GD.microcode(wireframe_code, sizeof(wireframe_code));
plotting = 1;
byte color = flip ? 1 : 2;
GD.wr(COMM+8, color << 6);
}
GD.__wstart(COMM+0);
SPI.transfer(x0);
SPI.transfer(y0);
SPI.transfer(x1);
SPI.transfer(y1);
SPI.transfer(steep);
SPI.transfer(deltax);
SPI.transfer(deltay);
SPI.transfer(ystep);
GD.__end();
}
////////////////////////////////////////////////////////////////////////////////
// 3D Projection
////////////////////////////////////////////////////////////////////////////////
struct ship
{
const char *name;
byte nvertices;
prog_char *vertices;
byte nedges;
prog_uchar *edges;
};
#include "eliteships.h"
#define NSHIPS (sizeof(eliteships) / sizeof(eliteships[0]))
static float mat[9];
// Taken from glRotate()
static void rotation(float phi)
{
float x = 0.57735026918962573;
float y = 0.57735026918962573;
float z = 0.57735026918962573;
float s = sin(phi);
float c = cos(phi);
mat[0] = x*x*(1-c)+c;
mat[1] = x*y*(1-c)-z*s;
mat[2] = x*z*(1-c)+y*s;
mat[3] = y*x*(1-c)+z*s;
mat[4] = y*y*(1-c)+c;
mat[5] = y*z*(1-c)-x*s;
mat[6] = x*z*(1-c)-y*s;
mat[7] = y*z*(1-c)+x*s;
mat[8] = z*z*(1-c)+c;
}
static byte projected[40 * 2];
void project(struct ship *s, float distance)
{
byte vx;
prog_char *pm = s->vertices;
prog_char *pm_e = pm + (s->nvertices * 3);
byte *dst = projected;
signed char x, y, z;
while (pm < pm_e) {
x = pgm_read_byte_near(pm++);
y = pgm_read_byte_near(pm++);
z = pgm_read_byte_near(pm++);
float xx = x * mat[0] + y * mat[3] + z * mat[6];
float yy = x * mat[1] + y * mat[4] + z * mat[7];
float zz = x * mat[2] + y * mat[5] + z * mat[8] + distance;
float q = 140 / (140 + zz);
*dst++ = byte(128 + xx * q);
*dst++ = byte(128 + yy * q);
}
}
void draw(struct ship *s, float distance)
{
project(s, distance);
prog_uchar *pe = s->edges;
prog_uchar *pe_e = pe + (s->nedges * 2);
while (pe < pe_e) {
byte *v0 = &projected[pgm_read_byte_near(pe++) << 1];
byte *v1 = &projected[pgm_read_byte_near(pe++) << 1];
Plotter.line(v0[0], v0[1], v1[0], v1[1]);
}
}
void setup()
{
GD.begin();
GD.ascii();
GD.putstr(0, 0, "Accelerated wireframe");
Plotter.begin();
}
static byte sn; // Ship number, 0-NSHIPS
static float phi; // Current rotation angle
// Draw one frame of ship
void cycle(float distance)
{
rotation(phi);
phi += 0.02;
draw(&eliteships[sn], distance);
// GD.waitvblank(); // uncomment this to sync to 72Hz frame rate
Plotter.show();
static byte every;
if (++every == 4) {
static long tprev;
long t = micros();
every = 0;
char msg[30];
int fps10 = int(4 * 10000000UL / (t - tprev));
sprintf(msg, "%3d.%d fps ", fps10 / 10, fps10 % 10);
GD.putstr(41, 0, msg);
tprev = t;
}
}
void loop()
{
const char *name = eliteships[sn].name;
GD.putstr(0, 36, " ");
GD.putstr(25 - strlen(name) / 2, 36, name);
int d;
for (d = 0; d < 100; d++)
cycle(1000 - 10 * d);
for (d = 0; d < 72*6; d++)
cycle(0.0);
for (d = 0; d < 100; d++)
cycle(10 * d);
sn = (sn + 1) % NSHIPS;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,937 +0,0 @@
#include <SPI.h>
#include <GD.h>
// ----------------------------------------------------------------------
// qrand: quick random numbers
// ----------------------------------------------------------------------
static uint16_t lfsr = 1;
static void qrandSeed(int seed)
{
if (seed) {
lfsr = seed;
} else {
lfsr = 0x947;
}
}
static byte qrand1() // a random bit
{
lfsr = (lfsr >> 1) ^ (-(lfsr & 1) & 0xb400);
return lfsr & 1;
}
static byte qrand(byte n) // n random bits
{
byte r = 0;
while (n--)
r = (r << 1) | qrand1();
return r;
}
// ----------------------------------------------------------------------
// controller: buttons on Arduino pins 3,4,5,6
// ----------------------------------------------------------------------
static void controller_init()
{
// Configure input pins with internal pullups
byte i;
for (i = 3; i < 7; i++) {
pinMode(i, INPUT);
digitalWrite(i, HIGH);
}
}
#define CONTROL_LEFT 1
#define CONTROL_RIGHT 2
#define CONTROL_UP 4
#define CONTROL_DOWN 8
static byte controller_sense(uint16_t clock)
{
byte r = 0;
if (!digitalRead(5))
r |= CONTROL_DOWN;
if (!digitalRead(4))
r |= CONTROL_UP;
if (!digitalRead(6))
r |= CONTROL_LEFT;
if (!digitalRead(3))
r |= CONTROL_RIGHT;
return r;
}
// Swap color's red and blue channels
uint16_t swapRB(uint16_t color)
{
byte r = 31 & (color >> 10);
byte g = 31 & (color >> 5);
byte b = 31 & color;
return (color & 0x8000) | (b << 10) | (g << 5) | r;
}
// Swap color's red and green channels
uint16_t swapRG(uint16_t color)
{
byte r = 31 & (color >> 10);
byte g = 31 & (color >> 5);
byte b = 31 & color;
return (color & 0x8000) | (g << 10) | (r << 5) | b;
}
#include "asteroidgraphics.h"
#include "splitscreen.h"
static void update_score();
// [int(127 * math.sin(math.pi * 2 * i / 16)) for i in range(16)]
static PROGMEM prog_uchar charsin[16] = {0, 48, 89, 117, 127, 117, 89, 48, 0, -48, -89, -117, -127, -117, -89, -48};
#define qsin(a) (signed char)pgm_read_byte_near(charsin + ((a) & 15))
#define qcos(a) qsin((a) + 4)
static char spr2obj[256]; // Maps sprites to owning objects
/*
The general idea is that an object table ``objects`` has an entry for
each drawn thing on screen (e.g. player, missile, rock, explosion).
Each class of object has a ``handler`` function that does the necessary
housekeeping and draws the actual sprites.
As part of the behavior, some classes need to know if they have collided
with anything. In particular the rocks need to know if they have collided
with the player or a missile. The `collide` member points to the
colliding sprite.
*/
struct object {
int x, y;
byte handler, state;
byte collide;
} objects[128];
#define COORD(c) ((c) << 4)
static char explosions = -1;
static char enemies = -1;
static char missiles = -1;
static void push(char *stk, byte i)
{
objects[i].state = *stk;
*stk = i;
}
static char pop(char *stk)
{
char r = *stk;
if (0 <= r) {
*stk = objects[r].state;
}
return r;
}
byte rr[4] = { 0,3,6,5 };
static struct {
byte boing, boom, pop;
byte thrust;
byte bass;
} sounds;
static int player_vx, player_vy; // Player velocity
static int player_invincible, player_dying;
static byte lives;
static long score;
static byte level;
// Move object po by velocity (vx, vy), optionally keeping in
// player's frame.
// Returns true if the object wrapped screen edge
static bool move(struct object *po, char vx, char vy, byte playerframe = 1)
{
bool r = 0;
if (playerframe) {
po->x += (vx - player_vx);
po->y += (vy - player_vy);
} else {
po->x += vx;
po->y += vy;
}
if (po->x > COORD(416))
r = 1, po->x -= COORD(432);
else if (po->x < COORD(-16))
r = 1, po->x += COORD(432);
if (po->y > COORD(316))
r = 1, po->y -= COORD(332);
else if (po->y < COORD(-16))
r = 1, po->y += COORD(332);
return r;
}
#define HANDLE_NULL 0
#define HANDLE_ROCK0 1
#define HANDLE_ROCK1 2
#define HANDLE_BANG0 3
#define HANDLE_BANG1 4
#define HANDLE_PLAYER 5
#define HANDLE_MISSILE 6
// Expire object i, and return it to the free stk
static void expire(char *stk, byte i)
{
objects[i].handler = HANDLE_NULL;
push(stk, i);
}
static void handle_null(byte i, byte state, uint16_t clock)
{
}
static void handle_player(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte angle = (po->state & 15);
byte rot1 = (angle & 3);
byte rot2 = rr[3 & (angle >> 2)];
if (!player_dying && (player_invincible & 1) == 0)
draw_player(200, 150, rot1, rot2);
static byte prev_control;
byte control = controller_sense(clock);
char thrust_x, thrust_y;
if (!player_dying && control & CONTROL_DOWN) { // thrust
byte flame_angle = angle ^ 8;
byte d;
for (d = 9; d > 5; d--) {
int flamex = 201 - (((d + (clock&3)) * qsin(flame_angle)) >> 5);
int flamey = 150 - (((d + (clock&3)) * qcos(flame_angle)) >> 5);
if ((player_invincible & 1) == 0)
draw_sparkr(flamex, flamey, rot1, rot2, 1); // collision class K
}
thrust_x = -qsin(angle);
thrust_y = -qcos(angle);
sounds.thrust = 1;
} else {
thrust_x = thrust_y = 0;
sounds.thrust = 0;
}
player_vx = ((31 * player_vx) + thrust_x) / 32;
player_vy = ((31 * player_vy) + thrust_y) / 32;
po->x += player_vx;
po->y += player_vy;
if (clock & 1) {
char rotate = (512 - analogRead(0)) / 400;
if (control & CONTROL_LEFT)
rotate++;
if (control & CONTROL_RIGHT)
rotate--;
po->state = ((angle + rotate) & 15);
}
if (!player_dying &&
!(prev_control & CONTROL_UP) &&
(control & CONTROL_UP)) { // shoot!
char e = pop(&missiles);
if (0 <= e) {
objects[e].x = COORD(200);
objects[e].y = COORD(150);
objects[e].state = po->state;
objects[e].handler = HANDLE_MISSILE;
}
sounds.boing = 1;
}
prev_control = control;
if (player_invincible)
--player_invincible;
if (player_dying) {
if (--player_dying == 0) {
--lives;
update_score();
if (lives != 0) {
player_invincible = 48;
}
}
}
}
static void handle_missile(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte angle = (po->state & 15);
byte rot1 = (angle & 3);
byte rot2 = rr[3 & (angle >> 2)];
draw_sparkr(po->x >> 4, po->y >> 4, rot1, rot2);
char vx = -qsin(po->state), vy = -qcos(po->state);
if (move(po, vx, vy, 0)) {
expire(&missiles, i);
}
}
static void explodehere(struct object *po, byte handler, uint16_t clock)
{
char e = pop(&explosions);
if (0 <= e) {
objects[e].x = po->x;
objects[e].y = po->y;
objects[e].handler = handler;
objects[e].state = clock;
}
}
static void killplayer(uint16_t clock)
{
if (!player_invincible && !player_dying) {
char e = pop(&explosions);
if (0 <= e) {
objects[e].x = COORD(200);
objects[e].y = COORD(150);
objects[e].handler = HANDLE_BANG1;
objects[e].state = clock;
}
player_dying = 2 * 36;
sounds.boom = 1;
sounds.pop = 1;
}
}
static byte commonrock(uint16_t clock, byte i, byte speed, void df(int x, int y, byte anim, byte rot, byte jk))
{
struct object *po = &objects[i];
byte move_angle = po->state >> 4;
char vx = (speed * -qsin(move_angle)) >> 6, vy = (speed * -qcos(move_angle)) >> 6;
move(po, vx, vy);
byte angle = (clock * speed) >> 4;
if (po->state & 1)
angle = ~angle;
byte rot1 = (angle & 3);
byte rot2 = rr[3 & (angle >> 2)];
df(po->x >> 4, po->y >> 4, rot1, rot2, 1);
if (po->collide != 0xff) {
struct object *other = &objects[po->collide];
switch (other->handler) {
case HANDLE_PLAYER:
killplayer(clock);
break;
case HANDLE_MISSILE:
expire(&missiles, po->collide); // missile is dead
expire(&enemies, i);
return 1;
}
}
return 0;
}
static void handle_rock0(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte speed = 12 + (po->state & 7);
if (commonrock(clock, i, speed, draw_rock0r)) {
explodehere(po, HANDLE_BANG0, clock);
score += 10;
sounds.pop = 1;
}
}
static void handle_rock1(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte speed = 6 + (po->state & 3);
if (commonrock(clock, i, speed, draw_rock1r)) {
int j;
for (j = 0; j < 4; j++) {
char e = pop(&enemies);
if (0 < e) {
objects[e].x = po->x;
objects[e].y = po->y;
objects[e].handler = HANDLE_ROCK0;
objects[e].state = (j << 6) + qrand(6); // spread fragments across 4 quadrants
}
}
explodehere(po, HANDLE_BANG1, clock);
score += 30;
sounds.boom = 1;
}
}
static void handle_bang0(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
move(po, 0, 0);
byte anim = ((0xff & clock) - state) >> 1;
if (anim < EXPLODE16_FRAMES)
draw_explode16(po->x >> 4, po->y >> 4, anim, 0);
else
expire(&explosions, i);
}
static void handle_bang1(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
move(po, 0, 0);
byte anim = ((0xff & clock) - state) >> 1;
byte rot = 7 & i;
if (anim < EXPLODE32_FRAMES)
draw_explode32(po->x >> 4, po->y >> 4, anim, rot);
else
expire(&explosions, i);
}
typedef void (*handler)(byte, byte, uint16_t);
static handler handlers[] = {
handle_null,
handle_rock0,
handle_rock1,
handle_bang0,
handle_bang1,
handle_player,
handle_missile
};
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
static GDflashbits GDFB;
static void GD_uncompress(unsigned int addr, PROGMEM prog_uchar *src)
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
while (items--) {
if (GDFB.get1() == 0) {
GD.wr(addr++, GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
GD.wr(addr, GD.rd(addr + offset));
addr++;
}
}
}
}
// uncompress one line of the title banner into buffer dst
// title banner lines are run-length encoded
static void titlepaint(char *dst, byte src, byte mask)
{
if (src != 0xff) {
prog_uchar *psrc = title_runs + 2 * src;
byte a, b;
do {
a = pgm_read_byte_near(psrc++);
b = pgm_read_byte_near(psrc++);
while (a < (b & 0x7f))
dst[a++] |= mask;
} while (!(b & 0x80));
}
}
// draw a title banner column src (0-511) to screen column dst (0-63).
static void column(byte dst, byte src)
{
static char scratch[76];
memset(scratch, 0, sizeof(scratch));
byte line = pgm_read_byte_near(title + 2 * src);
titlepaint(scratch, line, 1);
line = pgm_read_byte_near(title + 2 * src + 1);
titlepaint(scratch, line, 2);
byte j;
for (j = 0; j < 38; j++) {
GD.wr(dst + (j << 6),
(((dst + j) & 15) << 4) +
scratch[2 * j] +
(scratch[2 * j + 1] << 2));
}
}
static void setup_sprites()
{
GD.copy(PALETTE16A, palette16a, sizeof(palette16a));
GD.copy(PALETTE4A, palette4a, sizeof(palette4a));
GD.copy(PALETTE16B, palette16b, sizeof(palette16b));
// Use the first two 256-color palettes as pseudo-16 color palettes
int i;
for (i = 0; i < 256; i++) {
// palette 0 decodes low nibble, hence (i & 15)
uint16_t rgb = pgm_read_word_near(palette256a + ((i & 15) << 1));
GD.wr16(RAM_SPRPAL + (i << 1), rgb);
// palette 1 decodes nigh nibble, hence (i >> 4)
rgb = pgm_read_word_near(palette256a + ((i >> 4) << 1));
GD.wr16(RAM_SPRPAL + 512 + (i << 1), rgb);
}
GD_uncompress(RAM_SPRIMG, asteroid_images_compressed);
GD.wr(JK_MODE, 1);
}
// Run the object handlers, keeping track of sprite ownership in spr2obj
static void runobjects(uint16_t r)
{
int i;
GD.__wstartspr((r & 1) ? 256 : 0); // write sprites to other frame
for (i = 0; i < 128; i++) {
struct object *po = &objects[i];
handler h = (handler)handlers[po->handler];
byte loSpr = GD.spr;
(*h)(i, po->state, r);
while (loSpr < GD.spr) {
spr2obj[loSpr++] = i;
}
}
// Hide all the remaining sprites
do
GD.xhide();
while (GD.spr);
GD.__end();
}
// ----------------------------------------------------------------------
// map
// ----------------------------------------------------------------------
static byte loaded[8];
static byte scrap;
// copy a (w,h) rectangle from the source image (x,y) into picture RAM
static void rect(unsigned int dst, byte x, byte y, byte w, byte h)
{
prog_uchar *src = bg_pic + (16 * y) + x;
while (h--) {
GD.copy(dst, src, w);
dst += 64;
src += 16;
}
}
static void map_draw(byte strip)
{
strip &= 63; // Universe is finite but unbounded: 64 strips
byte s8 = (strip & 7); // Destination slot for this strip (0-7)
if (loaded[s8] != strip) {
qrandSeed(level ^ (strip * 77)); // strip number is the hash...
// Random star pattern is made from characters 1-15
GD.__wstart(s8 * (8 * 64));
int i;
for (i = 0; i < (8 * 64); i++) {
byte r;
if (qrand(3) == 0)
r = qrand(4);
else
r = 0;
SPI.transfer(r);
}
GD.__end();
// Occasional planet, copied from the background char map
if (qrand(2) == 0) {
uint16_t dst = (qrand(3) * 8) + (s8 * (8 * 64));
switch (qrand(2)) {
case 0:
rect(dst, 0, 1, 6, 6);
break;
case 1:
rect(dst, 7, 1, 6, 6);
break;
case 2:
rect(dst, 0, 7, 8, 4);
break;
case 3:
rect(dst, 8, 7, 5, 5);
break;
}
}
loaded[s8] = strip;
}
}
static void map_coldstart()
{
memset(loaded, 0xff, sizeof(loaded));
scrap = 0xff;
byte i;
for (i = 0; i < 8; i++)
map_draw(i);
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void update_score()
{
prog_uchar* digitcodes = bg_pic + (16 * 30);
unsigned long s = score;
uint16_t a = atxy(49, scrap << 3);
byte i;
for (i = 0; i < 6; i++) {
GD.wr(a--, pgm_read_byte_near(digitcodes + (s % 10)));
s /= 10;
}
GD.wr(atxy(0, scrap << 3), pgm_read_byte_near(digitcodes + lives));
}
static void map_refresh(byte strip)
{
byte i;
byte newscrap = 7 & (strip + 7);
if (scrap != newscrap) {
scrap = newscrap;
uint16_t scrapline = scrap << 6;
GD.wr16(COMM+2, 0x8000 | scrapline); // show scrapline at line 0
GD.wr16(COMM+14, 0x8000 | (0x1ff & ((scrapline + 8) - 291))); // show scrapline+8 at line 291
GD.fill(atxy(0, scrap << 3), 0, 50);
update_score();
GD.fill(atxy(0, 1 + (scrap << 3)), 0, 64);
rect(atxy(0, 1 + (scrap << 3)), 0, 31, 16, 1);
rect(atxy(32, 1 + (scrap << 3)), 0, 31, 16, 1);
loaded[scrap] = 0xff;
}
delay(1); // wait for raster to pass the top line before overwriting it
for (i = 0; i < 6; i++)
map_draw(strip + i);
}
static void start_level()
{
int i;
for (i = 0; i < 128; i++)
objects[i].handler = 0;
player_vx = 0;
player_vy = 0;
player_invincible = 0;
player_dying = 0;
objects[0].x = 0;
objects[0].y = 0;
objects[0].state = 0;
objects[0].handler = HANDLE_PLAYER;
// Set up the pools of objects for missiles, enemies, explosions
missiles = 0;
enemies = 0;
explosions = 0;
for (i = 1; i < 16; i++)
push(&missiles, i);
for (i = 16; i < 80; i++)
push(&enemies, i);
for (i = 80; i < 128; i++)
push(&explosions, i);
// Place asteroids in a ring around the edges of the screen
for (i = 0; i < min(32, 3 + level); i++) {
char e = pop(&enemies);
if (random(2) == 0) {
objects[e].x = random(2) ? COORD(32) : COORD(400-32);
objects[e].y = random(COORD(300));
} else {
objects[e].x = random(COORD(400));
objects[e].y = random(2) ? COORD(32) : COORD(300-32);
}
objects[e].handler = HANDLE_ROCK1;
objects[e].state = qrand(8);
}
GD.copy(PALETTE16B, palette16b, sizeof(palette16b));
for (i = 0; i < 16; i++) {
uint16_t a = PALETTE16B + 2 * i;
uint16_t c = GD.rd16(a);
if (level & 1)
c = swapRB(c);
if (level & 2)
c = swapRG(c);
if (level & 4)
c = swapRB(c);
GD.wr16(a, c);
}
map_coldstart();
}
void setup()
{
GD.begin();
controller_init();
}
static void title_banner()
{
GD.fill(VOICES, 0, 64 * 4);
GD.wr(J1_RESET, 1);
GD.wr(SPR_DISABLE, 1);
GD.wr16(SCROLL_X, 0);
GD.wr16(SCROLL_Y, 0);
GD.fill(RAM_PIC, 0, 4096);
setup_sprites();
uint16_t i;
uint16_t j;
GD.__wstart(RAM_CHR);
for (i = 0; i < 256; i++) {
// bits control lit segments like this:
// 0 1
// 2 3
byte a = (i & 1) ? 0x3f : 0;
byte b = (i & 2) ? 0x3f : 0;
byte c = (i & 4) ? 0x3f : 0;
byte d = (i & 8) ? 0x3f : 0;
for (j = 0; j < 3; j++) {
SPI.transfer(a);
SPI.transfer(b);
}
SPI.transfer(0);
SPI.transfer(0);
for (j = 0; j < 3; j++) {
SPI.transfer(c);
SPI.transfer(d);
}
SPI.transfer(0);
SPI.transfer(0);
}
GD.__end();
for (i = 0; i < 256; i++) {
GD.setpal(4 * i + 0, RGB(0,0,0));
uint16_t color = pgm_read_word_near(title_ramp + 2 * (i >> 4));
GD.setpal(4 * i + 3, color);
}
for (i = 0; i < 64; i++) {
column(i, i);
}
for (i = 0; i < 128; i++) {
objects[i].handler = 0;
objects[i].collide = 0xff;
}
for (i = 0; i < 128; i++)
push(&enemies, i);
for (i = 0; i < 40; i++) {
char e = pop(&enemies);
objects[e].x = COORD(random(400));
objects[e].y = COORD(random(300));
objects[e].handler = qrand1() ? HANDLE_ROCK1 : HANDLE_ROCK0;
objects[e].state = qrand(8);
}
byte startgame = 0;
for (i = 0; startgame < 50; i++) {
for (j = 0; j < 256; j++) {
byte index = 15 & ((-i >> 2) + (j >> 4));
uint16_t color = pgm_read_word_near(title_ramp + 2 * index);
GD.setpal(4 * j + 3, color);
}
if (!startgame &&
(controller_sense(i) || (i == (2048 - 400)))) {
// explode all rocks!
for (j = 0; j < 128; j++) {
byte h = objects[j].handler;
if ((h == HANDLE_ROCK0) || (h == HANDLE_ROCK1))
objects[j].handler = HANDLE_BANG1;
objects[j].state = i;
}
startgame = 1;
}
if (startgame)
startgame++;
runobjects(i);
GD.waitvblank();
GD.wr(SPR_PAGE, (i & 1));
GD.wr(SPR_DISABLE, 0);
GD.wr16(SCROLL_X, i);
if ((i & 7) == 0) {
byte x = ((i >> 3) + 56);
column(63 & x, 255 & x);
}
}
for (i = 0; i < 32; i++) {
for (j = 0; j < 256; j++) {
uint16_t a = RAM_PAL + (8 * j) + 6;
uint16_t pal = GD.rd16(a);
byte r = 31 & (pal >> 10);
byte g = 31 & (pal >> 5);
byte b = 31 & pal;
if (r) r--;
if (g) g--;
if (b) b--;
pal = (r << 10) | (g << 5) | b;
GD.wr16(a, pal);
}
GD.waitvblank();
GD.waitvblank();
}
GD.fill(RAM_PIC, 0, 4096);
}
#define SOUNDCYCLE(state) ((state) = v ? ((state) + 1) : 0)
void loop()
{
title_banner();
GD_uncompress(RAM_CHR, bg_chr_compressed);
GD_uncompress(RAM_PAL, bg_pal_compressed);
GD.wr16(COMM+0, 0);
GD.wr16(COMM+2, 0x8000);
GD.wr16(COMM+4, 8); // split at line 8
GD.wr16(COMM+6, 177);
GD.wr16(COMM+8, 166);
GD.wr16(COMM+10, 291); // split at line 291
GD.wr16(COMM+12, 0);
GD.wr16(COMM+14, 0x8000 | (0x1ff & (8 - 291))); // show line 8 at line 292
GD.microcode(splitscreen_code, sizeof(splitscreen_code));
setup_sprites();
memset(&sounds, 0, sizeof(sounds));
level = 0;
score = 0;
lives = 3;
unsigned int r = 0;
start_level();
while (lives) {
int i, j;
runobjects(r);
for (i = 0; i < 128; i++)
objects[i].collide = 0xff;
GD.waitvblank();
// swap frames
GD.wr(SPR_PAGE, (r & 1));
int scrollx = objects[0].x >> 4;
int scrolly = objects[0].y >> 4;
GD.wr16(COMM+6, scrollx & 0x1ff);
GD.wr16(COMM+8, scrolly & 0x1ff);
map_refresh(scrolly >> 6);
update_score();
GD.wr16(COMM+12, r); // horizontal scroll the bottom banner
GD.waitvblank();
GD.__start(COLLISION);
for (i = 0; i < 256; i++) {
byte c = SPI.transfer(0); // c is the colliding sprite number
if (c != 0xff) {
objects[spr2obj[i]].collide = spr2obj[c];
}
}
GD.__end();
if (sounds.boing) {
byte v = max(0, 16 - (sounds.boing - 1) * 2);
GD.voice(0, 0, 4 * 4000 - 700 * sounds.boing, v/2, v/2);
GD.voice(1, 1, 1000 - 100 * sounds.boing, v, v);
SOUNDCYCLE(sounds.boing);
}
if (sounds.boom) {
byte v = max(0, 96 - (sounds.boom - 1) * 6);
GD.voice(2, 0, 220, v, v);
GD.voice(3, 1, 220/8, v/2, v/2);
SOUNDCYCLE(sounds.boom);
}
if (sounds.pop) {
byte v = max(0, 32 - (sounds.pop - 1) * 3);
GD.voice(4, 0, 440, v, v);
GD.voice(5, 1, 440/8, v/2, v/2);
SOUNDCYCLE(sounds.pop);
}
GD.voice(6, 1, 40, sounds.thrust ? 10 : 0, sounds.thrust ? 10 : 0);
static byte tune;
if (sounds.bass) {
byte v = sounds.bass < 9 ? 63 : 0;
int f0 = tune ? 130: 163 ;
byte partials[] = { 71, 32, 14, 75, 20, 40 };
byte i;
for (i = 0; i < 6; i++) {
byte a = (v * partials[i]) >> 8;
GD.voice(7 + i, 0, f0 * (i + 1), a, a);
}
SOUNDCYCLE(sounds.bass);
}
static byte rhythm;
if (++rhythm >= max(24 - level, 10)) {
sounds.bass = 1;
rhythm = 0;
tune = !tune;
}
byte nenemies = 64;
byte pe = enemies;
while (pe) {
pe = objects[pe].state;
nenemies--;
}
if (nenemies == 0) {
level++;
start_level();
}
r++;
}
}

View File

@ -1,69 +0,0 @@
static PROGMEM prog_uchar splitscreen_code[] = {
0xB3,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x6C,
0x80,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0x81,0x60,
0xFF,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x03,0x67,
0x8B,0x35,
0x0F,0x71,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x04,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x05,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x06,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x07,0xA8,
0x23,0x60,
0x03,0x61,
0x07,0x80,
0x03,0x69,
0x0A,0xA8,
0x23,0x60,
0x0F,0x71,
0x94,0xA8,
0x83,0x55,
0x8B,0x55,
0x96,0xA8,
0x93,0x55,
0x9A,0xA8,
0x83,0x55,
0x8B,0x55,
0x9C,0xA8,
0x93,0x55,
0x2C,0x81,
0x8B,0x55,
0x90,0xA8,
0x93,0x55,
0xB3,0x15,
0x0C,0x70,
};

View File

@ -1,722 +0,0 @@
static void draw_ball(int x, int y, byte pal) {
GD.xsprite(x, y, -40, -56, 0, pal, 0);
GD.xsprite(x, y, -24, -56, 1, pal, 0);
GD.xsprite(x, y, -8, -56, 2, pal, 0);
GD.xsprite(x, y, 8, -56, 3, pal, 0);
GD.xsprite(x, y, 24, -56, 4, pal, 0);
GD.xsprite(x, y, -56, -40, 5, pal, 0);
GD.xsprite(x, y, -40, -40, 6, pal, 0);
GD.xsprite(x, y, -24, -40, 7, pal, 0);
GD.xsprite(x, y, -8, -40, 8, pal, 0);
GD.xsprite(x, y, 8, -40, 9, pal, 0);
GD.xsprite(x, y, 24, -40, 10, pal, 0);
GD.xsprite(x, y, 40, -40, 11, pal, 0);
GD.xsprite(x, y, -56, -24, 12, pal, 0);
GD.xsprite(x, y, -40, -24, 13, pal, 0);
GD.xsprite(x, y, -24, -24, 14, pal, 0);
GD.xsprite(x, y, -8, -24, 15, pal, 0);
GD.xsprite(x, y, 8, -24, 16, pal, 0);
GD.xsprite(x, y, 24, -24, 17, pal, 0);
GD.xsprite(x, y, 40, -24, 18, pal, 0);
GD.xsprite(x, y, -56, -8, 19, pal, 0);
GD.xsprite(x, y, -40, -8, 20, pal, 0);
GD.xsprite(x, y, -24, -8, 21, pal, 0);
GD.xsprite(x, y, -8, -8, 22, pal, 0);
GD.xsprite(x, y, 8, -8, 23, pal, 0);
GD.xsprite(x, y, 24, -8, 24, pal, 0);
GD.xsprite(x, y, 40, -8, 25, pal, 0);
GD.xsprite(x, y, -56, 8, 26, pal, 0);
GD.xsprite(x, y, -40, 8, 27, pal, 0);
GD.xsprite(x, y, -24, 8, 28, pal, 0);
GD.xsprite(x, y, -8, 8, 29, pal, 0);
GD.xsprite(x, y, 8, 8, 30, pal, 0);
GD.xsprite(x, y, 24, 8, 31, pal, 0);
GD.xsprite(x, y, 40, 8, 32, pal, 0);
GD.xsprite(x, y, -56, 24, 33, pal, 0);
GD.xsprite(x, y, -40, 24, 34, pal, 0);
GD.xsprite(x, y, -24, 24, 35, pal, 0);
GD.xsprite(x, y, -8, 24, 36, pal, 0);
GD.xsprite(x, y, 8, 24, 37, pal, 0);
GD.xsprite(x, y, 24, 24, 38, pal, 0);
GD.xsprite(x, y, 40, 24, 39, pal, 0);
GD.xsprite(x, y, -40, 40, 40, pal, 0);
GD.xsprite(x, y, -24, 40, 41, pal, 0);
GD.xsprite(x, y, -8, 40, 42, pal, 0);
GD.xsprite(x, y, 8, 40, 43, pal, 0);
GD.xsprite(x, y, 24, 40, 44, pal, 0);
}
static PROGMEM prog_uchar ball[] = {
0xc9, 0xa1, 0xdc, 0xf9, 0x0f, 0xe0, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0x1e, 0xc4, 0x83, 0x78,
0x10, 0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0x71, 0xff, 0x06, 0xed, 0x85, 0xf2, 0x20, 0x68, 0xd8,
0xbe, 0x5d, 0x5b, 0xc1, 0xdf, 0xbf, 0xd1, 0x70, 0x60, 0xc7, 0x94, 0x8d, 0xe0, 0x6f, 0xd9, 0xbc,
0x59, 0xd3, 0x26, 0x4d, 0x18, 0x0b, 0xbe, 0xd6, 0x2c, 0x99, 0x37, 0x63, 0xca, 0xa4, 0x71, 0x63,
0x46, 0x82, 0x8f, 0x15, 0x8b, 0xe6, 0x82, 0x83, 0x89, 0xe0, 0x68, 0x38, 0x78, 0x5b, 0xb1, 0x10,
0x9c, 0x8d, 0x1a, 0x31, 0x6c, 0x28, 0x78, 0xda, 0xb4, 0x1c, 0xdc, 0x0d, 0x19, 0x0c, 0x1e, 0x36,
0x82, 0x7b, 0xb8, 0x30, 0x68, 0xc0, 0xbf, 0xf5, 0xe0, 0x9a, 0x14, 0x82, 0x93, 0xfd, 0x6a, 0x1f,
0xc4, 0x83, 0xb8, 0x1d, 0x9b, 0xd6, 0xad, 0x5a, 0x0e, 0xb6, 0x06, 0x82, 0xa1, 0x35, 0x2b, 0x96,
0x2c, 0x5a, 0x08, 0x5e, 0x86, 0xec, 0xd9, 0x0e, 0x8b, 0xc1, 0xca, 0x9c, 0xd9, 0xe0, 0x61, 0xd0,
0x6e, 0xb0, 0xab, 0x11, 0x66, 0x4c, 0x07, 0xeb, 0x28, 0x61, 0x39, 0x4a, 0x98, 0x0f, 0x07, 0xc1,
0xc1, 0x94, 0x1d, 0x5b, 0x36, 0xac, 0x25, 0x8a, 0x38, 0x18, 0xac, 0x5b, 0x40, 0x1c, 0xb2, 0x6c,
0xc9, 0x42, 0x38, 0x09, 0x0e, 0xc6, 0xc3, 0x41, 0xe2, 0x0a, 0xee, 0xc6, 0x8c, 0x96, 0x6a, 0x7b,
0x76, 0xe3, 0x62, 0xb8, 0x0c, 0xee, 0x76, 0x6c, 0xdb, 0xb2, 0x69, 0xc3, 0x7a, 0x70, 0x30, 0xd2,
0x22, 0x0c, 0x84, 0x03, 0x3b, 0xc1, 0x25, 0x6e, 0x5a, 0x69, 0x11, 0xc1, 0x3d, 0x38, 0x58, 0xb5,
0x62, 0xd9, 0x80, 0xfd, 0xe0, 0x19, 0x8d, 0x83, 0xb3, 0xa5, 0xe0, 0x6e, 0x2d, 0x5a, 0x5a, 0xd6,
0xa4, 0x29, 0xdc, 0x59, 0x0f, 0x4e, 0x9a, 0x4b, 0x87, 0xad, 0x8e, 0x59, 0x1c, 0x22, 0x45, 0x8a,
0xca, 0x90, 0xd6, 0xcb, 0xb2, 0xe9, 0xad, 0xb0, 0x0e, 0x97, 0x43, 0x15, 0xd8, 0x1c, 0x66, 0x8b,
0xdc, 0x3a, 0xcc, 0x06, 0xf6, 0x83, 0x7d, 0xe5, 0x8d, 0xb2, 0xc1, 0x32, 0x1c, 0xa6, 0xc3, 0x5a,
0x1c, 0x55, 0xec, 0x05, 0x47, 0xdd, 0x17, 0xa3, 0x16, 0x46, 0x9d, 0xe0, 0xa0, 0xa7, 0x0c, 0x04,
0xcb, 0x70, 0xa7, 0x37, 0x67, 0xea, 0xcc, 0x04, 0xd1, 0x3c, 0x5c, 0xe8, 0xb2, 0xa9, 0xd3, 0x48,
0x70, 0x29, 0x01, 0x7a, 0x83, 0xa3, 0x2d, 0x9d, 0x36, 0x82, 0xb3, 0x7e, 0xfb, 0xfa, 0xec, 0xda,
0xd1, 0x6d, 0x3b, 0x3c, 0xe8, 0xb8, 0x17, 0x03, 0x50, 0x41, 0x70, 0xd4, 0x13, 0xad, 0x74, 0xe8,
0xd0, 0xde, 0x20, 0x34, 0x5a, 0x50, 0x6f, 0x4f, 0x6f, 0x78, 0xd4, 0x15, 0x9e, 0xb4, 0x59, 0x0c,
0x8e, 0xe6, 0xd4, 0x99, 0x55, 0xa3, 0x3a, 0x5a, 0x85, 0x87, 0xe0, 0xa1, 0xc1, 0xbc, 0x7a, 0x75,
0x6a, 0xcd, 0x04, 0x0f, 0x53, 0x2a, 0x55, 0xda, 0xd0, 0x6e, 0x4d, 0x9b, 0x86, 0x68, 0x61, 0x4e,
0x6d, 0x78, 0x30, 0xad, 0x4a, 0x95, 0x4a, 0x15, 0xca, 0x95, 0x2b, 0xd3, 0xfa, 0xdb, 0x83, 0xe8,
0x99, 0x7c, 0x45, 0xa1, 0xdd, 0x5e, 0xff, 0x6e, 0x14, 0x46, 0x43, 0xec, 0x9e, 0x56, 0x6e, 0x4c,
0xa9, 0x62, 0x43, 0x0a, 0xed, 0x87, 0xa4, 0x52, 0xbc, 0x34, 0x15, 0x19, 0x54, 0x50, 0x28, 0x74,
0x87, 0x88, 0xcb, 0x50, 0x31, 0xac, 0x69, 0xd5, 0xb2, 0x26, 0x34, 0x9a, 0xaf, 0x19, 0xb6, 0x75,
0x6a, 0x6f, 0x10, 0xb9, 0xe0, 0x34, 0x6a, 0xb2, 0xa8, 0xa1, 0x30, 0xa8, 0x09, 0x1e, 0x3a, 0x0a,
0x86, 0x75, 0x6d, 0xe1, 0xb9, 0x74, 0x54, 0x42, 0x93, 0x2a, 0x4a, 0xa6, 0x55, 0x2d, 0xa7, 0x23,
0x3c, 0x55, 0x0a, 0xd5, 0x25, 0x43, 0x7b, 0xb8, 0xd0, 0x6a, 0x45, 0xb3, 0x26, 0x8d, 0xe1, 0xa1,
0x56, 0xd4, 0x82, 0xe0, 0x11, 0x2d, 0xc2, 0x4b, 0x7c, 0xa8, 0x0d, 0x6a, 0x6a, 0xa6, 0xb6, 0xe0,
0x90, 0x0e, 0xc2, 0x63, 0x2b, 0x0c, 0x0f, 0xc1, 0x2b, 0x19, 0xbc, 0xca, 0xe8, 0x10, 0xfc, 0xc2,
0x73, 0xb2, 0x0c, 0x3e, 0x22, 0x55, 0x64, 0xcd, 0x5f, 0x10, 0x9e, 0xd5, 0xaa, 0x11, 0x1d, 0x3d,
0x44, 0x68, 0x89, 0x57, 0xc1, 0x5b, 0x8c, 0x6a, 0xd5, 0xf1, 0xb3, 0xff, 0x07, 0xf1, 0x20, 0x1e,
0xc4, 0x83, 0x78, 0x10, 0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0xa2, 0x4d, 0x73, 0x08,
0x0f, 0xc2, 0xd6, 0xb4, 0x68, 0x52, 0x1f, 0xe2, 0x83, 0xa0, 0x72, 0xa5, 0x9a, 0x35, 0xaa, 0x53,
0x15, 0xe2, 0xfd, 0x07, 0x0f, 0x25, 0x8a, 0x34, 0x88, 0x0d, 0xe1, 0xc1, 0x43, 0x99, 0x12, 0xc5,
0x0a, 0xf5, 0xab, 0x51, 0xa9, 0x24, 0xa2, 0xde, 0x04, 0x25, 0x82, 0x15, 0x2a, 0x90, 0x27, 0x5b,
0x44, 0x08, 0x15, 0x1e, 0x3e, 0x05, 0x29, 0xd0, 0xa7, 0x57, 0x96, 0x0e, 0x21, 0x11, 0x3a, 0x7c,
0x08, 0x55, 0xac, 0x48, 0xa0, 0x7e, 0xb9, 0xba, 0x65, 0x6a, 0x13, 0x2c, 0x27, 0x7d, 0x29, 0x0b,
0xde, 0xf2, 0xf4, 0xc8, 0x92, 0xa1, 0x55, 0x52, 0x08, 0x54, 0x2e, 0x4c, 0xa9, 0x60, 0x41, 0x0a,
0x05, 0xc8, 0x8b, 0x80, 0xd2, 0xa5, 0x48, 0x94, 0x5d, 0xff, 0x83, 0x78, 0x10, 0x0f, 0xc2, 0x36,
0x82, 0x7b, 0x10, 0xb6, 0x69, 0x25, 0xf8, 0x07, 0x21, 0x5b, 0x56, 0x2c, 0x06, 0xff, 0x20, 0x64,
0xd5, 0x92, 0xf9, 0xe0, 0x1f, 0x04, 0xad, 0x59, 0xb2, 0x60, 0x36, 0xf8, 0x07, 0x01, 0xe3, 0x8a,
0x0d, 0xd8, 0xb3, 0x13, 0xfc, 0xfd, 0x9b, 0x54, 0x62, 0xd0, 0xbe, 0x5d, 0xdd, 0xc1, 0xdf, 0xbf,
0x51, 0x43, 0xfa, 0xf5, 0xda, 0xd6, 0x15, 0xfc, 0xa3, 0x85, 0x82, 0x68, 0xa1, 0xcb, 0x66, 0xf0,
0x53, 0x65, 0xc4, 0x60, 0x78, 0xd0, 0xad, 0xb3, 0xf8, 0x1b, 0x53, 0xd4, 0x0b, 0xec, 0x84, 0x07,
0xed, 0xe1, 0x57, 0x85, 0x11, 0x85, 0xf6, 0xe3, 0x85, 0x4e, 0x1d, 0xda, 0x82, 0x6f, 0x78, 0xd4,
0xab, 0x47, 0x97, 0x0d, 0xed, 0xc1, 0x57, 0x45, 0xd6, 0xd0, 0x67, 0x27, 0x5e, 0xe8, 0xb0, 0xa6,
0x35, 0xfc, 0x18, 0x55, 0x94, 0x0c, 0xc2, 0x83, 0x8e, 0xf0, 0xa0, 0xc5, 0x86, 0x65, 0x0b, 0xe6,
0xcc, 0x98, 0x32, 0x61, 0xdc, 0x98, 0x11, 0xc3, 0x86, 0x0c, 0x1a, 0xb0, 0x6f, 0x2f, 0x38, 0x9b,
0x0c, 0x0e, 0x46, 0x83, 0x8b, 0x5d, 0x8b, 0xe1, 0x32, 0x38, 0x19, 0x09, 0xd7, 0x76, 0xed, 0x98,
0x37, 0x6b, 0xda, 0xa4, 0x09, 0x63, 0x46, 0xa3, 0x65, 0x34, 0xb4, 0x17, 0x3c, 0x82, 0x43, 0x3c,
0x0c, 0x4e, 0xf1, 0x28, 0x38, 0xd8, 0x4e, 0xfa, 0xe1, 0xd1, 0xae, 0x9e, 0xe6, 0x61, 0xcb, 0xa6,
0x75, 0x6b, 0xe1, 0x21, 0x1e, 0x5d, 0x0c, 0x3b, 0x7a, 0x74, 0xd7, 0x88, 0x82, 0x61, 0x55, 0x8b,
0x65, 0x4d, 0x1a, 0x15, 0xe8, 0xd7, 0x17, 0x1e, 0x6d, 0xb5, 0x80, 0x82, 0x61, 0x45, 0xb3, 0x25,
0x8b, 0x1a, 0xcc, 0x9b, 0x53, 0xab, 0x26, 0x5c, 0xb4, 0x40, 0x6d, 0xe1, 0x41, 0xb3, 0x46, 0x0d,
0xea, 0xd5, 0xa9, 0x55, 0x6b, 0x46, 0xb5, 0x2a, 0x95, 0x2a, 0xb4, 0x6b, 0x0d, 0x8f, 0x1a, 0x2d,
0xa8, 0x0f, 0x8f, 0xaa, 0x4d, 0xa9, 0x0c, 0x1e, 0x0d, 0x22, 0x5a, 0x84, 0x67, 0x35, 0xaa, 0xc3,
0x93, 0xf2, 0x68, 0x99, 0x0c, 0xa2, 0x53, 0xf0, 0x88, 0x16, 0xe1, 0x41, 0xb9, 0x16, 0xcd, 0xc1,
0xd1, 0x7c, 0xbc, 0x08, 0xaf, 0xc1, 0x23, 0x6b, 0x86, 0x37, 0x15, 0x2a, 0x84, 0x2b, 0x0b, 0x4f,
0xe9, 0x30, 0x5a, 0x46, 0x07, 0x11, 0xca, 0x95, 0x29, 0xab, 0x89, 0x15, 0xc1, 0x86, 0x8d, 0x4a,
0xa0, 0x55, 0x4b, 0x69, 0xd2, 0x68, 0xc7, 0x76, 0x70, 0xb0, 0x19, 0x1c, 0x0a, 0x85, 0x55, 0x2b,
0x71, 0x42, 0x53, 0xe9, 0xb0, 0x1d, 0x3c, 0xc3, 0xa5, 0xb6, 0xf0, 0x90, 0x3b, 0xd2, 0x84, 0x05,
0x0d, 0xc1, 0x49, 0x7b, 0xcd, 0x68, 0x98, 0x49, 0xc2, 0x62, 0x11, 0xd4, 0xb5, 0x33, 0x36, 0x45,
0x29, 0x28, 0x4c, 0x85, 0x4b, 0x7d, 0x8b, 0xb2, 0x16, 0xad, 0x72, 0x67, 0xb4, 0xc8, 0x12, 0x36,
0x37, 0x41, 0xb4, 0x48, 0x9b, 0xb9, 0xb3, 0x36, 0xa9, 0xd3, 0xb1, 0x0b, 0xad, 0xb6, 0x4c, 0x4d,
0xd1, 0xba, 0x72, 0xe8, 0xb0, 0xae, 0x2d, 0x5a, 0x95, 0xa6, 0xca, 0x18, 0x3c, 0xd2, 0x66, 0xb4,
0x0e, 0xaf, 0x6a, 0x2b, 0x82, 0x52, 0xa5, 0x2d, 0x23, 0x3c, 0x8b, 0x57, 0x27, 0x6e, 0x62, 0x04,
0x4f, 0x25, 0x4a, 0x14, 0x2b, 0xd2, 0xa8, 0x51, 0x82, 0xfa, 0x89, 0x25, 0x46, 0x59, 0x78, 0x08,
0x8e, 0x82, 0x14, 0x2a, 0x50, 0xa0, 0x5e, 0x9c, 0x3a, 0xb1, 0x6a, 0x82, 0xa7, 0x10, 0x25, 0x82,
0x15, 0x29, 0x54, 0x28, 0x40, 0xbf, 0x7c, 0x7d, 0x72, 0xd5, 0x8a, 0x51, 0x1d, 0xde, 0x82, 0x87,
0xbe, 0x03, 0xa0, 0xe7, 0x00, 0x08, 0x0d, 0x17, 0x8a, 0xa3, 0x45, 0x78, 0xd4, 0x2f, 0x4f, 0xae,
0x5c, 0x39, 0xb2, 0x65, 0xef, 0x01, 0x75, 0x6b, 0x69, 0x6d, 0x8e, 0x8b, 0xe1, 0xa8, 0xd4, 0xfc,
0x38, 0x5a, 0x5a, 0x26, 0x55, 0x28, 0xcf, 0x5a, 0xc1, 0xc1, 0x6c, 0x2e, 0x30, 0xbd, 0x95, 0x82,
0xc7, 0xb4, 0x50, 0xaa, 0xc4, 0xdc, 0x5a, 0xdc, 0xaa, 0x45, 0xf9, 0x72, 0x2e, 0xed, 0x78, 0x25,
0x4c, 0xa9, 0x10, 0xc5, 0x6a, 0xa2, 0xc5, 0x19, 0x12, 0x19, 0xaf, 0xa3, 0x83, 0xe0, 0xe0, 0x10,
0x5e, 0xb6, 0x86, 0x30, 0x65, 0x79, 0x23, 0x1f, 0x84, 0x27, 0x51, 0x8f, 0x33, 0x1d, 0x85, 0xc7,
0xe8, 0xa1, 0x46, 0xb4, 0x2a, 0x55, 0xd1, 0x22, 0x3c, 0x0a, 0x0b, 0x0f, 0xf1, 0x41, 0x50, 0x8d,
0xc8, 0x9a, 0x2a, 0x83, 0xc3, 0x95, 0xa8, 0x13, 0xc1, 0xa1, 0x49, 0xc4, 0x0b, 0x51, 0x57, 0x20,
0x1d, 0xc6, 0xab, 0xf0, 0xa8, 0x48, 0x75, 0x74, 0x10, 0x29, 0x32, 0x3c, 0x09, 0xcd, 0x86, 0xe1,
0x41, 0xa0, 0xea, 0xf0, 0x94, 0x8e, 0x85, 0x08, 0x11, 0x2c, 0x48, 0x91, 0xc0, 0xf0, 0xa0, 0x32,
0xbc, 0x8d, 0x0e, 0x41, 0x5d, 0x42, 0x54, 0x36, 0x50, 0x21, 0x42, 0x78, 0xbc, 0x14, 0x1a, 0x1e,
0xc2, 0x87, 0x40, 0x81, 0xba, 0x64, 0xca, 0x0c, 0x0e, 0xca, 0x85, 0x55, 0xc5, 0x64, 0x19, 0x1e,
0x04, 0x44, 0x82, 0xb5, 0xa5, 0x7e, 0x6d, 0x94, 0xc1, 0xa8, 0x10, 0x17, 0x96, 0xe1, 0x3c, 0x58,
0x1b, 0xea, 0x96, 0x66, 0x96, 0x6c, 0x14, 0x8a, 0x33, 0xe6, 0xda, 0x98, 0x06, 0x4b, 0xa1, 0x0a,
0xb6, 0xca, 0xbd, 0xb0, 0x0e, 0x14, 0xac, 0x4d, 0xbd, 0x7a, 0x3a, 0x53, 0x52, 0x58, 0x86, 0x02,
0x83, 0x87, 0xbc, 0x65, 0xb0, 0x34, 0x64, 0xc9, 0x52, 0x19, 0x3d, 0x14, 0x15, 0x04, 0x05, 0x02,
0xf6, 0x82, 0xde, 0xf0, 0xa1, 0x3b, 0x2b, 0xca, 0x10, 0x1e, 0x2d, 0xc2, 0xe3, 0x51, 0x94, 0x13,
0x3e, 0x75, 0xca, 0xd0, 0x21, 0x3d, 0x3c, 0x2a, 0x08, 0x0e, 0xf2, 0xf4, 0xca, 0xd1, 0x2d, 0x3b,
0x7c, 0xc8, 0x90, 0xae, 0x3d, 0x78, 0x5c, 0xe9, 0xe0, 0x21, 0x3b, 0x3e, 0x84, 0x0f, 0xe9, 0xd2,
0x2a, 0x44, 0x78, 0x90, 0x9f, 0x2c, 0xc3, 0x87, 0xac, 0x2a, 0x11, 0x3e, 0x82, 0x87, 0x80, 0xe8,
0x72, 0x25, 0x82, 0x87, 0x8c, 0xe0, 0x15, 0x9e, 0xe5, 0xea, 0x09, 0x1e, 0xf1, 0x31, 0x7c, 0x97,
0x8d, 0xe8, 0x14, 0x1f, 0x65, 0x06, 0x87, 0xf8, 0x21, 0x20, 0x1f, 0x06, 0x9f, 0xf8, 0x2c, 0x2d,
0x38, 0x24, 0xcb, 0x2f, 0x14, 0x5f, 0xb8, 0x05, 0x8f, 0xaa, 0x55, 0x8d, 0xa2, 0x83, 0x0c, 0xee,
0xd2, 0xa4, 0x0e, 0x05, 0xa5, 0x0d, 0x51, 0x41, 0x4c, 0xd0, 0x2d, 0x4b, 0x86, 0x36, 0xc9, 0x12,
0x44, 0x4d, 0x89, 0xc9, 0x51, 0xb2, 0x62, 0x42, 0x0c, 0x90, 0x2e, 0x45, 0x92, 0xb8, 0x29, 0x70,
0x33, 0x26, 0x63, 0x22, 0xc8, 0x11, 0x32, 0xa5, 0x4b, 0x8d, 0x00, 0x97, 0x62, 0x76, 0xb6, 0x84,
0xe0, 0x91, 0x10, 0x65, 0x48, 0x8b, 0x00, 0x4b, 0x70, 0x35, 0xa6, 0x4a, 0xb9, 0x05, 0x22, 0x7f,
0x48, 0xe5, 0xfc, 0x28, 0x83, 0x87, 0xc2, 0xe0, 0x25, 0x27, 0x01, 0xa4, 0x0f, 0x29, 0x19, 0xe2,
0x34, 0x0a, 0x0c, 0xbe, 0x32, 0xb8, 0x05, 0x4f, 0x29, 0x92, 0x05, 0x05, 0x1f, 0xd9, 0x3c, 0x13,
0x00, 0xd7, 0xf0, 0x11, 0x3c, 0x24, 0x49, 0x0c, 0x5f, 0x7c, 0x64, 0xcb, 0xe4, 0x91, 0x21, 0xa4,
0x4a, 0x0d, 0x5e, 0x12, 0xc4, 0xf3, 0xab, 0x99, 0xbc, 0x2a, 0x00, 0xb7, 0xe0, 0x27, 0x8e, 0x6d,
0xf8, 0x08, 0xde, 0x52, 0xc2, 0x27, 0x47, 0x0e, 0xe2, 0xd9, 0x89, 0x15, 0xc3, 0x5a, 0x16, 0x4f,
0xe9, 0xe1, 0x23, 0x38, 0x70, 0x8e, 0x1f, 0xd1, 0x83, 0x1d, 0xdb, 0xe0, 0x21, 0x8a, 0x25, 0xf7,
0xe0, 0xc1, 0x45, 0xb2, 0x24, 0x4e, 0x12, 0x39, 0xb0, 0x17, 0x27, 0x96, 0x0d, 0x6b, 0x56, 0x2c,
0x45, 0x30, 0x4b, 0x0e, 0xe1, 0x21, 0x78, 0x48, 0x60, 0x1f, 0x3d, 0xd8, 0x88, 0x0e, 0x1e, 0x2c,
0x98, 0x71, 0x8d, 0x1e, 0xc1, 0x21, 0x7e, 0xb1, 0x0d, 0x5f, 0x2c, 0x98, 0xfb, 0x0f, 0xe0, 0x41,
0x44, 0x44, 0xf0, 0x0f, 0x22, 0x62, 0x85, 0x85, 0xf0, 0x20, 0x2c, 0x9e, 0xb5, 0xe0, 0x10, 0x1e,
0x84, 0x24, 0x88, 0x65, 0x19, 0xfc, 0x83, 0x90, 0x24, 0xf6, 0x62, 0x52, 0x7e, 0xf0, 0xe6, 0x20,
0x96, 0x15, 0xd3, 0x08, 0x1f, 0x04, 0x38, 0x4b, 0x64, 0xcf, 0x46, 0x04, 0xa3, 0x10, 0xee, 0x9f,
0x8b, 0x24, 0x09, 0x6c, 0x59, 0x31, 0x0b, 0xfe, 0xfe, 0xa5, 0x70, 0xe2, 0xc0, 0x8e, 0x3d, 0x0b,
0xc6, 0x21, 0x9c, 0x0b, 0x67, 0x8e, 0xec, 0xd9, 0x92, 0x62, 0xc6, 0x3f, 0x84, 0x6d, 0x88, 0xe0,
0xc9, 0x9a, 0x05, 0xe1, 0xe0, 0xc7, 0x95, 0x73, 0x0c, 0x20, 0xc7, 0x86, 0x25, 0x33, 0x02, 0x21,
0x94, 0x2b, 0x97, 0xe0, 0x91, 0x21, 0x48, 0x11, 0x8f, 0x60, 0x4c, 0x99, 0x50, 0xe2, 0x48, 0x9e,
0x6d, 0x0c, 0x60, 0x1a, 0x41, 0x83, 0x07, 0x63, 0x86, 0xec, 0xc9, 0x91, 0x26, 0x49, 0x8c, 0x50,
0x29, 0x0f, 0x02, 0x2a, 0x94, 0x28, 0xd4, 0xa7, 0x47, 0xb7, 0x4e, 0x1d, 0xda, 0xb4, 0x6a, 0x09,
0xd5, 0xca, 0x14, 0x29, 0xd0, 0xab, 0x47, 0x97, 0x0e, 0xed, 0xda, 0xb4, 0x68, 0x0e, 0x5e, 0x2a,
0xc3, 0x83, 0x7e, 0xbd, 0xe1, 0x49, 0x6a, 0xf0, 0x51, 0xae, 0x58, 0x41, 0x74, 0xd0, 0xa5, 0x33,
0x3c, 0x68, 0xd5, 0xac, 0x29, 0x7c, 0x8a, 0x56, 0xaa, 0x28, 0x3c, 0xc8, 0xd6, 0x29, 0x43, 0xbb,
0x56, 0x29, 0x9a, 0x25, 0x05, 0x4f, 0x1d, 0x5a, 0x14, 0xca, 0x8b, 0x17, 0xe1, 0x41, 0x5a, 0xb2,
0x90, 0xa4, 0x31, 0x78, 0x4a, 0xd3, 0xa4, 0x41, 0xac, 0x1a, 0x59, 0xc9, 0x42, 0x5a, 0xbc, 0xb8,
0x12, 0xc1, 0x43, 0xb7, 0x56, 0x8d, 0xe2, 0xd5, 0x8a, 0x56, 0x29, 0x42, 0x58, 0x78, 0x90, 0x1c,
0x26, 0x82, 0x87, 0x0c, 0x29, 0x1a, 0xd5, 0xa9, 0x51, 0xa5, 0x52, 0xb9, 0x30, 0xa1, 0x8a, 0x9f,
0x60, 0xf0, 0xd0, 0x26, 0x39, 0x3a, 0x88, 0x11, 0x25, 0x42, 0xb8, 0x52, 0x25, 0x82, 0x15, 0x29,
0x14, 0x10, 0x3c, 0xa4, 0x4a, 0x52, 0x2f, 0x56, 0xb5, 0x4a, 0x15, 0xe1, 0x41, 0x88, 0x60, 0x81,
0x0a, 0xe4, 0xfb, 0xd7, 0x15, 0x1d, 0xc4, 0xa9, 0x11, 0x25, 0x52, 0xb8, 0x32, 0xa5, 0xe1, 0x41,
0xa0, 0x00, 0xfd, 0xfe, 0x65, 0x48, 0x96, 0x20, 0x4e, 0x8c, 0xaa, 0xe8, 0x20, 0x2c, 0x3c, 0x08,
0x0a, 0x1e, 0xe1, 0x43, 0x7b, 0x7c, 0x14, 0x2d, 0x4a, 0x85, 0x70, 0xa1, 0xf1, 0x21, 0x5e, 0xc8,
0x97, 0xe7, 0x5f, 0x9a, 0x24, 0xf1, 0x62, 0x45, 0x8b, 0xcc, 0x16, 0x42, 0x85, 0x84, 0xa7, 0xe0,
0x21, 0x55, 0xa2, 0xf8, 0x74, 0x11, 0x1f, 0xa2, 0xab, 0xbc, 0x06, 0xa1, 0x51, 0x83, 0x7a, 0x75,
0x6a, 0xd5, 0x88, 0x2e, 0x10, 0x2a, 0x62, 0x41, 0x2a, 0xd0, 0x14, 0x1c, 0xc4, 0x07, 0x07, 0x31,
0xaa, 0x55, 0xa9, 0x12, 0x19, 0x1c, 0x95, 0x09, 0x6d, 0x10, 0xe1, 0x41, 0x5c, 0x78, 0x16, 0x11,
0x9e, 0x94, 0x46, 0xdb, 0xf0, 0x11, 0x1e, 0x94, 0xd7, 0x44, 0x21, 0x1a, 0x25, 0x88, 0x0f, 0x2f,
0xd1, 0x49, 0x69, 0xcd, 0x48, 0xc6, 0xf1, 0xa1, 0x02, 0x44, 0x8b, 0xf0, 0x24, 0x44, 0x82, 0x7a,
0x71, 0xfd, 0x20, 0x1d, 0x86, 0x47, 0x61, 0xc9, 0x42, 0x89, 0xe2, 0xe0, 0xa0, 0x56, 0x6d, 0x78,
0x69, 0x10, 0x25, 0xa1, 0x66, 0x84, 0x67, 0x51, 0xd9, 0x40, 0x44, 0xb4, 0x10, 0xa6, 0x34, 0x38,
0x08, 0xce, 0x07, 0x62, 0xc3, 0x73, 0x0b, 0x14, 0xda, 0x10, 0x05, 0xc9, 0x93, 0xab, 0x47, 0x4c,
0x73, 0xa8, 0x1f, 0xc2, 0x93, 0xb5, 0xe0, 0xe0, 0x29, 0x47, 0xb7, 0x2c, 0x99, 0xf3, 0x42, 0xf8,
0xf0, 0x88, 0x0f, 0x82, 0x83, 0x87, 0x3e, 0xb9, 0x72, 0x64, 0x07, 0x0f, 0x19, 0x32, 0x82, 0xa7,
0x90, 0x01, 0x29, 0x28, 0x38, 0x06, 0x2f, 0xe9, 0xd2, 0xa4, 0x49, 0x4d, 0x96, 0x3d, 0x21, 0x3c,
0xcb, 0x94, 0x11, 0x3c, 0xa4, 0x4a, 0x95, 0x22, 0x59, 0x52, 0xf0, 0x8d, 0x0e, 0xc1, 0x53, 0x4a,
0xf0, 0xe4, 0x28, 0x31, 0x63, 0x2a, 0x12, 0xa4, 0x50, 0x81, 0x00, 0xf9, 0xfa, 0xf4, 0xfd, 0x84,
0xb4, 0xa8, 0x44, 0x88, 0xe2, 0x5d, 0xb1, 0x3a, 0xf5, 0xe7, 0x81, 0xb8, 0xa0, 0x5b, 0xb6, 0xae,
0x45, 0x21, 0x28, 0xbc, 0xc8, 0xd3, 0x2b, 0x27, 0x4b, 0xca, 0x0a, 0xaf, 0x6b, 0x40, 0x6f, 0x78,
0x96, 0x55, 0x10, 0x37, 0xc3, 0x61, 0x90, 0x57, 0x39, 0xc3, 0x43, 0x9e, 0x3c, 0x85, 0x97, 0x32,
0x3c, 0x47, 0x47, 0x5d, 0x32, 0x2b, 0x84, 0xc2, 0x53, 0xa9, 0x2f, 0x59, 0xc9, 0x0e, 0x8f, 0x32,
0xb3, 0x41, 0x78, 0xc8, 0x06, 0xd1, 0x31, 0x59, 0x97, 0x81, 0x12, 0x11, 0x1e, 0xa3, 0x83, 0xdc,
0xda, 0x13, 0xbc, 0x04, 0x84, 0xf7, 0xd6, 0x11, 0x3c, 0xe2, 0x55, 0x78, 0xeb, 0x5c, 0xd1, 0x22,
0xbc, 0x25, 0x4b, 0x9e, 0x3c, 0xa4, 0x07, 0x7f, 0xd9, 0xbc, 0xc2, 0x13, 0xf7, 0x64, 0xcb, 0x47,
0x36, 0xef, 0xe0, 0x10, 0x1e, 0xc2, 0x47, 0xb2, 0xe0, 0x2f, 0x8f, 0x5f, 0x3a, 0x08, 0x1e, 0xb2,
0x78, 0xc9, 0x4c, 0x16, 0xdc, 0xb9, 0x73, 0x90, 0x9f, 0x2c, 0xf9, 0x86, 0xc7, 0xe8, 0x10, 0x9e,
0xb8, 0x57, 0x08, 0x1d, 0x3a, 0xa4, 0x4b, 0x3f, 0x13, 0x83, 0xb3, 0x2a, 0x08, 0x8c, 0x17, 0x91,
0x70, 0x1a, 0xce, 0x03, 0x29, 0xcb, 0x28, 0x78, 0xea, 0x94, 0x19, 0x1e, 0x83, 0xc3, 0x3c, 0x9c,
0x57, 0xc9, 0x22, 0x61, 0x84, 0x07, 0x6d, 0xe1, 0x71, 0x1e, 0x04, 0x0f, 0x89, 0x12, 0x25, 0xc8,
0x5f, 0x8b, 0x6b, 0x7b, 0x19, 0x4a, 0x0a, 0x9e, 0xe2, 0xd7, 0x52, 0x74, 0x0d, 0x1e, 0x12, 0x38,
0x04, 0x8f, 0x74, 0x70, 0x14, 0xb7, 0x66, 0x74, 0xd8, 0x06, 0x12, 0xd8, 0x07, 0xef, 0xa3, 0x28,
0x85, 0xb3, 0x24, 0x4e, 0xf1, 0x22, 0x3c, 0x04, 0xcf, 0xf0, 0xc8, 0x25, 0x59, 0x85, 0x07, 0x0e,
0xe1, 0x43, 0x5c, 0x74, 0xe4, 0x9a, 0x0d, 0xb8, 0x84, 0x27, 0x8e, 0xc1, 0x81, 0x3d, 0x3b, 0xee,
0xdc, 0x92, 0x05, 0xd7, 0xf0, 0x10, 0xbc, 0xc2, 0x83, 0xf8, 0xe0, 0xf1, 0x06, 0x83, 0x43, 0x78,
0x90, 0x1c, 0x2f, 0x38, 0x72, 0xe0, 0x10, 0x1c, 0xc4, 0x85, 0x0f, 0xa9, 0xc1, 0x23, 0x59, 0x47,
0x47, 0xf1, 0xec, 0xd8, 0x26, 0x8b, 0xf8, 0x10, 0x9e, 0x38, 0x85, 0xe7, 0xe0, 0x11, 0x1f, 0xa2,
0x13, 0x27, 0x49, 0xe9, 0x92, 0x7d, 0x74, 0x08, 0x9f, 0x5c, 0xb9, 0x86, 0xf7, 0xe0, 0xc1, 0x96,
0xed, 0x36, 0x97, 0xc5, 0xb3, 0x0d, 0x70, 0xcf, 0x1a, 0xe3, 0x69, 0x3a, 0xf0, 0x5e, 0x16, 0xd3,
0x4a, 0x3a, 0x37, 0xae, 0xd3, 0xe2, 0x2e, 0x5c, 0xa5, 0x79, 0xc1, 0x43, 0x46, 0x78, 0x90, 0x16,
0xbc, 0xf8, 0xca, 0x99, 0x0f, 0xf3, 0x52, 0xc6, 0x3a, 0x08, 0x0f, 0x52, 0xd9, 0x8b, 0xbb, 0x8b,
0xd1, 0x29, 0x3e, 0x70, 0x8f, 0x8e, 0x52, 0xc5, 0x65, 0x04, 0x31, 0xfb, 0x88, 0xa7, 0x4c, 0x1e,
0x75, 0x31, 0x6b, 0x88, 0x13, 0xc7, 0x56, 0x0c, 0x1b, 0xd1, 0xac, 0xd2, 0x65, 0xf0, 0x8c, 0x1e,
0x5c, 0xc2, 0x83, 0xd8, 0xe0, 0xc0, 0x5a, 0x14, 0x4b, 0x96, 0x2c, 0xa4, 0x27, 0x87, 0xa2, 0x19,
0x9e, 0x58, 0xb3, 0x66, 0x25, 0x32, 0x78, 0x30, 0x67, 0x1e, 0x1e, 0xa2, 0x07, 0xbb, 0xf0, 0xc0,
0x26, 0x3c, 0xb0, 0x0a, 0x0e, 0x2c, 0x98, 0x33, 0x63, 0xc6, 0x94, 0x09, 0x17, 0xb6, 0xd1, 0x89,
0x55, 0xf0, 0x23, 0xc2, 0x98, 0x2d, 0x9b, 0xf0, 0x10, 0x1d, 0xe2, 0x23, 0x73, 0xe2, 0xcc, 0x88,
0x86, 0x8f, 0xe0, 0x1d, 0x5e, 0xa2, 0x07, 0x53, 0xa2, 0xe1, 0x2b, 0x59, 0xb2, 0x22, 0xc9, 0x82,
0x04, 0x73, 0x62, 0xe1, 0x83, 0x09, 0x13, 0xc2, 0xd1, 0x81, 0x74, 0x74, 0x09, 0x1e, 0xe1, 0x21,
0x38, 0x04, 0x4f, 0xd6, 0xa4, 0xc2, 0x73, 0x7c, 0x8a, 0x0e, 0x8c, 0xb9, 0x70, 0x59, 0x8a, 0x4b,
0x62, 0x4e, 0x64, 0x8e, 0xc8, 0x99, 0x0b, 0xae, 0xc4, 0x56, 0xd8, 0xc3, 0x59, 0x20, 0x78, 0x4f,
0x03, 0xce, 0x4b, 0x71, 0x2e, 0x06, 0x4f, 0x52, 0x2c, 0x53, 0x45, 0x74, 0x5c, 0x1a, 0x7b, 0xb0,
0x71, 0x90, 0x09, 0x5f, 0xc4, 0xc3, 0x07, 0xa7, 0xf0, 0x15, 0x1c, 0xc2, 0x37, 0x8b, 0xe0, 0xc5,
0x71, 0x2f, 0xac, 0x09, 0xb2, 0x79, 0x30, 0x73, 0x44, 0x0f, 0xce, 0xf1, 0x89, 0x03, 0xf9, 0xe8,
0x44, 0xba, 0x51, 0x90, 0x20, 0x1e, 0x7c, 0xc2, 0x57, 0x7c, 0x20, 0x55, 0x19, 0x82, 0x07, 0x25,
0x4e, 0x14, 0xc3, 0x43, 0xf0, 0x24, 0x13, 0x9e, 0x89, 0x45, 0x87, 0xe4, 0x40, 0x21, 0x38, 0x90,
0x63, 0x9b, 0x1e, 0xc2, 0x43, 0x74, 0x60, 0xc6, 0x98, 0x52, 0x72, 0xa0, 0x10, 0x1f, 0xc8, 0x06,
0x8f, 0xf0, 0x11, 0x1d, 0x89, 0x11, 0x66, 0xc4, 0x90, 0x40, 0x7e, 0x20, 0x47, 0x36, 0x7d, 0x90,
0x0e, 0x5f, 0xc4, 0x08, 0x11, 0x0a, 0x1e, 0x04, 0xf8, 0x47, 0xc7, 0xf8, 0x11, 0xbc, 0x19, 0x31,
0x22, 0x18, 0x1c, 0xe8, 0xd3, 0xa3, 0x1b, 0x1c, 0xc2, 0x2f, 0xc3, 0xe0, 0x41, 0x9f, 0x5f, 0xf0,
0xa0, 0x43, 0x9b, 0x56, 0xf4, 0x21, 0xc8, 0x80, 0x40, 0x78, 0xa4, 0x1b, 0x3c, 0x69, 0xd2, 0x44,
0x41, 0x1c, 0x19, 0xd1, 0x91, 0xc1, 0x90, 0x01, 0x3b, 0x36, 0xa4, 0x88, 0x13, 0xa1, 0xe7, 0x3f,
0x00, 0xad, 0xc4, 0x18, 0x40, 0x8f, 0x0e, 0x29, 0x12, 0x44, 0x09, 0x06, 0xef, 0x95, 0xc8, 0x88,
0x01, 0x7d, 0xbe, 0xb4, 0x49, 0x66, 0x09, 0xba, 0x21, 0x88, 0x59, 0xf4, 0x20, 0x94, 0x00, 0xe8,
0xd2, 0xa6, 0x49, 0x1c, 0x31, 0xfd, 0xe0, 0x45, 0x2c, 0x78, 0x30, 0xca, 0x01, 0xc1, 0x93, 0x3a,
0x15, 0x84, 0x38, 0x43, 0x20, 0x33, 0x22, 0x84, 0x09, 0x11, 0xa4, 0x9f, 0x1e, 0x68, 0xd1, 0xc0,
0x4a, 0x09, 0x6f, 0xf0, 0x0c, 0x9f, 0xc1, 0x33, 0x05, 0xe0, 0xa2, 0x41, 0x0d, 0x33, 0xba, 0xe0,
0xc9, 0x34, 0x7c, 0x07, 0x0f, 0x5a, 0x38, 0x82, 0x07, 0x86, 0x18, 0x98, 0x3e, 0xa2, 0x17, 0x3d,
0x3c, 0xb4, 0x71, 0x62, 0xa3, 0x82, 0x11, 0x75, 0x04, 0x08, 0xde, 0xf8, 0xc3, 0x07, 0x6e, 0x9a,
0xd8, 0xb1, 0x60, 0x44, 0x1b, 0x7c, 0xe9, 0xe3, 0xa3, 0x83, 0x1b, 0x27, 0x76, 0xac, 0x98, 0xc0,
0x05, 0x6f, 0x44, 0x04, 0xc3, 0x07, 0xde, 0xe8, 0x11, 0x3c, 0xd1, 0x83, 0xf0, 0x1f, 0xbd, 0x10,
0x86, 0x0f, 0xbc, 0xe1, 0x0b, 0x32, 0x7a, 0x50, 0xfe, 0x91, 0x12, 0x41, 0x4c, 0x08, 0x61, 0xf8,
0x0c, 0x1e, 0x38, 0xb0, 0x62, 0xc6, 0x00, 0x3a, 0x7c, 0x20, 0x21, 0x8c, 0x88, 0x00, 0x7e, 0x7c,
0xe1, 0x13, 0x07, 0x34, 0xc8, 0x10, 0xc0, 0x04, 0x6f, 0x04, 0xc1, 0x07, 0x1b, 0x66, 0x8c, 0x60,
0xfd, 0xcb, 0x96, 0x22, 0x51, 0x9c, 0x18, 0x51, 0x22, 0x84, 0x0b, 0x15, 0x22, 0x58, 0x90, 0x40,
0xf9, 0xf2, 0xe4, 0xca, 0x94, 0x22, 0x21, 0xf8, 0x09, 0x14, 0x10, 0x3c, 0x65, 0x48, 0x96, 0x20,
0x56, 0xb4, 0x48, 0x11, 0xc2, 0xc2, 0x47, 0x78, 0x08, 0x5e, 0xd2, 0x25, 0x8b, 0x0f, 0x9e, 0xc2,
0x83, 0x47, 0x74, 0x60, 0x28, 0x80, 0xbf, 0x3c, 0xbe, 0xdc, 0x39, 0x89, 0x67, 0x2b, 0x9a, 0xa5,
0x70, 0x66, 0x42, 0x18, 0xc7, 0x47, 0x7e, 0x72, 0xf9, 0x48, 0x93, 0xc4, 0x5e, 0x0c, 0x2b, 0x91,
0xc9, 0x81, 0x89, 0x60, 0x46, 0xe1, 0x49, 0x0e, 0xb3, 0xe0, 0x25, 0x82, 0xb9, 0xd0, 0xe0, 0x11,
0x9d, 0xe5, 0x08, 0x63, 0x28, 0x8e, 0x8d, 0x28, 0x16, 0xcc, 0x99, 0x0a, 0x61, 0x24, 0x90, 0x81,
0xfc, 0xe8, 0xc9, 0x8c, 0x21, 0x3f, 0x3e, 0xc1, 0x83, 0x19, 0x53, 0xc6, 0xaf, 0x83, 0x01, 0x7f,
0x7e, 0x7c, 0xa3, 0x47, 0xf0, 0xe4, 0xc5, 0x42, 0x18, 0xd3, 0xf8, 0x10, 0x3e, 0xd2, 0x05, 0x1f,
0xde, 0xe1, 0x8b, 0x17, 0x0f, 0x6e, 0xe1, 0x2b, 0x3c, 0x06, 0x1f, 0x9e, 0xc1, 0x83, 0x0b, 0xe7,
0x53, 0x11, 0xfc, 0x78, 0xf3, 0xe4, 0xce, 0x2d, 0x78, 0x70, 0xa2, 0x10, 0x3c, 0xe8, 0x86, 0x0f,
0xe2, 0x0c, 0xe9, 0xf1, 0xa6, 0xc9, 0x9d, 0x1a, 0x17, 0xca, 0x1c, 0x39, 0xb0, 0x67, 0xc7, 0x37,
0x78, 0x32, 0x0a, 0x5e, 0xe1, 0x93, 0x23, 0x05, 0xf6, 0xe4, 0xd8, 0x92, 0xe1, 0x45, 0x92, 0x50,
0xf6, 0x88, 0x1e, 0xd4, 0xa8, 0x70, 0xa6, 0xc8, 0x81, 0x3c, 0x3b, 0x32, 0xac, 0x59, 0xc9, 0x91,
0x23, 0x5b, 0x96, 0x4c, 0x19, 0xd2, 0xa5, 0x49, 0x93, 0xca, 0x45, 0x32, 0x67, 0x49, 0x12, 0x25,
0x06, 0xa7, 0xe0, 0xc1, 0x5d, 0x1a, 0x57, 0xa9, 0x52, 0x82, 0x83, 0xa4, 0x44, 0x20, 0x87, 0xb7,
0x2c, 0x9e, 0x32, 0xc2, 0x27, 0x57, 0x29, 0xc1, 0x93, 0xa3, 0x44, 0x0e, 0xe1, 0x83, 0x57, 0x78,
0xe4, 0xc6, 0x2d, 0x3a, 0x70, 0x96, 0xcc, 0x29, 0x3a, 0x70, 0x90, 0x2d, 0x9b, 0x57, 0xf8, 0x88,
0x0f, 0xd1, 0x99, 0x53, 0x74, 0xe0, 0xc0, 0x3b, 0x3c, 0xc8, 0xe4, 0x51, 0x3c, 0xc2, 0x43, 0x72,
0x08, 0x0e, 0xd1, 0x41, 0x7c, 0x78, 0xe2, 0x2e, 0x9d, 0x1b, 0xd7, 0x0a, 0xc0, 0x39, 0x78, 0x94,
0xcc, 0xf0, 0x51, 0x2f, 0xc2, 0x43, 0x7c, 0xcc, 0x16, 0xf1, 0x81, 0x43, 0xc5, 0x48, 0x4f, 0xc1,
0x83, 0x6b, 0xf8, 0xe4, 0x14, 0x1f, 0xd9, 0xb3, 0x4f, 0x16, 0xe1, 0x2b, 0x38, 0xb4, 0x40, 0x8e,
0xd1, 0x31, 0x78, 0x26, 0x8b, 0xf0, 0x19, 0x1f, 0x29, 0x05, 0x87, 0x86, 0xc0, 0x2e, 0x7c, 0xa4,
0xcb, 0xe4, 0x50, 0x3f, 0xa2, 0x53, 0x43, 0x0c, 0x1e, 0x34, 0xba, 0x45, 0x7c, 0xa4, 0xcc, 0x89,
0x62, 0x74, 0x6c, 0x09, 0xb4, 0xe2, 0x4b, 0xf8, 0x88, 0x0e, 0x14, 0x29, 0x04, 0x07, 0x72, 0xc1,
0x83, 0x06, 0x75, 0x6e, 0x54, 0xe3, 0x4b, 0x74, 0x24, 0xc7, 0x92, 0x46, 0xfc, 0xa0, 0xc6, 0x95,
0x0a, 0x65, 0x4a, 0xd1, 0x23, 0x3c, 0x8c, 0xc8, 0x02, 0x21, 0xfe, 0x50, 0xdc, 0x86, 0xc6, 0x28,
0xb3, 0x71, 0x54, 0x41, 0x09, 0xe2, 0xd9, 0x89, 0x63, 0xcb, 0xa6, 0x57, 0xf0, 0x6a, 0x8d, 0x79,
0x8a, 0x7d, 0xf0, 0x10, 0x1b, 0x3c, 0x44, 0xb3, 0x16, 0x95, 0x07, 0xf3, 0x54, 0x78, 0x16, 0xc3,
0x7a, 0x0e, 0x88, 0x64, 0xc9, 0x42, 0x7a, 0x13, 0xdc, 0x04, 0xec, 0xc4, 0xb2, 0x61, 0x13, 0x1c,
0x58, 0x05, 0x87, 0x57, 0xc1, 0xbc, 0x0c, 0xb0, 0x8f, 0x17, 0xd1, 0x21, 0x3c, 0xb2, 0x0c, 0x5e,
0xcc, 0x5e, 0x07, 0x3b, 0x76, 0xc1, 0x21, 0x3c, 0x84, 0x8f, 0xe0, 0x41, 0x82, 0x39, 0x73, 0x62,
0xc1, 0x8f, 0x15, 0xa9, 0xe8, 0xcc, 0x8c, 0x28, 0xd3, 0xf0, 0x10, 0x5d, 0x48, 0xb2, 0x08, 0x1f,
0xd1, 0x81, 0x28, 0x13, 0x76, 0x64, 0xd9, 0x9c, 0x0a, 0xd2, 0xc9, 0x82, 0x65, 0x70, 0x20, 0x4e,
0x8c, 0x69, 0xf0, 0x8c, 0x4f, 0xa4, 0xd2, 0x65, 0x7c, 0x0a, 0x9e, 0x64, 0x1f, 0x06, 0xeb, 0xf0,
0x40, 0x92, 0x24, 0x09, 0x16, 0xe1, 0x21, 0x3e, 0x30, 0x21, 0x12, 0x7c, 0xd2, 0x0d, 0x51, 0xa2,
0x44, 0x88, 0x84, 0x07, 0x36, 0xe1, 0x81, 0x54, 0x78, 0x20, 0x41, 0x9c, 0x78, 0xba, 0x24, 0x42,
0x38, 0xba, 0x24, 0x8b, 0xe8, 0x48, 0x2c, 0x3c, 0x12, 0x26, 0x4b, 0x86, 0x34, 0xe9, 0xf0, 0x10,
0x3e, 0xc2, 0x43, 0x70, 0x08, 0x5e, 0x47, 0xf2, 0xac, 0x0e, 0x89, 0xaa, 0x91, 0x2c, 0x96, 0xe2,
0x5e, 0xbc, 0xca, 0xe3, 0xa2, 0x6e, 0x9e, 0xa9, 0x3b, 0x31, 0x0d, 0xae, 0x02, 0xf9, 0xae, 0x10,
0x1e, 0xd8, 0x9c, 0xa9, 0x27, 0x45, 0x21, 0x3a, 0x92, 0x63, 0x9b, 0x2c, 0x82, 0xe7, 0x5e, 0xd8,
0x1a, 0x7b, 0x23, 0x3c, 0x46, 0x47, 0x32, 0x4c, 0xf7, 0x44, 0x74, 0xe4, 0x18, 0x1e, 0x82, 0x07,
0x39, 0xb2, 0xe1, 0x81, 0x4d, 0x85, 0x60, 0x4c, 0xf8, 0x2c, 0x06, 0xcf, 0x21, 0x19, 0x3c, 0x58,
0x13, 0x61, 0x42, 0x98, 0x11, 0x21, 0x86, 0x04, 0x8f, 0x42, 0xba, 0x08, 0x1f, 0x5d, 0x81, 0x34,
0x93, 0xf0, 0xc0, 0x88, 0x20, 0x43, 0x02, 0x0c, 0xe8, 0x93, 0xeb, 0x13, 0xe1, 0x91, 0x74, 0x8d,
0x08, 0x4f, 0x04, 0xe8, 0xf3, 0xa7, 0x47, 0x8f, 0x2f, 0x99, 0xaa, 0x19, 0x1e, 0x08, 0x45, 0x87,
0xf0, 0x48, 0x9f, 0x1e, 0x5d, 0xba, 0x74, 0xe8, 0xd0, 0x26, 0x45, 0x38, 0x3e, 0x10, 0x24, 0x48,
0x20, 0x7c, 0x84, 0x87, 0xe0, 0x49, 0x9b, 0x36, 0x2d, 0xc6, 0xe1, 0x21, 0x78, 0xd2, 0x0f, 0x0f,
0xe1, 0x23, 0x3c, 0x06, 0x8f, 0x74, 0x49, 0x90, 0x41, 0x78, 0x88, 0xae, 0xb4, 0x70, 0x11, 0x26,
0x14, 0xdd, 0xe3, 0x05, 0x6e, 0x5a, 0xb4, 0xa2, 0x3b, 0x5e, 0x3a, 0x78, 0xe2, 0x23, 0xce, 0xb3,
0xb9, 0x2e, 0xf6, 0xd1, 0xd9, 0xd8, 0x06, 0xf9, 0x80, 0xd0, 0x3e, 0x67, 0x36, 0x1d, 0xab, 0x46,
0xf0, 0x24, 0x75, 0x35, 0x48, 0x1c, 0xc3, 0x65, 0x9d, 0x2e, 0xf6, 0x21, 0xab, 0xe8, 0xb8, 0x0e,
0x96, 0x75, 0xb2, 0x08, 0x1e, 0xe1, 0x61, 0x59, 0x30, 0x3f, 0x06, 0xc1, 0x77, 0x1f, 0x3d, 0x85,
0x75, 0x79, 0x35, 0x92, 0x45, 0x3e, 0xdc, 0x06, 0xac, 0x8f, 0x11, 0xb1, 0xf0, 0x1c, 0xbc, 0xef,
0x66, 0x78, 0x0c, 0xde, 0x88, 0x08, 0x21, 0x4c, 0x17, 0x57, 0xfb, 0x18, 0xb5, 0x85, 0xaa, 0x79,
0xb6, 0xee, 0x46, 0x74, 0x42, 0x42, 0x18, 0x31, 0x22, 0x82, 0xe1, 0x23, 0x3a, 0x23, 0x23, 0x86,
0x94, 0x48, 0xf0, 0x20, 0x14, 0x3c, 0x10, 0xd0, 0xa2, 0x59, 0x0c, 0x90, 0x67, 0x8b, 0xaf, 0x10,
0x9e, 0x10, 0x22, 0x24, 0x40, 0x93, 0x26, 0x0d, 0x1a, 0xc4, 0x91, 0x21, 0x0b, 0x4f, 0x88, 0x93,
0x05, 0x42, 0x04, 0x34, 0x71, 0xe2, 0xa0, 0x8e, 0x9d, 0x1a, 0x55, 0xa2, 0x48, 0x90, 0xc4, 0x0b,
0x44, 0xc1, 0x01, 0x01, 0xce, 0xf0, 0x80, 0x1d, 0x1b, 0x36, 0xac, 0x58, 0xa9, 0x60, 0x26, 0x1c,
0x1c, 0x82, 0x07, 0x7e, 0x9a, 0x38, 0xc2, 0x07, 0x36, 0x6a, 0x58, 0xb1, 0x60, 0xc1, 0x8c, 0x09,
0x13, 0x46, 0x04, 0x08, 0xf0, 0xef, 0x83, 0x65, 0xb4, 0xb4, 0x68, 0x45, 0x85, 0x38, 0x41, 0x6c,
0x99, 0x6c, 0xa5, 0x2c, 0x41, 0x23, 0x09, 0x60, 0x0d, 0x5e, 0x5b, 0x93, 0x0e, 0x6e, 0xda, 0xb8,
0xc2, 0x47, 0xf0, 0x8a, 0x4e, 0xf4, 0xe7, 0x41, 0x70, 0x08, 0x1f, 0x38, 0xd2, 0x44, 0xf8, 0xd8,
0x3a, 0x4b, 0x23, 0x3c, 0xa4, 0x85, 0xe0, 0x8d, 0x9f, 0x3e, 0x3e, 0xba, 0x78, 0xa2, 0x47, 0x72,
0xc0, 0x11, 0x3f, 0xf2, 0x40, 0x74, 0xc4, 0x47, 0x0f, 0x6f, 0x78, 0xc0, 0x1d, 0x3e, 0xa2, 0x63,
0xf0, 0x40, 0x40, 0x00, 0x7f, 0x70, 0x08, 0x1f, 0x47, 0x22, 0x78, 0x17, 0x0e, 0x04, 0xf4, 0xf1,
0x47, 0x47, 0x3c, 0xe1, 0xb1, 0x0e, 0xc4, 0x47, 0x28, 0xe1, 0x11, 0x5f, 0x74, 0x08, 0x5e, 0x55,
0x00, 0x3b, 0xb4, 0xf0, 0x19, 0x1e, 0x82, 0x27, 0xee, 0xf8, 0x0a, 0x15, 0x0b, 0xfe, 0xf8, 0x18,
0x3e, 0x82, 0x43, 0x7c, 0x80, 0x11, 0x1e, 0xa1, 0x04, 0x0f, 0x7c, 0xd1, 0x05, 0x66, 0x74, 0x80,
0x8e, 0x0d, 0x2a, 0x14, 0xcc, 0xd1, 0x05, 0x76, 0xba, 0x84, 0x1e, 0xbe, 0x20, 0x07, 0x0f, 0xbc,
0x78, 0xe1, 0x44, 0x07, 0x58, 0x30, 0xa3, 0x63, 0x72, 0x80, 0x02, 0x39, 0x3a, 0xc0, 0xc5, 0x93,
0x2e, 0x60, 0xe1, 0xc4, 0x09, 0x03, 0x3a, 0xb4, 0xe8, 0x00, 0x19, 0x32, 0xd2, 0xc5, 0x31, 0x2a,
0xf1, 0x85, 0x84, 0x04, 0x00, 0x0d, 0x32, 0x44, 0xb0, 0xc0, 0xa8, 0xce, 0x86, 0xe0, 0x15, 0x13,
0x22, 0x00, 0x36, 0x28, 0xc1, 0x03, 0xc4, 0xe4, 0x0c, 0xdf, 0xb0, 0x83, 0x07, 0xb4, 0xe0, 0x01,
0x0e, 0xc4, 0xe2, 0x98, 0x0d, 0x18, 0xf0, 0xa7, 0xc4, 0xe8, 0x19, 0x3c, 0x41, 0x86, 0x4f, 0x8c,
0x18, 0xc0, 0xa3, 0xc5, 0x03, 0x1b, 0x66, 0xf2, 0x88, 0x1f, 0xe0, 0x82, 0x27, 0xa4, 0xe0, 0x01,
0x0e, 0x2d, 0x18, 0x50, 0x38, 0xa1, 0x43, 0x0d, 0x3e, 0x98, 0x20, 0xa2, 0x0f, 0x5e, 0x20, 0x81,
0x07, 0x6f, 0xcc, 0xe1, 0x11, 0x3c, 0x3a, 0xb0, 0xe1, 0x23, 0x78, 0x00, 0x0d, 0x5f, 0xc1, 0x13,
0x02, 0xf8, 0xf0, 0x01, 0x1a, 0x14, 0x08, 0xe0, 0x40, 0x01, 0x03, 0x8c, 0x1f, 0x90, 0xa3, 0x03,
0x84, 0xe8, 0x01, 0x26, 0xf8, 0x00, 0x80, 0x0b, 0x32, 0x78, 0x81, 0x8f, 0x0e, 0xc1, 0x13, 0x58,
0xf8, 0x08, 0x1e, 0x30, 0x21, 0xc7, 0x0f, 0x08, 0xe0, 0x82, 0x27, 0x48, 0x10, 0xc0, 0x80, 0x00,
0x0a, 0x1e, 0x30, 0x20, 0x41, 0x8c, 0x8f, 0xc9, 0x29, 0x78, 0xc3, 0x09, 0xbe, 0xd1, 0x21, 0x3d,
0x84, 0x4f, 0xf8, 0x70, 0xa0, 0x87, 0xef, 0xe4, 0x0a, 0x10, 0x3e, 0x6c, 0x68, 0xc1, 0x33, 0x3e,
0x65, 0x17, 0x78, 0xb0, 0xa1, 0xf8, 0x27, 0x44, 0x8f, 0x0e, 0x4d, 0xee, 0xdc, 0xa8, 0x70, 0xa2,
0xc8, 0x81, 0x3c, 0x5b, 0x32, 0xa4, 0x59, 0xf9, 0x27, 0x4c, 0x9f, 0x0f, 0x4d, 0xea, 0xd4, 0xb8,
0x50, 0xe2, 0x48, 0x81, 0x1d, 0x59, 0x36, 0xa4, 0x49, 0xf9, 0x27, 0x42, 0x9f, 0x0e, 0xaf, 0xe0,
0x41, 0x85, 0x12, 0xc5, 0xe0, 0x49, 0x86, 0x75, 0xf0, 0x20, 0x4a, 0x80, 0x0e, 0x2d, 0x1a, 0xd1,
0x8b, 0x02, 0xb9, 0xe8, 0x4d, 0x9c, 0x00, 0xdd, 0xe0, 0x41, 0x2d, 0x7c, 0x91, 0x23, 0x1b, 0x3f,
0xc2, 0x87, 0x7f, 0x82, 0xc1, 0x9b, 0x72, 0xf4, 0x08, 0xbe, 0x88, 0xe8, 0xd1, 0xa6, 0x11, 0x3e,
0x82, 0x7f, 0x0a, 0xc0, 0x87, 0x9b, 0x26, 0x36, 0x2a, 0xc1, 0xdf, 0x3f, 0x36, 0xfa, 0x78, 0x68,
0x62, 0xa7, 0x8a, 0x99, 0x22, 0x06, 0x72, 0x68, 0xc9, 0xa0, 0x8e, 0x9f, 0xfe, 0x11, 0xe2, 0xc1,
0x49, 0x1d, 0x2b, 0x65, 0x8c, 0x14, 0xd0, 0x91, 0x45, 0x43, 0x1a, 0xa5, 0xff, 0x00, 0x80, 0x09,
0x2f, 0x2e, 0xec, 0x58, 0x31, 0x63, 0x0a, 0xfe, 0xd8, 0xd0, 0xe1, 0xc6, 0x41, 0x0d, 0x13, 0x26,
0x0c, 0xe4, 0xd1, 0xa2, 0x41, 0x4d, 0x32, 0x7c, 0xfa, 0xc7, 0x80, 0x06, 0x05, 0x36, 0x2c, 0xc1,
0x03, 0x7d, 0xf0, 0x8c, 0x5e, 0xfe, 0x21, 0xa1, 0x45, 0x89, 0x2c, 0xf8, 0xa2, 0x0a, 0x5f, 0xfe,
0xc1, 0xa1, 0x42, 0x8e, 0x14, 0x33, 0x46, 0xf4, 0xe8, 0xa2, 0x47, 0xf0, 0x81, 0x08, 0x1a, 0x05,
0x50, 0xc4, 0x00, 0x83, 0x37, 0x49, 0x16, 0xc4, 0xb9, 0x51, 0xe3, 0xca, 0x85, 0x33, 0xa5, 0x01,
0xc4, 0xbe, 0x26, 0xb0, 0x24, 0x41, 0x9c, 0x18, 0x51, 0xaa, 0xe5, 0xa1, 0x7b, 0x34, 0x00, 0xf2,
0xe4, 0x82, 0x47, 0xf8, 0x64, 0x46, 0x94, 0x09, 0x11, 0xc2, 0xe1, 0x91, 0x42, 0xf0, 0x20, 0x4b,
0x96, 0x64, 0xf8, 0x0a, 0x0e, 0x84, 0x09, 0x11, 0x0c, 0x0e, 0xc1, 0x3f, 0x78, 0x10, 0x0a, 0x1e,
0x04, 0xe8, 0x07, 0x4f, 0x32, 0xe1, 0x37, 0x78, 0xd3, 0xa3, 0x47, 0x37, 0xf8, 0x13, 0x24, 0x18,
0x3e, 0x82, 0x03, 0x5d, 0x3c, 0xe1, 0x17, 0x51, 0x70, 0x40, 0x40, 0x1f, 0x1f, 0x5d, 0xbc, 0x74,
0x48, 0x20, 0x27, 0x86, 0x94, 0x28, 0x92, 0xe4, 0x80, 0x90, 0x00, 0xfe, 0xe0, 0x89, 0x07, 0x4f,
0x7a, 0x40, 0x16, 0x1c, 0x88, 0x20, 0x0e, 0x9f, 0xc1, 0x9b, 0x0e, 0x0a, 0xe2, 0xc1, 0x93, 0x30,
0x61, 0x44, 0x08, 0x11, 0xe0, 0xc7, 0x17, 0x3d, 0xf0, 0xe0, 0x46, 0x81, 0x1c, 0x19, 0x52, 0x24,
0xe1, 0x21, 0x7c, 0xc4, 0x47, 0xbc, 0x78, 0x83, 0x57, 0xfc, 0x08, 0x9e, 0x08, 0xc3, 0x57, 0xf0,
0x09, 0xdf, 0xc1, 0x21, 0x7a, 0x86, 0x87, 0xe8, 0x1f, 0x7c, 0x71, 0xc7, 0xbf, 0xe8, 0x98, 0x3c,
0xe2, 0x23, 0x6c, 0x36, 0x2f, 0x93, 0x54, 0x2f, 0xc8, 0x0d, 0xbd, 0x91, 0x68, 0xeb, 0x24, 0xf3,
0x30, 0x49, 0x55, 0x82, 0x4e, 0x39, 0x18, 0x88, 0x04, 0x2f, 0xd2, 0xa4, 0x83, 0x43, 0x2d, 0x0c,
0xcf, 0xa5, 0x83, 0x50, 0x78, 0x0b, 0x5e, 0xb5, 0xa1, 0x74, 0x44, 0xf7, 0xca, 0x10, 0x1d, 0x10,
0x37, 0x8e, 0xe0, 0x49, 0x12, 0x65, 0x2b, 0xa8, 0x95, 0x8d, 0x21, 0x7c, 0x20, 0x22, 0x44, 0xfb,
0x25, 0x04, 0x5f, 0xa4, 0xf1, 0xa2, 0x31, 0xd2, 0xc6, 0x45, 0x0b, 0x27, 0x89, 0x56, 0x58, 0x2b,
0x6b, 0x43, 0x67, 0x0c, 0x5e, 0x34, 0x70, 0xb4, 0x82, 0x5a, 0x41, 0xa4, 0x35, 0x21, 0xc4, 0x8d,
0x0b, 0x27, 0x4e, 0x1c, 0xd4, 0xb1, 0x63, 0xa3, 0xda, 0x29, 0xc3, 0x43, 0x6b, 0xc0, 0x1d, 0x1d,
0x82, 0x47, 0x70, 0xc0, 0x86, 0x15, 0x0b, 0x16, 0xcc, 0xc1, 0x0b, 0x57, 0xf8, 0xc0, 0x81, 0x23,
0xf8, 0x62, 0xc2, 0xd4, 0x18, 0x82, 0x17, 0xf6, 0xe0, 0x81, 0x35, 0x7c, 0x60, 0xc6, 0x8c, 0x09,
0x22, 0x46, 0x08, 0xf1, 0x29, 0x78, 0x43, 0xc1, 0x0c, 0x19, 0x13, 0xc6, 0xe0, 0x85, 0x03, 0x46,
0x78, 0x80, 0x16, 0x9f, 0x20, 0x85, 0x0f, 0x0c, 0xe1, 0x03, 0x66, 0x7c, 0x0c, 0x0e, 0x50, 0xa1,
0x40, 0x0e, 0x0f, 0x10, 0x21, 0x62, 0x00, 0x7f, 0x85, 0xce, 0x04, 0xfd, 0xb3, 0x44, 0x27, 0x6f,
0x64, 0x83, 0xc7, 0x71, 0x24, 0xd6, 0xe2, 0x59, 0xc2, 0x5d, 0x36, 0x8a, 0xc6, 0x16, 0xb8, 0x12,
0x47, 0x82, 0x1e, 0xde, 0x3b, 0x11, 0x9e, 0x69, 0x86, 0x0f, 0x04, 0xe1, 0x65, 0x2d, 0x44, 0x87,
0xa2, 0x59, 0x21, 0xee, 0x10, 0xbe, 0xa5, 0x10, 0x1e, 0xea, 0x72, 0xbc, 0xc4, 0xbf, 0x26, 0xde,
0xc0, 0x93, 0x08, 0x4f, 0x75, 0xa1, 0x42, 0x84, 0x0f, 0x7a, 0xe1, 0x61, 0x2b, 0x46, 0x67, 0x1c,
0x7b, 0x38, 0x3a, 0xc6, 0x27, 0x9c, 0x45, 0x03, 0x7a, 0xb2, 0x88, 0x8e, 0x77, 0x28, 0xbc, 0x04,
0xaf, 0xcf, 0x71, 0x07, 0x61, 0xe3, 0x86, 0x15, 0x1e, 0xeb, 0xc2, 0x63, 0xc0, 0x0f, 0x0f, 0x2f,
0xdc, 0x64, 0x15, 0xbc, 0xa0, 0x63, 0x47, 0x00, 0x3f, 0x3c, 0x86, 0x0f, 0xd8, 0xb0, 0x61, 0xe1,
0x8a, 0x17, 0x30, 0xa0, 0x43, 0xc3, 0x10, 0x1e, 0xf0, 0xc1, 0x85, 0x83, 0x07, 0x36, 0x2e, 0x58,
0x30, 0x61, 0x06, 0x07, 0xec, 0xd0, 0xd0, 0x83, 0x47, 0x07, 0x36, 0x3a, 0xc0, 0x8d, 0x17, 0xe1,
0x25, 0x78, 0x80, 0x0b, 0x1e, 0x60, 0xd1, 0x80, 0x8e, 0x0e, 0xe1, 0x29, 0x3a, 0x40, 0x03, 0x0f,
0x0e, 0x1c, 0x5a, 0x30, 0x60, 0x40, 0x83, 0x02, 0x05, 0x12, 0x46, 0x74, 0x08, 0x1e, 0x50, 0xf7,
0x06, 0x76, 0xea, 0xeb, 0x60, 0x3c, 0x2d, 0x0b, 0x8c, 0x18, 0x92, 0x05, 0x0e, 0x1a, 0xeb, 0x68,
0x59, 0xcf, 0x8b, 0xf1, 0x80, 0x7e, 0x6b, 0x6c, 0xf3, 0x69, 0x81, 0x01, 0x3d, 0xb8, 0xe0, 0xb5,
0x8d, 0x21, 0x85, 0xa7, 0x6c, 0x70, 0x74, 0xb6, 0xc1, 0x3e, 0x5c, 0x96, 0xe1, 0x63, 0x6f, 0x42,
0x4d, 0x96, 0xeb, 0x20, 0x7c, 0x40, 0x88, 0x0f, 0xf9, 0x20, 0x5e, 0x41, 0xc5, 0x02, 0x19, 0x73,
0x70, 0x80, 0x08, 0x01, 0x7c, 0x78, 0x00, 0x5b, 0x21, 0xb0, 0x05, 0x87, 0xe8, 0x00, 0x29, 0xbc,
0x80, 0x0b, 0x9e, 0x58, 0xc3, 0xe3, 0xd1, 0x0a, 0x0f, 0x65, 0x03, 0x2c, 0x58, 0x68, 0xe1, 0x01,
0x4a, 0x78, 0x3a, 0x1b, 0xc1, 0xa3, 0x2a, 0x80, 0x05, 0x03, 0x2d, 0x59, 0x5c, 0xc5, 0xe8, 0x10,
0x2f, 0x82, 0x4f, 0x78, 0x4c, 0x16, 0x90, 0x21, 0x85, 0xa7, 0xe8, 0xd8, 0x24, 0xa0, 0x3e, 0x89,
0xf0, 0x11, 0xde, 0xdb, 0x40, 0xf0, 0x7c, 0x13, 0xe1, 0x2d, 0x3e, 0x80, 0x0e, 0xef, 0x7d, 0x30,
0x38, 0x06, 0xcf, 0xf0, 0x9e, 0x0d, 0x06, 0xe7, 0x3a, 0xc0, 0x0b, 0x67, 0x6b, 0x1e, 0xc9, 0x32,
0x11, 0x35, 0xd2, 0xc0, 0xb4, 0x08, 0x1e, 0xf3, 0x68, 0x2d, 0xe6, 0x85, 0x34, 0x19, 0x3c, 0xd0,
0x80, 0x41, 0xbd, 0xb6, 0x83, 0x63, 0xf0, 0x04, 0x3b, 0x2f, 0x40, 0x83, 0x46, 0x05, 0x12, 0x04,
0xf4, 0xb9, 0x19, 0x1c, 0x21, 0xa6, 0x8c, 0x75, 0xb0, 0x0c, 0x41, 0x00, 0x07, 0x16, 0x9d, 0x83,
0x67, 0x78, 0x58, 0x1b, 0x20, 0x82, 0x27, 0x50, 0x20, 0x80, 0x2b, 0x67, 0xce, 0x0c, 0xcf, 0xe1,
0x23, 0x78, 0x02, 0x02, 0x08, 0x60, 0x6f, 0x81, 0x8c, 0x0f, 0xc1, 0x31, 0xf8, 0x46, 0xf7, 0xe8,
0x00, 0x28, 0x7c, 0x9d, 0x85, 0xf0, 0x0c, 0x2c, 0xbc, 0xc0, 0x0f, 0xef, 0xe1, 0x01, 0x70, 0x78,
0x0c, 0x1e, 0xd9, 0x24, 0xbc, 0xc1, 0x8b, 0x8e, 0xd9, 0x24, 0x3e, 0xa6, 0x0b, 0xf8, 0xf0, 0xb2,
0x79, 0xb4, 0x86, 0x07, 0xb7, 0x68, 0x64, 0x63, 0x20, 0xe1, 0x35, 0x78, 0x96, 0x85, 0xa2, 0x17,
0x2d, 0xe0, 0xc2, 0x39, 0x95, 0x87, 0x60, 0x70, 0x44, 0x82, 0x14, 0x01, 0x18, 0x00, 0x3c, 0x58,
0xfe, 0x83, 0x77, 0x2a, 0x8c, 0x18, 0x40, 0x00, 0x01, 0x80, 0x0b, 0x33, 0x78, 0x4f, 0xc6, 0x58,
0x50, 0x3c, 0x00, 0xc1, 0x87, 0x03, 0xc3, 0xff, 0xa1, 0x6c, 0x89, 0x29, 0x13, 0x28, 0x60, 0x80,
0xc1, 0x03, 0x7a, 0xf0, 0xe9, 0x81, 0xf1, 0x11, 0x20, 0x3c, 0xd8, 0x50, 0x83, 0x57, 0x74, 0x04,
0x19, 0x5f, 0x92, 0x83, 0xff, 0x4b, 0x94, 0x1c, 0xe2, 0x63, 0x74, 0x8a, 0x0f, 0xfe, 0x73, 0x26,
0x98, 0xe8, 0x1e, 0x1f, 0x82, 0x47, 0x41, 0x80, 0x0d, 0x2b, 0xba, 0xe4, 0x0b, 0x28, 0xfe, 0xfd,
0xd7, 0x88, 0xe3, 0x00, 0x73, 0x1f, 0x40, 0xad, 0x0f, 0xf0, 0xf3, 0x65, 0xf0, 0x0a, 0x0f, 0xc1,
0x63, 0x6d, 0x40, 0x86, 0x08, 0x0e, 0x76, 0x74, 0xf4, 0x1f, 0x9d, 0xce, 0x26, 0x14, 0x48, 0x10,
0xc0, 0x82, 0x02, 0x12, 0x1e, 0x82, 0xe7, 0x39, 0x80, 0x11, 0x9e, 0xc0, 0x83, 0x01, 0x11, 0x1c,
0xfd, 0xc7, 0x8b, 0xe0, 0x71, 0x16, 0xc2, 0x23, 0x38, 0xd0, 0xc0, 0x82, 0x4f, 0xb2, 0x3a, 0x02,
0xe0, 0xc1, 0x82, 0x0c, 0x4e, 0xfe, 0x93, 0x65, 0x78, 0x4c, 0x96, 0xa0, 0x81, 0x07, 0xef, 0x40,
0x12, 0x0e, 0x90, 0x01, 0x41, 0x08, 0x00, 0xdd, 0x97, 0x00, 0x15, 0x7c, 0xc0, 0x83, 0x02, 0x8e,
0x04, 0x10, 0x02, 0x78, 0x78, 0xbf, 0x44, 0x24, 0x4d, 0x07, 0xdd, 0x03, 0x00, 0x7c, 0xbc, 0xf1,
0x22, 0xf8, 0x82, 0x07, 0x09, 0xac, 0x05, 0x16, 0x03, 0x5c, 0x89, 0x0c, 0x0c, 0xf0, 0xe9, 0x09,
0x0f, 0x4e, 0x8f, 0x0c, 0x31, 0x10, 0x40, 0x02, 0x9d, 0x1f, 0xc1, 0x03, 0x76, 0x26, 0x8f, 0x00,
0x31, 0x28, 0xf8, 0x87, 0x8e, 0x08, 0xd8, 0x11, 0x82, 0x7f, 0xf0, 0x00, 0x0b, 0xfc, 0x00, 0xc2,
0x29, 0xe5, 0x41, 0x00, 0x54, 0x82, 0x88, 0x00, 0xc1, 0x3f, 0x08, 0x82, 0x88, 0x00, 0x70, 0x83,
0x7f, 0x10, 0x02, 0x76, 0x12, 0x82, 0x7f, 0x10, 0x02, 0x03, 0x04, 0x40, 0xf0, 0x0f, 0xc2, 0x20,
0x01, 0x05, 0xff, 0x20, 0xd2, 0xcb, 0x43, 0x1f, 0x0a, 0xe0, 0xc8, 0x80, 0x22, 0x01, 0x8c, 0x08,
0x20, 0x02, 0xf8, 0xf8, 0xf6, 0x02, 0x1e, 0xd8, 0xb8, 0x50, 0x06, 0x2f, 0xc4, 0x80, 0x86, 0x01,
0xfe, 0x7e, 0x81, 0x17, 0x0e, 0xee, 0xb3, 0x80, 0x1c, 0x18, 0x52, 0x20, 0xe1, 0x3b, 0x3c, 0x04,
0xaf, 0x65, 0xf1, 0x25, 0x80, 0x84, 0x0f, 0x80, 0xc3, 0x00, 0x5f, 0xbf, 0xd8, 0x46, 0x38, 0xf6,
0x41, 0xf8, 0x8b, 0x0f, 0x57, 0x0b, 0x3a, 0x54, 0x28, 0x90, 0x01, 0x85, 0xcf, 0x27, 0x05, 0xeb,
0x1c, 0x06, 0x2f, 0x48, 0x10, 0xa3, 0x47, 0xf0, 0x81, 0x75, 0x8f, 0x8e, 0x03, 0x44, 0x08, 0xe0,
0x83, 0x37, 0xcc, 0x6b, 0x1d, 0xbc, 0xc1, 0x81, 0x4d, 0x4e, 0xb0, 0x61, 0x9e, 0x07, 0xa8, 0xc1,
0x17, 0x0c, 0xe8, 0x70, 0x11, 0x3c, 0xde, 0x55, 0xfc, 0x88, 0x1e, 0xe1, 0x23, 0x78, 0x80, 0x02,
0xb9, 0x21, 0x12, 0x40, 0x06, 0x08, 0xfe, 0x20, 0xe1, 0xc6, 0xc0, 0x1c, 0x98, 0x3c, 0xc3, 0x0f,
0xfc, 0x08, 0x08, 0xad, 0x00, 0x04, 0x7f, 0x80, 0x11, 0x20, 0x01, 0xc7, 0x1f, 0x90, 0xbb, 0x20,
0x02, 0x64, 0x88, 0x04, 0x04, 0x3e, 0x7a, 0x26, 0x07, 0x10, 0xb8, 0x5a, 0x00, 0x74, 0xec, 0xd0,
0xb0, 0x42, 0xc5, 0x82, 0x39, 0x17, 0x60, 0x8c, 0x95, 0x30, 0x71, 0xc2, 0xc0, 0x5e, 0x20, 0xb0,
0x42, 0x81, 0x82, 0x19, 0x52, 0x26, 0xc0, 0x10, 0x2b, 0x70, 0xc2, 0xc4, 0x01, 0x1d, 0x5b, 0x47,
0x48, 0x11, 0x25, 0x33, 0x3c, 0x82, 0x8f, 0x0e, 0x0d, 0x10, 0x6a, 0x8e, 0x0c, 0x3e, 0xe0, 0xe2,
0x63, 0x0d, 0x8c, 0x0e, 0xc1, 0xa1, 0x64, 0x66, 0xc2, 0xe0, 0x1f, 0x1c, 0xa2, 0x53, 0xf8, 0x82,
0x16, 0x5f, 0x21, 0x84, 0xc7, 0xe0, 0x1d, 0x9f, 0xd2, 0x65, 0xf0, 0x02, 0x0b, 0x23, 0x39, 0xc5,
0x27, 0x88, 0xd1, 0x39, 0x78, 0x40, 0x4f, 0x4e, 0x90, 0x07, 0x54, 0x74, 0x02, 0x0b, 0x22, 0x38,
0xc4, 0xa7, 0xe8, 0x04, 0xbe, 0x26, 0x06, 0x0f, 0xe0, 0xc0, 0xe2, 0x73, 0x74, 0x02, 0xd7, 0x10,
0x41, 0x04, 0x0f, 0xa0, 0x40, 0x80, 0x44, 0x57, 0xb0, 0x60, 0xc1, 0x04, 0x6f, 0xc0, 0x80, 0x01,
0x25, 0x1b, 0x30, 0xc1, 0xf7, 0x78, 0x9c, 0xc0, 0xe8, 0x04, 0x3a, 0x3a, 0xdc, 0xcf, 0xf0, 0x10,
0x1c, 0x4e, 0xf0, 0x8a, 0x40, 0x9f, 0x30, 0x62, 0x01, 0x68, 0xd0, 0x43, 0x02, 0x24, 0x88, 0xb8,
0x50, 0x25, 0x23, 0xd1, 0xe6, 0x0c, 0x5e, 0xc0, 0xd3, 0x22, 0xd0, 0xf0, 0x3a, 0x25, 0xd3, 0x64,
0x5c, 0x8c, 0xee, 0xc1, 0x21, 0x3c, 0x01, 0x29, 0x88, 0xd1, 0x39, 0x5e, 0x02, 0x0b, 0x8f, 0x40,
0x0a, 0x62, 0xb2, 0x89, 0xd7, 0x40, 0x00, 0xa7, 0x83, 0xf0, 0x1e, 0x9e, 0x82, 0x67, 0x78, 0x07,
0x5a, 0x07, 0xaa, 0x40, 0x85, 0xc8, 0x1b, 0xe9, 0x3c, 0x3a, 0x00, 0x8a, 0x16, 0x45, 0x3b, 0xde,
0x56, 0x81, 0x78, 0x1f, 0xaf, 0x1b, 0x47, 0xf0, 0x7c, 0x04, 0x79, 0x37, 0x5c, 0x04, 0x8f, 0x64,
0x95, 0x77, 0x7b, 0x25, 0x40, 0x80, 0xf1, 0x7e, 0x14, 0x84, 0x27, 0x00, 0xc1, 0x33, 0x3c, 0x01,
0xcf, 0x5a, 0xd1, 0x02, 0x00, 0x80, 0x36, 0x16, 0x9e, 0xa2, 0xc5, 0x20, 0xb8, 0xf3, 0x7d, 0x08,
0x6c, 0xb4, 0xf8, 0xe2, 0x5d, 0x18, 0x14, 0xa8, 0x92, 0xf8, 0x46, 0xba, 0x60, 0xd6, 0xca, 0xc4,
0x00, 0x8e, 0x72, 0x59, 0xce, 0xc4, 0x4b, 0x13, 0xde, 0xa2, 0x01, 0xb1, 0x16, 0xb7, 0x22, 0x7c,
0x78, 0x70, 0xe1, 0xc0, 0x81, 0x1d, 0x2f, 0x56, 0x01, 0xa0, 0x5c, 0x14, 0x1c, 0x83, 0x07, 0x6c,
0xd8, 0xb0, 0x60, 0x7e, 0x8b, 0x23, 0x1d, 0x5e, 0x82, 0x43, 0xf0, 0x80, 0x1e, 0xde, 0xc3, 0x45,
0x78, 0xfc, 0x07, 0x25, 0x0b, 0x5e, 0xbc, 0x8c, 0x36, 0xff, 0x20, 0x99, 0x47, 0x6b, 0x68, 0x50,
0x1b, 0x44, 0x32, 0x81, 0x15, 0xad, 0x83, 0x67, 0x70, 0xc8, 0xda, 0x69, 0x2b, 0x5a, 0x40, 0x85,
0x02, 0x3f, 0xed, 0xc3, 0x08, 0x4e, 0xc1, 0x23, 0x5c, 0xe4, 0xc5, 0x68, 0xfd, 0x2e, 0xdb, 0x45,
0xda, 0xcf, 0x0a, 0xf1, 0x20, 0x38, 0x40, 0x5a, 0x46, 0x6b, 0x61, 0x5c, 0x16, 0xc1, 0xb8, 0x54,
0x23, 0xf6, 0x52, 0xaf, 0xcc, 0x83, 0x85, 0x69, 0x1e, 0x85, 0x8b, 0xe0, 0x0f, 0x7b, 0x2f, 0x7c,
0xa6, 0x4e, 0xd9, 0x33, 0xd3, 0x50, 0xf0, 0x0c, 0x0f, 0x40, 0x83, 0x5f, 0xa1, 0x00, 0x1e, 0xde,
0xe3, 0x15, 0x2c, 0x18, 0xc1, 0x23, 0x6d, 0xa5, 0xe3, 0x11, 0x50, 0x09, 0x73, 0x41, 0xc5, 0x88,
0xf7, 0xfd, 0xb3, 0x10, 0x43, 0x84, 0x00, 0x3e, 0x5a, 0xc3, 0xac, 0x49, 0x90, 0x21, 0xef, 0x40,
0xf0, 0xdb, 0xe1, 0x68, 0x84, 0x87, 0x68, 0x15, 0x5c, 0xb7, 0x45, 0x59, 0xcc, 0x02, 0x35, 0x31,
0x5a, 0x1e, 0x23, 0x50, 0x79, 0x21, 0x2d, 0x00, 0x0a, 0x97, 0xc1, 0x73, 0x1f, 0xbe, 0x81, 0xac,
0x00, 0x04, 0x10, 0x80, 0x78, 0x1e, 0x2d, 0x5a, 0x03, 0x60, 0x80, 0xf0, 0x92, 0x0e, 0x98, 0x70,
0x01, 0x22, 0x38, 0xc1, 0x87, 0x13, 0x4f, 0x93, 0x36, 0xc0, 0xe0, 0x00, 0x1d, 0x76, 0xc1, 0x84,
0x1a, 0x0b, 0x20, 0x80, 0x05, 0xe5, 0x3f, 0x00, 0x57, 0x84, 0x82, 0x91, 0x31, 0x20, 0x82, 0x03,
0x0d, 0x3c, 0xf8, 0x84, 0x17, 0xf0, 0x60, 0x41, 0x06, 0x17, 0xff, 0x15, 0x11, 0x0a, 0x24, 0x08,
0xe1, 0xdd, 0x3f, 0x8c, 0x8a, 0x00, 0x19, 0x62, 0x78, 0x8f, 0x04, 0xf1, 0x32, 0x3c, 0x01, 0x8d,
0xae, 0xfe, 0xc3, 0x33, 0x18, 0x10, 0xc1, 0xcd, 0x7f, 0xbf, 0x08, 0x0f, 0x59, 0x2f, 0x14, 0x25,
0x63, 0x60, 0xe1, 0xdd, 0x7f, 0x32, 0x8c, 0xf6, 0xa1, 0x0a, 0x10, 0x7c, 0xb8, 0x30, 0xc3, 0x7d,
0x10, 0x04, 0x00, 0x17, 0x56, 0x70, 0x0f, 0x42, 0xf0, 0x60, 0x43, 0x0d, 0xfe, 0x41, 0x08, 0x36,
0xb4, 0xe0, 0x1e, 0x84, 0xa1, 0x07, 0xf7, 0x20, 0x1e, 0xc4, 0x83, 0x30, 0x94, 0x04, 0xd1, 0x30,
0x0a, 0x45, 0xc3, 0x58, 0x99, 0x93, 0x32, 0x64, 0x40, 0xce, 0x10, 0xd0, 0x47, 0xc4, 0xe4, 0x08,
0x7e, 0x25, 0x01, 0x0c, 0x4c, 0x68, 0x95, 0x69, 0x13, 0x84, 0xef, 0x58, 0x09, 0x3a, 0x02, 0xac,
0x8e, 0x5e, 0x70, 0x92, 0x92, 0xc9, 0xb4, 0x80, 0x92, 0x00, 0x83, 0x7f, 0x28, 0x00, 0x0d, 0x0c,
0xf0, 0x24, 0x08, 0xfe, 0x91, 0x08, 0x68, 0x93, 0x00, 0xfb, 0x12, 0x86, 0x78, 0x48, 0x00, 0x7a,
0x0e, 0xe0, 0x3c, 0x8c, 0xb6, 0xdf, 0xb6, 0x8f, 0x45, 0x39, 0x0f, 0xc2, 0x70, 0xfa, 0x7e, 0x63,
0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0x1e, 0xc4, 0x83, 0x78, 0x10, 0x0f, 0xa2, 0xc0,
0x81, 0x01, 0x05, 0x02, 0x04, 0x30, 0x20, 0x80, 0x00, 0xe0, 0xc3, 0x83, 0x07, 0x17, 0x0e, 0x6c,
0xd8, 0xc1, 0x2b, 0x38, 0x04, 0x6f, 0xb8, 0xc1, 0x13, 0x56, 0xf0, 0x09, 0x0f, 0xe1, 0x33, 0x3c,
0x05, 0xff, 0xe8, 0x10, 0x9e, 0x61, 0x86, 0xbf, 0xe0, 0x19, 0x2f, 0x61, 0x05, 0xaf, 0x64, 0x1d,
0xbc, 0x83, 0x03, 0x8c, 0xf0, 0x91, 0x6e, 0x93, 0x51, 0xf0, 0x4f, 0x36, 0xc1, 0x11, 0x7a, 0xf8,
0x0e, 0xee, 0x30, 0xa0, 0x43, 0xdf, 0x0a, 0x80, 0x8b, 0x51, 0x74, 0x82, 0x19, 0x1c, 0xa0, 0x9d,
0x6d, 0x00, 0x65, 0x29, 0x5a, 0x41, 0xfb, 0x86, 0x57, 0x07, 0x76, 0x70, 0x81, 0xd2, 0x98, 0xb6,
0xc4, 0x59, 0x8e, 0x0b, 0x50, 0xa1, 0x40, 0x6e, 0xad, 0x57, 0xb2, 0x0d, 0x16, 0x09, 0x88, 0xdd,
0x3f, 0x08, 0xb4, 0x82, 0x34, 0xd8, 0xff, 0x83, 0x28, 0x2c, 0x90, 0x20, 0x40, 0x34, 0xcc, 0x41,
0xd0, 0x4b, 0xe0, 0xc3, 0xcc, 0x85, 0xc0, 0xe2, 0x52, 0xa3, 0x2a, 0x9d, 0xc1, 0x31, 0x75, 0x35,
0xa2, 0x89, 0x5d, 0xb2, 0xa0, 0x66, 0x4e, 0x48, 0x90, 0x20, 0xce, 0xe4, 0x8a, 0x58, 0x0a, 0x72,
0x03, 0xe4, 0xe0, 0x00, 0x01, 0x3c, 0x78, 0x70, 0x60, 0xe1, 0x04, 0xcf, 0x70, 0x11, 0x3c, 0x82,
0x63, 0xf0, 0x08, 0x0e, 0x60, 0x40, 0xc7, 0xc3, 0x68, 0x05, 0x11, 0x42, 0x70, 0x01, 0x0d, 0x2d,
0x5a, 0x85, 0x8b, 0xe0, 0x11, 0x0d, 0xc3, 0x05, 0x68, 0x50, 0xc1, 0x3d, 0x1a, 0x05, 0x07, 0x90,
0xd1, 0x38, 0xdc, 0x36, 0x82, 0x72, 0x90, 0x94, 0x82, 0x7b, 0x95, 0xcc, 0xc2, 0xe0, 0xa2, 0x51,
0x47, 0xac, 0x83, 0xb9, 0x2b, 0xd8, 0x37, 0xca, 0xcc, 0x12, 0x76, 0x6a, 0xd1, 0x9c, 0x4c, 0x95,
0x1d, 0x09, 0xc8, 0x2b, 0x82, 0x0b, 0xa3, 0x86, 0xa6, 0x0c, 0xf8, 0x1b, 0x01, 0x16, 0x0c, 0xa8,
0xe1, 0xf3, 0x76, 0x2c, 0xcd, 0xda, 0x9d, 0x0e, 0x5f, 0x4d, 0xa7, 0x6e, 0xd4, 0xb7, 0x75, 0x6d,
0x67, 0xad, 0x68, 0xb8, 0x67, 0x21, 0x47, 0xcb, 0x46, 0x00, 0xfb, 0x88, 0x05, 0x17, 0xb0, 0xd9,
0x30, 0xa9, 0x15, 0xe5, 0x22, 0x57, 0x79, 0xcb, 0xf8, 0xc7, 0x8e, 0x9b, 0x65, 0x7a, 0x6b, 0x15,
0x47, 0xd8, 0xb9, 0x01, 0x5a, 0x4b, 0xac, 0x4d, 0xf0, 0x4b, 0x67, 0xe6, 0x80, 0x0e, 0x15, 0xf2,
0x19, 0x8a, 0x5a, 0xb9, 0x23, 0x1c, 0xfe, 0x05, 0x70, 0xe1, 0x70, 0x77, 0xc2, 0x8d, 0x13, 0x30,
0xa0, 0x05, 0xcb, 0x57, 0x14, 0x15, 0x83, 0x35, 0x44, 0xb0, 0x2f, 0x29, 0x58, 0x45, 0x49, 0xc8,
0xe0, 0xdf, 0x2f, 0x9c, 0x8e, 0x01, 0x0d, 0xf2, 0x2f, 0x0f, 0xe2, 0x41, 0x7c, 0xfa, 0x6c, 0x0e,
0xe0, 0x40, 0x01, 0x03, 0x84, 0x7f, 0x2f, 0xfc, 0x9f, 0x66, 0x50, 0xa5, 0x22, 0x38, 0x43, 0x8f,
0x0c, 0x6b, 0x3b, 0xb8, 0x42, 0x8b, 0x95, 0x60, 0x6f, 0x41, 0xb8, 0x85, 0x9d, 0xb0, 0x83, 0x43,
0xdc, 0x81, 0x17, 0x5c, 0xfc, 0x83, 0x0e, 0x0e, 0xc0, 0xe2, 0x06, 0x00, 0xb8, 0x30, 0x33, 0x2c,
0xc8, 0x16, 0xb0, 0x07, 0x00, 0xc0, 0xc9, 0xfe, 0xd0, 0x81, 0x42, 0x86, 0x08, 0x0e, 0x54, 0xe1,
0xf7, 0x0f, 0x15, 0x12, 0x04, 0x30, 0xa5, 0x3e, 0x08, 0x86, 0x83, 0x6a, 0x1e, 0xc4, 0x83, 0x78,
0x10, 0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0x1e, 0xc4, 0x83, 0x78, 0x10, 0x0f, 0x02,
};
static PROGMEM prog_uchar bg_pic[] = {
0x00, 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, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x0b, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x0c, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
};
static PROGMEM prog_uchar bg_chr[] = {
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54,
0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00,
0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00,
0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x55, 0x55,
0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x00, 0x00,
0x55, 0x54, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x50, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static PROGMEM prog_uchar bg_pal[] = {
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00,
0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
};

View File

@ -1,77 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "ball.h"
void setup()
{
GD.begin();
// Background image
GD.copy(RAM_PIC, bg_pic, sizeof(bg_pic));
GD.copy(RAM_CHR, bg_chr, sizeof(bg_chr));
GD.copy(RAM_PAL, bg_pal, sizeof(bg_pal));
// Sprite graphics
GD.uncompress(RAM_SPRIMG, ball);
// Palettes 0 and 1 are for the ball itself,
// and palette 2 is the shadow. Set it to
// all gray.
int i;
for (i = 0; i < 256; i++)
GD.wr16(RAM_SPRPAL + (2 * (512 + i)), RGB(64, 64, 64));
// Set color 255 to transparent in all three palettes
GD.wr16(RAM_SPRPAL + 2 * 0xff, TRANSPARENT);
GD.wr16(RAM_SPRPAL + 2 * 0x1ff, TRANSPARENT);
GD.wr16(RAM_SPRPAL + 2 * 0x2ff, TRANSPARENT);
}
#define RADIUS (112 / 2) // radius of the ball, in pixels
#define YBASE (300 - RADIUS)
void loop()
{
int x = 200, y = RADIUS; // ball position
int xv = 2, yv = 0; // ball velocity
int r; // frame counter
for (r = 0; ; r++) {
GD.__wstartspr((r & 1) ? 256 : 0); // write sprites to other frame
draw_ball(x + 15, y + 15, 2); // draw shadow using palette 2
draw_ball(x, y, r & 1); // draw ball using palette 0 or 1
GD.__end();
// paint the new palette
uint16_t palette = RAM_SPRPAL + 512 * (r & 1);
byte li;
for (li = 0; li < 7; li++) {
byte liv = 0x90 + 0x10 * li; // brightness goes 0x90, 0xa0, etc
uint16_t red = RGB(liv, 0, 0);
uint16_t white = RGB(liv, liv, liv);
byte i;
for (i = 0; i < 32; i++) { // palette cycling using 'r'
GD.wr16(palette, ((i + r) & 16) ? red : white);
palette += 2;
}
}
// bounce the ball around
x += xv;
if ((x < RADIUS) || (x > (400 - RADIUS)))
xv = -xv;
y += yv;
if ((yv > 0) && (y > YBASE)) {
y = YBASE - (y - YBASE); // reflect in YBASE
yv = -yv; // reverse Y velocity
}
if (0 == (r & 3))
yv++; // gravity
// swap frames
GD.waitvblank();
GD.wr(SPR_PAGE, (r & 1));
}
}

View File

@ -1,60 +0,0 @@
static PROGMEM prog_uchar Wood32_pic[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
};
static PROGMEM prog_uchar Wood32_chr[] = {
0x55, 0xa5, 0xc0, 0xcc, 0x8a, 0xae, 0x55, 0x02, 0xfe, 0xfb, 0xbe, 0xaf, 0x12, 0x0a, 0x6b, 0xff,
0x55, 0x55, 0xfa, 0xee, 0xbc, 0x2f, 0x66, 0x5e, 0x00, 0x0f, 0xeb, 0xba, 0xea, 0xbe, 0x00, 0x03,
0x00, 0x03, 0xfd, 0xd7, 0xff, 0xf7, 0x0a, 0x6e, 0xf7, 0x55, 0xdf, 0xff, 0xa5, 0xe5, 0xd5, 0xf7,
0x03, 0x00, 0x57, 0xaf, 0xff, 0xdf, 0x5a, 0x3b, 0xaa, 0xaa, 0xe9, 0xf7, 0x9d, 0x10, 0x5a, 0xaa,
0x01, 0x5d, 0x7f, 0xaa, 0x46, 0xfd, 0x4c, 0xe9, 0xeb, 0xba, 0x7a, 0xaa, 0x00, 0x5a, 0xf5, 0xaa,
0x7c, 0x82, 0xff, 0xff, 0x58, 0x59, 0x06, 0x28, 0xfa, 0xff, 0xb0, 0x85, 0xff, 0x12, 0xec, 0xec,
0x80, 0x56, 0x0c, 0xec, 0x56, 0x81, 0x41, 0x55, 0x22, 0x98, 0x56, 0xa2, 0x4a, 0x56, 0xed, 0x80,
0xca, 0x3a, 0x0c, 0xf3, 0xea, 0x9a, 0x9a, 0xa5, 0x0f, 0xdf, 0x65, 0xe6, 0x97, 0xfa, 0x07, 0x7d,
0xde, 0x65, 0x00, 0x3c, 0x2e, 0x95, 0xa1, 0x99, 0x03, 0xc0, 0x0e, 0xfc, 0xac, 0xc3, 0x20, 0xfa,
0x99, 0x24, 0xfd, 0xff, 0xaa, 0xaa, 0x08, 0x98, 0xff, 0xc7, 0x7f, 0xff, 0x58, 0x72, 0xd6, 0xa4,
0x00, 0x4f, 0x86, 0x6a, 0xd1, 0x00, 0x00, 0xff, 0x95, 0x15, 0xa4, 0x15, 0x0d, 0xff, 0x30, 0x01,
0x56, 0xaa, 0xcf, 0x3b, 0x66, 0xa9, 0x65, 0x6a, 0x8f, 0x3c, 0x0e, 0x02, 0x62, 0x94, 0x40, 0xa6,
0x08, 0x2d, 0x55, 0x54, 0x8e, 0xfe, 0xfe, 0xef, 0x2f, 0xff, 0x55, 0x0f, 0xa0, 0xff, 0xa2, 0x28,
0x5f, 0xd7, 0xd5, 0xd1, 0x9f, 0x0c, 0xa5, 0x00, 0x6f, 0x7f, 0x02, 0xfd, 0x13, 0x9b, 0xf5, 0xa8,
0x59, 0x56, 0x03, 0x34, 0xcf, 0xfc, 0x22, 0x98, 0x56, 0xa2, 0x4a, 0xd7, 0x21, 0x80, 0x45, 0xa1,
0x57, 0xd5, 0x25, 0x7f, 0xc8, 0x92, 0x00, 0x20, 0xdf, 0xdd, 0x6c, 0x05, 0x0c, 0x83, 0xfd, 0x7f,
0x55, 0x55, 0xba, 0xaa, 0xf0, 0x00, 0xff, 0xf3, 0x69, 0xaa, 0x55, 0x5a, 0xf0, 0x00, 0xba, 0xaa,
0x55, 0x55, 0xaa, 0x3a, 0xc3, 0xc3, 0xa8, 0xfa, 0x3a, 0x5a, 0xd5, 0x66, 0xc3, 0xc3, 0x80, 0x30,
0xff, 0xff, 0x5d, 0xf5, 0x20, 0x8a, 0x04, 0x03, 0x05, 0x7f, 0x76, 0x0f, 0x20, 0x8a, 0x1d, 0xf5,
0x00, 0x00, 0xcf, 0x0c, 0xaa, 0x66, 0xc9, 0xaa, 0x2a, 0xfc, 0xff, 0xea, 0xaa, 0x66, 0xcb, 0x0c,
0x00, 0x30, 0x0c, 0xff, 0xc0, 0x03, 0x00, 0x33, 0xaa, 0xba, 0x55, 0x55, 0xaa, 0xa5, 0xef, 0xba,
0x6a, 0xaa, 0x6a, 0x55, 0xa9, 0x55, 0x95, 0x55, 0xff, 0x0f, 0x30, 0x30, 0xff, 0x0e, 0x0f, 0x6a,
0x5d, 0xff, 0x55, 0x55, 0x5f, 0xf6, 0x5d, 0xff, 0xa6, 0x5a, 0x00, 0x00, 0x08, 0xa1, 0xaa, 0x95,
0x05, 0x00, 0x50, 0x15, 0x85, 0x00, 0x05, 0x00, 0x9a, 0x59, 0xff, 0xff, 0x9f, 0xaa, 0x6a, 0xa9,
0x0a, 0xa9, 0x4f, 0xc9, 0xff, 0xff, 0x00, 0xaa, 0xfc, 0xa8, 0xff, 0xf0, 0xf2, 0x95, 0xf2, 0x2a,
0xd5, 0x77, 0xff, 0x7f, 0xaa, 0x87, 0xf0, 0x2a, 0x0a, 0x80, 0x00, 0x80, 0xff, 0xff, 0x55, 0x57,
0x67, 0xfa, 0x94, 0x29, 0xd7, 0xfd, 0x09, 0xa0, 0xa9, 0xd6, 0xaa, 0x80, 0x80, 0x80, 0x4a, 0x99,
0xaa, 0xbf, 0x65, 0xd1, 0xaa, 0xbb, 0x04, 0x59, 0x15, 0x5a, 0x05, 0x54, 0x14, 0x08, 0xa9, 0x56,
0xdf, 0xff, 0xf0, 0x30, 0x7f, 0xf3, 0xff, 0xff, 0x55, 0x65, 0x55, 0x95, 0x55, 0x55, 0x57, 0x55,
0x7b, 0xeb, 0x05, 0x45, 0xf5, 0xfa, 0x54, 0x45, 0xbb, 0xdd, 0xaa, 0x53, 0xba, 0xf7, 0xaa, 0x44,
0x08, 0x00, 0xaa, 0x5e, 0x9f, 0x5f, 0xbf, 0xfe, 0xeb, 0x55, 0x9b, 0xef, 0x1c, 0x0a, 0xd5, 0xa7,
0x00, 0xf0, 0x0e, 0xbe, 0xda, 0x9a, 0x39, 0x95, 0xa7, 0xea, 0x9f, 0x57, 0x63, 0xb0, 0x55, 0xa7,
};
static PROGMEM prog_uchar Wood32_pal[] = {
0x32, 0x6f, 0xf0, 0x6e, 0x11, 0x73, 0x32, 0x77, 0x32, 0x77, 0xf0, 0x6a, 0x11, 0x73, 0x32, 0x73,
0x10, 0x6f, 0x32, 0x77, 0x32, 0x73, 0x32, 0x77, 0xf0, 0x6e, 0x32, 0x73, 0x53, 0x77, 0x11, 0x73,
0xef, 0x6a, 0x11, 0x73, 0x32, 0x77, 0x32, 0x73, 0x11, 0x6f, 0xf0, 0x6e, 0x32, 0x73, 0x32, 0x77,
0x52, 0x77, 0x11, 0x73, 0x32, 0x77, 0x33, 0x77, 0x53, 0x77, 0x32, 0x77, 0x11, 0x73, 0x32, 0x77,
0xf0, 0x6e, 0x52, 0x77, 0x32, 0x73, 0x11, 0x73, 0x53, 0x77, 0x32, 0x77, 0x32, 0x77, 0x10, 0x73,
0x32, 0x77, 0x11, 0x73, 0xef, 0x6a, 0x52, 0x77, 0x11, 0x73, 0x52, 0x77, 0x32, 0x77, 0xf0, 0x6e,
0x11, 0x73, 0xef, 0x6a, 0x32, 0x73, 0x32, 0x77, 0x32, 0x77, 0x32, 0x73, 0x33, 0x77, 0x11, 0x73,
0x32, 0x77, 0x11, 0x73, 0x32, 0x77, 0x32, 0x73, 0x53, 0x77, 0x11, 0x73, 0x32, 0x73, 0x32, 0x77,
0xc2, 0x44, 0x44, 0x55, 0x03, 0x4d, 0xe3, 0x48, 0xe2, 0x48, 0x23, 0x51, 0x03, 0x4d, 0xc2, 0x44,
0xe2, 0x48, 0x03, 0x4d, 0xc2, 0x44, 0x24, 0x55, 0x23, 0x55, 0xc2, 0x44, 0xe3, 0x48, 0x03, 0x4d,
0x65, 0x59, 0xc2, 0x44, 0x03, 0x4d, 0x23, 0x51, 0xc2, 0x44, 0x24, 0x55, 0x23, 0x51, 0x03, 0x4d,
0xc2, 0x44, 0x23, 0x55, 0x03, 0x4d, 0x64, 0x59, 0x44, 0x59, 0x23, 0x55, 0x03, 0x4d, 0xc2, 0x44,
0x44, 0x55, 0x03, 0x4d, 0x23, 0x51, 0x65, 0x5d, 0x44, 0x55, 0x23, 0x51, 0x65, 0x59, 0x03, 0x4d,
0x44, 0x55, 0x03, 0x4d, 0x23, 0x51, 0xe3, 0x48, 0x44, 0x55, 0x23, 0x51, 0x03, 0x4d, 0xe3, 0x48,
0xc2, 0x40, 0x23, 0x51, 0x03, 0x4d, 0xe3, 0x48, 0xc2, 0x40, 0xe2, 0x48, 0x03, 0x4d, 0x03, 0x49,
0x23, 0x51, 0xe2, 0x44, 0x03, 0x49, 0xc2, 0x40, 0x23, 0x51, 0xc2, 0x40, 0xe2, 0x48, 0x03, 0x49,
};

View File

@ -1,261 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "Wood32.h"
#include "staunton.h" // Chess pieces from eboard's Staunton set: http://www.bergo.eng.br
#define digits (sizeof(staunton_img) / 256)
#include "digits.h"
int atxy(int x, int y)
{
return (y << 6) + x;
}
static void square(byte x, byte y, byte light)
{
prog_uchar *src = Wood32_pic + (16 * light);
int addr = atxy(x, y);
GD.copy(addr + 0 * 64, src, 4);
GD.copy(addr + 1 * 64, src + 4, 4);
GD.copy(addr + 2 * 64, src + 8, 4);
GD.copy(addr + 3 * 64, src + 12, 4);
}
#define QROOK 0
#define QKNIGHT 1
#define QBISHOP 2
#define QUEEN 3
#define KING 4
#define KBISHOP 5
#define KKNIGHT 6
#define KROOK 7
#define PAWN 8
#define WHITE 0x00
#define BLACK 0x10
static char board[32];
static void startboard()
{
byte i;
for (i = 0; i < 8; i++) {
board[i] = 56 + i;
board[8+i] = 48 + i;
board[16+i] = i;
board[24+i] = 8 + i;
}
}
// Return the piece at pos, or -1 if pos is empty
static char find(byte pos)
{
byte slot;
for (slot = 0; slot < 32; slot++)
if (board[slot] == pos)
return slot;
return -1;
}
byte images[16] = { 0, 1, 2, 3, 4, 2, 1, 0, 5, 5, 5, 5, 5, 5, 5, 5 };
static void piece(byte slot, int x, int y)
{
byte i = (4 * slot);
byte j = images[slot & 0xf] * 2;
byte bw = (slot >> 4) & 1;
GD.sprite(i, x, y, j, bw, 0);
GD.sprite(i + 1, x + 16, y, j + 1, bw, 0);
GD.sprite(i + 2, x, y + 16, j + 12, bw, 0);
GD.sprite(i + 3, x + 16, y + 16, j + 13, bw, 0);
}
#define BOARDX(pos) (8 + (((pos) & 7) << 5))
#define BOARDY(pos) (24 + ((((pos) >> 3) & 7) << 5))
static void drawboard()
{
byte slot;
for (slot = 0; slot < 32; slot++) {
char pos = board[slot];
if (pos < 0)
piece(slot, 400, 400);
else {
piece(slot, BOARDX(pos), BOARDY(pos));
}
}
}
static float smoothstep(float x)
{
return x*x*(3-2*x);
}
// move piece 'slot' to position 'pos'.
// return true if a piece was taken.
static byte movepiece(byte slot, byte pos)
{
int x0 = BOARDX(board[slot]);
int y0 = BOARDY(board[slot]);
int x1 = BOARDX(pos);
int y1 = BOARDY(pos);
// move at 1.5 pix/frame
int d = int(sqrt(pow(x0 - x1, 2) + pow(y0 - y1, 2)) / 2);
int it;
for (it = 0; it < d; it++) {
float t = smoothstep(float(it) / d);
GD.waitvblank();
GD.waitvblank();
piece(slot, int(x0 + t * (x1 - x0)), int(y0 + t * (y1 - y0)));
}
byte taken = find(pos) != -1;
if (taken)
board[find(pos)] = -1;
board[slot] = pos;
drawboard();
return taken;
}
void setup()
{
int i, j;
GD.begin();
GD.ascii();
GD.putstr(0, 0, "Chess board");
GD.copy(RAM_CHR, Wood32_chr, sizeof(Wood32_chr));
GD.copy(RAM_PAL, Wood32_pal, sizeof(Wood32_pal));
GD.copy(RAM_SPRIMG, staunton_img, sizeof(staunton_img));
GD.copy(RAM_SPRPAL, staunton_white, sizeof(staunton_white));
GD.copy(RAM_SPRPAL + 512, staunton_black, sizeof(staunton_black));
GD.copy(RAM_SPRIMG + (digits << 8), digits_img, sizeof(digits_img));
GD.copy(RAM_SPRPAL + 2 * 512, digits_pal, sizeof(digits_pal));
for (i = 0; i < 256; i++) {
unsigned int b = GD.rd16(RAM_SPRPAL + 2 * 512 + 2 * i);
GD.wr16(RAM_SPRPAL + 3 * 512 + 2 * i, b ^ 0x7fff);
}
// Draw the 64 squares of the board
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
square(1 + (i << 2), 3 + (j << 2), (i ^ j) & 1);
// Draw the rank and file markers 1-8 a-h
for (i = 0; i < 8; i++) {
GD.wr(atxy(3 + (i << 2), 2), 'a' + i);
GD.wr(atxy(3 + (i << 2), 35), 'a' + i);
GD.wr(atxy(0, 5 + (i << 2)), '8' - i);
GD.wr(atxy(33, 5 + (i << 2)), '8' - i);
}
startboard();
drawboard();
}
static int clock[2];
// draw digit d in sprite slots spr,spr+1 at (x,y)
static void digit(byte spr, byte d, byte bw, int x, int y)
{
GD.sprite(spr, x, y, digits + d, 2 + bw, 0);
GD.sprite(spr + 1, x, y + 16, digits + d + 11, 2 + bw, 0);
}
static void showclock(byte bw)
{
int t = clock[bw];
byte spr = 128 + (bw * 16);
byte s = t % 60;
int y = (bw ? 31 : 3) * 8;
byte d0 = s % 10; s /= 10;
digit(spr, d0, bw, 400 - 1 * 16, y);
digit(spr + 2, s, bw, 400 - 2 * 16, y);
digit(spr + 4, 10, bw, 400 - 3 * 16, y); // colon
spr += 6;
int x = 400 - 4 * 16;
byte m = t / 60;
do {
d0 = m % 10; m /= 10;
digit(spr, d0, bw, x, y);
spr += 2;
x -= 16;
} while (m);
}
static int turn;
#define ALG(r,f) ((r - 'a') + ((8 - f) * 8))
#define CASTLE 255,255
static byte game[] = {
ALG('e', 2),ALG('e', 4), ALG('e', 7),ALG('e', 5),
ALG('g', 1),ALG('f', 3), ALG('b', 8),ALG('c', 6),
ALG('f', 1),ALG('b', 5), ALG('a', 7),ALG('a', 6),
ALG('b', 5),ALG('a', 4), ALG('g', 8),ALG('f', 6),
ALG('d', 1),ALG('e', 2), ALG('b', 7),ALG('b', 5),
ALG('a', 4),ALG('b', 3), ALG('f', 8),ALG('e', 7),
ALG('c', 2),ALG('c', 3), CASTLE,
CASTLE, ALG('d', 7),ALG('d', 5),
ALG('e', 4),ALG('d', 5), ALG('f', 6),ALG('d', 5),
ALG('f', 3),ALG('e', 5), ALG('d', 5),ALG('f', 4),
ALG('e', 2),ALG('e', 4), ALG('c', 6),ALG('e', 5),
ALG('e', 4),ALG('a', 8), ALG('d', 8),ALG('d', 3),
ALG('b', 3),ALG('d', 1), ALG('c', 8),ALG('h', 3),
ALG('a', 8),ALG('a', 6), ALG('h', 3),ALG('g', 2),
ALG('f', 1),ALG('e', 1), ALG('d', 3),ALG('f', 3),
};
static void putalg(byte x, byte y, byte a)
{
GD.wr(atxy(x, y), 'a' + (a & 7));
GD.wr(atxy(x+1, y), '8' - ((a >> 3) & 7));
}
void loop()
{
byte i;
for (i = random(25); i; i--) {
clock[(1 & turn) ^ 1]++;
GD.waitvblank();
showclock(0);
showclock(1);
delay(20);
}
if (turn < (sizeof(game) / 2)) {
byte yy = 8 + (turn >> 1);
byte xx = (turn & 1) ? 44 : 38;
byte i = 1 + (turn >> 1);
if (i >= 10)
GD.wr(atxy(35, yy), '0' + i / 10);
GD.wr(atxy(36, yy), '0' + i % 10);
GD.wr(atxy(37, yy), '.');
byte from = game[2 * turn];
byte to = game[2 * turn + 1];
if (from != 255) {
putalg(xx, yy, from);
GD.wr(atxy(xx + 2, yy), movepiece(find(from), to) ? 'x' : '-');
putalg(xx + 3, yy, to);
} else {
byte rank = (turn & 1) ? 8 : 1;
movepiece(find(ALG('e', rank)), ALG('g', rank));
movepiece(find(ALG('h', rank)), ALG('f', rank));
GD.putstr(xx, yy, "O-O");
}
turn++;
} else {
delay(4000);
setup();
turn = 0;
clock[0] = 0;
clock[1] = 0;
}
}

View File

@ -1,412 +0,0 @@
static PROGMEM prog_uchar digits_img[] = {
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xa3, 0x48, 0x15, 0x03, 0x15, 0x49, 0xa5, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x79, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x96, 0x00, 0x00, 0x24, 0xa7, 0xd0, 0xa7, 0x23, 0x00, 0x00, 0x99, 0xda, 0xda,
0xda, 0xda, 0xd8, 0x21, 0x00, 0x05, 0xb4, 0xda, 0xda, 0xda, 0xb2, 0x04, 0x00, 0x24, 0xd8, 0xda,
0xda, 0xda, 0x9f, 0x00, 0x00, 0x4c, 0xda, 0xda, 0xda, 0xda, 0xda, 0x49, 0x00, 0x00, 0xa2, 0xda,
0xda, 0xda, 0x68, 0x00, 0x00, 0x86, 0xda, 0xda, 0xda, 0xda, 0xda, 0x83, 0x00, 0x00, 0x6a, 0xda,
0xda, 0xda, 0x3b, 0x00, 0x00, 0xaa, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa9, 0x00, 0x00, 0x3d, 0xda,
0xda, 0xda, 0x1e, 0x00, 0x00, 0xc2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x00, 0x00, 0x20, 0xda,
0xda, 0xda, 0x0b, 0x00, 0x00, 0xd2, 0xda, 0x6c, 0x0c, 0x70, 0xda, 0xd0, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0x02, 0x00, 0x00, 0xd9, 0xda, 0x0b, 0x00, 0x0c, 0xda, 0xd8, 0x00, 0x00, 0x02, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xbe, 0x92, 0x62, 0x2f, 0x04, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x1e, 0x55, 0x89, 0xbb, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xb6, 0x7d, 0x51, 0x2c, 0x11, 0x04, 0x0a, 0x21, 0x4f, 0x98, 0xd8, 0xda, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xbf, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x3b, 0x87, 0xb5, 0xd4, 0xcf, 0xa8, 0x47, 0x00, 0x00, 0x21, 0xcb, 0xda,
0xda, 0xda, 0x42, 0xaf, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x50, 0x00, 0x00, 0x6a, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xb2, 0x00, 0x00, 0x22, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd5, 0x00, 0x00, 0x05, 0xd8,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc1, 0x00, 0x00, 0x00, 0xc5,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x7d, 0x00, 0x00, 0x06, 0xd4,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc6, 0x16, 0x00, 0x00, 0x48, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd8, 0x41, 0x00, 0x00, 0x04, 0xb0, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xb8, 0x82, 0x54, 0x2a, 0x0d, 0x04, 0x13, 0x36, 0x75, 0xc4, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x95, 0xda, 0xda,
0xda, 0xda, 0xda, 0x26, 0x69, 0x99, 0xb9, 0xd1, 0xd5, 0xb8, 0x72, 0x06, 0x00, 0x02, 0xa6, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x80, 0x00, 0x00, 0x3e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xca, 0x00, 0x00, 0x0d, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xca, 0x00, 0x00, 0x0e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x73, 0x00, 0x00, 0x4e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd9, 0xc9, 0xa3, 0x53, 0x00, 0x00, 0x24, 0xc2, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x77, 0xce, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x8a, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x81, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc1, 0x0e, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x4a, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x98, 0x00, 0x4b, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xcd, 0x1b, 0x0a, 0xbd, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x60, 0x00, 0x75, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xa9, 0x02, 0x22, 0xd3, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xd5, 0x2b, 0x00, 0x9a, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x77, 0x00, 0x44, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xb6, 0x08, 0x07, 0xb8, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x35, 0x0d, 0x05, 0x17, 0x44, 0x8f, 0xd7, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xc5, 0xda, 0xda,
0xda, 0xda, 0xda, 0x34, 0x83, 0xb2, 0xd0, 0xd4, 0xb8, 0x7b, 0x14, 0x00, 0x00, 0x33, 0xd6, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xd8, 0x94, 0x4a, 0x1b, 0x05, 0x09, 0x29, 0x5f, 0xaa, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xc2, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda,
0xda, 0xda, 0xda, 0xcd, 0x26, 0x00, 0x00, 0x32, 0x99, 0xc8, 0xd4, 0xbb, 0x8b, 0x39, 0xda, 0xda,
0xda, 0xda, 0xda, 0x5f, 0x00, 0x00, 0x46, 0xd7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xc3, 0x05, 0x00, 0x0e, 0xc6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x7e, 0x00, 0x00, 0x5d, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x4b, 0x00, 0x00, 0x98, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x26, 0x00, 0x00, 0xb8, 0xb0, 0x49, 0x10, 0x07, 0x21, 0x5b, 0xb8, 0xda, 0xda, 0xda,
0xda, 0xda, 0x0e, 0x00, 0x00, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x9d, 0xda, 0xda,
0xda, 0xda, 0x02, 0x00, 0x00, 0x18, 0x4a, 0xb1, 0xd4, 0xb9, 0x5e, 0x00, 0x00, 0x11, 0xc3, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x4a, 0x00, 0x00, 0x6e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc9, 0x06, 0x00, 0x00, 0xb4, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x83, 0x00, 0x00, 0x30, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x36, 0x00, 0x00, 0x7c, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xba, 0x01, 0x00, 0x03, 0xc5, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x74, 0x00, 0x00, 0x41, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x25, 0x00, 0x00, 0x8e, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xab, 0x00, 0x00, 0x0b, 0xcf, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xb1, 0x64, 0x2d, 0x0f, 0x03, 0x0f, 0x2d, 0x64, 0xb2, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x77, 0xda, 0xda,
0xda, 0xda, 0x8b, 0x00, 0x00, 0x0c, 0x80, 0xc2, 0xd6, 0xc2, 0x80, 0x0c, 0x00, 0x00, 0x8e, 0xda,
0xda, 0xda, 0x2d, 0x00, 0x00, 0x8c, 0xda, 0xda, 0xda, 0xda, 0xda, 0x8c, 0x00, 0x00, 0x2e, 0xda,
0xda, 0xda, 0x07, 0x00, 0x00, 0xcd, 0xda, 0xda, 0xda, 0xda, 0xda, 0xcc, 0x00, 0x00, 0x08, 0xda,
0xda, 0xda, 0x16, 0x00, 0x00, 0xcf, 0xda, 0xda, 0xda, 0xda, 0xda, 0xce, 0x00, 0x00, 0x17, 0xda,
0xda, 0xda, 0x62, 0x00, 0x00, 0x90, 0xda, 0xda, 0xda, 0xda, 0xda, 0x8e, 0x00, 0x00, 0x65, 0xda,
0xda, 0xda, 0xce, 0x36, 0x00, 0x0e, 0x82, 0xc4, 0xd7, 0xc3, 0x81, 0x0c, 0x00, 0x38, 0xd0, 0xda,
0xda, 0xda, 0xda, 0xd6, 0x81, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0xd6, 0xda, 0xda,
0xda, 0xda, 0xda, 0xd5, 0x77, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x78, 0xd6, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xc7, 0x70, 0x2e, 0x0e, 0x03, 0x18, 0x4b, 0xa0, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xac, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xda, 0xda, 0xda,
0xda, 0xda, 0xc9, 0x19, 0x00, 0x00, 0x5e, 0xb9, 0xd4, 0xb1, 0x48, 0x00, 0x00, 0x83, 0xda, 0xda,
0xda, 0xda, 0x78, 0x00, 0x00, 0x4c, 0xda, 0xda, 0xda, 0xda, 0xd7, 0x37, 0x00, 0x15, 0xd2, 0xda,
0xda, 0xda, 0x34, 0x00, 0x00, 0xa2, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9a, 0x00, 0x00, 0x97, 0xda,
0xda, 0xda, 0x11, 0x00, 0x00, 0xca, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc6, 0x00, 0x00, 0x60, 0xda,
0xda, 0xda, 0x03, 0x00, 0x00, 0xd7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0x00, 0x00, 0x38, 0xda,
0xda, 0xda, 0x10, 0x00, 0x00, 0xcb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc6, 0x00, 0x00, 0x1d, 0xda,
0xda, 0xda, 0x31, 0x00, 0x00, 0xa5, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9a, 0x00, 0x00, 0x0b, 0xda,
0xda, 0xda, 0x70, 0x00, 0x00, 0x52, 0xda, 0xda, 0xda, 0xda, 0xd8, 0x39, 0x00, 0x00, 0x02, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x02, 0x00, 0x00, 0xd9, 0xda, 0x67, 0x0b, 0x6e, 0xda, 0xd8, 0x00, 0x00, 0x02, 0xda,
0xda, 0xda, 0x0b, 0x00, 0x00, 0xd2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd0, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0x1e, 0x00, 0x00, 0xc2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x00, 0x00, 0x20, 0xda,
0xda, 0xda, 0x3b, 0x00, 0x00, 0xab, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa9, 0x00, 0x00, 0x3d, 0xda,
0xda, 0xda, 0x68, 0x00, 0x00, 0x87, 0xda, 0xda, 0xda, 0xda, 0xda, 0x84, 0x00, 0x00, 0x6a, 0xda,
0xda, 0xda, 0x9f, 0x00, 0x00, 0x4d, 0xda, 0xda, 0xda, 0xda, 0xda, 0x4a, 0x00, 0x00, 0xa2, 0xda,
0xda, 0xda, 0xd8, 0x21, 0x00, 0x05, 0xb5, 0xda, 0xda, 0xda, 0xb3, 0x04, 0x00, 0x24, 0xd8, 0xda,
0xda, 0xda, 0xda, 0x96, 0x00, 0x00, 0x25, 0xa8, 0xd1, 0xa8, 0x24, 0x00, 0x00, 0x99, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xa3, 0x47, 0x13, 0x02, 0x13, 0x48, 0xa4, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x61, 0x00, 0x00, 0x00, 0x77, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x6d, 0x00, 0x00, 0x00, 0x52, 0xd9, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x73, 0x00, 0x00, 0x00, 0x45, 0xd5, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x75, 0x00, 0x00, 0x00, 0x43, 0xd3, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x76, 0x00, 0x00, 0x00, 0x58, 0xd5, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x76, 0x00, 0x00, 0x05, 0x7d, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x75, 0x00, 0x00, 0x1c, 0xa8, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x72, 0x00, 0x00, 0x47, 0xc8, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd7, 0xc2, 0x8d, 0x25, 0x00, 0x00, 0x56, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xcd, 0x2d, 0x00, 0x00, 0x8d, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9e, 0x00, 0x00, 0x36, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd0, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xce, 0x00, 0x00, 0x09, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9f, 0x00, 0x00, 0x27, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd2, 0x32, 0x00, 0x00, 0x6e, 0xda,
0xda, 0xda, 0x27, 0x6b, 0x9a, 0xb8, 0xd0, 0xd7, 0xc3, 0x93, 0x2c, 0x00, 0x00, 0x1e, 0xcb, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xba, 0xda, 0xda,
0xda, 0xda, 0xb5, 0x7c, 0x4e, 0x29, 0x0f, 0x03, 0x0a, 0x20, 0x4c, 0x93, 0xd7, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x3b, 0x00, 0x6e, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0x88, 0x00, 0x1d, 0xd0, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0x12, 0x00, 0x94, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xbc, 0x17, 0x00, 0x00, 0x88, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x85, 0x00, 0x00, 0x3f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x00, 0x00, 0x14, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd5, 0x00, 0x00, 0x04, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc2, 0x00, 0x00, 0x11, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x88, 0x00, 0x00, 0x3f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc2, 0x1c, 0x00, 0x00, 0x91, 0xda,
0xda, 0xda, 0x2a, 0x6f, 0x9e, 0xbe, 0xd2, 0xd5, 0xbb, 0x80, 0x18, 0x00, 0x00, 0x44, 0xd9, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xd1, 0xda, 0xda,
0xda, 0xda, 0xaf, 0x6e, 0x3b, 0x1c, 0x09, 0x02, 0x0f, 0x2c, 0x5f, 0xac, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x01, 0x00, 0x00, 0x3a, 0xd8, 0xda, 0xda, 0xda, 0xda, 0x4c, 0x00, 0x00, 0x70, 0xda,
0xda, 0xda, 0x0a, 0x00, 0x00, 0x9c, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa3, 0x00, 0x00, 0x31, 0xda,
0xda, 0xda, 0x1c, 0x00, 0x00, 0xc7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xca, 0x00, 0x00, 0x11, 0xda,
0xda, 0xda, 0x36, 0x00, 0x00, 0xd7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd7, 0x00, 0x00, 0x04, 0xda,
0xda, 0xda, 0x5f, 0x00, 0x00, 0xc7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc9, 0x00, 0x00, 0x12, 0xda,
0xda, 0xda, 0x95, 0x00, 0x00, 0x9c, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa2, 0x00, 0x00, 0x37, 0xda,
0xda, 0xda, 0xd1, 0x14, 0x00, 0x3b, 0xd8, 0xda, 0xda, 0xda, 0xda, 0x4c, 0x00, 0x00, 0x7a, 0xda,
0xda, 0xda, 0xda, 0x80, 0x00, 0x00, 0x4b, 0xb2, 0xd5, 0xba, 0x5f, 0x00, 0x00, 0x1c, 0xcb, 0xda,
0xda, 0xda, 0xda, 0xda, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xae, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x9e, 0x49, 0x17, 0x03, 0x0d, 0x2e, 0x71, 0xc8, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x62, 0x00, 0x00, 0x54, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0x16, 0x00, 0x00, 0x9d, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9b, 0x00, 0x00, 0x17, 0xd7, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x50, 0x00, 0x00, 0x66, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xcd, 0x09, 0x00, 0x00, 0xad, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x89, 0x00, 0x00, 0x27, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x3c, 0x00, 0x00, 0x77, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x02, 0x00, 0x01, 0xbc, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x7a, 0x00, 0x00, 0x38, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x2b, 0x00, 0x00, 0x84, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xd7, 0x40, 0x00, 0x00, 0x61, 0xb9, 0xd5, 0xb9, 0x5f, 0x00, 0x00, 0x42, 0xd8, 0xda,
0xda, 0xda, 0x81, 0x00, 0x00, 0x59, 0xda, 0xda, 0xda, 0xda, 0xda, 0x55, 0x00, 0x00, 0x83, 0xda,
0xda, 0xda, 0x33, 0x00, 0x00, 0xaf, 0xda, 0xda, 0xda, 0xda, 0xda, 0xad, 0x00, 0x00, 0x33, 0xda,
0xda, 0xda, 0x0c, 0x00, 0x00, 0xd3, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd2, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0x06, 0x00, 0x00, 0xd2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd1, 0x00, 0x00, 0x07, 0xda,
0xda, 0xda, 0x1f, 0x00, 0x00, 0xac, 0xda, 0xda, 0xda, 0xda, 0xda, 0xad, 0x00, 0x00, 0x21, 0xda,
0xda, 0xda, 0x5c, 0x00, 0x00, 0x55, 0xda, 0xda, 0xda, 0xda, 0xda, 0x57, 0x00, 0x00, 0x5e, 0xda,
0xda, 0xda, 0xba, 0x0c, 0x00, 0x00, 0x60, 0xb9, 0xd5, 0xba, 0x63, 0x00, 0x00, 0x0d, 0xbc, 0xda,
0xda, 0xda, 0xda, 0xa1, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa4, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xc5, 0x72, 0x31, 0x10, 0x03, 0x10, 0x32, 0x74, 0xc6, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xc3, 0x10, 0x00, 0x00, 0x63, 0xbb, 0xd5, 0xb2, 0x4a, 0x18, 0x00, 0x00, 0x03, 0xda,
0xda, 0xda, 0xda, 0x9d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x97, 0x00, 0x00, 0x10, 0xda,
0xda, 0xda, 0xda, 0xda, 0xb7, 0x5a, 0x1f, 0x06, 0x0e, 0x46, 0xae, 0xb6, 0x00, 0x00, 0x28, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x98, 0x00, 0x00, 0x4c, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x5d, 0x00, 0x00, 0x7f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc7, 0x0e, 0x00, 0x05, 0xc4, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd7, 0x49, 0x00, 0x00, 0x60, 0xda, 0xda,
0xda, 0xda, 0xda, 0x39, 0x8f, 0xbe, 0xd5, 0xc9, 0x9b, 0x34, 0x00, 0x00, 0x27, 0xcd, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xc2, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xaa, 0x5c, 0x26, 0x08, 0x04, 0x1a, 0x49, 0x94, 0xd8, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
};
static PROGMEM prog_uchar digits_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f,
0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b,
0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0x9c, 0x73,
0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x7b, 0x6f,
0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x5a, 0x6b, 0x5a, 0x6b,
0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x39, 0x67, 0x39, 0x67, 0x39, 0x67,
0x39, 0x67, 0x39, 0x67, 0x39, 0x67, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63,
0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0xf7, 0x5e, 0xf7, 0x5e, 0xf7, 0x5e, 0xf7, 0x5e, 0xf7, 0x5e,
0xf7, 0x5e, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a,
0xd6, 0x5a, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56,
0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x73, 0x4e, 0x73, 0x4e,
0x73, 0x4e, 0x73, 0x4e, 0x73, 0x4e, 0x73, 0x4e, 0x73, 0x4e, 0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a,
0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a, 0x31, 0x46, 0x31, 0x46, 0x31, 0x46,
0x31, 0x46, 0x31, 0x46, 0x31, 0x46, 0x31, 0x46, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42,
0x10, 0x42, 0x10, 0x42, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d,
0xef, 0x3d, 0xef, 0x3d, 0xce, 0x39, 0xce, 0x39, 0xad, 0x35, 0xad, 0x35, 0xad, 0x35, 0xad, 0x35,
0xad, 0x35, 0xad, 0x35, 0xad, 0x35, 0x8c, 0x31, 0x8c, 0x31, 0x8c, 0x31, 0x8c, 0x31, 0x8c, 0x31,
0x8c, 0x31, 0x8c, 0x31, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d,
0x6b, 0x2d, 0x6b, 0x2d, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29,
0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21,
0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0xe7, 0x1c, 0xe7, 0x1c, 0xe7, 0x1c, 0xe7, 0x1c,
0xe7, 0x1c, 0xe7, 0x1c, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18,
0xa5, 0x14, 0xa5, 0x14, 0xa5, 0x14, 0xa5, 0x14, 0xa5, 0x14, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10,
0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c,
0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x42, 0x08, 0x42, 0x08, 0x42, 0x08, 0x42, 0x08,
0x42, 0x08, 0x42, 0x08, 0x42, 0x08, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04,
0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

View File

@ -1,482 +0,0 @@
static PROGMEM prog_uchar staunton_white[] = {
0x00, 0x80, 0xfc, 0x7f, 0xdb, 0x7f, 0xda, 0x7f, 0xd8, 0x7f, 0xb9, 0x7f, 0xb8, 0x7f, 0xb7, 0x7b,
0x98, 0x7b, 0x98, 0x7f, 0x96, 0x7b, 0x76, 0x7f, 0x76, 0x7b, 0x97, 0x77, 0x96, 0x7b, 0x76, 0x77,
0x77, 0x7b, 0x76, 0x77, 0x75, 0x7f, 0x54, 0x7b, 0x55, 0x77, 0x55, 0x77, 0x56, 0x77, 0x34, 0x7b,
0x34, 0x77, 0x34, 0x77, 0x33, 0x77, 0x55, 0x73, 0x55, 0x6f, 0x34, 0x73, 0x34, 0x6b, 0x34, 0x73,
0x14, 0x73, 0x34, 0x6f, 0x13, 0x73, 0x12, 0x73, 0x13, 0x73, 0x13, 0x73, 0x13, 0x73, 0x12, 0x73,
0xf3, 0x72, 0xf2, 0x6e, 0xf2, 0x6e, 0xf3, 0x6e, 0x13, 0x6f, 0x14, 0x6b, 0xf3, 0x6e, 0xf3, 0x6a,
0xf2, 0x6e, 0xf2, 0x6e, 0xf2, 0x6a, 0xf3, 0x6a, 0xf2, 0x6e, 0xf2, 0x6e, 0xf2, 0x6e, 0xf2, 0x6a,
0xd2, 0x6e, 0xd2, 0x6a, 0xd2, 0x6a, 0xd2, 0x6a, 0xd1, 0x6a, 0xd3, 0x66, 0xd1, 0x66, 0xd1, 0x66,
0xd1, 0x66, 0xd1, 0x66, 0xd1, 0x66, 0xb1, 0x66, 0xb1, 0x66, 0xb1, 0x66, 0xb1, 0x66, 0xb1, 0x62,
0xb1, 0x66, 0xb1, 0x66, 0xb1, 0x66, 0xb1, 0x62, 0xb1, 0x66, 0xb1, 0x62, 0xb0, 0x62, 0xb1, 0x62,
0x90, 0x62, 0x90, 0x62, 0x90, 0x62, 0x90, 0x62, 0x90, 0x62, 0x90, 0x5e, 0x90, 0x62, 0x8f, 0x62,
0x90, 0x62, 0x90, 0x5e, 0x8f, 0x62, 0x70, 0x5e, 0x90, 0x5e, 0x90, 0x5e, 0x70, 0x5e, 0x90, 0x5e,
0x70, 0x5a, 0x6f, 0x5e, 0x70, 0x5a, 0x6f, 0x5e, 0x6f, 0x5a, 0x6f, 0x5a, 0x6f, 0x5a, 0x6f, 0x5a,
0x6f, 0x5a, 0x6f, 0x5a, 0x6f, 0x5a, 0x4f, 0x5a, 0x4e, 0x5a, 0x4f, 0x5a, 0x4e, 0x5a, 0x4f, 0x56,
0x4e, 0x56, 0x4e, 0x56, 0x4e, 0x56, 0x4d, 0x5a, 0x4e, 0x56, 0x4e, 0x56, 0x2e, 0x56, 0x2e, 0x56,
0x2e, 0x56, 0x2e, 0x56, 0x2d, 0x56, 0x2e, 0x56, 0x2e, 0x56, 0x2e, 0x52, 0x2e, 0x52, 0x2e, 0x52,
0x2d, 0x52, 0x2d, 0x52, 0x2d, 0x56, 0x2d, 0x52, 0x2d, 0x52, 0x0d, 0x52, 0x0d, 0x52, 0x0d, 0x52,
0x0d, 0x4e, 0x0d, 0x4e, 0x0c, 0x4e, 0x0d, 0x4e, 0x0c, 0x4e, 0x0c, 0x4e, 0xec, 0x4d, 0x0c, 0x4a,
0xec, 0x4d, 0xec, 0x49, 0xec, 0x49, 0xeb, 0x4d, 0xec, 0x49, 0xec, 0x49, 0xeb, 0x49, 0xcb, 0x49,
0xcb, 0x49, 0xca, 0x49, 0xec, 0x45, 0xcb, 0x45, 0xcb, 0x45, 0xcb, 0x45, 0xca, 0x45, 0xcb, 0x45,
0xcb, 0x41, 0xaa, 0x45, 0xaa, 0x45, 0xaa, 0x41, 0xaa, 0x41, 0xaa, 0x41, 0xa9, 0x41, 0xaa, 0x41,
0x89, 0x41, 0x89, 0x41, 0x8a, 0x3d, 0x89, 0x3d, 0x89, 0x3d, 0x89, 0x3d, 0x89, 0x3d, 0x89, 0x3d,
0x89, 0x39, 0x68, 0x3d, 0x68, 0x3d, 0x69, 0x39, 0x68, 0x39, 0x68, 0x39, 0x68, 0x39, 0x47, 0x39,
0x68, 0x35, 0x68, 0x35, 0x48, 0x35, 0x68, 0x35, 0x48, 0x35, 0x47, 0x35, 0x48, 0x35, 0x47, 0x31,
0x47, 0x35, 0x47, 0x35, 0x27, 0x35, 0x26, 0x35, 0x47, 0x31, 0x27, 0x31, 0x27, 0x31, 0x26, 0x31,
0x27, 0x31, 0x26, 0x31, 0x26, 0x31, 0x06, 0x31, 0x05, 0x31, 0x26, 0x2d, 0x06, 0x2d, 0x06, 0x2d,
0x05, 0x2d, 0x06, 0x2d, 0x06, 0x29, 0x05, 0x29, 0x05, 0x29, 0xe5, 0x28, 0xe5, 0x28, 0xe5, 0x28,
0xe5, 0x28, 0xe5, 0x28, 0xe5, 0x28, 0xe5, 0x24, 0xe6, 0x24, 0xe5, 0x24, 0xe4, 0x24, 0xe5, 0x20,
0xc4, 0x28, 0xc4, 0x24, 0xc4, 0x24, 0xc4, 0x24, 0xc4, 0x24, 0xc4, 0x24, 0xc4, 0x24, 0xc4, 0x24,
0xc4, 0x24, 0xc5, 0x20, 0xc4, 0x20, 0xc4, 0x20, 0xc4, 0x20, 0xc5, 0x20, 0xc5, 0x1c, 0xc4, 0x1c,
0xa4, 0x24, 0xa4, 0x24, 0xa4, 0x20, 0xa4, 0x24, 0xa4, 0x20, 0xa4, 0x20, 0xa3, 0x20, 0xa3, 0x20,
0xa4, 0x1c, 0xa3, 0x20, 0xa5, 0x18, 0x83, 0x18, 0x62, 0x14, 0x41, 0x10, 0x21, 0x0c, 0x00, 0x00,
};
static PROGMEM prog_uchar staunton_black[] = {
0x00, 0x80, 0xff, 0x7f, 0xff, 0x7f, 0xde, 0x7b, 0xde, 0x7b, 0xbd, 0x77, 0x9c, 0x77, 0x9c, 0x73,
0x7b, 0x6f, 0x5a, 0x6f, 0x5a, 0x6b, 0xf7, 0x6e, 0xd6, 0x5e, 0x39, 0x67, 0x18, 0x63, 0xf7, 0x5e,
0xd6, 0x5a, 0xd6, 0x5a, 0xb5, 0x6e, 0x94, 0x6a, 0x73, 0x56, 0x73, 0x4e, 0x52, 0x52, 0x31, 0x5a,
0xef, 0x51, 0x10, 0x4e, 0xce, 0x49, 0x31, 0x46, 0x10, 0x42, 0xce, 0x3d, 0xad, 0x35, 0xad, 0x3d,
0xad, 0x41, 0x8c, 0x31, 0x8c, 0x3d, 0x8c, 0x41, 0x6b, 0x3d, 0x4a, 0x39, 0x29, 0x35, 0x29, 0x39,
0x29, 0x3d, 0x08, 0x35, 0x29, 0x31, 0x08, 0x31, 0x29, 0x2d, 0x08, 0x25, 0x08, 0x2d, 0xe7, 0x24,
0xe7, 0x2c, 0xe7, 0x2c, 0xe7, 0x28, 0xe6, 0x24, 0xe7, 0x2c, 0xe7, 0x2c, 0xe7, 0x2c, 0xc6, 0x28,
0xc6, 0x2c, 0xc6, 0x28, 0xc6, 0x24, 0xc6, 0x28, 0xc5, 0x24, 0xc5, 0x24, 0xc5, 0x24, 0xc4, 0x24,
0xc5, 0x24, 0xc4, 0x24, 0xc4, 0x20, 0xc4, 0x24, 0xa4, 0x24, 0xa4, 0x24, 0xc4, 0x20, 0xa3, 0x20,
0xa4, 0x20, 0xa3, 0x20, 0xa3, 0x20, 0xa3, 0x20, 0xa3, 0x20, 0xa3, 0x20, 0xa3, 0x20, 0xa3, 0x20,
0xa3, 0x20, 0xa3, 0x20, 0xa3, 0x20, 0xa3, 0x1c, 0xa3, 0x1c, 0xa3, 0x1c, 0xa3, 0x1c, 0xa2, 0x1c,
0xa2, 0x1c, 0xa3, 0x1c, 0x82, 0x1c, 0x82, 0x1c, 0xa2, 0x1c, 0x83, 0x1c, 0x82, 0x1c, 0x83, 0x18,
0x82, 0x18, 0x82, 0x1c, 0x82, 0x18, 0x82, 0x1c, 0x82, 0x18, 0x82, 0x18, 0x82, 0x18, 0x82, 0x18,
0x82, 0x18, 0x82, 0x18, 0x82, 0x18, 0x82, 0x18, 0x82, 0x18, 0x82, 0x18, 0x62, 0x18, 0x82, 0x18,
0x62, 0x14, 0x62, 0x14, 0x62, 0x18, 0x62, 0x18, 0x62, 0x14, 0x62, 0x14, 0x62, 0x14, 0x62, 0x14,
0x62, 0x14, 0x62, 0x14, 0x61, 0x14, 0x62, 0x14, 0x62, 0x14, 0x62, 0x14, 0x62, 0x14, 0x62, 0x14,
0x61, 0x14, 0x62, 0x14, 0x61, 0x14, 0x61, 0x14, 0x62, 0x14, 0x61, 0x14, 0x61, 0x14, 0x61, 0x10,
0x61, 0x10, 0x61, 0x10, 0x41, 0x10, 0x41, 0x10, 0x41, 0x10, 0x41, 0x10, 0x41, 0x10, 0x41, 0x10,
0x41, 0x10, 0x41, 0x10, 0x41, 0x10, 0x41, 0x10, 0x41, 0x10, 0x41, 0x0c, 0x41, 0x0c, 0x41, 0x0c,
0x41, 0x0c, 0x41, 0x0c, 0x41, 0x0c, 0x41, 0x0c, 0x41, 0x0c, 0x41, 0x0c, 0x41, 0x0c, 0x41, 0x0c,
0x41, 0x0c, 0x21, 0x0c, 0x21, 0x0c, 0x21, 0x0c, 0x21, 0x0c, 0x21, 0x0c, 0x21, 0x0c, 0x21, 0x08,
0x20, 0x08, 0x20, 0x08, 0x21, 0x08, 0x21, 0x08, 0x20, 0x08, 0x21, 0x08, 0x20, 0x08, 0x20, 0x08,
0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08,
0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x04, 0x20, 0x08, 0x20, 0x08, 0x20, 0x04, 0x20, 0x04,
0x20, 0x04, 0x20, 0x04, 0x00, 0x04, 0x00, 0x04, 0x20, 0x04, 0x20, 0x04, 0x00, 0x04, 0x00, 0x04,
0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04,
0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04,
0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static PROGMEM prog_uchar staunton_img[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x7f, 0x66, 0x07, 0x00, 0x00, 0xb3, 0x4c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x9e, 0x86, 0x02, 0x00, 0x00, 0xbb, 0x4c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc9, 0x99, 0x5f, 0xfc, 0xef, 0xbb, 0x4a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xca, 0xcc, 0x93, 0x71, 0x76, 0x63, 0x50,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xc7, 0xcb, 0xa5, 0x88, 0x83, 0x59, 0x51,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xcb, 0xcb, 0x99, 0x71, 0x63, 0x4b, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xd0, 0xbc, 0xb2, 0xb5, 0xb2,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x94, 0x87, 0x81, 0x6a, 0x40,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xf5, 0xe3, 0xd5, 0xc6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x28, 0x00, 0x00, 0x9d, 0x24, 0x8a, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x28, 0x00, 0x00, 0xc1, 0x16, 0x76, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x35, 0x65, 0xee, 0xdc, 0xb6, 0x0d, 0x77, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x24, 0x13, 0x09, 0x01, 0x23, 0x68, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x38, 0x24, 0x1a, 0x0b, 0x04, 0x24, 0x63, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x22, 0x17, 0x13, 0x0b, 0x05, 0x34, 0x53, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa9, 0xa0, 0x94, 0x90, 0x8e, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x04, 0x02, 0x09, 0x1d, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa6, 0x8a, 0x7a, 0x7a, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x9a, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb4, 0x92, 0x2c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x92, 0x4c, 0x84, 0x23,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xbc, 0xa8, 0x74, 0x30, 0x78,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb3, 0xbf, 0xcb, 0x84, 0x50, 0x36, 0x8c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xc7, 0xc1, 0x8c, 0x51, 0x8c, 0x81, 0x75,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xb6, 0xa4, 0x5d, 0x6b, 0xa7, 0xbc, 0xb0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xb8, 0x89, 0x4b, 0x56, 0x7e, 0x90, 0x9c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xae, 0x87, 0x4f, 0x45, 0x6d, 0xbf, 0x72,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xa0, 0x87, 0x50, 0x58, 0x4c, 0xb2, 0xc6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x8d, 0x8b, 0x31, 0x9e, 0x43, 0x2a, 0x4c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0xaa, 0xa3, 0x4e, 0x58, 0x97, 0x39, 0x34,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x9e, 0x50, 0x51, 0xae, 0x4c, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa1, 0x3d, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xad, 0xf6, 0x3b, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x83, 0x72, 0x14, 0x3c, 0x68, 0x58, 0x63, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x84, 0x45, 0x5f, 0x59, 0x6e, 0x80, 0x50, 0xa5, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7e, 0x5b, 0x3c, 0x69, 0x80, 0x87, 0x6b, 0x82, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x40, 0x50, 0x71, 0x8b, 0xbf, 0xc5, 0xb0, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x97, 0x30, 0x50, 0x75, 0x8b, 0xa0, 0xd3, 0x9c, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x98, 0xc1, 0x90, 0x00, 0x00, 0x71, 0x6b, 0x7d, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x27, 0x2a, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x3e, 0x6d, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x5b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xfe, 0xe3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x06, 0x4d, 0xfe,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xa6, 0x5b, 0x0a, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xf5, 0xc0, 0x6e, 0x6b, 0x1f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xd5, 0x81, 0x60, 0x3b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xec, 0xd1, 0x8c, 0x5c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xd5, 0xd4, 0xb5,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xae, 0x9c, 0x84, 0x3e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xa5, 0xad, 0xb0, 0x9f, 0x77,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb8, 0xb9, 0xb5, 0x9f, 0x4e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x92, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x0b, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x53, 0x19, 0x01, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc9, 0x41, 0x05, 0x05, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xdb, 0x8f, 0x1d, 0x17, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa7, 0xa1, 0x20, 0x3b, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x56, 0x58, 0x55, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x5c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x07, 0x0e, 0x53, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2c, 0x1e, 0x33, 0x42, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1c, 0x1b, 0x2c, 0x42, 0x5e, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xd8, 0xc9, 0x00, 0x72, 0x39, 0x2c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xd0, 0xba, 0x71, 0xf9, 0xec, 0x93, 0x33, 0x96, 0xe5,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xd8, 0xfc, 0xfd, 0xfd, 0xfc, 0xec, 0xfc, 0xfc,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfd, 0xfe, 0xfe, 0xfc, 0xe2, 0xa7,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xfb, 0xe5, 0xca, 0xac, 0x7c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xaf, 0x9b, 0x6d, 0x5d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xd4, 0xb7, 0x98, 0x89, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xb2, 0xa9, 0x98, 0x9c, 0x89, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xa5, 0xb0, 0xb2, 0x9d, 0x82, 0x72,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xbe, 0xbe, 0xb8, 0xa3, 0x9b, 0x7e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x01, 0x09, 0x00, 0x97, 0x3d, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x82, 0x12, 0x2d, 0x7b, 0x78, 0x03, 0x82, 0x63, 0x75, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfc, 0xda, 0xd0, 0xa0, 0x91, 0x80, 0x84, 0x5e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x83, 0x6a, 0x45, 0x3e, 0x13, 0x68, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x59, 0x46, 0x25, 0x0a, 0x1d, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x2a, 0x15, 0x08, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x57, 0x2c, 0x0f, 0x15, 0x2c, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x1f, 0x0d, 0x07, 0x33, 0x47, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x57, 0x43, 0x1e, 0x1e, 0x33, 0x4d, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4b, 0x2e, 0x1c, 0x1b, 0x3d, 0x47, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xb7, 0x97,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xc9, 0x9d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xb0, 0x9c, 0x3a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x5b, 0x35, 0x26, 0x1d, 0x1a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xd8, 0xf5, 0xfb, 0xfd, 0xfd, 0xfb, 0xf9, 0xf2, 0xd8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xf5, 0xe6, 0xe3, 0xdd, 0xd1, 0xc1, 0xb4,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, 0xfd, 0xf9, 0xcc, 0xb1, 0xa3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xfb, 0xc9, 0xac, 0x94, 0x7b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xa9, 0x94, 0x71, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xd4, 0xba, 0x98, 0x89, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xb2, 0xa9, 0x98, 0x9c, 0x8a, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xa5, 0xad, 0xad, 0x9a, 0x80, 0x6e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb8, 0xbb, 0xb2, 0xa0, 0x9a, 0x7d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x01, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x19, 0x6d, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2d, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x41, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x09, 0x04, 0x01, 0x01, 0x01, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd7, 0xd5, 0xd0, 0xbd, 0xa9, 0x90, 0x61, 0x6a, 0x46, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x9f, 0x85, 0x71, 0x69, 0x43, 0x3e, 0x47, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x8d, 0x7e, 0x58, 0x44, 0x19, 0x70, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x5d, 0x46, 0x25, 0x0a, 0x1d, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0x2a, 0x15, 0x08, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x57, 0x2c, 0x0f, 0x15, 0x2c, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x1f, 0x0d, 0x07, 0x33, 0x47, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x57, 0x44, 0x1e, 0x1e, 0x33, 0x4d, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4d, 0x26, 0x1c, 0x1c, 0x3d, 0x42, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x96,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x5d, 0x37,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x9e, 0x47, 0x15,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x95, 0x32, 0x0a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x96, 0x39, 0x1a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x23, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x03, 0x17, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x12, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0a, 0x05, 0x23, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xe3, 0xd4, 0xb3, 0x8c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xe3, 0xd2, 0xa5, 0x63,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xdd, 0xbb, 0x8b, 0x61,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xe3, 0xb3, 0x8c, 0x59,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xdb, 0xb3, 0x81, 0x59,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xeb, 0xcd, 0xa4, 0x7d, 0x59,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xef, 0xd4, 0xbe, 0x9f, 0x7d, 0x5b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc9, 0xda, 0xd5, 0xcb, 0xc2, 0xb5, 0xa1, 0x94,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xf7, 0xe7, 0xe4, 0xe0, 0xd5, 0xc8, 0xc7, 0xb6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0xe7, 0xe1, 0xde, 0xda, 0xcf, 0xc7, 0xc0, 0xac, 0x9e,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xf8, 0xe5, 0xdb, 0xcd, 0xc8, 0xbe, 0xbb, 0xb0, 0xa0, 0x8f,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xf6, 0xf6, 0xd2, 0xbe, 0xa5, 0x8b, 0x78, 0x6d, 0x59, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xf0, 0xf1, 0xf6, 0xf4, 0xcf, 0xbb, 0xae, 0xa3, 0xa7, 0xa2,
0x00, 0x00, 0x00, 0x00, 0xcf, 0xe7, 0xf2, 0xf1, 0xe2, 0xc8, 0xbd, 0xa5, 0x98, 0x7f, 0x80, 0x6f,
0x00, 0x00, 0x00, 0x00, 0xd2, 0xea, 0xf3, 0xeb, 0xd6, 0xc4, 0xb8, 0xaf, 0x88, 0x70, 0x56, 0x56,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x27, 0x06, 0x17, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x26, 0x02, 0x15, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x1f, 0x02, 0x17, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x1f, 0x02, 0x0a, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x37, 0x03, 0x0f, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x42, 0x16, 0x10, 0x3b, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4a, 0x3f, 0x36, 0x10, 0x12, 0x36, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x8c, 0x7a, 0x73, 0x6e, 0x65, 0x63, 0x52, 0x35, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xb6, 0xac, 0xa1, 0x8a, 0x7a, 0x93, 0x99, 0x93, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x90, 0x77, 0x40, 0x35, 0x09, 0x29, 0x36, 0x4f, 0x64, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x75, 0x5e, 0x45, 0x37, 0x05, 0x20, 0x49, 0x4a, 0x4a, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4a, 0x38, 0x27, 0x28, 0x28, 0x08, 0x1a, 0x29, 0x45, 0x61, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00,
0x98, 0x9c, 0x8c, 0x80, 0x73, 0x82, 0x8e, 0xa8, 0xba, 0xc0, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00,
0x67, 0x61, 0x5a, 0x58, 0x48, 0x2d, 0x2d, 0x2a, 0x35, 0x44, 0x66, 0x74, 0x00, 0x00, 0x00, 0x00,
0x49, 0x41, 0x31, 0x23, 0x1a, 0x10, 0x16, 0x17, 0x23, 0x3a, 0x61, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xa1, 0x5f, 0x33, 0x96, 0xd0, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xb6, 0xa2, 0x22, 0x6b, 0xc3, 0x7a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xb1, 0xb2, 0x33, 0x53, 0xc2, 0xc2,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xa9, 0xb1, 0x69, 0x4f, 0xb7, 0xb6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xbc, 0xb6, 0x70, 0x1b, 0x97, 0x51,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xe0, 0xbe, 0xac, 0x75, 0x35, 0x1a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xf7, 0xe5, 0xd0, 0xbd, 0xa3,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc9, 0xd6, 0xd6, 0xd0, 0xc7, 0xa9, 0x86,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf7, 0xe8, 0xe5, 0xe1, 0xd7, 0xc9, 0xb6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0xe7, 0xe1, 0xde, 0xd7, 0xd1, 0xca, 0xab, 0x6f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xec, 0xe4, 0xde, 0xcd, 0xcd, 0xbb, 0xb6, 0x9f, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xf7, 0xf0, 0xd2, 0xbe, 0xad, 0x91, 0x8d, 0x7e, 0x4f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xe8, 0xf1, 0xf7, 0xf4, 0xd3, 0xbb, 0xae, 0xa5, 0xaa,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xf2, 0xf1, 0xe2, 0xcd, 0xb4, 0xa3, 0x9b, 0x87, 0x74,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe9, 0xf3, 0xe4, 0xda, 0xc4, 0xb0, 0x9a, 0x6f, 0x64, 0x49,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x14, 0x3d, 0xa5, 0x95, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x0e, 0x69, 0xaf, 0x5f, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x28, 0x23, 0x3e, 0x9c, 0xab, 0x50, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34, 0x24, 0x2a, 0x41, 0x53, 0x47, 0x25, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x35, 0x31, 0x3c, 0x10, 0x4d, 0x92, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x14, 0x0a, 0x05, 0x53, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x87, 0x7c, 0x70, 0x74, 0x74, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x77, 0x7d, 0x86, 0x68, 0x4b, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa6, 0x93, 0x7c, 0x8c, 0x99, 0x97, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x45, 0x36, 0x1b, 0x20, 0x2b, 0x46, 0x5e, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x45, 0x3c, 0x0a, 0x08, 0x43, 0x4b, 0x48, 0x4c, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34, 0x28, 0x28, 0x16, 0x16, 0x24, 0x43, 0x5e, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x95, 0x85, 0x73, 0x82, 0x8a, 0xa2, 0xb5, 0xc0, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x66, 0x5a, 0x46, 0x2d, 0x1e, 0x2c, 0x34, 0x3c, 0x5c, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x39, 0x2b, 0x20, 0x11, 0x07, 0x0f, 0x20, 0x2b, 0x56, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xdf, 0xd1, 0xa0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xd4, 0x9a, 0x4b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xbf, 0x96, 0x33,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xad, 0x5f, 0x23,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xac, 0x63, 0x1b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd3, 0x9b, 0x5d, 0x37,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xe9, 0xc8, 0x8b, 0x5d, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc9, 0xd6, 0xd5, 0xcb, 0xc1, 0xa9, 0x90,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf7, 0xe8, 0xe4, 0xe1, 0xd7, 0xc9, 0xb5,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0xe7, 0xe1, 0xde, 0xd7, 0xd1, 0xca, 0xab, 0x6f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xec, 0xe4, 0xde, 0xcd, 0xcd, 0xbb, 0xb6, 0x9f, 0x6c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xf7, 0xf0, 0xd2, 0xbe, 0xad, 0x91, 0x8d, 0x7e, 0x4f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xe8, 0xf1, 0xf7, 0xf4, 0xd3, 0xbb, 0xae, 0xa5, 0xaa,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0xf2, 0xf1, 0xe2, 0xcd, 0xb4, 0xa3, 0x9b, 0x87, 0x74,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe9, 0xf3, 0xe4, 0xda, 0xc4, 0xb0, 0x9a, 0x6f, 0x64, 0x49,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x89, 0x7d, 0x6f, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1b, 0x04, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x07, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x04, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x04, 0x29, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x08, 0x22, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x21, 0x14, 0x04, 0x24, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x73, 0x6c, 0x68, 0x68, 0x59, 0x3f, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa1, 0x93, 0x7b, 0x8c, 0x99, 0x97, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x45, 0x39, 0x14, 0x20, 0x2b, 0x46, 0x5e, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x45, 0x3c, 0x0e, 0x08, 0x43, 0x4b, 0x48, 0x4c, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x34, 0x28, 0x28, 0x16, 0x16, 0x24, 0x43, 0x5e, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x95, 0x85, 0x73, 0x82, 0x8a, 0xa2, 0xb5, 0xc0, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x66, 0x5a, 0x46, 0x2d, 0x1e, 0x2c, 0x34, 0x3c, 0x5c, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x39, 0x2b, 0x20, 0x11, 0x07, 0x0f, 0x20, 0x2b, 0x56, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xef, 0xe9, 0xce, 0xbd,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xe4, 0xcd, 0xa0, 0x7b,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xdd, 0xc4, 0x9e, 0x89,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xea, 0xbf, 0xa2, 0x7c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xca, 0xab, 0x7e, 0x59,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xdd, 0xb6, 0x96, 0x72, 0x59,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xed, 0xce, 0xa0, 0x88, 0x72, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xcc, 0xde, 0xd5, 0xd0, 0xc3, 0xb7, 0xa1, 0x99,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xf6, 0xe8, 0xe5, 0xe0, 0xd8, 0xc9, 0xca, 0xba,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xf9, 0xe8, 0xf4, 0xf0, 0xda, 0xd1, 0xc6, 0xb4, 0xa4,
0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xf9, 0xf1, 0xe0, 0xd2, 0xcf, 0xc5, 0xc5, 0xba, 0xaa, 0x94,
0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xf6, 0xe5, 0xcf, 0xc4, 0xad, 0x92, 0x8c, 0x7e, 0x65, 0x5f,
0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xf0, 0xf3, 0xf7, 0xf4, 0xd6, 0xc2, 0xb4, 0xa5, 0xad, 0xa3,
0x00, 0x00, 0x00, 0x00, 0xde, 0xe7, 0xf2, 0xf3, 0xe1, 0xce, 0xbe, 0xb3, 0x9c, 0x8c, 0x7e, 0x72,
0x00, 0x00, 0x00, 0x00, 0xdf, 0xec, 0xf3, 0xeb, 0xd9, 0xc5, 0xb8, 0xab, 0x9c, 0x7e, 0x5e, 0x5d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaf, 0xa0, 0x87, 0x7f, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x2c, 0x0e, 0x06, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x67, 0x2c, 0x08, 0x0a, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x63, 0x21, 0x03, 0x0c, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x37, 0x03, 0x0f, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x42, 0x16, 0x10, 0x3b, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4a, 0x3f, 0x36, 0x10, 0x12, 0x34, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x90, 0x84, 0x72, 0x6e, 0x63, 0x6c, 0x58, 0x35, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xb7, 0xb2, 0xa6, 0x94, 0x87, 0x93, 0x99, 0x93, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x98, 0x79, 0x45, 0x38, 0x09, 0x29, 0x39, 0x52, 0x6b, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7e, 0x5e, 0x48, 0x40, 0x05, 0x25, 0x4c, 0x50, 0x52, 0x65, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00,
0x59, 0x3c, 0x30, 0x24, 0x28, 0x0d, 0x1a, 0x29, 0x45, 0x6d, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00,
0x9b, 0x98, 0x8a, 0x83, 0x73, 0x82, 0x8e, 0xae, 0xc3, 0xc0, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00,
0x67, 0x67, 0x5a, 0x5b, 0x3d, 0x2d, 0x1e, 0x2b, 0x35, 0x44, 0x63, 0x91, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x40, 0x34, 0x28, 0x1a, 0x0d, 0x07, 0x17, 0x23, 0x3a, 0x64, 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, 0xee, 0xee, 0xe9, 0xcd, 0xb6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xea, 0xcd, 0xa0, 0x75,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xda, 0xbe, 0x9c, 0x7f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0xdf, 0xb9, 0x99, 0x78,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xc5, 0xa7, 0x78, 0x5d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd6, 0xb3, 0x92, 0x72, 0x59,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xea, 0xc5, 0x9f, 0x87, 0x74, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xcb, 0xd6, 0xd5, 0xcb, 0xbc, 0xb2, 0x9e, 0x95,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xf5, 0xe8, 0xe4, 0xe1, 0xd5, 0xc7, 0xc7, 0xb6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xf0, 0xe1, 0xde, 0xd7, 0xcf, 0xc7, 0xc0, 0xac, 0x9e,
0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xf9, 0xe4, 0xdb, 0xcd, 0xc8, 0xb9, 0xbb, 0xb0, 0xa0, 0x8b,
0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xf7, 0xe5, 0xd2, 0xbe, 0xab, 0x91, 0x89, 0x7c, 0x64, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xf0, 0xf3, 0xf7, 0xf4, 0xcf, 0xbb, 0xac, 0xa1, 0xa7, 0xa2,
0x00, 0x00, 0x00, 0x00, 0xde, 0xf0, 0xf3, 0xe7, 0xe2, 0xc8, 0xbd, 0xa5, 0x9a, 0x84, 0x7e, 0x6d,
0x00, 0x00, 0x00, 0x00, 0xdf, 0xf6, 0xf1, 0xe7, 0xd9, 0xc4, 0xb4, 0xac, 0x88, 0x6d, 0x52, 0x53,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xad, 0x9b, 0x88, 0x75, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6a, 0x2c, 0x0a, 0x09, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x67, 0x2e, 0x05, 0x0a, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x56, 0x1f, 0x02, 0x0c, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x37, 0x03, 0x0f, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x52, 0x42, 0x16, 0x10, 0x3b, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4b, 0x3f, 0x36, 0x10, 0x12, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x8c, 0x7a, 0x6e, 0x6c, 0x65, 0x63, 0x4f, 0x35, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xb4, 0xac, 0xa1, 0x8c, 0x7a, 0x93, 0x99, 0x8e, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x90, 0x77, 0x3f, 0x34, 0x09, 0x29, 0x36, 0x4f, 0x64, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x75, 0x5e, 0x40, 0x3b, 0x05, 0x1d, 0x49, 0x4a, 0x49, 0x54, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
0x59, 0x3c, 0x30, 0x24, 0x28, 0x10, 0x20, 0x2a, 0x48, 0x66, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00,
0x98, 0x94, 0x8c, 0x80, 0x73, 0x82, 0x8e, 0xa8, 0xba, 0xc0, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00,
0x67, 0x61, 0x5b, 0x5a, 0x3d, 0x2d, 0x1e, 0x2a, 0x35, 0x44, 0x65, 0x68, 0x00, 0x00, 0x00, 0x00,
0x46, 0x40, 0x31, 0x22, 0x1b, 0x0e, 0x07, 0x17, 0x20, 0x39, 0x61, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xd1, 0x87, 0x62,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xec, 0xb7,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x59, 0x41, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd0, 0xcf, 0x9c, 0x52,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xd8, 0x9c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0x87,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xb7, 0x70,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xae, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xd5, 0xdb, 0xd8, 0xa8, 0x83,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xe4, 0xde, 0xd7, 0xc1, 0xa8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe2, 0xe2, 0xe0, 0xcd, 0x95, 0x54,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xf1, 0xde, 0xcf, 0xc8, 0xa7, 0x84, 0x56,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xe7, 0xde, 0xce, 0xb3, 0x8d, 0x6a, 0x26,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xf7, 0xf3, 0xf4, 0xda, 0xc6, 0xbd, 0xc1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xe5, 0xe4, 0xe3, 0xbe, 0xa3, 0x76, 0x35, 0x19,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x37, 0x32, 0x4f, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x95, 0x7a, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x03, 0x05, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x19, 0x0b, 0x14, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x07, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1a, 0x04, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x31, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x22, 0x04, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x72, 0x6c, 0x63, 0x5e, 0x40, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x82, 0x65, 0x85, 0x93, 0x8c, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3b, 0x20, 0x28, 0x36, 0x4f, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3b, 0x07, 0x0e, 0x44, 0x4f, 0x4b, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x12, 0x13, 0x05, 0x0c, 0x2b, 0x44, 0x64, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc7, 0xbc, 0xbc, 0xc1, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x0b, 0x04, 0x02, 0x06, 0x12, 0x20, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

View File

@ -1,95 +0,0 @@
#include <SPI.h>
#include <GD.h>
void setup()
{
#if 0
pinMode(9, OUTPUT);
pinMode(12, INPUT);
digitalWrite(12, HIGH);
for (;;) {
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
}
#endif
// Configure input pins with internal pullups
byte i;
for (i = 2; i < 7; i++) {
pinMode(i, INPUT);
digitalWrite(i, HIGH);
}
GD.begin();
GD.ascii();
GD.wr16(RAM_SPRPAL + 2 * 255, TRANSPARENT);
// draw 32 circles into 32 sprite images
for (i = 0; i < 32; i++) {
GD.wr16(RAM_SPRPAL + 2 * i, RGB(8 * i, 64, 255 - 8 * i));
int dst = RAM_SPRIMG + 256 * i;
GD.__wstart(dst);
byte x, y;
int r2 = min(i * i, 256);
for (y = 0; y < 16; y++) {
for (x = 0; x < 16; x++) {
byte pixel;
if ((x * x + y * y) <= r2)
pixel = i; // use color above
else
pixel = 0xff; // transparent
SPI.transfer(pixel);
}
}
GD.__end();
}
}
void circle(int x, int y, byte a)
{
byte sprnum = 0;
GD.sprite(sprnum++, x + 16, y + 16, a, 0, 0);
GD.sprite(sprnum++, x + 0, y + 16, a, 0, 2);
GD.sprite(sprnum++, x + 16, y + 0, a, 0, 4);
GD.sprite(sprnum++, x + 0, y + 0, a, 0, 6);
}
static byte bbits()
{
byte r;
r |= (digitalRead(3) << 0);
r |= (digitalRead(4) << 1);
r |= (digitalRead(5) << 2);
r |= (digitalRead(6) << 3);
r |= (digitalRead(2) << 4);
return r;
}
static byte ands = 0x1f, ors = 0x00;
void loop()
{
GD.putstr(40, 10, digitalRead(4) ? "-" : "U");
GD.putstr(40, 20, digitalRead(5) ? "-" : "D");
GD.putstr(35, 15, digitalRead(6) ? "-" : "L");
GD.putstr(45, 15, digitalRead(3) ? "-" : "R");
GD.putstr(17, 24, digitalRead(2) ? "-" : "S");
int x = analogRead(0);
int y = analogRead(1);
byte bb = bbits();
ands &= bb;
ors |= bb;
if (ands == 0 && ors == 0x1f)
GD.putstr(35, 24, "BUTTONS OK");
char msg[20];
sprintf(msg, "X=%4d, Y=%4d", x, y);
GD.putstr(0, 36, msg);
circle(x / 4, 255 - y / 4, digitalRead(2) ? 15 : 31);
}

View File

@ -1,146 +0,0 @@
#include <SPI.h>
#include <GD.h>
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ (data >> (0 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> (1 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
void setup()
{
Serial.begin(115200);
GD.begin();
GD.ascii();
GD.putstr(0, 0, "memloader");
}
static byte get1()
{
while (!Serial.available())
;
return Serial.read();
}
static uint16_t get2()
{
int r = get1();
return (r << 8) + get1();
}
static void crc_mem(uint16_t a, uint16_t n)
{
unsigned long crc = ~0;
GD.__start(a);
while (n--)
crc = crc_update(crc, SPI.transfer(0));
GD.__end();
crc = ~crc;
Serial.write(crc >> 24);
Serial.write(crc >> 16);
Serial.write(crc >> 8);
Serial.write(crc);
}
static byte mirror[256];
static void copycoll()
{
GD.waitvblank();
GD.waitvblank();
GD.__start(COLLISION);
int i;
for (i = 0; i < 256; i++)
mirror[i] = SPI.transfer(0);
GD.__end();
}
void loop()
{
int i;
// Commands arrive on the serial connection, and trigger various SPI
// actions. The commands are:
//
// len addr block read/write, depending on hi bit of addr
// 0 'L' yy line CRC. Captures line yy, returns the CRC32
// 0 'c' COLLISION dump. Returns the 256 bytes of COLLISION
// 0 'C' COLLISION CRC. Returns the CRC32 of COLLISION
// 0 'M' addr len RAM CRC. Returns the CRC32 of len bytes at addr
byte len = get1();
if (len) {
unsigned short addr;
addr = get2();
GD.__start(addr);
if (addr & 0x8000) {
while (len--)
SPI.transfer(get1());
} else {
while (len--)
Serial.write(SPI.transfer(0));
}
GD.__end();
} else switch (get1()) {
case 'L': { // one-line CRC
unsigned int yy;
yy = get2();
GD.wr16(SCREENSHOT_Y, 0x8000 | yy);
while ((GD.rd(SCREENSHOT_Y + 1) & 0x80) == 0)
;
crc_mem(SCREENSHOT, 800);
GD.wr16(SCREENSHOT_Y, 0);
break;
}
case 'F': { // full-screen CRC
unsigned int yy;
for (yy = 0; yy < 300; yy++) {
GD.wr16(SCREENSHOT_Y, 0x8000 | yy);
while ((GD.rd(SCREENSHOT_Y + 1) & 0x80) == 0)
;
crc_mem(SCREENSHOT, 800);
}
GD.wr16(SCREENSHOT_Y, 0);
break;
}
case 'c': {
copycoll();
for (i = 0; i < 256; i++) {
Serial.write(mirror[i]);
}
break;
}
case 'C': {
copycoll();
unsigned long crc = ~0;
for (i = 0; i < 256; i++)
crc = crc_update(crc, mirror[i]);
crc = ~crc;
Serial.write(crc >> 24);
Serial.write(crc >> 16);
Serial.write(crc >> 8);
Serial.write(crc);
break;
}
case 'M': {
uint16_t a = get2();
uint16_t s = get2();
crc_mem(a, s);
}
}
}

View File

@ -1,45 +0,0 @@
#include <SPI.h>
#include <GD.h>
#define RED RGB(255,0,0)
#define GREEN RGB(0,255,0)
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(20, 0, "Screenshot");
GD.wr16(RAM_PAL + (8 * 127), RED); // char 127: 0=red, 3=green
GD.wr16(RAM_PAL + (8 * 127) + 6, GREEN);
static PROGMEM prog_uchar box[] = {
0xff, 0xff,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xff, 0xff };
GD.copy(RAM_CHR + (16 * 127), box, sizeof(box));
for (i = 0; i < 64; i++) {
GD.wr(64 * i + i, 127); // diagonal boxes
char msg[20];
sprintf(msg, "Line %d", i);
GD.putstr(i + 2, i, msg);
GD.wr(64 * i + 49, 127); // boxes on right
}
Serial.begin(1000000);
long started = millis();
GD.screenshot(0);
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,428 +0,0 @@
#include <SPI.h>
#include <GD.h>
int atxy(int x, int y)
{
return (y << 6) + x;
}
void readn(byte *dst, unsigned int addr, int c)
{
GD.__start(addr);
while (c--)
*dst++ = SPI.transfer(0);
GD.__end();
}
static byte coll[256];
static void debug_coll()
{
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
while (GD.rd(VBLANK) == 1) // Wait until display
;
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
readn(coll, COLLISION, 256);
}
#define FAIL do { Serial.print("Fail at line: "); Serial.println(__LINE__, DEC); return 0; } while (0)
int test_collision()
{
int i, j;
#define NOCOLL 0xff
GD.wr16(RAM_SPRPAL, 0x8000); // color 0 transparent, 1-255 0x5555 (pinkish)
GD.fill(RAM_SPRPAL + 2, 0x55, 510);
GD.fill(RAM_SPRIMG, 1, 256);
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
debug_coll();
for (i = 0; i < 256; i++)
if (coll[i] != NOCOLL)
FAIL;
GD.sprite(7, 200, 100, 0, 0, 0);
GD.sprite(117, 200, 200, 0, 0, 0);
byte jkmode, jk;
for (jkmode = 0; jkmode < 2; jkmode++) {
for (jk = 0; jk < 2; jk++) {
GD.wr(JK_MODE, jkmode);
for (i = -20; i < 20; i++) {
GD.sprite(8, 200, 100 + i, 0, 0, 0, jk);
GD.sprite(200, 200 + i, 200, 0, 0, 0, jk);
debug_coll();
byte expected = ((!jkmode || jk) && (abs(i) < 16)) ? 7 : NOCOLL;
if (coll[8] != expected)
FAIL;
expected = ((!jkmode || jk) && (abs(i) < 16)) ? 117 : NOCOLL;
if (coll[200] != expected)
FAIL;
}
}
}
randomSeed(1);
for (j = 100; j; j--) {
for (i = 0; i < 256; i++) {
GD.sprite(i, random(512), random(512), 0, 0, 0);
}
debug_coll();
for (i = 0; i < 256; i++) {
if (coll[i] != 0xff && (coll[i] >= i))
FAIL;
}
}
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
return 1;
}
int test_ident()
{
byte id = GD.rd(IDENT);
if (id != 0x6d) {
Serial.println(id, HEX);
FAIL;
}
return 1;
}
int test_frame()
{
byte v;
const int nframes = 200;
v = GD.rd(FRAME);
while (GD.rd(FRAME) != ((v + 1) & 0xff))
;
long t0 = micros();
while (GD.rd(FRAME) != ((v + nframes + 1) & 0xff))
;
long t10 = micros();
Serial.println(t10 - t0, DEC);
Serial.print("(");
Serial.print(nframes / (1.e-6 * (t10 - t0)), DEC);
Serial.println(" fps)");
return 1;
}
// low-level SPI test. Write a random pattern to the 16K image RAM,
// then read it back, verifying the same random values. Meant to
// catch SPI transmission errors.
int test_spi()
{
int i;
randomSeed(947);
GD.__wstart(RAM_SPRIMG);
for (i = 0; i < 16384; i++)
SPI.transfer(random(256));
GD.__end();
randomSeed(947);
GD.__start(RAM_SPRIMG);
for (i = 0; i < 16384; i++)
if (SPI.transfer(0) != random(256))
FAIL;
GD.__end();
return 1;
}
// Test a RAM area (addr, c)
int test_a_ram(unsigned int addr, int c)
{
while (c--) {
byte prev = GD.rd(addr);
GD.wr(addr, 0xff); if (GD.rd(addr) != 0xff) FAIL;
GD.wr(addr, 0x00); if (GD.rd(addr) != 0x00) FAIL;
GD.wr(addr, 0x47); if (GD.rd(addr) != 0x47) FAIL;
GD.wr(addr, prev); if (GD.rd(addr) != prev) FAIL;
addr++;
}
return 1;
}
// Write/read a simple pattern to each RAM byte.
// (Restores RAM values so display is preserved.)
int test_rams()
{
test_a_ram(0, (4 + 4 + 2) * 1024); /* Pic, chr and pal */
test_a_ram(RAM_SPR, 0x5000); /* Sprites */
test_a_ram(PALETTE16A, 64);
test_a_ram(PALETTE4A, 16);
test_a_ram(VOICES, 64 * 4);
GD.wr(J1_RESET, 1);
test_a_ram(J1_CODE, 256);
return 1;
}
int test_audio_l()
{
GD.fill(VOICES, 0, 64 * 4);
GD.voice(0, 0, 4 * 440, 255, 0);
delay(1000);
return 1;
}
int test_audio_r()
{
GD.fill(VOICES, 0, 64 * 4);
GD.voice(0, 0, 4 * 440, 0, 255);
delay(1000);
GD.fill(VOICES, 0, 64 * 4);
return 1;
}
int test_speed()
{
long t0 = millis();
int i, j;
for (i = 0; i < 1000; i++) {
GD.fill(RAM_SPRIMG, 0x55, 1000);
}
Serial.print("(Took ");
Serial.print(millis() - t0);
Serial.print(")");
return 1;
}
#include "lena.h"
static void show_lena()
{
GD.copy(RAM_SPRPAL, lenapal, sizeof(lenapal));
int i;
for (i = 0; i < 64; i++)
GD.sprite(i, 256 + ((i & 7) << 4), 64 + 2 * (i & 070), i, 0, 0);
for (i = 64; i < 512; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
GD.uncompress(RAM_SPRIMG, lenaimg);
}
void show_stripes()
{
int i;
for (i = 0; i < 32; i++) {
GD.wr16(RAM_PAL + (0x80 + i) * 8, RGB(8 * i, 0, 0));
GD.wr16(RAM_PAL + (0xa0 + i) * 8, RGB(0, 8 * i, 0));
GD.wr16(RAM_PAL + (0xc0 + i) * 8, RGB(0, 0, 8 * i));
GD.wr(atxy(i, 24), 0x80 + i);
GD.wr(atxy(i, 25), 0xa0 + i);
GD.wr(atxy(i, 26), 0xc0 + i);
}
GD.putstr(0, 28, "R");
GD.putstr(0, 29, "G");
GD.putstr(0, 30, "B");
GD.putstr(4, 31, "0");
GD.putstr(8, 31, "1");
GD.putstr(16, 31, "2");
GD.wr(atxy(4, 28), 0x80 + 4);
GD.wr(atxy(8, 28), 0x80 + 8);
GD.wr(atxy(16, 28), 0x80 + 16);
GD.wr(atxy(4, 29), 0xa0 + 4);
GD.wr(atxy(8, 29), 0xa0 + 8);
GD.wr(atxy(16, 29), 0xa0 + 16);
GD.wr(atxy(4, 30), 0xc0 + 4);
GD.wr(atxy(8, 30), 0xc0 + 8);
GD.wr(atxy(16, 30), 0xc0 + 16);
}
byte y;
static void logn(const char*s)
{
Serial.print(s);
GD.putstr(0, y, s);
}
static void log(const char*s)
{
Serial.println(s);
GD.putstr(16, y++, s);
}
#define RUNTEST(NAME) \
do { \
logn(#NAME ": "); \
r = NAME(); \
log(r ? "pass" : "FAIL"); \
pass &= r; \
} while (0)
#include "selftest1.h"
static unsigned long rd32()
{
return GD.rd16(COMM+0) + ((unsigned long)GD.rd16(COMM+2) << 16);
}
int test_coproc()
{
GD.microcode(selftest1_code, sizeof(selftest1_code));
GD.wr(COMM+15, 0); // stop
GD.wr16(COMM+0, 0);
GD.wr16(COMM+2, 0);
unsigned long started;
unsigned long cycles0, cycles1;
byte regime;
int jj;
for (regime = 0; regime < 6; regime++) {
cycles0 = rd32();
started = micros();
GD.wr(COMM+15, 1); // go
switch (regime) {
case 0:
delay(1000);
break;
case 1:
GD.__start(0);
delay(1000);
GD.__end();
break;
case 2:
GD.__start(0);
SPI.transfer(0);
delay(1000);
GD.__end();
break;
case 3:
GD.__start(0);
for (jj = 0; jj < 1000; jj++) {
SPI.transfer(0);
delay(1);
}
GD.__end();
break;
case 4:
for (jj = 0; jj < 1000; jj++) {
GD.rd(0);
delay(1);
}
break;
case 5:
while ((micros() - started) < 1000000) {
GD.__start(0);
for (jj = 0; jj < 1000; jj++)
SPI.transfer(0);
GD.__end();
}
break;
}
GD.wr(COMM+15, 0); // stop
delay(1);
cycles1 = rd32();
long cps = long(1e6 * (cycles1 - cycles0) / (micros() - started));
if (cps < 1000000)
FAIL;
// Serial.println(micros() - started, DEC);
// Serial.print(regime, DEC);
// Serial.print(' ');
// Serial.println(cps, DEC);
}
return 1;
}
// See Atmel AT45DB021D datasheet:
// http://www.atmel.com/dyn/resources/prod_documents/doc3638.pdf
static int test_flash()
{
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
delay(1);
digitalWrite(2, LOW);
SPI.transfer(0xd7); // read SPI flash status
byte status = SPI.transfer(0);
digitalWrite(2, HIGH);
if (status != 0x94) // 0x94 means "idle; all is well"
FAIL;
GD.wr(IOMODE, 0);
return 1;
}
static void runtests()
{
char msg[50];
GD.begin();
GD.ascii();
GD.fill(0, ' ', 4096);
GD.putstr(0, 0,"<------------------- TOP LINE ------------------->");
GD.putstr(0,36,"<----------------- BOTTOM LINE ------------------>");
show_stripes();
y = 3;
byte r, pass = 1;
log("Starting self-test");
RUNTEST(test_ident);
// RUNTEST(test_frame);
RUNTEST(test_flash);
RUNTEST(test_audio_l);
RUNTEST(test_audio_r);
RUNTEST(test_coproc);
RUNTEST(test_speed);
RUNTEST(test_spi);
RUNTEST(test_rams);
RUNTEST(test_collision);
if (pass) {
log("All tests passed");
show_lena();
long seconds = millis() / 1000;
long minutes = seconds / 60;
sprintf(msg, "%d minutes", minutes);
log(msg);
// GD.screenshot(0);
} else {
for (;;) {
GD.wr16(BG_COLOR, RGB(255,0,0));
delay(100);
GD.wr16(BG_COLOR, RGB(0,0,0));
delay(100);
}
}
byte i;
for (i = 9; i; i--) {
sprintf(msg, "Restarting in %d", i);
GD.putstr(0, y, msg);
delay(1000);
}
}
void setup()
{
Serial.begin(1000000);
runtests();
}
void loop()
{
runtests();
}

View File

@ -1,37 +0,0 @@
static PROGMEM prog_uchar selftest1_code[] = {
0x94,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x61,
0x00,0x6E,
0x81,0x61,
0x81,0x55,
0x23,0x60,
0x03,0x61,
0x23,0x60,
0x0F,0x71,
0x80,0x61,
0x81,0x55,
0x80,0x61,
0x81,0x61,
0x00,0x80,
0x03,0x67,
0x93,0x35,
0x81,0x55,
0x0C,0x70,
0x00,0x80,
0x00,0x80,
0x81,0x61,
0x90,0xA8,
0x83,0x55,
0x81,0x60,
0x92,0xA8,
0x83,0x55,
0x8B,0x55,
0x9F,0xA8,
0x00,0x60,
0x00,0x6C,
0x9D,0x35,
0x96,0x15,
0x0C,0x70,
};

View File

@ -1,21 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "assetlib.h"
#include "loadcommon.h"
void setup()
{
common_setup(0);
GD.putstr(0, 0, "Asset loader 0");
page = ASSET0_PAGE;
GD_uncompress(GET_FAR_ADDRESS(assetlib0));
if (flash_sum(ASSET0_PAGE, ASSET0_LEN) != ASSET0_SUM)
GD.putstr(0, 10, "load failed");
else
GD.putstr(0, 10, "Done");
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

View File

@ -1,21 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "assetlib.h"
#include "loadcommon.h"
void setup()
{
common_setup(1);
GD.putstr(0, 0, "Asset loader 1");
page = ASSET1_PAGE;
GD_uncompress(GET_FAR_ADDRESS(assetlib1));
if (flash_sum(ASSET1_PAGE, ASSET1_LEN) != ASSET1_SUM)
GD.putstr(0, 10, "load failed");
else
GD.putstr(0, 10, "Done");
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

View File

@ -1,21 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "assetlib.h"
#include "loadcommon.h"
void setup()
{
common_setup(2);
GD.putstr(0, 0, "Asset loader 2");
page = ASSET2_PAGE;
GD_uncompress(GET_FAR_ADDRESS(assetlib2));
if (flash_sum(ASSET2_PAGE, ASSET2_LEN) != ASSET2_SUM)
GD.putstr(0, 10, "load failed");
else
GD.putstr(0, 10, "Done");
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(0);
page = STAGEBASE;
GD_uncompress(part0);
common_show_status();
GD.putstr(0, 20, "Done. Now run load1");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(1);
page = STAGEBASE + P1OFF;
GD_uncompress(part1);
common_show_status();
GD.putstr(0, 20, "Done. Now run load2");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(2);
page = STAGEBASE + P2OFF;
GD_uncompress(part2);
common_show_status();
GD.putstr(0, 20, "Done. Now run load3");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(3);
page = STAGEBASE + P3OFF;
GD_uncompress(part3);
common_show_status();
GD.putstr(0, 20, "Done. Now run load4");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -1,68 +0,0 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
#include "reload.h"
void reload()
{
GD.microcode(reload_code, sizeof(reload_code));
}
static unsigned long copy_page(int dst, int src)
{
int i;
SEL_local();
SPI.transfer(0x03);
spipage(src);
for (i = 0; i < 264; i++)
history[i] = spix(0);
UNSEL_local();
SEL_local();
SPI.transfer(0x82);
spipage(dst);
for (i = 0; i < 264; i++)
spix(history[i]);
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
void setup()
{
common_setup(4);
if (!ready0123(STAGEBASE)) {
GD.putstr(0, 20, "You must run load0, load1, load2, load3 first");
for (;;)
;
}
common_show_status();
do {
page = P4OFF;
GD_uncompress(part4);
common_show_status();
} while (!ready(4));
do {
GD.putstr(0, 20, "Parts ready. Copying...");
GD.putstr(0, 22, "DO NOT INTERRUPT OR TURN OFF");
int i;
for (i = 0; i < P4OFF; i++)
copy_page(i, STAGEBASE + i);
} while (!ready0123(0));
GD.putstr(25, 20, "Done!");
GD.putstr(0, 27, "Now restarting...");
delay(2000);
reload();
}
void loop()
{
}

View File

@ -1,289 +0,0 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

View File

@ -1,64 +0,0 @@
static PROGMEM prog_uchar reload_code[] = {
0xB9,0x15,
0x02,0x80,
0x03,0x6D,
0x81,0x61,
0x01,0x80,
0x03,0x63,
0x03,0x62,
0x80,0x61,
0x01,0x80,
0x03,0x69,
0x8C,0x71,
0x00,0x80,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x0F,0x70,
0xF9,0xFF,
0x00,0x66,
0x23,0x60,
0x0F,0x71,
0x8B,0x55,
0x81,0x60,
0x95,0x55,
0x00,0x81,
0x03,0x64,
0x95,0x15,
0x81,0x60,
0x00,0x6E,
0x99,0x55,
0x99,0x15,
0x00,0x80,
0x00,0x66,
0x9F,0x55,
0x66,0xD5,
0x00,0x66,
0x9F,0x55,
0x61,0xB2,
0x9F,0x55,
0x00,0x80,
0x9F,0x55,
0x81,0xB2,
0x9F,0x55,
0x00,0x80,
0x9F,0x55,
0xA1,0xB0,
0x9F,0x55,
0x0E,0x80,
0x9F,0x55,
0x00,0xA0,
0x9F,0x55,
0x00,0xA0,
0x9F,0x15,
0x00,0x80,
0x95,0x55,
0xA3,0x55,
0xBC,0x15,
0x0C,0x70,
};

View File

@ -1,53 +0,0 @@
static PROGMEM prog_uchar font8x8[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00,
0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x7f, 0x36, 0x7f, 0x36, 0x36, 0x00,
0x0c, 0x3f, 0x68, 0x3e, 0x0b, 0x7e, 0x18, 0x00, 0x60, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x06, 0x00,
0x38, 0x6c, 0x6c, 0x38, 0x6d, 0x66, 0x3b, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00,
0x00, 0x18, 0x7e, 0x3c, 0x7e, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00,
0x3c, 0x66, 0x6e, 0x7e, 0x76, 0x66, 0x3c, 0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00,
0x3c, 0x66, 0x06, 0x0c, 0x18, 0x30, 0x7e, 0x00, 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00,
0x0c, 0x1c, 0x3c, 0x6c, 0x7e, 0x0c, 0x0c, 0x00, 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00,
0x1c, 0x30, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00,
0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x0c, 0x38, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30,
0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00,
0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x3c, 0x66, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00,
0x3c, 0x66, 0x6e, 0x6a, 0x6e, 0x60, 0x3c, 0x00, 0x3c, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00,
0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, 0x7e, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x7e, 0x00,
0x7e, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x00, 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00,
0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00,
0x3e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, 0x63, 0x77, 0x7f, 0x6b, 0x6b, 0x63, 0x63, 0x00,
0x66, 0x66, 0x76, 0x7e, 0x6e, 0x66, 0x66, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x6a, 0x6c, 0x36, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x00, 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x63, 0x63, 0x6b, 0x6b, 0x7f, 0x77, 0x63, 0x00,
0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x00,
0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e, 0x00,
0x18, 0x3c, 0x66, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0x1c, 0x36, 0x30, 0x7c, 0x30, 0x30, 0x7e, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x00,
0x06, 0x06, 0x3e, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
0x1c, 0x30, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x3c,
0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00,
0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x70, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x00,
0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x36, 0x7f, 0x6b, 0x6b, 0x63, 0x00,
0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x07,
0x00, 0x00, 0x6c, 0x76, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00,
0x30, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x63, 0x6b, 0x6b, 0x7f, 0x36, 0x00,
0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x3c,
0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, 0x0c, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0c, 0x00,
0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x30, 0x00,
0x31, 0x6b, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};

View File

@ -1,16 +0,0 @@
Gameduino library
=================
Installation
------------
To install this library, place this entire folder as a subfolder in your
Arduino libraries folder. Then restart your Arduino application.
To use this library in a sketch, go to the Sketch | Import Library menu and
select Gameduino.
This library also has many examples. After installation, you can find them under
File | Examples | Gameduino. 'selftest' is a good example to start with, since it
runs a series of hardware tests.

View File

@ -1,61 +0,0 @@
( Base words implemented in assembler JCB 13:10 08/24/10)
meta
: noop T alu ;
: + T+N d-1 alu ;
: xor T^N d-1 alu ;
: and T&N d-1 alu ;
: or T|N d-1 alu ;
: invert ~T alu ;
: = N==T d-1 alu ;
: < N<T d-1 alu ;
: u< Nu<T d-1 alu ;
: swap N T->N alu ;
: dup T T->N d+1 alu ;
: drop N d-1 alu ;
: over N T->N d+1 alu ;
: nip T d-1 alu ;
: >r N T->R r+1 d-1 alu ;
: r> rT T->N r-1 d+1 alu ;
: r@ rT T->N d+1 alu ;
: c@ T alu
[T] alu ;
: c! T N->[T] d-1 alu
N d-1 alu ;
: rshift N>>T d-1 alu ;
: * N*T d-1 alu ;
: swab swabT alu ;
: 1- T-1 alu ;
: exit return ;
\ Elided words
\ These words are supported by the hardware but are not
\ part of ANS Forth. They are named after the word-pair
\ that matches their effect The first word is one of
\ 2dup, dup or over. Using these elided words instead of
\ the pair saves one cycle and one instruction.
: 2dupand T&N T->N d+1 alu ;
: 2dup< N<T T->N d+1 alu ;
: 2dup= N==T T->N d+1 alu ;
: 2dup* N*T T->N d+1 alu ;
: 2dupor T|N T->N d+1 alu ;
: 2duprshift N>>T T->N d+1 alu ;
: 2dup+ T+N T->N d+1 alu ;
: 2dupu< Nu<T T->N d+1 alu ;
: 2dupxor T^N T->N d+1 alu ;
: dup>r T T->R r+1 alu ;
: dupc@ T T->N d+1 alu
[T] alu ;
: dupswab swabT T->N d+1 alu ;
: overand T&N alu ;
: over> N<T alu ;
: over= N==T alu ;
: over* N*T alu ;
: overor T|N alu ;
: over+ T+N alu ;
: overu> Nu<T alu ;
: overxor T^N alu ;
: module[ there [char] " parse preserve ;
: ]module s" Compiled " type count type space there swap - . cr ;

View File

@ -1,32 +0,0 @@
start-microcode bgstripes
\ renders a 64-line horizontal stripe in the BG_COLOR
\ starting at line COMM+0
\ Interface:
\ COMM+0 stripe start
\ 3E80-3EFF 64 color stripe
: 1+ d# 1 + ;
: - invert 1+ + ;
: 0= d# 0 = ;
: @ dup c@ swap 1+ c@ swab or ;
: ! over swab over 1+ c! c! ;
: 2dup over over ;
: min 2dup < ;fallthru
: ?: ( xt xf flag -- xt | xf) \ if flag xt, else xf
if drop else nip then ;
: max 2dup swap < ?: ;
: main
begin
YLINE c@ \ line COMM+0 is line zero
COMM+0 c@ -
d# 0 max d# 63 min \ clamp to 0-63
d# 2 * h# 3E80 + \ index into color table
@ BG_COLOR ! \ fetch and write
again
;
end-microcode

View File

@ -1,91 +0,0 @@
start-microcode cold
\ system cold start program
\ Interface:
\ 3400-34FF voices source
\ 3800-3FFF palette animation source (64 palettes)
h# 3400 constant VOICES_COPY
h# 3800 constant PALETTES
d# 32 constant PALSZ \ size of palette in bytes
: vblank@
VBLANK ;fallthru
: _c@ c@ ; \ these save 1 instruction per use
: _c! c! ;
: 1+ d# 1 + ;
: @ dup _c@ swap 1+ _c@ swab or ;
: up1 ( a -- ) \ subtract 1 from sprite coordinate at a
dup>r @ dup h# fe00 and swap 1- h# 1FF and or r> ;fallthru
: ! ( u addr )
over swab over 1+ _c! _c! ;
: waitvbi \ wait for start of vertical blanking interval
begin vblank@ 1- until
begin vblank@ until ;
: stepfade ( u -- ) \ fade step u is 0-63
PALSZ * PALETTES +
dup d# 30 + @ BG_COLOR ! \ copy 15th palette entry to BG_COLOR
PALETTE16A
PALSZ
;fallthru
: cmove ( src dst n -- )
begin
dup
while
>r
over _c@ over _c!
1+ swap 1+ swap
r> 1-
repeat
drop ;fallthru
: 2drop drop drop ;
: endl ( limit u -- limit u' finished ) \ end of loop
waitvbi ;fallthru
: qendl \ quick endl, no wait for frame
1+
2dup=
;
: >VOICES ( a -- ) \ load all voices from a
VOICES d# 256 cmove ;
[ RAM_SPR 2 + ] constant SPR_YS \ sprite Y coordinates
: main
d# 256 d# 0
begin
dup h# c0 and d# 128 = if
dup d# 63 and stepfade
then
\ copy 3E00+u to VOICES+u
dup VOICES_COPY + _c@
over VOICES + _c!
endl until
begin
COMM+9 _c@
until
h# 3500 >VOICES
d# 265 d# 0
begin
d# 256 d# 0
begin
dup d# 4 * SPR_YS + up1
qendl until
2drop
dup SCROLL_Y !
endl until
h# 3600 >VOICES
d# 0
begin
waitvbi
dup SCROLL_X !
1+
again
;
end-microcode

View File

@ -1,535 +0,0 @@
( Cross-compiler for the J1 JCB 13:12 08/24/10)
decimal
( outfile is fileid or zero JCB 12:30 11/27/10)
0 value outfile
: type ( c-addr u )
outfile if
outfile write-file throw
else
type
then
;
: emit ( u )
outfile if
pad c! pad 1 outfile write-file throw
else
emit
then
;
: cr ( u )
outfile if
s" " outfile write-line throw
else
cr
then
;
: space bl emit ;
: spaces dup 0> if 0 do space loop then ;
vocabulary j1assembler \ assembly storage and instructions
vocabulary metacompiler \ the cross-compiling words
vocabulary j1target \ actual target words
: j1asm
only
metacompiler
also j1assembler definitions
also forth ;
: meta
only
j1target also
j1assembler also
metacompiler definitions also
forth ;
: target
only
metacompiler also
j1target definitions ;
\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
j1asm
: tcell 2 ;
: tcells tcell * ;
: tcell+ tcell + ;
65536 allocate throw constant tflash
: h#
base @ >r 16 base !
0. bl parse >number throw 2drop postpone literal
r> base ! ; immediate
variable tdp
: there tdp @ ;
: islegal dup h# 7fff u> abort" illegal address" ;
: tc! islegal tflash + c! ;
: tc@ islegal tflash + c@ ;
: t! islegal over h# ff and over tc! swap 8 rshift swap 1+ tc! ;
: t@ islegal dup tc@ swap 1+ tc@ 8 lshift or ;
: talign tdp @ 1 + h# fffe and tdp ! ;
: tc, there tc! 1 tdp +! ;
: t, there t! tcell tdp +! ;
: org tdp ! ;
65536 cells allocate throw constant references
: referenced cells references + 1 swap +! ;
65536 cells allocate throw constant labels
: atlabel? ( -- f = are we at a label )
labels there cells + @ 0<>
;
: coldcross
tflash 65536 255 fill
labels 65536 cells 0 fill
;
coldcross
: preserve ( c-addr1 u -- c-addr )
dup 1+ allocate throw dup >r
2dup c! 1+
swap cmove r> ;
: setlabel ( c-addr u -- )
atlabel? if 2drop else preserve labels there cells + ! then ;
j1asm
: hex-literal ( u -- c-addr u ) s>d <# bl hold #s [char] $ hold #> ;
: imm h# 8000 or t, ;
: T h# 0000 ;
: N h# 0100 ;
: T+N h# 0200 ;
: T&N h# 0300 ;
: T|N h# 0400 ;
: T^N h# 0500 ;
: ~T h# 0600 ;
: N==T h# 0700 ;
: N<T h# 0800 ;
: N>>T h# 0900 ;
: T-1 h# 0a00 ;
: rT h# 0b00 ;
: [T] h# 0c00 ;
: N*T h# 0d00 ;
: swabT h# 0e00 ;
: Nu<T h# 0f00 ;
: T->N h# 0080 or ;
: T->R h# 0040 or ;
: N->[T] h# 0020 or ;
: d-1 h# 0003 or ;
: d+1 h# 0001 or ;
: r-1 h# 000c or ;
: r-2 h# 0008 or ;
: r+1 h# 0004 or ;
: alu h# 6000 or t, ;
: return T h# 1000 or r-1 alu ;
: ubranch 2/ h# 0000 or t, ;
: 0branch 2/ h# 2000 or t, ;
: scall 2/ h# 4000 or t, ;
: dump-words ( c-addr n -- ) \ Write n/2 words from c-addr
dup 6 > abort" invalid byte count"
2/ dup >r
0 do
dup t@ s>d <# # # # # #> type space
2 +
loop drop
3 r> - 5 * spaces
;
variable padc
: pad+ ( c-addr u -- ) \ append to pad
dup >r
pad padc @ + swap cmove
r> padc +! ;
: pad+loc ( addr -- )
dup cells labels + @ ?dup if
nip count pad+
else
s>d <# #s [char] $ hold #> pad+
then
s" " pad+
;
: disassemble-j
0 padc !
dup t@ h# 8000 and if
s" LIT " pad+
dup t@ h# 7fff and hex-literal pad+ exit
else
dup t@ h# e000 and h# 6000 = if
s" ALU " pad+
dup t@ pad+loc exit
else
dup t@ h# e000 and h# 4000 = if
s" CALL "
else
dup t@ h# 2000 and if
s" 0BRANCH "
else
s" BRANCH "
then
then
pad+
dup t@ h# 1fff and 2* pad+loc
then
then
;
: disassemble-line ( offset -- offset' )
dup cells labels + @ ?dup if s" \ " type count type cr then
dup s>d <# # # # # #> type space
dup 2 dump-words
disassemble-j
pad padc @ type
2 +
cr
;
: disassemble-block
0 do
disassemble-line
loop
drop
;
j1asm
\ tcompile is like "STATE": it is true when compiling
variable tcompile
: tcompile? tcompile @ ;
: +tcompile tcompile? abort" Already in compilation mode" 1 tcompile ! ;
: -tcompile 0 tcompile ! ;
: (literal)
\ dup $f rshift over $e rshift xor 1 and throw
dup h# 8000 and if
h# ffff xor recurse
~T alu
else
h# 8000 or t,
then
;
: (t-constant)
tcompile? if
(literal)
then
;
meta
\ Find name - without consuming it - and return a counted string
: wordstr ( "name" -- c-addr u )
>in @ >r bl word count r> >in !
;
: literal (literal) ; immediate
: 2literal swap (literal) (literal) ; immediate
: call,
dup referenced
scall
;
: t:
talign
wordstr setlabel
create
there ,
+tcompile
947947
does>
@
tcompile? if
call,
then
;
: lookback ( offset -- v ) there swap - t@ ;
: prevcall? 2 lookback h# e000 and h# 4000 = ;
: call>goto dup t@ h# 1fff and swap t! ;
: prevsafe?
2 lookback h# e000 and h# 6000 = \ is an ALU
2 lookback h# 004c and 0= and ; \ does not touch RStack
: alu>return dup t@ h# 1000 or r-1 swap t! ;
: t; 947947 <> if abort" Unstructured" then
true if
atlabel? invert prevcall? and if
there 2 - call>goto
else
atlabel? invert prevsafe? and if
there 2 - alu>return
else
return
then
then
else
return
then
-tcompile
;
: t;fallthru 947947 <> if abort" Unstructured" then
-tcompile
;
variable shadow-tcompile
wordlist constant escape]-wordlist
escape]-wordlist set-current
: ] shadow-tcompile @ tcompile ! previous previous ;
meta
: [
tcompile @ shadow-tcompile !
-tcompile get-order forth-wordlist escape]-wordlist rot 2 + set-order
;
: : t: ;
: ; t; ;
: ;fallthru t;fallthru ;
: , t, ;
: c, tc, ;
: constant ( n "name" -- ) create , immediate does> @ (t-constant) ;
: ]asm
-tcompile also forth also j1target also j1assembler ;
: asm[ +tcompile previous previous previous ;
: code t: ]asm ;
j1asm
: end-code
947947 <> if abort" Unstructured" then
previous previous previous ;
meta
\ Some Forth words are safe to use in target mode, so import them
: ( postpone ( ;
: \ postpone \ ;
: import ( "name" -- )
>in @ ' swap >in !
create , does> @ execute ;
import meta
import org
import include
import included
import marker
import [if]
import [else]
import [then]
: do-number ( n -- |n )
state @ if
postpone literal
else
tcompile? if
(literal)
then
then
;
decimal
: [char] ( "name" -- ) ( run: -- ascii) char (literal) ;
: ['] ( "name" -- ) ( run: -- xt )
' tcompile @ >r -tcompile execute r> tcompile !
dup referenced
(literal)
;
: (sliteral--h) ( addr n -- ptr ) ( run: -- eeaddr n )
s" sliteral" evaluate
there >r
dup tc,
0 do count tc, loop
drop
talign
r>
;
: (sliteral) (sliteral--h) drop ;
: s" ( "ccc<quote>" -- ) ( run: -- eaddr n ) [char] " parse (sliteral) ;
: s' ( "ccc<quote>" -- ) ( run: -- eaddr n ) [char] ' parse (sliteral) ;
: create
wordstr setlabel
create there ,
does> @ do-number
;
: allot tdp +! ;
: variable wordstr setlabel create there , 0 t,
does> @ do-number ;
: 2variable wordstr setlabel create there , 0 t, 0 t,
does> @ do-number ;
: createdoes
wordstr setlabel
create there , ' ,
does> dup @ dup referenced (literal) cell+ @ execute
;
: jumptable
wordstr setlabel
create there ,
does> s" 2*" evaluate @ dup referenced (literal) s" + @" evaluate
;
: | ' execute dup referenced t, ;
: ', ' execute t, ;
( DEFER JCB 11:18 11/12/10)
: defer
wordstr setlabel
create there , 0 t,
does> @ tcompile? if do-number s" @ execute" evaluate then ;
: is ( xt "name" -- )
tcompile? if
' >body @ do-number
s" ! " evaluate
else
' execute t!
then ;
: ' ' execute ;
( VALUE JCB 13:06 11/12/10)
: value
wordstr setlabel
create there , t,
does> @ do-number s" @" evaluate ;
: to ( u "name" -- )
' >body @ do-number s" !" evaluate ;
( ARRAY JCB 13:34 11/12/10)
: array
wordstr setlabel
create there , 0 do 0 t, loop
does> s" cells" evaluate @ do-number s" +" evaluate ;
: 2array
wordstr setlabel
create there , 2* 0 do 0 t, loop
does> s" 2* cells" evaluate @ do-number s" +" evaluate ;
( eforth's way of handling constants JCB 13:12 09/03/10)
: label: ( "name" -- ) create there , immediate does> @ (t-constant) ;
: sign>number
over c@ [char] - = if
1- swap 1+ swap
>number
2swap dnegate 2swap
else
>number
then
;
: base>number ( caddr u base -- )
base @ >r base !
sign>number
r> base !
dup 0= if
2drop drop do-number
else
1 = swap c@ [char] . = and if
drop dup do-number 16 rshift do-number
else
-1 abort" bad number"
then
then ;
: d# 0. bl parse 10 base>number ;
: h# 0. bl parse 16 base>number ;
( Conditionals JCB 13:12 09/03/10)
: if
there
0 0branch
;
: resolve
dup t@ there 2/ or swap t!
;
: then
resolve
s" (then)" setlabel
;
: else
there
0 ubranch
swap resolve
s" (else)" setlabel
;
: begin s" (begin)" setlabel there ;
: again
ubranch
;
: until
0branch
;
: while
there
0 0branch
;
: repeat
swap ubranch
resolve
s" (repeat)" setlabel
;
: 0do s" >r d# 0 >r" evaluate there s" (do)" setlabel ;
: do s" 2>r" evaluate there s" (do)" setlabel ;
: loop
s" looptest" evaluate 0branch
;
: i s" r@" evaluate ;
77 constant sourceline#
s" none" 2constant sourcefilename
: line# sourceline# (literal) ;
create currfilename 1 cells 80 + allot
variable currfilename#
: savestr ( c-addr u dst -- ) 2dup c! 1+ swap cmove ;
: getfilename sourcefilename currfilename count compare 0<>
if
sourcefilename 2dup currfilename savestr (sliteral--h) currfilename# !
else
currfilename# @ dup 1+ (literal) tc@ (literal)
then ;
: snap line# getfilename s" (snap)" evaluate ; immediate
: assert 0= if line# sourcefilename (sliteral) s" (assert)" evaluate then ; immediate

View File

@ -1,25 +0,0 @@
start-microcode dna
: 1+ d# 1 + ;
: 2* d# 2 * ;
: dna@ ( -- u ) h# 8018 c@ ;
: dna! ( u -- ) h# 8008 c! ;
: dnaclk ( u -- ) dup dna! 1+ dna! ;
: dnaread ( ) d# 4 dnaclk ;
: dnashift ( ) d# 2 dnaclk ;
: dnabit ( u -- u ) 2* dna@ + dnashift ;
: dnabyte ( -- u ) \ read byte from DNA
d# 0
dnabit dnabit dnabit dnabit
dnabit dnabit dnabit dnabit ;
: main \ write 7 byte DNA to COMM
dnaread dnashift
COMM+7 COMM+0
begin
dnabyte over c!
1+ 2dup=
until
begin again ;
end-microcode

View File

@ -1,729 +0,0 @@
meta
0 value _next
variable _lit
variable _invert
variable _equal
variable _plus
variable _mul
variable _rshift
variable _and
variable _or
variable _xor
variable _<
variable _u<
variable _dup
variable _drop
variable _swap
variable _over
variable _c!
variable _!
variable _c@
variable _@
variable _>r
variable _r>
variable _r@
variable _branch
variable _0branch
variable _doconst
variable _dovar
variable _docol
variable _semis
target
start-microcode eforth
\ Interface:
\ COMM+0 instruction pointer
COMM+0 constant IP
: 1+ d# 1 + ;
: @ dup c@ swap 1+ c@ swab or ;
: IP!
IP ;fallthru
: ! over swab over 1+ c! c! ;
: IP@
\ COMM+0 c@ COMM+1 c@ swab or ;
IP @ ;
: fetch \ fetch cell from IP, then increment IP
IP@ dup d# 2 + IP! @ ;
meta there _lit ! target
t: _lit
drop
fetch
;fallthru
meta there to _next target
: _next
fetch \ fetch xt
dup 1+ swap \ stack the args pointer
c@ >r ; \ jump to the code addr
meta
: def there wordstr evaluate ! t: ;
: term _next ubranch t;fallthru ;
target
def _doconst
@ ;fallthru
def _dovar
term
def _invert drop invert term
def _equal drop = term
def _plus drop + term
def _mul drop * term
def _rshift drop rshift term
def _and drop and term
def _or drop or term
def _xor drop xor term
def _< drop < term
def _u< drop u< term
def _dup drop dup term
def _drop drop drop term
def _swap drop swap term
def _over drop over term
def _c! drop c! term
def _! drop ! term
def _c@ drop c@ term
def _@ drop @ term
def _>r drop >r term
def _r> drop r> term
def _r@ drop r@ term
def _branch drop fetch IP! term
def _0branch drop fetch swap if drop else IP! then term
\ start a colon definition: push IP and use args as new IP
def _docol
IP@ >r ;fallthru
: IP!term
IP! term
\ end a colon definition: pop IP
def _semis
drop r> IP!term ;
[ _next ] constant main
end-microcode
meta 0 to outfile
only forth
also metacompiler
also forth definitions also
cr cr cr
4000 value dst
create dstmem 8000 allot
s" dump.eforth" w/o create-file throw value dump.eforth
: dstc@
dstmem + c@ ;
: dstc!
dstmem + c! ;
: dst!
over 8 rshift over 1+ dstc! dstc! ;
: c>>
dst dstc!
dst 1+ to dst ;
: >>
dst dst!
dst 2 + to dst ;
: s>> ( addr u -- )
0 do dup c@ c>> 1+ loop drop ;
0 value 'link
\ These definitions go into the gdforth wordlist
vocabulary gdforth
: gdf-define
only
gdforth definitions
also metacompiler
also forth
;
: gdf-use
only
gdforth definitions
;
gdf-define
0 value >link
: dumpmem
\ bring vocab pointer up to date
dst 2 - >link .s dst!
dstmem 4000 + dst 4000 - dump.eforth write-file throw
;
: meta meta ;
\ name
\ length
\ prev
\ cfa <--- xt
\ args
: label
wordstr tuck s>> c>>
'link >> dst to 'link
create dst ,
does> @ >> ;
label gdbranch _branch @ c>>
label gd0branch _0branch @ c>>
: begin dst ;
: again gdbranch >> ;
: until gd0branch >> ;
: if gd0branch dst 7777 >> ;
: else gdbranch dst >r 8888 >> dst swap dst! r> ;
: then dst swap dst! ;
: while gd0branch dst 7777 >> ;
: repeat swap gdbranch >> dst swap dst! ;
label (lit) _lit @ c>>
label invert _invert @ c>>
label = _equal @ c>>
label + _plus @ c>>
label * _mul @ c>>
label rshift _rshift @ c>>
label and _and @ c>>
label or _or @ c>>
label xor _xor @ c>>
label < _< @ c>>
label u< _u< @ c>>
label c! _c! @ c>>
label ! _! @ c>>
label c@ _c@ @ c>>
label @ _@ @ c>>
label >r _>r @ c>>
label r> _r> @ c>>
label r@ _r@ @ c>>
label dup _dup @ c>>
label drop _drop @ c>>
label swap _swap @ c>>
label over _over @ c>>
label semis _semis @ c>>
: create label ;
: constant label _doconst @ c>> >> ;
: variable label _dovar @ c>> 0 >> ;
: ivariable label _dovar @ c>> >> ; \ initialized variable
: the-link label _dovar @ c>> dst .s to >link 'link >> ; \ variable init to 'link
: allot dst +! ;
: bc-var (lit) _dovar @ >> ;
: bc-col (lit) _docol @ >> ;
: bc-const (lit) _doconst @ >> ;
: bc-var# _dovar @ 0ff and ;
: bc-col# _docol @ 0ff and ;
: bc-const# _doconst @ 0ff and ;
: semis# ['] semis >body @ ;
: literal# ['] (lit) >body @ ;
: branch# ['] gdbranch >body @ ;
: 0branch# ['] gd0branch >body @ ;
: '(lit) (lit) (lit) ;
: \ ['] \ execute ;
: ( ['] ( execute ;
: : label _docol @ c>> ;
: ; semis ;
: x; semis ; \ alternative name for when ; gets overloaded
: immediate
'link 3 - dup dstc@ 80 or swap dstc! ;
: h# (lit) h# >> ;
: d# (lit) d# >> ;
: [char] (lit) char >> ;
: fwd4 (lit) dst 4 + >> ;
gdf-use
\ constants used for making code
semis# constant semis# \ address of the semis word
literal# constant literal# \ address of the literal word
branch# constant branch# \ address of the branch word
0branch# constant 0branch# \ address of the 0branch word
bc-var# constant bc-var# \ the code byte for _dovar
bc-col# constant bc-col# \ the code byte for _docol
bc-const# constant bc-const# \ code byte for _doconst
: 1+ d# 1 + ;
: 1- d# -1 + ;
: <> = invert ;
: 2dup over over ;
: 0< d# 0 < ;
: tuck swap over ;
20 constant BL
0 constant FALSE
-1 constant TRUE
10 ivariable BASE
: HEX ( -- )( 6.2.1660 ) D# 16 BASE ! ;
: DECIMAL ( -- )( 6.1.1170 ) D# 10 BASE ! ;
: NIP ( n1 n2 -- n2 )( 6.2.1930 ( 0x4D ) SWAP DROP ;
: ROT ( n1 n2 n3 -- n2 n3 n1 )( 6.1.2160 ( 0x4A ) >R SWAP R> SWAP ;
: 2DROP ( n n -- )( 6.1.0370 ( 0x52 ) DROP DROP ;
: 2DUP ( n1 n2 -- n1 n2 n1 n2 )( 6.1.0380 ( 0x53 ) OVER OVER ;
: ?DUP ( n -- n n | 0 )( 6.1.0630 ( 0x50 ) DUP IF DUP THEN ;
: INVERT ( n -- n )( 6.1.1720 ( 0x26 ) D# -1 XOR ;
: NEGATE ( n -- n )( 6.1.1910 ( 0x2C ) INVERT D# 1 + ;
: - ( n n -- n )( 6.1.0160 ( 0x1F ) NEGATE + ;
: ABS ( n -- u )( 6.1.0690 ( 0x2D ) DUP 0< IF NEGATE THEN ;
: 0= ( n -- f )( 6.1.0270 ( 0x34 ) D# 0 = ;
: MIN ( n n -- n )( 6.1.1880 ( 0x2E ) 2DUP < IF BEGIN DROP ;
: MAX ( n n -- n )( 6.1.1870 ( 0x2F ) 2DUP < UNTIL THEN NIP ;
: WITHIN ( u ul uh -- f )( 6.2.2440 ( 0x45 ) OVER - >R - R> U< ;
: 0<> ( n -- f ) d# 0 = invert ;
: UPPER ( c -- C ) \ convert to uppercase ( upc ( 0x81 ) \ bbb
\ DUP [CHAR] a h# 7B WITHIN IF BL XOR THEN ;
h# 60 over < if h# 5f and then ;
\ -----------------------------------------------------------
2000 constant RAM_PAL
0 constant tib
variable >in \ offset into TIB
variable tibsz \ how much space remains
2892 constant dp
2895 constant BLKRDY
2896 constant COUT
2897 constant COUTRDY
2898 constant CIN
: ser-emit
COUT c!
d# 1 COUTRDY c!
begin
COUTRDY c@ 0=
until
;
400 ivariable cursor
: vid-emit
dup d# 10 = if
drop cursor @ h# ffc0 and cursor !
else
dup d# 13 = if
drop cursor @ h# 40 + cursor !
else
cursor @ tuck c! 1+ cursor !
then
then
;
: page
d# 4096 d# 0 begin
d# 0 over c!
1+ 2dup =
until 2drop
h# 400 cursor !
;
: emit vid-emit ;
: space bl emit ;
: cr d# 13 emit d# 10 emit ;
: hex1 d# 15 and dup d# 10 < if d# 48 else d# 55 then + emit ;
: hex2
dup
d# 4 rshift
hex1 hex1
;
: hex4
dup
d# 8 rshift
hex2 hex2 ;
: hex8 hex4 hex4 ;
: . hex4 space ;
: snap
[char] S emit
[char] N emit
[char] A emit
[char] P emit
cr
hex4 cr
hex4 cr
hex4 cr
hex4 cr
hex4 cr
hex4 cr
hex4 cr
hex4 cr
begin again
;
: CHAR+ 1+ ;
: CHARS ;
: PAUSE ;
: +! ( n a -- )( 6.1.0130 ( 0x6C ) DUP >R @ + R> ! ;
: COUNT ( a -- a c )( 6.1.0980 ( 0x84 ) DUP CHAR+ SWAP C@ ;
: BOUNDS ( a u -- a+u a )( 0xAC ) OVER + SWAP ;
: /STRING ( ca u n -- ca+n u-n )( 17.6.1.0245 ) SWAP OVER - >R CHARS + R> ;
: TYPE ( ca u -- )( 6.1.2310 ( 0x90 )
PAUSE CHARS BOUNDS BEGIN 2DUP XOR WHILE COUNT EMIT REPEAT 2DROP ;
: SAME? ( ca ca u -- f )
begin
dup
while
>r
over c@ upper over c@ upper <> if
r> drop 2drop false ;
then
1+ swap 1+ swap
r> 1-
repeat
drop 2drop true ;
: isimmediate ( xt -- f )
d# -3 + c@ h# 80 and 0<> ;
: name? ( xt -- ca u )
d# -3 + dup c@ h# 7f and tuck - swap ;
: sayword ( xt -- )
name? type ;
: inch
>in @ tib + ;
: inch+1
d# 1 >in +! ;
: execute
fwd4 !
+ ;
: advance
d# 1 /string d# 1 >in +! ;
: skipbl ( ca u -- ca u ) \ skip blank chars
begin
over c@ bl = over 0<> and
while
advance
repeat
;
: skipnbl ( ca u -- ca u ) \ skip nonblank chars
begin
over c@ bl <> over 0<> and
while
advance
repeat
;
variable source/a
variable source/l
: source ( -- ca u )( 6.1.2216 )
source/a @ source/l @ ;
: source>in
source >in @ /string ;
: parse-word ( -- ca u )
source>in
skipbl
over >r
skipnbl
drop
r> tuck -
;
\ name
\ length
\ prev
\ cfa <--- xt
\ args
: here dp @ ;
: c, here c! d# 1 dp +! ;
: , here ! d# 2 dp +! ;
: s, begin dup while over c@ c, d# 1 /string repeat 2drop ;
the-link voc
0 ivariable state
: head, ( "name" -- )
parse-word
tuck s, c,
voc @ , here voc !
;
: digit ( c -- u )
upper [CHAR] 0 - D# 9 OVER <
IF D# 7 - DUP D# 10 < OR THEN ;
: 1/string d# 1 /string ;
: isnumber ( ca u -- f )
\ over c@ [char] - = if 1/string then
true >r
begin
dup
while
over c@ digit base @ u< r> and >r
1/string
repeat
2drop r>
;
: asnumber ( ca u -- false | n true )
d# 0 >r
begin
dup
while
over c@ digit
r> base @ * + >r
1/string
repeat
2drop r> true
;
: words
voc @
begin
dup
while
dup sayword space
d# -2 + @
repeat
cr
;
: sfind ( ca u -- xt | ca u 0 )
>r
voc @
begin
dup
while
2dup name? ( ca xt ca ca u )
dup r@ = if
SAME? if r> drop nip ; then
else
2drop drop
then
d# -2 + @
repeat
drop r> false
;
variable (quit)
: interpret
begin
parse-word
dup
while
sfind ?dup if
dup isimmediate state @ 0= or if
execute
else
,
then
else
2dup isnumber if
state @ if
'(lit) ,
asnumber drop
,
else
asnumber drop
then
else
[char] ? emit type (quit) @ execute
then
then
repeat
2drop
;
( Gameduino system constants JCB 16:45 04/15/11)
0000 constant RAM_PIC 1000 constant RAM_CHR
2000 constant RAM_PAL 2800 constant IDENT
2801 constant REV 2802 constant FRAME
2803 constant VBLANK 2804 constant SCROLL_X
2806 constant SCROLL_Y 2808 constant JK_MODE
280a constant SPR_DISABLE 280b constant SPR_PAGE
280c constant IOMODE 280e constant BG_COLOR
2810 constant SAMPLE_L 2812 constant SAMPLE_R
2a00 constant VOICES 2840 constant PALETTE16A
2860 constant PALETTE16B 2880 constant PALETTE4A
2888 constant PALETTE4B 2890 constant COMM
2900 constant COLLISION 2c00 constant J1_CODE
3000 constant RAM_SPR 3800 constant RAM_SPRPAL
4000 constant RAM_SPRIMG
\ screen \ 11
8016 constant FLASH_MISO
8018 constant FLASH_MOSI
801a constant FLASH_SCK
801c constant FLASH_SSEL
( SPI JCB 16:42 04/15/11)
: off d# 0 swap c! ; : on d# 1 swap c! ;
: spi-sel FLASH_SSEL off ;
: spi-unsel FLASH_SSEL on ;
: spi-cold spi-unsel FLASH_SCK off ;
: spi-1bit ( u -- u ) \ single bit via SPI
d# 2 *
dup d# 8 rshift FLASH_MOSI c! \ write MSB to MOSI
FLASH_SCK on \ raise clock
FLASH_MISO c@ or \ read MISO into LSB
FLASH_SCK off ; \ drop clock
: spi-xfer ( u -- u )
spi-1bit spi-1bit spi-1bit spi-1bit
spi-1bit spi-1bit spi-1bit spi-1bit ;
: >spi spi-xfer drop ;
( Atmel flash JCB 07:32 04/16/11)
\ http://www.atmel.com/dyn/resources/prod_documents/doc3638.pdf
: flash-status spi-sel h# D7 spi-xfer spi-xfer spi-unsel ;
: flash-ready? begin flash-status h# 80 and until ;
: flash-page ( u -- ) \ 512*(572+u)
d# 572 +
dup d# 7 rshift >spi
d# 2 * >spi
d# 0 >spi ;
: page>flash ( a u -- a' u' )
spi-sel
h# 82 >spi tuck flash-page
d# 264 bounds begin
dup c@ >spi
1+ 2dup =
until drop swap 1+ spi-unsel
flash-ready? ;
: blk>flash ( a u -- )
d# 4 * page>flash page>flash page>flash page>flash 2drop ;
: flash>page ( u -- )
spi-sel
h# 03 >spi
flash-page
h# 0 h# 400 bounds begin
d# 0 spi-xfer over c!
1+ 2dup =
until 2drop spi-unsel ;
: interpret0
d# 0
begin
>r d# 0 >in !
r@ source/a ! d# 64 source/l ! interpret
r> h# 40 +
dup h# 400 =
until drop
;
: load
d# 4 * flash>page
\ d# 1024 d# 0 begin dup c@ emit 1+ 2dup = until
interpret0
;
variable blk
: key
begin CIN c@ ?dup until
d# 0 CIN c! ;
: . hex4 ;
: quit
begin
cr
begin
d# 127 emit d# -1 cursor +!
key dup d# 13 xor
while
emit
repeat
drop
cursor @ h# ffc0 and
cursor @ h# 003f and
space
d# 0 >in !
source/l ! source/a ! interpret
space
[char] o emit
[char] k emit
again
;
: (
source>in
begin
over c@ [char] ) <>
while
advance
repeat advance 2drop ;
: nucok
[char] N emit
[char] U emit
[char] C emit
space
[char] O emit
[char] K emit
cr ;
\ : sec
\ spi-sel 77 spi-xfer spi-xfer spi-xfer spi-xfer drop
\ 80 begin 0 spi-xfer hex2 space next cr ;
: f;
semis# ,
d# 0 state ! ; immediate
: :
head,
bc-col c,
d# 1 state !
;
label main
nucok
[char] J IOMODE c! spi-cold
d# 0 blk !
begin
begin BLKRDY c@ until
\ d# 0 blk @ blk>flash d# 1 blk +!
interpret0
d# 0 BLKRDY c!
again
label blkmain
nucok
[char] J IOMODE c! spi-cold
d# 0 begin
dup >r load r> 1+
again
label stump
main
dumpmem
meta

View File

@ -1,22 +0,0 @@
start-microcode eraser
COMM+8 constant mask
: main
mask c@ >r
h# 3FFF h# 7FFF \ RAM_SPRIMG, from top to bottom
begin
dupc@ r@ and
over c!
1- 2dup=
until
\ tell host we're done
d# 0 COMM+7 c!
\ hang
begin again
;
end-microcode

View File

@ -1,18 +0,0 @@
start-microcode flowtest
: main
begin
\ wait until COMM+0 is nonzero
begin
COMM+0 c@
until
\ increment COMM+1
COMM+1 c@ d# 1 + COMM+1 c!
\ write zero to COMM+0, telling host we're done
d# 0 COMM+0 c!
again
;
end-microcode

View File

@ -1,22 +0,0 @@
start-microcode helloworld
: 1+ d# 1 + ;
: writechar ( addr ch -- addr' )
over c! 1+ ;
: main
d# 512 \ lines are 64 characters, so this is line 8
[char] H writechar
[char] E writechar
[char] L writechar
[char] L writechar
[char] O writechar
1+
[char] W writechar
[char] O writechar
[char] R writechar
[char] L writechar
[char] D writechar
begin again
;
end-microcode

View File

@ -1,69 +0,0 @@
( Hardware register definitions JCB 11:36 01/23/11)
h# 0000 constant RAM_PIC \ Screen Picture, 64 x 64 = 4096 bytes
h# 1000 constant RAM_CHR \ Screen Characters, 256 x 16 = 4096 bytes
h# 2000 constant RAM_PAL \ Screen Character Palette, 256 x 8 = 2048 bytes
h# 2800 constant IDENT
h# 2801 constant REV
h# 2802 constant FRAME
h# 2803 constant VBLANK
h# 2804 constant SCROLL_X
h# 2805 constant SCROLL_Xhi
h# 2806 constant SCROLL_Y
h# 2807 constant SCROLL_Yhi
h# 2808 constant JK_MODE
h# 2809 constant J1_RESET
h# 280a constant SPR_DISABLE
h# 280b constant SPR_PAGE
h# 280c constant IOMODE
h# 280e constant BG_COLOR
h# 2810 constant SAMPLE_Llo
h# 2811 constant SAMPLE_Lhi
h# 2812 constant SAMPLE_Rlo
h# 2813 constant SAMPLE_Rhi
h# 2a00 constant VOICES
h# 2840 constant PALETTE16A \ 16-color palette RAM A, 32 bytes
h# 2860 constant PALETTE16B \ 16-color palette RAM B, 32 bytes
h# 2880 constant PALETTE4A \ 4-color palette RAM A, 8 bytes
h# 2888 constant PALETTE4B \ 4-color palette RAM A, 8 bytes
h# 2890 constant COMM \ Communication buffer
h# 2900 constant COLLISION \ Collision detection RAM, 256 bytes
h# 2b00 constant J1_CODE \ J1 coprocessor microcode RAM
h# 3000 constant RAM_SPR \ Sprite Control, 512 x 4 = 2048 bytes
h# 3800 constant RAM_SPRPAL \ Sprite Palettes, 4 x 256 = 2048 bytes
h# 4000 constant RAM_SPRIMG \ Sprite Image, 64 x 256 = 16384 bytes
[ COMM 0 + ] constant COMM+0
[ COMM 1 + ] constant COMM+1
[ COMM 2 + ] constant COMM+2
[ COMM 3 + ] constant COMM+3
[ COMM 4 + ] constant COMM+4
[ COMM 5 + ] constant COMM+5
[ COMM 6 + ] constant COMM+6
[ COMM 7 + ] constant COMM+7
[ COMM 8 + ] constant COMM+8
[ COMM 9 + ] constant COMM+9
[ COMM 10 + ] constant COMM+10
[ COMM 11 + ] constant COMM+11
[ COMM 12 + ] constant COMM+12
[ COMM 13 + ] constant COMM+13
[ COMM 14 + ] constant COMM+14
[ COMM 15 + ] constant COMM+15
( Locations for coprocessor only JCB 11:45 02/06/11)
h# 8000 constant YLINE
h# 8002 constant ICAP_O
h# 8004 constant ICAP_BUSY
h# 8006 constant ICAP_PORT \ see reload.fs for details
h# 800a constant FREQHZ
h# 800c constant FREQTICK
h# 800e constant P2_V
h# 8010 constant P2_DIR
h# 8012 constant RANDOM
h# 8014 constant CLOCK
h# 8016 constant FLASH_MISO
h# 8018 constant FLASH_MOSI
h# 801a constant FLASH_SCK
h# 801c constant FLASH_SSEL

View File

@ -1,86 +0,0 @@
include crossj1.fs
variable filebase
: suffix ( addr u -- addr u ) \ append suffix to basename
0 padc !
filebase @ count pad+
pad+
pad padc @
;
: create-output-file w/o create-file throw to outfile ;
: cbyte s" 0x" type s>d <# # # #> type [char] , emit ;
hex
variable hiaddr
: coderange hiaddr @ 2B00 ;
: dumpall \ dump the target memory in every useful format
hex
\ .lst file is a human-readable disassembly
s" .lst" suffix create-output-file
coderange tuck - 2/ disassemble-block
\ .binbe is a big-endian binary memory dump
s" .binbe" suffix create-output-file
coderange do i t@ dup 8 rshift emit emit 2 +loop
\ .binle is a little-endian binary memory dump
s" .binle" suffix create-output-file
coderange do i t@ dup emit 8 rshift emit 2 +loop
\ .h is a little-endian memory dump of bytes 2B00-2BFF
s" .h" suffix create-output-file
s" static PROGMEM prog_uchar " type
filebase @ count type
s" _code[] = {" type cr
coderange do i t@ dup cbyte 8 rshift cbyte cr 2 +loop
s" };" type cr
;
decimal
: start-microcode
bl parse preserve filebase !
s" marker revert h# 2B02 org" evaluate
coldcross decimal
;
: end-microcode
there hiaddr !
s" h# 2B00 org code 0jump main ubranch end-code revert meta" evaluate
dumpall
s" target" evaluate
;
meta
coldcross
include basewords.fs
target
include hwdefs.fs
\ Build all these microcode files:
include memtest.fs
include helloworld.fs
include flowtest.fs
include setpixel.fs
include wireframe.fs
include eraser.fs
include splitscreen.fs
include selftest1.fs
include reload.fs
include palcopy.fs
include random.fs
include rasterinterrupt.fs
include soundbuffer.fs
include cold.fs
include testflash.fs
include thrasher.fs
include bgstripes.fs
include dna.fs
include regressfreq.fs
include showvoices.fs
include spectrum.fs
include fullscreen_bitmap.fs
include videocopy.fs
include spr512.fs
\ include eforth.fs
meta

View File

@ -1,54 +0,0 @@
start-microcode memtest
32 constant sp
0 constant false ( 6.2.1485 )
: true ( 6.2.2298 ) d# -1 ;
: 1+ d# 1 + ;
: rot >r swap r> swap ;
: -rot swap >r swap r> ;
: 0= d# 0 = ;
: tuck swap over ;
: 2drop drop drop ;
: ?dup dup if dup then ;
: 2* d# 2 * ;
: summit
h# 0 c@
h# 1 c@ +
h# 2 c@ +
h# 3 c@ +
h# 4 c@ +
h# 5 c@ +
h# 6 c@ +
h# 7 c@ +
h# 8 c@ +
h# 9 c@ +
d# 765
\ d# 550
over xor
if
h# DEAD begin again
else
drop
then
;
: move ( c-addr1 c-addr2 u -- )
begin
>r
over noop noop c@ over c!
1+ swap 1+ swap
r> 1- dup 0=
until
drop 2drop
;
: main
begin
h# 0 h# 16 d# 10 move
h# 16 h# 0 d# 10 move
summit
again
;
end-microcode

View File

@ -1,546 +0,0 @@
( Nucleus: ANS Forth core and ext words JCB 13:11 08/24/10)
module[ nuc"
32 constant sp
0 constant false ( 6.2.1485 )
: depth dsp h# ff and ;
: true ( 6.2.2298 ) d# -1 ;
: 1+ d# 1 + ;
: rot >r swap r> swap ;
: -rot swap >r swap r> ;
: 0= d# 0 = ;
: tuck swap over ;
: 2drop drop drop ;
: ?dup dup if dup then ;
: split ( a m -- a&m a&~m )
over \ a m a
and \ a a&m
tuck \ a&m a a&m
xor \ a&m a&~m
;
: merge ( a b m -- m?b:a )
>r \ a b
over xor \ a a^b
r> and \ a (a^b)&m
xor \ ((a^b)&m)^a
;
: c@ dup @ swap d# 1 and if d# 8 rshift else d# 255 and then ;
: c! ( u c-addr )
swap h# ff and dup d# 8 lshift or swap
tuck dup @ swap ( c-addr u v c-addr )
d# 1 and d# 0 = h# ff xor
merge swap !
;
: c!be d# 1 xor c! ;
: looptest ( -- FIN )
r> ( xt )
r> ( xt i )
1+
r@ over = ( xt i FIN )
dup if
nip r> drop
else
swap >r
then ( xt FIN )
swap
>r
;
\ Stack
: 2dup over over ;
: +! tuck @ + swap ! ;
\ Comparisons
: <> = invert ;
: 0<> 0= invert ;
: 0< d# 0 < ;
: 0>= 0< invert ;
: 0> d# 0 ;fallthru
: > swap < ;
: >= < invert ;
: <= > invert ;
: u> swap u< ;
\ Arithmetic
: negate invert 1+ ;
: - negate + ;
: abs dup 0< if negate then ;
: min 2dup < ;fallthru
: ?: ( xt xf f -- xt | xf) if drop else nip then ;
: max 2dup > ?: ;
code cells end-code
code addrcells end-code
: 2* d# 1 lshift ;
code cell+ end-code
code addrcell+ end-code
: 2+ d# 2 + ;
: 2- 1- 1- ;
: 2/ d# 1 rshift ;
: c+! tuck c@ + swap c! ;
: count dup 1+ swap c@ ;
: /string dup >r - swap r> + swap ;
: aligned 1+ h# fffe and ;
: sliteral
r>
count
2dup
+
aligned
;fallthru
: execute >r ;
: 15down down1 ;fallthru
: 14down down1 ;fallthru
: 13down down1 ;fallthru
: 12down down1 ;fallthru
: 11down down1 ;fallthru
: 10down down1 ;fallthru
: 9down down1 ;fallthru
: 8down down1 ;fallthru
: 7down down1 ;fallthru
: 6down down1 ;fallthru
: 5down down1 ;fallthru
: 4down down1 ;fallthru
: 3down down1 ;fallthru
: 2down down1 ;fallthru
: 1down down1 ;fallthru
: 0down copy ;
: 15up up1 ;fallthru
: 14up up1 ;fallthru
: 13up up1 ;fallthru
: 12up up1 ;fallthru
: 11up up1 ;fallthru
: 10up up1 ;fallthru
: 9up up1 ;fallthru
: 8up up1 ;fallthru
: 7up up1 ;fallthru
: 6up up1 ;fallthru
: 5up up1 ;fallthru
: 4up up1 ;fallthru
: 3up up1 ;fallthru
: 2up up1 ;fallthru
: 1up up1 ;fallthru
: 0up ;
code pickbody
copy return
1down scall 1up ubranch
2down scall 2up ubranch
3down scall 3up ubranch
4down scall 4up ubranch
5down scall 5up ubranch
6down scall 6up ubranch
7down scall 7up ubranch
8down scall 8up ubranch
9down scall 9up ubranch
10down scall 10up ubranch
11down scall 11up ubranch
12down scall 12up ubranch
13down scall 13up ubranch
14down scall 14up ubranch
15down scall 15up ubranch
end-code
: pick
dup 2* 2* ['] pickbody + execute ;
: swapdown
]asm
N T->N alu
T d-1 alu
asm[
;
: swapdowns
swapdown swapdown swapdown swapdown
swapdown swapdown swapdown swapdown
swapdown swapdown swapdown swapdown
swapdown swapdown swapdown swapdown ;fallthru
: swapdown0 ;
: roll
2*
['] 0up over - >r
['] swapdown0 swap - execute
;
\ ========================================================================
\ Double
\ ========================================================================
: d= ( a b c d -- f )
>r \ a b c
rot xor \ b a^c
swap r> xor \ a^c b^d
or 0=
;
: 2@ ( ptr -- lo hi )
dup @ swap 2+ @
;
: 2! ( lo hi ptr -- )
rot over \ hi ptr lo ptr
! 2+ !
;
: 2over >r >r 2dup r> r> ;fallthru
: 2swap rot >r rot r> ;
: 2nip rot drop rot drop ;
: 2rot ( d1 d2 d3 -- d2 d3 d1 ) 2>r 2swap 2r> 2swap ;
: 2pick
2* 1+ dup 1+ \ lo hi ... 2k+1 2k+2
pick \ lo hi ... 2k+1 lo
swap \ lo hi ... lo 2k+1
pick \ lo hi ... lo hi
;
: d+ ( augend . addend . -- sum . )
rot + >r ( augend addend)
over + ( augend sum)
dup rot ( sum sum augend)
u< if ( sum)
r> 1+
else
r>
then ( sum . )
;
: +h ( u1 u2 -- u1+u2/2**16 )
over + ( a a+b )
u> d# 1 and
;
: +1c \ one's complement add, as in TCP checksum
2dup +h + +
;
: s>d dup 0< ;
: d1+ d# 1. d+ ;
: dnegate
invert swap invert swap
d1+
;
: DABS ( d -- ud ) ( 8.6.1.1160 ) DUP 0< IF DNEGATE THEN ;
: d- dnegate d+ ;
\ Write zero to double
: dz d# 0 dup rot 2! ;
: dxor \ ( a b c d -- e f )
rot xor \ a c b^d
-rot xor \ b^d a^c
swap
;
: dand rot and -rot and swap ;
: dor rot or -rot or swap ;
: dinvert invert swap invert swap ;
: d< \ ( al ah bl bh -- flag )
rot \ al bl bh ah
2dup =
if
2drop u<
else
2nip >
then
;
: d> 2swap d< ;
: d0<= d# 0. ;fallthru
: d<= d> invert ;
: d>= d< invert ;
: d0= or 0= ;
: d0< d# 0. d< ;
: d0<> d0= invert ;
: d<> d= invert ;
: d2* 2dup d+ ;
: d2/ dup d# 15 lshift >r 2/ swap 2/ r> or swap ;
: dmax 2over 2over d< if 2swap then 2drop ;
: d1- d# -1. d+ ;
: d+! ( v. addr -- )
dup >r
2@
d+
r>
2!
;
: move ( addr1 addr2 u -- )
d# 0 do
over @ over !
2+ swap 2+ swap
loop
2drop
;
: cmove ( c-addr1 c-addr2 u -- )
d# 0 do
over c@ over c!
1+ swap 1+ swap
loop
2drop
;
: bounds ( a n -- a+n a ) OVER + SWAP ;
: fill ( c-addr u char -- ) ( 6.1.1540 )
>R bounds
BEGIN 2dupxor
WHILE R@ OVER C! 1+
REPEAT R> DROP 2DROP ;
\ Math
1 [IF]
create scratch d# 2 allot
: um* ( u1 u2 -- ud )
scratch !
d# 0.
d# 16 0do
2dup d+
rot dup 0< if
2* -rot
scratch @ d# 0 d+
else
2* -rot
then
loop
rot drop
;
[ELSE]
: um* mult_a ! mult_b ! mult_p 2@ ;
[THEN]
: * um* drop ;
: abssgn ( a b -- |a| |b| negf )
2dup xor 0< >r abs swap abs swap r> ;
: m* abssgn >r um* r> if dnegate then ;
: divstep
( divisor dq hi )
2*
over 0< if 1+ then
swap 2* swap
rot ( dq hi divisor )
2dup >= if
tuck ( dq divisor hi divisor )
-
swap ( dq hi divisor )
rot 1+ ( hi divisor dq )
rot ( divisor dq hi )
else
-rot
then
;
: um/mod ( ud u1 -- u2 u3 ) ( 6.1.2370 )
-rot
divstep divstep divstep divstep
divstep divstep divstep divstep
divstep divstep divstep divstep
divstep divstep divstep divstep
rot drop swap
;
: /mod >R S>D R> ;fallthru
: SM/REM ( d n -- r q ) ( 6.1.2214 ) ( symmetric )
OVER >R >R DABS R@ ABS UM/MOD
R> R@ XOR 0< IF NEGATE THEN R> 0< IF >R NEGATE R> THEN ;
: / /mod nip ;
: mod /mod drop ;
: */mod >R M* R> SM/REM ;
: */ */mod nip ;
: t2* over >r >r d2*
r> 2* r> 0< d# 1 and + ;
variable divisor
: m*/mod
divisor !
tuck um* 2swap um* ( hi. lo. )
( m0 h l m1 )
swap >r d# 0 d+ r> ( m h l )
-rot ( l m h )
d# 32 0do
t2*
dup divisor @ >= if
divisor @ -
rot 1+ -rot
then
loop
;
: m*/ m*/mod drop ;
\ Numeric output - from eforth
variable base
variable hld
create pad 84 allot create pad|
: <# ( -- ) ( 6.1.0490 )( h# 96 ) pad| HLD ! ;
: DIGIT ( u -- c ) d# 9 OVER < d# 7 AND + [CHAR] 0 + ;
: HOLD ( c -- ) ( 6.1.1670 ) HLD @ 1- DUP HLD ! C! ;
: # ( d -- d ) ( 6.1.0030 )
d# 0 BASE @ UM/MOD >R BASE @ UM/MOD SWAP DIGIT HOLD R> ;
: #S ( d -- d ) ( 6.1.0050 ) BEGIN # 2DUP OR 0= UNTIL ;
: #> ( d -- a u ) ( 6.1.0040 ) 2DROP HLD @ pad| OVER - ;
: SIGN ( n -- ) ( 6.1.2210 ) 0< IF [CHAR] - HOLD THEN ;
\ hex(int((1<<24) * (115200 / 2400.) / (WB_CLOCK_FREQ / 2400.)))
\ d# 42000000 constant WB_CLOCK_FREQ
[ 48000000 17 12 */ ] constant WB_CLOCK_FREQ
0 [IF]
: uartbase
[ $100000000. 115200 WB_CLOCK_FREQ m*/ drop $ffffff00 and dup swap 16 rshift ] 2literal
;
: emit-uart
begin uart_0 @ 0= until
s>d
uartbase dor
uart_1 ! uart_0 !
;
[ELSE]
: emit-uart drop ;
[THEN]
create 'emit
meta emit-uart t, target
: emit 'emit @ execute ;
: cr d# 13 emit d# 10 emit ;
d# 32 constant bl
: space bl emit ;
: spaces begin dup 0> while space 1- repeat drop ;
: hex1 d# 15 and dup d# 10 < if d# 48 else d# 55 then + emit ;
: hex2
dup
d# 4 rshift
hex1 hex1
;
: hex4
dup
d# 8 rshift
hex2 hex2 ;
: hex8 hex4 hex4 ;
: type
d# 0 do
dup c@ emit
1+
loop
drop
;
: dump
( addr u )
0do
dup d# 15 and 0= if dup cr hex4 [char] : emit space space then
dup c@ hex2 space 1+
loop
cr drop
;
: dump16
( addr u )
0do
dup hex4 [char] : emit space dup @ hex4 cr 2+
loop
drop
;
: decimal d# 10 base ! ;
: hex d# 16 base ! ;
: S.R ( a u n -- ) OVER - SPACES TYPE ;
: D.R ( d n -- ) ( 8.6.1.1070 ) >R DUP >R DABS <# #S R> SIGN #> R> S.R ;
: U.R ( u n -- ) ( 6.2.2330 ) d# 0 SWAP D.R ;
: .R ( n n -- ) ( 6.2.0210 ) >R S>D R> D.R ;
: D. ( d -- ) ( 8.6.1.1060 ) d# 0 D.R SPACE ;
: U. ( u -- ) ( 6.1.2320 ) d# 0 D. ;
: . ( n -- ) ( 6.1.0180 ) BASE @ d# 10 XOR IF U. EXIT THEN S>D D. ;
: ? ( a -- ) ( 15.6.1.0600 ) @ . ;
( Numeric input )
: DIGIT? ( c base -- u f ) ( 0xA3 )
>R [CHAR] 0 - D# 9 OVER <
IF D# 7 - DUP D# 10 < OR THEN DUP R> U< ;
: >number ( ud a u -- ud a u ) ( 6.1.0570 )
begin
dup 0= if exit then
over c@ base @ digit? if
>r 2swap
drop base @ um*
r> s>d d+ 2swap
d# 1 /string >number
else
drop exit
then
again
;
: .s
[char] < emit
depth dup hex2
[char] > emit
d# 8 min
?dup if
0do
i pick hex4 space
loop
then
;
build-debug? [IF]
: (assert)
s" **** ASSERTION FAILED **** " type
;fallthru
: (snap)
type space
s" LINE " type
.
[char] : emit
space
.s
cr
;
[THEN]
\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
: endian dup d# 8 lshift swap d# 8 rshift or ;
: 2endian endian swap endian ;
: swab endian ;
: typepad ( c-addr u w ) over - >r type r> spaces ;
: even? d# 1 and 0= ;
\ rise? and fall? act like ! - except that they leave a true
\ if the value rose or fell, respectively.
: rise? ( u a -- f ) 2dup @ u> >r ! r> ;
: fall? ( u a -- f ) 2dup @ u< >r ! r> ;
]module

View File

@ -1,18 +0,0 @@
start-microcode palcopy
: 1+ d# 1 + ;
: main
\ Copy RAM_PAL to PALETTE16A
RAM_PAL PALETTE16A
d# 32
begin
>r
over c@ over c!
1+ swap 1+ swap
r> 1- d# 0 =
until
begin again
;
end-microcode

View File

@ -1,14 +0,0 @@
start-microcode random
\ Fill PICTURE and CHARACTER RAM with random numbers
: main
d# 0
begin
RANDOM c@ over c!
1-
h# 1FFF and
again
;
end-microcode

View File

@ -1,25 +0,0 @@
start-microcode rasterinterrupt
: 1+ d# 1 + ;
: @ dup c@ swap 1+ c@ swab or ;
\ COMM+0 holds the 16 bit raster line number:
\ 0 is first line of screen
\ 299 is last visible line of screen
\ 300 is beginning of vertical blanking
\
\ This microprogram loop raises P2 when the raster is below line COMM+0,
\ so the Arduino can trigger an interrupt
: main
d# 0 P2_DIR c! \ Make P2 an output
\ Drive P2 high when raster is past line COMM+0
begin
COMM+0 @ \ user value
YLINE c@ \ hardware line
< \ true when hardware line is below user value
P2_V c! \ write bool to P2
again
;
end-microcode

View File

@ -1,19 +0,0 @@
start-microcode regressfreq
\ Reads 16-bit frequency from COMM, generates square
\ wave at half frequency PIN2
: 1+ d# 1 + ;
: @ dup c@ swap 1+ c@ swab or ;
: ! over swab over 1+ c! c! ;
: main
d# 0 P2_DIR c! \ Make P2 an output
\ Drive P2 high when raster is past line COMM+0
COMM+0 @ FREQHZ c!
begin
FREQTICK c@ P2_V c!
again
;
end-microcode

View File

@ -1,50 +0,0 @@
start-microcode reload
\ This short microprogram forces a full chip reset, just like a power-cycle
\ it talks to the Spartan 3A's ICAP interface to cause a full FPGA reload,
\ as described in
\ http://www.xilinx.com/support/documentation/user_guides/ug332.pdf page 278
\ ICAP data bus is bit-reversed!
: rev1 ( a b -- a' b' ) d# 2 * over d# 1 and + swap d# 1 rshift swap ;
: rev8 d# 0 rev1 rev1 rev1 rev1 rev1 rev1 rev1 rev1 nip ;
\ The ICAP_PORT low 8 bits are the reversed ICAP_I byte.
\ Bits 8,9,10 are:
h# 100 constant ICAP-CLK \ 1,0 is a pulse
h# 200 constant ICAP-CE \ 0 means select
h# 400 constant ICAP-WRITE \ 0 means write
: ICAP!
ICAP_PORT c! ;
: >cicap ( v -- ) \ clock byte v into ICAP
rev8 dup ICAP! ICAP-CLK or ICAP! ;
: >icap ( v -- ) \ 16-bit ICAP write
dup swab >cicap >cicap ;
: icap_reload
h# ffff >icap
h# aa99 >icap
h# 3261 >icap
h# 0000 >icap
h# 3281 >icap
h# 0000 >icap
h# 30a1 >icap
h# 000e >icap
h# 2000 >icap
h# 2000 >icap \ needs extra NOOP to complete reboot
;
: main
h# 0 ICAP!
icap_reload
begin again
;
end-microcode

View File

@ -1,142 +0,0 @@
( 00: JCB 08:33 04/24/11)
: immediate voc @ 3 - dup c@ 80 or swap c! f;
: ; semis# , 0 state ! f; immediate
: exit semis# , ; immediate
: \ source nip >in ! ; immediate
: allot dp +! ;
: create head, bc-var# c, ;
: variable head, bc-var# c, 0 , ;
: 2variable head, bc-var# c, 0 , 0 , ;
: constant head, bc-const# c, , ;
: compile, , ;
: cell+ 2 + ; : 2* 2 * ; : cells 2* ;
( 01: branching JCB 08:15 04/24/11)
: ahead branch# , here 7777 , ;
: 0ahead 0branch# , here 7777 , ;
: resolve here swap ! ; \ resolve stacked ref to HERE
: begin here ; immediate
: again branch# , , ; immediate
: until 0branch# , , ; immediate
: while 0ahead ; immediate
: repeat swap branch# , , resolve ; immediate
: if 0ahead ; immediate
: else ahead swap resolve ; immediate
: then resolve ; immediate
( 02: parse JCB 08:16 04/24/11)
: parse \ ( char -- ca u )
source>in
advance
over >r
rot >r
begin
over c@ r@ <> over 0<> and
while
advance
repeat
r> 2drop
r> tuck - 1 >in +!
;
( 03: compilation JCB 08:17 04/24/11)
: [ 0 state ! ; immediate
: ] 1 state ! ;
: literal literal# , , ; immediate
: char parse-word drop c@ ;
: ' parse-word sfind ;
: ['] literal# , ' , ; immediate
: postpone
parse-word sfind
dup isimmediate invert if
literal# , , ['] ,
then , ; immediate
: [char] char postpone literal ; immediate
: ( [char] ) parse 2drop ; immediate
: halt begin again ; ' halt (quit) !
( 04: debug JCB 08:17 04/24/11)
: dump
over hex4 bounds
begin 2dup xor
while space dup c@ hex2 1+
repeat 2drop cr ;
: isxt voc @ begin 2dup = if 2drop true exit then
2 - @ dup 0= until nip ;
: typext dup isxt if name? type else hex4 then ;
: seelast [char] : emit space voc @ name? type
here voc @ 1+ begin
2dup xor
while space dup @ typext cell+
repeat cr 2drop ;
( 05: strings JCB 08:17 04/24/11)
: (sliteral)
r> count 2dup + >r ;
: s"
[char] " parse
postpone (sliteral) dup c, s, ; immediate
: ." postpone s" postpone type ; immediate
: .( [char] ) parse type cr ; immediate
: (next) 1- ?dup 0= ;
: next postpone (next) postpone until ; immediate
( 06: move JCB 08:18 04/24/11)
: cmove ( c-addr1 c-addr2 u -- )
begin
dup
while
>r over c@ over c!
1+ swap 1+ swap
r> 1-
repeat
drop 2drop
;
( 07: create does> JCB 08:18 04/24/11)
: (create) r> cell+ ;
: (does) r> dup cell+ swap @ >r ;
: create
head, bc-col# c,
['] (create) , 0 , ;
: does>
r> voc @ 1+
['] (does) over ! cell+ ! ;
: :noname
here bc-col# c, ] ;
( 08: welcome JCB 08:18 04/24/11)
\ screen \ 8
.( gdforth 0.0.1)
here hex4 cr
' quit (quit) !
( 09: DNA JCB 08:19 04/24/11)
: dna@ ( -- u ) 8018 c@ ;
: dna! ( u -- ) 8008 c! ;
: dnaclk ( u -- ) dup dna! 1+ dna! ;
: dnaread ( ) 4 dnaclk ;
: dnashift ( ) 2 dnaclk ;
: dnabit ( u -- u ) 2* dna@ + dnashift ;
: dnabyte ( -- u ) \ read byte from DNA
0 8 begin >r dnabit r> next ;
: dna ( ca -- ) \ write 7 byte DNA at ca
dnaread dnashift
7 begin
>r dnabyte over c! 1+ r>
next drop ;
\ 7F00 dna 7F00 7 dump
( 10: SPI and flash JCB 08:19 04/24/11)
char J IOMODE c! spi-cold
\ flash-status hex2 cr
: showblk ( u -- )
spi-sel
03 >spi
flash-page
400 400 bounds begin
0 spi-xfer over c!
1+ 2dup =
until 2drop spi-unsel ;
\ 0 showblk
\ here hex4 cr
quit

View File

@ -1,24 +0,0 @@
start-microcode selftest1
: 1+ d# 1 + ;
: ! ( u addr )
over swab over 1+ c! c! ;
: d1+
swap 1+
swap over
d# 0 = if
1+
then
;
\ increment COMM+0,1,2,3 until COMM+15 goes high
: main
h# 0.
begin
over COMM+0 !
dup COMM+2 !
d1+
begin COMM+15 c@ until
again
;
end-microcode

View File

@ -1,31 +0,0 @@
start-microcode setpixel
: setpixel ( yx -- ) \ set pixel yx to color from COMM+2, about 35 cycles
dup>r
h# f and
r@ d# 4 rshift h# 0ff0 and or
r@ h# 30 and swab or
RAM_SPRIMG or ( addr )
dupc@ ( addr v )
h# c0 r> d# 5 rshift h# 6 and rshift dup>r \ mask in R
invert and r> COMM+2 c@ and or
swap c!
;
: main
begin
\ wait until command reg is nonzero
begin
COMM+2 c@
until
\ 0 is X, 1 is Y
COMM+0 c@ COMM+1 c@ swab or
setpixel
\ tell host we're done
d# 0 COMM+2 c!
again
;
end-microcode

Some files were not shown because too many files have changed in this diff Show More