[comp.sources.amiga] spheres

ain@j.cc.purdue.edu (Patrick White) (03/08/88)

Program Name:	spheres  (part 1 of 2)
Submitted By:	guilford@csv.rpi.edu (Jim Guilford)
Summary:	Rotate spheres in 3-D according to mouse movements.
Poster Boy:  Pat White  (ain@j.cc.purdue.edu)
Untested.

NOTES:
   Docs and data posted in separate shar.
   Reshared it.
   Didn't test compile it.


-- Pat White   (co-moderator comp.sources/binaries.amiga)
UUCP: j.cc.purdue.edu!ain  BITNET: PATWHITE@PURCCVM   PHONE: (317) 743-8421
U.S.  Mail:  320 Brown St. apt. 406,    West Lafayette, IN 47906

========================================


#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:	Shell Archiver
#	Run the following text with /bin/sh to create:
#	animballs.c
#	globals.h
#	hamstuff.c
#	makedata.c
#	myblit.c
#	screen.c
# This archive created: Mon Mar  7 19:28:18 1988
# By:	Patrick White (PUCC Land, USA)
echo shar: extracting animballs.c '(9992 characters)'
cat << \SHAR_EOF > animballs.c
/* animballs.c -- code to handle actual rotating images */
#include <exec/types.h>
#include <stdio.h>
#include <math.h>
#include <intuition/intuition.h>

#include "globals.h"

#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>

int woffset = WOFFSET;
#define SETANDBOUND(ii,ff)	{ii = 0.5 + ff * 15; \
				 if (ii > 15) ii = 15; \
				 else if (ii < 0) ii = 0;}

float ka, kd, ks, lx, ly, lz, n, r;	/* coloring parameters */
long int ix,iy,iz, jx,jy,jz, kx,ky,kz;
static char title[81];
int bgcolor = 0;

int scx = WIDTH / 2, scy = SMHEIGHT / 2;
int xstart = -1; ystart = -1;

#define ISIZE 14
#define FTOI(x) ((long int) (x * (1 << ISIZE)))
#define MULT(x,y) ((x * y) >> ISIZE)
#define LSIZE 10

#define MAKEL(x) ((long int) x * (1 << LSIZE))

struct Ball {
	long int x,y,z;
	float r,g,b,rad;
	long int xp,yp,zp;
	int y1,y2,intr,size;
	int dup;
	};

int nball;
struct Ball **ballptr;
struct Ball *balls;
int maxsize = 0;
int maskw = 0, maskh = 1;
int maxextent = 0;

long int intsin[360];
long int intcos[360];

void
readballs(name)
char *name;
{
	int i, j, extent;
	int c;
	float x,y,z,rad,r,g,b;
	FILE *fp, *fopen();
	int ir,ig,ib;

	if ((fp = fopen(name,"r")) == NULL) {
		fprintf(stderr,"Can't open balls file - '%s'",name);
		panic("");
	}
	strcpy(title,"Drag Mouse to Rotate");
	if ((c = getc(fp)) != '"') ungetc(c,fp);
	else {
		i = 0;
		c = getc(fp);
		while ((c != '"') && (c != EOF)) {
			if (i < 80) title[i++] = c;
			c = getc(fp);
		}
		if (c == EOF) panic("Error - title lacks final \"");
		title[i] = 0;
	}
	if ((c = fscanf(fp,"%f %f %f",&r,&g,&b)) != 3) {
		fprintf(stderr,"Error reading background color %d",c+1);
		panic("");
	} else {
		SETANDBOUND(ir,r);
		SETANDBOUND(ig,g);
		SETANDBOUND(ib,b);
		bgcolor = match(ir,ig,ib);
	}
	if (fscanf(fp,"%d",&nball) != 1)
		panic("Error - Can't read number of balls");
	balls = (struct Ball *) malloc(sizeof(struct Ball)*nball);
	if (balls == 0) panic("Not enough memory for balls");
	ballptr = (struct Ball **) malloc(sizeof(long int)*nball);
	if (ballptr == 0) panic("Not enough memory for ballptr");
	for (i = 0; i < nball; i++) {
	    if ((c=fscanf(fp,"%f %f %f %f %f %f %f",&x,&y,&z,&rad,&r,&g,&b))!=7)
	    	{fprintf(stderr,
			"Error in reading item %d in ball description %d",
			c+1,i+1);
		 panic("");
	    }
	    balls[i].x = MAKEL(x);
	    balls[i].y = MAKEL(y);
	    balls[i].z = MAKEL(z);
	    balls[i].rad = rad;
	    balls[i].r = r;
	    balls[i].g = g;
	    balls[i].b = b;
	    balls[i].intr = rad + 0.5;
	    balls[i].size = 2 * balls[i].intr + 1;
	    extent = 0.9 + sqrt(x*x + y*y +z*z) + balls[i].intr;
	    if (extent > maxextent) maxextent = extent;
	    if (balls[i].size > maxsize) maxsize = balls[i].size;
	    balls[i].dup = -1;

	    for (j = 0; j < i; j++) 	/* check for duplicate entries */
		if ((balls[j].rad == rad) && (balls[j].r == r) &&
		    (balls[j].g == g) && (balls[j].b == b)) {
		    	balls[i].dup = j;
			break;
		}
	    if (balls[i].dup != -1) {
	    	balls[i].y1 = balls[balls[i].dup].y1;
		balls[i].y2 = balls[balls[i].dup].y2;
	    } else {
		balls[i].y1 = maskh;
		maskh += balls[i].size;
		if (!bw) {
	    	    balls[i].y2 = maskh;
	    	    maskh += balls[i].size;
		} else balls[i].y2 = 0;
	    }
	}
	maskw = ((maxsize + 15) & ~15) + 16;
	fclose(fp);
	checkextent();
}

void
checkextent()
{
    int largest,i;
    long int scale;
    double fscale;

    largest = scy - 10;
    if (scx < largest) largest = scx;
    if (maxextent > largest) {
	fprintf(stderr,"Warning, balls are too far apart, I will re-scale.\n");
	Delay(250);
	fscale = (((double) largest) / ((double) maxextent));
	scale = FTOI(fscale);
	maxsize = 0;
	maskw = 0;
	maskh = 1;
	for (i=0; i < nball; i++) {
		balls[i].x = MULT(balls[i].x,scale);
		balls[i].y = MULT(balls[i].y,scale);
		balls[i].z = MULT(balls[i].z,scale);
		balls[i].rad *= fscale;
		balls[i].intr = balls[i].rad + 0.5;
		balls[i].size = 2 * balls[i].intr + 1;
		if (balls[i].size > maxsize) maxsize = balls[i].size;
		if (balls[i].dup != -1 ) {
		    balls[i].y1 = balls[balls[i].dup].y1;
		    balls[i].y2 = balls[balls[i].dup].y2;
		} else {
		    balls[i].y1 = maskh;
		    maskh += balls[i].size;
		    if (!bw) {
	    		balls[i].y2 = maskh;
	    		maskh += balls[i].size;
		    } else balls[i].y2 = 0;
		}
	}
	maskw = ((maxsize + 15) & ~15) + 16;
    }
}

void
initsin()
{
	int i;
	float r,s;

	for (i=0; i < 360; i++) {
		r = i * (3.14159/180.0);
		s = sin(r);
		intsin[i] = FTOI(s);
		s = cos(r);
		intcos[i] = FTOI(s);
	}
}

void
isin(x,c,s)
int x;		/* x is degrees */
long int *c,*s;
{
	while (x >= 360) x -=360;
	while (x < 0) x += 360;
	*c = intcos[x];
	*s = intsin[x];
}

void
initrender()
{
	float m;

	initsin();
	ka = .2; kd = .5; ks = .65;
	lx = ly = lz = 1;
	m = sqrt(lx*lx + ly*ly + lz*lz);
	lx /= m;
	ly /= m;
	lz /= m;
	n = 10; r = 9.5;

	ix = FTOI(1); iy = iz = 0;
	jy = FTOI(1); jx = jz = 0;
	kz = FTOI(1); kx = ky = 0;
}

void
render()
{
	int i;
	int x, y;
	int cont, MouseMoved;
	struct IntuiMessage *message;
	ULONG class;
	USHORT code,qual;
	
	for (i = 0; i < nball; i++) renderball(i);

	SetWindowTitles(mywindow,title,((char *)(-1)));
	mylinecopy(sbitmap,0,10,WOFFSET);

	showballs();

	cont = 1;
	while(cont) {
		Wait(1 << (mywindow->UserPort->mp_SigBit));
		MouseMoved = FALSE;
		while(message = (struct IntuiMessage *)
				GetMsg(mywindow->UserPort)) {
			class = message->Class;
			code  = message->Code;
			x     = message->MouseX;
			y     = message->MouseY;
			qual  = message->Qualifier;
			ReplyMsg((struct Message *)message);

			if (class == MOUSEMOVE) MouseMoved = TRUE;
			else if (class == CLOSEWINDOW) {
				cont = 0;
				break;
			} else if (class == MOUSEBUTTONS)
				mbutton(code,x,y);
		}
		if (MouseMoved && cont) mmove(x,y,qual);
	}
}

void
showballs()
{
	int i,j,sx,sy;
	struct Ball *ball;
	long int x,y;

	for (i = 0; i < nball; i++) {
	    ball = ballptr[i] = &(balls[i]);
	    ball->xp = ((ball->x)*ix + (ball->y)*jx + (ball->z)*kx) >> ISIZE;
	    ball->yp = ((ball->x)*iy + (ball->y)*jy + (ball->z)*ky) >> ISIZE;
	    ball->zp = ((ball->x)*iz + (ball->y)*jz + (ball->z)*kz) >> ISIZE;
	}
	for (i = nball-1; i > 0; i--)
	    for (j = 0; j < i; j++) {
		if (ballptr[i]->zp < ballptr[j]->zp) {
			ball = ballptr[i];
			ballptr[i]=ballptr[j];
			ballptr[j]=ball;
		}
	    }

	myblankc(sbitmap,10+woffset,190+woffset,bgcolor);
	if (!bw) myblankc(&tbitmap,0,SMHEIGHT-1,bgcolor);

	for (i = 0; i < nball; i++) {
		ball = ballptr[i];
		x = (ball->xp + (1 << (LSIZE - 1))) >> LSIZE;
		y = (ball->yp + (1 << (LSIZE - 1))) >> LSIZE;
		sx = scx + x - ball->intr;
		sy = scy - y - ball->intr;

		     BltBitMask(&ibitmap,0,ball->y1,
				 sbitmap,sx,sy+woffset,
				&mbitmap,0,ball->y1,0,
				ball->size,ball->size);
		if (!bw) {
		     BltBitMask(&ibitmap,0,ball->y2,
				&tbitmap,sx,sy,
				&mbitmap,0,ball->y1,0,
				ball->size,ball->size);
		     BltBitMask(&tbitmap,sx+ball->intr+1,sy,
				 sbitmap,sx+ball->intr+1,sy+woffset,
				&mbitmap,ball->intr,ball->y2,0,
				ball->intr+1,ball->size);
		}
	}
	flip();
}

void
scrollx(d)
int d;
{
	long int c,s;
	long int t;

	isin(-d,&c,&s);

	t  = (c * ix  -  s * iz) >> ISIZE;
	iz = (s * ix  +  c * iz) >> ISIZE;
	ix = t;
	t  = (c * jx  -  s * jz) >> ISIZE;
	jz = (s * jx  +  c * jz) >> ISIZE;
	jx = t;
	t  = (c * kx  -  s * kz) >> ISIZE;
	kz = (s * kx  +  c * kz) >> ISIZE;
	kx = t;
}
void
scrolly(d)
int d;
{
	long int c,s;
	long int t;

	isin(d,&c,&s);

	t  = (c * iy  -  s * iz) >> ISIZE;
	iz = (s * iy  +  c * iz) >> ISIZE;
	iy = t;
	t  = (c * jy  -  s * jz) >> ISIZE;
	jz = (s * jy  +  c * jz) >> ISIZE;
	jy = t;
	t  = (c * ky  -  s * kz) >> ISIZE;
	kz = (s * ky  +  c * kz) >> ISIZE;
	ky = t;
}
void
scrollz(d)
int d;
{
	long int c,s;
	long int t;

	isin(d,&c,&s);

	t  = (c * iy  -  s * ix) >> ISIZE;
	ix = (s * iy  +  c * ix) >> ISIZE;
	iy = t;
	t  = (c * jy  -  s * jx) >> ISIZE;
	jx = (s * jy  +  c * jx) >> ISIZE;
	jy = t;
	t  = (c * ky  -  s * kx) >> ISIZE;
	kx = (s * ky  +  c * kx) >> ISIZE;
	ky = t;
}

void
mbutton(code,x,y)
int code, x, y;
{
	if (code == SELECTDOWN) {
		xstart = x;
		ystart = y;
	} else if (code == SELECTUP) {
		xstart = ystart = -1;
	}
}

void
mmove(x,y,qual)
int x,y;
USHORT qual;
{
	register int shift;

	if (qual & 0x30) shift = 2;		/* L-ALT, R-ALT */
	else if (qual & 0x07) shift = 0;	/* SHIFT */
	else shift = 1;

	if (xstart != -1) {
		if (qual & 0x08)		/* CNTL */
			scrollz((x - xstart)<<shift);
		else {
			scrolly((y - ystart)<<shift);
			scrollx((x - xstart)<<shift);
		}

		xstart = x;
		ystart = y;

		showballs();
	}
}

void
flip()
{
	Forbid();
	WaitTOF();
	WaitBlit();
	Disable();
	if (woffset) {
		vp->RasInfo->RyOffset = WOFFSET;
	} else {
		vp->RasInfo->RyOffset = 0;
	}
	ScrollVPort(vp);
	Enable();
	Permit();
	if (woffset) {
		woffset = 0;
	} else {
		woffset = WOFFSET;
	} 
}

