diff --git a/template/Makefile b/template/Makefile index 9cecde2..3566953 100644 --- a/template/Makefile +++ b/template/Makefile @@ -33,7 +33,7 @@ LDFLAGS = -g $(MACHDEP) -mrvl -Wl,-Map,$(notdir $@).map #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- -LIBS := -lpng -lz -lfat -lwiiuse -lbte -logc -lm +LIBS := -lpng -ljpeg -lz -lfat -lwiiuse -lbte -logc -lm #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing diff --git a/template/lib/libjpeg.a b/template/lib/libjpeg.a new file mode 100644 index 0000000..7a4fc0d Binary files /dev/null and b/template/lib/libjpeg.a differ diff --git a/template/source/GRRLIB/GRRLIB.c b/template/source/GRRLIB/GRRLIB.c index ac72d4a..f6a34f2 100644 --- a/template/source/GRRLIB/GRRLIB.c +++ b/template/source/GRRLIB/GRRLIB.c @@ -1,9 +1,17 @@ /*=========================================== GRRLIB (GX version) 3.0.5 alpha Code : NoNameNo + Additional Code : Crayon GX hints : RedShade ===========================================*/ - +#include +#include +#include +#include +#include +#include +#include "../libpng/pngu/pngu.h" +#include "../libjpeg/jpeglib.h" #include "GRRLIB.h" #define DEFAULT_FIFO_SIZE (256 * 1024) @@ -94,7 +102,7 @@ void GRRLIB_InitTileSet(struct GRRLIB_texImg *tex, unsigned int tilew, unsigned * @param my_png the PNG buffer to load. * @return A GRRLIB_texImg structure filled with PNG informations. */ -GRRLIB_texImg GRRLIB_LoadTexture(const unsigned char my_png[]) { +GRRLIB_texImg GRRLIB_LoadTexturePNG(const unsigned char my_png[]) { PNGUPROP imgProp; IMGCTX ctx; GRRLIB_texImg my_texture; @@ -111,24 +119,112 @@ GRRLIB_texImg GRRLIB_LoadTexture(const unsigned char my_png[]) { } /** - * Load a texture from a file. - * @author GRILLO - * @param filename the PNG file to load. +* Convert a raw bmp (RGB, no alpha) to 4x4RGBA + * @author DrTwox +*/ +static void RawTo4x4RGBA(const unsigned char *src, void *dst, const unsigned int width, const unsigned int height) { + unsigned int block = 0; + unsigned int i = 0; + unsigned int c = 0; + unsigned int ar = 0; + unsigned int gb = 0; + unsigned char *p = (unsigned char*)dst; + + for (block = 0; block < height; block += 4) { + for (i = 0; i < width; i += 4) { + /* Alpha and Red */ + for (c = 0; c < 4; ++c) { + for (ar = 0; ar < 4; ++ar) { + /* Alpha pixels */ + *p++ = 255; + /* Red pixels */ + *p++ = src[((i + ar) + ((block + c) * width)) * 3]; + } + } + + /* Green and Blue */ + for (c = 0; c < 4; ++c) { + for (gb = 0; gb < 4; ++gb) { + /* Green pixels */ + *p++ = src[(((i + gb) + ((block + c) * width)) * 3) + 1]; + /* Blue pixels */ + *p++ = src[(((i + gb) + ((block + c) * width)) * 3) + 2]; + } + } + } /* i */ + } /* block */ +} + +/** + * Load a texture from a buffer. + * Take Care to have a JPG Finnishing by 0xFF 0xD9 !!!! + * @author DrTwox + * @param my_jpg the JPG buffer to load. * @return A GRRLIB_texImg structure filled with PNG informations. */ -GRRLIB_texImg GRRLIB_LoadTextureFromFile(const char *filename) { - PNGUPROP imgProp; - IMGCTX ctx; +GRRLIB_texImg GRRLIB_LoadTextureJPG(const unsigned char my_jpg[]) { + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; GRRLIB_texImg my_texture; + int n=0; + + if((my_jpg[0]==0xff) && (my_jpg[1]==0xd8) && (my_jpg[2]==0xff)){ + while(1){ + if((my_jpg[n]==0xff) && (my_jpg[n+1]==0xd9)) + break; + n++; + } + n+=2; + } + + /* Init the JPEG decompressor */ + jpeg_create_decompress(&cinfo); + + /* Use the standard error handler */ + cinfo.err = jpeg_std_error(&jerr); + + /* Don't use a progress handler */ + cinfo.progress = NULL; + + /* Set the source buffer */ + jpeg_memory_src(&cinfo, my_jpg, n); + + /* Read the default header information */ + jpeg_read_header(&cinfo, TRUE); + + /* Get ready to decompress */ + jpeg_start_decompress(&cinfo); + + /* Create a buffer to hold the final image */ + unsigned char *tempBuffer = (unsigned char*) malloc(cinfo.output_width * cinfo.output_height * cinfo.num_components); + + /* Decompress the JPEG into tempBuffer, one row at a time */ + JSAMPROW row_pointer[1]; + row_pointer[0] = (unsigned char*) malloc(cinfo.output_width * cinfo.num_components); + unsigned int i = 0; + size_t location = 0; + while (cinfo.output_scanline < cinfo.output_height) { + jpeg_read_scanlines(&cinfo, row_pointer, 1); + for (i = 0; i < cinfo.image_width * cinfo.num_components; i++) { + /* Put the decoded scanline into the tempBuffer */ + tempBuffer[ location++ ] = row_pointer[0][i]; + } + } + + /* Create a buffer to hold the final texture */ + my_texture.data = memalign(32, cinfo.output_width * cinfo.output_height * 4); + RawTo4x4RGBA(tempBuffer, my_texture.data, cinfo.output_width, cinfo.output_height); + DCFlushRange(my_texture.data, cinfo.output_width * cinfo.output_height * 4); + + /* Done - do cleanup and release memory */ + jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + free(row_pointer[0]); + free(tempBuffer); + + my_texture.w = cinfo.output_width; + my_texture.h = cinfo.output_height; - ctx = PNGU_SelectImageFromDevice(filename); - PNGU_GetImageProperties (ctx, &imgProp); - my_texture.data = memalign (32, imgProp.imgWidth * imgProp.imgHeight * 4); - PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, my_texture.data, 255); - PNGU_ReleaseImageContext (ctx); - DCFlushRange (my_texture.data, imgProp.imgWidth * imgProp.imgHeight * 4); - my_texture.w = imgProp.imgWidth; - my_texture.h = imgProp.imgHeight; return my_texture; } diff --git a/template/source/GRRLIB/GRRLIB.h b/template/source/GRRLIB/GRRLIB.h index c12f0b9..c6ed29d 100644 --- a/template/source/GRRLIB/GRRLIB.h +++ b/template/source/GRRLIB/GRRLIB.h @@ -1,20 +1,15 @@ /*=========================================== GRRLIB (GX version) 3.0.5 alpha Code : NoNameNo + Additional Code : Crayon GX hints : RedShade ===========================================*/ #ifndef __GXHDR__ #define __GXHDR__ -#include -#include -#include -#include -#include -#include + #include -#include "../libpng/pngu/pngu.h" /** * @struct GRRLIB_texImg @@ -53,8 +48,9 @@ void GRRLIB_NGone(Vector v[],u32 color,long n); void GRRLIB_NGoneFilled(Vector v[],u32 color,long n); -GRRLIB_texImg GRRLIB_LoadTexture(const unsigned char my_png[]); -GRRLIB_texImg GRRLIB_LoadTextureFromFile(const char *filename); +GRRLIB_texImg GRRLIB_LoadTexturePNG(const unsigned char my_png[]); +GRRLIB_texImg GRRLIB_LoadTextureJPG(const unsigned char my_jpg[]); + void GRRLIB_InitTileSet(struct GRRLIB_texImg *tex, unsigned int tilew, unsigned int tileh, unsigned int tilestart); diff --git a/template/source/gfx/test_jpg.c b/template/source/gfx/test_jpg.c new file mode 100644 index 0000000..e69878b --- /dev/null +++ b/template/source/gfx/test_jpg.c @@ -0,0 +1,846 @@ +/* + This file was autogenerated by raw2c. +Visit http://www.devkitpro.org +*/ + +const unsigned char test_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x05, 0x03, + 0x04, 0x04, 0x04, 0x03, 0x05, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x07, 0x0c, 0x08, 0x07, + 0x07, 0x07, 0x07, 0x0f, 0x0b, 0x0b, 0x09, 0x0c, 0x11, 0x0f, 0x12, 0x12, 0x11, 0x0f, 0x11, 0x11, + 0x13, 0x16, 0x1c, 0x17, 0x13, 0x14, 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, 0x1a, 0x1d, 0x1d, + 0x1f, 0x1f, 0x1f, 0x13, 0x17, 0x22, 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e, 0x1f, 0x1e, 0xff, 0xdb, + 0x00, 0x43, 0x01, 0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x0e, 0x08, 0x08, 0x0e, 0x1e, 0x14, 0x11, + 0x14, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, + 0x1e, 0x1e, 0x1e, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x01, 0x2c, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, + 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x03, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x09, 0x06, + 0x05, 0x03, 0x04, 0xff, 0xc4, 0x00, 0x4b, 0x10, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, + 0x05, 0x08, 0x05, 0x09, 0x06, 0x07, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x00, 0x05, 0x11, 0x06, + 0x07, 0x12, 0x08, 0x13, 0x21, 0x14, 0x22, 0x31, 0x09, 0x15, 0x32, 0x41, 0x51, 0x16, 0x17, 0x18, + 0x23, 0x37, 0x76, 0xa5, 0xb4, 0x56, 0x57, 0x95, 0xd2, 0xd3, 0x33, 0x38, 0x42, 0x52, 0x55, 0x67, + 0x84, 0x94, 0xd4, 0x24, 0x25, 0x34, 0x71, 0x93, 0xe4, 0x35, 0x47, 0x53, 0x72, 0x81, 0x85, 0xc4, + 0xff, 0xc4, 0x00, 0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xda, 0x00, 0x0c, + 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xb9, 0x74, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x73, 0x3b, 0x9d, 0xae, + 0xb4, 0xde, 0xdc, 0xe9, 0x09, 0x5a, 0xa3, 0x54, 0x4d, 0xf4, 0xf0, 0x98, 0xf6, 0xb6, 0xda, 0x00, + 0x53, 0xb2, 0x5d, 0x20, 0xf1, 0x69, 0xa4, 0xe4, 0x72, 0x5a, 0xb0, 0x7c, 0x78, 0x00, 0x02, 0xa2, + 0x42, 0x41, 0x20, 0x3a, 0x6a, 0x55, 0x3a, 0x81, 0xd7, 0x2c, 0x55, 0xce, 0x8e, 0x89, 0xdb, 0x68, + 0xf3, 0x11, 0x14, 0xea, 0x43, 0xee, 0xb3, 0x7a, 0x0e, 0xb8, 0x84, 0x67, 0xdc, 0xa4, 0xa0, 0xb2, + 0x90, 0xa5, 0x01, 0x92, 0x12, 0x54, 0x90, 0x4f, 0x8c, 0x8f, 0x9a, 0xb7, 0x16, 0x2b, 0xa4, 0x0b, + 0xe5, 0x8e, 0x05, 0xee, 0xd6, 0xff, 0x00, 0xa8, 0x81, 0x70, 0x8c, 0xdc, 0xa8, 0xae, 0xf0, 0x52, + 0x7b, 0x8d, 0x38, 0x90, 0xa4, 0x2b, 0x0a, 0x00, 0x8c, 0xa4, 0x83, 0x82, 0x01, 0xfc, 0x68, 0x3f, + 0x6d, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x2a, 0x33, 0xd6, 0x5b, 0xf9, 0xb4, 0x3a, 0x42, 0xf8, + 0xe5, 0x92, 0xfb, 0xad, 0xe1, 0x35, 0x3d, 0x9c, 0x87, 0x9a, 0x8c, 0xc3, 0xd2, 0xbb, 0x4a, 0x0a, + 0x52, 0x54, 0x85, 0x96, 0x50, 0xb0, 0x85, 0x85, 0x24, 0x82, 0x85, 0x10, 0xa1, 0xe3, 0x20, 0x64, + 0x57, 0xe2, 0xb2, 0x75, 0x23, 0xb2, 0x57, 0x8b, 0xa3, 0x36, 0xe8, 0x9a, 0xfa, 0x13, 0x4f, 0x3d, + 0xcb, 0x8a, 0xa6, 0x46, 0x7e, 0x2b, 0x43, 0x09, 0x2a, 0x3c, 0x9d, 0x79, 0xb4, 0xa1, 0x3e, 0x01, + 0xc6, 0x54, 0x32, 0x70, 0x06, 0x49, 0x02, 0x82, 0x59, 0xa5, 0x79, 0x9a, 0x6f, 0x50, 0xd8, 0x35, + 0x2c, 0x15, 0xce, 0xd3, 0x97, 0xcb, 0x65, 0xe6, 0x23, 0x6e, 0x96, 0x56, 0xfc, 0x09, 0x68, 0x90, + 0xda, 0x56, 0x00, 0x25, 0x05, 0x48, 0x24, 0x05, 0x61, 0x49, 0x38, 0xf9, 0xc1, 0x1f, 0x8d, 0x7a, + 0x74, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, + 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0xe7, 0xf5, 0x26, 0xb7, 0xd1, 0x7a, + 0x6a, 0x72, 0x20, 0xea, 0x3d, 0x5f, 0xa7, 0xec, 0xd2, 0xdc, 0x68, 0x3c, 0x86, 0x27, 0xdc, 0x99, + 0x8e, 0xe2, 0x90, 0x49, 0x01, 0x61, 0x2b, 0x50, 0x25, 0x39, 0x4a, 0x86, 0x7e, 0x32, 0x0f, 0xe1, + 0x5c, 0x67, 0x56, 0x57, 0xfb, 0xce, 0x98, 0xe9, 0xef, 0x55, 0x5e, 0xb4, 0xfd, 0xc5, 0xeb, 0x75, + 0xc5, 0xa6, 0x98, 0x69, 0xa9, 0x2c, 0x9c, 0x38, 0xd8, 0x76, 0x4b, 0x4d, 0x2c, 0xa4, 0xff, 0x00, + 0xa2, 0xae, 0x0b, 0x50, 0x0a, 0x18, 0x20, 0x9c, 0x82, 0x08, 0x04, 0x65, 0xd5, 0x06, 0xb2, 0xfe, + 0x76, 0x36, 0xb3, 0xfa, 0xcb, 0xd1, 0x9f, 0xdb, 0xb1, 0xbf, 0xbf, 0x51, 0x9e, 0xb2, 0xea, 0xe3, + 0x68, 0x6c, 0xf6, 0x37, 0x25, 0xd8, 0xae, 0x53, 0x75, 0x2c, 0xff, 0x00, 0x29, 0x66, 0x14, 0x68, + 0x4f, 0x31, 0x95, 0x71, 0x51, 0x49, 0x5b, 0x8f, 0x21, 0x21, 0x28, 0xe4, 0x02, 0x49, 0x4f, 0x25, + 0x0e, 0x40, 0x84, 0xab, 0x06, 0xb3, 0x9a, 0x94, 0x16, 0x33, 0x70, 0xba, 0xc1, 0xdd, 0x0b, 0xe5, + 0xd1, 0x2e, 0x69, 0x53, 0x0b, 0x49, 0x40, 0x6f, 0x3c, 0x58, 0x69, 0x96, 0xe6, 0x3a, 0xe6, 0x52, + 0x9c, 0xf7, 0x1c, 0x79, 0x04, 0x1c, 0x28, 0x28, 0x8e, 0x08, 0x47, 0x85, 0x60, 0xf2, 0xc0, 0x35, + 0x16, 0xc0, 0xde, 0x2d, 0xd8, 0x85, 0x3a, 0x3c, 0xc6, 0x77, 0x27, 0x56, 0xa9, 0xd6, 0x1d, 0x4b, + 0xa8, 0x4b, 0xd7, 0x67, 0x9e, 0x6c, 0x94, 0x9c, 0x80, 0xa4, 0x2d, 0x45, 0x2b, 0x4f, 0x8f, 0x29, + 0x50, 0x20, 0x8f, 0x04, 0x11, 0x5c, 0xfe, 0x98, 0xd2, 0x7a, 0xab, 0x54, 0x7a, 0x8f, 0xc9, 0x9d, + 0x35, 0x7a, 0xbd, 0xfa, 0x6e, 0x3e, 0xa3, 0xea, 0xe8, 0x2e, 0xc8, 0xed, 0x72, 0xcf, 0x1e, 0x5c, + 0x12, 0x78, 0xe7, 0x8a, 0xb1, 0x9f, 0x9c, 0x1f, 0xc2, 0xac, 0x96, 0xdf, 0x74, 0x57, 0xab, 0xa6, + 0xce, 0x87, 0x23, 0x5b, 0xea, 0x1b, 0x65, 0xa6, 0xdc, 0xa6, 0x90, 0xeb, 0xf1, 0xe0, 0x29, 0x52, + 0x25, 0x82, 0x4a, 0x4a, 0x99, 0x24, 0xa4, 0x36, 0x85, 0x71, 0x2b, 0x1c, 0xc2, 0x9c, 0x01, 0x40, + 0x61, 0x2b, 0x07, 0x34, 0x17, 0x33, 0x6d, 0x6f, 0x72, 0xb5, 0x2e, 0xdd, 0x69, 0xad, 0x47, 0x39, + 0xb6, 0x5b, 0x97, 0x75, 0xb4, 0x45, 0x9a, 0xfa, 0x19, 0x04, 0x36, 0x95, 0xba, 0xca, 0x56, 0xa0, + 0x90, 0x49, 0x21, 0x39, 0x51, 0xc6, 0x49, 0x38, 0xfb, 0xcd, 0x71, 0x9d, 0x46, 0x6f, 0x4d, 0x9b, + 0x66, 0xb4, 0xec, 0x19, 0x93, 0x2d, 0xcf, 0x5d, 0xae, 0x97, 0x27, 0x54, 0x88, 0x10, 0x1b, 0x73, + 0xb4, 0x97, 0x02, 0x38, 0xf7, 0x56, 0xb7, 0x78, 0xa8, 0x21, 0x29, 0x0b, 0x4f, 0xdc, 0x49, 0x2a, + 0x48, 0x03, 0x1c, 0x94, 0x99, 0x1a, 0xc5, 0x6b, 0x81, 0x63, 0xb1, 0xc0, 0xb2, 0x5a, 0xd8, 0xf4, + 0xf0, 0x2d, 0xf1, 0x9b, 0x8b, 0x15, 0xae, 0x6a, 0x57, 0x6d, 0xa6, 0xd2, 0x12, 0x84, 0xe5, 0x44, + 0x93, 0x84, 0x80, 0x32, 0x49, 0x3f, 0x8d, 0x54, 0xdf, 0xa4, 0xba, 0xd7, 0x3d, 0xeb, 0x1e, 0x88, + 0xbd, 0xb6, 0xc7, 0x28, 0x11, 0x24, 0xcc, 0x8a, 0xfb, 0xbc, 0xd3, 0xec, 0x75, 0xe4, 0xb4, 0xa6, + 0xd3, 0x8c, 0xe4, 0xe5, 0x2c, 0x3a, 0x72, 0x06, 0x07, 0x1f, 0x38, 0xc8, 0xc8, 0x74, 0x1b, 0x47, + 0xd6, 0x05, 0x9b, 0x5a, 0x6b, 0xdb, 0x6e, 0x96, 0xbd, 0x69, 0x07, 0xac, 0x09, 0xb9, 0xba, 0x98, + 0xd1, 0x25, 0xb7, 0x3f, 0xd5, 0xa4, 0xc8, 0x5a, 0x82, 0x5b, 0x6d, 0x69, 0x0d, 0x20, 0xa5, 0x2a, + 0x27, 0x1c, 0x86, 0x70, 0x4a, 0x72, 0x02, 0x49, 0x52, 0x6c, 0xfd, 0x63, 0xa5, 0x8a, 0xe9, 0x3e, + 0xc7, 0x7c, 0x81, 0x7b, 0xb5, 0xbf, 0xe9, 0xe7, 0xdb, 0xe4, 0xb7, 0x2a, 0x2b, 0xbc, 0x12, 0xae, + 0xdb, 0xad, 0xa8, 0x29, 0x0a, 0xc2, 0x81, 0x07, 0x0a, 0x00, 0xe0, 0x82, 0x3f, 0x1a, 0xd7, 0xeb, + 0x15, 0xd2, 0x05, 0xf2, 0xc7, 0x02, 0xf7, 0x6b, 0x7f, 0xd4, 0x40, 0xb8, 0x46, 0x6e, 0x54, 0x57, + 0x78, 0x29, 0x3d, 0xc6, 0x9c, 0x48, 0x52, 0x15, 0x85, 0x00, 0x46, 0x52, 0x41, 0xc1, 0x00, 0xfe, + 0x34, 0x1f, 0xb6, 0xab, 0x37, 0xd2, 0x3b, 0xfb, 0x10, 0xb3, 0x7e, 0xf2, 0x31, 0xfc, 0xb4, 0x9a, + 0xb3, 0x35, 0x54, 0xfe, 0x92, 0x5b, 0xdc, 0x56, 0x36, 0xeb, 0x4b, 0xe9, 0xc5, 0xb6, 0xf1, 0x97, + 0x3a, 0xee, 0xa9, 0xad, 0x2c, 0x01, 0xdb, 0x08, 0x61, 0x95, 0x21, 0x60, 0x9c, 0xe7, 0x91, 0x32, + 0x51, 0x8c, 0x02, 0x30, 0x15, 0x92, 0x30, 0x32, 0x14, 0x4e, 0xb5, 0xe3, 0x6d, 0x6c, 0x92, 0xb4, + 0xd6, 0xdd, 0x69, 0xad, 0x39, 0x39, 0xc6, 0x5c, 0x97, 0x6a, 0xb4, 0x45, 0x84, 0xfa, 0xd9, 0x24, + 0xb6, 0xa5, 0xb4, 0xca, 0x50, 0xa2, 0x92, 0x40, 0x25, 0x39, 0x49, 0xc6, 0x40, 0x38, 0xfb, 0x85, + 0x64, 0x3d, 0x6c, 0xc5, 0x04, 0x41, 0xd5, 0xc6, 0xe6, 0x5e, 0x76, 0xb7, 0x69, 0x8d, 0xeb, 0x4f, + 0x30, 0xca, 0xae, 0x97, 0x09, 0xc8, 0xb6, 0xc7, 0x7d, 0xdf, 0x72, 0x62, 0x95, 0xb6, 0xe2, 0xcb, + 0xc1, 0x04, 0x10, 0xb5, 0x00, 0xd9, 0x00, 0x1f, 0x19, 0x20, 0x9e, 0x40, 0x14, 0xaa, 0x9f, 0xe9, + 0x5e, 0xac, 0xb7, 0x8e, 0xd9, 0xa8, 0xa1, 0x4e, 0xbd, 0x5f, 0x59, 0xbf, 0x5b, 0x9a, 0x77, 0x32, + 0x6d, 0xee, 0xc1, 0x8c, 0xc2, 0x64, 0x23, 0xe0, 0xa4, 0x38, 0xdb, 0x41, 0x48, 0x57, 0x9c, 0x85, + 0x0c, 0x80, 0x40, 0xc8, 0x50, 0xca, 0x4d, 0x86, 0xfa, 0x47, 0x7f, 0x62, 0x16, 0x6f, 0xde, 0x46, + 0x3f, 0x96, 0x93, 0x54, 0x02, 0x83, 0x66, 0x2a, 0x0c, 0xeb, 0x73, 0x5d, 0x6a, 0x4d, 0x07, 0xb3, + 0x09, 0x97, 0xa5, 0xe6, 0xfa, 0x09, 0xb7, 0x4b, 0x93, 0x76, 0xd7, 0x25, 0x20, 0x1e, 0xeb, 0x2d, + 0x2d, 0xa7, 0x56, 0xa5, 0x34, 0xac, 0xfb, 0x16, 0x7b, 0x61, 0x3c, 0xbc, 0x90, 0x14, 0x48, 0xc2, + 0xb0, 0xa1, 0x39, 0xd5, 0x6d, 0xfa, 0x45, 0x22, 0x4a, 0x93, 0xb1, 0x56, 0xf7, 0xa3, 0xc6, 0x79, + 0xe6, 0xa2, 0xea, 0x08, 0xef, 0x48, 0x5b, 0x6d, 0x95, 0x25, 0x94, 0x16, 0x5f, 0x40, 0x5a, 0xc8, + 0xfb, 0x29, 0xe6, 0xb4, 0x27, 0x27, 0xc6, 0x54, 0x91, 0xf2, 0x45, 0x06, 0x7c, 0xd2, 0x95, 0x6b, + 0x3a, 0x7a, 0xd1, 0x1b, 0x4b, 0xbe, 0xfa, 0x2a, 0xfd, 0x65, 0x9b, 0xa7, 0x99, 0xd3, 0x5a, 0xfe, + 0x23, 0x41, 0xd5, 0x5c, 0xa0, 0x49, 0x58, 0x6d, 0xe0, 0xb5, 0x1c, 0x48, 0x6e, 0x21, 0x73, 0xb6, + 0x94, 0x85, 0x00, 0x97, 0x1b, 0x42, 0x12, 0x80, 0x16, 0x9e, 0x05, 0xbe, 0x69, 0x08, 0x0a, 0xcd, + 0xa6, 0xf5, 0x0d, 0xff, 0x00, 0x4d, 0x4e, 0x5c, 0xed, 0x39, 0x7c, 0xb9, 0xd9, 0xa5, 0xb8, 0xd1, + 0x65, 0x6f, 0xc0, 0x96, 0xb8, 0xee, 0x29, 0x04, 0x82, 0x50, 0x54, 0x82, 0x09, 0x4e, 0x52, 0x93, + 0x8f, 0x8c, 0x81, 0xf8, 0x56, 0x89, 0x74, 0x47, 0xae, 0xb5, 0x26, 0xbc, 0xd9, 0x85, 0x4b, 0xd5, + 0x13, 0x7d, 0x7c, 0xdb, 0x5d, 0xc9, 0xcb, 0x6b, 0x72, 0x96, 0x0f, 0x75, 0xe6, 0x90, 0xd3, 0x4b, + 0x4a, 0x9d, 0x56, 0x7d, 0xeb, 0x1d, 0xc2, 0x9e, 0x5e, 0x09, 0x09, 0x04, 0xe5, 0x59, 0x51, 0x89, + 0xbf, 0x41, 0x8f, 0xf7, 0xa3, 0xfc, 0x03, 0xff, 0x00, 0x71, 0x56, 0x4f, 0x63, 0xb6, 0xce, 0xcd, + 0xb4, 0xfa, 0x09, 0x8d, 0x2d, 0x67, 0x7d, 0xe9, 0x4a, 0x2e, 0x99, 0x33, 0x65, 0xbb, 0xe1, 0x52, + 0x64, 0x29, 0x29, 0x4a, 0x9c, 0x09, 0xc9, 0x08, 0x4e, 0x10, 0x90, 0x12, 0x3e, 0x02, 0x46, 0x4a, + 0x95, 0x95, 0x10, 0xee, 0x69, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, + 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x29, 0x4a, 0x50, 0x79, 0x9a, 0xaa, 0xc1, + 0x66, 0xd5, 0x3a, 0x76, 0x6e, 0x9e, 0xd4, 0x36, 0xe6, 0x6e, 0x36, 0xb9, 0xcd, 0x76, 0xa4, 0x47, + 0x74, 0x7b, 0x56, 0x3e, 0x41, 0x04, 0x79, 0x4a, 0x81, 0x00, 0x85, 0x02, 0x0a, 0x48, 0x04, 0x10, + 0x40, 0x35, 0x5e, 0x7f, 0x42, 0xad, 0xac, 0xff, 0x00, 0x6f, 0xeb, 0x3f, 0xf9, 0xc8, 0xdf, 0xf4, + 0xf5, 0x66, 0x69, 0x41, 0x44, 0xfa, 0xcd, 0xd8, 0xad, 0x11, 0xb6, 0x9b, 0x75, 0xa6, 0xef, 0xda, + 0x42, 0x3b, 0xd1, 0x1d, 0x44, 0xe1, 0x6d, 0x9c, 0x5e, 0x79, 0xc7, 0x9c, 0x9a, 0x56, 0xca, 0x96, + 0x97, 0x94, 0x54, 0xae, 0x28, 0x50, 0xec, 0xaf, 0x21, 0x08, 0x48, 0x25, 0xdf, 0xb8, 0x24, 0x0a, + 0xaa, 0x75, 0x7f, 0xfe, 0x91, 0xdf, 0xd8, 0x85, 0x9b, 0xf7, 0x91, 0x8f, 0xe5, 0xa4, 0xd5, 0x00, + 0xa0, 0xd9, 0x28, 0x11, 0x22, 0xc0, 0x83, 0x1e, 0x0c, 0x18, 0xcc, 0xc5, 0x89, 0x19, 0xa4, 0xb2, + 0xc3, 0x0c, 0xb6, 0x10, 0xdb, 0x48, 0x48, 0xc2, 0x50, 0x94, 0x8f, 0x09, 0x48, 0x00, 0x00, 0x07, + 0x80, 0x05, 0x7d, 0xa9, 0x4a, 0x05, 0x43, 0x3d, 0x69, 0x69, 0x6f, 0xca, 0x8e, 0x9e, 0x75, 0x07, + 0x66, 0x0f, 0xab, 0x9b, 0x68, 0xed, 0xdd, 0x23, 0x7e, 0xb7, 0x87, 0x6b, 0xb4, 0xaf, 0xd7, 0x39, + 0xe4, 0x80, 0xac, 0x30, 0xa7, 0xfd, 0xa7, 0x39, 0xcf, 0x80, 0x55, 0xc6, 0xa6, 0x6a, 0xe3, 0x37, + 0xdb, 0xf6, 0x21, 0xaf, 0x3f, 0x76, 0xee, 0x3f, 0xcb, 0x39, 0x41, 0x93, 0x55, 0x2c, 0xd8, 0xba, + 0x8f, 0xde, 0x7b, 0x1d, 0x8e, 0x05, 0x92, 0xd7, 0xac, 0xbd, 0x3c, 0x0b, 0x7c, 0x66, 0xe2, 0xc5, + 0x6b, 0xea, 0xc8, 0x8a, 0xed, 0xb4, 0xda, 0x42, 0x50, 0x9c, 0xa9, 0xa2, 0x4e, 0x12, 0x00, 0xc9, + 0x24, 0xfe, 0x35, 0x13, 0x54, 0xe7, 0xb5, 0xbd, 0x2f, 0xeb, 0xed, 0xc4, 0xd0, 0x96, 0xed, 0x63, + 0x64, 0xbb, 0xe9, 0x98, 0xf0, 0x2e, 0x1d, 0xde, 0xd3, 0x73, 0x24, 0xbe, 0x97, 0x53, 0xdb, 0x75, + 0x6d, 0x1e, 0x41, 0x2c, 0xa8, 0x7d, 0xa4, 0x1c, 0x60, 0x9f, 0x18, 0xff, 0x00, 0xca, 0x83, 0xf1, + 0x7e, 0x94, 0x7b, 0xed, 0xfd, 0x39, 0xfe, 0x13, 0x0b, 0xfc, 0x1a, 0xe3, 0x37, 0x37, 0x74, 0xb5, + 0xde, 0xe5, 0x7d, 0x5f, 0xf9, 0x6b, 0x7d, 0xfa, 0xd7, 0xea, 0xee, 0xef, 0xa4, 0xff, 0x00, 0xb2, + 0x30, 0xcf, 0x6f, 0xb9, 0xc3, 0x9f, 0xf9, 0x24, 0x27, 0x39, 0xe0, 0x8f, 0x9c, 0xe3, 0x1e, 0x3e, + 0xfa, 0x99, 0xbf, 0x42, 0xad, 0xd3, 0xff, 0x00, 0x6f, 0xe8, 0xcf, 0xf9, 0xc9, 0x3f, 0xf4, 0xf5, + 0x19, 0xef, 0xa6, 0xca, 0x6a, 0xad, 0x9e, 0xfa, 0x9f, 0xf2, 0x9a, 0xe1, 0x65, 0x97, 0xf5, 0xbf, + 0x7f, 0xd3, 0xfd, 0x5c, 0xf3, 0xab, 0xe3, 0xda, 0xed, 0xf2, 0xe5, 0xcd, 0xb4, 0x63, 0x3d, 0xd4, + 0xe3, 0x19, 0xf8, 0x3f, 0x1f, 0x78, 0x73, 0xfb, 0x31, 0x12, 0x2c, 0xfd, 0xe1, 0xd1, 0x70, 0x67, + 0x46, 0x66, 0x54, 0x49, 0x3a, 0x82, 0x03, 0x2f, 0xb0, 0xf3, 0x61, 0x6d, 0xba, 0x85, 0x48, 0x40, + 0x52, 0x14, 0x93, 0xe1, 0x49, 0x20, 0x90, 0x41, 0xf0, 0x41, 0xad, 0x6b, 0xac, 0x8d, 0xda, 0x7b, + 0xa4, 0x0b, 0x1e, 0xe9, 0xe9, 0x2b, 0xdd, 0xd1, 0xff, 0x00, 0x4f, 0x02, 0xdf, 0x7b, 0x85, 0x2a, + 0x53, 0xbc, 0x14, 0xae, 0xdb, 0x4d, 0xbe, 0x85, 0x2d, 0x58, 0x48, 0x24, 0xe1, 0x20, 0x9c, 0x00, + 0x4f, 0xe1, 0x5a, 0xe5, 0x41, 0x59, 0xbe, 0x91, 0xdf, 0xd8, 0x85, 0x9b, 0xf7, 0x91, 0x8f, 0xe5, + 0xa4, 0xd5, 0x00, 0xab, 0xff, 0x00, 0xf4, 0x8e, 0xfe, 0xc4, 0x2c, 0xdf, 0xbc, 0x8c, 0x7f, 0x2d, + 0x26, 0xa8, 0x05, 0x06, 0xcc, 0x57, 0x99, 0xaa, 0xac, 0x16, 0x6d, 0x53, 0xa7, 0x66, 0xe9, 0xed, + 0x43, 0x6e, 0x66, 0xe3, 0x6b, 0x9c, 0xd7, 0x6a, 0x44, 0x77, 0x47, 0xb5, 0x63, 0xe4, 0x10, 0x47, + 0x94, 0xa8, 0x10, 0x08, 0x50, 0x20, 0xa4, 0x80, 0x41, 0x04, 0x03, 0x5e, 0x9d, 0x28, 0x32, 0xd3, + 0xa8, 0xfd, 0xa8, 0x9f, 0xb4, 0xbb, 0x87, 0x22, 0xcd, 0xc2, 0x6b, 0xf6, 0x39, 0x3f, 0xae, 0xb4, + 0x4f, 0x90, 0x84, 0x8f, 0x50, 0xd6, 0x01, 0x52, 0x49, 0x4f, 0x82, 0xb6, 0xd4, 0xae, 0x0a, 0xfb, + 0x24, 0xfb, 0x55, 0xc5, 0x21, 0x69, 0x15, 0xc2, 0xe9, 0x5b, 0xfd, 0xe7, 0x4b, 0x6a, 0x28, 0x5a, + 0x87, 0x4f, 0x5c, 0x5e, 0xb7, 0x5d, 0x20, 0xbb, 0xdd, 0x8f, 0x21, 0xa3, 0xee, 0x41, 0xf8, 0x20, + 0x83, 0xe1, 0x49, 0x20, 0x90, 0x52, 0x41, 0x0a, 0x04, 0x82, 0x08, 0x24, 0x56, 0xaf, 0xee, 0x76, + 0x85, 0xd3, 0x7b, 0x8d, 0xa4, 0x25, 0x69, 0x7d, 0x51, 0x0b, 0xd4, 0x42, 0x7f, 0xdc, 0xdb, 0x88, + 0x21, 0x2e, 0xc6, 0x74, 0x03, 0xc5, 0xd6, 0x95, 0x83, 0xc5, 0x69, 0xc9, 0xf3, 0xe4, 0x10, 0x4a, + 0x48, 0x29, 0x24, 0x1c, 0xe0, 0xde, 0xcd, 0x88, 0xd7, 0xbb, 0x5d, 0x3a, 0x5b, 0xd7, 0x1b, 0x63, + 0xd7, 0x1d, 0x3c, 0xdb, 0xa4, 0x31, 0x7a, 0x8a, 0xdf, 0x26, 0x16, 0x8c, 0xa0, 0x25, 0x4e, 0x80, + 0x49, 0x61, 0x44, 0xb8, 0x94, 0xf1, 0x5e, 0x01, 0x56, 0x42, 0x4a, 0xc0, 0xc9, 0x0b, 0x33, 0xb7, + 0xdd, 0x6a, 0x69, 0x19, 0xb0, 0x61, 0xc7, 0xd6, 0xfa, 0x7a, 0xe7, 0x69, 0xb8, 0xa9, 0xd4, 0x34, + 0xfc, 0x88, 0x09, 0x4c, 0x88, 0x80, 0x10, 0x90, 0xa7, 0x88, 0x2a, 0x0e, 0x21, 0x3c, 0x8a, 0xcf, + 0x00, 0x97, 0x08, 0x48, 0x18, 0x52, 0xc9, 0xc5, 0x4c, 0x1a, 0x37, 0x7f, 0x36, 0x87, 0x57, 0xdf, + 0x1b, 0xb2, 0x58, 0xb5, 0xbc, 0x27, 0x67, 0xbd, 0x80, 0xcb, 0x52, 0x58, 0x7a, 0x2f, 0x75, 0x45, + 0x49, 0x4a, 0x50, 0x82, 0xf2, 0x10, 0x16, 0xb2, 0xa5, 0x00, 0x10, 0x92, 0x54, 0x7c, 0xe0, 0x1c, + 0x1a, 0xcb, 0x3a, 0x50, 0x6c, 0xc5, 0x2a, 0xa0, 0x74, 0x73, 0xd4, 0x66, 0xa4, 0xd4, 0xfa, 0x9e, + 0xd9, 0xb6, 0x7a, 0xcd, 0xaf, 0xac, 0xde, 0x7a, 0x32, 0xdb, 0xb7, 0x5d, 0x93, 0x9f, 0x50, 0xa5, + 0x34, 0x85, 0xb8, 0x44, 0x92, 0x55, 0x85, 0xe5, 0xb4, 0xe0, 0x2c, 0x00, 0xac, 0xa4, 0x72, 0x0b, + 0x2b, 0x2b, 0x4d, 0xbf, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, + 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0xac, 0xdf, 0x48, + 0xef, 0xec, 0x42, 0xcd, 0xfb, 0xc8, 0xc7, 0xf2, 0xd2, 0x6a, 0x80, 0x55, 0xff, 0x00, 0xfa, 0x47, + 0x7f, 0x62, 0x16, 0x6f, 0xde, 0x46, 0x3f, 0x96, 0x93, 0x54, 0x02, 0x83, 0x66, 0x29, 0x4a, 0x50, + 0x2b, 0x8c, 0xdf, 0x6f, 0xd8, 0x86, 0xbc, 0xfd, 0xdb, 0xb8, 0xff, 0x00, 0x2c, 0xe5, 0x76, 0x75, + 0xc9, 0xef, 0x3c, 0x49, 0x53, 0xf6, 0x7b, 0x5a, 0x41, 0x83, 0x19, 0xe9, 0x52, 0xe4, 0xe9, 0xf9, + 0xec, 0xb0, 0xc3, 0x2d, 0x95, 0xb8, 0xea, 0xd5, 0x1d, 0x61, 0x28, 0x4a, 0x47, 0x95, 0x28, 0x92, + 0x00, 0x03, 0xc9, 0x26, 0x83, 0x24, 0xeb, 0x4c, 0xba, 0x25, 0xff, 0x00, 0x36, 0x2d, 0x23, 0xff, + 0x00, 0x1b, 0xfc, 0xeb, 0xf5, 0x99, 0xb5, 0xa7, 0x3d, 0x19, 0x44, 0x95, 0x0b, 0xa6, 0x8d, 0x1e, + 0xcc, 0xc8, 0xcf, 0x46, 0x75, 0x4d, 0x49, 0x79, 0x28, 0x75, 0xb2, 0x85, 0x14, 0x39, 0x29, 0xe5, + 0xa1, 0x60, 0x1f, 0xf4, 0x54, 0x85, 0x25, 0x40, 0xfc, 0x10, 0xa0, 0x47, 0x83, 0x41, 0x2f, 0xd5, + 0x53, 0xfa, 0x49, 0x6c, 0x91, 0x5f, 0xdb, 0xad, 0x2f, 0xa8, 0xd6, 0xe3, 0xc2, 0x5c, 0x1b, 0xba, + 0xa1, 0x34, 0x80, 0x47, 0x6c, 0xa1, 0xf6, 0x54, 0xb5, 0x92, 0x31, 0x9e, 0x40, 0xc6, 0x46, 0x30, + 0x40, 0xc1, 0x56, 0x41, 0xc8, 0xc5, 0xac, 0xa8, 0xcf, 0xa9, 0xfd, 0x0b, 0x3f, 0x71, 0x36, 0x56, + 0xf7, 0xa7, 0x2c, 0xf0, 0xa1, 0x4a, 0xbc, 0x1e, 0xd4, 0x9b, 0x70, 0x92, 0x52, 0x9e, 0x2e, 0xb6, + 0xe2, 0x54, 0x78, 0x2c, 0x8c, 0x21, 0x6a, 0x6c, 0x38, 0xd8, 0x39, 0x03, 0xde, 0x41, 0x21, 0x24, + 0x9a, 0x0c, 0xb3, 0xad, 0x7f, 0xd0, 0x97, 0xdf, 0xca, 0x8d, 0x0f, 0x61, 0xd4, 0xde, 0x97, 0xd2, + 0x7d, 0x6f, 0x6d, 0x8f, 0x3b, 0xd3, 0xf7, 0x39, 0xf6, 0xbb, 0xad, 0x25, 0x7c, 0x39, 0x60, 0x72, + 0xc7, 0x2c, 0x67, 0x03, 0x38, 0xf8, 0x15, 0x97, 0x50, 0x36, 0x77, 0x76, 0x26, 0xce, 0x8f, 0x0d, + 0x9d, 0xb6, 0xd5, 0xa9, 0x75, 0xf7, 0x52, 0xd2, 0x14, 0xf5, 0xa5, 0xe6, 0x5b, 0x05, 0x47, 0x00, + 0xa9, 0x6b, 0x48, 0x4a, 0x13, 0xe7, 0xca, 0x94, 0x40, 0x03, 0xc9, 0x20, 0x56, 0x9f, 0x6d, 0xad, + 0x92, 0x56, 0x9a, 0xdb, 0xad, 0x35, 0xa7, 0x27, 0x38, 0xcb, 0x92, 0xed, 0x56, 0x88, 0xb0, 0x9f, + 0x5b, 0x24, 0x96, 0xd4, 0xb6, 0x99, 0x4a, 0x14, 0x52, 0x48, 0x04, 0xa7, 0x29, 0x38, 0xc8, 0x07, + 0x1f, 0x70, 0xa0, 0x86, 0x7e, 0x90, 0x4b, 0x24, 0xab, 0xaf, 0x4f, 0xea, 0x9d, 0x1d, 0xc6, 0x52, + 0xd5, 0x9a, 0xef, 0x1a, 0x6c, 0x80, 0xe1, 0x21, 0x4a, 0x42, 0x82, 0xe3, 0x80, 0x8c, 0x03, 0x95, + 0x73, 0x7d, 0x07, 0xce, 0x06, 0x02, 0xbc, 0xe7, 0x00, 0xe7, 0x6d, 0x6c, 0x2e, 0xaa, 0xb0, 0x59, + 0xb5, 0x4e, 0x9d, 0x9b, 0xa7, 0xb5, 0x0d, 0xb9, 0x9b, 0x8d, 0xae, 0x73, 0x5d, 0xa9, 0x11, 0xdd, + 0x1e, 0xd5, 0x8f, 0x90, 0x41, 0x1e, 0x52, 0xa0, 0x40, 0x21, 0x40, 0x82, 0x92, 0x01, 0x04, 0x10, + 0x0d, 0x40, 0x10, 0x3a, 0x30, 0xda, 0x78, 0xd3, 0xa3, 0xc8, 0x7a, 0xe9, 0xab, 0x66, 0x34, 0xd3, + 0xa9, 0x5a, 0xe3, 0xbd, 0x35, 0x90, 0xdb, 0xc0, 0x1c, 0x94, 0x28, 0xa1, 0x94, 0xa8, 0x24, 0xfc, + 0x1e, 0x2a, 0x49, 0xc1, 0xf0, 0x41, 0xf3, 0x41, 0x2f, 0xec, 0x4f, 0xec, 0x43, 0x41, 0xfe, 0xed, + 0xdb, 0xbf, 0x96, 0x6e, 0xbd, 0xad, 0x77, 0x7d, 0xfc, 0x97, 0xd0, 0xf7, 0xed, 0x4d, 0xe9, 0x7d, + 0x5f, 0xd5, 0x16, 0xd9, 0x13, 0xbd, 0x3f, 0x73, 0x87, 0x77, 0xb4, 0xd2, 0x97, 0xc3, 0x96, 0x0f, + 0x1c, 0xf1, 0xc6, 0x70, 0x71, 0x9f, 0x83, 0x5e, 0x9c, 0x08, 0x91, 0x60, 0x41, 0x8f, 0x06, 0x0c, + 0x66, 0x62, 0xc4, 0x8c, 0xd2, 0x59, 0x61, 0x86, 0x5b, 0x08, 0x6d, 0xa4, 0x24, 0x61, 0x28, 0x4a, + 0x47, 0x84, 0xa4, 0x00, 0x00, 0x03, 0xc0, 0x02, 0xbf, 0x16, 0xac, 0xb2, 0x45, 0xd4, 0xba, 0x56, + 0xed, 0xa7, 0x27, 0x38, 0xf3, 0x71, 0x2e, 0xb0, 0x5e, 0x84, 0xfa, 0xd9, 0x20, 0x38, 0x94, 0x3a, + 0x82, 0x85, 0x14, 0x92, 0x08, 0x0a, 0xc2, 0x8e, 0x32, 0x08, 0xcf, 0xdc, 0x68, 0x33, 0x9e, 0x7f, + 0x55, 0x5b, 0xe3, 0x26, 0x74, 0x89, 0x0c, 0xea, 0xe6, 0x61, 0xb4, 0xeb, 0xaa, 0x5a, 0x23, 0xb3, + 0x6a, 0x8a, 0x5b, 0x64, 0x13, 0x90, 0x84, 0x95, 0xb6, 0xa5, 0x14, 0x8f, 0x81, 0xc9, 0x4a, 0x38, + 0x1e, 0x49, 0x3e, 0x6a, 0x46, 0xda, 0x2e, 0xb3, 0x6f, 0xb6, 0xde, 0x16, 0xfd, 0xcb, 0xb5, 0x7d, + 0x79, 0x18, 0x67, 0xfe, 0xf2, 0xb7, 0x36, 0x86, 0x65, 0xa7, 0xed, 0x9f, 0x73, 0x5e, 0xd6, 0x9c, + 0xf2, 0x5b, 0x48, 0xe3, 0xdb, 0xe2, 0x90, 0x49, 0xe6, 0x6b, 0x92, 0xdc, 0x1e, 0x90, 0xf7, 0x4b, + 0x4d, 0x41, 0x99, 0x72, 0xb4, 0x2a, 0xd9, 0xa9, 0xe2, 0x30, 0xea, 0xf8, 0x35, 0x01, 0xc5, 0xa6, + 0x5a, 0x99, 0x48, 0x52, 0x83, 0x85, 0x95, 0xa4, 0x02, 0xac, 0x24, 0x0e, 0xda, 0x16, 0xb5, 0x72, + 0x50, 0x09, 0x0a, 0xf9, 0xa8, 0x02, 0x7c, 0x49, 0x50, 0x27, 0x48, 0x83, 0x3a, 0x33, 0xd1, 0x65, + 0xc6, 0x75, 0x4c, 0xbe, 0xc3, 0xcd, 0x94, 0x38, 0xd2, 0xd2, 0x70, 0xa4, 0x29, 0x27, 0xca, 0x54, + 0x08, 0x20, 0x83, 0xe4, 0x11, 0x41, 0xa0, 0xb7, 0xbd, 0xe1, 0xe9, 0x2e, 0xf9, 0x74, 0x7a, 0xe9, + 0x7b, 0x3a, 0x66, 0xe7, 0x3d, 0xfe, 0x3d, 0xd9, 0x53, 0x34, 0xa3, 0xcf, 0x3a, 0xe7, 0x14, 0x84, + 0x8e, 0x4b, 0x54, 0x72, 0x4e, 0x12, 0x00, 0x19, 0x3f, 0x00, 0x0a, 0xa5, 0xbb, 0xe3, 0x03, 0x6e, + 0xa0, 0xeb, 0xd7, 0xce, 0xd6, 0xdf, 0x1e, 0xba, 0xe9, 0xc9, 0x2d, 0x07, 0xdb, 0x4b, 0xb1, 0xdd, + 0x6d, 0x50, 0xd6, 0x54, 0xa0, 0xa8, 0xe0, 0xba, 0x02, 0x9c, 0x4a, 0x70, 0x08, 0x51, 0x19, 0xc2, + 0x80, 0x25, 0x45, 0x25, 0x47, 0x85, 0xa5, 0x07, 0x75, 0xd3, 0xec, 0xb9, 0x50, 0xb7, 0xd7, 0x42, + 0xbd, 0x0e, 0x4b, 0xd1, 0x9d, 0x56, 0xa0, 0x84, 0xca, 0x96, 0xd3, 0x85, 0x0a, 0x28, 0x71, 0xe4, + 0x21, 0x68, 0x24, 0x7f, 0xa2, 0xa4, 0x29, 0x49, 0x23, 0xe0, 0x85, 0x10, 0x7c, 0x1a, 0xd5, 0xea, + 0xcd, 0xae, 0x8e, 0xf6, 0xa3, 0x52, 0x6b, 0xad, 0xcb, 0xb5, 0x6a, 0x88, 0xc8, 0xf4, 0x76, 0x0d, + 0x39, 0x72, 0x62, 0x64, 0xa9, 0xce, 0xa0, 0x94, 0xb8, 0xeb, 0x4b, 0x4b, 0x89, 0x8e, 0xd8, 0xf1, + 0xc9, 0x6a, 0xc0, 0xcf, 0xdc, 0x84, 0x9e, 0x47, 0xc9, 0x42, 0x57, 0xa4, 0xb4, 0x0a, 0x52, 0x94, + 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, + 0x52, 0x94, 0x0a, 0x52, 0x94, 0x1c, 0x36, 0xf8, 0xed, 0x9d, 0x9b, 0x76, 0x34, 0x13, 0xfa, 0x5a, + 0xf0, 0xfb, 0xd1, 0x54, 0x1d, 0x12, 0x61, 0x4b, 0x6b, 0xca, 0xa3, 0x48, 0x4a, 0x54, 0x94, 0xb8, + 0x53, 0x90, 0x16, 0x9c, 0x2d, 0x40, 0xa4, 0xfc, 0x85, 0x1c, 0x14, 0xab, 0x0a, 0x15, 0xff, 0x00, + 0x4a, 0xf4, 0x47, 0x66, 0x83, 0xa8, 0xa1, 0x4c, 0xd4, 0x3a, 0xe9, 0xeb, 0xcd, 0xad, 0x97, 0x79, + 0xc8, 0x80, 0xd5, 0xb3, 0xd2, 0xaa, 0x40, 0x1f, 0x08, 0x2e, 0x87, 0x94, 0x52, 0x92, 0x71, 0x9c, + 0x0c, 0x91, 0x90, 0x0a, 0x49, 0x0a, 0x16, 0xe6, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x1c, + 0x9c, 0xfd, 0xb2, 0xdb, 0x69, 0xf3, 0xa4, 0x4e, 0x9d, 0xb7, 0xba, 0x4a, 0x54, 0xb9, 0x2e, 0xa9, + 0xe7, 0xdf, 0x7a, 0xcd, 0x1d, 0x6e, 0x3a, 0xb5, 0x1c, 0xa9, 0x6a, 0x51, 0x46, 0x54, 0xa2, 0x49, + 0x24, 0x9f, 0x24, 0x9a, 0xeb, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, + 0x05, 0x29, 0x4a, 0x05, 0x73, 0xfa, 0x93, 0x44, 0x68, 0xbd, 0x4b, 0x39, 0x13, 0xb5, 0x1e, 0x90, + 0xd3, 0xf7, 0x99, 0x6d, 0xb4, 0x19, 0x43, 0xf3, 0xed, 0xac, 0xc8, 0x71, 0x28, 0x04, 0x90, 0x80, + 0xa5, 0xa4, 0x90, 0x9c, 0xa9, 0x47, 0x1f, 0x19, 0x27, 0xf1, 0xae, 0x82, 0x94, 0x1c, 0x67, 0xe6, + 0x9f, 0x6b, 0x3f, 0xab, 0x4d, 0x19, 0xfd, 0x85, 0x1b, 0xfb, 0x94, 0xfc, 0xd3, 0xed, 0x67, 0xf5, + 0x69, 0xa3, 0x3f, 0xb0, 0xa3, 0x7f, 0x72, 0xbb, 0x3a, 0x50, 0x7c, 0x60, 0x44, 0x8b, 0x02, 0x0c, + 0x78, 0x30, 0x63, 0x33, 0x16, 0x24, 0x66, 0x92, 0xcb, 0x0c, 0x32, 0xd8, 0x43, 0x6d, 0x21, 0x23, + 0x09, 0x42, 0x52, 0x3c, 0x25, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x15, 0xf6, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, + 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, + 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x15, 0xf1, 0x9f, 0x2e, 0x2c, 0x08, 0x32, 0x27, + 0x4e, 0x92, 0xcc, 0x58, 0x91, 0x9a, 0x53, 0xcf, 0xbe, 0xf3, 0x81, 0x0d, 0xb4, 0x84, 0x8c, 0xa9, + 0x6a, 0x51, 0xf0, 0x94, 0x80, 0x09, 0x24, 0xf8, 0x00, 0x57, 0xda, 0xab, 0x6f, 0xd2, 0x29, 0x2e, + 0x54, 0x6d, 0x8a, 0xb7, 0xb3, 0x1e, 0x4b, 0xcc, 0xb5, 0x2b, 0x50, 0x47, 0x66, 0x42, 0x1b, 0x70, + 0xa5, 0x2f, 0x20, 0x32, 0xfa, 0xc2, 0x16, 0x07, 0xda, 0x4f, 0x34, 0x21, 0x58, 0x3e, 0x32, 0x94, + 0x9f, 0x90, 0x28, 0x25, 0xff, 0x00, 0xce, 0xc6, 0xd6, 0x7f, 0x59, 0x7a, 0x33, 0xfb, 0x76, 0x37, + 0xf7, 0xe9, 0xf9, 0xd8, 0xda, 0xcf, 0xeb, 0x2f, 0x46, 0x7f, 0x6e, 0xc6, 0xfe, 0xfd, 0x64, 0xd5, + 0x28, 0x36, 0x4a, 0x04, 0xb8, 0xb3, 0xe0, 0xc7, 0x9d, 0x06, 0x4b, 0x32, 0xa2, 0x49, 0x69, 0x2f, + 0x30, 0xfb, 0x2e, 0x05, 0xb6, 0xea, 0x14, 0x32, 0x95, 0xa5, 0x43, 0xc2, 0x92, 0x41, 0x04, 0x11, + 0xe0, 0x83, 0x5f, 0x6a, 0xcb, 0x4e, 0x9f, 0xf7, 0x83, 0x52, 0x6d, 0x5e, 0xaf, 0x81, 0x26, 0x35, + 0xca, 0x6a, 0xf4, 0xe2, 0xe4, 0x83, 0x74, 0xb5, 0x82, 0x5c, 0x69, 0xe6, 0x94, 0x52, 0x1c, 0x5a, + 0x1b, 0x2a, 0x09, 0x0f, 0x04, 0xa4, 0x71, 0x5e, 0x41, 0xca, 0x40, 0x24, 0xa4, 0xa9, 0x27, 0x52, + 0xe8, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, + 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, + 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x28, 0x3e, + 0xfd, 0x75, 0x3d, 0xba, 0x90, 0xb7, 0x67, 0x50, 0xd9, 0x74, 0xb5, 0xd9, 0x9b, 0x05, 0xae, 0xd1, + 0x39, 0xeb, 0x6b, 0x6c, 0x37, 0x11, 0x89, 0x0a, 0x74, 0xb2, 0xe2, 0x90, 0xa7, 0x96, 0xb7, 0x5b, + 0x51, 0xe4, 0xa2, 0x09, 0xc0, 0xc0, 0x48, 0xe2, 0x3c, 0x90, 0x54, 0xa9, 0x7f, 0xa2, 0xfd, 0xfb, + 0xbe, 0xee, 0x54, 0x89, 0xfa, 0x3b, 0x58, 0xb7, 0xea, 0xef, 0x90, 0x63, 0x2e, 0x73, 0x57, 0x36, + 0x9a, 0x43, 0x69, 0x7d, 0x80, 0xe2, 0x12, 0x50, 0xe2, 0x12, 0x00, 0x4a, 0xd2, 0xa7, 0x13, 0x82, + 0x91, 0x85, 0x27, 0xe4, 0x02, 0x9c, 0xae, 0xb0, 0x75, 0x8b, 0xa4, 0x1c, 0xd2, 0x1d, 0x40, 0x6a, + 0x14, 0x04, 0x3c, 0x22, 0x5e, 0x1d, 0xfa, 0xe2, 0x2a, 0xdd, 0x71, 0x0a, 0x53, 0x81, 0xf2, 0x54, + 0xe1, 0x1c, 0x7e, 0xca, 0x43, 0xc1, 0xe4, 0x80, 0x40, 0x38, 0x48, 0xf9, 0xc8, 0x51, 0x74, 0x6d, + 0x7f, 0x6f, 0x4f, 0x75, 0x19, 0xa5, 0x9d, 0x93, 0x71, 0x7a, 0x14, 0x49, 0xce, 0xbb, 0x6f, 0x78, + 0x36, 0x57, 0xc5, 0xf2, 0xf3, 0x4a, 0x43, 0x4d, 0xac, 0x27, 0xed, 0x24, 0xbc, 0x59, 0xf9, 0xf0, + 0x08, 0x4a, 0x8e, 0x38, 0xe4, 0x06, 0x9c, 0x55, 0x66, 0xfa, 0x47, 0x7f, 0x62, 0x16, 0x6f, 0xde, + 0x46, 0x3f, 0x96, 0x93, 0x56, 0x66, 0xb9, 0x3d, 0xe3, 0xd2, 0x0d, 0xeb, 0xdd, 0xae, 0xd4, 0x5a, + 0x45, 0x68, 0x65, 0x4e, 0xdc, 0x60, 0xad, 0x11, 0x8b, 0xce, 0x2d, 0x0d, 0xa2, 0x42, 0x7d, 0xec, + 0x2d, 0x45, 0x1e, 0xee, 0x29, 0x75, 0x28, 0x51, 0xc0, 0x39, 0x03, 0x04, 0x11, 0xe0, 0x86, 0x49, + 0xd5, 0xb9, 0x46, 0xc3, 0xe8, 0x8d, 0xdd, 0xe9, 0xfe, 0xd5, 0xad, 0x76, 0x9a, 0xde, 0xcd, 0x97, + 0x55, 0x32, 0xd2, 0x84, 0xfb, 0x77, 0xad, 0x71, 0xc6, 0x64, 0xc8, 0x40, 0x01, 0xd6, 0x0f, 0x75, + 0xd7, 0x0b, 0x2a, 0xc8, 0xe6, 0xd1, 0x2a, 0x19, 0x4b, 0x89, 0xe7, 0x8e, 0x61, 0x48, 0xab, 0x3a, + 0xaa, 0xc1, 0x79, 0xd2, 0xda, 0x8a, 0x6e, 0x9e, 0xd4, 0x36, 0xe7, 0xad, 0xd7, 0x48, 0x2e, 0xf6, + 0xa4, 0x47, 0x74, 0x7b, 0x90, 0x7e, 0x41, 0x04, 0x78, 0x52, 0x48, 0x20, 0x85, 0x02, 0x42, 0x81, + 0x04, 0x12, 0x08, 0x35, 0x26, 0xf4, 0xad, 0xbc, 0x12, 0xb6, 0x9b, 0x5e, 0x83, 0x23, 0xb2, 0xad, + 0x39, 0x79, 0x75, 0x96, 0x2f, 0x29, 0x71, 0x04, 0xa9, 0xa4, 0x25, 0x44, 0x26, 0x42, 0x0a, 0x52, + 0x55, 0xc9, 0xbe, 0x6b, 0x3c, 0x40, 0x21, 0x60, 0xa8, 0x63, 0x3c, 0x54, 0x90, 0xf6, 0x74, 0xaf, + 0x49, 0xbb, 0xc7, 0x73, 0xd4, 0x50, 0xa0, 0xde, 0xac, 0x4c, 0xd8, 0x6d, 0xce, 0xbb, 0x89, 0x37, + 0x07, 0x67, 0x46, 0x7d, 0x31, 0xd1, 0xf2, 0x54, 0x1b, 0x6d, 0xd2, 0xa5, 0xab, 0xc6, 0x02, 0x46, + 0x01, 0x24, 0x64, 0xa4, 0x65, 0x43, 0x47, 0xeb, 0x99, 0xdb, 0xdd, 0x7f, 0xa3, 0x77, 0x02, 0xd6, + 0xab, 0x8e, 0x8e, 0xd4, 0x30, 0xae, 0xec, 0xb7, 0x8e, 0xea, 0x5a, 0x51, 0x4b, 0xac, 0xe5, 0x4a, + 0x48, 0xee, 0x34, 0xa0, 0x16, 0xde, 0x4a, 0x15, 0x8e, 0x49, 0x1c, 0x80, 0xc8, 0xc8, 0xf3, 0x5d, + 0x35, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, + 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, + 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x05, 0x26, + 0xfa, 0x4a, 0x34, 0xcf, 0x6e, 0xf9, 0xa4, 0xb5, 0x8b, 0x2c, 0xcd, 0x5f, 0xa8, 0x8c, 0xf5, 0xb2, + 0x4b, 0x9c, 0x73, 0x1d, 0xae, 0xda, 0xbb, 0xac, 0x8c, 0x81, 0xe1, 0x6a, 0xee, 0xbf, 0xe0, 0x9f, + 0x21, 0xbf, 0x03, 0xda, 0xa2, 0x6a, 0x6d, 0x8a, 0xe9, 0x3e, 0xc7, 0x7c, 0x81, 0x7b, 0xb5, 0xbf, + 0xe9, 0xe7, 0xdb, 0xe4, 0xb7, 0x2a, 0x2b, 0xbc, 0x12, 0xae, 0xdb, 0xad, 0xa8, 0x29, 0x0a, 0xc2, + 0x81, 0x07, 0x0a, 0x00, 0xe0, 0x82, 0x3f, 0x1a, 0xd1, 0x8e, 0xb9, 0xb4, 0xcf, 0xe5, 0x17, 0x4f, + 0x37, 0x59, 0x0d, 0xb3, 0x35, 0xe9, 0x36, 0x49, 0x2c, 0x5c, 0xd8, 0x6e, 0x32, 0x79, 0x67, 0x8a, + 0xbb, 0x4e, 0x15, 0x8c, 0x13, 0xc1, 0x2d, 0x3a, 0xea, 0xc9, 0x18, 0xc7, 0x00, 0x49, 0xc0, 0x20, + 0xe6, 0xd5, 0x06, 0xc5, 0xd8, 0xae, 0x90, 0x2f, 0x96, 0x38, 0x17, 0xbb, 0x5b, 0xfe, 0xa2, 0x05, + 0xc2, 0x33, 0x72, 0xa2, 0xbb, 0xc1, 0x49, 0xee, 0x34, 0xe2, 0x42, 0x90, 0xac, 0x28, 0x02, 0x32, + 0x92, 0x0e, 0x08, 0x07, 0xf1, 0xaf, 0xdb, 0x50, 0x67, 0x43, 0xba, 0xc6, 0x7e, 0xaf, 0xd8, 0x48, + 0x2d, 0x5c, 0x51, 0xfa, 0xeb, 0x0c, 0x95, 0x59, 0x92, 0xee, 0x53, 0xfa, 0xd6, 0x9a, 0x6d, 0xb5, + 0x34, 0x70, 0x94, 0x80, 0x9e, 0x2d, 0xb8, 0x86, 0xfe, 0xf2, 0x7b, 0x7c, 0x89, 0x25, 0x46, 0xa7, + 0x3a, 0x0a, 0xb3, 0xd6, 0xb6, 0xc1, 0x4f, 0xd6, 0x9c, 0xb7, 0x13, 0x46, 0x47, 0xef, 0xdf, 0x22, + 0x46, 0x0d, 0xdc, 0x6d, 0xad, 0x34, 0x9e, 0x73, 0x9a, 0x46, 0x70, 0xeb, 0x78, 0x19, 0x5b, 0xc9, + 0x49, 0xe3, 0xc4, 0xe4, 0xad, 0x09, 0x48, 0x4e, 0x0a, 0x02, 0x57, 0x43, 0x6b, 0x66, 0x2a, 0x39, + 0xdc, 0x1d, 0x8f, 0xda, 0xdd, 0x6f, 0x06, 0x63, 0x37, 0x7d, 0x1f, 0x6c, 0x8f, 0x2e, 0x5b, 0xab, + 0x7d, 0x77, 0x18, 0x0c, 0x22, 0x34, 0xbe, 0xf2, 0x82, 0x81, 0x74, 0xba, 0x80, 0x0a, 0xd5, 0x95, + 0x95, 0x61, 0x7c, 0x92, 0x55, 0x82, 0xa4, 0x9c, 0x50, 0x65, 0xd5, 0x92, 0xed, 0x75, 0xb1, 0xdd, + 0x19, 0xba, 0x59, 0x2e, 0x73, 0x6d, 0x93, 0xd8, 0xe5, 0xda, 0x95, 0x0d, 0xf5, 0x32, 0xeb, 0x7c, + 0x92, 0x52, 0x78, 0xad, 0x24, 0x11, 0x94, 0x92, 0x0e, 0x0f, 0xc1, 0x22, 0xa5, 0x9d, 0x13, 0xd4, + 0xee, 0xf2, 0xe9, 0x7f, 0x48, 0xcf, 0xe5, 0x47, 0xd7, 0x70, 0xa3, 0x73, 0xff, 0x00, 0xb3, 0x5d, + 0xd8, 0x4c, 0x8e, 0xef, 0x2e, 0x47, 0xde, 0xf7, 0x87, 0xd5, 0x82, 0xac, 0x8f, 0xd6, 0x78, 0xc0, + 0x1f, 0x64, 0x71, 0xa9, 0x67, 0x59, 0x74, 0x43, 0x75, 0x6f, 0xb8, 0xf6, 0x8e, 0xd7, 0x10, 0xa5, + 0x72, 0x92, 0x7b, 0x71, 0xae, 0xd1, 0x54, 0xc7, 0x69, 0x83, 0xc8, 0x8c, 0xbc, 0xdf, 0x3e, 0x6b, + 0x1e, 0xd1, 0xfe, 0x4d, 0x00, 0xe4, 0x9f, 0x6e, 0x02, 0x4d, 0x73, 0xdd, 0x9d, 0xb0, 0xd6, 0x5b, + 0x5f, 0x7c, 0x6e, 0xd7, 0xab, 0xad, 0x7e, 0x9b, 0xd4, 0x73, 0x54, 0x39, 0x4d, 0x2c, 0x39, 0x1e, + 0x5a, 0x10, 0xae, 0x25, 0x4d, 0xac, 0x7f, 0xf8, 0x3c, 0x54, 0x12, 0xb0, 0x14, 0x92, 0xa4, 0xa7, + 0x90, 0xa0, 0xbf, 0x3b, 0x1d, 0xd4, 0x9e, 0x82, 0xdc, 0x96, 0x58, 0x83, 0x32, 0x4b, 0x3a, 0x67, + 0x51, 0xba, 0xe9, 0x6d, 0x36, 0xb9, 0xb2, 0x32, 0x97, 0x49, 0x5a, 0x52, 0x8e, 0xcb, 0xc5, 0x29, + 0x4b, 0x8a, 0x57, 0x34, 0x80, 0x8f, 0x0b, 0xc8, 0x56, 0x12, 0x40, 0xe4, 0x66, 0xca, 0xc6, 0x7a, + 0xbc, 0xdf, 0x47, 0xee, 0xeb, 0xcf, 0xbf, 0x5a, 0xe5, 0x6d, 0x8d, 0xed, 0x73, 0x66, 0x49, 0xb4, + 0xc6, 0x54, 0xcb, 0x6c, 0xb7, 0x16, 0x95, 0x25, 0x10, 0xd2, 0xa6, 0xdb, 0xf4, 0xe7, 0xe1, 0x43, + 0x82, 0x96, 0x0a, 0x72, 0x55, 0xed, 0x51, 0x4f, 0xb4, 0x21, 0x20, 0x85, 0xb2, 0xa5, 0x29, 0x40, + 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, + 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x41, 0xf1, 0x9f, 0x12, 0x2c, 0xf8, 0x32, 0x20, 0xce, 0x8c, + 0xcc, 0xa8, 0x92, 0x5a, 0x53, 0x2f, 0xb0, 0xf3, 0x61, 0x6d, 0xba, 0x85, 0x0c, 0x29, 0x0a, 0x49, + 0xf0, 0xa4, 0x90, 0x48, 0x20, 0xf8, 0x20, 0xd6, 0x43, 0xeb, 0x9d, 0x33, 0x75, 0xd1, 0xba, 0xbe, + 0xeb, 0xa5, 0xaf, 0x6c, 0xf6, 0xa7, 0xdb, 0x24, 0xae, 0x3b, 0xb8, 0x4a, 0x82, 0x57, 0x83, 0xe1, + 0xc4, 0x72, 0x00, 0x94, 0x29, 0x38, 0x52, 0x49, 0x03, 0x29, 0x50, 0x3f, 0x7d, 0x6b, 0xf5, 0x53, + 0x3f, 0xa4, 0x4b, 0x6d, 0x3f, 0xf8, 0x76, 0xe9, 0x5a, 0x62, 0x7f, 0xab, 0x6f, 0xbd, 0x76, 0x9b, + 0xff, 0x00, 0xd0, 0x7d, 0x5c, 0x51, 0xff, 0x00, 0x9b, 0x4a, 0x5a, 0xd5, 0xff, 0x00, 0xd0, 0x48, + 0x14, 0x10, 0x9f, 0x4b, 0x9b, 0xd2, 0xe6, 0xce, 0x6a, 0xa9, 0xf2, 0x25, 0x5b, 0x9e, 0xb9, 0xd9, + 0x6e, 0xcd, 0x34, 0xd4, 0xe8, 0xec, 0xb8, 0x84, 0x38, 0x82, 0x85, 0xe5, 0x2f, 0x24, 0xa9, 0x27, + 0x92, 0x90, 0x85, 0x3a, 0x02, 0x39, 0x20, 0x28, 0xaf, 0xca, 0x86, 0x01, 0x1a, 0x57, 0x62, 0xba, + 0x40, 0xbe, 0x58, 0xe0, 0x5e, 0xed, 0x6f, 0xfa, 0x88, 0x17, 0x08, 0xcd, 0xca, 0x8a, 0xef, 0x05, + 0x27, 0xb8, 0xd3, 0x89, 0x0a, 0x42, 0xb0, 0xa0, 0x08, 0xca, 0x48, 0x38, 0x20, 0x1f, 0xc6, 0xb1, + 0xee, 0x04, 0x49, 0x53, 0xe7, 0x47, 0x83, 0x06, 0x33, 0xd2, 0xa5, 0xc9, 0x75, 0x2c, 0xb0, 0xc3, + 0x2d, 0x95, 0xb8, 0xea, 0xd4, 0x70, 0x94, 0x25, 0x23, 0xca, 0x94, 0x49, 0x00, 0x01, 0xe4, 0x93, + 0x5a, 0xe3, 0xb6, 0xb6, 0x49, 0x5a, 0x6b, 0x6e, 0xb4, 0xd6, 0x9c, 0x9c, 0xe3, 0x2e, 0x4b, 0xb5, + 0x5a, 0x22, 0xc2, 0x7d, 0x6c, 0x92, 0x5b, 0x52, 0xda, 0x65, 0x28, 0x51, 0x49, 0x20, 0x12, 0x9c, + 0xa4, 0xe3, 0x20, 0x1c, 0x7d, 0xc2, 0x82, 0x19, 0xea, 0x07, 0xaa, 0x3b, 0x36, 0xd7, 0x6b, 0x5f, + 0xc9, 0x18, 0x3a, 0x69, 0xed, 0x43, 0x71, 0x8e, 0xd2, 0x57, 0x70, 0x26, 0x5f, 0xa4, 0x6e, 0x31, + 0x5a, 0x52, 0xb6, 0xd0, 0x09, 0x6d, 0x7d, 0xc5, 0x14, 0x28, 0x28, 0xe0, 0x00, 0x01, 0x48, 0xc9, + 0x3c, 0x82, 0x63, 0x9f, 0xd3, 0x9f, 0xfd, 0xd7, 0x7f, 0x1f, 0xff, 0x00, 0xdb, 0xd7, 0x27, 0xd6, + 0x96, 0xd2, 0x6e, 0x1c, 0xdd, 0xf0, 0xb8, 0xea, 0x9b, 0x2e, 0x96, 0xb9, 0xdf, 0x2d, 0x77, 0xa6, + 0x98, 0x5b, 0x0e, 0x5a, 0xe2, 0xb9, 0x25, 0x4d, 0x16, 0x98, 0x69, 0xa5, 0xa1, 0xd4, 0xa1, 0x24, + 0xa1, 0x59, 0x46, 0x46, 0x7c, 0x28, 0x28, 0x60, 0x92, 0x14, 0x13, 0x09, 0x7e, 0x69, 0xf7, 0x4f, + 0xfa, 0xb4, 0xd6, 0x7f, 0xd8, 0x52, 0x7f, 0xb9, 0x41, 0x66, 0x7f, 0x4e, 0x7f, 0xf7, 0x5d, 0xfc, + 0x7f, 0xff, 0x00, 0x6f, 0x51, 0x66, 0xf6, 0x75, 0x43, 0xad, 0xf7, 0x1a, 0x0c, 0xbb, 0x14, 0x5b, + 0x7d, 0xb2, 0xc7, 0xa7, 0x25, 0x34, 0x5a, 0x7a, 0x01, 0x61, 0xb9, 0x8e, 0x3c, 0x08, 0x47, 0x97, + 0x1d, 0x75, 0x1f, 0x69, 0x2b, 0x49, 0x52, 0x14, 0xda, 0x5b, 0x29, 0x24, 0x79, 0x25, 0x21, 0x42, + 0x39, 0xfc, 0xd3, 0xee, 0x9f, 0xf5, 0x69, 0xac, 0xff, 0x00, 0xb0, 0xa4, 0xff, 0x00, 0x72, 0xbf, + 0x6d, 0x93, 0x65, 0x37, 0x72, 0xf1, 0x74, 0x66, 0xdd, 0x13, 0x6e, 0x35, 0x33, 0x4f, 0x3d, 0xcb, + 0x8a, 0xa6, 0x5b, 0xdc, 0x8a, 0xd0, 0xc2, 0x4a, 0x8f, 0x27, 0x5e, 0x09, 0x42, 0x7c, 0x03, 0x8c, + 0xa8, 0x64, 0xe0, 0x0c, 0x92, 0x05, 0x04, 0x7f, 0x56, 0xb3, 0xe8, 0xdf, 0xb0, 0x5e, 0x57, 0xb8, + 0xb7, 0xed, 0x52, 0x2d, 0xcf, 0x7d, 0x4a, 0xd5, 0xa1, 0xcb, 0x7a, 0xa6, 0x11, 0x86, 0xcc, 0x85, + 0xbc, 0xc3, 0x81, 0xb1, 0x9f, 0xb4, 0xae, 0x08, 0x24, 0xe3, 0x3c, 0x41, 0x4e, 0x71, 0xc9, 0x39, + 0xfd, 0xbb, 0x5f, 0xd1, 0x5d, 0xe6, 0x5b, 0xcd, 0x4c, 0xdc, 0x6d, 0x42, 0xcd, 0xb6, 0x22, 0x9a, + 0x42, 0xcc, 0x0b, 0x4a, 0xbb, 0xb2, 0x72, 0xa4, 0x2b, 0x28, 0x5b, 0xab, 0x4f, 0x6d, 0xb5, 0x21, + 0x5c, 0x33, 0xc4, 0x3a, 0x15, 0xee, 0x00, 0x8f, 0x0a, 0x37, 0x33, 0x4a, 0xd8, 0x2c, 0xda, 0x5b, + 0x4e, 0xc2, 0xd3, 0xda, 0x7a, 0xdc, 0xcd, 0xba, 0xd7, 0x05, 0xae, 0xd4, 0x78, 0xed, 0x0f, 0x6a, + 0x07, 0xc9, 0x24, 0x9f, 0x2a, 0x51, 0x24, 0x92, 0xa2, 0x49, 0x51, 0x24, 0x92, 0x49, 0x26, 0x83, + 0xd3, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, + 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x44, 0xd7, 0xbe, 0xa4, 0x76, 0x4a, 0xcf, 0x74, 0x7a, 0xdd, 0x2f, 0x5f, 0x42, + 0x75, 0xe6, 0x78, 0xf2, 0x54, 0x38, 0xcf, 0xca, 0x68, 0xe5, 0x21, 0x43, 0x8b, 0xac, 0xb6, 0xa4, + 0x2b, 0xc1, 0x19, 0xc2, 0x8e, 0x0e, 0x41, 0xc1, 0x04, 0x54, 0x81, 0xa3, 0x75, 0x5e, 0x9b, 0xd6, + 0x56, 0x36, 0xef, 0x7a, 0x5a, 0xf5, 0x0a, 0xef, 0x01, 0xcc, 0x0e, 0xec, 0x67, 0x02, 0xb8, 0x28, + 0xa5, 0x2a, 0xe0, 0xb1, 0xf2, 0x85, 0x84, 0xa9, 0x24, 0xa1, 0x40, 0x28, 0x64, 0x64, 0x0a, 0x0f, + 0x66, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0xbe, 0x33, 0xe2, 0x45, 0x9f, 0x06, 0x44, 0x19, 0xd1, + 0x99, 0x95, 0x12, 0x4b, 0x4a, 0x65, 0xf6, 0x1e, 0x6c, 0x2d, 0xb7, 0x50, 0xa1, 0x85, 0x21, 0x49, + 0x3e, 0x14, 0x92, 0x09, 0x04, 0x1f, 0x04, 0x1a, 0xfb, 0x52, 0x83, 0x99, 0xb2, 0x6d, 0xee, 0x81, + 0xb1, 0xdd, 0x19, 0xba, 0x59, 0x34, 0x3e, 0x99, 0xb6, 0x4f, 0x63, 0x97, 0x6a, 0x54, 0x3b, 0x53, + 0x0c, 0xba, 0xdf, 0x24, 0x94, 0x9e, 0x2b, 0x4a, 0x41, 0x19, 0x49, 0x20, 0xe0, 0xfc, 0x12, 0x2b, + 0xa6, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, + 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x15, 0x58, 0x3e, 0x90, 0x0d, 0xce, + 0x95, 0xa6, 0x34, 0x54, 0x3d, 0x05, 0x68, 0x75, 0x94, 0xcb, 0xd4, 0x8d, 0x38, 0x67, 0xba, 0x89, + 0x45, 0x2f, 0xc7, 0x8a, 0x85, 0x23, 0xda, 0x10, 0x92, 0x0f, 0x17, 0x8f, 0x24, 0x72, 0x57, 0xb4, + 0xa5, 0x0e, 0xa7, 0x07, 0x24, 0xa6, 0xcf, 0xd6, 0x53, 0xf5, 0x15, 0xac, 0x60, 0x6b, 0xed, 0xea, + 0xd4, 0xda, 0xaa, 0xd6, 0x8e, 0x30, 0x25, 0xc9, 0x4b, 0x71, 0x55, 0x95, 0x7e, 0xb5, 0xa6, 0x5b, + 0x43, 0x28, 0x77, 0x0a, 0x4a, 0x4a, 0x79, 0xa5, 0xb0, 0xbe, 0x24, 0x65, 0x3c, 0xb0, 0x73, 0x8c, + 0xd0, 0x47, 0xf5, 0x20, 0x6c, 0x5e, 0xeb, 0xea, 0x4d, 0xa4, 0xd5, 0xe9, 0xbd, 0xd9, 0x17, 0xea, + 0x21, 0x3f, 0xc5, 0xbb, 0x95, 0xb5, 0xc5, 0x94, 0xb5, 0x35, 0xa0, 0x4f, 0x83, 0xf3, 0xc5, 0x69, + 0xc9, 0x29, 0x58, 0x04, 0xa4, 0x93, 0xe0, 0xa4, 0xa9, 0x2a, 0xe7, 0xf4, 0x4e, 0x90, 0xbc, 0xea, + 0xf7, 0xae, 0xe8, 0xb3, 0xa1, 0x92, 0x9b, 0x3d, 0xa2, 0x55, 0xe2, 0x6a, 0xdd, 0x73, 0x8a, 0x5b, + 0x8e, 0xc2, 0x39, 0x28, 0x8f, 0xbd, 0x4a, 0x24, 0xa5, 0x20, 0x00, 0x7c, 0xa8, 0x67, 0x09, 0x05, + 0x43, 0x9f, 0xa0, 0xd7, 0xfd, 0x0d, 0xa9, 0xad, 0x5a, 0xcb, 0x48, 0x5a, 0xb5, 0x4d, 0x91, 0xee, + 0xec, 0x0b, 0x9c, 0x64, 0x48, 0x6b, 0x2a, 0x49, 0x52, 0x32, 0x3c, 0xb6, 0xbe, 0x24, 0x80, 0xb4, + 0xab, 0x29, 0x50, 0x04, 0xe1, 0x49, 0x23, 0xee, 0xaf, 0x66, 0xaa, 0x6f, 0xd1, 0xb9, 0xa9, 0xae, + 0xb7, 0x0d, 0x21, 0xaa, 0x74, 0xb4, 0xb7, 0xbb, 0xb0, 0x2c, 0xf2, 0x63, 0xc8, 0x85, 0xc9, 0x4a, + 0x52, 0x9b, 0xf5, 0x01, 0xde, 0xe3, 0x63, 0x27, 0x01, 0x1c, 0x99, 0x0a, 0x00, 0x01, 0xee, 0x5b, + 0x84, 0xe7, 0x97, 0x8b, 0x65, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, + 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x45, 0x9a, 0xab, 0xa8, 0x6d, 0x9c, 0xd3, 0x1a, 0x8a, 0x6e, 0x9f, + 0xbd, 0x6b, 0x46, 0x59, 0xb8, 0xc1, 0x77, 0xb3, 0x25, 0xa6, 0xa1, 0x49, 0x7d, 0x2d, 0xac, 0x7c, + 0xa0, 0xad, 0xb6, 0xd4, 0x92, 0xa1, 0xf0, 0x40, 0x39, 0x04, 0x10, 0x70, 0x41, 0x03, 0xcc, 0xfd, + 0x28, 0xf6, 0x27, 0xfa, 0x73, 0xfc, 0x26, 0x6f, 0xf8, 0x34, 0x13, 0x35, 0x2a, 0x19, 0xfd, 0x28, + 0xf6, 0x27, 0xfa, 0x73, 0xfc, 0x26, 0x6f, 0xf8, 0x35, 0x2c, 0xd9, 0x2e, 0xd6, 0xab, 0xe5, 0xad, + 0x9b, 0xa5, 0x92, 0xe7, 0x0a, 0xe7, 0x01, 0xfe, 0x5d, 0xa9, 0x50, 0xdf, 0x4b, 0xcd, 0x39, 0xc5, + 0x45, 0x27, 0x8a, 0xd2, 0x48, 0x38, 0x50, 0x20, 0xe0, 0xfc, 0x82, 0x28, 0x3f, 0x6d, 0x29, 0x4a, + 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x63, 0x3d, 0x6c, 0xc5, 0x63, 0x3d, + 0x05, 0xb9, 0xe8, 0xbe, 0xd7, 0xb6, 0xcc, 0x6c, 0xf6, 0xb1, 0x9d, 0xad, 0x35, 0x25, 0xb2, 0xc5, + 0x2f, 0x53, 0x3b, 0x27, 0x4f, 0x87, 0xe6, 0xce, 0x8f, 0x19, 0xc1, 0x15, 0x31, 0xdb, 0x2e, 0x7a, + 0x75, 0x3a, 0x33, 0xc8, 0x99, 0x20, 0xab, 0xed, 0x27, 0x28, 0x6b, 0x29, 0xf1, 0xe6, 0xa9, 0xdf, + 0xad, 0xff, 0x00, 0x54, 0xdf, 0x27, 0xda, 0xfd, 0x6c, 0x29, 0xfe, 0x8e, 0x4b, 0x91, 0xfd, 0x54, + 0x27, 0x7b, 0x91, 0xdf, 0xe0, 0xa2, 0x9e, 0xe3, 0x6b, 0xc0, 0xe4, 0x85, 0x63, 0x29, 0x38, 0x19, + 0x04, 0x1a, 0xfc, 0x54, 0xa0, 0x9e, 0x7a, 0x23, 0xdc, 0xc7, 0x34, 0x1e, 0xec, 0xb3, 0x63, 0x90, + 0xc3, 0xd2, 0x2d, 0x7a, 0xa9, 0xd6, 0x2d, 0xae, 0xa1, 0xae, 0x1c, 0x9b, 0x90, 0x5c, 0xe2, 0xc3, + 0xc7, 0x23, 0x25, 0x29, 0x2e, 0x2d, 0x24, 0x05, 0x0f, 0x0e, 0x15, 0x7b, 0x8a, 0x52, 0x93, 0xa3, + 0xf5, 0x8e, 0x96, 0x2b, 0xa4, 0xfb, 0x1d, 0xf2, 0x05, 0xee, 0xd6, 0xff, 0x00, 0xa7, 0x9f, 0x6f, + 0x92, 0xdc, 0xa8, 0xae, 0xf0, 0x4a, 0xbb, 0x6e, 0xb6, 0xa0, 0xa4, 0x2b, 0x0a, 0x04, 0x1c, 0x28, + 0x03, 0x82, 0x08, 0xfc, 0x6b, 0x62, 0xe8, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, + 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x71, 0x9b, 0x8f, 0xba, 0x7b, + 0x7d, 0xb7, 0x7d, 0x94, 0xeb, 0x1d, 0x51, 0x0a, 0xd8, 0xf3, 0xfc, 0x4b, 0x71, 0xb0, 0xb7, 0xa4, + 0x29, 0x2a, 0xe5, 0x85, 0xf6, 0x9b, 0x0a, 0x5f, 0x0c, 0xa1, 0x43, 0x9f, 0x1e, 0x39, 0x18, 0xce, + 0x70, 0x28, 0x3b, 0x3a, 0x57, 0x0d, 0xb6, 0xbb, 0xbb, 0xb7, 0x5b, 0x8f, 0x3a, 0x5c, 0x1d, 0x19, + 0xa9, 0x99, 0xb9, 0xcb, 0x86, 0xd0, 0x79, 0xe6, 0x0b, 0x0e, 0xb0, 0xe0, 0x41, 0x38, 0xe6, 0x12, + 0xea, 0x12, 0x54, 0x90, 0x70, 0x09, 0x4e, 0x40, 0x2a, 0x4e, 0x71, 0xc8, 0x67, 0xb9, 0xa0, 0x52, + 0x94, 0xa0, 0x55, 0x0d, 0xea, 0x3f, 0xaa, 0xeb, 0xae, 0xa7, 0xf5, 0x1a, 0x67, 0x6d, 0x5d, 0x9b, + 0x64, 0xb4, 0xb5, 0x27, 0xdf, 0x79, 0x69, 0xe5, 0x35, 0x2e, 0x6a, 0x13, 0x8e, 0x3d, 0xb0, 0x00, + 0x53, 0x08, 0x2a, 0x0a, 0x3f, 0x3c, 0xd4, 0x9e, 0x39, 0xe0, 0x0a, 0xd0, 0x7b, 0x9f, 0xa4, 0x17, + 0x75, 0x6f, 0x36, 0x26, 0x60, 0x6d, 0xa5, 0x86, 0x4b, 0xd0, 0x93, 0x75, 0x82, 0xa9, 0x77, 0x77, + 0x90, 0x9c, 0x29, 0xe8, 0xea, 0x5a, 0x9b, 0x43, 0x29, 0x58, 0x56, 0x42, 0x54, 0x5b, 0x77, 0xb8, + 0x30, 0x32, 0x38, 0x0c, 0x94, 0xa9, 0x69, 0x34, 0x82, 0x81, 0x4a, 0xb4, 0xdd, 0x2c, 0xf4, 0xbd, + 0xf9, 0x69, 0x6b, 0x67, 0x59, 0xee, 0x22, 0x66, 0xc2, 0xb1, 0xbd, 0xc1, 0xcb, 0x6d, 0xb9, 0xa5, + 0x76, 0x9d, 0x9c, 0x8e, 0x41, 0x5d, 0xc7, 0x0e, 0x32, 0x86, 0x54, 0x90, 0x40, 0x09, 0xc2, 0xd6, + 0x15, 0xc8, 0x29, 0x20, 0x24, 0xae, 0xdf, 0xfe, 0x69, 0xf6, 0xb3, 0xfa, 0xb4, 0xd1, 0x9f, 0xd8, + 0x51, 0xbf, 0xb9, 0x41, 0x93, 0x55, 0x74, 0xfe, 0x8c, 0xe9, 0x72, 0x97, 0x07, 0x5e, 0x41, 0x5c, + 0x97, 0x95, 0x11, 0x97, 0x60, 0x3c, 0xd3, 0x05, 0xc2, 0x5b, 0x42, 0xd6, 0x24, 0x05, 0xac, 0x27, + 0xe0, 0x29, 0x41, 0xb4, 0x02, 0x47, 0x92, 0x10, 0x9c, 0xfc, 0x0a, 0x9c, 0xb5, 0x27, 0x4f, 0x1b, + 0x2d, 0x7f, 0x9c, 0x89, 0x93, 0xb6, 0xfe, 0xd8, 0xcb, 0xa8, 0x68, 0x34, 0x13, 0x01, 0x6e, 0xc2, + 0x6f, 0x00, 0x93, 0x92, 0x86, 0x14, 0x84, 0x95, 0x79, 0x3e, 0xe2, 0x33, 0x8c, 0x0c, 0xe0, 0x0c, + 0x76, 0x7a, 0x03, 0x45, 0xe9, 0x7d, 0x05, 0xa7, 0x51, 0xa7, 0xf4, 0x8d, 0x9d, 0x9b, 0x55, 0xb9, + 0x2e, 0xa9, 0xe2, 0xd3, 0x6a, 0x52, 0xd4, 0xb5, 0xab, 0xe5, 0x6b, 0x5a, 0xc9, 0x52, 0xd5, 0xe0, + 0x0c, 0xa8, 0x92, 0x02, 0x52, 0x07, 0x80, 0x00, 0x0e, 0x82, 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, + 0x94, 0xa5, 0x02, 0x94, 0xa5, 0x02, 0xb1, 0x9e, 0xb6, 0x17, 0x56, 0x5e, 0xe2, 0xe9, 0xad, 0x2b, + 0x76, 0xd4, 0x73, 0x9b, 0x79, 0xc8, 0x96, 0xa8, 0x2f, 0x4d, 0x7d, 0x0c, 0x80, 0x5c, 0x52, 0x1a, + 0x41, 0x5a, 0x82, 0x41, 0x20, 0x15, 0x61, 0x27, 0x19, 0x20, 0x67, 0xef, 0x15, 0x8f, 0x54, 0x16, + 0x83, 0xa4, 0xde, 0x9e, 0xb4, 0x5e, 0xec, 0xed, 0xd5, 0xc3, 0x51, 0xea, 0x3b, 0x9e, 0xa0, 0x8b, + 0x2e, 0x35, 0xdd, 0xc8, 0x48, 0x44, 0x07, 0xd9, 0x43, 0x65, 0x09, 0x65, 0x95, 0x82, 0x42, 0xda, + 0x59, 0xe5, 0x97, 0x15, 0xf7, 0xe3, 0x00, 0x78, 0xaf, 0x67, 0xab, 0x2d, 0x81, 0xd1, 0x1b, 0x67, + 0xb2, 0x56, 0xfb, 0xae, 0x91, 0xb4, 0x5c, 0xe4, 0xdc, 0x58, 0xbb, 0xb6, 0xd4, 0xfb, 0xa4, 0x89, + 0x0e, 0x3c, 0xe7, 0xa7, 0x5a, 0x5e, 0xf2, 0xe2, 0x53, 0x86, 0x90, 0x9e, 0x65, 0x94, 0x05, 0x04, + 0x27, 0xcf, 0x11, 0x92, 0x54, 0x73, 0x23, 0x7d, 0x1c, 0x5f, 0xb1, 0x0b, 0xcf, 0xef, 0x23, 0xff, + 0x00, 0xcb, 0x46, 0xa9, 0x9b, 0x7b, 0xf4, 0x57, 0xe7, 0x13, 0x6a, 0x35, 0x06, 0x8e, 0x4c, 0x8f, + 0x4e, 0xf5, 0xc2, 0x30, 0xf4, 0xce, 0x15, 0xf1, 0x4a, 0x5f, 0x6d, 0x69, 0x75, 0xae, 0x67, 0x8a, + 0x8f, 0x0e, 0xe2, 0x11, 0xcb, 0x00, 0x9e, 0x39, 0xc7, 0x9c, 0x1a, 0x0c, 0x9a, 0xad, 0x65, 0xd8, + 0xed, 0x53, 0xf9, 0x69, 0xb4, 0x1a, 0x5b, 0x53, 0x2e, 0x77, 0xaf, 0x93, 0x32, 0xda, 0xd7, 0xac, + 0x91, 0xda, 0xed, 0xf3, 0x94, 0x81, 0xc2, 0x47, 0xb7, 0x00, 0x0c, 0x3a, 0x97, 0x07, 0x80, 0x13, + 0xe3, 0xc7, 0x8c, 0x56, 0x6a, 0x4f, 0xd9, 0xdd, 0xd8, 0x85, 0x3a, 0x44, 0x37, 0xb6, 0xdb, 0x56, + 0xa9, 0xd6, 0x1d, 0x53, 0x4b, 0x53, 0x36, 0x97, 0x9e, 0x6c, 0x94, 0x9c, 0x12, 0x95, 0xa1, 0x25, + 0x2b, 0x4f, 0x8f, 0x0a, 0x49, 0x20, 0x8f, 0x20, 0x91, 0x5a, 0x31, 0xd3, 0x46, 0x90, 0xbc, 0xe8, + 0x3d, 0x8f, 0xd3, 0x7a, 0x5b, 0x50, 0xa1, 0x96, 0xee, 0x91, 0x1a, 0x79, 0x72, 0x1b, 0x69, 0xce, + 0xe2, 0x5b, 0x2e, 0xbe, 0xe3, 0xa1, 0x05, 0x43, 0xc1, 0x52, 0x43, 0x80, 0x1c, 0x64, 0x64, 0x1c, + 0x12, 0x30, 0x48, 0x48, 0xd4, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x72, + 0x70, 0x37, 0x37, 0x6d, 0xa7, 0xce, 0x8f, 0x06, 0x0e, 0xe1, 0x69, 0x29, 0x52, 0xe4, 0xba, 0x96, + 0x58, 0x61, 0x9b, 0xcc, 0x75, 0xb8, 0xea, 0xd4, 0x70, 0x94, 0x25, 0x21, 0x79, 0x52, 0x89, 0x20, + 0x00, 0x3c, 0x92, 0x68, 0x3a, 0xca, 0x52, 0x94, 0x0a, 0x81, 0xb7, 0x73, 0xaa, 0x7d, 0xbc, 0xd0, + 0x1a, 0x8a, 0xe5, 0xa6, 0x91, 0x1a, 0xe7, 0x7f, 0xbc, 0x41, 0x69, 0x41, 0x62, 0x08, 0x6f, 0xd3, + 0x22, 0x40, 0xcf, 0xea, 0x1c, 0x75, 0x4a, 0xca, 0x54, 0x08, 0x01, 0x45, 0x29, 0x5f, 0x1c, 0x91, + 0xe5, 0x49, 0x52, 0x44, 0xf3, 0x59, 0x5b, 0xd4, 0xbd, 0x82, 0xf3, 0xa7, 0xb7, 0xd7, 0x58, 0x35, + 0x7a, 0xb7, 0x3d, 0x09, 0x53, 0xae, 0xf2, 0xae, 0x11, 0x0b, 0x83, 0xda, 0xfc, 0x77, 0x9e, 0x5a, + 0xdb, 0x71, 0x04, 0x78, 0x52, 0x48, 0x3f, 0x77, 0xc1, 0x0a, 0x49, 0xc2, 0x92, 0x40, 0x0f, 0xdb, + 0xb8, 0x3d, 0x41, 0xee, 0xd6, 0xb7, 0x83, 0x32, 0xd9, 0x77, 0xd5, 0x8f, 0x47, 0xb5, 0xcb, 0x75, + 0x6a, 0x5c, 0x18, 0x0d, 0x22, 0x33, 0x7c, 0x14, 0x14, 0x92, 0xc9, 0x52, 0x00, 0x71, 0x6d, 0x71, + 0x59, 0x4f, 0x05, 0xa9, 0x40, 0x8c, 0x72, 0xc9, 0x19, 0xa8, 0xb2, 0xbd, 0x3d, 0x27, 0x64, 0x95, + 0xa9, 0x75, 0x55, 0xa7, 0x4e, 0x41, 0x71, 0x96, 0xe5, 0xdd, 0x67, 0x33, 0x09, 0x85, 0xbc, 0x48, + 0x6d, 0x2b, 0x75, 0x61, 0x09, 0x2a, 0x20, 0x12, 0x13, 0x95, 0x0c, 0xe0, 0x13, 0x8f, 0xb8, 0xd5, + 0xc6, 0xdb, 0xde, 0x89, 0x6d, 0x49, 0xb5, 0xa9, 0xcd, 0xc0, 0xd5, 0x93, 0x5d, 0x9e, 0xbc, 0x71, + 0x62, 0xc6, 0x52, 0xdb, 0x4c, 0xe1, 0x4a, 0xce, 0x5c, 0x79, 0xb5, 0x17, 0x32, 0x9e, 0x07, 0xec, + 0x23, 0x89, 0xe4, 0x3d, 0xde, 0x0d, 0x04, 0x27, 0xd0, 0xec, 0x49, 0x52, 0x7a, 0x97, 0xd3, 0x4f, + 0x47, 0x8c, 0xf3, 0xcd, 0x45, 0x6a, 0x63, 0xd2, 0x16, 0xdb, 0x65, 0x49, 0x65, 0x06, 0x2b, 0xa8, + 0x0b, 0x59, 0x1f, 0x65, 0x3c, 0xd6, 0x84, 0xe4, 0xf8, 0xca, 0x92, 0x3e, 0x48, 0xad, 0x2b, 0xae, + 0x67, 0x6f, 0x74, 0x06, 0x8d, 0xdb, 0xfb, 0x5a, 0xad, 0xda, 0x3b, 0x4f, 0x42, 0xb4, 0x32, 0xe6, + 0x3b, 0xaa, 0x69, 0x25, 0x4e, 0xbd, 0x85, 0x29, 0x43, 0xb8, 0xea, 0x89, 0x5b, 0x98, 0x2b, 0x56, + 0x39, 0x28, 0xf1, 0x07, 0x03, 0x03, 0xc5, 0x74, 0xd4, 0x0a, 0xf8, 0xcf, 0x97, 0x16, 0x04, 0x19, + 0x13, 0xa7, 0x49, 0x66, 0x2c, 0x48, 0xcd, 0x29, 0xe7, 0xdf, 0x79, 0xc0, 0x86, 0xda, 0x42, 0x46, + 0x54, 0xb5, 0x28, 0xf8, 0x4a, 0x40, 0x04, 0x92, 0x7c, 0x00, 0x2b, 0xed, 0x55, 0xcf, 0xe9, 0x0c, + 0xba, 0x4f, 0xb7, 0xec, 0x23, 0x11, 0x21, 0xbf, 0xda, 0x66, 0xe7, 0x7b, 0x8f, 0x16, 0x62, 0x78, + 0x24, 0xf7, 0x1a, 0x0d, 0xba, 0xf0, 0x4e, 0x48, 0xc8, 0xfd, 0x63, 0x2d, 0xab, 0x23, 0x07, 0xdb, + 0x8f, 0x82, 0x41, 0x0a, 0x5b, 0xbf, 0x1b, 0x81, 0x2b, 0x73, 0x77, 0x46, 0xef, 0xaa, 0xde, 0x53, + 0xc9, 0x88, 0xf3, 0xbd, 0x9b, 0x73, 0x0e, 0x92, 0x0b, 0x11, 0x51, 0xe1, 0xa4, 0x71, 0x2a, 0x50, + 0x4a, 0x88, 0xf7, 0xa8, 0x24, 0xf1, 0xe6, 0xb5, 0x91, 0xf3, 0x5d, 0x37, 0x47, 0x9a, 0x2e, 0x2e, + 0xb7, 0xdf, 0x8b, 0x3c, 0x1b, 0xa5, 0x9d, 0x9b, 0xb5, 0x9e, 0x0b, 0x4f, 0x4f, 0xb8, 0x30, 0xf2, + 0x87, 0x6f, 0x82, 0x10, 0x43, 0x65, 0x49, 0x24, 0x73, 0x4f, 0x79, 0x6c, 0x82, 0x8f, 0x20, 0x83, + 0xee, 0x05, 0x3c, 0xaa, 0x1f, 0xad, 0x1f, 0xe8, 0x9b, 0x6b, 0xa5, 0x6d, 0xde, 0xd7, 0x2e, 0xe3, + 0x7c, 0x82, 0xf4, 0x3d, 0x43, 0xa8, 0x5d, 0x4c, 0x99, 0x6c, 0x3c, 0x92, 0x87, 0x23, 0xb2, 0x8e, + 0x41, 0x86, 0x94, 0x9e, 0x44, 0x05, 0x61, 0x4b, 0x70, 0xf8, 0x4a, 0x81, 0x77, 0x8a, 0x86, 0x51, + 0x41, 0x3c, 0xd2, 0xab, 0x9f, 0x50, 0x1d, 0x54, 0xe9, 0xbd, 0xbe, 0xba, 0x4f, 0xd2, 0xfa, 0x66, + 0x07, 0xe5, 0x16, 0xa3, 0x8b, 0x96, 0x9e, 0x70, 0xb8, 0x13, 0x0a, 0x23, 0xbc, 0x55, 0x94, 0xad, + 0x43, 0xdc, 0xe2, 0xd0, 0xa0, 0x8e, 0x4d, 0xa7, 0x03, 0xc9, 0x4f, 0x34, 0xa9, 0x24, 0x0a, 0xd9, + 0xa9, 0x3a, 0xb6, 0xde, 0x9b, 0xac, 0xe4, 0x48, 0x83, 0x78, 0xb6, 0x58, 0x5a, 0x4b, 0x41, 0x06, + 0x3c, 0x0b, 0x6b, 0x4b, 0x6d, 0x47, 0x24, 0xf3, 0x25, 0xf0, 0xe2, 0xb9, 0x1c, 0x81, 0xe1, 0x40, + 0x61, 0x23, 0xc6, 0x72, 0x48, 0x68, 0xfd, 0x2b, 0x33, 0x7f, 0x4a, 0x3d, 0xf6, 0xfe, 0x9c, 0xff, + 0x00, 0x09, 0x85, 0xfe, 0x0d, 0x58, 0x6e, 0x89, 0xf7, 0xd7, 0x5b, 0xee, 0x26, 0xaa, 0xbc, 0x69, + 0x1d, 0x69, 0x21, 0x9b, 0xab, 0xad, 0x41, 0x55, 0xca, 0x35, 0xc0, 0x32, 0xdb, 0x0e, 0x36, 0x12, + 0xb6, 0x9b, 0x53, 0x25, 0x0d, 0xa5, 0x29, 0x52, 0x4f, 0x70, 0x28, 0x1c, 0x02, 0x08, 0x50, 0x3c, + 0x81, 0x1c, 0x42, 0xd6, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, + 0xf1, 0xb5, 0xdd, 0x8b, 0xf2, 0xa3, 0x43, 0xdf, 0xb4, 0xcf, 0xaa, 0xf4, 0x9f, 0x5b, 0xdb, 0x64, + 0x41, 0xf5, 0x1d, 0xbe, 0x7d, 0xae, 0xeb, 0x4a, 0x47, 0x3e, 0x39, 0x1c, 0xb1, 0xcb, 0x38, 0xc8, + 0xce, 0x3e, 0x45, 0x67, 0x6c, 0xfe, 0x95, 0x77, 0xc6, 0x34, 0xe9, 0x11, 0xd9, 0xd2, 0x2c, 0xcc, + 0x69, 0xa7, 0x54, 0x84, 0x48, 0x66, 0xeb, 0x14, 0x36, 0xf0, 0x07, 0x01, 0x69, 0x0b, 0x71, 0x2a, + 0x09, 0x3f, 0x23, 0x92, 0x52, 0x70, 0x7c, 0x80, 0x7c, 0x56, 0x95, 0xd2, 0x82, 0x39, 0xe9, 0xcf, + 0x6c, 0xdb, 0xda, 0x8d, 0xae, 0x85, 0xa6, 0x16, 0xfb, 0x32, 0x6e, 0x2b, 0x75, 0x72, 0xee, 0x72, + 0x19, 0xe7, 0xdb, 0x76, 0x42, 0xf0, 0x0f, 0x10, 0xa3, 0xf6, 0x52, 0x84, 0xa1, 0x00, 0x80, 0x9e, + 0x41, 0x1c, 0x8a, 0x41, 0x51, 0x15, 0x23, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, 0x52, 0x94, 0x0a, + 0x57, 0x8d, 0xac, 0xb5, 0x5e, 0x9b, 0xd1, 0xb6, 0x37, 0x2f, 0x7a, 0xa6, 0xf5, 0x0a, 0xd1, 0x01, + 0xbc, 0x8e, 0xec, 0x97, 0x02, 0x79, 0xa8, 0x25, 0x4a, 0xe0, 0x81, 0xf2, 0xb5, 0x94, 0xa5, 0x44, + 0x21, 0x20, 0xa8, 0xe0, 0xe0, 0x1a, 0xa9, 0x9b, 0xcb, 0xd6, 0x6f, 0xfe, 0x26, 0xd3, 0xb5, 0xb6, + 0xaf, 0xf5, 0x9b, 0xfa, 0xea, 0xe4, 0xdf, 0xff, 0x00, 0x7a, 0x79, 0xb2, 0xc7, 0xfe, 0x9a, 0xd2, + 0xa7, 0x0f, 0xe2, 0x14, 0xd5, 0x05, 0xc6, 0x9f, 0x2e, 0x2c, 0x08, 0x32, 0x27, 0x4e, 0x92, 0xcc, + 0x58, 0x91, 0x9a, 0x53, 0xcf, 0xbe, 0xf3, 0x81, 0x0d, 0xb4, 0x84, 0x8c, 0xa9, 0x6a, 0x51, 0xf0, + 0x94, 0x80, 0x09, 0x24, 0xf8, 0x00, 0x55, 0x73, 0xdd, 0x6e, 0xb0, 0x34, 0x16, 0x96, 0x9c, 0x6d, + 0xba, 0x52, 0x0b, 0xda, 0xc6, 0x5b, 0x4e, 0xf0, 0x7d, 0xd6, 0x5f, 0xf4, 0xd1, 0x10, 0x01, 0x5a, + 0x54, 0x12, 0xf1, 0x4a, 0x8b, 0x8a, 0x05, 0x29, 0x20, 0xa5, 0x05, 0x0a, 0x4a, 0xf2, 0x16, 0x71, + 0x8a, 0xa5, 0x9b, 0x8f, 0xba, 0x7b, 0x83, 0xb8, 0x9d, 0x94, 0xeb, 0x1d, 0x51, 0x36, 0xe6, 0xcb, + 0x1c, 0x4b, 0x71, 0xb0, 0x86, 0x63, 0xa5, 0x49, 0xe5, 0x85, 0xf6, 0x9b, 0x09, 0x47, 0x3c, 0x2d, + 0x43, 0x9f, 0x1e, 0x58, 0x38, 0xce, 0x30, 0x2b, 0x8c, 0xa0, 0x99, 0xb7, 0x97, 0xa9, 0x1d, 0xc7, + 0xdc, 0x7f, 0x53, 0x6f, 0xf5, 0xff, 0x00, 0x93, 0xf6, 0x07, 0x79, 0x23, 0xea, 0xdb, 0x6a, 0xca, + 0x3b, 0xad, 0x9e, 0x63, 0x8b, 0xce, 0xfd, 0xb7, 0x72, 0x85, 0xf1, 0x52, 0x7d, 0xad, 0xab, 0x88, + 0x3c, 0x01, 0xa8, 0x66, 0xba, 0xdd, 0x2f, 0xb6, 0xba, 0xf7, 0x52, 0xc1, 0x6e, 0xe5, 0x68, 0xd2, + 0xb7, 0x37, 0x2d, 0x6e, 0x34, 0xeb, 0xc2, 0xe6, 0xf3, 0x5e, 0x9e, 0x0a, 0x50, 0xd0, 0x51, 0x71, + 0x6a, 0x92, 0xef, 0x16, 0x52, 0x94, 0xf0, 0x50, 0x25, 0x4b, 0x03, 0x23, 0x1f, 0x3e, 0x2b, 0xa0, + 0xb2, 0x39, 0xb7, 0x1b, 0x77, 0xab, 0xd9, 0x72, 0xf7, 0x0b, 0xf3, 0x95, 0x32, 0xdd, 0x25, 0x5d, + 0xd6, 0x21, 0xcb, 0x11, 0xac, 0xea, 0x5a, 0x09, 0xc7, 0x17, 0x14, 0xda, 0xd7, 0x2d, 0x04, 0x90, + 0x4e, 0x50, 0xca, 0x32, 0x82, 0x3f, 0x5c, 0x85, 0x66, 0x83, 0x47, 0xf6, 0x62, 0x5c, 0xa9, 0xfb, + 0x3d, 0xa2, 0xe7, 0x4e, 0x92, 0xf4, 0xa9, 0x72, 0x74, 0xfc, 0x07, 0x9f, 0x7d, 0xe7, 0x0a, 0xdc, + 0x75, 0x6a, 0x8e, 0x82, 0xa5, 0xa9, 0x47, 0xca, 0x94, 0x49, 0x24, 0x93, 0xe4, 0x93, 0x5d, 0x65, + 0x50, 0x0f, 0xd3, 0x57, 0x74, 0xff, 0x00, 0xd8, 0x1a, 0x33, 0xfe, 0x4e, 0x4f, 0xfd, 0x45, 0x7e, + 0xdb, 0x27, 0x5b, 0x5a, 0xf9, 0x9b, 0xa3, 0x2e, 0x5e, 0xf4, 0x9e, 0x99, 0x9b, 0x00, 0x72, 0xee, + 0xb1, 0x0c, 0x3f, 0x19, 0xd5, 0xfb, 0x4e, 0x38, 0xb8, 0xa7, 0x1c, 0x09, 0xc2, 0xb0, 0x4e, 0x50, + 0x72, 0x01, 0x1e, 0x33, 0x90, 0x17, 0xca, 0xaa, 0x37, 0xd2, 0x41, 0xa3, 0xa5, 0x4d, 0xd3, 0xba, + 0x6f, 0x5b, 0xc1, 0x80, 0xca, 0xda, 0xb6, 0xba, 0xec, 0x2b, 0x93, 0xed, 0xb2, 0x4b, 0xc1, 0x0e, + 0xf1, 0x2c, 0x95, 0xa8, 0x27, 0xfc, 0x92, 0x56, 0x97, 0x13, 0xee, 0x50, 0x01, 0x4f, 0x24, 0x00, + 0x4a, 0xcd, 0x4f, 0x3b, 0x17, 0xba, 0xfa, 0x6f, 0x76, 0xf4, 0x82, 0x6f, 0x76, 0x45, 0xfa, 0x79, + 0xac, 0x71, 0x6e, 0xe5, 0x6d, 0x71, 0x61, 0x4e, 0xc2, 0x74, 0x83, 0xe0, 0xfc, 0x72, 0x42, 0xb0, + 0x4a, 0x56, 0x00, 0x0a, 0x00, 0xf8, 0x0a, 0x0a, 0x4a, 0x7e, 0x3d, 0x4d, 0xd9, 0x22, 0xdf, 0xfa, + 0x7f, 0xd6, 0xf0, 0x66, 0x38, 0xf3, 0x6d, 0x35, 0x68, 0x7a, 0x6a, 0x4b, 0x44, 0x05, 0x73, 0x8c, + 0x3d, 0x42, 0x01, 0xc8, 0x3e, 0xd2, 0xb6, 0x92, 0x0f, 0xdf, 0x82, 0x70, 0x41, 0xf2, 0x03, 0x2b, + 0x6b, 0x59, 0x76, 0x3b, 0x54, 0xfe, 0x5a, 0x6d, 0x06, 0x96, 0xd4, 0xcb, 0x9d, 0xeb, 0xe4, 0xcc, + 0xb6, 0xb5, 0xeb, 0x24, 0x76, 0xbb, 0x7c, 0xe5, 0x20, 0x70, 0x91, 0xed, 0xc0, 0x03, 0x0e, 0xa5, + 0xc1, 0xe0, 0x04, 0xf8, 0xf1, 0xe3, 0x15, 0x93, 0x55, 0x61, 0xb6, 0xdb, 0xaa, 0x7b, 0xfe, 0xde, + 0x6d, 0x1d, 0x97, 0x43, 0xe9, 0xcd, 0x2b, 0x6c, 0x72, 0x5d, 0xb5, 0xd7, 0x8a, 0xe7, 0xcf, 0x7d, + 0x6e, 0xb6, 0xea, 0x1c, 0x75, 0xd7, 0x4a, 0x43, 0x28, 0xe0, 0x52, 0xa0, 0x5c, 0x48, 0xe5, 0xcc, + 0x8c, 0x24, 0xf8, 0xf3, 0xe0, 0x34, 0x4a, 0x95, 0x94, 0x33, 0xf7, 0x8b, 0x76, 0x26, 0xce, 0x91, + 0x31, 0xed, 0xc9, 0xd5, 0xa9, 0x75, 0xf7, 0x54, 0xea, 0xd2, 0xcd, 0xd9, 0xe6, 0x5b, 0x05, 0x47, + 0x24, 0x25, 0x08, 0x50, 0x4a, 0x13, 0xe7, 0xc2, 0x52, 0x00, 0x03, 0xc0, 0x00, 0x55, 0xeb, 0xe8, + 0x8f, 0x5d, 0x6a, 0x4d, 0x79, 0xb3, 0x0a, 0x97, 0xaa, 0x26, 0xfa, 0xf9, 0xb6, 0xbb, 0x93, 0x96, + 0xd6, 0xe5, 0x2c, 0x1e, 0xeb, 0xcd, 0x21, 0xa6, 0x96, 0x95, 0x3a, 0xac, 0xfb, 0xd6, 0x3b, 0x85, + 0x3c, 0xbc, 0x12, 0x12, 0x09, 0xca, 0xb2, 0xa2, 0x13, 0x9d, 0x53, 0xaf, 0xa4, 0xc6, 0x5c, 0xa4, + 0x41, 0xd0, 0x70, 0x51, 0x25, 0xe4, 0xc4, 0x79, 0xd9, 0xef, 0x3a, 0xc0, 0x70, 0x86, 0xd6, 0xb4, + 0x08, 0xe1, 0x0b, 0x29, 0xf8, 0x2a, 0x48, 0x71, 0x60, 0x13, 0xe4, 0x05, 0xab, 0x1f, 0x26, 0xae, + 0x2d, 0x53, 0x3f, 0xa4, 0xd3, 0xff, 0x00, 0x97, 0xdf, 0xfe, 0xcb, 0xff, 0x00, 0xe5, 0xa0, 0xa8, + 0x16, 0x2b, 0x5c, 0xfb, 0xe5, 0xf2, 0x05, 0x92, 0xd6, 0xc7, 0xa8, 0x9f, 0x70, 0x92, 0xdc, 0x58, + 0xad, 0x73, 0x4a, 0x7b, 0x8e, 0xb8, 0xa0, 0x94, 0x27, 0x2a, 0x20, 0x0c, 0xa8, 0x81, 0x92, 0x40, + 0xfc, 0x6b, 0x62, 0xeb, 0x1e, 0xb4, 0x9d, 0xee, 0x56, 0x9a, 0xd5, 0x56, 0x9d, 0x47, 0x05, 0xb6, + 0x5c, 0x97, 0x6a, 0x9c, 0xcc, 0xd6, 0x10, 0xf0, 0x25, 0xb5, 0x2d, 0xa5, 0x85, 0xa4, 0x28, 0x02, + 0x09, 0x4e, 0x52, 0x33, 0x82, 0x0e, 0x3e, 0xf1, 0x5a, 0xd9, 0xa1, 0xb5, 0x35, 0xab, 0x59, 0x69, + 0x0b, 0x56, 0xa9, 0xb2, 0x3d, 0xdd, 0x81, 0x73, 0x8c, 0x89, 0x0d, 0x65, 0x49, 0x2a, 0x46, 0x47, + 0x96, 0xd7, 0xc4, 0x90, 0x16, 0x95, 0x65, 0x2a, 0x00, 0x9c, 0x29, 0x24, 0x7d, 0xd4, 0x19, 0x8d, + 0xd4, 0xbd, 0x82, 0xf3, 0xa7, 0xb7, 0xd7, 0x58, 0x35, 0x7a, 0xb7, 0x3d, 0x09, 0x53, 0xae, 0xf2, + 0xae, 0x11, 0x0b, 0x83, 0xda, 0xfc, 0x77, 0x9e, 0x5a, 0xdb, 0x71, 0x04, 0x78, 0x52, 0x48, 0x3f, + 0x77, 0xc1, 0x0a, 0x49, 0xc2, 0x92, 0x40, 0xf8, 0xed, 0xee, 0xcb, 0xee, 0x86, 0xbe, 0xb5, 0xaa, + 0xe9, 0xa5, 0x74, 0x84, 0xd9, 0xb0, 0x06, 0x38, 0xca, 0x75, 0xc6, 0xe3, 0x34, 0xef, 0xb9, 0x49, + 0x3d, 0xb5, 0xbc, 0xa4, 0x87, 0x30, 0xa4, 0x28, 0x1e, 0x04, 0xf1, 0x23, 0x07, 0x19, 0x15, 0xab, + 0x14, 0xa0, 0xc9, 0x4d, 0xda, 0xdb, 0xfb, 0xfe, 0xd9, 0x6b, 0x59, 0x1a, 0x53, 0x51, 0xa5, 0x95, + 0x4b, 0x65, 0xa6, 0xde, 0x43, 0xf1, 0xc2, 0xcb, 0x0f, 0xa1, 0x69, 0x04, 0x2d, 0xb5, 0x2d, 0x29, + 0x2a, 0x48, 0x3c, 0x90, 0x4e, 0x31, 0xc9, 0x0a, 0x1f, 0x75, 0x48, 0xdd, 0x0a, 0x5d, 0x27, 0xdb, + 0xfa, 0x92, 0xb1, 0xc4, 0x86, 0xff, 0x00, 0x69, 0x9b, 0x9c, 0x69, 0x71, 0x66, 0x27, 0x82, 0x4f, + 0x71, 0xa0, 0xc2, 0xde, 0x09, 0xc9, 0x19, 0x1f, 0xac, 0x65, 0xb5, 0x64, 0x60, 0xfb, 0x71, 0xf0, + 0x48, 0x3d, 0x37, 0xd2, 0x3b, 0xfb, 0x6f, 0xb3, 0x7e, 0xed, 0xb1, 0xfc, 0xcc, 0x9a, 0xe3, 0x3a, + 0x25, 0xff, 0x00, 0x39, 0xdd, 0x23, 0xff, 0x00, 0x1b, 0xfc, 0x93, 0xf4, 0x1a, 0x65, 0x4a, 0x52, + 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, + 0x5c, 0x36, 0xfe, 0x6b, 0x89, 0x5b, 0x71, 0xb4, 0x77, 0xed, 0x67, 0x06, 0x0b, 0x33, 0xa5, 0xdb, + 0xda, 0x6c, 0x30, 0xcb, 0xca, 0x29, 0x6c, 0xad, 0xc7, 0x50, 0xd2, 0x54, 0xac, 0x79, 0x29, 0x49, + 0x70, 0x28, 0xa4, 0x10, 0x48, 0x18, 0xca, 0x73, 0x91, 0xe2, 0xef, 0xe6, 0xf9, 0x69, 0x1d, 0xa0, + 0x82, 0xc2, 0x2e, 0xc1, 0xeb, 0x95, 0xea, 0x63, 0x4b, 0x72, 0x1d, 0xae, 0x2a, 0x93, 0xdc, 0x50, + 0x01, 0x5c, 0x5c, 0x75, 0x44, 0xfe, 0xad, 0xa2, 0xb1, 0xc7, 0x96, 0x09, 0x27, 0x3c, 0x52, 0xae, + 0x2a, 0xc5, 0x3a, 0xdf, 0xee, 0xa8, 0x35, 0x26, 0xe8, 0xe9, 0x87, 0x74, 0xa4, 0x3b, 0x04, 0x2d, + 0x3f, 0x63, 0x95, 0xda, 0x54, 0xc6, 0xfb, 0xc6, 0x54, 0x87, 0xd4, 0xda, 0xca, 0xc0, 0xee, 0x14, + 0xa4, 0x25, 0x1c, 0x83, 0x67, 0x01, 0x1c, 0xb2, 0x8f, 0xb5, 0x82, 0x53, 0x41, 0xe2, 0xfe, 0x94, + 0x7b, 0xed, 0xfd, 0x39, 0xfe, 0x13, 0x0b, 0xfc, 0x1a, 0xeb, 0x61, 0x75, 0x8f, 0xb9, 0x6c, 0x68, + 0x25, 0x59, 0x5d, 0x8b, 0x6c, 0x95, 0xa8, 0x4b, 0xae, 0x01, 0x7d, 0x75, 0xa0, 0x14, 0x19, 0x52, + 0x4e, 0x30, 0xc2, 0x02, 0x5b, 0xee, 0xa5, 0x44, 0x10, 0xbf, 0xb3, 0x84, 0x80, 0xa6, 0xd4, 0x72, + 0xa3, 0x5b, 0x29, 0x41, 0xed, 0x6b, 0x2d, 0x57, 0xa9, 0x35, 0x95, 0xf1, 0xcb, 0xde, 0xa9, 0xbd, + 0x4d, 0xbb, 0xcf, 0x73, 0x23, 0xbb, 0x25, 0xc2, 0xae, 0x09, 0x2a, 0x52, 0xb8, 0x20, 0x7c, 0x21, + 0x01, 0x4a, 0x51, 0x08, 0x48, 0x09, 0x19, 0x38, 0x02, 0xbc, 0x5a, 0x9c, 0xf6, 0x1f, 0xa6, 0x7d, + 0x65, 0xba, 0x36, 0xb8, 0xda, 0x89, 0xd9, 0xd0, 0xac, 0x3a, 0x6a, 0x47, 0x3e, 0xd4, 0xe7, 0x48, + 0x7d, 0xd7, 0xf8, 0xa9, 0xc4, 0x1e, 0xdb, 0x29, 0x50, 0x3e, 0xd7, 0x1b, 0xe2, 0x79, 0xa9, 0xbf, + 0x0a, 0xca, 0x79, 0x63, 0x15, 0x76, 0x76, 0x8b, 0x62, 0xf6, 0xe3, 0x6c, 0x78, 0x49, 0xb0, 0x59, + 0xbd, 0x55, 0xd9, 0x39, 0xff, 0x00, 0xbd, 0xae, 0x24, 0x3f, 0x2c, 0x67, 0x98, 0xf6, 0xab, 0x01, + 0x2d, 0x7b, 0x5c, 0x28, 0x3d, 0xb4, 0xa3, 0x92, 0x40, 0xe5, 0xc8, 0x8c, 0xd0, 0x52, 0x6d, 0xbd, + 0xe9, 0x57, 0x77, 0x35, 0x7d, 0xad, 0x57, 0x17, 0x6d, 0xb0, 0xb4, 0xd3, 0x3e, 0x3b, 0x49, 0xbe, + 0x38, 0xe3, 0x0e, 0xbb, 0xee, 0x52, 0x4e, 0x1a, 0x4a, 0x16, 0xb4, 0x60, 0xa7, 0xfd, 0x34, 0xa7, + 0x21, 0x49, 0x29, 0xe4, 0x0e, 0x6a, 0xc3, 0x59, 0xf6, 0x03, 0x67, 0xf6, 0x3b, 0x45, 0x5c, 0x35, + 0xde, 0xbf, 0x4b, 0xda, 0xbd, 0xdb, 0x63, 0x5c, 0xdd, 0x72, 0x54, 0x40, 0xa6, 0x32, 0xa5, 0x29, + 0xb4, 0x21, 0xa8, 0xb9, 0x29, 0x2a, 0x5f, 0x71, 0xb4, 0xfe, 0xb5, 0x4b, 0x01, 0x40, 0x28, 0x16, + 0xc6, 0x48, 0xb3, 0xf5, 0x4b, 0x7a, 0xc9, 0xea, 0x1a, 0xcd, 0x76, 0xb7, 0x6a, 0x9d, 0xa0, 0xb2, + 0xd9, 0x1e, 0x96, 0x94, 0xba, 0xd4, 0x69, 0x77, 0x67, 0x1f, 0xed, 0x25, 0xa9, 0x0c, 0x48, 0x4a, + 0xdc, 0x6d, 0x0d, 0x14, 0x12, 0xb4, 0x82, 0xdf, 0x0e, 0x45, 0x49, 0xc9, 0xe4, 0x40, 0x29, 0x00, + 0xa8, 0x20, 0x6d, 0xf4, 0xde, 0xbd, 0x65, 0xbb, 0x57, 0x45, 0x7d, 0x73, 0x2b, 0xd2, 0x58, 0xd9, + 0x92, 0xa7, 0xe0, 0x5a, 0x18, 0x23, 0xb5, 0x1f, 0x29, 0x09, 0x05, 0x4a, 0x00, 0x17, 0x57, 0xc7, + 0x3e, 0xf5, 0x7c, 0x15, 0x2f, 0x88, 0x40, 0x51, 0x4d, 0x46, 0x54, 0xab, 0xe5, 0xd3, 0x87, 0x4d, + 0xda, 0x37, 0x4a, 0xe8, 0x78, 0xfa, 0xd7, 0x74, 0x60, 0x42, 0x9f, 0x76, 0x76, 0x37, 0xae, 0x71, + 0x8b, 0xa2, 0x0a, 0x22, 0x5a, 0x98, 0x2d, 0x12, 0x50, 0xeb, 0x6e, 0x61, 0x2a, 0x58, 0x4a, 0x89, + 0x59, 0x74, 0x61, 0x0a, 0x48, 0x09, 0x00, 0xa0, 0xad, 0x41, 0x53, 0x74, 0x6e, 0xca, 0xee, 0xb6, + 0xaf, 0xed, 0xaa, 0xc5, 0xa1, 0x2f, 0x4e, 0xb2, 0xf4, 0x61, 0x29, 0x99, 0x32, 0x59, 0xf4, 0xb1, + 0xdd, 0x68, 0xf1, 0xe2, 0xa4, 0x3a, 0xf1, 0x42, 0x17, 0x90, 0xa0, 0x40, 0x4a, 0x89, 0x23, 0x24, + 0x64, 0x02, 0x6b, 0x99, 0xd6, 0x5a, 0x53, 0x52, 0x68, 0xdb, 0xe3, 0x96, 0x4d, 0x53, 0x65, 0x9b, + 0x68, 0x9e, 0xde, 0x4f, 0x6a, 0x4b, 0x65, 0x3c, 0xd2, 0x14, 0xa4, 0xf3, 0x41, 0xf8, 0x5a, 0x0a, + 0x92, 0xa0, 0x16, 0x92, 0x52, 0x70, 0x70, 0x4d, 0x5f, 0x2d, 0xce, 0xea, 0xfb, 0x6e, 0x34, 0xbc, + 0x89, 0x56, 0xfd, 0x39, 0x1e, 0x6e, 0xad, 0x9e, 0xc7, 0xb4, 0x2e, 0x29, 0x0c, 0xc2, 0x2b, 0x0e, + 0x14, 0xad, 0x3d, 0xf5, 0x64, 0x9c, 0x24, 0x15, 0x05, 0x21, 0x0b, 0x42, 0xb2, 0x9c, 0x2b, 0xc9, + 0x22, 0x93, 0x6f, 0x16, 0xe5, 0x6a, 0x4d, 0xd4, 0xd5, 0xff, 0x00, 0x94, 0xda, 0x98, 0x42, 0x44, + 0x94, 0x46, 0x44, 0x56, 0x59, 0x86, 0xc9, 0x6d, 0xa6, 0x5a, 0x49, 0x24, 0x25, 0x20, 0x92, 0xa3, + 0x95, 0x29, 0x6a, 0x25, 0x4a, 0x27, 0x2a, 0x23, 0xc0, 0x00, 0x00, 0xe9, 0xba, 0x46, 0xd6, 0x33, + 0xf4, 0x6e, 0xfd, 0xe9, 0xc7, 0x61, 0xa3, 0xba, 0xcd, 0xe2, 0x4a, 0x2c, 0xd3, 0x1a, 0xca, 0x53, + 0xcd, 0xa9, 0x0e, 0x21, 0x20, 0xe4, 0xa4, 0x91, 0xc5, 0xce, 0xdb, 0x9e, 0x30, 0x4f, 0x0e, 0x39, + 0x01, 0x46, 0xb4, 0xe6, 0x7c, 0x48, 0xb3, 0xe0, 0xc8, 0x83, 0x3a, 0x33, 0x32, 0xa2, 0x49, 0x69, + 0x4c, 0xbe, 0xc3, 0xcd, 0x85, 0xb6, 0xea, 0x14, 0x30, 0xa4, 0x29, 0x27, 0xc2, 0x92, 0x41, 0x20, + 0x83, 0xe0, 0x83, 0x59, 0x5b, 0xd3, 0x85, 0xae, 0x7d, 0xe3, 0x7e, 0xf4, 0x3c, 0x4b, 0x73, 0x1d, + 0xf7, 0x9b, 0xbd, 0xc6, 0x94, 0xa4, 0xf3, 0x4a, 0x70, 0xd3, 0x0e, 0x07, 0x9d, 0x56, 0x54, 0x40, + 0xf6, 0xb6, 0xda, 0xd5, 0x8f, 0x93, 0x8c, 0x0c, 0x92, 0x05, 0x6a, 0xc5, 0x06, 0x33, 0xd7, 0x41, + 0xa6, 0xf4, 0x46, 0xb4, 0xd4, 0xb0, 0x57, 0x3b, 0x4e, 0x69, 0x0d, 0x41, 0x79, 0x88, 0xdb, 0xa5, + 0x95, 0xbf, 0x02, 0xda, 0xf4, 0x86, 0xd2, 0xb0, 0x01, 0x28, 0x2a, 0x42, 0x48, 0x0a, 0xc2, 0x92, + 0x71, 0xf3, 0x82, 0x3f, 0x1a, 0xe7, 0xea, 0xff, 0x00, 0xfd, 0x1c, 0x5f, 0xb1, 0x0b, 0xcf, 0xef, + 0x23, 0xff, 0x00, 0xcb, 0x46, 0xa0, 0xad, 0xbb, 0x75, 0xd3, 0x06, 0xed, 0x6a, 0xb9, 0xd6, 0xc5, + 0xce, 0xd3, 0xcf, 0x69, 0xdb, 0x3c, 0xb7, 0x48, 0x7e, 0x75, 0xc4, 0xa1, 0xb7, 0x23, 0x21, 0x24, + 0x85, 0x28, 0xc6, 0x2a, 0x0f, 0x15, 0x7b, 0x48, 0x4a, 0x4a, 0x40, 0x51, 0x29, 0x39, 0x09, 0x3c, + 0x85, 0xf2, 0xd8, 0xed, 0xb3, 0xb3, 0x6d, 0x3e, 0x82, 0x63, 0x4b, 0x59, 0xdf, 0x7a, 0x52, 0x8b, + 0xa6, 0x4c, 0xd9, 0x6e, 0xf8, 0x54, 0x99, 0x0a, 0x4a, 0x52, 0xa7, 0x02, 0x72, 0x42, 0x13, 0x84, + 0x24, 0x04, 0x8f, 0x80, 0x91, 0x92, 0xa5, 0x65, 0x47, 0xb9, 0xae, 0x66, 0xf7, 0xb8, 0x5a, 0x06, + 0xc7, 0x74, 0x7a, 0xd7, 0x7b, 0xd7, 0x1a, 0x66, 0xd9, 0x3d, 0x8e, 0x3d, 0xd8, 0xb3, 0x2e, 0xac, + 0x32, 0xeb, 0x7c, 0x92, 0x14, 0x39, 0x21, 0x4a, 0x04, 0x65, 0x24, 0x11, 0x91, 0xf0, 0x41, 0xa0, + 0xe9, 0xaa, 0x33, 0xea, 0x6f, 0x6e, 0x7f, 0x39, 0xdb, 0x41, 0x74, 0xb0, 0x46, 0x6f, 0x9d, 0xda, + 0x3e, 0x27, 0x5a, 0x7d, 0xd8, 0xcc, 0xa6, 0xc2, 0xb8, 0xa3, 0xca, 0xd2, 0x9f, 0x7a, 0x54, 0xb6, + 0xf2, 0xa3, 0xc5, 0x3d, 0xce, 0x58, 0xca, 0x45, 0x48, 0xd0, 0x25, 0xc5, 0x9f, 0x06, 0x3c, 0xe8, + 0x32, 0x59, 0x95, 0x12, 0x4b, 0x49, 0x79, 0x87, 0xd9, 0x70, 0x2d, 0xb7, 0x50, 0xa1, 0x94, 0xad, + 0x2a, 0x1e, 0x14, 0x92, 0x08, 0x20, 0x8f, 0x04, 0x1a, 0xfb, 0x50, 0x63, 0x3d, 0x48, 0xdb, 0x35, + 0xbd, 0x3a, 0xf7, 0x6a, 0x1e, 0x75, 0x1a, 0x62, 0xe0, 0xcb, 0x96, 0xe9, 0x0e, 0xf7, 0xa4, 0x5b, + 0x26, 0xb5, 0xdd, 0x8c, 0xea, 0xf8, 0x14, 0x85, 0xe0, 0x10, 0xa4, 0x2b, 0xc8, 0x24, 0xa1, 0x49, + 0x2a, 0xe0, 0x80, 0xae, 0x41, 0x20, 0x55, 0xcc, 0xea, 0x0f, 0xa5, 0xcd, 0x2f, 0xb8, 0x4f, 0x4a, + 0xd4, 0x1a, 0x61, 0xc6, 0x74, 0xde, 0xa7, 0x7d, 0xd7, 0x24, 0x48, 0x77, 0x82, 0x95, 0x1a, 0x7a, + 0xca, 0x3c, 0x07, 0x10, 0x0f, 0xea, 0xd4, 0x56, 0x01, 0x2e, 0x20, 0x67, 0xdc, 0xb2, 0xa4, 0xad, + 0x44, 0x11, 0x50, 0x37, 0x07, 0xa7, 0xcd, 0xda, 0xd1, 0x10, 0x66, 0x5c, 0xee, 0xfa, 0x4d, 0xe9, + 0x16, 0xb8, 0x8e, 0xad, 0x2b, 0x9d, 0x01, 0xd4, 0x49, 0x6f, 0x82, 0x42, 0x94, 0x5e, 0x29, 0x41, + 0x2e, 0x21, 0xae, 0x28, 0x2a, 0xe6, 0xb4, 0xa4, 0x01, 0x8e, 0x58, 0x27, 0x14, 0x16, 0x4f, 0x6e, + 0xfa, 0xd6, 0xd3, 0x73, 0xbb, 0x11, 0x35, 0xd6, 0x98, 0x9b, 0x68, 0x78, 0xf6, 0x5b, 0x54, 0xdb, + 0x72, 0xc4, 0x98, 0xe5, 0x47, 0xc3, 0xae, 0xa9, 0xb5, 0x71, 0x5b, 0x68, 0x07, 0x0a, 0x09, 0x4f, + 0x75, 0x58, 0x24, 0x79, 0x20, 0x72, 0x94, 0xe7, 0xf5, 0x2f, 0xb2, 0xd1, 0xb4, 0xac, 0x8d, 0x42, + 0xce, 0xb3, 0x66, 0x63, 0x4d, 0x3a, 0xa6, 0x51, 0x0d, 0x98, 0xee, 0x89, 0x6f, 0x38, 0x11, 0xcc, + 0x25, 0x2c, 0xad, 0x29, 0x50, 0x49, 0xf8, 0x0e, 0x28, 0x25, 0xbe, 0x47, 0x05, 0x60, 0xd6, 0x63, + 0x52, 0x82, 0x46, 0xea, 0x1b, 0x75, 0x25, 0x6e, 0xfe, 0xbd, 0x6f, 0x53, 0xc8, 0xb3, 0xb3, 0x68, + 0x69, 0x88, 0x2d, 0xc2, 0x8f, 0x15, 0xb7, 0x8b, 0xca, 0x4a, 0x12, 0xa5, 0xac, 0x95, 0xac, 0x84, + 0xf2, 0x51, 0x5b, 0x8b, 0xf8, 0x4a, 0x40, 0x1c, 0x46, 0x09, 0x04, 0x9e, 0x83, 0xa2, 0x5f, 0xf3, + 0x9d, 0xd2, 0x3f, 0xf1, 0xbf, 0xc9, 0x3f, 0x51, 0x66, 0x95, 0xb0, 0x5e, 0x75, 0x4e, 0xa2, 0x85, + 0xa7, 0xb4, 0xf5, 0xb9, 0xeb, 0x8d, 0xd2, 0x73, 0xbd, 0xa8, 0xf1, 0xda, 0x1e, 0xe5, 0x9f, 0x92, + 0x49, 0x3e, 0x12, 0x90, 0x01, 0x25, 0x44, 0x80, 0x90, 0x09, 0x24, 0x00, 0x4d, 0x68, 0x37, 0x48, + 0x9b, 0x09, 0xf9, 0xab, 0xb5, 0xb9, 0xa9, 0x35, 0x13, 0x9d, 0xdd, 0x5d, 0x73, 0x8d, 0xd9, 0x79, + 0xa6, 0xdd, 0xcb, 0x50, 0x58, 0x2a, 0x4a, 0xcb, 0x03, 0x07, 0x0b, 0x59, 0x52, 0x52, 0x54, 0xbf, + 0x20, 0x14, 0x84, 0xa3, 0xc0, 0x2a, 0x58, 0x4f, 0xf4, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, + 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x28, 0x9f, 0xd2, 0x41, 0x60, 0xbc, + 0xa3, 0x71, 0x6c, 0x3a, 0xa4, 0xdb, 0x9e, 0xfa, 0x95, 0xdb, 0x43, 0x76, 0xf4, 0xcc, 0x03, 0x2d, + 0x89, 0x08, 0x79, 0xf7, 0x0b, 0x67, 0x1f, 0x65, 0x5c, 0x16, 0x08, 0xce, 0x39, 0x00, 0xac, 0x67, + 0x8a, 0xb1, 0x5b, 0x74, 0xc6, 0x93, 0xd5, 0x5a, 0xa3, 0xd4, 0x7e, 0x4c, 0xe9, 0xab, 0xd5, 0xef, + 0xd3, 0x71, 0xf5, 0x1f, 0x57, 0x41, 0x76, 0x47, 0x6b, 0x96, 0x78, 0xf2, 0xe0, 0x93, 0xc7, 0x3c, + 0x55, 0x8c, 0xfc, 0xe0, 0xfe, 0x15, 0xaf, 0xd4, 0xa0, 0xcf, 0x3b, 0x37, 0x47, 0x5b, 0xad, 0x2a, + 0xc6, 0xe5, 0xce, 0xe2, 0xe5, 0x96, 0xde, 0xf2, 0x63, 0x3e, 0xe2, 0x6d, 0xbe, 0xab, 0xbb, 0x2d, + 0x4e, 0xa1, 0x2b, 0xed, 0x35, 0xed, 0x1d, 0x91, 0xdc, 0x52, 0x50, 0x39, 0x77, 0x70, 0x94, 0xaf, + 0x27, 0xc8, 0x29, 0xaa, 0xe7, 0x5b, 0x31, 0x59, 0x69, 0xd4, 0xde, 0xdc, 0xfe, 0x6c, 0x77, 0x7e, + 0xe9, 0x60, 0x8c, 0xdf, 0x0b, 0x4c, 0x8c, 0x4e, 0xb4, 0xfb, 0xb3, 0x88, 0xae, 0x15, 0x71, 0x47, + 0x95, 0xa9, 0x5e, 0xc5, 0x25, 0x6d, 0xe5, 0x47, 0x92, 0xbb, 0x7c, 0xb1, 0x85, 0x0a, 0x0b, 0x3f, + 0xf4, 0x72, 0xeb, 0x18, 0xb3, 0x74, 0x15, 0xeb, 0x44, 0x48, 0x9e, 0xf2, 0xee, 0x36, 0xd9, 0xc6, + 0x6c, 0x76, 0x1e, 0x78, 0x14, 0x88, 0xae, 0xa5, 0x20, 0x86, 0x52, 0x55, 0xcb, 0x8a, 0x5d, 0x4a, + 0xd4, 0xbc, 0x24, 0x24, 0x17, 0x92, 0x72, 0x4a, 0xcd, 0x5a, 0xca, 0xcb, 0xae, 0x94, 0x75, 0x8c, + 0x5d, 0x11, 0xbf, 0x1a, 0x72, 0xef, 0x73, 0x9e, 0xf4, 0x2b, 0x5b, 0xce, 0xae, 0x14, 0xe5, 0xa1, + 0xe0, 0xdb, 0x7c, 0x1e, 0x41, 0x42, 0x4b, 0xa5, 0x4a, 0x4a, 0x7b, 0x49, 0x70, 0xb6, 0xe2, 0xb9, + 0x1c, 0x00, 0xdf, 0x2c, 0x12, 0x91, 0x5a, 0x8b, 0x40, 0xac, 0xcd, 0xea, 0x93, 0x6b, 0xf5, 0xc6, + 0x98, 0xdd, 0x3d, 0x5d, 0x7f, 0xb8, 0x58, 0x26, 0xbb, 0x63, 0x9d, 0x72, 0x7a, 0xe4, 0xd5, 0xd2, + 0x33, 0x0b, 0x72, 0x22, 0x5a, 0x90, 0xfa, 0x8a, 0x12, 0xb7, 0x00, 0xc2, 0x16, 0x14, 0xa0, 0x82, + 0x95, 0x60, 0xf2, 0xc6, 0x32, 0x14, 0x95, 0x2b, 0x4c, 0xab, 0xc6, 0xd7, 0x76, 0x2f, 0xca, 0x8d, + 0x0f, 0x7e, 0xd3, 0x3e, 0xab, 0xd2, 0x7d, 0x6f, 0x6d, 0x91, 0x07, 0xd4, 0x76, 0xf9, 0xf6, 0xbb, + 0xad, 0x29, 0x1c, 0xf8, 0xe4, 0x72, 0xc7, 0x2c, 0xe3, 0x23, 0x38, 0xf9, 0x14, 0x19, 0x01, 0x56, + 0x9b, 0x76, 0xf7, 0x41, 0xed, 0x73, 0xd1, 0x36, 0x9a, 0x43, 0x97, 0xfe, 0xfd, 0xf2, 0x25, 0xee, + 0x3d, 0xb6, 0xfc, 0xcb, 0x6f, 0xb9, 0xdc, 0x5a, 0x50, 0xd4, 0x92, 0xca, 0x9f, 0x0a, 0x24, 0xb9, + 0xdc, 0x4b, 0x4d, 0x38, 0x54, 0x49, 0x4a, 0x9c, 0x4a, 0x88, 0xc1, 0x41, 0x09, 0xaf, 0x3b, 0x8b, + 0xa4, 0x2f, 0x3a, 0x0b, 0x5a, 0xdc, 0xf4, 0x8e, 0xa0, 0x43, 0x29, 0xb8, 0xdb, 0x9d, 0x08, 0x74, + 0xb2, 0xe7, 0x36, 0xd6, 0x14, 0x90, 0xb4, 0x2d, 0x27, 0xfd, 0x55, 0x21, 0x49, 0x50, 0xc8, 0x04, + 0x03, 0x82, 0x01, 0xc8, 0x12, 0x07, 0x49, 0x97, 0xbb, 0x63, 0x1b, 0xa2, 0xd6, 0x8c, 0xd4, 0xed, + 0xb3, 0x2b, 0x4a, 0xeb, 0x06, 0x8d, 0xa2, 0xe7, 0x0e, 0x40, 0x71, 0x4d, 0xb8, 0xb5, 0x79, 0x8c, + 0xa4, 0xa5, 0x07, 0xda, 0xe8, 0x78, 0x21, 0x29, 0x73, 0x19, 0x40, 0x71, 0x44, 0x14, 0xfd, 0xa0, + 0x10, 0xfd, 0x77, 0x5b, 0x53, 0xb4, 0xba, 0xf7, 0x73, 0x67, 0x06, 0x74, 0xa5, 0x89, 0xe7, 0xe2, + 0x25, 0xde, 0xdb, 0xf7, 0x17, 0xbf, 0x55, 0x11, 0x83, 0x94, 0x05, 0x72, 0x74, 0xf8, 0x2a, 0x48, + 0x71, 0x2a, 0x28, 0x4f, 0x25, 0xf1, 0xf2, 0x12, 0x6b, 0x41, 0x6c, 0x9d, 0x37, 0x6c, 0x95, 0x9e, + 0xe8, 0xcd, 0xc6, 0x26, 0x81, 0x84, 0xeb, 0xcc, 0xf2, 0xe2, 0x99, 0x92, 0x5f, 0x94, 0xd1, 0xca, + 0x4a, 0x4f, 0x26, 0x9e, 0x71, 0x48, 0x57, 0x82, 0x71, 0x94, 0x9c, 0x1c, 0x11, 0x82, 0x01, 0xa9, + 0x66, 0x82, 0x20, 0xe9, 0x9f, 0x63, 0x6c, 0xdb, 0x41, 0xa7, 0x4b, 0xae, 0x96, 0x6e, 0x3a, 0xaa, + 0x73, 0x40, 0x5c, 0x6e, 0x21, 0x3e, 0xd4, 0x8f, 0x07, 0xb0, 0xce, 0x46, 0x52, 0xd0, 0x20, 0x64, + 0xf8, 0x2b, 0x20, 0x29, 0x58, 0xc2, 0x52, 0x89, 0x7e, 0x94, 0xa0, 0xc6, 0xe9, 0xf1, 0x25, 0x40, + 0x9d, 0x22, 0x0c, 0xe8, 0xcf, 0x45, 0x97, 0x19, 0xd5, 0x32, 0xfb, 0x0f, 0x36, 0x50, 0xe3, 0x4b, + 0x49, 0xc2, 0x90, 0xa4, 0x9f, 0x29, 0x50, 0x20, 0x82, 0x0f, 0x90, 0x45, 0x4b, 0xfb, 0x0d, 0xd4, + 0x26, 0xa4, 0xda, 0x2d, 0x21, 0x7c, 0xb0, 0x5a, 0x2d, 0x50, 0xae, 0x5e, 0xbe, 0x4b, 0x72, 0xa1, + 0x99, 0x8a, 0x21, 0xa8, 0x8e, 0xe0, 0x25, 0xe5, 0x29, 0x08, 0x01, 0x6e, 0x73, 0x42, 0x5b, 0x00, + 0x77, 0x12, 0x12, 0x50, 0x08, 0xce, 0x48, 0x3d, 0xd7, 0x5d, 0x3b, 0x3b, 0x79, 0xb1, 0x6b, 0x5b, + 0x86, 0xe6, 0xda, 0x61, 0xb2, 0xf6, 0x9c, 0xbb, 0x3a, 0xda, 0xa6, 0x08, 0xac, 0x70, 0x30, 0x24, + 0x14, 0xa5, 0x0a, 0x2e, 0x81, 0xf2, 0x97, 0x56, 0x39, 0xf7, 0x3e, 0xf5, 0xac, 0xa5, 0x58, 0x25, + 0x25, 0x75, 0x7e, 0x82, 0x4d, 0xd4, 0xfb, 0xfd, 0xbc, 0xba, 0x8b, 0xd3, 0xfd, 0x61, 0xb8, 0x57, + 0xa6, 0x7d, 0x3f, 0x2e, 0x1f, 0x57, 0x2d, 0x30, 0x33, 0xcb, 0x19, 0xe5, 0xe9, 0xc2, 0x39, 0xfd, + 0x91, 0x8e, 0x59, 0xc7, 0x9c, 0x63, 0x27, 0x31, 0x95, 0x4c, 0x1b, 0x53, 0xd3, 0x86, 0xe9, 0x6e, + 0x24, 0x11, 0x73, 0x83, 0x6a, 0x66, 0xcd, 0x6b, 0x71, 0xae, 0xe3, 0x13, 0xaf, 0x0b, 0x5c, 0x76, + 0xe4, 0x02, 0x10, 0xa4, 0xf6, 0xd2, 0x12, 0xa7, 0x14, 0x95, 0x25, 0x61, 0x41, 0x61, 0x3c, 0x08, + 0x07, 0xdd, 0x91, 0x8a, 0x9e, 0x74, 0x37, 0x44, 0xb0, 0x22, 0x5d, 0x2d, 0x53, 0xf5, 0x7e, 0xb3, + 0xfa, 0xca, 0x33, 0x5c, 0x1c, 0x9f, 0x6b, 0x87, 0x05, 0x4d, 0x25, 0xd5, 0x71, 0xc9, 0x69, 0x32, + 0x0b, 0x9c, 0xb8, 0x72, 0xf0, 0x54, 0x10, 0x95, 0x14, 0xe7, 0x1c, 0x09, 0x05, 0x21, 0xd6, 0xfd, + 0x1d, 0x72, 0xe5, 0x49, 0xd8, 0xab, 0x83, 0x32, 0x24, 0xbc, 0xf3, 0x51, 0x75, 0x04, 0x86, 0x63, + 0xa1, 0xc7, 0x0a, 0x92, 0xca, 0x0b, 0x2c, 0x2c, 0xa1, 0x00, 0xfd, 0x94, 0xf3, 0x5a, 0xd5, 0x81, + 0xe3, 0x2a, 0x51, 0xf9, 0x26, 0xac, 0x95, 0x79, 0x9a, 0x56, 0xc1, 0x66, 0xd2, 0xda, 0x76, 0x16, + 0x9e, 0xd3, 0xd6, 0xe6, 0x6d, 0xd6, 0xb8, 0x2d, 0x76, 0xa3, 0xc7, 0x68, 0x7b, 0x50, 0x3e, 0x49, + 0x24, 0xf9, 0x52, 0x89, 0x24, 0x95, 0x12, 0x4a, 0x89, 0x24, 0x92, 0x49, 0x35, 0xe9, 0xd0, 0x29, + 0x4a, 0x50, 0x73, 0x3a, 0xcb, 0x6f, 0xb4, 0x3e, 0xb2, 0xee, 0x2b, 0x54, 0xe9, 0x2b, 0x2d, 0xdd, + 0xe7, 0x23, 0x18, 0xbe, 0xa6, 0x4c, 0x34, 0x2a, 0x42, 0x1a, 0x3c, 0xbd, 0xa8, 0x77, 0x1c, 0xd1, + 0x82, 0xa5, 0x10, 0x52, 0xa0, 0x41, 0x24, 0x8c, 0x1f, 0x35, 0x1f, 0xfe, 0x8b, 0x9b, 0x13, 0xfd, + 0x06, 0xfe, 0x2d, 0x37, 0xfc, 0x6a, 0x99, 0xa9, 0x41, 0xcc, 0xed, 0xee, 0x80, 0xd1, 0xbb, 0x7f, + 0x6b, 0x55, 0xbb, 0x47, 0x69, 0xe8, 0x56, 0x86, 0x5c, 0xc7, 0x75, 0x4d, 0x24, 0xa9, 0xd7, 0xb0, + 0xa5, 0x28, 0x77, 0x1d, 0x51, 0x2b, 0x73, 0x05, 0x6a, 0xc7, 0x25, 0x1e, 0x20, 0xe0, 0x60, 0x78, + 0xae, 0x9a, 0xab, 0x9f, 0x56, 0xbd, 0x44, 0x5d, 0x76, 0x96, 0xf9, 0x6a, 0xd3, 0x3a, 0x66, 0xcb, + 0x0a, 0x65, 0xda, 0x54, 0x61, 0x3a, 0x44, 0x8b, 0x8a, 0x54, 0xa8, 0xe8, 0x60, 0xa9, 0x68, 0x4a, + 0x12, 0x94, 0x2d, 0x2a, 0x2b, 0x2a, 0x42, 0x89, 0x24, 0x80, 0x90, 0x07, 0x85, 0x15, 0x7b, 0x39, + 0x9e, 0x9c, 0x3a, 0xad, 0xba, 0xeb, 0x7d, 0xc3, 0x8f, 0xa4, 0x75, 0xd5, 0xae, 0xcb, 0x03, 0xeb, + 0x3f, 0xd5, 0xdb, 0xa6, 0x40, 0xe4, 0xca, 0x10, 0xf8, 0x04, 0x86, 0xdc, 0x0e, 0xb8, 0xac, 0xf3, + 0xf0, 0x94, 0x94, 0x9c, 0xf3, 0xe2, 0x9e, 0x2a, 0xe7, 0x94, 0x85, 0xb2, 0xa5, 0x29, 0x40, 0xa5, + 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x29, 0x40, 0xa5, 0x79, + 0x9a, 0xaa, 0xff, 0x00, 0x66, 0xd2, 0xda, 0x76, 0x6e, 0xa1, 0xd4, 0x37, 0x16, 0x6d, 0xd6, 0xb8, + 0x2d, 0x77, 0x64, 0x48, 0x74, 0xfb, 0x50, 0x3e, 0x00, 0x00, 0x79, 0x52, 0x89, 0x20, 0x04, 0x80, + 0x4a, 0x89, 0x00, 0x02, 0x48, 0x15, 0x1c, 0xd9, 0x3a, 0x91, 0xd9, 0x2b, 0xc5, 0xd1, 0x9b, 0x74, + 0x4d, 0x7d, 0x09, 0xa7, 0x9e, 0xe5, 0xc5, 0x53, 0x23, 0x3f, 0x15, 0xa1, 0x84, 0x95, 0x1e, 0x4e, + 0xbc, 0xda, 0x50, 0x9f, 0x00, 0xe3, 0x2a, 0x19, 0x38, 0x03, 0x24, 0x81, 0x41, 0x2c, 0xd5, 0x4d, + 0xfa, 0x44, 0xb6, 0xe7, 0xeb, 0x2d, 0x31, 0x6e, 0xdc, 0xcb, 0x7b, 0x79, 0x93, 0x68, 0xe3, 0x06, + 0xe5, 0xee, 0xfb, 0x51, 0x5c, 0x5f, 0xea, 0x97, 0xe5, 0x60, 0x0e, 0x0e, 0xac, 0xa7, 0x09, 0x49, + 0x52, 0xbb, 0xf9, 0x27, 0x08, 0xab, 0x65, 0x5e, 0x36, 0xbb, 0xb1, 0x7e, 0x54, 0x68, 0x7b, 0xf6, + 0x99, 0xf5, 0x5e, 0x93, 0xeb, 0x7b, 0x6c, 0x88, 0x3e, 0xa3, 0xb7, 0xcf, 0xb5, 0xdd, 0x69, 0x48, + 0xe7, 0xc7, 0x23, 0x96, 0x39, 0x67, 0x19, 0x19, 0xc7, 0xc8, 0xa0, 0xc8, 0x0a, 0xd4, 0x5e, 0x94, + 0x75, 0x8c, 0xad, 0x6f, 0xb0, 0xfa, 0x72, 0xef, 0x73, 0x9e, 0xcc, 0xdb, 0xa3, 0x2d, 0x2e, 0x14, + 0xe5, 0xa1, 0xe2, 0xe3, 0x9c, 0xd9, 0x59, 0x42, 0x4b, 0xa5, 0x4a, 0x52, 0xbb, 0xaa, 0x6c, 0x36, + 0xe2, 0xb9, 0x1c, 0x92, 0xe7, 0x2c, 0x00, 0xa1, 0x59, 0x8f, 0x7e, 0xb5, 0xcf, 0xb1, 0xdf, 0x27, + 0xd9, 0x2e, 0x8c, 0x7a, 0x79, 0xf6, 0xf9, 0x2e, 0x45, 0x94, 0xd7, 0x34, 0xab, 0xb6, 0xeb, 0x6a, + 0x29, 0x5a, 0x72, 0x92, 0x41, 0xc2, 0x81, 0x19, 0x04, 0x8f, 0xc2, 0xae, 0x37, 0xd1, 0x9d, 0x2e, + 0x52, 0xe0, 0xeb, 0xc8, 0x2b, 0x92, 0xf2, 0xa2, 0x32, 0xec, 0x07, 0x9a, 0x60, 0xb8, 0x4b, 0x68, + 0x5a, 0xc4, 0x80, 0xb5, 0x84, 0xfc, 0x05, 0x28, 0x36, 0x80, 0x48, 0xf2, 0x42, 0x13, 0x9f, 0x81, + 0x41, 0x71, 0x69, 0x4a, 0x50, 0x52, 0xdf, 0xa4, 0x83, 0x43, 0xca, 0x13, 0xac, 0x3b, 0x92, 0x89, + 0xcc, 0x98, 0x85, 0xa6, 0xec, 0x6e, 0xc5, 0x29, 0x21, 0xc4, 0xac, 0x17, 0xdf, 0x43, 0x80, 0xfc, + 0x29, 0x24, 0x15, 0x82, 0x0e, 0x08, 0x29, 0x4e, 0x39, 0x72, 0x3c, 0x6a, 0x04, 0x09, 0x72, 0xa0, + 0x4e, 0x8f, 0x3a, 0x0c, 0x97, 0xa2, 0xcb, 0x8c, 0xea, 0x5e, 0x61, 0xf6, 0x5c, 0x28, 0x71, 0xa5, + 0xa4, 0xe5, 0x2b, 0x4a, 0x87, 0x94, 0xa8, 0x10, 0x08, 0x23, 0xc8, 0x22, 0xb5, 0xfb, 0x55, 0x58, + 0x2c, 0xda, 0xa7, 0x4e, 0xcd, 0xd3, 0xda, 0x86, 0xdc, 0xcd, 0xc6, 0xd7, 0x39, 0xae, 0xd4, 0x88, + 0xee, 0x8f, 0x6a, 0xc7, 0xc8, 0x20, 0x8f, 0x29, 0x50, 0x20, 0x10, 0xa0, 0x41, 0x49, 0x00, 0x82, + 0x08, 0x06, 0xa0, 0x08, 0x1d, 0x18, 0x6d, 0x3c, 0x69, 0xd1, 0xe4, 0x3d, 0x74, 0xd5, 0xb3, 0x1a, + 0x69, 0xd4, 0xad, 0x71, 0xde, 0x9a, 0xc8, 0x6d, 0xe0, 0x0e, 0x4a, 0x14, 0x50, 0xca, 0x54, 0x12, + 0x7e, 0x0f, 0x15, 0x24, 0xe0, 0xf8, 0x20, 0xf9, 0xa0, 0x9b, 0x36, 0x9e, 0xe9, 0x3e, 0xf9, 0xb5, + 0x9a, 0x4a, 0xf7, 0x74, 0x7f, 0xd4, 0x4f, 0xb8, 0x59, 0x21, 0x4a, 0x94, 0xef, 0x04, 0xa7, 0xb8, + 0xeb, 0x8c, 0x21, 0x4b, 0x56, 0x12, 0x00, 0x19, 0x51, 0x27, 0x00, 0x01, 0xf8, 0x57, 0x4d, 0x5f, + 0x18, 0x11, 0x22, 0xc0, 0x83, 0x1e, 0x0c, 0x18, 0xcc, 0xc5, 0x89, 0x19, 0xa4, 0xb2, 0xc3, 0x0c, + 0xb6, 0x10, 0xdb, 0x48, 0x48, 0xc2, 0x50, 0x94, 0x8f, 0x09, 0x48, 0x00, 0x00, 0x07, 0x80, 0x05, + 0x7d, 0xa8, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x14, 0xa5, 0x28, 0x15, 0xc9, + 0xef, 0x06, 0xb8, 0x8b, 0xb7, 0x1b, 0x6d, 0x79, 0xd6, 0x93, 0x20, 0xbd, 0x3d, 0xab, 0x6b, 0x48, + 0x29, 0x8c, 0xd2, 0x82, 0x54, 0xea, 0xd6, 0xe2, 0x5b, 0x42, 0x4a, 0x8f, 0xd9, 0x4f, 0x35, 0xa7, + 0x2a, 0xc1, 0x20, 0x64, 0x80, 0xa2, 0x30, 0x7a, 0xca, 0xe1, 0xb7, 0xf3, 0x43, 0xca, 0xdc, 0x7d, + 0xa3, 0xbf, 0x68, 0xc8, 0x33, 0x99, 0x83, 0x2e, 0xe0, 0xd3, 0x65, 0x87, 0x9e, 0x49, 0x53, 0x61, + 0x6d, 0xba, 0x87, 0x52, 0x95, 0x63, 0xc8, 0x4a, 0x8b, 0x61, 0x25, 0x40, 0x12, 0x01, 0xce, 0x15, + 0x8c, 0x10, 0xa8, 0x10, 0x3a, 0xd8, 0xdc, 0x94, 0x4e, 0x8e, 0xb9, 0xda, 0x6b, 0x49, 0x3f, 0x11, + 0x2e, 0xa4, 0xbe, 0xd3, 0x2c, 0x48, 0x69, 0xc5, 0xa3, 0x3e, 0xe4, 0xa5, 0x65, 0xe5, 0x04, 0xa8, + 0x8c, 0x80, 0xa2, 0x95, 0x00, 0x7c, 0xe0, 0xfc, 0x55, 0xe5, 0xd2, 0x77, 0xb8, 0xba, 0x97, 0x4a, + 0xda, 0x75, 0x1c, 0x16, 0xde, 0x6e, 0x25, 0xd6, 0x0b, 0x33, 0x58, 0x43, 0xc0, 0x07, 0x12, 0x87, + 0x50, 0x16, 0x90, 0xa0, 0x09, 0x01, 0x58, 0x50, 0xce, 0x09, 0x19, 0xfb, 0xcd, 0x67, 0x3c, 0x0e, + 0x95, 0x77, 0xc6, 0x4c, 0xe8, 0xf1, 0xde, 0xd2, 0x2c, 0xc3, 0x69, 0xd7, 0x52, 0x85, 0xc8, 0x7a, + 0xeb, 0x14, 0xb6, 0xc8, 0x27, 0x05, 0x6a, 0x08, 0x71, 0x4a, 0x29, 0x1f, 0x27, 0x8a, 0x54, 0x70, + 0x3c, 0x02, 0x7c, 0x56, 0x89, 0x68, 0x4b, 0x17, 0xe4, 0xbe, 0x87, 0xb0, 0xe9, 0x9f, 0x55, 0xea, + 0xfe, 0xa8, 0xb6, 0xc7, 0x83, 0xea, 0x3b, 0x7c, 0x3b, 0xbd, 0xa6, 0x92, 0x8e, 0x7c, 0x72, 0x78, + 0xe7, 0x8e, 0x71, 0x93, 0x8c, 0xfc, 0x9a, 0x0a, 0x7f, 0xf4, 0x8b, 0xe8, 0x5d, 0x48, 0xfe, 0xa4, + 0xb5, 0x6e, 0x24, 0x68, 0x5e, 0xa2, 0xc0, 0xc5, 0xb5, 0xab, 0x6c, 0xa7, 0x5a, 0x25, 0x4a, 0x8a, + 0xe8, 0x79, 0xd5, 0x25, 0x4e, 0x0c, 0x78, 0x42, 0xbb, 0xa1, 0x21, 0x5e, 0x47, 0x21, 0x83, 0x82, + 0x51, 0xca, 0xa0, 0x56, 0xb9, 0x6e, 0xb5, 0xbb, 0x4d, 0xdd, 0xb6, 0xd3, 0x52, 0x41, 0xd5, 0xea, + 0xe1, 0x60, 0x5d, 0xb5, 0xf5, 0x4f, 0x74, 0x34, 0x1c, 0x53, 0x0d, 0x25, 0x05, 0x45, 0xd4, 0x02, + 0x95, 0x7b, 0xd1, 0xc7, 0x9a, 0x48, 0x49, 0x21, 0x49, 0x04, 0x02, 0x40, 0xac, 0x8d, 0xa0, 0xd4, + 0xce, 0x99, 0x37, 0x1b, 0xf3, 0x9d, 0xb4, 0x16, 0xbb, 0xfc, 0x97, 0x39, 0xdd, 0xa3, 0xe6, 0x0d, + 0xdb, 0xdb, 0x8c, 0xca, 0x6c, 0x27, 0x92, 0xfc, 0x21, 0x29, 0xf7, 0xa5, 0x48, 0x73, 0x09, 0x1c, + 0x53, 0xdc, 0xe3, 0x9c, 0xa4, 0xd4, 0x99, 0x55, 0x9b, 0xe8, 0xe2, 0xfd, 0x88, 0x5e, 0x7f, 0x79, + 0x1f, 0xfe, 0x5a, 0x35, 0x59, 0x9a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, + 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x0a, 0xdb, 0xf4, 0x8a, 0x44, 0x95, 0x27, 0x62, 0xad, 0xef, 0x47, + 0x8c, 0xf3, 0xcd, 0x45, 0xd4, 0x11, 0xde, 0x90, 0xb6, 0xdb, 0x2a, 0x4b, 0x28, 0x2c, 0xbe, 0x80, + 0xb5, 0x91, 0xf6, 0x53, 0xcd, 0x68, 0x4e, 0x4f, 0x8c, 0xa9, 0x23, 0xe4, 0x8a, 0xcf, 0x9a, 0xd9, + 0x29, 0xf1, 0x22, 0xcf, 0x83, 0x22, 0x0c, 0xe8, 0xcc, 0xca, 0x89, 0x25, 0xa5, 0x32, 0xfb, 0x0f, + 0x36, 0x16, 0xdb, 0xa8, 0x50, 0xc2, 0x90, 0xa4, 0x9f, 0x0a, 0x49, 0x04, 0x82, 0x0f, 0x82, 0x0d, + 0x56, 0x6d, 0xd1, 0xe8, 0xdf, 0x48, 0xea, 0x5d, 0x44, 0xed, 0xe3, 0x4a, 0x6a, 0x07, 0xb4, 0xa2, + 0x64, 0xba, 0xb7, 0x64, 0x42, 0x10, 0x93, 0x26, 0x32, 0x49, 0xe3, 0x80, 0xca, 0x42, 0xdb, 0x2d, + 0x27, 0x21, 0x64, 0xa7, 0x2a, 0x1e, 0xe0, 0x12, 0x10, 0x94, 0x81, 0x41, 0x4c, 0xe0, 0x6e, 0x6e, + 0xe4, 0xc0, 0x83, 0x1e, 0x0c, 0x1d, 0xc2, 0xd5, 0xb1, 0x62, 0x46, 0x69, 0x2c, 0xb0, 0xc3, 0x37, + 0x99, 0x08, 0x6d, 0xa4, 0x24, 0x61, 0x28, 0x4a, 0x42, 0xf0, 0x94, 0x80, 0x00, 0x00, 0x78, 0x00, + 0x54, 0xa7, 0xa6, 0x3a, 0xbc, 0xde, 0x5b, 0x47, 0xa8, 0xfa, 0xc2, 0x6d, 0x97, 0x50, 0x77, 0x78, + 0xf0, 0xfa, 0xc6, 0xdc, 0x94, 0x76, 0x71, 0x9c, 0xf1, 0xf4, 0xe5, 0xac, 0xe7, 0x23, 0x3c, 0xb9, + 0x7d, 0x91, 0x8c, 0x79, 0xcf, 0x4d, 0xac, 0xba, 0x29, 0xd7, 0x16, 0xfe, 0xe3, 0xba, 0x5b, 0x53, + 0xd9, 0x6f, 0xac, 0xb7, 0x18, 0xb9, 0xdb, 0x92, 0x85, 0xc2, 0x90, 0xe3, 0xa3, 0x97, 0xea, 0x90, + 0x9f, 0x7a, 0x3c, 0x80, 0x9c, 0x29, 0x4e, 0x24, 0x65, 0x47, 0x38, 0x03, 0x26, 0x3f, 0xfd, 0x17, + 0x37, 0xdb, 0xfa, 0x0d, 0xfc, 0x5a, 0x17, 0xf8, 0xd4, 0x11, 0x04, 0xf9, 0x72, 0xa7, 0xce, 0x91, + 0x3a, 0x74, 0x97, 0xa5, 0x4b, 0x92, 0xea, 0x9e, 0x7d, 0xf7, 0x9c, 0x2b, 0x71, 0xd5, 0xa8, 0xe5, + 0x4b, 0x52, 0x8f, 0x95, 0x28, 0x92, 0x49, 0x27, 0xc9, 0x26, 0xae, 0x97, 0xd1, 0xa3, 0x6b, 0x9e, + 0xcd, 0x8f, 0x5b, 0xde, 0xdc, 0x63, 0x8c, 0x09, 0x72, 0x61, 0xc5, 0x61, 0xde, 0x69, 0xf7, 0xba, + 0xca, 0x5d, 0x53, 0x89, 0xc6, 0x72, 0x30, 0x97, 0xda, 0x39, 0x23, 0x07, 0x97, 0x8c, 0xe0, 0xe2, + 0x1f, 0xd2, 0xbd, 0x26, 0xef, 0x1d, 0xcf, 0x51, 0x42, 0x83, 0x7a, 0xb1, 0x33, 0x61, 0xb7, 0x3a, + 0xee, 0x24, 0xdc, 0x1d, 0x9d, 0x19, 0xf4, 0xc7, 0x47, 0xc9, 0x50, 0x6d, 0xb7, 0x4a, 0x96, 0xaf, + 0x18, 0x09, 0x18, 0x04, 0x91, 0x92, 0x91, 0x95, 0x0b, 0xff, 0x00, 0xb7, 0x5a, 0x42, 0xcd, 0xa0, + 0xb4, 0x55, 0xb3, 0x48, 0xe9, 0xf4, 0x3c, 0x9b, 0x75, 0xb9, 0xa2, 0x86, 0x8b, 0xce, 0x73, 0x71, + 0x65, 0x4a, 0x2b, 0x5a, 0xd4, 0x7f, 0xd6, 0x52, 0xd4, 0xa5, 0x1c, 0x00, 0x01, 0x38, 0x00, 0x0c, + 0x00, 0x1d, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, + 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x29, 0x4a, 0x05, 0x42, 0x7d, 0x59, 0x6f, 0x6c, 0xad, 0x9d, 0xd3, + 0xb6, 0x91, 0x67, 0xb4, 0xb3, 0x3e, 0xf5, 0x79, 0x75, 0xc1, 0x15, 0x52, 0x81, 0x31, 0x99, 0x43, + 0x5d, 0xb2, 0xe2, 0x96, 0x12, 0xa4, 0xa9, 0x4a, 0x3d, 0xc4, 0x84, 0xa4, 0x10, 0x3c, 0x92, 0x4f, + 0xb4, 0x25, 0x53, 0x65, 0x57, 0x9e, 0xb6, 0x76, 0x7f, 0x54, 0x6e, 0x8e, 0x9d, 0xb0, 0xce, 0xd2, + 0x3d, 0x99, 0x57, 0x1b, 0x1b, 0xaf, 0x83, 0x6f, 0x71, 0x69, 0x69, 0x52, 0x50, 0xff, 0x00, 0x68, + 0x15, 0x21, 0xc5, 0xa8, 0x24, 0x29, 0x1d, 0xb0, 0x78, 0xab, 0x00, 0x82, 0xac, 0x1c, 0x80, 0x95, + 0x04, 0x73, 0xb2, 0x9d, 0x5e, 0xea, 0xad, 0x47, 0xb9, 0x76, 0x6d, 0x37, 0xab, 0xf4, 0xf5, 0x97, + 0xd0, 0x5d, 0xe4, 0xb7, 0x05, 0xa7, 0x6d, 0x4d, 0x3a, 0xdb, 0xac, 0xbe, 0xea, 0xd2, 0x86, 0xd6, + 0x7b, 0x8e, 0xa8, 0x29, 0x1c, 0x8e, 0x14, 0x06, 0x08, 0x07, 0x90, 0x27, 0x8f, 0x15, 0x5c, 0xca, + 0xa0, 0xfb, 0x0b, 0xd3, 0x0e, 0xea, 0x42, 0xdd, 0x9d, 0x3d, 0x7a, 0xd5, 0x36, 0x96, 0x6c, 0x16, + 0xbb, 0x44, 0xe6, 0x6e, 0x4e, 0x3e, 0xe4, 0xb6, 0x24, 0x29, 0xd2, 0xcb, 0x89, 0x5a, 0x59, 0x42, + 0x1a, 0x71, 0x47, 0x92, 0x88, 0x03, 0x27, 0x01, 0x23, 0x91, 0xf2, 0x40, 0x4a, 0xaf, 0xc5, 0x05, + 0x3a, 0xfa, 0x42, 0x77, 0x55, 0xc6, 0x19, 0x8f, 0xb5, 0x16, 0x59, 0x2c, 0x94, 0xc9, 0x69, 0x12, + 0xef, 0xa4, 0x25, 0x0b, 0x50, 0x01, 0x69, 0x5b, 0x0c, 0xe7, 0x91, 0x28, 0x56, 0x51, 0xdc, 0x50, + 0x29, 0x07, 0x05, 0xa2, 0x0f, 0x15, 0x28, 0x1a, 0x59, 0x5f, 0x79, 0xf2, 0xe5, 0x4f, 0x9d, 0x22, + 0x74, 0xe9, 0x2f, 0x4a, 0x97, 0x25, 0xd5, 0x3c, 0xfb, 0xef, 0x38, 0x56, 0xe3, 0xab, 0x51, 0xca, + 0x96, 0xa5, 0x1f, 0x2a, 0x51, 0x24, 0x92, 0x4f, 0x92, 0x4d, 0x4f, 0x3d, 0x14, 0xed, 0x1f, 0xe7, + 0x07, 0x70, 0xd3, 0x7f, 0xbf, 0xda, 0x3d, 0x56, 0x93, 0xb2, 0x65, 0x6f, 0xfa, 0x86, 0x79, 0x47, + 0x97, 0x2b, 0x03, 0xb7, 0x1c, 0xfb, 0x87, 0x2c, 0x72, 0x0e, 0x28, 0x61, 0x49, 0xc2, 0x12, 0x95, + 0x8c, 0x38, 0x32, 0x16, 0xe7, 0xa4, 0x0d, 0xbf, 0x95, 0xb7, 0x7b, 0x25, 0x6e, 0x83, 0x73, 0x4b, + 0xcd, 0xdd, 0x2e, 0xae, 0xaa, 0xeb, 0x39, 0x87, 0x41, 0x06, 0x3a, 0xdd, 0x4a, 0x02, 0x5a, 0xe2, + 0xa4, 0xa5, 0x49, 0x52, 0x5b, 0x43, 0x61, 0x49, 0x56, 0x48, 0x5f, 0x3f, 0x24, 0x62, 0xa5, 0xfa, + 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, + 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, + 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, 0x52, 0x81, 0x4a, + 0x52, 0x81, 0x4a, 0x52, 0x82, 0x2c, 0xd5, 0x5d, 0x3c, 0xec, 0xe6, 0xa7, 0xd4, 0x53, 0x75, 0x05, + 0xeb, 0x45, 0xb2, 0xf5, 0xc6, 0x73, 0xbd, 0xe9, 0x2e, 0xb5, 0x36, 0x4b, 0x09, 0x71, 0x67, 0xe5, + 0x65, 0x0d, 0xb8, 0x94, 0x85, 0x1f, 0x92, 0x40, 0xc9, 0x24, 0x93, 0x92, 0x49, 0x32, 0x06, 0x95, + 0xb0, 0x59, 0xb4, 0xb6, 0x9d, 0x85, 0xa7, 0xb4, 0xf5, 0xb9, 0x9b, 0x75, 0xae, 0x0b, 0x5d, 0xa8, + 0xf1, 0xda, 0x1e, 0xd4, 0x0f, 0x92, 0x49, 0x3e, 0x54, 0xa2, 0x49, 0x25, 0x44, 0x92, 0xa2, 0x49, + 0x24, 0x92, 0x4d, 0x7a, 0x74, 0xa0, 0x52, 0x94, 0xa0, 0x52, 0x94, 0xa0, 0xff, 0xd9 +}; +const int test_jpg_size = sizeof(test_jpg); diff --git a/template/source/gfx/test_jpg.h b/template/source/gfx/test_jpg.h new file mode 100644 index 0000000..7d70acd --- /dev/null +++ b/template/source/gfx/test_jpg.h @@ -0,0 +1,14 @@ +/* + This file was autogenerated by raw2c. +Visit http://www.devkitpro.org +*/ + +//--------------------------------------------------------------------------------- +#ifndef _test_jpg_h_ +#define _test_jpg_h_ +//--------------------------------------------------------------------------------- +extern const unsigned char test_jpg[]; +extern const int test_jpg_size; +//--------------------------------------------------------------------------------- +#endif //_test_jpg_h_ +//--------------------------------------------------------------------------------- diff --git a/template/source/gfx/test_jpg.jpg b/template/source/gfx/test_jpg.jpg new file mode 100644 index 0000000..968ef5c Binary files /dev/null and b/template/source/gfx/test_jpg.jpg differ diff --git a/template/source/libjpeg/jconfig.h b/template/source/libjpeg/jconfig.h new file mode 100644 index 0000000..9594ec5 --- /dev/null +++ b/template/source/libjpeg/jconfig.h @@ -0,0 +1,45 @@ +/* jconfig.h. Generated automatically by configure. */ +/* jconfig.cfg --- source file edited by configure script */ +/* see jconfig.doc for explanations */ + +#define HAVE_PROTOTYPES +#define HAVE_UNSIGNED_CHAR +#define HAVE_UNSIGNED_SHORT +#undef void +#undef const +#undef CHAR_IS_UNSIGNED +#define HAVE_STDDEF_H +#define HAVE_STDLIB_H +#undef NEED_BSD_STRINGS +#undef NEED_SYS_TYPES_H +#undef NEED_FAR_POINTERS +#undef NEED_SHORT_EXTERNAL_NAMES +/* Define this if you get warnings about undefined structures. */ +#undef INCOMPLETE_TYPES_BROKEN + +#ifdef JPEG_INTERNALS + +#undef RIGHT_SHIFT_IS_UNSIGNED +#define INLINE __inline__ +/* These are for configuring the JPEG memory manager. */ +#undef DEFAULT_MAX_MEM +#undef NO_MKTEMP + +#endif /* JPEG_INTERNALS */ + +#ifdef JPEG_CJPEG_DJPEG + +#define BMP_SUPPORTED /* BMP image file format */ +#define GIF_SUPPORTED /* GIF image file format */ +#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ +#undef RLE_SUPPORTED /* Utah RLE image file format */ +#define TARGA_SUPPORTED /* Targa image file format */ + +#undef TWO_FILE_COMMANDLINE +#undef NEED_SIGNAL_CATCHER +#undef DONT_USE_B_MODE + +/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ +#undef PROGRESS_REPORT + +#endif /* JPEG_CJPEG_DJPEG */ diff --git a/template/source/libjpeg/jmorecfg.h b/template/source/libjpeg/jmorecfg.h new file mode 100644 index 0000000..54a7d1c --- /dev/null +++ b/template/source/libjpeg/jmorecfg.h @@ -0,0 +1,363 @@ +/* + * jmorecfg.h + * + * Copyright (C) 1991-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains additional configuration options that customize the + * JPEG software for special applications or support machine-dependent + * optimizations. Most users will not need to touch this file. + */ + + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + + +/* + * Maximum number of components (color channels) allowed in JPEG image. + * To meet the letter of the JPEG spec, set this to 255. However, darn + * few applications need more than 4 channels (maybe 5 for CMYK + alpha + * mask). We recommend 10 as a reasonable compromise; use 4 if you are + * really short on memory. (Each allowed component costs a hundred or so + * bytes of storage, whether actually used in an image or not.) + */ + +#define MAX_COMPONENTS 10 /* maximum number of image components */ + + +/* + * Basic data types. + * You may need to change these if you have a machine with unusual data + * type sizes; for example, "char" not 8 bits, "short" not 16 bits, + * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, + * but it had better be at least 16. + */ + +/* Representation of a single sample (pixel element value). + * We frequently allocate large arrays of these, so it's important to keep + * them small. But if you have memory to burn and access to char or short + * arrays is very slow on your hardware, you might want to change these. + */ + +#if BITS_IN_JSAMPLE == 8 +/* JSAMPLE should be the smallest type that will hold the values 0..255. + * You can use a signed char by having GETJSAMPLE mask it with 0xFF. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JSAMPLE; +#ifdef CHAR_IS_UNSIGNED +#define GETJSAMPLE(value) ((int) (value)) +#else +#define GETJSAMPLE(value) ((int) (value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + +#define MAXJSAMPLE 255 +#define CENTERJSAMPLE 128 + +#endif /* BITS_IN_JSAMPLE == 8 */ + + +#if BITS_IN_JSAMPLE == 12 +/* JSAMPLE should be the smallest type that will hold the values 0..4095. + * On nearly all machines "short" will do nicely. + */ + +typedef short JSAMPLE; +#define GETJSAMPLE(value) ((int) (value)) + +#define MAXJSAMPLE 4095 +#define CENTERJSAMPLE 2048 + +#endif /* BITS_IN_JSAMPLE == 12 */ + + +/* Representation of a DCT frequency coefficient. + * This should be a signed value of at least 16 bits; "short" is usually OK. + * Again, we allocate large arrays of these, but you can change to int + * if you have memory to burn and "short" is really slow. + */ + +typedef short JCOEF; + + +/* Compressed datastreams are represented as arrays of JOCTET. + * These must be EXACTLY 8 bits wide, at least once they are written to + * external storage. Note that when using the stdio data source/destination + * managers, this is also the data type passed to fread/fwrite. + */ + +#ifdef HAVE_UNSIGNED_CHAR + +typedef unsigned char JOCTET; +#define GETJOCTET(value) (value) + +#else /* not HAVE_UNSIGNED_CHAR */ + +typedef char JOCTET; +#ifdef CHAR_IS_UNSIGNED +#define GETJOCTET(value) (value) +#else +#define GETJOCTET(value) ((value) & 0xFF) +#endif /* CHAR_IS_UNSIGNED */ + +#endif /* HAVE_UNSIGNED_CHAR */ + + +/* These typedefs are used for various table entries and so forth. + * They must be at least as wide as specified; but making them too big + * won't cost a huge amount of memory, so we don't provide special + * extraction code like we did for JSAMPLE. (In other words, these + * typedefs live at a different point on the speed/space tradeoff curve.) + */ + +/* UINT8 must hold at least the values 0..255. */ + +#ifdef HAVE_UNSIGNED_CHAR +typedef unsigned char UINT8; +#else /* not HAVE_UNSIGNED_CHAR */ +#ifdef CHAR_IS_UNSIGNED +typedef char UINT8; +#else /* not CHAR_IS_UNSIGNED */ +typedef short UINT8; +#endif /* CHAR_IS_UNSIGNED */ +#endif /* HAVE_UNSIGNED_CHAR */ + +/* UINT16 must hold at least the values 0..65535. */ + +#ifdef HAVE_UNSIGNED_SHORT +typedef unsigned short UINT16; +#else /* not HAVE_UNSIGNED_SHORT */ +typedef unsigned int UINT16; +#endif /* HAVE_UNSIGNED_SHORT */ + +/* INT16 must hold at least the values -32768..32767. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ +typedef short INT16; +#endif + +/* INT32 must hold at least signed 32-bit values. */ + +#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ +typedef long INT32; +#endif + +/* Datatype used for image dimensions. The JPEG standard only supports + * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore + * "unsigned int" is sufficient on all machines. However, if you need to + * handle larger images and you don't mind deviating from the spec, you + * can change this datatype. + */ + +typedef unsigned int JDIMENSION; + +#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ + + +/* These macros are used in all function definitions and extern declarations. + * You could modify them if you need to change function linkage conventions; + * in particular, you'll need to do that to make the library a Windows DLL. + * Another application is to make all functions global for use with debuggers + * or code profilers that require it. + */ + +/* a function called through method pointers: */ +#define METHODDEF(type) static type +/* a function used only in its module: */ +#define LOCAL(type) static type +/* a function referenced thru EXTERNs: */ +#define GLOBAL(type) type +/* a reference to a GLOBAL function: */ +#define EXTERN(type) extern type + + +/* This macro is used to declare a "method", that is, a function pointer. + * We want to supply prototype parameters if the compiler can cope. + * Note that the arglist parameter must be parenthesized! + * Again, you can customize this if you need special linkage keywords. + */ + +#ifdef HAVE_PROTOTYPES +#define JMETHOD(type,methodname,arglist) type (*methodname) arglist +#else +#define JMETHOD(type,methodname,arglist) type (*methodname) () +#endif + + +/* Here is the pseudo-keyword for declaring pointers that must be "far" + * on 80x86 machines. Most of the specialized coding for 80x86 is handled + * by just saying "FAR *" where such a pointer is needed. In a few places + * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. + */ + +#ifdef NEED_FAR_POINTERS +#define FAR far +#else +#define FAR +#endif + + +/* + * On a few systems, type boolean and/or its values FALSE, TRUE may appear + * in standard header files. Or you may have conflicts with application- + * specific header files that you want to include together with these files. + * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. + */ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#endif +#ifndef FALSE /* in case these macros already exist */ +#define FALSE 0 /* values of boolean */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + + +/* + * The remaining options affect code selection within the JPEG library, + * but they don't need to be visible to most applications using the library. + * To minimize application namespace pollution, the symbols won't be + * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. + */ + +#ifdef JPEG_INTERNALS +#define JPEG_INTERNAL_OPTIONS +#endif + +#ifdef JPEG_INTERNAL_OPTIONS + + +/* + * These defines indicate whether to include various optional functions. + * Undefining some of these symbols will produce a smaller but less capable + * library. Note that you can leave certain source files out of the + * compilation/linking process if you've #undef'd the corresponding symbols. + * (You may HAVE to do that if your compiler doesn't like null source files.) + */ + +/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ + +/* Capability options common to encoder and decoder: */ + +#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ +#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ +#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ + +/* Encoder capability options: */ + +#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ +/* Note: if you selected 12-bit data precision, it is dangerous to turn off + * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit + * precision, so jchuff.c normally uses entropy optimization to compute + * usable tables for higher precision. If you don't want to do optimization, + * you'll have to supply different default Huffman tables. + * The exact same statements apply for progressive JPEG: the default tables + * don't work for progressive mode. (This may get fixed, however.) + */ +#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ + +/* Decoder capability options: */ + +#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ +#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ +#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ +#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ +#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ +#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ +#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ +#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ +#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ +#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ + +/* more capability options later, no doubt */ + + +/* + * Ordering of RGB data in scanlines passed to or from the application. + * If your application wants to deal with data in the order B,G,R, just + * change these macros. You can also deal with formats such as R,G,B,X + * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing + * the offsets will also change the order in which colormap data is organized. + * RESTRICTIONS: + * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. + * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not + * useful if you are using JPEG color spaces other than YCbCr or grayscale. + * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * is not 3 (they don't understand about dummy color components!). So you + * can't use color quantization if you change that value. + */ + +#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ +#define RGB_GREEN 1 /* Offset of Green */ +#define RGB_BLUE 2 /* Offset of Blue */ +#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ + + +/* Definitions for speed-related optimizations. */ + + +/* If your compiler supports inline functions, define INLINE + * as the inline keyword; otherwise define it as empty. + */ + +#ifndef INLINE +#ifdef __GNUC__ /* for instance, GNU C knows about inline */ +#define INLINE __inline__ +#endif +#ifndef INLINE +#define INLINE /* default is to define it as empty */ +#endif +#endif + + +/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying + * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER + * as short on such a machine. MULTIPLIER must be at least 16 bits wide. + */ + +#ifndef MULTIPLIER +#define MULTIPLIER int /* type for fastest integer multiply */ +#endif + + +/* FAST_FLOAT should be either float or double, whichever is done faster + * by your compiler. (Note that this type is only used in the floating point + * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) + * Typically, float is faster in ANSI C compilers, while double is faster in + * pre-ANSI compilers (because they insist on converting to double anyway). + * The code below therefore chooses float if we have ANSI-style prototypes. + */ + +#ifndef FAST_FLOAT +#ifdef HAVE_PROTOTYPES +#define FAST_FLOAT float +#else +#define FAST_FLOAT double +#endif +#endif + +#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/template/source/libjpeg/jpeglib.h b/template/source/libjpeg/jpeglib.h new file mode 100644 index 0000000..6febf78 --- /dev/null +++ b/template/source/libjpeg/jpeglib.h @@ -0,0 +1,1097 @@ +/* + * jpeglib.h + * + * Copyright (C) 1991-1998, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file defines the application interface for the JPEG library. + * Most applications using the library need only include this file, + * and perhaps jerror.h if they want to know the exact error codes. + */ + +#ifndef JPEGLIB_H +#define JPEGLIB_H + +/* + * First we include the configuration files that record how this + * installation of the JPEG library is set up. jconfig.h can be + * generated automatically for many systems. jmorecfg.h contains + * manual configuration options that most people need not worry about. + */ + +#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ +#include "jconfig.h" /* widely used configuration options */ +#endif +#include "jmorecfg.h" /* seldom changed options */ + + +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ + +#define JPEG_LIB_VERSION 62 /* Version 6b */ + + +/* Various constants determining the sizes of things. + * All of these are specified by the JPEG standard, so don't change them + * if you want to be compatible. + */ + +#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ +#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ +#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ +#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ +#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ +#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ +/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; + * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. + * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU + * to handle it. We even let you do this from the jconfig.h file. However, + * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe + * sometimes emits noncompliant files doesn't mean you should too. + */ +#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ +#ifndef D_MAX_BLOCKS_IN_MCU +#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ +#endif + + +/* Data structures for images (arrays of samples and of DCT coefficients). + * On 80x86 machines, the image arrays are too big for near pointers, + * but the pointer arrays can fit in near memory. + */ + +typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ +typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ +typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ + +typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ +typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ +typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ +typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ + +typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ + + +/* Types for JPEG compression parameters and working tables. */ + + +/* DCT coefficient quantization tables. */ + +typedef struct { + /* This array gives the coefficient quantizers in natural array order + * (not the zigzag order in which they are stored in a JPEG DQT marker). + * CAUTION: IJG versions prior to v6a kept this array in zigzag order. + */ + UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JQUANT_TBL; + + +/* Huffman coding tables. */ + +typedef struct { + /* These two fields directly represent the contents of a JPEG DHT marker */ + UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ + /* length k bits; bits[0] is unused */ + UINT8 huffval[256]; /* The symbols, in order of incr code length */ + /* This field is used only during compression. It's initialized FALSE when + * the table is created, and set TRUE when it's been output to the file. + * You could suppress output of a table by setting this to TRUE. + * (See jpeg_suppress_tables for an example.) + */ + boolean sent_table; /* TRUE when table has been output */ +} JHUFF_TBL; + + +/* Basic info about one component (color channel). */ + +typedef struct { + /* These values are fixed over the whole image. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOF marker. */ + int component_id; /* identifier for this component (0..255) */ + int component_index; /* its index in SOF or cinfo->comp_info[] */ + int h_samp_factor; /* horizontal sampling factor (1..4) */ + int v_samp_factor; /* vertical sampling factor (1..4) */ + int quant_tbl_no; /* quantization table selector (0..3) */ + /* These values may vary between scans. */ + /* For compression, they must be supplied by parameter setup; */ + /* for decompression, they are read from the SOS marker. */ + /* The decompressor output side may not use these variables. */ + int dc_tbl_no; /* DC entropy table selector (0..3) */ + int ac_tbl_no; /* AC entropy table selector (0..3) */ + + /* Remaining fields should be treated as private by applications. */ + + /* These values are computed during compression or decompression startup: */ + /* Component's size in DCT blocks. + * Any dummy blocks added to complete an MCU are not counted; therefore + * these values do not depend on whether a scan is interleaved or not. + */ + JDIMENSION width_in_blocks; + JDIMENSION height_in_blocks; + /* Size of a DCT block in samples. Always DCTSIZE for compression. + * For decompression this is the size of the output from one DCT block, + * reflecting any scaling we choose to apply during the IDCT step. + * Values of 1,2,4,8 are likely to be supported. Note that different + * components may receive different IDCT scalings. + */ + int DCT_scaled_size; + /* The downsampled dimensions are the component's actual, unpadded number + * of samples at the main buffer (preprocessing/compression interface), thus + * downsampled_width = ceil(image_width * Hi/Hmax) + * and similarly for height. For decompression, IDCT scaling is included, so + * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) + */ + JDIMENSION downsampled_width; /* actual width in samples */ + JDIMENSION downsampled_height; /* actual height in samples */ + /* This flag is used only for decompression. In cases where some of the + * components will be ignored (eg grayscale output from YCbCr image), + * we can skip most computations for the unused components. + */ + boolean component_needed; /* do we need the value of this component? */ + + /* These values are computed before starting a scan of the component. */ + /* The decompressor output side may not use these variables. */ + int MCU_width; /* number of blocks per MCU, horizontally */ + int MCU_height; /* number of blocks per MCU, vertically */ + int MCU_blocks; /* MCU_width * MCU_height */ + int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ + int last_col_width; /* # of non-dummy blocks across in last MCU */ + int last_row_height; /* # of non-dummy blocks down in last MCU */ + + /* Saved quantization table for component; NULL if none yet saved. + * See jdinput.c comments about the need for this information. + * This field is currently used only for decompression. + */ + JQUANT_TBL * quant_table; + + /* Private per-component storage for DCT or IDCT subsystem. */ + void * dct_table; +} jpeg_component_info; + + +/* The script for encoding a multiple-scan file is an array of these: */ + +typedef struct { + int comps_in_scan; /* number of components encoded in this scan */ + int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ + int Ss, Se; /* progressive JPEG spectral selection parms */ + int Ah, Al; /* progressive JPEG successive approx. parms */ +} jpeg_scan_info; + +/* The decompressor can save APPn and COM markers in a list of these: */ + +typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr; + +struct jpeg_marker_struct { + jpeg_saved_marker_ptr next; /* next in list, or NULL */ + UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ + unsigned int original_length; /* # bytes of data in the file */ + unsigned int data_length; /* # bytes of data saved at data[] */ + JOCTET FAR * data; /* the data contained in the marker */ + /* the marker length word is not counted in data_length or original_length */ +}; + +/* Known color spaces. */ + +typedef enum { + JCS_UNKNOWN, /* error/unspecified */ + JCS_GRAYSCALE, /* monochrome */ + JCS_RGB, /* red/green/blue */ + JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ + JCS_CMYK, /* C/M/Y/K */ + JCS_YCCK /* Y/Cb/Cr/K */ +} J_COLOR_SPACE; + +/* DCT/IDCT algorithm options. */ + +typedef enum { + JDCT_ISLOW, /* slow but accurate integer algorithm */ + JDCT_IFAST, /* faster, less accurate integer method */ + JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ +} J_DCT_METHOD; + +#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ +#define JDCT_DEFAULT JDCT_ISLOW +#endif +#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ +#define JDCT_FASTEST JDCT_IFAST +#endif + +/* Dithering options for decompression. */ + +typedef enum { + JDITHER_NONE, /* no dithering */ + JDITHER_ORDERED, /* simple ordered dither */ + JDITHER_FS /* Floyd-Steinberg error diffusion dither */ +} J_DITHER_MODE; + + +/* Common fields between JPEG compression and decompression master structs. */ + +#define jpeg_common_fields \ + struct jpeg_error_mgr * err; /* Error handler module */\ + struct jpeg_memory_mgr * mem; /* Memory manager module */\ + struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ + void * client_data; /* Available for use by application */\ + boolean is_decompressor; /* So common code can tell which is which */\ + int global_state /* For checking call sequence validity */ + +/* Routines that are to be used by both halves of the library are declared + * to receive a pointer to this structure. There are no actual instances of + * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. + */ +struct jpeg_common_struct { + jpeg_common_fields; /* Fields common to both master struct types */ + /* Additional fields follow in an actual jpeg_compress_struct or + * jpeg_decompress_struct. All three structs must agree on these + * initial fields! (This would be a lot cleaner in C++.) + */ +}; + +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +typedef struct jpeg_decompress_struct * j_decompress_ptr; + + +/* Master record for a compression instance */ + +struct jpeg_compress_struct { + jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ + + /* Destination for compressed data */ + struct jpeg_destination_mgr * dest; + + /* Description of source image --- these fields must be filled in by + * outer application before starting compression. in_color_space must + * be correct before you can even call jpeg_set_defaults(). + */ + + JDIMENSION image_width; /* input image width */ + JDIMENSION image_height; /* input image height */ + int input_components; /* # of color components in input image */ + J_COLOR_SPACE in_color_space; /* colorspace of input image */ + + double input_gamma; /* image gamma of input image */ + + /* Compression parameters --- these fields must be set before calling + * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to + * initialize everything to reasonable defaults, then changing anything + * the application specifically wants to change. That way you won't get + * burnt when new parameters are added. Also note that there are several + * helper routines to simplify changing parameters. + */ + + int data_precision; /* bits of precision in image data */ + + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + int num_scans; /* # of entries in scan_info array */ + const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */ + /* The default value of scan_info is NULL, which causes a single-scan + * sequential JPEG file to be emitted. To create a multi-scan file, + * set num_scans and scan_info to point to an array of scan definitions. + */ + + boolean raw_data_in; /* TRUE=caller supplies downsampled data */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + int smoothing_factor; /* 1..100, or 0 for no input smoothing */ + J_DCT_METHOD dct_method; /* DCT algorithm selector */ + + /* The restart interval can be specified in absolute MCUs by setting + * restart_interval, or in MCU rows by setting restart_in_rows + * (in which case the correct restart_interval will be figured + * for each scan). + */ + unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ + int restart_in_rows; /* if > 0, MCU rows per restart interval */ + + /* Parameters controlling emission of special markers. */ + + boolean write_JFIF_header; /* should a JFIF marker be written? */ + UINT8 JFIF_major_version; /* What to write for the JFIF version number */ + UINT8 JFIF_minor_version; + /* These three values are not used by the JPEG code, merely copied */ + /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ + /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ + /* ratio is defined by X_density/Y_density even when density_unit=0. */ + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean write_Adobe_marker; /* should an Adobe marker be written? */ + + /* State variable: index of next scanline to be written to + * jpeg_write_scanlines(). Application may use this to control its + * processing loop, e.g., "while (next_scanline < image_height)". + */ + + JDIMENSION next_scanline; /* 0 .. image_height-1 */ + + /* Remaining fields are known throughout compressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during compression startup + */ + boolean progressive_mode; /* TRUE if scan script uses progressive mode */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ + /* The coefficient controller receives data in units of MCU rows as defined + * for fully interleaved scans (whether the JPEG file is interleaved or not). + * There are v_samp_factor * DCTSIZE sample rows of each component in an + * "iMCU" (interleaved MCU) row. + */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[C_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* + * Links to compression subobjects (methods and private variables of modules) + */ + struct jpeg_comp_master * master; + struct jpeg_c_main_controller * main; + struct jpeg_c_prep_controller * prep; + struct jpeg_c_coef_controller * coef; + struct jpeg_marker_writer * marker; + struct jpeg_color_converter * cconvert; + struct jpeg_downsampler * downsample; + struct jpeg_forward_dct * fdct; + struct jpeg_entropy_encoder * entropy; + jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */ + int script_space_size; +}; + + +/* Master record for a decompression instance */ + +struct jpeg_decompress_struct { + jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ + + /* Source of compressed data */ + struct jpeg_source_mgr * src; + + /* Basic description of image --- filled in by jpeg_read_header(). */ + /* Application may inspect these values to decide how to process image. */ + + JDIMENSION image_width; /* nominal image width (from SOF marker) */ + JDIMENSION image_height; /* nominal image height */ + int num_components; /* # of color components in JPEG image */ + J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ + + /* Decompression processing parameters --- these fields must be set before + * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes + * them to default values. + */ + + J_COLOR_SPACE out_color_space; /* colorspace for output */ + + unsigned int scale_num, scale_denom; /* fraction by which to scale image */ + + double output_gamma; /* image gamma wanted in output */ + + boolean buffered_image; /* TRUE=multiple output passes */ + boolean raw_data_out; /* TRUE=downsampled data wanted */ + + J_DCT_METHOD dct_method; /* IDCT algorithm selector */ + boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ + boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ + + boolean quantize_colors; /* TRUE=colormapped output wanted */ + /* the following are ignored if not quantize_colors: */ + J_DITHER_MODE dither_mode; /* type of color dithering to use */ + boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ + int desired_number_of_colors; /* max # colors to use in created colormap */ + /* these are significant only in buffered-image mode: */ + boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ + boolean enable_external_quant;/* enable future use of external colormap */ + boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ + + /* Description of actual output image that will be returned to application. + * These fields are computed by jpeg_start_decompress(). + * You can also use jpeg_calc_output_dimensions() to determine these values + * in advance of calling jpeg_start_decompress(). + */ + + JDIMENSION output_width; /* scaled image width */ + JDIMENSION output_height; /* scaled image height */ + int out_color_components; /* # of color components in out_color_space */ + int output_components; /* # of color components returned */ + /* output_components is 1 (a colormap index) when quantizing colors; + * otherwise it equals out_color_components. + */ + int rec_outbuf_height; /* min recommended height of scanline buffer */ + /* If the buffer passed to jpeg_read_scanlines() is less than this many rows + * high, space and time will be wasted due to unnecessary data copying. + * Usually rec_outbuf_height will be 1 or 2, at most 4. + */ + + /* When quantizing colors, the output colormap is described by these fields. + * The application can supply a colormap by setting colormap non-NULL before + * calling jpeg_start_decompress; otherwise a colormap is created during + * jpeg_start_decompress or jpeg_start_output. + * The map has out_color_components rows and actual_number_of_colors columns. + */ + int actual_number_of_colors; /* number of entries in use */ + JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ + + /* State variables: these variables indicate the progress of decompression. + * The application may examine these but must not modify them. + */ + + /* Row index of next scanline to be read from jpeg_read_scanlines(). + * Application may use this to control its processing loop, e.g., + * "while (output_scanline < output_height)". + */ + JDIMENSION output_scanline; /* 0 .. output_height-1 */ + + /* Current input scan number and number of iMCU rows completed in scan. + * These indicate the progress of the decompressor input side. + */ + int input_scan_number; /* Number of SOS markers seen so far */ + JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ + + /* The "output scan number" is the notional scan being displayed by the + * output side. The decompressor will not allow output scan/row number + * to get ahead of input scan/row, but it can fall arbitrarily far behind. + */ + int output_scan_number; /* Nominal scan number being displayed */ + JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ + + /* Current progression status. coef_bits[c][i] indicates the precision + * with which component c's DCT coefficient i (in zigzag order) is known. + * It is -1 when no data has yet been received, otherwise it is the point + * transform (shift) value for the most recent scan of the coefficient + * (thus, 0 at completion of the progression). + * This pointer is NULL when reading a non-progressive file. + */ + int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ + + /* Internal JPEG parameters --- the application usually need not look at + * these fields. Note that the decompressor output side may not use + * any parameters that can change between scans. + */ + + /* Quantization and Huffman tables are carried forward across input + * datastreams when processing abbreviated JPEG datastreams. + */ + + JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; + /* ptrs to coefficient quantization tables, or NULL if not defined */ + + JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; + JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; + /* ptrs to Huffman coding tables, or NULL if not defined */ + + /* These parameters are never carried across datastreams, since they + * are given in SOF/SOS markers or defined to be reset by SOI. + */ + + int data_precision; /* bits of precision in image data */ + + jpeg_component_info * comp_info; + /* comp_info[i] describes component that appears i'th in SOF */ + + boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ + boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ + + UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ + UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ + UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ + + unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ + + /* These fields record data obtained from optional markers recognized by + * the JPEG library. + */ + boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ + /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ + UINT8 JFIF_major_version; /* JFIF version number */ + UINT8 JFIF_minor_version; + UINT8 density_unit; /* JFIF code for pixel size units */ + UINT16 X_density; /* Horizontal pixel density */ + UINT16 Y_density; /* Vertical pixel density */ + boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ + UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ + + /* Aside from the specific data retained from APPn markers known to the + * library, the uninterpreted contents of any or all APPn and COM markers + * can be saved in a list for examination by the application. + */ + jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ + + /* Remaining fields are known throughout decompressor, but generally + * should not be touched by a surrounding application. + */ + + /* + * These fields are computed during decompression startup + */ + int max_h_samp_factor; /* largest h_samp_factor */ + int max_v_samp_factor; /* largest v_samp_factor */ + + int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ + + JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ + /* The coefficient controller's input and output progress is measured in + * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows + * in fully interleaved JPEG scans, but are used whether the scan is + * interleaved or not. We define an iMCU row as v_samp_factor DCT block + * rows of each component. Therefore, the IDCT output contains + * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row. + */ + + JSAMPLE * sample_range_limit; /* table for fast range-limiting */ + + /* + * These fields are valid during any one scan. + * They describe the components and MCUs actually appearing in the scan. + * Note that the decompressor output side must not use these fields. + */ + int comps_in_scan; /* # of JPEG components in this scan */ + jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; + /* *cur_comp_info[i] describes component that appears i'th in SOS */ + + JDIMENSION MCUs_per_row; /* # of MCUs across the image */ + JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ + + int blocks_in_MCU; /* # of DCT blocks per MCU */ + int MCU_membership[D_MAX_BLOCKS_IN_MCU]; + /* MCU_membership[i] is index in cur_comp_info of component owning */ + /* i'th block in an MCU */ + + int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ + + /* This field is shared between entropy decoder and marker parser. + * It is either zero or the code of a JPEG marker that has been + * read from the data source, but has not yet been processed. + */ + int unread_marker; + + /* + * Links to decompression subobjects (methods, private variables of modules) + */ + struct jpeg_decomp_master * master; + struct jpeg_d_main_controller * main; + struct jpeg_d_coef_controller * coef; + struct jpeg_d_post_controller * post; + struct jpeg_input_controller * inputctl; + struct jpeg_marker_reader * marker; + struct jpeg_entropy_decoder * entropy; + struct jpeg_inverse_dct * idct; + struct jpeg_upsampler * upsample; + struct jpeg_color_deconverter * cconvert; + struct jpeg_color_quantizer * cquantize; +}; + + +/* "Object" declarations for JPEG modules that may be supplied or called + * directly by the surrounding application. + * As with all objects in the JPEG library, these structs only define the + * publicly visible methods and state variables of a module. Additional + * private fields may exist after the public ones. + */ + + +/* Error handler object */ + +struct jpeg_error_mgr { + /* Error exit handler: does not return to caller */ + JMETHOD(void, error_exit, (j_common_ptr cinfo)); + /* Conditionally emit a trace or warning message */ + JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); + /* Routine that actually outputs a trace or error message */ + JMETHOD(void, output_message, (j_common_ptr cinfo)); + /* Format a message string for the most recent JPEG error or message */ + JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); +#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ + /* Reset error state variables at start of a new image */ + JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); + + /* The message ID code and any parameters are saved here. + * A message can have one string parameter or up to 8 int parameters. + */ + int msg_code; +#define JMSG_STR_PARM_MAX 80 + union { + int i[8]; + char s[JMSG_STR_PARM_MAX]; + } msg_parm; + + /* Standard state variables for error facility */ + + int trace_level; /* max msg_level that will be displayed */ + + /* For recoverable corrupt-data errors, we emit a warning message, + * but keep going unless emit_message chooses to abort. emit_message + * should count warnings in num_warnings. The surrounding application + * can check for bad data by seeing if num_warnings is nonzero at the + * end of processing. + */ + long num_warnings; /* number of corrupt-data warnings */ + + /* These fields point to the table(s) of error message strings. + * An application can change the table pointer to switch to a different + * message list (typically, to change the language in which errors are + * reported). Some applications may wish to add additional error codes + * that will be handled by the JPEG library error mechanism; the second + * table pointer is used for this purpose. + * + * First table includes all errors generated by JPEG library itself. + * Error code 0 is reserved for a "no such error string" message. + */ + const char * const * jpeg_message_table; /* Library errors */ + int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ + /* Second table can be added by application (see cjpeg/djpeg for example). + * It contains strings numbered first_addon_message..last_addon_message. + */ + const char * const * addon_message_table; /* Non-library errors */ + int first_addon_message; /* code for first string in addon table */ + int last_addon_message; /* code for last string in addon table */ +}; + + +/* Progress monitor object */ + +struct jpeg_progress_mgr { + JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); + + long pass_counter; /* work units completed in this pass */ + long pass_limit; /* total number of work units in this pass */ + int completed_passes; /* passes completed so far */ + int total_passes; /* total number of passes expected */ +}; + + +/* Data destination object for compression */ + +struct jpeg_destination_mgr { + JOCTET * next_output_byte; /* => next byte to write in buffer */ + size_t free_in_buffer; /* # of byte spaces remaining in buffer */ + + JMETHOD(void, init_destination, (j_compress_ptr cinfo)); + JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); + JMETHOD(void, term_destination, (j_compress_ptr cinfo)); +}; + + +/* Data source object for decompression */ + +struct jpeg_source_mgr { + const JOCTET * next_input_byte; /* => next byte to read from buffer */ + size_t bytes_in_buffer; /* # of bytes remaining in buffer */ + + JMETHOD(void, init_source, (j_decompress_ptr cinfo)); + JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); + JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); + JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired)); + JMETHOD(void, term_source, (j_decompress_ptr cinfo)); +}; + + +/* Memory manager object. + * Allocates "small" objects (a few K total), "large" objects (tens of K), + * and "really big" objects (virtual arrays with backing store if needed). + * The memory manager does not allow individual objects to be freed; rather, + * each created object is assigned to a pool, and whole pools can be freed + * at once. This is faster and more convenient than remembering exactly what + * to free, especially where malloc()/free() are not too speedy. + * NB: alloc routines never return NULL. They exit to error_exit if not + * successful. + */ + +#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ +#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ +#define JPOOL_NUMPOOLS 2 + +typedef struct jvirt_sarray_control * jvirt_sarray_ptr; +typedef struct jvirt_barray_control * jvirt_barray_ptr; + + +struct jpeg_memory_mgr { + /* Method pointers */ + JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, + size_t sizeofobject)); + JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, + JDIMENSION samplesperrow, + JDIMENSION numrows)); + JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, + JDIMENSION blocksperrow, + JDIMENSION numrows)); + JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION samplesperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, + int pool_id, + boolean pre_zero, + JDIMENSION blocksperrow, + JDIMENSION numrows, + JDIMENSION maxaccess)); + JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); + JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, + jvirt_sarray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, + jvirt_barray_ptr ptr, + JDIMENSION start_row, + JDIMENSION num_rows, + boolean writable)); + JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); + JMETHOD(void, self_destruct, (j_common_ptr cinfo)); + + /* Limit on memory allocation for this JPEG object. (Note that this is + * merely advisory, not a guaranteed maximum; it only affects the space + * used for virtual-array buffers.) May be changed by outer application + * after creating the JPEG object. + */ + long max_memory_to_use; + + /* Maximum allocation request accepted by alloc_large. */ + long max_alloc_chunk; +}; + + +/* Routine signature for application-supplied marker processing methods. + * Need not pass marker code since it is stored in cinfo->unread_marker. + */ +typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); + + +/* Declarations for routines called by application. + * The JPP macro hides prototype parameters from compilers that can't cope. + * Note JPP requires double parentheses. + */ + +#ifdef HAVE_PROTOTYPES +#define JPP(arglist) arglist +#else +#define JPP(arglist) () +#endif + + +/* Short forms of external names for systems with brain-damaged linkers. + * We shorten external names to be unique in the first six letters, which + * is good enough for all known systems. + * (If your compiler itself needs names to be unique in less than 15 + * characters, you are out of luck. Get a better compiler.) + */ + +#ifdef NEED_SHORT_EXTERNAL_NAMES +#define jpeg_std_error jStdError +#define jpeg_CreateCompress jCreaCompress +#define jpeg_CreateDecompress jCreaDecompress +#define jpeg_destroy_compress jDestCompress +#define jpeg_destroy_decompress jDestDecompress +#define jpeg_stdio_dest jStdDest +#define jpeg_stdio_src jStdSrc +#define jpeg_set_defaults jSetDefaults +#define jpeg_set_colorspace jSetColorspace +#define jpeg_default_colorspace jDefColorspace +#define jpeg_set_quality jSetQuality +#define jpeg_set_linear_quality jSetLQuality +#define jpeg_add_quant_table jAddQuantTable +#define jpeg_quality_scaling jQualityScaling +#define jpeg_simple_progression jSimProgress +#define jpeg_suppress_tables jSuppressTables +#define jpeg_alloc_quant_table jAlcQTable +#define jpeg_alloc_huff_table jAlcHTable +#define jpeg_start_compress jStrtCompress +#define jpeg_write_scanlines jWrtScanlines +#define jpeg_finish_compress jFinCompress +#define jpeg_write_raw_data jWrtRawData +#define jpeg_write_marker jWrtMarker +#define jpeg_write_m_header jWrtMHeader +#define jpeg_write_m_byte jWrtMByte +#define jpeg_write_tables jWrtTables +#define jpeg_read_header jReadHeader +#define jpeg_start_decompress jStrtDecompress +#define jpeg_read_scanlines jReadScanlines +#define jpeg_finish_decompress jFinDecompress +#define jpeg_read_raw_data jReadRawData +#define jpeg_has_multiple_scans jHasMultScn +#define jpeg_start_output jStrtOutput +#define jpeg_finish_output jFinOutput +#define jpeg_input_complete jInComplete +#define jpeg_new_colormap jNewCMap +#define jpeg_consume_input jConsumeInput +#define jpeg_calc_output_dimensions jCalcDimensions +#define jpeg_save_markers jSaveMarkers +#define jpeg_set_marker_processor jSetMarker +#define jpeg_read_coefficients jReadCoefs +#define jpeg_write_coefficients jWrtCoefs +#define jpeg_copy_critical_parameters jCopyCrit +#define jpeg_abort_compress jAbrtCompress +#define jpeg_abort_decompress jAbrtDecompress +#define jpeg_abort jAbort +#define jpeg_destroy jDestroy +#define jpeg_resync_to_restart jResyncRestart +#endif /* NEED_SHORT_EXTERNAL_NAMES */ + + +/* Default error-management setup */ +EXTERN(struct jpeg_error_mgr *) jpeg_std_error + JPP((struct jpeg_error_mgr * err)); + +/* Initialization of JPEG compression objects. + * jpeg_create_compress() and jpeg_create_decompress() are the exported + * names that applications should call. These expand to calls on + * jpeg_CreateCompress and jpeg_CreateDecompress with additional information + * passed for version mismatch checking. + * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. + */ +#define jpeg_create_compress(cinfo) \ + jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_compress_struct)) +#define jpeg_create_decompress(cinfo) \ + jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ + (size_t) sizeof(struct jpeg_decompress_struct)) +EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, + int version, size_t structsize)); +EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, + int version, size_t structsize)); +/* Destruction of JPEG compression objects */ +EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); + +/* Standard data source and destination managers: stdio streams. */ +/* Caller is responsible for opening the file before and closing after. */ +EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); +EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); +EXTERN(void) jpeg_memory_src JPP((j_decompress_ptr cinfo, const JOCTET *buffer, size_t bufsize)); + +/* Default parameter setup for compression */ +EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo)); +/* Compression parameter setup aids */ +EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo, + J_COLOR_SPACE colorspace)); +EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, + boolean force_baseline)); +EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo, + int scale_factor, + boolean force_baseline)); +EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, + const unsigned int *basic_table, + int scale_factor, + boolean force_baseline)); +EXTERN(int) jpeg_quality_scaling JPP((int quality)); +EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo, + boolean suppress)); +EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); +EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); + +/* Main entry points for compression */ +EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo, + boolean write_all_tables)); +EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION num_lines)); +EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo)); + +/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION num_lines)); + +/* Write a special marker. See libjpeg.doc concerning safe usage. */ +EXTERN(void) jpeg_write_marker + JPP((j_compress_ptr cinfo, int marker, + const JOCTET * dataptr, unsigned int datalen)); +/* Same, but piecemeal. */ +EXTERN(void) jpeg_write_m_header + JPP((j_compress_ptr cinfo, int marker, unsigned int datalen)); +EXTERN(void) jpeg_write_m_byte + JPP((j_compress_ptr cinfo, int val)); + +/* Alternate compression function: just write an abbreviated table file */ +EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo)); + +/* Decompression startup: read start of JPEG datastream to see what's there */ +EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo, + boolean require_image)); +/* Return value is one of: */ +#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ +#define JPEG_HEADER_OK 1 /* Found valid image datastream */ +#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ +/* If you pass require_image = TRUE (normal case), you need not check for + * a TABLES_ONLY return code; an abbreviated file will cause an error exit. + * JPEG_SUSPENDED is only possible if you use a data source module that can + * give a suspension return (the stdio source module doesn't). + */ + +/* Main entry points for decompression */ +EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo)); +EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo, + JSAMPARRAY scanlines, + JDIMENSION max_lines)); +EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); + +/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ +EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo, + JSAMPIMAGE data, + JDIMENSION max_lines)); + +/* Additional entry points for buffered-image mode. */ +EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo, + int scan_number)); +EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo)); +EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo)); +EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo)); +/* Return value is one of: */ +/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ +#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ +#define JPEG_REACHED_EOI 2 /* Reached end of image */ +#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ +#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ + +/* Precalculate output dimensions for current decompression parameters. */ +EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); + +/* Control saving of COM and APPn markers into marker_list. */ +EXTERN(void) jpeg_save_markers + JPP((j_decompress_ptr cinfo, int marker_code, + unsigned int length_limit)); + +/* Install a special processing method for COM or APPn markers. */ +EXTERN(void) jpeg_set_marker_processor + JPP((j_decompress_ptr cinfo, int marker_code, + jpeg_marker_parser_method routine)); + +/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ +EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo)); +EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo, + jvirt_barray_ptr * coef_arrays)); +EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo, + j_compress_ptr dstinfo)); + +/* If you choose to abort compression or decompression before completing + * jpeg_finish_(de)compress, then you need to clean up to release memory, + * temporary files, etc. You can just call jpeg_destroy_(de)compress + * if you're done with the JPEG object, but if you want to clean it up and + * reuse it, call this: + */ +EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo)); +EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); + +/* Generic versions of jpeg_abort and jpeg_destroy that work on either + * flavor of JPEG object. These may be more convenient in some places. + */ +EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo)); +EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo)); + +/* Default restart-marker-resync procedure for use by data source modules */ +EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo, + int desired)); + + +/* These marker codes are exported since applications and data source modules + * are likely to want to use them. + */ + +#define JPEG_RST0 0xD0 /* RST0 marker code */ +#define JPEG_EOI 0xD9 /* EOI marker code */ +#define JPEG_APP0 0xE0 /* APP0 marker code */ +#define JPEG_COM 0xFE /* COM marker code */ + + +/* If we have a brain-damaged compiler that emits warnings (or worse, errors) + * for structure definitions that are never filled in, keep it quiet by + * supplying dummy definitions for the various substructures. + */ + +#ifdef INCOMPLETE_TYPES_BROKEN +#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ +struct jvirt_sarray_control { long dummy; }; +struct jvirt_barray_control { long dummy; }; +struct jpeg_comp_master { long dummy; }; +struct jpeg_c_main_controller { long dummy; }; +struct jpeg_c_prep_controller { long dummy; }; +struct jpeg_c_coef_controller { long dummy; }; +struct jpeg_marker_writer { long dummy; }; +struct jpeg_color_converter { long dummy; }; +struct jpeg_downsampler { long dummy; }; +struct jpeg_forward_dct { long dummy; }; +struct jpeg_entropy_encoder { long dummy; }; +struct jpeg_decomp_master { long dummy; }; +struct jpeg_d_main_controller { long dummy; }; +struct jpeg_d_coef_controller { long dummy; }; +struct jpeg_d_post_controller { long dummy; }; +struct jpeg_input_controller { long dummy; }; +struct jpeg_marker_reader { long dummy; }; +struct jpeg_entropy_decoder { long dummy; }; +struct jpeg_inverse_dct { long dummy; }; +struct jpeg_upsampler { long dummy; }; +struct jpeg_color_deconverter { long dummy; }; +struct jpeg_color_quantizer { long dummy; }; +#endif /* JPEG_INTERNALS */ +#endif /* INCOMPLETE_TYPES_BROKEN */ + + +/* + * The JPEG library modules define JPEG_INTERNALS before including this file. + * The internal structure declarations are read only when that is true. + * Applications using the library should not include jpegint.h, but may wish + * to include jerror.h. + */ + +#ifdef JPEG_INTERNALS +#include "jpegint.h" /* fetch private declarations */ +#include "jerror.h" /* fetch error codes too */ +#endif + +#endif /* JPEGLIB_H */ diff --git a/template/source/libjpeg/jpgogc.h b/template/source/libjpeg/jpgogc.h new file mode 100644 index 0000000..33380eb --- /dev/null +++ b/template/source/libjpeg/jpgogc.h @@ -0,0 +1,29 @@ +/**************************************************************************** +* libjpeg - 6b wrapper +* +* The version of libjpeg used in libOGC has been modified to include a memory +* source data manager (jmemsrc.c). +* +* softdev November 2006 +****************************************************************************/ +#ifndef __JPGLIB__ +#define __JPGLIB__ + +#include + +typedef struct { + char *inbuffer; + char *outbuffer; + int inbufferlength; + int outbufferlength; + int width; + int height; + int num_colours; + int dct_method; + int dither_mode; + int greyscale; +} JPEGIMG; + +int JPEG_Decompress(JPEGIMG * jpgimg); + +#endif diff --git a/template/source/main.c b/template/source/main.c index 972c282..c3e8d9b 100644 --- a/template/source/main.c +++ b/template/source/main.c @@ -1,27 +1,23 @@ /*=========================================== GRRLIB (GX version) 3.0.5 alpha Code : NoNameNo + Additional Code : Crayon GX hints : RedShade Template Code (Minimum Requirement) ============================================*/ -#include +#include "GRRLIB/GRRLIB.h" + #include -#include -#include -#include -#include -#include + #include #include - -#include "GRRLIB/GRRLIB.h" - #include "gfx/BMfont1.h" #include "gfx/BMfont2.h" #include "gfx/BMfont3.h" #include "gfx/BMfont4.h" +#include "gfx/test_jpg.h" Mtx GXmodelView2D; @@ -35,17 +31,18 @@ int main(){ WPAD_Init(); WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR); + GRRLIB_texImg tex_test_jpg=GRRLIB_LoadTextureJPG(test_jpg); - GRRLIB_texImg tex_BMfont1=GRRLIB_LoadTexture(BMfont1); + GRRLIB_texImg tex_BMfont1=GRRLIB_LoadTexturePNG(BMfont1); GRRLIB_InitTileSet(&tex_BMfont1,32,32,32); - GRRLIB_texImg tex_BMfont2=GRRLIB_LoadTexture(BMfont2); + GRRLIB_texImg tex_BMfont2=GRRLIB_LoadTexturePNG(BMfont2); GRRLIB_InitTileSet(&tex_BMfont2,16,16,32); - GRRLIB_texImg tex_BMfont3=GRRLIB_LoadTexture(BMfont3); + GRRLIB_texImg tex_BMfont3=GRRLIB_LoadTexturePNG(BMfont3); GRRLIB_InitTileSet(&tex_BMfont3,32,32,32); - GRRLIB_texImg tex_BMfont4=GRRLIB_LoadTexture(BMfont4); + GRRLIB_texImg tex_BMfont4=GRRLIB_LoadTexturePNG(BMfont4); GRRLIB_InitTileSet(&tex_BMfont4,16,16,32); @@ -59,9 +56,12 @@ int main(){ WPAD_IR(WPAD_CHAN_0, &ir1); GRRLIB_FillScreen(0x000000FF); + + GRRLIB_DrawImg(10, 10, tex_test_jpg, 0, 1, 1, 0xFFFFFFFF); + GRRLIB_Printf(rot, 200, tex_BMfont1, 0xFFFFFFFF, 1, "X VALUE:%d",(int)ir1.sx); GRRLIB_Printf(rot, 250, tex_BMfont4, 0xFFFFFFFF, 1, "X VALUE:%d",(int)ir1.sx); - GRRLIB_Printf(rot, 300, tex_BMfont3, 0xFFFFFFFF, 1 , "X VALUE : 1"); + GRRLIB_Printf(rot, 300, tex_BMfont3, 0xFFFFFFFF, 1 , "X VALUE : %d",tex_test_jpg.w); GRRLIB_Printf(rot, 350, tex_BMfont2, 0xFFFFFFFF, 1 , "X VALUE : 1"); GRRLIB_Render();