From 0db6eed9e093928ea6bb28c3c2f36d25c9b5cd4d Mon Sep 17 00:00:00 2001 From: kamorris Date: Mon, 25 May 2020 15:29:41 -0700 Subject: [PATCH 1/5] add 4bit image support, tools and examples --- Tools/Images/README.txt | 25 + Tools/Images/bmp2array4bit.py | 251 +++ Tools/Images/star.bmp | Bin 0 -> 12986 bytes .../Sprite/Sprite_image_4bit/Sprite_image.ino | 162 ++ .../Sprite_image_4bit/Sprite_image_4bit.ino | 162 ++ .../Sprite/Sprite_image_4bit/sample_images.h | 3 + .../Sprite/Sprite_image_4bit/starImage.cpp | 1444 +++++++++++++++++ 7 files changed, 2047 insertions(+) create mode 100644 Tools/Images/README.txt create mode 100644 Tools/Images/bmp2array4bit.py create mode 100644 Tools/Images/star.bmp create mode 100644 examples/Sprite/Sprite_image_4bit/Sprite_image.ino create mode 100644 examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino create mode 100644 examples/Sprite/Sprite_image_4bit/sample_images.h create mode 100644 examples/Sprite/Sprite_image_4bit/starImage.cpp diff --git a/Tools/Images/README.txt b/Tools/Images/README.txt new file mode 100644 index 0000000..8ba629c --- /dev/null +++ b/Tools/Images/README.txt @@ -0,0 +1,25 @@ + +bmp2array4bit.py creates C (or C++) code that contains two arrays for adding images to four-bit sprites. See Sprite_image_4bit for an example. + +It is loosely based on Spark Fun's bmp2array script. + +You'll need python 3.6 (the original use Python 2.7) + +usage: python bmp2array4bit.py [-v] star.bmp [-o myfile.c] + +Create the bmp file in Gimp from any image by: + +. Remove the alpha channel (if it has one) + Layer -> Transparency -> Remove Alpha Channel +. Set the mode to indexed. + Image -> Mode -> Indexed... +. Select Generate optimum palette with 16 colors (max) +. Export the file with a .bmp extension. Do NOT select options: + . Run-Length Encoded + . Compatibility Options: "Do not write color space information" + . There are no Advanced Options available with these settings + +I don't have photoshop so cannot help you with that. + +The first array produced is the palette for the image. +The second is the image itself. \ No newline at end of file diff --git a/Tools/Images/bmp2array4bit.py b/Tools/Images/bmp2array4bit.py new file mode 100644 index 0000000..3b6d850 --- /dev/null +++ b/Tools/Images/bmp2array4bit.py @@ -0,0 +1,251 @@ +''' + + This script takes in a bitmap and outputs a text file that is a + byte array used in Arduino files. + + It is loosely based on Spark Fun's bmp2array script. + + You'll need python 3.6 (the original use Python 2.7) + + usage: python fourbitbmp2array.py [-v] star.bmp [-o myfile.c] + + Create the bmp file in Gimp by : + + . Remove the alpha channel (if it has one) Layer -> Transparency -> Remove Alpha Channel + . Set the mode to indexed. Image -> Mode -> Indexed... + . Select Generate optimum palette with 16 colors (max) + . Export the file with a .bmp extension. Options are: + . Run-Length Encoded: not selected + . Compatibility Options: "Do not write color space information" not selected + . There are no Advanced Options available with these settings + + + + +''' + +import sys +import struct +import math +import argparse +import os + +debug = None + +def debugOut(s): + if debug: + print(s) + +# look at arguments +parser = argparse.ArgumentParser(description="Convert bmp file to C array") +parser.add_argument("-v", "--verbose", help="debug output", action="store_true") +parser.add_argument("input", help="input file name") +parser.add_argument("-o", "--output", help="output file name") +args = parser.parse_args() + +if not os.path.exists(args.input): + parser.print_help() + print("The input file {} does not exist".format(args.input)) + sys.exit(1) + +if args.output == None: + output = os.path.basename(args.input).replace(".bmp", ".c") +else: + output = args.output + +debug = args.verbose + +try: + #Open our input file which is defined by the first commandline argument + #then dump it into a list of bytes + infile = open(args.input,"rb") #b is for binary + contents = bytearray(infile.read()) + infile.close() +except: + print("could not read input file {}".format(args.input)) + sys.exit(1) + +# first two bytes should be "BM" +upto = 2 +#Get the size of this image +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +fileSize = struct.unpack("I", bytearray(data)) + +upto += 4 +# four bytes are reserved + +upto += 4 + +debugOut("Size of file: {}".format(fileSize[0])) + +#Get the header offset amount +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +offset = struct.unpack("I", bytearray(data)) + +debugOut("Offset: {}".format(offset[0])) +upto += 4 + +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +headersize = struct.unpack("I", bytearray(data)) +headerLength = headersize[0] +startOfDefinitions = headerLength + upto +debugOut("header size: {}, up to {}, startOfDefinitions {}".format(headersize[0], upto, startOfDefinitions)) +upto += 4 + +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("width: {}".format(t[0])) +width = t[0] + +upto += 4 +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("height: {}".format(t[0])) +height = t[0] + +# 26 +upto += 4 + +data = struct.pack("BB", contents[upto], contents[upto+1]) +t = struct.unpack("H", bytearray(data)) +debugOut("planes: {}".format(t[0])) + +upto = upto + 2 +data = struct.pack("BB", contents[upto], contents[upto+1]) +t = struct.unpack("H", bytearray(data)) +debugOut("bits per pixel: {}".format(t[0])) +bitsPerPixel = t[0] + +upto = upto + 2 +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("biCompression: {}".format(t[0])) + +upto = upto + 4 +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("biSizeImage: {}".format(t[0])) + +upto = upto + 4 +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("biXPelsPerMeter: {}".format(t[0])) + +upto = upto + 4 +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("biYPelsPerMeter: {}".format(t[0])) + +upto = upto + 4 +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("biClrUsed: {}".format(t[0])) +colorsUsed = t + +upto = upto + 4 +data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) +t = struct.unpack("I", bytearray(data)) +debugOut("biClrImportant: {}".format(t[0])) + +upto += 4 + +debugOut("Upto: {} Number of colors used: {} definitions start at: {}".format(upto, colorsUsed[0], startOfDefinitions)) + +#Create color definition array and init the array of color values +colorIndex = [] #(colorsUsed[0]) +for i in range(colorsUsed[0]): + colorIndex.append(0) + +#Assign the colors to the array. upto = 54 +# startOfDefinitions = upto +for i in range(colorsUsed[0]): + upto = startOfDefinitions + (i * 4) + blue = contents[upto] + green = contents[upto + 1] + red = contents[upto + 2] + # ignore the alpha channel. + + # data = struct.pack("BBBB", contents[upto], contents[upto+1], contents[upto+2], contents[upto+3]) + # t = struct.unpack("I", bytearray(data)) + # colorIndex[i] = t[0] + + colorIndex[i] = (((red & 0xf8)<<8) + ((green & 0xfc)<<3)+(blue>>3)) + debugOut("color at index {0} is {1:04x}, (r,g,b,a) = ({2:02x}, {3:02x}, {4:02x}, {5:02x})".format(i, colorIndex[i], red, green, blue, contents[upto+3])) + +#debugOut(the color definitions +# for i in range(colorsUsed[0]): +# print hex(colorIndex[i]) + +# perfect, except upside down. + +#Make a string to hold the output of our script +arraySize = (len(contents) - offset[0]) +outputString = "/* This was generated using a script based on the SparkFun BMPtoArray python script" + '\n' +outputString += " See https://github.com/sparkfun/BMPtoArray for more info */" + '\n\n' +outputString += "static const uint16_t palette[" + str(colorsUsed[0]) + "] = {"; +for i in range(colorsUsed[0]): + # print hexlify(colorIndex[i]) + if i % 4 == 0: + outputString += "\n\t" + outputString += "0x{:04x}, ".format(colorIndex[i]) + +outputString = outputString[:-2] +outputString += "\n};\n\n" +outputString += "// width is " + str(width) + ", height is " + str(height) + "\n" +outputString += "static const uint8_t myGraphic[" + str(arraySize) + "] PROGMEM = {" + '\n' + +if bitsPerPixel != 4: + print("Expected 4 bits per pixel; found {}".format(bitsPerPixel)) + sys.exit(1) + +#Start converting spots to values +#Start at the offset and go to the end of the file +dropLastNumber = True #(width % 4) == 2 or (width % 4) == 1 +paddedWidth = int(math.ceil(bitsPerPixel * width / 32.0) * 4) +debugOut("array range is {} {} len(contents) is {} paddedWidth is {} width is {}".format(offset[0], fileSize[0], len(contents), paddedWidth, width)) + +r = 0 +width = int(width / 2) +#for i in range(offset[0], fileSize[0]): # close but image is upside down. Each row is correct but need to swap columns. +#for i in range(fileSize[0], offset[0], -1): + +for col in range(height-1, -1, -1): + i = 0 + for row in range(width): + colorCode1 = contents[row + col*paddedWidth + offset[0]] + + if r > 0 and r % width == 0: + i = 0 + outputString += '\n\n' + elif (i + 1) % 12 == 0 : + outputString += '\n' + i = 0 + + #debugOut("cell ({0}, {1})".format(row, col) + + r = r + 1 + i = i + 1 + outputString += "0x{:02x}, ".format(colorCode1) + + + +#Once we've reached the end of our input string, pull the last two +#characters off (the last comma and space) since we don't need +#them. Top it off with a closing bracket and a semicolon. +outputString = outputString[:-2] +outputString += "};" + +try: + #Write the output string to our output file + outfile = open(output, "w") + outfile.write(outputString) + outfile.close() +except: + print("could not write output to file {}".format(output)) + sys.exit(1) + +debugOut("{} complete".format(output)) +debugOut("Copy and paste this array into a image.h or other header file") + +if not debug: + print("Completed; the output is in {}".format(output)) diff --git a/Tools/Images/star.bmp b/Tools/Images/star.bmp new file mode 100644 index 0000000000000000000000000000000000000000..21166da425051845d0ce6e6c894b51655639a51e GIT binary patch literal 12986 zcmZ?r-DSi82D=y-7;+dG7#2V=BLfRqoWY2J;W{q_3otM+fUuK$P%%W3c#;WSDI)`e zgtR1snx;B~iJ2*bi<=8WNLUC%N_q-IQE4$lU1L4Nw3*Wx7A;%MuyM;KhLdMbF!h*?@Hgh4DBmX?-`Tdi0c8Rn%0;xdpmjV$wU1tD`7ndYTo4?>V}X=%6| zk6k17~Y4(N(lK%(hwX*j|HT{)D`n3k5& z0n(YK02P5!jNrhlAj`aVkb!9F)(j+;(b1NMZV}Wz9267CeIQ+FX($<06l7d_M@M@a zuEd1hKxVLc9pE5DDj6Vw*8w&UBV@6g1QBIPORMPU=zs(vykuYkxh@SP-kz4008vRC z$p$qKH3;26=7H@Y*E~oNLQ4j4Le2m=59DxC-3QT!6olY}oDLNx-M>(c@E}A49!Mq) zTh_rHmSSmX9UYxBKsup82ua9b--5)+GH)i>z&21UBqIW^6C{k5E^)gIBBKU&-^`gH z2SS1nWGE!?W0CbbzcTJ=y!w61Gxue93=2S zLf`imB0|TVEpE+~ZZisP-Q2(~4r6JX$SR)ll5Y0S@ zfuOj6`jME7B5naJCx~74Os}8VvXHJ96*#%0-AjTP}d7vUO z1j$Eun8Ki<9n=bdmx7zj2IMXXK7(pr zT3QfP7fwn9>^QK0JHdWD12zL<+#WD{7dX4X)WI7!*oGo1{B9&--6;}H_SYQ6EPdB@Q{PlvY-NV=FFMU zFax;^Y8=SqnV$UL8`zQWE$9gAmiS>y$7bi{@o4Eb6`b?lv9S( zVg-dDQu7I<5?u4_MwkaS4H|x6n^u8TficJx;2?xK58*(tJT&CMx10>lSPfC!j@(5wtgexQO28iJ6x0I3CI zNFICl?)^WIaUc?89w^I!r6Fw*aLP_Y@85*M9SEz&AjRDoP{h9f4>Ax$K(ih=l0jyI zoQTDF3=E*o6f~PbqXO)dGvIXh{{R1X@BSm12QFqn=0O_Mpvnn-qygQ5NXET;|Ns9# z5PtU#l&~Q(Ak)D0GSqpXP(#K@4um8Vh&FJtd;cE{K%RzVJ&+v8&j{yXR>r6f1nB_# z6&w>_<3Roe@t|P{X}N(~>!1!9veO`JBnLwB?U^%R$Gv+8@-N6lu>0P<1C=u1d;-eH zpbVFmhIOb5!-1d@0OTO3cfkYu4=MDpJCA_@s{@g|3-K_q&Vx7* z($JU*jbcy;!n_Kip|N`!QUXFF7nk$E4g}Tapb`rjC5Y4lG7gktKq(U?^zd|CnbW{k zCa9PJ<>E7-It@7l-@OCp4^-#jYnQu0+CrU>#`hjb4uOXt$a#0bNg0-N%hK@ot3go= zs+nej+kT+Z`5vnKK#>crKW0Gs?f9Gr4?(B{!KL3jP{=_rxCRC_v7qH1A?GnLKtm8z z@`D>!pgadL3q(Q+tli)y2dLUjBRmXf1_?oM<7GEEKH$LzPJVB|Whtb&QHFOA9g>Sd z4(tFmU}l3W%X9G31?0Ye;P{30K|sYa{?KCpr|ArETM}*_$RHR-GH(XBIfyx>|b>H3+nc05bCpIKzQE>7bS=aw`MXC@>E)asV+8k~`kr1vMo>jg32J?n25d zNP>Yx2vRc~YycVo>-mBTz%ysg+yxb$pe6^%WuTJk%-Or(2!V9s+R&RVXr_VlZv`kd zgGMsI`oRRKScO!RU@j;JLvjeg3=#%zmV=`MRJuU4p8?e);F1r@hm@z_@pC+-DFXuo zsHKXOJD}Pj9)@#Z5d!H|V|Wo+fEAWIAh``>#A#5&?H;&Q0A@nOK%*u^^zRE~p12Pk@>dcno&8Bo^^WC}u% zs0fA?rjXGLm}XGMgJcVs2vP*&8}~%cZBVVNS3$~ENHMT#7gQKL3?y`b86 z_wHTbJ_f|Y;NSzbSwOuykfA%l0oaz7hNp;zN5|^jyH|ngFi-~v+VlW*6Ly05pw`1` zNP`1hq+&L8;VBSa_(Ao7saaqTgG)V_6(I3h;0VEA1cD1cP-_FE0gj;_hE$VqQ4oVb zj$;HzFNS%u!HF1BNP$d2U;;S~9vv_ppavOu6l)JG&qCXqPz8_(##scya~nuGsMiR> zu&N2-U62R}gH*sG7-t=)2Cdsb&H`xyV_4M*j!|?OaFYmU1VeHg*c1c-Df{<8f)B;K zj*d?J5dw}5gh@~qq;N&`E>sFcrQw_zU_vvmy&UR)P-O!4?o4n3E(f&`K}Lab8P2I? zNOXV|b(BL!K+@oC8CZq|b=E*5dT=vw=Qv1i>*y$lj}?N`H>7fhwfR6}D-fIxaVPFZ z2WXP49p*5I9%$_ZE)HS&3nl}i%gaF{8#t!oKngH0#KWu6yo;&~dmRUv@IP#HWCj8KWaNCkC(VQO5QA?szrU@?pcK8WXpTtI`~Fy&Z_K+u>8Xkaij z2x1nf6oW)LD2rfeU$^!IZB}@$jMBsG*qK#gNt_92reN_c;q21 zbkLdu!mV#S#=xZ@r8cOhAaPC_ZUPzul10G5M|?g&GXt3mDHFgo2ZfmfVk#tyfP1?* zTLKW3M3Rs!(m{pH0kII$Y-mRvv4%*IMMAPj8QzvCNd|-KdED&)lFR}rc1ugEpq_WZ zgWVZzBuyZLT!9-iLsrLOsSa@K!7BrvhlEs=c-0XrDF&)&sggM$Hi8DBNL%m+(T9@+ z)$=$d$&e5uIPgH4p{$fwl&BVxwp<8RFE*YT6>1J-b6F{_D3MKLU|>Y$j`BuBfI1-n E0Q09<&;S4c literal 0 HcmV?d00001 diff --git a/examples/Sprite/Sprite_image_4bit/Sprite_image.ino b/examples/Sprite/Sprite_image_4bit/Sprite_image.ino new file mode 100644 index 0000000..e004df4 --- /dev/null +++ b/examples/Sprite/Sprite_image_4bit/Sprite_image.ino @@ -0,0 +1,162 @@ +/* + + Sketch to show how a Sprite can use a four-bit image with + a palette to change the appearance of an image while rendering + it only once. + + Example for library: + https://github.com/Bodmer/TFT_eSPI + + A Sprite is notionally an invisible graphics screen that is + kept in the processors RAM. Graphics can be drawn into the + Sprite just as it can be drawn directly to the screen. Once + the Sprite is completed it can be plotted onto the screen in + any position. If there is sufficient RAM then the Sprite can + be the same size as the screen and used as a frame buffer. + + A 16 bit Sprite occupies (2 * width * height) bytes in RAM. + + On a ESP8266 Sprite sizes up to 126 x 160 can be accomodated, + this size requires 40kBytes of RAM for a 16 bit color depth. + + When 8 bit color depth sprites are created they occupy + (width * height) bytes in RAM, so larger sprites can be + created, or the RAM required is halved. + +*/ + + +// Set delay after plotting the sprite +#define DELAY 30 + +// Width and height of sprite +#define WIDTH 164 +#define HEIGHT 164 + +#include "sample_images.h" + +TFT_eSPI tft = TFT_eSPI(); // Declare object "tft" + +TFT_eSprite spr = TFT_eSprite(&tft); // Declare Sprite object "spr" with pointer to "tft" object + +const int freq = 5000; +int screenBrightnessChannel = 0; +int resolution = 8; + +byte red = 31; // Red is the top 5 bits of a 16 bit colour value +byte green = 0;// Green is the middle 6 bits +byte blue = 0; // Blue is the bottom 5 bits +byte state = 0; + +int rloop = 0; +int incr = 1; + +uint16_t cmap[16]; + +void setup() +{ + pinMode(21, OUTPUT); + ledcSetup(screenBrightnessChannel, freq, resolution); + ledcAttachPin(21, screenBrightnessChannel); + ledcWrite(screenBrightnessChannel, 127); + + Serial.begin(9600); + Serial.println(); + + delay(50); + + // Initialise the TFT registers + tft.init(); + + spr.setColorDepth(4); + + // Create a sprite of defined size + spr.createSprite(WIDTH, HEIGHT); + + // Clear the TFT screen to black + tft.fillScreen(TFT_BLACK); + + // push the image - only need to do this once. + spr.pushImage(2, 2, 160, 160, (uint16_t *)stars); + + for (int i = 0; i < 16; i++) + cmap[i] = rainbow(); +} + +void loop(void) +{ + // create a palette with the defined colors and push it. + spr.createPalette(cmap, 16); + spr.pushSprite(tft.width() / 2 - WIDTH / 2, tft.height() / 2 - HEIGHT / 2); + + // update the colors + for (int i = 0; i < 15; i++) { + cmap[i] = cmap[i + 1]; + } + if (incr == 2) { + (void)rainbow(); // skip alternate steps + } + cmap[15] = rainbow(); + rloop += incr; + if (rloop > 0xc0) { + incr = incr == 2 ? 1 : 2; + Serial.printf("incr %d, rloop %d\r\n", incr, rloop); + rloop = 0; + + } + delay(DELAY); + +} + +// ######################################################################### +// Return a 16 bit rainbow colour +// ######################################################################### +unsigned int rainbow() +{ + switch (state) { + case 0: + green ++; + if (green == 64) { + green = 63; + state = 1; + } + break; + case 1: + red--; + if (red == 255) { + red = 0; + state = 2; + } + break; + case 2: + blue ++; + if (blue == 32) { + blue = 31; + state = 3; + } + break; + case 3: + green --; + if (green == 255) { + green = 0; + state = 4; + } + break; + case 4: + red ++; + if (red == 32) { + red = 31; + state = 5; + } + break; + case 5: + blue --; + if (blue == 255) { + blue = 0; + state = 0; + } + break; + } + return red << 11 | green << 5 | blue; +} + diff --git a/examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino b/examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino new file mode 100644 index 0000000..e004df4 --- /dev/null +++ b/examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino @@ -0,0 +1,162 @@ +/* + + Sketch to show how a Sprite can use a four-bit image with + a palette to change the appearance of an image while rendering + it only once. + + Example for library: + https://github.com/Bodmer/TFT_eSPI + + A Sprite is notionally an invisible graphics screen that is + kept in the processors RAM. Graphics can be drawn into the + Sprite just as it can be drawn directly to the screen. Once + the Sprite is completed it can be plotted onto the screen in + any position. If there is sufficient RAM then the Sprite can + be the same size as the screen and used as a frame buffer. + + A 16 bit Sprite occupies (2 * width * height) bytes in RAM. + + On a ESP8266 Sprite sizes up to 126 x 160 can be accomodated, + this size requires 40kBytes of RAM for a 16 bit color depth. + + When 8 bit color depth sprites are created they occupy + (width * height) bytes in RAM, so larger sprites can be + created, or the RAM required is halved. + +*/ + + +// Set delay after plotting the sprite +#define DELAY 30 + +// Width and height of sprite +#define WIDTH 164 +#define HEIGHT 164 + +#include "sample_images.h" + +TFT_eSPI tft = TFT_eSPI(); // Declare object "tft" + +TFT_eSprite spr = TFT_eSprite(&tft); // Declare Sprite object "spr" with pointer to "tft" object + +const int freq = 5000; +int screenBrightnessChannel = 0; +int resolution = 8; + +byte red = 31; // Red is the top 5 bits of a 16 bit colour value +byte green = 0;// Green is the middle 6 bits +byte blue = 0; // Blue is the bottom 5 bits +byte state = 0; + +int rloop = 0; +int incr = 1; + +uint16_t cmap[16]; + +void setup() +{ + pinMode(21, OUTPUT); + ledcSetup(screenBrightnessChannel, freq, resolution); + ledcAttachPin(21, screenBrightnessChannel); + ledcWrite(screenBrightnessChannel, 127); + + Serial.begin(9600); + Serial.println(); + + delay(50); + + // Initialise the TFT registers + tft.init(); + + spr.setColorDepth(4); + + // Create a sprite of defined size + spr.createSprite(WIDTH, HEIGHT); + + // Clear the TFT screen to black + tft.fillScreen(TFT_BLACK); + + // push the image - only need to do this once. + spr.pushImage(2, 2, 160, 160, (uint16_t *)stars); + + for (int i = 0; i < 16; i++) + cmap[i] = rainbow(); +} + +void loop(void) +{ + // create a palette with the defined colors and push it. + spr.createPalette(cmap, 16); + spr.pushSprite(tft.width() / 2 - WIDTH / 2, tft.height() / 2 - HEIGHT / 2); + + // update the colors + for (int i = 0; i < 15; i++) { + cmap[i] = cmap[i + 1]; + } + if (incr == 2) { + (void)rainbow(); // skip alternate steps + } + cmap[15] = rainbow(); + rloop += incr; + if (rloop > 0xc0) { + incr = incr == 2 ? 1 : 2; + Serial.printf("incr %d, rloop %d\r\n", incr, rloop); + rloop = 0; + + } + delay(DELAY); + +} + +// ######################################################################### +// Return a 16 bit rainbow colour +// ######################################################################### +unsigned int rainbow() +{ + switch (state) { + case 0: + green ++; + if (green == 64) { + green = 63; + state = 1; + } + break; + case 1: + red--; + if (red == 255) { + red = 0; + state = 2; + } + break; + case 2: + blue ++; + if (blue == 32) { + blue = 31; + state = 3; + } + break; + case 3: + green --; + if (green == 255) { + green = 0; + state = 4; + } + break; + case 4: + red ++; + if (red == 32) { + red = 31; + state = 5; + } + break; + case 5: + blue --; + if (blue == 255) { + blue = 0; + state = 0; + } + break; + } + return red << 11 | green << 5 | blue; +} + diff --git a/examples/Sprite/Sprite_image_4bit/sample_images.h b/examples/Sprite/Sprite_image_4bit/sample_images.h new file mode 100644 index 0000000..3c56f1d --- /dev/null +++ b/examples/Sprite/Sprite_image_4bit/sample_images.h @@ -0,0 +1,3 @@ +#include // Include the graphics library (this includes the sprite functions) + +extern const uint8_t stars[12800] PROGMEM ; \ No newline at end of file diff --git a/examples/Sprite/Sprite_image_4bit/starImage.cpp b/examples/Sprite/Sprite_image_4bit/starImage.cpp new file mode 100644 index 0000000..531cdeb --- /dev/null +++ b/examples/Sprite/Sprite_image_4bit/starImage.cpp @@ -0,0 +1,1444 @@ +#include "sample_images.h" + + +// width is 160, height is 160 +const uint8_t stars[12800] PROGMEM = { +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x31, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x32, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x33, 0x33, 0x11, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x33, 0x21, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x34, 0x33, 0x31, 0x11, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x43, 0x33, 0x11, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x12, 0x33, 0x44, 0x44, 0x33, 0x21, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x11, 0x23, 0x33, 0x44, 0x44, 0x33, 0x31, 0x11, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x44, 0x43, 0x32, 0x11, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x12, 0x33, 0x44, 0x46, 0x54, 0x43, 0x33, 0x21, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x56, 0x64, 0x44, 0x33, 0x31, +0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x23, 0x34, 0x44, 0x66, 0x66, 0x44, 0x43, 0x32, +0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x12, 0x33, 0x34, 0x45, 0x66, 0x66, 0x54, 0x43, 0x33, +0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x13, 0x33, 0x44, 0x46, 0x66, 0x66, 0x64, 0x44, 0x33, +0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x34, 0x44, 0x66, 0x67, 0x76, 0x65, 0x44, 0x33, +0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x11, 0x33, 0x34, 0x45, 0x66, 0x78, 0x86, 0x66, 0x44, 0x43, +0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x46, 0x66, 0x88, 0x87, 0x66, 0x64, 0x44, +0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x23, 0x33, 0x44, 0x56, 0x67, 0x88, 0x88, 0x76, 0x65, 0x44, +0x33, 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x33, 0x34, 0x44, 0x66, 0x68, 0x88, 0x88, 0x86, 0x66, 0x44, +0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x12, 0x33, 0x44, 0x46, 0x66, 0x78, 0x89, 0x98, 0x87, 0x66, 0x54, +0x43, 0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, +0x13, 0x33, 0x44, 0x56, 0x67, 0x88, 0x89, 0x98, 0x88, 0x66, 0x65, +0x44, 0x33, 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, +0x23, 0x34, 0x44, 0x66, 0x68, 0x88, 0x99, 0x99, 0x88, 0x86, 0x66, +0x44, 0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x12, +0x33, 0x34, 0x45, 0x66, 0x78, 0x89, 0x99, 0x99, 0x88, 0x87, 0x66, +0x54, 0x43, 0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, +0x33, 0x44, 0x46, 0x66, 0x88, 0x89, 0x9a, 0x99, 0x98, 0x88, 0x66, +0x64, 0x44, 0x33, 0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x23, +0x34, 0x44, 0x66, 0x67, 0x88, 0x99, 0x9b, 0xa9, 0x99, 0x88, 0x76, +0x65, 0x44, 0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, +0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x33, +0x34, 0x45, 0x66, 0x78, 0x88, 0x99, 0xab, 0xba, 0x99, 0x88, 0x86, +0x66, 0x54, 0x43, 0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, +0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x33, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x33, +0x44, 0x46, 0x66, 0x88, 0x89, 0x99, 0xbb, 0xbb, 0x99, 0x98, 0x88, +0x66, 0x64, 0x44, 0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x22, +0x23, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x22, 0x22, 0x11, 0x11, 0x11, +0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x11, 0x23, 0x33, +0x44, 0x56, 0x67, 0x88, 0x99, 0x9a, 0xbb, 0xbb, 0xa9, 0x99, 0x88, +0x76, 0x65, 0x44, 0x33, 0x31, 0x11, 0x00, 0x00, 0x00, 0x11, 0x11, +0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x22, 0x22, 0x33, 0x33, 0x33, +0x33, 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x22, +0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x33, 0x34, +0x44, 0x66, 0x68, 0x88, 0x99, 0xab, 0xbb, 0xbb, 0xb9, 0x99, 0x88, +0x86, 0x66, 0x44, 0x43, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, +0x11, 0x11, 0x22, 0x22, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, +0x33, 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, +0x33, 0x33, 0x33, 0x22, 0x22, 0x11, 0x11, 0x11, 0x12, 0x33, 0x44, +0x46, 0x66, 0x78, 0x89, 0x99, 0xbb, 0xbc, 0xbb, 0xba, 0x99, 0x98, +0x87, 0x66, 0x54, 0x44, 0x33, 0x21, 0x11, 0x11, 0x11, 0x22, 0x22, +0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, +0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, +0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x22, 0x23, 0x33, 0x44, +0x56, 0x67, 0x88, 0x89, 0x9a, 0xbb, 0xbc, 0xcb, 0xbb, 0xa9, 0x98, +0x88, 0x66, 0x65, 0x44, 0x33, 0x32, 0x22, 0x33, 0x33, 0x33, 0x33, +0x33, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, +0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x11, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, +0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, +0x66, 0x68, 0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, 0xbb, 0xb9, 0x99, +0x88, 0x86, 0x66, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, +0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x55, 0x44, 0x43, +0x33, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x34, 0x44, 0x66, 0x66, 0x65, 0x55, 0x54, 0x44, +0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x44, 0x45, +0x66, 0x78, 0x89, 0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xbb, 0xba, 0x99, +0x98, 0x87, 0x66, 0x54, 0x43, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, +0x44, 0x44, 0x44, 0x44, 0x45, 0x55, 0x56, 0x66, 0x65, 0x44, 0x43, +0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x33, 0x44, 0x56, 0x66, 0x66, 0x66, 0x66, 0x66, +0x55, 0x55, 0x54, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x56, +0x66, 0x88, 0x89, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0x99, +0x98, 0x88, 0x66, 0x64, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, +0x45, 0x55, 0x56, 0x66, 0x66, 0x66, 0x66, 0x66, 0x65, 0x44, 0x33, +0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x13, 0x33, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, +0x66, 0x66, 0x66, 0x66, 0x55, 0x55, 0x44, 0x44, 0x44, 0x44, 0x66, +0x68, 0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xb9, +0x99, 0x88, 0x76, 0x66, 0x44, 0x44, 0x44, 0x45, 0x55, 0x56, 0x66, +0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x67, 0x66, 0x64, 0x44, 0x33, +0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x12, 0x33, 0x44, 0x46, 0x66, 0x88, 0x88, 0x77, 0x77, +0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x55, 0x55, 0x66, +0x78, 0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, +0x99, 0x88, 0x87, 0x66, 0x55, 0x56, 0x66, 0x66, 0x66, 0x66, 0x66, +0x66, 0x66, 0x66, 0x77, 0x77, 0x88, 0x87, 0x66, 0x54, 0x43, 0x33, +0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x11, 0x33, 0x34, 0x45, 0x66, 0x78, 0x88, 0x88, 0x88, +0x88, 0x87, 0x77, 0x77, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, +0x88, 0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, +0x99, 0x98, 0x88, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, +0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x66, 0x54, 0x43, 0x33, +0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x33, 0x34, 0x44, 0x66, 0x68, 0x88, 0x88, 0x88, +0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x76, 0x66, 0x66, 0x67, +0x88, 0x99, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, +0xa9, 0x99, 0x88, 0x76, 0x66, 0x66, 0x67, 0x77, 0x78, 0x88, 0x88, +0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x66, 0x44, 0x43, 0x32, +0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x23, 0x34, 0x44, 0x56, 0x67, 0x88, 0x99, 0x99, +0x99, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x78, +0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xcd, 0xdc, 0xcc, 0xcc, 0xbb, +0xba, 0x99, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, +0x88, 0x89, 0x99, 0x99, 0x99, 0x88, 0x76, 0x65, 0x44, 0x33, 0x31, +0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x56, 0x67, 0x88, 0x89, 0x99, +0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, +0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, 0xcd, 0xdc, 0xcc, 0xcc, 0xbb, +0xbb, 0x99, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, +0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x66, 0x64, 0x44, 0x33, 0x31, +0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x12, 0x33, 0x44, 0x46, 0x66, 0x88, 0x89, 0x99, +0xa9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, +0x99, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, +0xbb, 0xa9, 0x98, 0x88, 0x89, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, +0x99, 0x99, 0xaa, 0x99, 0x98, 0x87, 0x66, 0x64, 0x44, 0x33, 0x21, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x12, 0x33, 0x34, 0x45, 0x66, 0x78, 0x89, 0x99, +0xab, 0xbb, 0xba, 0xaa, 0xa9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, +0x99, 0x9b, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, +0xbb, 0xb9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, +0xab, 0xbb, 0xba, 0x99, 0x98, 0x87, 0x66, 0x54, 0x43, 0x33, 0x11, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x66, 0x68, 0x88, 0x99, +0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xaa, 0xa9, 0x99, 0x99, +0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xdd, 0xdc, 0xcc, 0xcc, +0xbb, 0xba, 0x99, 0x99, 0x99, 0x9a, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, +0xbb, 0xbb, 0xb9, 0x99, 0x88, 0x86, 0x66, 0x44, 0x43, 0x32, 0x11, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x11, 0x23, 0x34, 0x44, 0x66, 0x68, 0x88, 0x99, +0x9b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, +0xaa, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xcc, 0xcc, +0xcb, 0xbb, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, +0xbb, 0xbb, 0xb9, 0x99, 0x88, 0x76, 0x65, 0x44, 0x43, 0x32, 0x11, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x56, 0x67, 0x88, 0x99, +0x9a, 0xbb, 0xbc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, +0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd, 0xde, 0xed, 0xdd, 0xcc, 0xcc, +0xcc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, +0xcb, 0xbb, 0xa9, 0x98, 0x88, 0x76, 0x65, 0x44, 0x33, 0x31, 0x11, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x46, 0x66, 0x88, 0x89, +0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, +0xbb, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xee, 0xee, 0xdd, 0xdc, 0xcc, +0xcc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcb, 0xbb, 0x99, 0x98, 0x88, 0x66, 0x64, 0x44, 0x33, 0x21, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x12, 0x33, 0x44, 0x46, 0x66, 0x78, 0x89, +0x99, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcc, 0xbc, 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, 0xdd, 0xdc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xbb, 0xba, 0x99, 0x98, 0x87, 0x66, 0x54, 0x43, 0x33, 0x21, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x45, 0x66, 0x78, 0x88, +0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xde, 0xee, 0xee, 0xed, 0xdd, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xbb, 0xba, 0x99, 0x88, 0x86, 0x66, 0x54, 0x43, 0x33, 0x11, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x34, 0x44, 0x66, 0x68, 0x88, +0x99, 0x9b, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, 0xee, 0xee, 0xed, 0xdd, 0xdc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xbb, 0xb9, 0x99, 0x88, 0x86, 0x66, 0x44, 0x43, 0x32, 0x11, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x33, 0x44, 0x56, 0x67, 0x88, +0x99, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xcc, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xcc, 0xcc, 0xcb, +0xbb, 0xa9, 0x99, 0x88, 0x76, 0x65, 0x44, 0x33, 0x31, 0x11, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x56, 0x66, 0x88, +0x89, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, +0xdc, 0xcc, 0xcc, 0xdd, 0xde, 0xee, 0xee, 0xee, 0xee, 0xed, 0xdd, +0xcc, 0xcc, 0xcd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, +0xbb, 0xa9, 0x98, 0x88, 0x66, 0x64, 0x44, 0x33, 0x31, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x33, 0x44, 0x46, 0x66, 0x88, +0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, +0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xee, 0xee, 0xee, 0xee, 0xed, 0xdd, +0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xcc, 0xcc, 0xcb, +0xbb, 0x99, 0x98, 0x87, 0x66, 0x64, 0x44, 0x33, 0x21, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x45, 0x66, 0x78, +0x89, 0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xdd, 0xdd, 0xdd, +0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xdd, +0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xcc, 0xcc, 0xbb, +0xba, 0x99, 0x98, 0x87, 0x66, 0x54, 0x43, 0x33, 0x11, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x66, 0x68, +0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, 0xee, 0xee, +0xee, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xef, 0xfe, 0xee, 0xee, 0xdd, +0xdd, 0xde, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdc, 0xcc, 0xcc, 0xbb, +0xb9, 0x99, 0x88, 0x86, 0x66, 0x44, 0x43, 0x32, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x34, 0x44, 0x66, 0x67, +0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd, 0xde, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xfe, 0xee, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xcc, 0xcc, 0xcc, 0xbb, +0xb9, 0x99, 0x88, 0x76, 0x65, 0x44, 0x33, 0x32, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x56, 0x67, +0x88, 0x99, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xde, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xee, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, +0xa9, 0x98, 0x88, 0x76, 0x65, 0x44, 0x33, 0x31, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x33, 0x44, 0x46, 0x66, +0x88, 0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, 0xff, 0xee, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, +0x99, 0x98, 0x88, 0x66, 0x64, 0x44, 0x33, 0x21, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x33, 0x44, 0x45, 0x66, +0x78, 0x89, 0x99, 0xbb, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xff, 0xff, 0xfe, 0xee, 0xee, +0xee, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xbb, 0xba, +0x99, 0x98, 0x87, 0x66, 0x54, 0x43, 0x33, 0x21, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x45, 0x66, +0x78, 0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xee, 0xee, +0xee, 0xff, 0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xee, 0xee, +0xee, 0xff, 0xee, 0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xbb, 0xba, +0x99, 0x88, 0x86, 0x66, 0x44, 0x43, 0x33, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x34, 0x44, 0x66, +0x68, 0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, 0xee, +0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xfe, 0xee, 0xee, 0xed, 0xdd, 0xcc, 0xcc, 0xcc, 0xbb, 0xb9, +0x99, 0x88, 0x86, 0x66, 0x44, 0x43, 0x32, 0x11, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x33, 0x44, 0x56, +0x67, 0x88, 0x99, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xde, 0xee, +0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xfe, 0xee, 0xee, 0xed, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, 0xa9, +0x99, 0x88, 0x76, 0x65, 0x44, 0x33, 0x32, 0x11, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x56, +0x66, 0x88, 0x89, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, 0xdd, 0xde, 0xee, +0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xfe, 0xee, 0xee, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, 0xa9, +0x98, 0x88, 0x66, 0x65, 0x44, 0x43, 0x33, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x44, 0x66, +0x67, 0x88, 0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, 0xcd, 0xdd, 0xee, +0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xee, 0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xcb, 0xbb, 0x99, +0x98, 0x88, 0x76, 0x66, 0x44, 0x44, 0x33, 0x31, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x46, 0x66, +0x78, 0x88, 0x99, 0x9a, 0xbb, 0xbb, 0xcc, 0xcc, 0xcd, 0xdd, 0xee, +0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xee, 0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xbb, 0xbb, 0xa9, +0x99, 0x88, 0x87, 0x66, 0x65, 0x44, 0x43, 0x33, 0x11, 0x10, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x44, 0x66, 0x67, +0x88, 0x89, 0x99, 0xab, 0xbb, 0xbc, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, +0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xee, 0xee, 0xed, 0xdd, 0xdc, 0xcc, 0xcc, 0xcb, 0xbb, 0xba, +0x99, 0x98, 0x88, 0x76, 0x66, 0x54, 0x44, 0x33, 0x31, 0x11, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x56, 0x66, 0x78, +0x88, 0x99, 0x9a, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xee, +0xee, 0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xfe, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, 0xbb, 0xbb, +0xa9, 0x99, 0x88, 0x87, 0x66, 0x65, 0x44, 0x43, 0x33, 0x11, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x45, 0x66, 0x67, 0x88, +0x89, 0x99, 0xab, 0xbb, 0xbc, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, 0xee, +0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdc, 0xcc, 0xcc, 0xcb, 0xbb, +0xba, 0x99, 0x98, 0x88, 0x76, 0x66, 0x54, 0x44, 0x33, 0x32, 0x11, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x56, 0x66, 0x78, 0x88, +0x99, 0x9a, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, +0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xfe, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, 0xbb, +0xbb, 0xa9, 0x99, 0x88, 0x87, 0x66, 0x65, 0x44, 0x43, 0x33, 0x21, +0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x13, 0x33, 0x44, 0x45, 0x66, 0x67, 0x88, 0x89, +0x99, 0xab, 0xbb, 0xbc, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, 0xee, 0xee, +0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, +0xbb, 0xba, 0x99, 0x98, 0x88, 0x76, 0x66, 0x54, 0x44, 0x33, 0x32, +0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x11, 0x33, 0x34, 0x44, 0x56, 0x66, 0x78, 0x88, 0x99, +0x9a, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, 0xee, +0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xfe, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, +0xcb, 0xbb, 0xa9, 0x99, 0x88, 0x87, 0x66, 0x65, 0x44, 0x43, 0x33, +0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x11, 0x13, 0x33, 0x44, 0x45, 0x66, 0x67, 0x88, 0x89, 0x99, +0xab, 0xbb, 0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, 0xee, 0xee, 0xee, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdc, 0xcc, 0xcc, +0xcc, 0xbb, 0xba, 0x99, 0x98, 0x88, 0x76, 0x66, 0x54, 0x44, 0x33, +0x32, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x12, 0x33, 0x34, 0x44, 0x56, 0x66, 0x78, 0x88, 0x99, 0x9a, +0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xcc, 0xcc, +0xcc, 0xcb, 0xbb, 0xa9, 0x99, 0x88, 0x87, 0x66, 0x65, 0x44, 0x43, +0x33, 0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x23, 0x33, 0x44, 0x45, 0x66, 0x67, 0x88, 0x89, 0x99, 0xab, +0xbb, 0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xde, 0xee, 0xee, 0xee, 0xee, +0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xfe, 0xee, 0xee, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdc, 0xcc, +0xcc, 0xcc, 0xbb, 0xba, 0x99, 0x98, 0x88, 0x76, 0x66, 0x54, 0x44, +0x33, 0x32, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, +0x12, 0x33, 0x34, 0x44, 0x56, 0x66, 0x78, 0x88, 0x99, 0x9a, 0xbb, +0xbc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, +0xee, 0xee, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xcc, +0xcc, 0xcc, 0xcb, 0xbb, 0xa9, 0x99, 0x88, 0x87, 0x66, 0x65, 0x44, +0x43, 0x33, 0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, +0x23, 0x33, 0x44, 0x45, 0x66, 0x67, 0x88, 0x89, 0x99, 0xab, 0xbb, +0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xdd, 0xde, 0xee, 0xee, 0xee, 0xee, +0xee, 0xee, 0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, +0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdd, 0xdc, +0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0x99, 0x98, 0x88, 0x86, 0x66, 0x54, +0x44, 0x33, 0x32, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x12, +0x33, 0x34, 0x44, 0x56, 0x66, 0x78, 0x88, 0x99, 0x9a, 0xbb, 0xbc, +0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, +0xee, 0xee, 0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, +0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, +0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xa9, 0x99, 0x88, 0x88, 0x66, 0x65, +0x44, 0x43, 0x33, 0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x23, +0x33, 0x44, 0x45, 0x66, 0x67, 0x88, 0x89, 0x99, 0xab, 0xbb, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xee, +0xee, 0xee, 0xee, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, +0xee, 0xee, 0xee, 0xee, 0xed, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xbb, 0x99, 0x98, 0x88, 0x86, 0x66, +0x54, 0x44, 0x33, 0x32, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x12, 0x33, +0x34, 0x44, 0x56, 0x66, 0x78, 0x88, 0x99, 0x9a, 0xbb, 0xbc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, +0xee, 0xee, 0xee, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, +0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xb9, 0x99, 0x88, 0x88, 0x66, +0x65, 0x44, 0x43, 0x33, 0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x23, 0x33, +0x44, 0x45, 0x66, 0x67, 0x88, 0x89, 0x99, 0xab, 0xbb, 0xbb, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xdd, 0xdd, 0xdd, +0xdd, 0xee, 0xee, 0xef, 0xff, 0xff, 0xee, 0xee, 0xff, 0xff, 0xfe, +0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0x99, 0x99, 0x88, 0x86, +0x66, 0x54, 0x44, 0x33, 0x32, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x12, 0x33, 0x34, +0x44, 0x56, 0x66, 0x88, 0x88, 0x99, 0x9a, 0xbb, 0xbb, 0xbb, 0xbb, +0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, +0xdd, 0xee, 0xee, 0xef, 0xff, 0xee, 0xee, 0xee, 0xee, 0xff, 0xfe, +0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xa9, 0x99, 0x98, 0x88, +0x66, 0x66, 0x44, 0x43, 0x33, 0x21, 0x11, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x23, 0x33, 0x44, +0x45, 0x66, 0x68, 0x88, 0x89, 0x99, 0x99, 0x9a, 0xab, 0xbb, 0xbb, +0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, +0xdd, 0xee, 0xee, 0xef, 0xfe, 0xee, 0xee, 0xee, 0xee, 0xef, 0xfe, +0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcc, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xa9, 0x99, 0x99, 0x99, 0x88, +0x86, 0x66, 0x64, 0x44, 0x33, 0x32, 0x11, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x12, 0x33, 0x34, 0x44, +0x56, 0x66, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xbb, +0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, +0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, +0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, +0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0x99, 0x99, 0x99, 0x99, 0x88, 0x88, +0x88, 0x66, 0x66, 0x44, 0x43, 0x33, 0x21, 0x11, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x23, 0x33, 0x44, 0x45, +0x66, 0x67, 0x88, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0x99, 0x9a, +0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, +0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, +0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xbb, +0xbb, 0xbb, 0xba, 0xa9, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, +0x87, 0x76, 0x66, 0x64, 0x44, 0x33, 0x32, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x12, 0x33, 0x34, 0x44, 0x56, +0x66, 0x66, 0x66, 0x77, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, +0x99, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcd, +0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, +0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, +0xbb, 0xaa, 0x99, 0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88, 0x77, +0x66, 0x66, 0x66, 0x65, 0x44, 0x43, 0x33, 0x21, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x23, 0x33, 0x44, 0x44, 0x45, +0x56, 0x66, 0x66, 0x66, 0x67, 0x78, 0x88, 0x88, 0x88, 0x89, 0x99, +0x99, 0x99, 0x9a, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcd, +0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xed, 0xde, 0xee, 0xee, 0xee, +0xee, 0xee, 0xdd, 0xdc, 0xcc, 0xcc, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, +0xa9, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x87, 0x76, 0x66, +0x66, 0x66, 0x65, 0x44, 0x44, 0x44, 0x33, 0x33, 0x11, 0x10, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x11, 0x12, 0x33, 0x33, 0x44, 0x44, 0x44, +0x44, 0x55, 0x66, 0x66, 0x66, 0x66, 0x77, 0x88, 0x88, 0x88, 0x88, +0x99, 0x99, 0x99, 0x99, 0xaa, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcd, +0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xee, 0xee, 0xee, +0xee, 0xed, 0xdd, 0xdc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0x99, +0x99, 0x99, 0x99, 0x88, 0x88, 0x88, 0x88, 0x77, 0x66, 0x66, 0x66, +0x66, 0x54, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x31, 0x11, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x01, 0x11, 0x23, 0x33, 0x33, 0x33, 0x34, 0x44, +0x44, 0x44, 0x45, 0x56, 0x66, 0x66, 0x66, 0x67, 0x78, 0x88, 0x88, +0x88, 0x89, 0x99, 0x99, 0x99, 0x9a, 0xab, 0xbb, 0xbc, 0xcc, 0xcc, +0xdd, 0xde, 0xee, 0xee, 0xee, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, +0xee, 0xed, 0xdd, 0xdc, 0xcc, 0xcb, 0xbb, 0xba, 0xa9, 0x99, 0x99, +0x99, 0x98, 0x88, 0x88, 0x88, 0x87, 0x76, 0x66, 0x66, 0x66, 0x65, +0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x32, 0x11, 0x10, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x12, 0x33, 0x33, 0x33, 0x33, +0x44, 0x44, 0x44, 0x44, 0x55, 0x66, 0x66, 0x66, 0x66, 0x77, 0x88, +0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x9a, 0xbb, 0xbc, 0xcc, 0xcc, +0xdd, 0xde, 0xee, 0xee, 0xed, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, +0xee, 0xed, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, 0xa9, 0x99, 0x99, 0x99, +0x88, 0x88, 0x88, 0x88, 0x77, 0x66, 0x66, 0x66, 0x66, 0x54, 0x44, +0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x33, +0x33, 0x34, 0x44, 0x44, 0x44, 0x45, 0x56, 0x66, 0x66, 0x66, 0x67, +0x78, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, +0xdd, 0xde, 0xee, 0xed, 0xdd, 0xdd, 0xdc, 0xcd, 0xdd, 0xdd, 0xde, +0xee, 0xed, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, 0x99, 0x99, 0x98, 0x88, +0x88, 0x88, 0x87, 0x76, 0x66, 0x66, 0x66, 0x65, 0x44, 0x44, 0x44, +0x44, 0x43, 0x33, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, 0x12, 0x33, +0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x55, 0x66, 0x66, 0x66, +0x66, 0x77, 0x88, 0x88, 0x88, 0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, +0xdd, 0xde, 0xed, 0xdd, 0xdd, 0xdc, 0xcc, 0xcc, 0xcd, 0xdd, 0xdd, +0xde, 0xed, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, 0x99, 0x98, 0x88, 0x88, +0x88, 0x77, 0x66, 0x66, 0x66, 0x66, 0x54, 0x44, 0x44, 0x44, 0x44, +0x33, 0x33, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, +0x23, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x45, 0x56, 0x66, +0x66, 0x66, 0x67, 0x78, 0x88, 0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, +0xdd, 0xde, 0xdd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, +0xdd, 0xed, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, 0x99, 0x98, 0x88, 0x87, +0x76, 0x66, 0x66, 0x66, 0x65, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, +0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, +0x11, 0x12, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x55, +0x66, 0x66, 0x66, 0x66, 0x78, 0x89, 0x99, 0xbb, 0xbc, 0xcc, 0xcc, +0xdd, 0xdd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, +0xdd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, 0xbb, 0x99, 0x98, 0x87, 0x66, +0x66, 0x66, 0x66, 0x54, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, +0x33, 0x21, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, +0x11, 0x11, 0x11, 0x23, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, +0x44, 0x56, 0x66, 0x66, 0x68, 0x88, 0x99, 0xab, 0xbc, 0xcc, 0xcc, +0xdd, 0xdd, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, +0xdd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, 0xba, 0x99, 0x88, 0x86, 0x66, +0x66, 0x65, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x32, +0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x11, 0x11, 0x11, 0x12, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, +0x44, 0x44, 0x55, 0x66, 0x68, 0x88, 0x99, 0xab, 0xbc, 0xcc, 0xcc, +0xdd, 0xdd, 0xdc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, +0xcd, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, 0xba, 0x99, 0x88, 0x86, 0x66, +0x54, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x21, 0x11, +0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x33, 0x33, 0x34, +0x44, 0x44, 0x44, 0x56, 0x68, 0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, +0xdd, 0xdd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0xbc, 0xcc, 0xcc, 0xcc, +0xcc, 0xdd, 0xdd, 0xcc, 0xcc, 0xcb, 0xba, 0x99, 0x88, 0x86, 0x66, +0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, +0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, 0x12, 0x33, 0x33, 0x33, +0x33, 0x44, 0x44, 0x56, 0x68, 0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, +0xdd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, +0xcc, 0xcc, 0xdd, 0xcc, 0xcc, 0xbb, 0xba, 0x99, 0x88, 0x86, 0x65, +0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, +0x33, 0x33, 0x44, 0x56, 0x67, 0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0x99, 0x88, 0x76, 0x65, +0x44, 0x33, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x11, 0x12, +0x33, 0x33, 0x44, 0x56, 0x67, 0x88, 0x99, 0xab, 0xbb, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0x99, 0x88, 0x76, 0x65, +0x44, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, +0x12, 0x33, 0x44, 0x56, 0x67, 0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, +0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xa9, 0x9a, 0xbb, 0xbb, 0xbc, +0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xb9, 0x99, 0x88, 0x76, 0x65, +0x44, 0x33, 0x21, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, +0x12, 0x33, 0x44, 0x46, 0x67, 0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, +0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xba, 0x99, 0x99, 0xab, 0xbb, 0xbb, +0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xb9, 0x99, 0x88, 0x76, 0x65, +0x44, 0x33, 0x21, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x12, 0x33, 0x44, 0x46, 0x67, 0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, +0xcc, 0xcc, 0xbb, 0xbb, 0xba, 0x99, 0x99, 0x99, 0x99, 0xab, 0xbb, +0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xb9, 0x99, 0x88, 0x76, 0x64, +0x44, 0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x12, 0x33, 0x44, 0x46, 0x66, 0x88, 0x99, 0x9b, 0xbb, 0xcc, 0xcc, +0xcc, 0xbb, 0xbb, 0xbb, 0xa9, 0x99, 0x99, 0x99, 0x99, 0x9a, 0xbb, +0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xbb, 0xb9, 0x99, 0x88, 0x66, 0x64, +0x44, 0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x33, 0x44, 0x46, 0x66, 0x88, 0x89, 0x9a, 0xbb, 0xcc, 0xcc, +0xcb, 0xbb, 0xbb, 0xa9, 0x99, 0x99, 0x88, 0x88, 0x99, 0x99, 0x9a, +0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xbb, 0xb9, 0x99, 0x88, 0x66, 0x64, +0x44, 0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x33, 0x34, 0x46, 0x66, 0x88, 0x89, 0x9a, 0xbb, 0xcc, 0xcb, +0xbb, 0xbb, 0xba, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, +0xab, 0xbb, 0xbb, 0xbc, 0xcc, 0xbb, 0xa9, 0x98, 0x88, 0x66, 0x64, +0x43, 0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x33, 0x34, 0x45, 0x66, 0x88, 0x89, 0x9a, 0xbb, 0xcc, 0xbb, +0xbb, 0xba, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x88, 0x89, 0x99, +0x99, 0xab, 0xbb, 0xbb, 0xcc, 0xbb, 0xa9, 0x98, 0x88, 0x66, 0x64, +0x43, 0x33, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x33, 0x34, 0x45, 0x66, 0x88, 0x89, 0x9a, 0xbb, 0xbb, 0xbb, +0xbb, 0xa9, 0x99, 0x98, 0x88, 0x88, 0x76, 0x67, 0x88, 0x88, 0x89, +0x99, 0x99, 0xbb, 0xbb, 0xbb, 0xbb, 0xa9, 0x98, 0x88, 0x66, 0x54, +0x43, 0x33, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x33, 0x34, 0x45, 0x66, 0x78, 0x89, 0x9a, 0xbb, 0xbb, 0xbb, +0xa9, 0x99, 0x99, 0x88, 0x88, 0x86, 0x66, 0x66, 0x68, 0x88, 0x88, +0x99, 0x99, 0x9a, 0xbb, 0xbb, 0xbb, 0xa9, 0x98, 0x87, 0x66, 0x54, +0x43, 0x33, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x23, 0x34, 0x45, 0x66, 0x78, 0x89, 0x9a, 0xbb, 0xbb, 0xba, +0x99, 0x99, 0x88, 0x88, 0x87, 0x66, 0x66, 0x66, 0x66, 0x78, 0x88, +0x88, 0x99, 0x99, 0x9a, 0xbb, 0xbb, 0xa9, 0x98, 0x87, 0x66, 0x54, +0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x23, 0x34, 0x45, 0x66, 0x78, 0x89, 0x99, 0xbb, 0xba, 0x99, +0x99, 0x98, 0x88, 0x88, 0x66, 0x66, 0x65, 0x56, 0x66, 0x66, 0x78, +0x88, 0x89, 0x99, 0x99, 0xab, 0xbb, 0xa9, 0x98, 0x87, 0x66, 0x54, +0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x23, 0x34, 0x44, 0x66, 0x78, 0x89, 0x99, 0xbb, 0xa9, 0x99, +0x98, 0x88, 0x88, 0x76, 0x66, 0x66, 0x44, 0x44, 0x56, 0x66, 0x67, +0x88, 0x88, 0x89, 0x99, 0x99, 0xab, 0x99, 0x98, 0x87, 0x66, 0x54, +0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x23, 0x34, 0x44, 0x66, 0x78, 0x89, 0x99, 0xa9, 0x99, 0x99, +0x88, 0x88, 0x86, 0x66, 0x66, 0x54, 0x44, 0x44, 0x45, 0x66, 0x66, +0x67, 0x88, 0x88, 0x99, 0x99, 0x9a, 0x99, 0x98, 0x87, 0x66, 0x44, +0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x23, 0x34, 0x44, 0x66, 0x68, 0x89, 0x99, 0x99, 0x99, 0x88, +0x88, 0x87, 0x66, 0x66, 0x64, 0x44, 0x44, 0x44, 0x44, 0x45, 0x66, +0x66, 0x78, 0x88, 0x88, 0x99, 0x99, 0x99, 0x98, 0x87, 0x66, 0x44, +0x43, 0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x13, 0x34, 0x44, 0x66, 0x68, 0x88, 0x99, 0x99, 0x98, 0x88, +0x87, 0x66, 0x66, 0x65, 0x44, 0x44, 0x33, 0x33, 0x44, 0x44, 0x56, +0x66, 0x66, 0x78, 0x88, 0x88, 0x99, 0x99, 0x98, 0x86, 0x66, 0x44, +0x43, 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x13, 0x33, 0x44, 0x66, 0x68, 0x88, 0x99, 0x98, 0x88, 0x88, +0x76, 0x66, 0x65, 0x44, 0x44, 0x43, 0x33, 0x33, 0x34, 0x44, 0x44, +0x56, 0x66, 0x67, 0x88, 0x88, 0x89, 0x99, 0x88, 0x86, 0x66, 0x44, +0x43, 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x13, 0x33, 0x44, 0x66, 0x68, 0x88, 0x99, 0x88, 0x88, 0x76, +0x66, 0x66, 0x54, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, +0x45, 0x66, 0x66, 0x67, 0x88, 0x88, 0x89, 0x88, 0x86, 0x66, 0x44, +0x33, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x13, 0x33, 0x44, 0x56, 0x68, 0x88, 0x88, 0x88, 0x87, 0x66, +0x66, 0x54, 0x44, 0x44, 0x33, 0x33, 0x21, 0x12, 0x33, 0x33, 0x44, +0x44, 0x45, 0x66, 0x66, 0x78, 0x88, 0x88, 0x88, 0x86, 0x65, 0x44, +0x33, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x13, 0x33, 0x44, 0x56, 0x67, 0x88, 0x88, 0x87, 0x66, 0x66, +0x65, 0x44, 0x44, 0x33, 0x33, 0x32, 0x11, 0x11, 0x23, 0x33, 0x33, +0x44, 0x44, 0x46, 0x66, 0x66, 0x78, 0x88, 0x88, 0x86, 0x65, 0x44, +0x33, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x56, 0x67, 0x88, 0x88, 0x76, 0x66, 0x65, +0x44, 0x44, 0x43, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, +0x34, 0x44, 0x44, 0x56, 0x66, 0x66, 0x88, 0x88, 0x76, 0x65, 0x44, +0x33, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x56, 0x67, 0x88, 0x76, 0x66, 0x66, 0x54, +0x44, 0x43, 0x33, 0x33, 0x21, 0x11, 0x10, 0x01, 0x11, 0x12, 0x33, +0x33, 0x34, 0x44, 0x44, 0x66, 0x66, 0x67, 0x88, 0x76, 0x65, 0x44, +0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x56, 0x67, 0x87, 0x66, 0x66, 0x54, 0x44, +0x44, 0x33, 0x33, 0x21, 0x11, 0x11, 0x00, 0x00, 0x11, 0x11, 0x12, +0x33, 0x33, 0x34, 0x44, 0x45, 0x66, 0x66, 0x67, 0x76, 0x65, 0x44, +0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x46, 0x66, 0x66, 0x66, 0x65, 0x44, 0x44, +0x33, 0x33, 0x32, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, +0x13, 0x33, 0x33, 0x44, 0x44, 0x45, 0x66, 0x66, 0x66, 0x65, 0x44, +0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x12, 0x33, 0x44, 0x46, 0x66, 0x66, 0x65, 0x44, 0x44, 0x43, +0x33, 0x32, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, +0x11, 0x23, 0x33, 0x33, 0x44, 0x44, 0x56, 0x66, 0x66, 0x64, 0x44, +0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x11, 0x33, 0x44, 0x46, 0x66, 0x66, 0x44, 0x44, 0x43, 0x33, +0x33, 0x21, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x11, 0x33, 0x33, 0x34, 0x44, 0x44, 0x56, 0x66, 0x64, 0x44, +0x33, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x11, 0x33, 0x34, 0x46, 0x66, 0x54, 0x44, 0x44, 0x33, 0x33, +0x21, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x11, 0x12, 0x33, 0x33, 0x34, 0x44, 0x45, 0x66, 0x64, 0x44, +0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x33, 0x34, 0x46, 0x64, 0x44, 0x44, 0x33, 0x33, 0x32, +0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x11, 0x13, 0x33, 0x33, 0x44, 0x44, 0x45, 0x64, 0x43, +0x33, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x33, 0x34, 0x44, 0x44, 0x44, 0x43, 0x33, 0x32, 0x11, +0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x11, 0x11, 0x23, 0x33, 0x33, 0x44, 0x44, 0x44, 0x43, +0x33, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x21, 0x11, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x11, 0x11, 0x23, 0x33, 0x34, 0x44, 0x44, 0x43, +0x33, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x34, 0x44, 0x43, 0x33, 0x33, 0x21, 0x11, 0x10, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x01, 0x11, 0x12, 0x33, 0x33, 0x34, 0x44, 0x43, +0x33, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x34, 0x44, 0x33, 0x33, 0x31, 0x11, 0x11, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x12, 0x33, 0x33, 0x44, 0x43, +0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x34, 0x33, 0x33, 0x32, 0x11, 0x11, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x23, 0x33, 0x33, 0x43, +0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x33, 0x33, 0x33, 0x11, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x23, 0x33, 0x33, +0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x23, 0x33, 0x33, 0x21, 0x11, 0x10, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x12, 0x33, 0x33, +0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x13, 0x33, 0x31, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x12, 0x33, +0x32, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x13, 0x32, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x13, +0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x11, 0x12, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, +0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, +0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, + +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00}; \ No newline at end of file From 5ffd4feac43c600ab00333b8f67e10bdd6add995 Mon Sep 17 00:00:00 2001 From: kamorris Date: Mon, 25 May 2020 17:09:56 -0700 Subject: [PATCH 2/5] prepare for merging. --- Extensions/Sprite.cpp | 46 ++++++++++++++++--- Extensions/Sprite.h | 2 +- .../Sprite_image_4bit/Sprite_image_4bit.ino | 12 +---- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/Extensions/Sprite.cpp b/Extensions/Sprite.cpp index f3d7e3e..c82024c 100644 --- a/Extensions/Sprite.cpp +++ b/Extensions/Sprite.cpp @@ -868,12 +868,46 @@ void TFT_eSprite::pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint16_ } else if (_bpp == 4) { - // not supported. The image is unlikely to have the correct colors for the color map. - // we could implement a way to push a 4-bit image using the color map? - #ifdef TFT_eSPI_DEBUG - Serial.println("pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t *data) not implemented"); - #endif - return; + // the image is assumed to be 4 bit, where each byte corresponds to two pixels. + // much faster when aligned to a byte boundary, because the alternative is slower, requiring + // tedious bit operations. + + const uint8_t *dataBuf = (uint8_t *)data; + int sWidth = (_iwidth >> 1); + + if ((xs & 0x01) == 0 && (xo & 0x01) == 0 && (ws & 0x01) == 0) + { + if ((ws & 0x01) == 0) // use memcpy for better perf. + { + xs = (xs >> 1) + ys * sWidth; + ws = (ws >> 1); + xo = (xo >> 1) + yo * (w>>1); + while (hs--) + { + memcpy(_img4 + xs, dataBuf + xo, ws); + xo += (w >> 1); + xs += sWidth; + } + } + } + else // not optimized + { + for (int32_t yp = yo; yp < yo + hs; yp++) + { + x = xs; + for (int32_t xp = xo; xp < xo + ws; xp++) + { + uint32_t color; + if ((xp & 0x01) == 0) + color = (dataBuf[((xp+yp*w)>>1)] & 0xF0) >> 4; // even index = bits 7 .. 4 + else + color = dataBuf[((xp-1+yp*w)>>1)] & 0x0F; // odd index = bits 3 .. 0. + drawPixel(x, ys, color); + x++; + } + ys++; + } + } } else // 1bpp diff --git a/Extensions/Sprite.h b/Extensions/Sprite.h index 74ba6b2..b1307b6 100644 --- a/Extensions/Sprite.h +++ b/Extensions/Sprite.h @@ -114,7 +114,7 @@ class TFT_eSprite : public TFT_eSPI { // 16bpp = colour, 8bpp = byte, 4bpp = colour index, 1bpp = 1 or 0 uint16_t readPixelValue(int32_t x, int32_t y); - // Write an image (colour bitmap) to the sprite. Not implemented for _bpp == 4. + // Write an image (colour bitmap) to the sprite. void pushImage(int32_t x0, int32_t y0, int32_t w, int32_t h, uint16_t *data); void pushImage(int32_t x0, int32_t y0, int32_t w, int32_t h, const uint16_t *data); diff --git a/examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino b/examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino index e004df4..bdf5390 100644 --- a/examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino +++ b/examples/Sprite/Sprite_image_4bit/Sprite_image_4bit.ino @@ -39,10 +39,6 @@ TFT_eSPI tft = TFT_eSPI(); // Declare object "tft" TFT_eSprite spr = TFT_eSprite(&tft); // Declare Sprite object "spr" with pointer to "tft" object -const int freq = 5000; -int screenBrightnessChannel = 0; -int resolution = 8; - byte red = 31; // Red is the top 5 bits of a 16 bit colour value byte green = 0;// Green is the middle 6 bits byte blue = 0; // Blue is the bottom 5 bits @@ -55,11 +51,6 @@ uint16_t cmap[16]; void setup() { - pinMode(21, OUTPUT); - ledcSetup(screenBrightnessChannel, freq, resolution); - ledcAttachPin(21, screenBrightnessChannel); - ledcWrite(screenBrightnessChannel, 127); - Serial.begin(9600); Serial.println(); @@ -94,13 +85,12 @@ void loop(void) cmap[i] = cmap[i + 1]; } if (incr == 2) { - (void)rainbow(); // skip alternate steps + (void)rainbow(); // skip alternate steps to go faster } cmap[15] = rainbow(); rloop += incr; if (rloop > 0xc0) { incr = incr == 2 ? 1 : 2; - Serial.printf("incr %d, rloop %d\r\n", incr, rloop); rloop = 0; } From 3a2157805e04e353d80a92c77275632ababc2961 Mon Sep 17 00:00:00 2001 From: Kate Morris Date: Mon, 25 May 2020 17:12:24 -0700 Subject: [PATCH 3/5] Rename readme.txt to readme.md --- Tools/Images/{README.txt => README.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Tools/Images/{README.txt => README.md} (96%) diff --git a/Tools/Images/README.txt b/Tools/Images/README.md similarity index 96% rename from Tools/Images/README.txt rename to Tools/Images/README.md index 8ba629c..eef2149 100644 --- a/Tools/Images/README.txt +++ b/Tools/Images/README.md @@ -22,4 +22,4 @@ Create the bmp file in Gimp from any image by: I don't have photoshop so cannot help you with that. The first array produced is the palette for the image. -The second is the image itself. \ No newline at end of file +The second is the image itself. From 110128b0550a799aab3638a1702c512e54a7f5f6 Mon Sep 17 00:00:00 2001 From: Kate Morris Date: Mon, 25 May 2020 17:29:39 -0700 Subject: [PATCH 4/5] updated with formatting and links --- Tools/Images/README.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Tools/Images/README.md b/Tools/Images/README.md index eef2149..02405a9 100644 --- a/Tools/Images/README.md +++ b/Tools/Images/README.md @@ -1,25 +1,26 @@ +## bmp2array4bit -bmp2array4bit.py creates C (or C++) code that contains two arrays for adding images to four-bit sprites. See Sprite_image_4bit for an example. +bmp2array4bit.py reads a bmp file, and creates C (or C++) code that contains two arrays for adding images to four-bit sprites. See [Sprite_image_4bit](../../examples/Sprite/Sprite_image_4bit) for an example. -It is loosely based on Spark Fun's bmp2array script. +It is loosely based on Spark Fun's bmp2array script, https://github.com/sparkfun/BMPtoArray/blob/master/bmp2array.py. The bmp file format is documented in https://en.wikipedia.org/wiki/BMP_file_format. -You'll need python 3.6 (the original use Python 2.7) +You'll need python 3.6 (the original uses Python 2.7) -usage: python bmp2array4bit.py [-v] star.bmp [-o myfile.c] +`usage: python bmp2array4bit.py [-v] star.bmp [-o myfile.c]` -Create the bmp file in Gimp from any image by: +Create the bmp file in Gimp (www.gimp.org) from any image as follows: -. Remove the alpha channel (if it has one) +* Remove the alpha channel (if it has one) Layer -> Transparency -> Remove Alpha Channel -. Set the mode to indexed. +* Set the mode to indexed. Image -> Mode -> Indexed... -. Select Generate optimum palette with 16 colors (max) -. Export the file with a .bmp extension. Do NOT select options: - . Run-Length Encoded - . Compatibility Options: "Do not write color space information" - . There are no Advanced Options available with these settings +* Select Generate optimum palette with 16 colors (max) +* Export the file with a .bmp extension. Do **NOT** select options: + * Run-Length Encoded + * Compatibility Options: "Do not write color space information" + * There are no Advanced Options available with these settings -I don't have photoshop so cannot help you with that. +(There are other tools that will produce bmp files, and these should work provided you don't use run-length encoding or other advanced features). The first array produced is the palette for the image. The second is the image itself. From a7be0c0ebe1687df099840a9137fe493c9fd604c Mon Sep 17 00:00:00 2001 From: kamorris Date: Thu, 18 Jun 2020 20:29:10 -0700 Subject: [PATCH 5/5] delete extraneous ino file --- .../Sprite/Sprite_image_4bit/Sprite_image.ino | 162 ------------------ 1 file changed, 162 deletions(-) delete mode 100644 examples/Sprite/Sprite_image_4bit/Sprite_image.ino diff --git a/examples/Sprite/Sprite_image_4bit/Sprite_image.ino b/examples/Sprite/Sprite_image_4bit/Sprite_image.ino deleted file mode 100644 index e004df4..0000000 --- a/examples/Sprite/Sprite_image_4bit/Sprite_image.ino +++ /dev/null @@ -1,162 +0,0 @@ -/* - - Sketch to show how a Sprite can use a four-bit image with - a palette to change the appearance of an image while rendering - it only once. - - Example for library: - https://github.com/Bodmer/TFT_eSPI - - A Sprite is notionally an invisible graphics screen that is - kept in the processors RAM. Graphics can be drawn into the - Sprite just as it can be drawn directly to the screen. Once - the Sprite is completed it can be plotted onto the screen in - any position. If there is sufficient RAM then the Sprite can - be the same size as the screen and used as a frame buffer. - - A 16 bit Sprite occupies (2 * width * height) bytes in RAM. - - On a ESP8266 Sprite sizes up to 126 x 160 can be accomodated, - this size requires 40kBytes of RAM for a 16 bit color depth. - - When 8 bit color depth sprites are created they occupy - (width * height) bytes in RAM, so larger sprites can be - created, or the RAM required is halved. - -*/ - - -// Set delay after plotting the sprite -#define DELAY 30 - -// Width and height of sprite -#define WIDTH 164 -#define HEIGHT 164 - -#include "sample_images.h" - -TFT_eSPI tft = TFT_eSPI(); // Declare object "tft" - -TFT_eSprite spr = TFT_eSprite(&tft); // Declare Sprite object "spr" with pointer to "tft" object - -const int freq = 5000; -int screenBrightnessChannel = 0; -int resolution = 8; - -byte red = 31; // Red is the top 5 bits of a 16 bit colour value -byte green = 0;// Green is the middle 6 bits -byte blue = 0; // Blue is the bottom 5 bits -byte state = 0; - -int rloop = 0; -int incr = 1; - -uint16_t cmap[16]; - -void setup() -{ - pinMode(21, OUTPUT); - ledcSetup(screenBrightnessChannel, freq, resolution); - ledcAttachPin(21, screenBrightnessChannel); - ledcWrite(screenBrightnessChannel, 127); - - Serial.begin(9600); - Serial.println(); - - delay(50); - - // Initialise the TFT registers - tft.init(); - - spr.setColorDepth(4); - - // Create a sprite of defined size - spr.createSprite(WIDTH, HEIGHT); - - // Clear the TFT screen to black - tft.fillScreen(TFT_BLACK); - - // push the image - only need to do this once. - spr.pushImage(2, 2, 160, 160, (uint16_t *)stars); - - for (int i = 0; i < 16; i++) - cmap[i] = rainbow(); -} - -void loop(void) -{ - // create a palette with the defined colors and push it. - spr.createPalette(cmap, 16); - spr.pushSprite(tft.width() / 2 - WIDTH / 2, tft.height() / 2 - HEIGHT / 2); - - // update the colors - for (int i = 0; i < 15; i++) { - cmap[i] = cmap[i + 1]; - } - if (incr == 2) { - (void)rainbow(); // skip alternate steps - } - cmap[15] = rainbow(); - rloop += incr; - if (rloop > 0xc0) { - incr = incr == 2 ? 1 : 2; - Serial.printf("incr %d, rloop %d\r\n", incr, rloop); - rloop = 0; - - } - delay(DELAY); - -} - -// ######################################################################### -// Return a 16 bit rainbow colour -// ######################################################################### -unsigned int rainbow() -{ - switch (state) { - case 0: - green ++; - if (green == 64) { - green = 63; - state = 1; - } - break; - case 1: - red--; - if (red == 255) { - red = 0; - state = 2; - } - break; - case 2: - blue ++; - if (blue == 32) { - blue = 31; - state = 3; - } - break; - case 3: - green --; - if (green == 255) { - green = 0; - state = 4; - } - break; - case 4: - red ++; - if (red == 32) { - red = 31; - state = 5; - } - break; - case 5: - blue --; - if (blue == 255) { - blue = 0; - state = 0; - } - break; - } - return red << 11 | green << 5 | blue; -} -