void
renderball(j)
int j;
{
	struct Ball *ball;
	int intr, size, y1, y2;
	int x, y, xp, yp, ired, igreen, iblue;
	int start;
	float nx, ny, nz, rz, id, is;
	
	ball = balls+j;

	if (ball->dup != -1) return;

	y1 = ball->y1;
	y2 = ball->y2;
	intr = ball->intr;
	size = ball->size;

/* special mask is offset -1 in x */

	for (y = 0; y < size; y++) {
	    start = 0;
	    for (x = 0; x < size; x++) {
		xp = x - intr;
		yp = intr - y;
		nz = (ball->rad * ball->rad) - (xp * xp) - (yp * yp);
		if (nz >= 0.0) {
			mywritepixel1(&mbitmap,x,y+y1);
			nx = xp / ball->rad;
			ny = yp / ball->rad;
			nz = sqrt(nz) / ball->rad;
			id = lx*nx + ly*ny + lz*nz;	/* diffuse intensity */
			rz = (nz + nz) * id - lz;
			if (rz < 0) rz = 0;
			is = ks * pow(rz,n);
			id = ka + kd * id;
			SETANDBOUND(ired,  (id * ball->r + is));
			SETANDBOUND(igreen,(id * ball->g + is));
			SETANDBOUND(iblue, (id * ball->b + is));
			setcolor(x,y+y1,y+y2,ired,iblue,igreen,!start);
			if (start == 0) start = 1;
		} else if (start == 1) {
			dolast();
			if (!bw) mywritepixel1(&mbitmap,x-1,y+y2);
			start = 2;
		}
	    }
	    if (start == 1) {
		dolast();
		if (!bw) mywritepixel1(&mbitmap,x-1,y+y2);
	    }
	}
}
SHAR_EOF
if test 9992 -ne "`wc -c animballs.c`"
then
echo shar: error transmitting animballs.c '(should have been 9992 characters)'
fi
echo shar: extracting globals.h '(925 characters)'
cat << \SHAR_EOF > globals.h
/* structs.h structure and external definitions */

extern struct RastPort *rp;
extern struct Window *mywindow;
extern struct ViewPort *vp;
extern struct Screen *myscreen;
extern struct BitMap *sbitmap;
extern struct BitMap tbitmap;
extern struct BitMap ibitmap;
extern struct BitMap mbitmap;
extern int bw;
extern int maxsize, maskw, maskh;
extern int bgcolor;
extern UWORD colortable[];

#define WOFFSET		200
#define HEIGHT		400
#define SMHEIGHT	200
#define WIDTH		192

void readballs();
void checkextent();
void initsin();
void isin();
void initrender();
void render();
void showballs();
void scrollx();
void scrolly();
void scrollz();
void mbutton();
void mmove();
void flip();
void renderball();

void panic();
void cleanup();
void setbw();
void dodefault();

void setcolor();
void dolast();

void BltBitMask();
void mywritepixel1();
void mywritepixel();
void myblank();
void mylinecopy();
void myblankc();
int match();
SHAR_EOF
if test 925 -ne "`wc -c globals.h`"
then
echo shar: error transmitting globals.h '(should have been 925 characters)'
fi
echo shar: extracting hamstuff.c '(3628 characters)'
cat << \SHAR_EOF > hamstuff.c
/* hamstuff.c   - routines to be given a set of colors. These will be plotted
		in ham mode. This is based on hamrtn.c */

#include <exec/types.h>
#include <stdio.h>
#include <intuition/intuition.h>

#include "globals.h"

extern UWORD colortable[];
extern UBYTE near[];
extern UWORD nearmc[];

/* near is 4096 long and is configured as a 16*16*16 array		*/
/* each byte gives the distance to the nearest colortable entry		*/
/* the high order nible is the index into the color table and the	*/
/* low order nible is the distance.					*/
/* color[16] - colormap containing rgb values fairly evenly */
/*             spread throughout 16x16x16 space.            */
/* near[4096] - table of distance. For each r,g,b           */
/*              address = (r<<8 | g<<4 | b) & 0xfff         */
/*              near>>4 gives the nearest color (index) and */
/*              near & 0x0f gives the distance.             */
/* nearmc[4096] - table of distance minus color             */
/*       This contains the nearest color ignoring a color   */
/*       (nearmc >> 8) & 0xf is for red,                    */
/*       (nearmc >> 4) & 0xf is for green,                  */
/*       and nearmc & 0xf is for blue                       */

#define INDEXNEAR(r,g,b) near[(((r)<<8) | ((g)<<4) | (b))&0xfff]

#define PLOTABS(x,y,color)     {mywritepixel(&ibitmap,x,y,color); \
				i = colortable[color];	\
				pr = i >> 8;		\
				pg = (i >> 4) & 0x0f;	\
				pb = i & 0x0f; 		\
				if (!exact)		\
				  mywritepixel(&ibitmap,ox,oy,near[oc]>>4);}


#define RED	0x20
#define GREEN	0x30
#define BLUE	0x10

extern struct RastPort *rp;

static short pr, pg, pb;
static int ox, oy, oc;

void
setcolor(xpos,ypos,yepos,r,b,g,exact)
int xpos,ypos,yepos,r,b,g,exact;
{
    short d1, dr, dg, db;
    int i;

    r &= 0x0f;
    b &= 0x0f;
    g &= 0x0f;

    if (bw) mywritepixel(&ibitmap,xpos,ypos,(r+b+g)/3);
    else {
	d1 = INDEXNEAR(r,g,b);
	if (((d1 & 0x0f) == 0) || (exact)) {	/* equals existing color */
		PLOTABS(xpos,ypos,(d1>>4));
		if (exact) mywritepixel(&ibitmap,xpos,yepos,d1>>4);
	} else {
		/* calculate nearest dist from prev */
		dr = r - pr;
		if (dr < 0) dr = -dr;
		dg = g - pg;
		if (dg < 0) dg = -dg;
		db = b - pb;
		if (db < 0) db = -db;
			if (dr > dg) {
		    if (dr > db) {
			/* dr is max */
			if ((d1 & 0x0f) < (dg+db)) {
				PLOTABS(xpos,ypos,(d1>>4));
			} else {
				mywritepixel(&ibitmap,xpos,ypos,RED | r);
				pr = r;
				mywritepixel(&ibitmap,ox,oy,(nearmc[oc]>>8));
			}
		    } else {	/* if (dr > db) . . . */
			/* db is max */
			if ((d1 & 0x0f) < (dg+dr)) {
				PLOTABS(xpos,ypos,(d1>>4));
			} else {
				mywritepixel(&ibitmap,xpos,ypos, BLUE | b);
				pb = b;
				mywritepixel(&ibitmap,ox,oy,(nearmc[oc] & 0xf));
			}
		    }
		} else {	/* if (dr > dg) . . . */
		    if (dg > db) {
			/* dg is max */
			if ((d1 & 0x0f) < (dr+db)) {
				PLOTABS(xpos,ypos,(d1>>4));
			} else {
				mywritepixel(&ibitmap,xpos,ypos,GREEN | g);
				pg = g;
				mywritepixel(&ibitmap,ox,oy,
						(nearmc[oc]>>4)& 0xf);
			}
		    } else {	/* if (dg > db) . . . */
			/* db is max */
			if ((d1 & 0x0f) < (dg+dr)) {
				PLOTABS(xpos,ypos,(d1>>4));
			} else {
				mywritepixel(&ibitmap,xpos,ypos,BLUE | b);
				pb = b;
				mywritepixel(&ibitmap,ox,oy,(nearmc[oc] & 0xf));
			}
		    }
		}	/* end if (dr > dg) */
	}		/* end else for if ((d1 & 0x0f) == 0) */
	oc = r<<8 | g<<4 | b;
	ox = xpos;
	oy = yepos;
    }
}				/* end setcolor */

void
dolast()
{
	if (!bw) mywritepixel(&ibitmap,ox,oy,near[oc]>>4);
}

int
match(r,g,b)
int r,g,b;
{
	if (bw) return(0.5 + ((float)(r + g + b)) / 3.0);
	else return(INDEXNEAR(r,g,b) >> 4);
}
SHAR_EOF
if test 3628 -ne "`wc -c hamstuff.c`"
then
echo shar: error transmitting hamstuff.c '(should have been 3628 characters)'
fi
echo shar: extracting makedata.c '(3045 characters)'
cat << \SHAR_EOF > makedata.c
/* makedata.c - enhancement to basic code to create data.c HAM file */
#include <stdio.h>

printcomments()
{
  printf("/* data.c - table of data for HAM routines.                 */\n\n");
  printf("/* color[16] - colormap containing rgb values fairly evenly */\n");
  printf("/*             spread throughout 16x16x16 space.            */\n");
  printf("/* near[4096] - table of distance. For each r,g,b           */\n");
  printf("/*              address = (r<<8 | g<<4 | b) & 0xfff         */\n");
  printf("/*              near>>4 gives the nearest color (index) and */\n");
  printf("/*              near & 0x0f gives the distance.             */\n");
  printf("/* nearmc[4096] - table of distance minus color             */\n");
  printf("/*       This contains the nearest color ignoring a color   */\n");
  printf("/*       (nearmc >> 8) & 0xf is for red,                    */\n");
  printf("/*       (nearmc >> 4) & 0xf is for green,                  */\n");
  printf("/*       and nearmc & 0xf is for blue                       */\n\n");
}  

struct color {
	int red, green, blue;
};

struct color color[16] = {
	{0x0,0x0,0x0},
	{0x4,0x6,0x6},
	{0x3,0x7,0x2},
	{0xc,0x2,0x3},
	{0x3,0xd,0x3},
	{0x3,0x2,0xc},
	{0xc,0xc,0x2},
	{0xc,0x3,0xd},
	{0x3,0xc,0xd},
	{0xc,0xd,0xc},
	{0x0,0x8,0xa},
	{0x8,0x0,0x8},
	{0x8,0x8,0x0},
	{0xf,0x7,0x7},
	{0x8,0xf,0x8},
	{0x8,0x8,0xf}
};

main()
{
	int r,g,b;
	int d,dd,n,i;
	int dr,dg,db, ddr,ddg,ddb, nr,ng,nb;

	printcomments();

	printf("#include <exec/types.h>\n\n");
	printf("UWORD colortable[16] = {\n");
	for (i=0; i<15; i++)
		printf("\t0x%01x%01x%01x,\n",
			color[i].red,color[i].green,color[i].blue);
	printf("\t0x%01x%01x%01x\n",
		color[i].red,color[i].green,color[i].blue);
	printf("};\n\n");
	printf("UBYTE near[4096] = {\n");
	for (r = 0; r < 16; r++) {
	   for (g = 0; g < 16; g++) {
	      printf("\t");
	      for (b = 0; b < 16; b++) {
		 d = 10000;
		 for (i = 0; i < 16; i++) {
		    dd = abs(r - color[i].red) +
		    	 abs(g - color[i].green) +
			 abs(b - color[i].blue);
		    if (dd < d) {
		    	 d = dd;
			 n = i;
		    }
		 }
		 printf("0x%01x%01x",n,d);
		 if (b < 15) printf(", ");
		 else if ((r < 15) || (g < 15)) printf(",\n");
		 else printf("\n");
		 if (b == 7) printf("\n\t");
	      }
	   }
	}
	printf("};\n\n");

	printf("UWORD nearmc[4096] = {\n");
	for (r = 0; r < 16; r++) {
	   for (g = 0; g < 16; g++) {
	      printf("\t");
	      for (b = 0; b < 16; b++) {
		 dr = 10000;
		 dg = 10000;
		 db = 10000;
		 for (i = 0; i < 16; i++) {
		    ddr = abs(g -color[i].green) + abs(b - color[i].blue );
		    ddg = abs(r -color[i].red  ) + abs(b - color[i].blue );
		    ddb = abs(r -color[i].red  ) + abs(g - color[i].green);
		    if (ddr < dr) { dr = ddr; nr = i;}
		    if (ddg < dg) { dg = ddg; ng = i;}
		    if (ddb < db) { db = ddb; nb = i;}
		 }
		 printf("0x%01x%01x%01x",nr,ng,nb);
		 if (b < 15) printf(", ");
		 else if ((r < 15) || (g < 15)) printf(",\n");
		 else printf("\n");
		 if (b == 7) printf("\n\t");
	      }
	   }
	}
	printf("};\n");
}
SHAR_EOF
if test 3045 -ne "`wc -c makedata.c`"
then
echo shar: error transmitting makedata.c '(should have been 3045 characters)'
fi
echo shar: extracting myblit.c '(5261 characters)'
cat << \SHAR_EOF > myblit.c
/* myblit.c - definition of my blitter code */
/*	It will blit from a source through a mask to a destination bitmap */
/*      The mask must have the word before and after it clear */

#include <exec/types.h>
#ifdef BLTDEBUG
#include <stdio.h>
#endif
#include <hardware/custom.h>
#include <hardware/blit.h>
#include <graphics/gfx.h>

#define BLTADD (0xdff040)

/*
 *   This structure contains everything we need to know.
 *   Do not do a structure copy into this!  Instead, assign
 *   each field.  The last field assigned must be bltsize; that
 *   starts up the blitter.  Also note that all of these are
 *   write only, and you can't read them.
 */

struct BltStruct {
	WORD con0;
	WORD con1;
	WORD afwm;
	WORD alwm;
	WORD *csource, *bsource, *asource, *dsource;
	WORD bltsize;
	WORD dmy1, dmy2, dmy3;
	WORD cmod, bmod, amod, dmod;
};
static struct BltStruct *Blitter = (struct BltStruct *)BLTADD;

static UBYTE boffset[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};

void
BltBitMask(sbm,sx,sy,dbm,dx,dy,mbm,mx,my,mpno,xsize,ysize)
struct BitMap *sbm, *dbm, *mbm;
int sx,sy,dx,dy,mx,my,mpno,xsize,ysize;
{
	WORD *splane, *dplane, *mplane;
	WORD *aaddr,*baddr,*daddr;
	int ashft, bshft;
	UWORD afwm,alwm;
	int smodulo, dmodulo, mmodulo;
	int i;

	smodulo = ((sbm->BytesPerRow) + 1) >> 1;
	dmodulo = ((dbm->BytesPerRow) + 1) >> 1;
	mmodulo = ((mbm->BytesPerRow) + 1) >> 1;

	splane = (WORD *) (sbm->Planes[0]);
	dplane = (WORD *) (dbm->Planes[0]);
	mplane = (WORD *) (mbm->Planes[mpno]);

	daddr = dplane + dmodulo * dy + (dx >> 4);
	dx &= 15;
	aaddr = mplane + mmodulo * my + (mx >> 4);
	mx &= 15;
	baddr = splane + smodulo * sy + (sx >> 4);
	sx &= 15;
#ifdef BLTDEBUG
printf("new - spl = %x, dpl = %x, mpl = %x\n",splane,dplane,mplane);
printf("smod = %x, dmod = %x, mmod = %x\n",smodulo,dmodulo,mmodulo);
printf("aa=%x, ba=%x, da=%x, (a)mx=%d, (b)sx=%d, dx=%d, xs=%d\n",
	(aaddr - mplane - mmodulo * my),
	(baddr - splane - smodulo * sy),
	(daddr - dplane - dmodulo * dy),mx,sx,dx,xsize);
#endif
	ashft = dx - mx;
	bshft = dx - sx;
	afwm = ((unsigned) 0xffff) >> mx;
	alwm = 0xffff << (16 - ((mx + xsize) & 15));
	xsize = (xsize + dx + 15) >> 4;
	if ((ashft < 0) || (bshft < 0)) {
		daddr--;
		xsize++;
		if (ashft < 0) ashft += 16;
		else aaddr--;
		if (bshft < 0) bshft += 16;
		else baddr--;
	}
#ifdef BLTDEBUG
printf("aaddr = %x, baddr = %x, daddr = %x\n",aaddr,baddr,daddr);
printf("aa=%x, ba=%x, da=%x, fw=%x, lw=%x, as=%d, bs=%d, xs=%d\n",
	(aaddr - mplane - mmodulo * my),
	(baddr - splane - smodulo * sy),
	(daddr - dplane - dmodulo * dy),afwm,alwm,ashft,bshft,xsize);
#endif
	OwnBlitter();

	WaitBlit();
	Blitter->asource = aaddr;
	Blitter->bsource = baddr;
	Blitter->csource = Blitter->dsource = daddr;
	Blitter->amod = (mmodulo - xsize) << 1;
	Blitter->bmod = (smodulo - xsize) << 1;
	Blitter->cmod = Blitter->dmod = (dmodulo - xsize) << 1;
	Blitter->afwm = afwm;
	Blitter->alwm = alwm;
	Blitter->con0 = (ashft << 12) | (0xf << 8) | 0xca;
	Blitter->con1 = (bshft << 12);
	Blitter->bltsize = (ysize << 6) | xsize;

	for (i = 1; i < dbm->Depth; i++) {
		WaitBlit();
		Blitter->asource = aaddr;
		Blitter->bsource = baddr +
			(((WORD *)sbm->Planes[i]) - ((WORD *)sbm->Planes[0]));
		Blitter->csource = Blitter->dsource = daddr +
			(((WORD *)dbm->Planes[i]) - ((WORD *)dbm->Planes[0]));
		Blitter->bltsize = (ysize << 6) | xsize;
	}

	DisownBlitter();
}

void
mywritepixel1(bm,x,y)
struct BitMap *bm;
int x,y;
{
	register int offset;
	register UBYTE bits;

	offset = y * bm->BytesPerRow + (x >> 3);
	bits = boffset[x & 7];

	bm->Planes[0][offset] |= bits;
}

void
mywritepixel(bm,x,y,color)
struct BitMap *bm;
int x,y;
{
	register int offset;
	register int i;
	UBYTE bits,nbits;

	offset = y * bm->BytesPerRow + (x >> 3);
	bits = boffset[x & 7];
	nbits = ~bits;

	for (i=0; i < bm->Depth; i++) {
		if (color & 0x01) bm->Planes[i][offset] |= bits;
		else bm->Planes[i][offset] &= nbits;
		color >>= 1;
	}
}

void
myblank(bm,y1,y2)
struct BitMap *bm;
int y1,y2;
{
	register int offset, bytes;
	register int i;

	offset = y1 * bm->BytesPerRow;
	bytes = (y2 - y1) * bm->BytesPerRow;

	for (i=0; i < bm->Depth; i++)
		BltClear(&(bm->Planes[i][offset]),bytes,0);
}

void
mylinecopy(bm,starty,len,delta)
struct BitMap *bm;
int starty, len, delta;
{
	UBYTE *loc1, *loc2, *stop;
	int i;

	for(i=0; i < bm->Depth; i++) {
		loc1 = &(bm->Planes[i][starty*bm->BytesPerRow]);
		stop = loc1 + len*bm->BytesPerRow;
		loc2 = loc1 + delta*bm->BytesPerRow;
		while (loc1 < stop) *(loc2++) = *(loc1++);
	}
}

void
myblankc(bm,y1,y2,color)
struct BitMap *bm;
int y1,y2,color;
{
	register int i;
	WORD *daddr;
	int dmodulo;
	
	dmodulo = ((bm->BytesPerRow) + 1) >> 1;

	daddr = (WORD *) (bm->Planes[0]);
	daddr += dmodulo * y1;

	OwnBlitter();
	WaitBlit();

	Blitter->dsource = daddr;
	Blitter->dmod = 0;
	if (color & 1)
		Blitter->con0 = (1 << 8) | (0xff);
	else	Blitter->con0 = (1 << 8);
	Blitter->bltsize = ((y2-y1) << 6) | dmodulo;
	color >>= 1;
	
	for (i = 1; i < bm->Depth; i++) {
		WaitBlit();
		Blitter->dsource = daddr +
			(((WORD *)bm->Planes[i]) - ((WORD *)bm->Planes[0]));
		if (color & 1)
			Blitter->con0 = (1 << 8) | (0xff);
		else	Blitter->con0 = (1 << 8);
		color >>= 1;
		Blitter->bltsize = ((y2 - y1) << 6) | dmodulo;
	}
	
	DisownBlitter();
}
SHAR_EOF
if test 5261 -ne "`wc -c myblit.c`"
then
echo shar: error transmitting myblit.c '(should have been 5261 characters)'
fi
echo shar: extracting screen.c '(5319 characters)'
cat << \SHAR_EOF > screen.c
/* screen.c -- code to open a screen and then call render */
#include <exec/types.h>
#include <stdio.h>
#include <math.h>
#include <intuition/intuition.h>

#include "globals.h"

#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include <proto/layers.h>

struct IntuitionBase *IntuitionBase = NULL;
struct GfxBase *GfxBase = NULL;
struct LayersBase *LayersBase = NULL;

#define IREV 29
#define GREV 29

char defaultfile[] = "balls.default.dat";

#define DEPTH 6
int depth = DEPTH;

struct BitMap pbitmap = {	/* picture (screen) bitmap (*sbitmap) */
	0, 0, 0, 0, 0,
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};

struct BitMap tbitmap = {	/* temp (exact) bitmap */
	0, 0, 0, 0, 0,
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};

struct BitMap ibitmap = {	/* image bitmap */
	0, 0, 0, 0, 0,
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};

struct BitMap mbitmap = {	/* mask bitmap */
	0, 0, 0, 0, 0,
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};

struct NewScreen mynewscreen = {
	0, 0, WIDTH, 200, DEPTH,
	0, 15,
	HAM,
	CUSTOMSCREEN | CUSTOMBITMAP,
	NULL,
	"B & W   Low Res Screen",
	NULL,
	&pbitmap,
	};

struct Screen *myscreen = NULL;
struct ViewPort *vp;
struct BitMap *sbitmap = NULL;

struct NewWindow mynewwindow = {
	0, 1, WIDTH, 199,
	0, 15,
	MOUSEBUTTONS | MOUSEMOVE | CLOSEWINDOW,
	WINDOWCLOSE | SIMPLE_REFRESH | /* BACKDROP | */ BORDERLESS | 
		REPORTMOUSE | ACTIVATE,
	NULL,
	NULL,
	"   Please Wait . . . ",
	NULL,
	NULL,
	0, 0, 0, 0,
	CUSTOMSCREEN,
	};

struct Window *mywindow = NULL;

int bw = 0;

UWORD bwcolortable[16] = {
	0x000, 0x111, 0x222, 0x333, 0x444, 0x555, 0x666, 0x777,
	0x888, 0x999, 0xaaa, 0xbbb, 0xccc, 0xddd, 0xeee, 0xfff};

void
main(argc,argv)
int argc;
char *argv[];
{
	int i;
	void cleanup();

	switch (argc) {
		case 0: readballs(defaultfile);
			break;
		case 2:	readballs(argv[1]);
			break;
		case 3:	if (strcmp(argv[1],"-bw") == 0) {
				setbw();
				readballs(argv[2]);
				break;
			}
		default:dodefault();
	}

	onbreak(&cleanup);

	initrender();

	IntuitionBase = (struct IntuitionBase *)
		OpenLibrary("intuition.library",IREV);
	if (IntuitionBase == NULL) panic("Can't open intuition");
	GfxBase = (struct GfxBase *)
		OpenLibrary("graphics.library",GREV);
	if (GfxBase == NULL) panic("Can't open GfxBase");

	InitBitMap(&pbitmap,depth,WIDTH,HEIGHT);
	for (i=0; i < depth; i++) {
		pbitmap.Planes[i] = (PLANEPTR)AllocRaster(WIDTH,HEIGHT);
		if (pbitmap.Planes[i] == NULL)
			panic("Not enough memory for screen");
		BltClear(pbitmap.Planes[i],RASSIZE(WIDTH,HEIGHT),0);
	}
	if (!bw) {
	    InitBitMap(&tbitmap,depth,WIDTH,SMHEIGHT);
	    for (i=0; i < depth; i++) {
		tbitmap.Planes[i] = (PLANEPTR)AllocRaster(WIDTH,SMHEIGHT);
		if (tbitmap.Planes[i] == NULL)
			panic("Not enough memory for temp bit map");
		BltClear(tbitmap.Planes[i],RASSIZE(WIDTH,SMHEIGHT),0);
	    }
	}
	InitBitMap(&ibitmap,depth,maskw,maskh);
	for (i=0; i < depth; i++) {
		ibitmap.Planes[i] = (PLANEPTR)AllocRaster(maskw,maskh);
		if (ibitmap.Planes[i] == NULL)
			panic("Not enough memory for image bit map");
		BltClear(ibitmap.Planes[i],RASSIZE(maskw,maskh),0);
	}
	InitBitMap(&mbitmap,1,maskw,maskh);
	mbitmap.Planes[0] = (PLANEPTR)AllocRaster(maskw,maskh);
	if (mbitmap.Planes[0] == NULL)
		panic("Not enough memory for mask bit map");
	BltClear(mbitmap.Planes[0],RASSIZE(maskw,maskh),0);

	myscreen = (struct Screen *) OpenScreen(&mynewscreen);
	if (myscreen == NULL) panic("Can't open screen");
	vp = &(myscreen->ViewPort);
	sbitmap = &(myscreen->BitMap);

	mynewwindow.Screen = myscreen;
	mywindow = (struct Window *) OpenWindow(&mynewwindow);
	if (mywindow == NULL) panic("Can't open window");

	if (bw) LoadRGB4(&myscreen->ViewPort,bwcolortable,16);
	else    LoadRGB4(&myscreen->ViewPort,colortable,16);
	RethinkDisplay();

	render();

	cleanup();
}

void
panic(str)
char *str;
{
	fprintf(stderr,"%s\n",str);
	fflush(stderr);
	cleanup();
}

void
cleanup()
{
	int i;

	if (mywindow) CloseWindow(mywindow);
	if (myscreen) CloseScreen(myscreen);
	if (mbitmap.Planes[0]) FreeRaster(mbitmap.Planes[0],maskw,maskh);
	for (i = depth-1; i >= 0; i--) if (ibitmap.Planes[i])
		FreeRaster(ibitmap.Planes[i],maskw,maskh);
	for (i = depth-1; i >= 0; i--) if (tbitmap.Planes[i])
		FreeRaster(tbitmap.Planes[i],WIDTH,SMHEIGHT);
	for (i = depth-1; i >= 0; i--) if (pbitmap.Planes[i])
		FreeRaster(pbitmap.Planes[i],WIDTH,HEIGHT);
	if (GfxBase)  CloseLibrary((struct Library *)GfxBase);
	if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
	exit(0);
}

void
setbw()
{
	bw = TRUE;
	mynewscreen.Depth = depth = 4;
	mynewscreen.ViewModes &= ~HAM;
}

void
dodefault()
{
  printf("  %c33manimballs%c31m - An animation hack by JimG\n\n",0x9b,0x9b);
  printf("Usage: animballs [-bw] ballsfile\n\n");
  printf("  You have invoked animballs without parameters. I will use\n");
  printf("a default balls file (balls.default.dat). You should read the\n");
  printf("README file to see how to run this program. As a quick intro,\n");
  printf("there will be a delay and then you will see some balls appear.\n");
  printf("Press and hold the left mouse button, then drag the mouse to\n");
  printf("rotate the balls in 3-space. Click on the close gadget to end.\n\n");
  printf("Press <Return> to continue:");

  (void) getc(stdin);
  readballs(defaultfile);
}

SHAR_EOF
if test 5319 -ne "`wc -c screen.c`"
then
echo shar: error transmitting screen.c '(should have been 5319 characters)'
fi
#	End of shell archive
exit 0

ain@j.cc.purdue.edu (Patrick White) (03/09/88)

Program Name:	spheres  (part 2 of 2)
Submitted By:	guilford@csv.rpi.edu (Jim Guilford)
Summary:	Rotate spheres in 3-D according to mouse movements.
Poster Boy:  Pat White  (ain@j.cc.purdue.edu)
Untested.

NOTES:
   Docs and data posted in separate shar.
   Reshared it.
   Didn't try compiling it.


-- Pat White   (co-moderator comp.sources/binaries.amiga)
UUCP: j.cc.purdue.edu!ain  BITNET: PATWHITE@PURCCVM   PHONE: (317) 743-8421
U.S.  Mail:  320 Brown St. apt. 406,    West Lafayette, IN 47906

========================================


#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:	Shell Archiver
#	Run the following text with /bin/sh to create:
#	data.c
# This archive created: Mon Mar  7 19:28:03 1988
# By:	Patrick White (PUCC Land, USA)
echo shar: extracting data.c '(55772 characters)'
cat << \SHAR_EOF > data.c
/* data.c - table of data for HAM routines.                 */

/* color[16] - colormap containing rgb values fairly evenly */
/*             spread throughout 16x16x16 space.            */
/* near[4096] - table of distance. For each r,g,b           */
/*              address = (r<<8 | g<<4 | b) & 0xfff         */
/*              near>>4 gives the nearest color (index) and */
/*              near & 0x0f gives the distance.             */
/* nearmc[4096] - table of distance minus color             */
/*       This contains the nearest color ignoring a color   */
/*       (nearmc >> 8) & 0xf is for red,                    */
/*       (nearmc >> 4) & 0xf is for green,                  */
/*       and nearmc & 0xf is for blue                       */

#include <exec/types.h>

UWORD colortable[16] = {
	0x000,
	0x466,
	0x372,
	0xc23,
	0x3d3,
	0x32c,
	0xcc2,
	0xc3d,
	0x3cd,
	0xcdc,
	0x08a,
	0x808,
	0x880,
	0xf77,
	0x8f8,
	0x88f
};

UBYTE near[4096] = {
	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 
	0x08, 0x58, 0x57, 0x56, 0x55, 0x56, 0x57, 0x58,
	0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 
	0x58, 0x57, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x58, 
	0x57, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x18, 
	0xa7, 0xa6, 0xa5, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x17, 
	0xa6, 0xa5, 0xa4, 0xa5, 0x55, 0x56, 0x57, 0x58,
	0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16, 
	0xa5, 0xa4, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
	0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15, 
	0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
	0x25, 0x24, 0x23, 0x24, 0x25, 0x16, 0x15, 0xa4, 
	0xa3, 0xa2, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
	0x26, 0x25, 0x24, 0x25, 0x26, 0xa5, 0xa4, 0xa3, 
	0xa2, 0xa1, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5,
	0x27, 0x26, 0x25, 0x26, 0x27, 0xa6, 0xa5, 0xa4, 
	0xa3, 0xa2, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
	0x28, 0x27, 0x26, 0x46, 0x47, 0xa7, 0xa6, 0xa5, 
	0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0x85, 0x86, 0x87,
	0x48, 0x47, 0x46, 0x45, 0x46, 0x47, 0xa7, 0xa6, 
	0xa5, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0x86,
	0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0xa7, 
	0xa6, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47, 
	0xa7, 0xa6, 0xa5, 0x86, 0x85, 0x84, 0x85, 0x86,
	0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0x48, 
	0xa8, 0xa7, 0xa6, 0x87, 0x86, 0x85, 0x86, 0x87,
	0x48, 0x47, 0x46, 0x45, 0x46, 0x47, 0x48, 0x49, 
	0xe8, 0xa8, 0xa7, 0x88, 0x87, 0x86, 0x87, 0x88,
	0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 
	0xb7, 0x57, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x58, 
	0x57, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x57, 
	0x56, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x17, 
	0x57, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16, 
	0x17, 0xa6, 0xa5, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0xa5, 0xa4, 0xa5, 0x55, 0x56, 0x57, 0x58,
	0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0xa4, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
	0x24, 0x23, 0x22, 0x23, 0x24, 0x15, 0x14, 0x15, 
	0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
	0x25, 0x24, 0x23, 0x24, 0x25, 0x16, 0x15, 0xa4, 
	0xa3, 0xa2, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
	0x26, 0x25, 0x24, 0x25, 0x26, 0x17, 0x16, 0xa5, 
	0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0x85, 0x86, 0x87,
	0x27, 0x26, 0x25, 0x45, 0x46, 0x47, 0x17, 0xa6, 
	0xa5, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0x86,
	0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0xa7, 
	0xa6, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47, 
	0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0x47, 0x87, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47, 
	0x48, 0x88, 0x87, 0x86, 0x85, 0x84, 0x85, 0x86,
	0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0x48, 
	0xe7, 0xe8, 0x88, 0x87, 0x86, 0x85, 0x86, 0x87,
	0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xb7, 
	0xb6, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x57, 
	0x56, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x56, 
	0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
	0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16, 
	0x56, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x16, 0xa5, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0xa4, 0xa5, 0x55, 0x56, 0x57, 0x58,
	0x23, 0x22, 0x21, 0x22, 0x23, 0x14, 0x13, 0x14, 
	0x15, 0xa4, 0xa3, 0xa4, 0xa5, 0x86, 0x87, 0xf7,
	0x24, 0x23, 0x22, 0x23, 0x24, 0x15, 0x14, 0x15, 
	0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0x85, 0x86, 0xf6,
	0x25, 0x24, 0x23, 0x24, 0x25, 0x16, 0x15, 0x16, 
	0xa5, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0x86,
	0x26, 0x25, 0x24, 0x44, 0x45, 0x46, 0x16, 0x17, 
	0xa6, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47, 
	0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
	0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45, 
	0x46, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0x47, 0x87, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47, 
	0xe6, 0xe7, 0x87, 0x86, 0x85, 0x84, 0x85, 0x86,
	0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0xb6, 
	0xb5, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x56, 
	0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
	0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x55, 
	0x54, 0x53, 0x52, 0x51, 0x50, 0x51, 0x52, 0x53,
	0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15, 
	0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
	0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x23, 0x22, 0x21, 0x22, 0x13, 0x12, 0x11, 0x12, 
	0x13, 0x14, 0x15, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x22, 0x21, 0x20, 0x21, 0x22, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0xa4, 0xa5, 0x55, 0x85, 0x86, 0xf6,
	0x23, 0x22, 0x21, 0x22, 0x23, 0x14, 0x13, 0x14, 
	0x15, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0xf5,
	0x24, 0x23, 0x22, 0x23, 0x24, 0x15, 0x14, 0x15, 
	0x16, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x25, 0x24, 0x23, 0x43, 0x44, 0x45, 0x15, 0x16, 
	0x17, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
	0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45, 
	0x85, 0x84, 0x83, 0x82, 0x81, 0x80, 0x81, 0x82,
	0x43, 0x42, 0x41, 0x40, 0x41, 0x42, 0x43, 0x44, 
	0x45, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
	0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45, 
	0x46, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0xb5, 
	0xb4, 0xb5, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x15, 0x16, 
	0xb5, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x06, 0x07, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15, 
	0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
	0x07, 0x26, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x26, 0x25, 0x24, 0x15, 0x14, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x25, 0x24, 0x23, 0x14, 0x13, 0x12, 0x11, 0x12, 
	0x13, 0x14, 0x15, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x24, 0x23, 0x22, 0x13, 0x12, 0x11, 0x10, 0x11, 
	0x12, 0x13, 0x14, 0x15, 0x55, 0x56, 0x57, 0xf6,
	0x23, 0x22, 0x21, 0x22, 0x13, 0x12, 0x11, 0x12, 
	0x13, 0x14, 0x15, 0x16, 0x56, 0x86, 0xf6, 0xf5,
	0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0xa4, 0xa5, 0x86, 0x85, 0xf5, 0xf4,
	0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x16, 0xa5, 0x86, 0x85, 0x84, 0x85, 0xf5,
	0x26, 0x25, 0x24, 0x44, 0x45, 0x15, 0x14, 0x15, 
	0x16, 0x17, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x15, 0x16, 
	0x17, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
	0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45, 
	0x46, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0xe5, 
	0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0x86,
	0x05, 0x06, 0x07, 0x08, 0xb7, 0xb6, 0xb5, 0xb4, 
	0xb3, 0xb4, 0xb5, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x06, 0x07, 0x08, 0x38, 0x18, 0x17, 0x16, 0xb5, 
	0xb4, 0xb5, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x07, 0x08, 0x27, 0x37, 0x17, 0x16, 0x15, 0x16, 
	0xb5, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
	0x08, 0x27, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0x27, 0x26, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x16, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x26, 0x25, 0x24, 0x15, 0x14, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0x16, 0x56, 0x55, 0x56, 0x57, 0xf6,
	0x25, 0x24, 0x23, 0x14, 0x13, 0x12, 0x11, 0x12, 
	0x13, 0x14, 0x15, 0x16, 0x56, 0x57, 0xf6, 0xf5,
	0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0x16, 0x17, 0x57, 0xf6, 0xf5, 0xf4,
	0xc3, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x16, 0xa5, 0xa6, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc4, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x17, 0xa6, 0x87, 0x86, 0x85, 0xf5, 0xf4,
	0xc5, 0x26, 0x25, 0x45, 0x46, 0x16, 0x15, 0x16, 
	0x17, 0x18, 0x87, 0x86, 0x85, 0x84, 0x85, 0xf5,
	0xc6, 0x46, 0x45, 0x44, 0x45, 0x46, 0x16, 0x17, 
	0xe7, 0x87, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47, 
	0xe6, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
	0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46, 
	0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0xe5, 
	0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0x86,
	0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0xe5, 0xe4, 
	0xe3, 0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x86, 0x87,
	0x06, 0x07, 0x08, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 
	0xb2, 0xb3, 0xb4, 0xb5, 0x55, 0x56, 0x57, 0x58,
	0x07, 0x08, 0x38, 0x37, 0xb7, 0xb6, 0xb5, 0xb4, 
	0xb3, 0xb4, 0xb5, 0x55, 0x54, 0x55, 0x56, 0x57,
	0x08, 0x38, 0x37, 0x36, 0x37, 0x17, 0x16, 0xb5, 
	0xb4, 0xb5, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
	0xc7, 0x28, 0x27, 0x37, 0x17, 0x16, 0x15, 0x16, 
	0xb5, 0xb6, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
	0xc6, 0x27, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x17, 0x57, 0x56, 0x55, 0x56, 0x57, 0xf6,
	0xc5, 0x26, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x16, 0x17, 0x57, 0x56, 0x57, 0xf6, 0xf5,
	0xc4, 0x25, 0x24, 0x15, 0x14, 0x13, 0x12, 0x13, 
	0x14, 0x15, 0x16, 0x17, 0x57, 0xf6, 0xf5, 0xf4,
	0xc3, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc2, 0xc3, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x17, 0xa6, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc3, 0xc4, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16, 
	0x17, 0x18, 0xa7, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc4, 0xc5, 0x26, 0x46, 0x47, 0x17, 0x16, 0x17, 
	0xe7, 0xe8, 0x88, 0x87, 0x86, 0x85, 0xf5, 0xf4,
	0xc5, 0xc6, 0x46, 0x45, 0x46, 0x47, 0x17, 0xe7, 
	0xe6, 0xe7, 0x87, 0x86, 0x85, 0x84, 0x85, 0xf5,
	0xc6, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0xe6, 
	0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
	0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0xe5, 
	0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0x86,
	0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0xe5, 0xe4, 
	0xe3, 0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x86, 0x87,
	0x48, 0x47, 0x46, 0x45, 0x46, 0xe5, 0xe4, 0xe3, 
	0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x86, 0x87, 0x88,
	0x07, 0x08, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 
	0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
	0x08, 0x38, 0x37, 0x36, 0xb6, 0xb5, 0xb4, 0xb3, 
	0xb2, 0xb3, 0xb4, 0xb5, 0x55, 0x56, 0x57, 0x58,
	0xc7, 0x37, 0x36, 0x35, 0x36, 0xb6, 0xb5, 0xb4, 
	0xb3, 0xb4, 0xb5, 0x55, 0x54, 0x55, 0x56, 0x57,
	0xc6, 0xc7, 0x37, 0x36, 0x37, 0x17, 0x16, 0xb5, 
	0xb4, 0xb5, 0xb6, 0x56, 0x55, 0x75, 0x76, 0xf6,
	0xc5, 0xc6, 0x27, 0x37, 0x17, 0x16, 0x15, 0x16, 
	0xb5, 0xb6, 0xb7, 0x57, 0x56, 0x76, 0xf6, 0xf5,
	0xc4, 0xc5, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x17, 0x18, 0x58, 0x57, 0xf6, 0xf5, 0xf4,
	0xc3, 0xc4, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14, 
	0x15, 0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc2, 0xc3, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x15, 0x16, 
	0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
	0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0x17, 
	0xe7, 0xe8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0x18, 0x17, 0xe7, 
	0xe6, 0xe7, 0xe8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc4, 0xc5, 0x66, 0x46, 0x47, 0x48, 0xe7, 0xe6, 
	0xe5, 0xe6, 0xe7, 0x87, 0x86, 0x85, 0xf5, 0xf4,
	0xc5, 0x66, 0x65, 0x45, 0x46, 0x47, 0xe6, 0xe5, 
	0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0xf5,
	0xc6, 0x46, 0x45, 0x44, 0x45, 0x46, 0xe5, 0xe4, 
	0xe3, 0xe4, 0xe5, 0x96, 0x95, 0x85, 0x86, 0xf6,
	0xc7, 0x47, 0x46, 0x45, 0x46, 0xe5, 0xe4, 0xe3, 
	0xe2, 0xe3, 0xe4, 0xe5, 0x96, 0x86, 0x87, 0xf7,
	0xc8, 0x48, 0x47, 0x46, 0xe5, 0xe4, 0xe3, 0xe2, 
	0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
	0x08, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 
	0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
	0xc7, 0x37, 0x36, 0x35, 0xb5, 0xb4, 0xb3, 0xb2, 
	0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x77, 0xf7,
	0xc6, 0x36, 0x35, 0x34, 0x35, 0xb5, 0xb4, 0xb3, 
	0xb2, 0xb3, 0xb4, 0xb5, 0x55, 0x75, 0x76, 0xf6,
	0xc5, 0xc6, 0x36, 0x35, 0x36, 0xb6, 0xb5, 0xb4, 
	0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0xf5,
	0xc4, 0xc5, 0xc6, 0x36, 0x37, 0x17, 0x16, 0xb5, 
	0xb4, 0xb5, 0xb6, 0x77, 0x76, 0x75, 0xf5, 0xf4,
	0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0x15, 0x16, 
	0xb5, 0xb6, 0xb7, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x15, 0x14, 0x15, 
	0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x15, 0x16, 
	0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
	0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x17, 
	0xe7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
	0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0xe7, 
	0xe6, 0xe7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
	0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xe7, 0xe6, 
	0xe5, 0xe6, 0xe7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc3, 0xc4, 0x65, 0x66, 0x67, 0xe7, 0xe6, 0xe5, 
	0xe4, 0xe5, 0xe6, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
	0xc4, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 
	0xe3, 0xe4, 0xe5, 0x96, 0x95, 0x85, 0xf5, 0xf4,
	0xc5, 0x66, 0x65, 0x45, 0x46, 0xe5, 0xe4, 0xe3, 
	0xe2, 0xe3, 0xe4, 0x95, 0x94, 0x95, 0x96, 0xf5,
	0xc6, 0x67, 0x66, 0x46, 0xe5, 0xe4, 0xe3, 0xe2, 
	0xe1, 0xe2, 0xe3, 0xe4, 0x95, 0x96, 0x97, 0xf6,
	0xc7, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 
	0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
	0x38, 0x37, 0x36, 0x35, 0xb5, 0xb4, 0xb3, 0xb2, 
	0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x77, 0x78,
	0x37, 0x36, 0x35, 0x34, 0x35, 0xb5, 0xb4, 0xb3, 
	0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x76, 0x77,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0xb5, 0xb4, 
	0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0x76,
	0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0xb6, 0xb5, 
	0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0xc5, 0xc6, 0x36, 0x35, 0x36, 0x37, 0x17, 0xb6, 
	0xb5, 0xb6, 0x77, 0x76, 0x75, 0x74, 0x75, 0xf5,
	0xc4, 0xc5, 0xc6, 0x36, 0x37, 0x17, 0x16, 0x17, 
	0xb6, 0xb7, 0x78, 0x77, 0x76, 0x75, 0xf5, 0xf4,
	0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0x15, 0x16, 
	0x17, 0x18, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0xd6, 
	0xd7, 0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0xd7, 
	0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
	0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0x18, 0xd8, 
	0xe7, 0xe8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc3, 0xc4, 0x65, 0x66, 0x67, 0x68, 0xe8, 0xe7, 
	0xe6, 0xe7, 0x98, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
	0xc4, 0x65, 0x64, 0x65, 0x66, 0x67, 0xe7, 0xe6, 
	0xe5, 0xe6, 0x97, 0x96, 0x95, 0x96, 0xf5, 0xf4,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5, 
	0xe4, 0xe5, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
	0x66, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 
	0xe3, 0xe4, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x67, 0x66, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 0xe3, 
	0xe2, 0xe3, 0xe4, 0x95, 0x94, 0x95, 0x96, 0x97,
	0x68, 0x67, 0x66, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 
	0xe1, 0xe2, 0xe3, 0xe4, 0x95, 0x96, 0x97, 0x98,
	0x37, 0x36, 0x35, 0x34, 0x35, 0xb5, 0xb4, 0xb3, 
	0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x76, 0x77,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0xb5, 0xb4, 
	0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0x76,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0xb5, 
	0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xb6, 
	0xb5, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xb7, 
	0xb6, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0xc5, 0xc6, 0x36, 0x35, 0x36, 0x37, 0x17, 0xd7, 
	0xb7, 0x78, 0x77, 0x76, 0x75, 0x74, 0x75, 0xf5,
	0xc4, 0xc5, 0xc6, 0x36, 0x37, 0x17, 0x16, 0xd6, 
	0xd7, 0xd8, 0x78, 0x77, 0x76, 0x75, 0xf5, 0xf4,
	0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xd7, 0xd6, 0xd5, 
	0xd6, 0xd7, 0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
	0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xd7, 0xd6, 
	0xd7, 0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
	0xc3, 0xc4, 0x65, 0x66, 0x67, 0x68, 0xd8, 0xd7, 
	0xd8, 0x99, 0x98, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
	0xc4, 0x65, 0x64, 0x65, 0x66, 0x67, 0x68, 0xd8, 
	0xe7, 0x98, 0x97, 0x96, 0x95, 0x96, 0xf5, 0xf4,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0xe7, 
	0xe6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xe6, 
	0xe5, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5, 
	0xe4, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x66, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 
	0xe3, 0xe4, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x67, 0x66, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 0xe3, 
	0xe2, 0xe3, 0xe4, 0x95, 0x94, 0x95, 0x96, 0x97,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0xb5, 0xb4, 
	0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0x76,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0xb5, 
	0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 
	0xb5, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 
	0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0x37, 
	0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xd6, 
	0xd7, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0xc5, 0xc6, 0x36, 0x35, 0x36, 0x37, 0xd6, 0xd5, 
	0xd6, 0xd7, 0x77, 0x76, 0x75, 0x74, 0x75, 0xf5,
	0xc4, 0xc5, 0x66, 0x36, 0x37, 0xd6, 0xd5, 0xd4, 
	0xd5, 0xd6, 0xd7, 0x77, 0x76, 0x75, 0xf5, 0xf4,
	0xc3, 0xc4, 0x65, 0x66, 0x67, 0xd7, 0xd6, 0xd5, 
	0xd6, 0xd7, 0x98, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
	0xc4, 0x65, 0x64, 0x65, 0x66, 0x67, 0xd7, 0xd6, 
	0xd7, 0x98, 0x97, 0x96, 0x95, 0x96, 0xf5, 0xf4,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0xd7, 
	0x98, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 
	0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 
	0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x96, 
	0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5, 
	0xe4, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x66, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 
	0xe3, 0xe4, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0xb5, 
	0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 
	0xb5, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0x33, 0x32, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34, 
	0x35, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
	0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 
	0x75, 0x74, 0x73, 0x72, 0x71, 0x70, 0x71, 0x72,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 
	0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5, 
	0xd6, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0xc5, 0x66, 0x65, 0x35, 0x36, 0xd5, 0xd4, 0xd3, 
	0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0xf5,
	0xc4, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x97, 0x96, 0x95, 0x75, 0xf5, 0xf4,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5, 
	0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xd6, 
	0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 
	0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x62, 0x61, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 
	0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
	0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x95, 
	0x94, 0x93, 0x92, 0x91, 0x90, 0x91, 0x92, 0x93,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x96, 
	0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5, 
	0xe4, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xb6, 
	0xb5, 0xb6, 0x77, 0x76, 0x75, 0x74, 0x75, 0x76,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 
	0xb6, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35, 
	0x36, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 
	0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5, 
	0xd6, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0xc7, 0x37, 0x36, 0x35, 0x36, 0xd5, 0xd4, 0xd3, 
	0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0x76,
	0xc6, 0x67, 0x66, 0x36, 0xd5, 0xd4, 0xd3, 0xd2, 
	0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x76, 0xf6,
	0xc5, 0x66, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 0xd3, 
	0xd4, 0xd5, 0xd6, 0x97, 0x96, 0x76, 0xf6, 0xf5,
	0x66, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x97, 0x96, 0x95, 0x96, 0x97, 0xf6,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5, 
	0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xd6, 
	0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 
	0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x96, 
	0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0x97, 
	0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x66, 0x65, 0x64, 0x65, 0x66, 0x67, 0xe7, 0xe6, 
	0xe5, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xb7, 
	0xb6, 0xb7, 0x78, 0x77, 0x76, 0x75, 0x76, 0x77,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0x37, 
	0xb7, 0x78, 0x77, 0x76, 0x75, 0x74, 0x75, 0x76,
	0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36, 
	0x37, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5, 
	0xd6, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
	0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0x38, 0x37, 0x36, 0x35, 0x36, 0xd5, 0xd4, 0xd3, 
	0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0x76,
	0xc8, 0x38, 0x37, 0x36, 0xd5, 0xd4, 0xd3, 0xd2, 
	0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x76, 0x77,
	0xc7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 
	0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x77, 0xf7,
	0xc6, 0x67, 0x66, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 
	0xd3, 0xd4, 0xd5, 0xd6, 0x97, 0x77, 0xf7, 0xf6,
	0x67, 0x66, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 0xd3, 
	0xd4, 0xd5, 0xd6, 0x97, 0x96, 0x97, 0x98, 0xf7,
	0x66, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x97, 0x96, 0x95, 0x96, 0x97, 0x98,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5, 
	0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
	0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xd6, 
	0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0x97, 
	0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
	0x66, 0x65, 0x64, 0x65, 0x66, 0x67, 0x68, 0x98, 
	0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x67, 0x66, 0x65, 0x66, 0x67, 0x68, 0xe8, 0xe7, 
	0xe6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
	0x38, 0x37, 0x36, 0x35, 0x36, 0x37, 0x38, 0xd7, 
	0xb7, 0xb8, 0x79, 0x78, 0x77, 0x76, 0x77, 0x78,
	0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xd6, 
	0xd7, 0xd8, 0x78, 0x77, 0x76, 0x75, 0x76, 0x77,
	0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5, 
	0xd6, 0xd7, 0x77, 0x76, 0x75, 0x74, 0x75, 0x76,
	0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
	0x38, 0x37, 0x36, 0x35, 0x36, 0xd5, 0xd4, 0xd3, 
	0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0x76,
	0x39, 0x38, 0x37, 0x36, 0xd5, 0xd4, 0xd3, 0xd2, 
	0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x76, 0x77,
	0xd8, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 
	0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x77, 0x78,
	0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, 
	0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
	0xc7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 
	0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xf7,
	0x68, 0x67, 0x66, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 
	0xd3, 0xd4, 0xd5, 0xd6, 0x97, 0x98, 0x99, 0xf8,
	0x67, 0x66, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 0xd3, 
	0xd4, 0xd5, 0xd6, 0x97, 0x96, 0x97, 0x98, 0x99,
	0x66, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 
	0xd5, 0xd6, 0x97, 0x96, 0x95, 0x96, 0x97, 0x98,
	0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5, 
	0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
	0x66, 0x65, 0x64, 0x65, 0x66, 0x67, 0xd7, 0xd6, 
	0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
	0x67, 0x66, 0x65, 0x66, 0x67, 0x68, 0xd8, 0xd7, 
	0x98, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
	0x68, 0x67, 0x66, 0x67, 0x68, 0x69, 0xd9, 0xd8, 
	0xe7, 0x98, 0x97, 0x96, 0x95, 0x96, 0x97, 0x98
};

UWORD nearmc[4096] = {
	0x000, 0x000, 0x000, 0x300, 0x300, 0xb00, 0xb10, 0xba0, 
	0xba0, 0xba0, 0xba0, 0x5a0, 0x5a0, 0x580, 0x580, 0x580,
	0x000, 0x000, 0x300, 0x300, 0x300, 0x300, 0xb10, 0xba0, 
	0xba0, 0xba0, 0x5a0, 0x5a0, 0x5a0, 0x580, 0x580, 0x580,
	0x000, 0x300, 0x300, 0x300, 0x300, 0x300, 0x310, 0xba0, 
	0xba0, 0x5a0, 0x5a0, 0x5a0, 0x5a0, 0x580, 0x580, 0x580,
	0x000, 0x300, 0x300, 0x300, 0x300, 0x300, 0x110, 0x1a0, 
	0xba0, 0x5a0, 0x5a0, 0x5a0, 0x5a0, 0x780, 0x780, 0x780,
	0x000, 0x200, 0x200, 0x300, 0x300, 0x100, 0x110, 0x1a0, 
	0x1a0, 0x1a0, 0x5a0, 0x5a0, 0x5a0, 0x780, 0x780, 0x780,
	0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x10a, 0x11a, 0x1aa, 
	0x1aa, 0x1aa, 0xaaa, 0x5aa, 0x5aa, 0x78a, 0x78a, 0xf8a,
	0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x10a, 0x11a, 0x1aa, 
	0x1aa, 0x1aa, 0xaaa, 0xaaa, 0x5aa, 0x78a, 0xf8a, 0xf8a,
	0xc0a, 0x20a, 0x20a, 0x20a, 0x20a, 0x10a, 0x11a, 0xdaa, 
	0xdaa, 0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xf8a, 0xf8a, 0xf8a,
	0xc0a, 0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x11a, 0xdaa, 
	0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xf8a, 0xf8a, 0xf8a,
	0xc0a, 0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x11a, 0xdaa, 
	0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xaaa, 0x88a, 0xf8a, 0xf8a,
	0xc0a, 0x60a, 0x60a, 0x40a, 0x40a, 0x10a, 0x11a, 0xdaa, 
	0xaaa, 0xaaa, 0xaaa, 0xaaa, 0x8aa, 0x88a, 0x88a, 0xf8a,
	0x60a, 0x60a, 0x60a, 0x40a, 0x40a, 0x40a, 0x11a, 0xdaa, 
	0xeaa, 0xaaa, 0xaaa, 0x8aa, 0x8aa, 0x88a, 0x88a, 0x88a,
	0x608, 0x608, 0x608, 0x408, 0x408, 0x408, 0x418, 0xea8, 
	0xea8, 0x8a8, 0x8a8, 0x8a8, 0x8a8, 0x888, 0x888, 0x888,
	0x404, 0x404, 0x404, 0x404, 0x404, 0x404, 0x414, 0xea4, 
	0xea4, 0x9a4, 0x9a4, 0x9a4, 0x9a4, 0x884, 0x884, 0x884,
	0x404, 0x404, 0x404, 0x404, 0x404, 0x404, 0xe14, 0xea4, 
	0xea4, 0xea4, 0x9a4, 0x9a4, 0x9a4, 0x884, 0x884, 0x884,
	0x404, 0x404, 0x404, 0x404, 0x404, 0xe04, 0xe14, 0xea4, 
	0xea4, 0xea4, 0xea4, 0x9a4, 0x9a4, 0x884, 0x884, 0x884,
	0x000, 0x000, 0x020, 0x340, 0x340, 0xb10, 0xb10, 0xb10, 
	0xba0, 0xba0, 0xba0, 0x5a0, 0x550, 0x580, 0x580, 0x580,
	0x000, 0x000, 0x320, 0x340, 0x340, 0x310, 0xb10, 0xb10, 
	0xba0, 0xba0, 0x5a0, 0x5a0, 0x550, 0x580, 0x580, 0x580,
	0x005, 0x305, 0x325, 0x345, 0x345, 0x315, 0x315, 0xb15, 
	0xba5, 0x5a5, 0x5a5, 0x5a5, 0x555, 0x585, 0x585, 0x585,
	0x005, 0x305, 0x325, 0x345, 0x345, 0x315, 0x115, 0x115, 
	0xba5, 0x5a5, 0x5a5, 0x5a5, 0x555, 0x785, 0x785, 0x785,
	0x005, 0x205, 0x225, 0x345, 0x345, 0x115, 0x115, 0x115, 
	0x1a5, 0x1a5, 0x5a5, 0x5a5, 0x555, 0x785, 0x785, 0x785,
	0xc01, 0x201, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111, 
	0x1a1, 0x1a1, 0xaa1, 0x5a1, 0x551, 0x781, 0x781, 0xf81,
	0xc01, 0x201, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111, 
	0x1a1, 0x1a1, 0xaa1, 0xaa1, 0x551, 0x781, 0xf81, 0xf81,
	0xc02, 0x202, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12, 
	0xda2, 0xaa2, 0xaa2, 0xaa2, 0xa52, 0xf82, 0xf82, 0xf82,
	0xc0a, 0xc0a, 0x22a, 0x24a, 0x24a, 0x11a, 0x11a, 0xd1a, 
	0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xa5a, 0xf8a, 0xf8a, 0xf8a,
	0xc0a, 0xc0a, 0x22a, 0x24a, 0x24a, 0x11a, 0x11a, 0xd1a, 
	0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xa5a, 0x88a, 0xf8a, 0xf8a,
	0xc0a, 0x60a, 0x62a, 0x44a, 0x44a, 0x11a, 0x11a, 0xd1a, 
	0xaaa, 0xaaa, 0xaaa, 0xaaa, 0x85a, 0x88a, 0x88a, 0xf8a,
	0x608, 0x608, 0x628, 0x448, 0x448, 0x418, 0x118, 0xd18, 
	0xea8, 0xaa8, 0xaa8, 0x8a8, 0x858, 0x888, 0x888, 0x888,
	0x608, 0x608, 0x628, 0x448, 0x448, 0x418, 0x418, 0xe18, 
	0xea8, 0x8a8, 0x8a8, 0x8a8, 0x858, 0x888, 0x888, 0x888,
	0x404, 0x404, 0x424, 0x444, 0x444, 0x414, 0x414, 0xe14, 
	0xea4, 0x9a4, 0x9a4, 0x9a4, 0x954, 0x884, 0x884, 0x884,
	0x404, 0x404, 0x424, 0x444, 0x444, 0x414, 0xe14, 0xe14, 
	0xea4, 0xea4, 0x9a4, 0x9a4, 0x954, 0x884, 0x884, 0x884,
	0x404, 0x404, 0x424, 0x444, 0x444, 0xe14, 0xe14, 0xe14, 
	0xea4, 0xea4, 0xea4, 0x9a4, 0x954, 0x884, 0x884, 0x884,
	0x000, 0x020, 0x020, 0x340, 0x340, 0xb10, 0xb10, 0xb10, 
	0xb10, 0xba0, 0xba0, 0x550, 0x550, 0x580, 0x580, 0x580,
	0x005, 0x025, 0x325, 0x345, 0x345, 0x315, 0xb15, 0xb15, 
	0xb15, 0xba5, 0x5a5, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x005, 0x325, 0x325, 0x345, 0x345, 0x315, 0x315, 0xb15, 
	0xb15, 0x5a5, 0x5a5, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x005, 0x325, 0x325, 0x345, 0x345, 0x315, 0x115, 0x115, 
	0xb15, 0x5a5, 0x5a5, 0x555, 0x555, 0x785, 0x785, 0x785,
	0x005, 0x225, 0x225, 0x345, 0x345, 0x115, 0x115, 0x115, 
	0x115, 0x1a5, 0x5a5, 0x555, 0x555, 0x785, 0x785, 0x785,
	0xc01, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111, 
	0x111, 0x1a1, 0xaa1, 0x551, 0x551, 0x781, 0x781, 0xf81,
	0xc01, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111, 
	0x111, 0x1a1, 0xaa1, 0xa51, 0x551, 0x781, 0xf81, 0xf81,
	0xc02, 0x222, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12, 
	0xd12, 0xaa2, 0xaa2, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
	0xc02, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12, 
	0xa12, 0xaa2, 0xaa2, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
	0xc02, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12, 
	0xa12, 0xaa2, 0xaa2, 0xa52, 0xa52, 0x882, 0xf82, 0xf82,
	0xc08, 0x628, 0x628, 0x448, 0x448, 0x118, 0x118, 0xd18, 
	0xa18, 0xaa8, 0xaa8, 0xa58, 0x858, 0x888, 0x888, 0xf88,
	0x608, 0x628, 0x628, 0x448, 0x448, 0x418, 0x118, 0xd18, 
	0xe18, 0xaa8, 0xaa8, 0x858, 0x858, 0x888, 0x888, 0x888,
	0x608, 0x628, 0x628, 0x448, 0x448, 0x418, 0x418, 0xe18, 
	0xe18, 0x8a8, 0x8a8, 0x858, 0x858, 0x888, 0x888, 0x888,
	0x404, 0x424, 0x424, 0x444, 0x444, 0x414, 0x414, 0xe14, 
	0xe14, 0x9a4, 0x9a4, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x404, 0x424, 0x424, 0x444, 0x444, 0x414, 0xe14, 0xe14, 
	0xe14, 0xea4, 0x9a4, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x404, 0x424, 0x424, 0x444, 0x444, 0xe14, 0xe14, 0xe14, 
	0xe14, 0xea4, 0xea4, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x025, 0x025, 0x025, 0x345, 0x345, 0xb15, 0xb15, 0xb15, 
	0xb15, 0xb55, 0xb55, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x025, 0x025, 0x325, 0x345, 0x345, 0x315, 0xb15, 0xb15, 
	0xb15, 0xb55, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x025, 0x325, 0x325, 0x345, 0x345, 0x315, 0x315, 0xb15, 
	0xb15, 0x555, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x025, 0x325, 0x325, 0x345, 0x345, 0x315, 0x115, 0x115, 
	0xb15, 0x555, 0x555, 0x555, 0x555, 0x785, 0x785, 0x785,
	0x025, 0x225, 0x225, 0x345, 0x345, 0x115, 0x115, 0x115, 
	0x115, 0x155, 0x555, 0x555, 0x555, 0x785, 0x785, 0x785,
	0xc21, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111, 
	0x111, 0x151, 0xa51, 0x551, 0x551, 0x781, 0x781, 0xf81,
	0xc21, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111, 
	0x111, 0x151, 0xa51, 0xa51, 0x551, 0x781, 0xf81, 0xf81,
	0xc22, 0x222, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12, 
	0xd12, 0xa52, 0xa52, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
	0xc22, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12, 
	0xa12, 0xa52, 0xa52, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
	0xc22, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12, 
	0xa12, 0xa52, 0xa52, 0xa52, 0xa52, 0x882, 0xf82, 0xf82,
	0xc28, 0x628, 0x628, 0x448, 0x448, 0x118, 0x118, 0xd18, 
	0xa18, 0xa58, 0xa58, 0xa58, 0x858, 0x888, 0x888, 0xf88,
	0x628, 0x628, 0x628, 0x448, 0x448, 0x418, 0x118, 0xd18, 
	0xe18, 0xa58, 0xa58, 0x858, 0x858, 0x888, 0x888, 0x888,
	0x628, 0x628, 0x628, 0x448, 0x448, 0x418, 0x418, 0xe18, 
	0xe18, 0x858, 0x858, 0x858, 0x858, 0x888, 0x888, 0x888,
	0x424, 0x424, 0x424, 0x444, 0x444, 0x414, 0x414, 0xe14, 
	0xe14, 0x954, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x424, 0x424, 0x424, 0x444, 0x444, 0x414, 0xe14, 0xe14, 
	0xe14, 0xe54, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x424, 0x424, 0x424, 0x444, 0x444, 0xe14, 0xe14, 0xe14, 
	0xe14, 0xe54, 0xe54, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x025, 0x025, 0x025, 0x345, 0x315, 0xb15, 0xb15, 0xb15, 
	0xb15, 0xb15, 0xb55, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x025, 0x025, 0x325, 0x345, 0x315, 0x315, 0xb15, 0xb15, 
	0xb15, 0xb15, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x025, 0x325, 0x325, 0x345, 0x315, 0x315, 0x315, 0xb15, 
	0xb15, 0x515, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
	0x025, 0x325, 0x325, 0x345, 0x315, 0x315, 0x115, 0x115, 
	0xb15, 0x515, 0x555, 0x555, 0x555, 0x785, 0x785, 0x785,
	0x021, 0x221, 0x221, 0x341, 0x311, 0x111, 0x111, 0x111, 
	0x111, 0x111, 0x551, 0x551, 0x551, 0x781, 0x781, 0x781,
	0xc21, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111, 
	0x111, 0x111, 0xa51, 0x551, 0x551, 0x781, 0x781, 0xf81,
	0xc21, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111, 
	0x111, 0x111, 0xa51, 0xa51, 0x551, 0x781, 0xf81, 0xf81,
	0xc21, 0x221, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11, 
	0xd11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xf81,
	0xc21, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11, 
	0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xf81,
	0xc21, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11, 
	0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0x881, 0xf81, 0xf81,
	0xc28, 0x628, 0x628, 0x448, 0x418, 0x118, 0x118, 0xd18, 
	0xa18, 0xa18, 0xa58, 0xa58, 0x858, 0x888, 0x888, 0xf88,
	0x628, 0x628, 0x628, 0x448, 0x418, 0x418, 0x118, 0xd18, 
	0xe18, 0xa18, 0xa58, 0x858, 0x858, 0x888, 0x888, 0x888,
	0x628, 0x628, 0x628, 0x448, 0x418, 0x418, 0x418, 0xe18, 
	0xe18, 0x818, 0x858, 0x858, 0x858, 0x888, 0x888, 0x888,
	0x424, 0x424, 0x424, 0x444, 0x414, 0x414, 0x414, 0xe14, 
	0xe14, 0x914, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x424, 0x424, 0x424, 0x444, 0x414, 0x414, 0xe14, 0xe14, 
	0xe14, 0xe14, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x424, 0x424, 0x424, 0x444, 0x414, 0xe14, 0xe14, 0xe14, 
	0xe14, 0xe14, 0xe54, 0x954, 0x954, 0x884, 0x884, 0x884,
	0x0cb, 0x02b, 0x02b, 0x34b, 0x31b, 0xb1b, 0xb1b, 0xb1b, 
	0xb1b, 0xb1b, 0xb5b, 0x55b, 0x55b, 0x58b, 0x58b, 0x5fb,
	0x0c5, 0x025, 0x325, 0x345, 0x315, 0x315, 0xb15, 0xb15, 
	0xb15, 0xb15, 0x555, 0x555, 0x555, 0x585, 0x585, 0x5f5,
	0x0c5, 0x325, 0x325, 0x345, 0x315, 0x315, 0x315, 0xb15, 
	0xb15, 0x515, 0x555, 0x555, 0x555, 0x585, 0x585, 0x5f5,
	0x0c5, 0x325, 0x325, 0x345, 0x315, 0x315, 0x115, 0x115, 
	0xb15, 0x515, 0x555, 0x555, 0x555, 0x785, 0x785, 0x7f5,
	0x0c1, 0x221, 0x221, 0x341, 0x311, 0x111, 0x111, 0x111, 
	0x111, 0x111, 0x551, 0x551, 0x551, 0x781, 0x781, 0x7f1,
	0xcc1, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111, 
	0x111, 0x111, 0xa51, 0x551, 0x551, 0x781, 0x781, 0xff1,
	0xcc1, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111, 
	0x111, 0x111, 0xa51, 0xa51, 0x551, 0x781, 0xf81, 0xff1,
	0xcc1, 0x221, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11, 
	0xd11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xff1,
	0xcc1, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11, 
	0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xff1,
	0xcc1, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11, 
	0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0x881, 0xf81, 0xff1,
	0xcc8, 0x628, 0x628, 0x448, 0x418, 0x118, 0x118, 0xd18, 
	0xa18, 0xa18, 0xa58, 0xa58, 0x858, 0x888, 0x888, 0xff8,
	0x6c8, 0x628, 0x628, 0x448, 0x418, 0x418, 0x118, 0xd18, 
	0xe18, 0xa18, 0xa58, 0x858, 0x858, 0x888, 0x888, 0x8f8,
	0x6c8, 0x628, 0x628, 0x448, 0x418, 0x418, 0x418, 0xe18, 
	0xe18, 0x818, 0x858, 0x858, 0x858, 0x888, 0x888, 0x8f8,
	0x4c4, 0x424, 0x424, 0x444, 0x414, 0x414, 0x414, 0xe14, 
	0xe14, 0x914, 0x954, 0x954, 0x954, 0x884, 0x884, 0x8f4,
	0x4c4, 0x424, 0x424, 0x444, 0x414, 0x414, 0xe14, 0xe14, 
	0xe14, 0xe14, 0x954, 0x954, 0x954, 0x884, 0x884, 0x8f4,
	0x4ce, 0x42e, 0x42e, 0x44e, 0x41e, 0xe1e, 0xe1e, 0xe1e, 
	0xe1e, 0xe1e, 0xe5e, 0x95e, 0x95e, 0x88e, 0x88e, 0x8fe,
	0x0cb, 0x0cb, 0x02b, 0x34b, 0x31b, 0xb1b, 0xb1b, 0xb1b, 
	0xbbb, 0xbbb, 0xbbb, 0x55b, 0x55b, 0x58b, 0x5fb, 0x5fb,
	0x0cb, 0x0cb, 0x32b, 0x34b, 0x31b, 0x31b, 0xb1b, 0xb1b, 
	0xbbb, 0xbbb, 0x5bb, 0x55b, 0x55b, 0x58b, 0x5fb, 0x5fb,
	0x0c5, 0x3c5, 0x325, 0x345, 0x315, 0x315, 0x315, 0xb15, 
	0xbb5, 0x5b5, 0x5b5, 0x555, 0x555, 0x585, 0x5f5, 0x5f5,
	0x0c5, 0x3c5, 0x325, 0x345, 0x315, 0x315, 0x115, 0x115, 
	0xbb5, 0x5b5, 0x5b5, 0x555, 0x555, 0x785, 0x7f5, 0x7f5,
	0x0c1, 0x2c1, 0x221, 0x341, 0x311, 0x111, 0x111, 0x111, 
	0x1b1, 0x1b1, 0x5b1, 0x551, 0x551, 0x781, 0x7f1, 0x7f1,
	0xcc1, 0x2c1, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111, 
	0x1b1, 0x1b1, 0xab1, 0x551, 0x551, 0x781, 0x7f1, 0xff1,
	0xcc1, 0x2c1, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111, 
	0x1b1, 0x1b1, 0xab1, 0xa51, 0x551, 0x781, 0xff1, 0xff1,
	0xcc1, 0x2c1, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11, 
	0xdb1, 0xab1, 0xab1, 0xa51, 0xa51, 0xf81, 0xff1, 0xff1,
	0xccc, 0xccc, 0x22c, 0x24c, 0x21c, 0x11c, 0x11c, 0xd1c, 
	0xabc, 0xabc, 0xabc, 0xa5c, 0xa5c, 0xf8c, 0xffc, 0xffc,
	0xccc, 0xccc, 0x22c, 0x24c, 0x21c, 0x11c, 0x11c, 0xd1c, 
	0xabc, 0xabc, 0xabc, 0xa5c, 0xa5c, 0x88c, 0xffc, 0xffc,
	0xccc, 0x6cc, 0x62c, 0x44c, 0x41c, 0x11c, 0x11c, 0xd1c, 
	0xabc, 0xabc, 0xabc, 0xa5c, 0x85c, 0x88c, 0x8fc, 0xffc,
	0x6c8, 0x6c8, 0x628, 0x448, 0x418, 0x418, 0x118, 0xd18, 
	0xeb8, 0xab8, 0xab8, 0x858, 0x858, 0x888, 0x8f8, 0x8f8,
	0x6c8, 0x6c8, 0x628, 0x448, 0x418, 0x418, 0x418, 0xe18, 
	0xeb8, 0x8b8, 0x8b8, 0x858, 0x858, 0x888, 0x8f8, 0x8f8,
	0x4c4, 0x4c4, 0x424, 0x444, 0x414, 0x414, 0x414, 0xe14, 
	0xeb4, 0x9b4, 0x9b4, 0x954, 0x954, 0x884, 0x8f4, 0x8f4,
	0x4ce, 0x4ce, 0x42e, 0x44e, 0x41e, 0x41e, 0xe1e, 0xe1e, 
	0xebe, 0xebe, 0x9be, 0x95e, 0x95e, 0x88e, 0x8fe, 0x8fe,
	0x4ce, 0x4ce, 0x42e, 0x44e, 0x41e, 0xe1e, 0xe1e, 0xe1e, 
	0xebe, 0xebe, 0xebe, 0x95e, 0x95e, 0x88e, 0x8fe, 0x8fe,
	0x0cb, 0x0cb, 0x0cb, 0x34b, 0x31b, 0xb1b, 0xb1b, 0xbbb, 
	0xbbb, 0xbbb, 0xbbb, 0x5bb, 0x55b, 0x5fb, 0x5fb, 0x5fb,
	0x0cb, 0x0cb, 0x3cb, 0x34b, 0x31b, 0x31b, 0xb1b, 0xbbb, 
	0xbbb, 0xbbb, 0x5bb, 0x5bb, 0x55b, 0x5fb, 0x5fb, 0x5fb,
	0x0cb, 0x3cb, 0x3cb, 0x34b, 0x31b, 0x31b, 0x31b, 0xbbb, 
	0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x55b, 0x5fb, 0x5fb, 0x5fb,
	0x0cb, 0x3cb, 0x3cb, 0x34b, 0x31b, 0x31b, 0x11b, 0x1bb, 
	0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x55b, 0x7fb, 0x7fb, 0x7fb,
	0x0c1, 0x2c1, 0x2c1, 0x341, 0x311, 0x111, 0x111, 0x1b1, 
	0x1b1, 0x1b1, 0x5b1, 0x5b1, 0x551, 0x7f1, 0x7f1, 0x7f1,
	0xcc1, 0x2c1, 0x2c1, 0x241, 0x111, 0x111, 0x111, 0x1b1, 
	0x1b1, 0x1b1, 0xab1, 0x5b1, 0x551, 0x7f1, 0x7f1, 0xff1,
	0xcc1, 0x2c1, 0x2c1, 0x241, 0x111, 0x111, 0x111, 0x1b1, 
	0x1b1, 0x1b1, 0xab1, 0xab1, 0x551, 0x7f1, 0xff1, 0xff1,
	0xccc, 0x2cc, 0x2cc, 0x24c, 0x21c, 0x11c, 0x11c, 0xdbc, 
	0xdbc, 0xabc, 0xabc, 0xabc, 0xa5c, 0xffc, 0xffc, 0xffc,
	0xccc, 0xccc, 0x2cc, 0x24c, 0x21c, 0x11c, 0x11c, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xabc, 0xa5c, 0xffc, 0xffc, 0xffc,
	0xccc, 0xccc, 0x2cc, 0x24c, 0x21c, 0x11c, 0x11c, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xabc, 0xa5c, 0x8fc, 0xffc, 0xffc,
	0xccc, 0x6cc, 0x6cc, 0x44c, 0x41c, 0x11c, 0x11c, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xabc, 0x85c, 0x8fc, 0x8fc, 0xffc,
	0x6cc, 0x6cc, 0x6cc, 0x44c, 0x41c, 0x41c, 0x11c, 0xdbc, 
	0xebc, 0xabc, 0xabc, 0x8bc, 0x85c, 0x8fc, 0x8fc, 0x8fc,
	0x6c8, 0x6c8, 0x6c8, 0x448, 0x418, 0x418, 0x418, 0xeb8, 
	0xeb8, 0x8b8, 0x8b8, 0x8b8, 0x858, 0x8f8, 0x8f8, 0x8f8,
	0x4ce, 0x4ce, 0x4ce, 0x44e, 0x41e, 0x41e, 0x41e, 0xebe, 
	0xebe, 0x9be, 0x9be, 0x9be, 0x95e, 0x8fe, 0x8fe, 0x8fe,
	0x4ce, 0x4ce, 0x4ce, 0x44e, 0x41e, 0x41e, 0xe1e, 0xebe, 
	0xebe, 0xebe, 0x9be, 0x9be, 0x95e, 0x8fe, 0x8fe, 0x8fe,
	0x4ce, 0x4ce, 0x4ce, 0x44e, 0x41e, 0xe1e, 0xe1e, 0xebe, 
	0xebe, 0xebe, 0xebe, 0x9be, 0x95e, 0x8fe, 0x8fe, 0x8fe,
	0x0cb, 0x0cb, 0x0cb, 0x3cb, 0x3bb, 0xbbb, 0xbbb, 0xbbb, 
	0xbbb, 0xbbb, 0xbbb, 0x5bb, 0x5fb, 0x5fb, 0x5fb, 0x5fb,
	0x0cb, 0x0cb, 0x3cb, 0x3cb, 0x3bb, 0x3bb, 0xbbb, 0xbbb, 
	0xbbb, 0xbbb, 0x5bb, 0x5bb, 0x5fb, 0x5fb, 0x5fb, 0x5fb,
	0x0cb, 0x3cb, 0x3cb, 0x3cb, 0x3bb, 0x3bb, 0x3bb, 0xbbb, 
	0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x5fb, 0x5fb, 0x5fb, 0x5fb,
	0x0cb, 0x3cb, 0x3cb, 0x3cb, 0x3bb, 0x3bb, 0x1bb, 0x1bb, 
	0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x5fb, 0x7fb, 0x7fb, 0x7fb,
	0x0cb, 0x2cb, 0x2cb, 0x3cb, 0x3bb, 0x1bb, 0x1bb, 0x1bb, 
	0x1bb, 0x1bb, 0x5bb, 0x5bb, 0x5fb, 0x7fb, 0x7fb, 0x7fb,
	0xccc, 0x2cc, 0x2cc, 0x2cc, 0x1bc, 0x1bc, 0x1bc, 0x1bc, 
	0x1bc, 0x1bc, 0xabc, 0x5bc, 0x5fc, 0x7fc, 0x7fc, 0xffc,
	0xccc, 0x2cc, 0x2cc, 0x2cc, 0x1bc, 0x1bc, 0x1bc, 0x1bc, 
	0x1bc, 0x1bc, 0xabc, 0xabc, 0x5fc, 0x7fc, 0xffc, 0xffc,
	0xccc, 0x2cc, 0x2cc, 0x2cc, 0x2bc, 0x1bc, 0x1bc, 0xdbc, 
	0xdbc, 0xabc, 0xabc, 0xabc, 0xafc, 0xffc, 0xffc, 0xffc,
	0xccc, 0xccc, 0x2cc, 0x2cc, 0x2bc, 0x1bc, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xabc, 0xafc, 0xffc, 0xffc, 0xffc,
	0xccc, 0xccc, 0x2cc, 0x2cc, 0x2bc, 0x1bc, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xabc, 0xafc, 0x8fc, 0xffc, 0xffc,
	0xccc, 0x6cc, 0x6cc, 0x4cc, 0x4bc, 0x1bc, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xabc, 0x8fc, 0x8fc, 0x8fc, 0xffc,
	0x6cc, 0x6cc, 0x6cc, 0x4cc, 0x4bc, 0x4bc, 0x1bc, 0xdbc, 
	0xebc, 0xabc, 0xabc, 0x8bc, 0x8fc, 0x8fc, 0x8fc, 0x8fc,
	0x6ce, 0x6ce, 0x6ce, 0x4ce, 0x4be, 0x4be, 0x4be, 0xebe, 
	0xebe, 0x8be, 0x8be, 0x8be, 0x8fe, 0x8fe, 0x8fe, 0x8fe,
	0x4ce, 0x4ce, 0x4ce, 0x4ce, 0x4be, 0x4be, 0x4be, 0xebe, 
	0xebe, 0x9be, 0x9be, 0x9be, 0x9fe, 0x8fe, 0x8fe, 0x8fe,
	0x4ce, 0x4ce, 0x4ce, 0x4ce, 0x4be, 0x4be, 0xebe, 0xebe, 
	0xebe, 0xebe, 0x9be, 0x9be, 0x9fe, 0x8fe, 0x8fe, 0x8fe,
	0x4ce, 0x4ce, 0x4ce, 0x4ce, 0x4be, 0xebe, 0xebe, 0xebe, 
	0xebe, 0xebe, 0xebe, 0x9be, 0x9fe, 0x8fe, 0x8fe, 0x8fe,
	0x0cb, 0x0cb, 0x06b, 0x33b, 0x33b, 0xbbb, 0xbbb, 0xbbb, 
	0xbbb, 0xbbb, 0xbbb, 0x59b, 0x59b, 0x57b, 0x5fb, 0x5fb,
	0x0cb, 0x0cb, 0x36b, 0x33b, 0x33b, 0x3bb, 0xbbb, 0xbbb, 
	0xbbb, 0xbbb, 0x5bb, 0x59b, 0x59b, 0x57b, 0x5fb, 0x5fb,
	0x0c3, 0x3c3, 0x363, 0x333, 0x333, 0x3b3, 0x3b3, 0xbb3, 
	0xbb3, 0x5b3, 0x5b3, 0x593, 0x593, 0x573, 0x5f3, 0x5f3,
	0x0c7, 0x3c7, 0x367, 0x337, 0x337, 0x3b7, 0x1b7, 0x1b7, 
	0xbb7, 0x5b7, 0x5b7, 0x597, 0x597, 0x777, 0x7f7, 0x7f7,
	0x0c7, 0x2c7, 0x267, 0x337, 0x337, 0x1b7, 0x1b7, 0x1b7, 
	0x1b7, 0x1b7, 0x5b7, 0x597, 0x597, 0x777, 0x7f7, 0x7f7,
	0xccc, 0x2cc, 0x26c, 0x23c, 0x13c, 0x1bc, 0x1bc, 0x1bc, 
	0x1bc, 0x1bc, 0xabc, 0x59c, 0x59c, 0x77c, 0x7fc, 0xffc,
	0xccc, 0x2cc, 0x26c, 0x23c, 0x13c, 0x1bc, 0x1bc, 0x1bc, 
	0x1bc, 0x1bc, 0xabc, 0xa9c, 0x59c, 0x77c, 0xffc, 0xffc,
	0xccc, 0x2cc, 0x26c, 0x23c, 0x23c, 0x1bc, 0x1bc, 0xdbc, 
	0xdbc, 0xabc, 0xabc, 0xa9c, 0xa9c, 0xf7c, 0xffc, 0xffc,
	0xccc, 0xccc, 0x26c, 0x23c, 0x23c, 0x1bc, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xa9c, 0xa9c, 0xf7c, 0xffc, 0xffc,
	0xccc, 0xccc, 0x26c, 0x23c, 0x23c, 0x1bc, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xa9c, 0xa9c, 0x87c, 0xffc, 0xffc,
	0xccc, 0x6cc, 0x66c, 0x43c, 0x43c, 0x1bc, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xabc, 0xa9c, 0x89c, 0x87c, 0x8fc, 0xffc,
	0x6c6, 0x6c6, 0x666, 0x436, 0x436, 0x4b6, 0x1b6, 0xdb6, 
	0xeb6, 0xab6, 0xab6, 0x896, 0x896, 0x876, 0x8f6, 0x8f6,
	0x6c6, 0x6c6, 0x666, 0x436, 0x436, 0x4b6, 0x4b6, 0xeb6, 
	0xeb6, 0x8b6, 0x8b6, 0x896, 0x896, 0x876, 0x8f6, 0x8f6,
	0x4c9, 0x4c9, 0x469, 0x439, 0x439, 0x4b9, 0x4b9, 0xeb9, 
	0xeb9, 0x9b9, 0x9b9, 0x999, 0x999, 0x879, 0x8f9, 0x8f9,
	0x4ce, 0x4ce, 0x46e, 0x43e, 0x43e, 0x4be, 0xebe, 0xebe, 
	0xebe, 0xebe, 0x9be, 0x99e, 0x99e, 0x87e, 0x8fe, 0x8fe,
	0x4ce, 0x4ce, 0x46e, 0x43e, 0x43e, 0xebe, 0xebe, 0xebe, 
	0xebe, 0xebe, 0xebe, 0x99e, 0x99e, 0x87e, 0x8fe, 0x8fe,
	0x0cb, 0x06b, 0x06b, 0x33b, 0x33b, 0xb3b, 0xbbb, 0xbbb, 
	0xbbb, 0xbbb, 0xb9b, 0x59b, 0x59b, 0x57b, 0x57b, 0x5fb,
	0x0c3, 0x063, 0x363, 0x333, 0x333, 0x333, 0xbb3, 0xbb3, 
	0xbb3, 0xbb3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x5f3,
	0x0c3, 0x363, 0x363, 0x333, 0x333, 0x333, 0x3b3, 0xbb3, 
	0xbb3, 0x5b3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x5f3,
	0x0c7, 0x367, 0x367, 0x337, 0x337, 0x337, 0x1b7, 0x1b7, 
	0xbb7, 0x5b7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x7f7,
	0x0c7, 0x267, 0x267, 0x337, 0x337, 0x137, 0x1b7, 0x1b7, 
	0x1b7, 0x1b7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x7f7,
	0xcc7, 0x267, 0x267, 0x237, 0x137, 0x137, 0x1b7, 0x1b7, 
	0x1b7, 0x1b7, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xff7,
	0xccc, 0x26c, 0x26c, 0x23c, 0x13c, 0x13c, 0x1bc, 0x1bc, 
	0x1bc, 0x1bc, 0xa9c, 0xa9c, 0x59c, 0x77c, 0xf7c, 0xffc,
	0xccc, 0x26c, 0x26c, 0x23c, 0x23c, 0x13c, 0x1bc, 0xdbc, 
	0xdbc, 0xabc, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xffc,
	0xccc, 0xc6c, 0x26c, 0x23c, 0x23c, 0x13c, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xffc,
	0xccc, 0xc6c, 0x26c, 0x23c, 0x23c, 0x13c, 0x1bc, 0xdbc, 
	0xabc, 0xabc, 0xa9c, 0xa9c, 0xa9c, 0x87c, 0xf7c, 0xffc,
	0xcc6, 0x666, 0x666, 0x436, 0x436, 0x136, 0x1b6, 0xdb6, 
	0xab6, 0xab6, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xff6,
	0x6c6, 0x666, 0x666, 0x436, 0x436, 0x436, 0x1b6, 0xdb6, 
	0xeb6, 0xab6, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x8f6,
	0x6c6, 0x666, 0x666, 0x436, 0x436, 0x436, 0x4b6, 0xeb6, 
	0xeb6, 0x8b6, 0x896, 0x896, 0x896, 0x876, 0x876, 0x8f6,
	0x4c9, 0x469, 0x469, 0x439, 0x439, 0x439, 0x4b9, 0xeb9, 
	0xeb9, 0x9b9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x8f9,
	0x4c9, 0x469, 0x469, 0x439, 0x439, 0x439, 0xeb9, 0xeb9, 
	0xeb9, 0xeb9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x8f9,
	0x4ce, 0x46e, 0x46e, 0x43e, 0x43e, 0xe3e, 0xebe, 0xebe, 
	0xebe, 0xebe, 0xe9e, 0x99e, 0x99e, 0x87e, 0x87e, 0x8fe,
	0x063, 0x063, 0x063, 0x333, 0x333, 0xb33, 0xb33, 0xbb3, 
	0xbb3, 0xb93, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x063, 0x363, 0x333, 0x333, 0x333, 0xb33, 0xbb3, 
	0xbb3, 0xb93, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x363, 0x363, 0x333, 0x333, 0x333, 0x333, 0xbb3, 
	0xbb3, 0x593, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x067, 0x367, 0x367, 0x337, 0x337, 0x337, 0x137, 0x1b7, 
	0xbb7, 0x597, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0x067, 0x267, 0x267, 0x337, 0x337, 0x137, 0x137, 0x1b7, 
	0x1b7, 0x197, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1b7, 
	0x1b7, 0x197, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xf77,
	0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1b7, 
	0x1b7, 0x197, 0xa97, 0xa97, 0x597, 0x777, 0xf77, 0xf77,
	0xc6c, 0x26c, 0x26c, 0x23c, 0x23c, 0x13c, 0x13c, 0xdbc, 
	0xdbc, 0xa9c, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xf7c,
	0xc6c, 0xc6c, 0x26c, 0x23c, 0x23c, 0x13c, 0x13c, 0xdbc, 
	0xabc, 0xa9c, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xf7c,
	0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x136, 0xdb6, 
	0xab6, 0xa96, 0xa96, 0xa96, 0xa96, 0x876, 0xf76, 0xf76,
	0xc66, 0x666, 0x666, 0x436, 0x436, 0x136, 0x136, 0xdb6, 
	0xab6, 0xa96, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x136, 0xdb6, 
	0xeb6, 0xa96, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x436, 0xeb6, 
	0xeb6, 0x896, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0x439, 0xeb9, 
	0xeb9, 0x999, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0xe39, 0xeb9, 
	0xeb9, 0xe99, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0xe39, 0xe39, 0xeb9, 
	0xeb9, 0xe99, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x063, 0x063, 0x063, 0x333, 0x333, 0xb33, 0xb33, 0xbd3, 
	0xb93, 0xb93, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x063, 0x363, 0x333, 0x333, 0x333, 0xb33, 0xbd3, 
	0xb93, 0xb93, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x363, 0x363, 0x333, 0x333, 0x333, 0x333, 0xbd3, 
	0xb93, 0x593, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x067, 0x367, 0x367, 0x337, 0x337, 0x337, 0x137, 0x1d7, 
	0xb97, 0x597, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0x067, 0x267, 0x267, 0x337, 0x337, 0x137, 0x137, 0x1d7, 
	0x197, 0x197, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1d7, 
	0x197, 0x197, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xf77,
	0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1d7, 
	0x197, 0x197, 0xa97, 0xa97, 0x597, 0x777, 0xf77, 0xf77,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x23d, 0x13d, 0x13d, 0xddd, 
	0xd9d, 0xa9d, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
	0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x136, 0xdd6, 
	0xa96, 0xa96, 0xa96, 0xa96, 0xa96, 0xf76, 0xf76, 0xf76,
	0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x136, 0xdd6, 
	0xa96, 0xa96, 0xa96, 0xa96, 0xa96, 0x876, 0xf76, 0xf76,
	0xc66, 0x666, 0x666, 0x436, 0x436, 0x136, 0x136, 0xdd6, 
	0xa96, 0xa96, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x136, 0xdd6, 
	0xe96, 0xa96, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x436, 0xed6, 
	0xe96, 0x896, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0x439, 0xed9, 
	0xe99, 0x999, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0xe39, 0xed9, 
	0xe99, 0xe99, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0xe39, 0xe39, 0xed9, 
	0xe99, 0xe99, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x063, 0x063, 0x063, 0x333, 0x333, 0xb33, 0xbd3, 0xbd3, 
	0xbd3, 0xb93, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x063, 0x363, 0x333, 0x333, 0x333, 0xbd3, 0xbd3, 
	0xbd3, 0xb93, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x363, 0x363, 0x333, 0x333, 0x333, 0x3d3, 0xbd3, 
	0xbd3, 0x593, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x067, 0x367, 0x367, 0x337, 0x337, 0x337, 0x1d7, 0x1d7, 
	0xbd7, 0x597, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0x067, 0x267, 0x267, 0x337, 0x337, 0x137, 0x1d7, 0x1d7, 
	0x1d7, 0x197, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x1d7, 0x1d7, 
	0x1d7, 0x197, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xf77,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x13d, 0x13d, 0x1dd, 0x1dd, 
	0x1dd, 0x19d, 0xa9d, 0xa9d, 0x59d, 0x77d, 0xf7d, 0xf7d,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x23d, 0x13d, 0x1dd, 0xddd, 
	0xddd, 0xa9d, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
	0xc6d, 0xc6d, 0x26d, 0x23d, 0x23d, 0x13d, 0x1dd, 0xddd, 
	0xadd, 0xa9d, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
	0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x1d6, 0xdd6, 
	0xad6, 0xa96, 0xa96, 0xa96, 0xa96, 0x876, 0xf76, 0xf76,
	0xc66, 0x666, 0x666, 0x436, 0x436, 0x136, 0x1d6, 0xdd6, 
	0xad6, 0xa96, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x1d6, 0xdd6, 
	0xed6, 0xa96, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x4d6, 0xed6, 
	0xed6, 0x896, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0x4d9, 0xed9, 
	0xed9, 0x999, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0xed9, 0xed9, 
	0xed9, 0xe99, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0xe39, 0xed9, 0xed9, 
	0xed9, 0xe99, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x063, 0x063, 0x063, 0x333, 0x333, 0xbd3, 0xbd3, 0xbd3, 
	0xbd3, 0xbd3, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x063, 0x363, 0x333, 0x333, 0x3d3, 0xbd3, 0xbd3, 
	0xbd3, 0xbd3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x363, 0x363, 0x333, 0x333, 0x3d3, 0x3d3, 0xbd3, 
	0xbd3, 0x5d3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x067, 0x367, 0x367, 0x337, 0x337, 0x3d7, 0x1d7, 0x1d7, 
	0xbd7, 0x5d7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0x067, 0x267, 0x267, 0x337, 0x337, 0x1d7, 0x1d7, 0x1d7, 
	0x1d7, 0x1d7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x13d, 0x1dd, 0x1dd, 0x1dd, 
	0x1dd, 0x1dd, 0xa9d, 0x59d, 0x59d, 0x77d, 0x77d, 0xf7d,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x13d, 0x1dd, 0x1dd, 0x1dd, 
	0x1dd, 0x1dd, 0xa9d, 0xa9d, 0x59d, 0x77d, 0xf7d, 0xf7d,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x23d, 0x1dd, 0x1dd, 0xddd, 
	0xddd, 0xadd, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
	0xc6d, 0xc6d, 0x26d, 0x23d, 0x23d, 0x1dd, 0x1dd, 0xddd, 
	0xadd, 0xadd, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
	0xc6d, 0xc6d, 0x26d, 0x23d, 0x23d, 0x1dd, 0x1dd, 0xddd, 
	0xadd, 0xadd, 0xa9d, 0xa9d, 0xa9d, 0x87d, 0xf7d, 0xf7d,
	0xc66, 0x666, 0x666, 0x436, 0x436, 0x1d6, 0x1d6, 0xdd6, 
	0xad6, 0xad6, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x4d6, 0x1d6, 0xdd6, 
	0xed6, 0xad6, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x666, 0x666, 0x666, 0x436, 0x436, 0x4d6, 0x4d6, 0xed6, 
	0xed6, 0x8d6, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x4d9, 0x4d9, 0xed9, 
	0xed9, 0x9d9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0x4d9, 0xed9, 0xed9, 
	0xed9, 0xed9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x469, 0x469, 0x469, 0x439, 0x439, 0xed9, 0xed9, 0xed9, 
	0xed9, 0xed9, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
	0x063, 0x063, 0x063, 0x333, 0x3d3, 0xbd3, 0xbd3, 0xbd3, 
	0xbd3, 0xbd3, 0xbd3, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x063, 0x363, 0x333, 0x3d3, 0x3d3, 0xbd3, 0xbd3, 
	0xbd3, 0xbd3, 0x5d3, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x063, 0x363, 0x363, 0x333, 0x3d3, 0x3d3, 0x3d3, 0xbd3, 
	0xbd3, 0x5d3, 0x5d3, 0x593, 0x593, 0x573, 0x573, 0x573,
	0x067, 0x367, 0x367, 0x337, 0x3d7, 0x3d7, 0x1d7, 0x1d7, 
	0xbd7, 0x5d7, 0x5d7, 0x597, 0x597, 0x777, 0x777, 0x777,
	0x06d, 0x26d, 0x26d, 0x33d, 0x3dd, 0x1dd, 0x1dd, 0x1dd, 
	0x1dd, 0x1dd, 0x5dd, 0x59d, 0x59d, 0x77d, 0x77d, 0x77d,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x1dd, 0x1dd, 0x1dd, 0x1dd, 
	0x1dd, 0x1dd, 0xadd, 0x59d, 0x59d, 0x77d, 0x77d, 0xf7d,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x1dd, 0x1dd, 0x1dd, 0x1dd, 
	0x1dd, 0x1dd, 0xadd, 0xa9d, 0x59d, 0x77d, 0xf7d, 0xf7d,
	0xc6d, 0x26d, 0x26d, 0x23d, 0x2dd, 0x1dd, 0x1dd, 0xddd, 
	0xddd, 0xadd, 0xadd, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
	0xc6d, 0xc6d, 0x26d, 0x23d, 0x2dd, 0x1dd, 0x1dd, 0xddd, 
	0xadd, 0xadd, 0xadd, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
	0xc6d, 0xc6d, 0x26d, 0x23d, 0x2dd, 0x1dd, 0x1dd, 0xddd, 
	0xadd, 0xadd, 0xadd, 0xa9d, 0xa9d, 0x87d, 0xf7d, 0xf7d,
	0xc6d, 0x66d, 0x66d, 0x43d, 0x4dd, 0x1dd, 0x1dd, 0xddd, 
	0xadd, 0xadd, 0xadd, 0xa9d, 0x89d, 0x87d, 0x87d, 0xf7d,
	0x666, 0x666, 0x666, 0x436, 0x4d6, 0x4d6, 0x1d6, 0xdd6, 
	0xed6, 0xad6, 0xad6, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x666, 0x666, 0x666, 0x436, 0x4d6, 0x4d6, 0x4d6, 0xed6, 
	0xed6, 0x8d6, 0x8d6, 0x896, 0x896, 0x876, 0x876, 0x876,
	0x469, 0x469, 0x469, 0x439, 0x4d9, 0x4d9, 0x4d