Add libraries, picocalc notes.

This commit is contained in:
2025-04-01 18:28:52 -07:00
parent 1c3052c977
commit e77a69ce91
598 changed files with 475037 additions and 0 deletions

View File

@@ -0,0 +1,170 @@
//The Game of Life, also known simply as Life, is a cellular automaton
//devised by the British mathematician John Horton Conway in 1970.
// https://en.wikipedia.org/wiki/Conway's_Game_of_Life
// See license at end of file.
// Adapted by Bodmer
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
// Maximum number of generations until the screen is refreshed
#define MAX_GEN_COUNT 500
// The ESP8266 has plenty of memory so we can create a large array
// 2 x 2 pixel cells, array size = 5120 bytes per array, runs fast
#define GRIDX 80
#define GRIDY 64
#define CELLXY 2
// 1 x 1 pixel cells, array size = 20480 bytes per array
//#define GRIDX 160
//#define GRIDY 128
//#define CELLXY 1
#define GEN_DELAY 10 // Set a delay between each generation to slow things down
//Current grid and newgrid arrays are needed
uint8_t grid[GRIDX][GRIDY];
//The new grid for the next generation
uint8_t newgrid[GRIDX][GRIDY];
//Number of generations
uint16_t genCount = 0;
void setup() {
//Set up the display
tft.init();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
tft.setTextSize(1);
tft.setTextColor(TFT_WHITE);
tft.setCursor(0, 0);
}
void loop() {
//Display a simple splash screen
tft.fillScreen(TFT_BLACK);
tft.setTextSize(2);
tft.setTextColor(TFT_WHITE);
tft.setCursor(40, 5);
tft.println(F("Arduino"));
tft.setCursor(35, 25);
tft.println(F("Cellular"));
tft.setCursor(35, 45);
tft.println(F("Automata"));
delay(1000);
tft.fillScreen(TFT_BLACK);
initGrid();
genCount = MAX_GEN_COUNT;
drawGrid();
//Compute generations
for (int gen = 0; gen < genCount; gen++)
{
computeCA();
drawGrid();
delay(GEN_DELAY);
for (int16_t x = 1; x < GRIDX-1; x++) {
for (int16_t y = 1; y < GRIDY-1; y++) {
grid[x][y] = newgrid[x][y];
}
}
}
}
//Draws the grid on the display
void drawGrid(void) {
uint16_t color = TFT_WHITE;
for (int16_t x = 1; x < GRIDX - 1; x++) {
for (int16_t y = 1; y < GRIDY - 1; y++) {
if ((grid[x][y]) != (newgrid[x][y])) {
if (newgrid[x][y] == 1) color = 0xFFFF; //random(0xFFFF);
else color = 0;
tft.fillRect(CELLXY * x, CELLXY * y, CELLXY, CELLXY, color);
}
}
}
}
//Initialise Grid
void initGrid(void) {
for (int16_t x = 0; x < GRIDX; x++) {
for (int16_t y = 0; y < GRIDY; y++) {
newgrid[x][y] = 0;
if (x == 0 || x == GRIDX - 1 || y == 0 || y == GRIDY - 1) {
grid[x][y] = 0;
}
else {
if (random(3) == 1)
grid[x][y] = 1;
else
grid[x][y] = 0;
}
}
}
}
//Compute the CA. Basically everything related to CA starts here
void computeCA() {
for (int16_t x = 1; x < GRIDX; x++) {
for (int16_t y = 1; y < GRIDY; y++) {
int neighbors = getNumberOfNeighbors(x, y);
if (grid[x][y] == 1 && (neighbors == 2 || neighbors == 3 ))
{
newgrid[x][y] = 1;
}
else if (grid[x][y] == 1) newgrid[x][y] = 0;
if (grid[x][y] == 0 && (neighbors == 3))
{
newgrid[x][y] = 1;
}
else if (grid[x][y] == 0) newgrid[x][y] = 0;
}
}
}
// Check the Moore neighbourhood
int getNumberOfNeighbors(int x, int y) {
return grid[x - 1][y] + grid[x - 1][y - 1] + grid[x][y - 1] + grid[x + 1][y - 1] + grid[x + 1][y] + grid[x + 1][y + 1] + grid[x][y + 1] + grid[x - 1][y + 1];
}
/*
The MIT License (MIT)
Copyright (c) 2016 RuntimeProjects.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

View File

@@ -0,0 +1,222 @@
/*
* Pong
* Original Code from https://github.com/rparrett/pongclock
*
*/
#define BLACK 0x0000
#define WHITE 0xFFFF
#define GREY 0x5AEB
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
int16_t h = 128;
int16_t w = 160;
int dly = 10;
int16_t paddle_h = 25;
int16_t paddle_w = 2;
int16_t lpaddle_x = 0;
int16_t rpaddle_x = w - paddle_w;
int16_t lpaddle_y = 0;
int16_t rpaddle_y = h - paddle_h;
int16_t lpaddle_d = 1;
int16_t rpaddle_d = -1;
int16_t lpaddle_ball_t = w - w / 4;
int16_t rpaddle_ball_t = w / 4;
int16_t target_y = 0;
int16_t ball_x = 2;
int16_t ball_y = 2;
int16_t oldball_x = 2;
int16_t oldball_y = 2;
int16_t ball_dx = 1;
int16_t ball_dy = 1;
int16_t ball_w = 4;
int16_t ball_h = 4;
int16_t dashline_h = 4;
int16_t dashline_w = 2;
int16_t dashline_n = h / dashline_h;
int16_t dashline_x = w / 2 - 1;
int16_t dashline_y = dashline_h / 2;
int16_t lscore = 12;
int16_t rscore = 4;
void setup(void) {
randomSeed(analogRead(0)*analogRead(1));
tft.init();
tft.setRotation(1);
tft.fillScreen(BLACK);
initgame();
tft.setTextColor(WHITE, BLACK);
delay(2000);
}
void loop() {
delay(dly);
lpaddle();
rpaddle();
midline();
ball();
}
void initgame() {
lpaddle_y = random(0, h - paddle_h);
rpaddle_y = random(0, h - paddle_h);
// ball is placed on the center of the left paddle
ball_y = lpaddle_y + (paddle_h / 2);
calc_target_y();
midline();
tft.fillRect(0,h-26,w,h-1,BLACK);
tft.setTextDatum(TC_DATUM);
tft.setTextColor(WHITE);
tft.drawString("TFT_eSPI example", w/2, h-26 , 2);
}
void midline() {
// If the ball is not on the line then don't redraw the line
if ((ball_x<dashline_x-ball_w) && (ball_x > dashline_x+dashline_w)) return;
tft.startWrite();
// Quick way to draw a dashed line
tft.setAddrWindow(dashline_x, 0, dashline_w, h);
for(int16_t i = 0; i < dashline_n; i+=2) {
tft.pushColor(WHITE, dashline_w*dashline_h); // push dash pixels
tft.pushColor(BLACK, dashline_w*dashline_h); // push gap pixels
}
tft.endWrite();
}
void lpaddle() {
if (lpaddle_d == 1) {
tft.fillRect(lpaddle_x, lpaddle_y, paddle_w, 1, BLACK);
}
else if (lpaddle_d == -1) {
tft.fillRect(lpaddle_x, lpaddle_y + paddle_h - 1, paddle_w, 1, BLACK);
}
lpaddle_y = lpaddle_y + lpaddle_d;
if (ball_dx == 1) lpaddle_d = 0;
else {
if (lpaddle_y + paddle_h / 2 == target_y) lpaddle_d = 0;
else if (lpaddle_y + paddle_h / 2 > target_y) lpaddle_d = -1;
else lpaddle_d = 1;
}
if (lpaddle_y + paddle_h >= h && lpaddle_d == 1) lpaddle_d = 0;
else if (lpaddle_y <= 0 && lpaddle_d == -1) lpaddle_d = 0;
tft.fillRect(lpaddle_x, lpaddle_y, paddle_w, paddle_h, WHITE);
}
void rpaddle() {
if (rpaddle_d == 1) {
tft.fillRect(rpaddle_x, rpaddle_y, paddle_w, 1, BLACK);
}
else if (rpaddle_d == -1) {
tft.fillRect(rpaddle_x, rpaddle_y + paddle_h - 1, paddle_w, 1, BLACK);
}
rpaddle_y = rpaddle_y + rpaddle_d;
if (ball_dx == -1) rpaddle_d = 0;
else {
if (rpaddle_y + paddle_h / 2 == target_y) rpaddle_d = 0;
else if (rpaddle_y + paddle_h / 2 > target_y) rpaddle_d = -1;
else rpaddle_d = 1;
}
if (rpaddle_y + paddle_h >= h && rpaddle_d == 1) rpaddle_d = 0;
else if (rpaddle_y <= 0 && rpaddle_d == -1) rpaddle_d = 0;
tft.fillRect(rpaddle_x, rpaddle_y, paddle_w, paddle_h, WHITE);
}
void calc_target_y() {
int16_t target_x;
int16_t reflections;
int16_t y;
if (ball_dx == 1) {
target_x = w - ball_w;
}
else {
target_x = -1 * (w - ball_w);
}
y = abs(target_x * (ball_dy / ball_dx) + ball_y);
reflections = floor(y / h);
if (reflections % 2 == 0) {
target_y = y % h;
}
else {
target_y = h - (y % h);
}
}
void ball() {
ball_x = ball_x + ball_dx;
ball_y = ball_y + ball_dy;
if (ball_dx == -1 && ball_x == paddle_w && ball_y + ball_h >= lpaddle_y && ball_y <= lpaddle_y + paddle_h) {
ball_dx = ball_dx * -1;
dly = random(5); // change speed of ball after paddle contact
calc_target_y();
} else if (ball_dx == 1 && ball_x + ball_w == w - paddle_w && ball_y + ball_h >= rpaddle_y && ball_y <= rpaddle_y + paddle_h) {
ball_dx = ball_dx * -1;
dly = random(5); // change speed of ball after paddle contact
calc_target_y();
} else if ((ball_dx == 1 && ball_x >= w) || (ball_dx == -1 && ball_x + ball_w < 0)) {
dly = 5;
}
if (ball_y > h - ball_w || ball_y < 0) {
ball_dy = ball_dy * -1;
ball_y += ball_dy; // Keep in bounds
}
//tft.fillRect(oldball_x, oldball_y, ball_w, ball_h, BLACK);
tft.drawRect(oldball_x, oldball_y, ball_w, ball_h, BLACK); // Less TFT refresh aliasing than line above for large balls
tft.fillRect( ball_x, ball_y, ball_w, ball_h, WHITE);
oldball_x = ball_x;
oldball_y = ball_y;
}

View File

@@ -0,0 +1,187 @@
/*
Display all the fast rendering fonts.
This sketch uses the GLCD (font 1) and fonts 2, 4, 6, 7, 8
Make sure all the display driver and pin connections are correct by
editing the User_Setup.h file in the TFT_eSPI library folder.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
#########################################################################
*/
// New background colour
#define TFT_BROWN 0x38E0
// Pause in milliseconds between screens, change to 0 to time font rendering
#define WAIT 500
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
unsigned long targetTime = 0; // Used for testing draw times
void setup(void) {
tft.init();
tft.setRotation(1);
}
void loop() {
targetTime = millis();
// First we test them with a background colour set
tft.setTextSize(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.drawString(" !\"#$%&'()*+,-./0123456", 0, 0, 2);
tft.drawString("789:;<=>?@ABCDEFGHIJKL", 0, 16, 2);
tft.drawString("MNOPQRSTUVWXYZ[\\]^_`", 0, 32, 2);
tft.drawString("abcdefghijklmnopqrstuvw", 0, 48, 2);
int xpos = 0;
xpos += tft.drawString("xyz{|}~", 0, 64, 2);
tft.drawChar(127, xpos, 64, 2);
delay(WAIT);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.drawString(" !\"#$%&'()*+,-.", 0, 0, 4);
tft.drawString("/0123456789:;", 0, 26, 4);
tft.drawString("<=>?@ABCDE", 0, 52, 4);
tft.drawString("FGHIJKLMNO", 0, 78, 4);
tft.drawString("PQRSTUVWX", 0, 104, 4);
delay(WAIT);
tft.fillScreen(TFT_BLACK);
tft.drawString("YZ[\\]^_`abc", 0, 0, 4);
tft.drawString("defghijklmno", 0, 26, 4);
tft.drawString("pqrstuvwxyz", 0, 52, 4);
xpos = 0;
xpos += tft.drawString("{|}~", 0, 78, 4);
tft.drawChar(127, xpos, 78, 4);
delay(WAIT);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_BLUE, TFT_BLACK);
tft.drawString("012345", 0, 0, 6);
tft.drawString("6789", 0, 40, 6);
tft.drawString("apm-:.", 0, 80, 6);
delay(WAIT);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawString("0123", 0, 0, 7);
tft.drawString("4567", 0, 60, 7);
delay(WAIT);
tft.fillScreen(TFT_BLACK);
tft.drawString("890:.", 0, 0, 7);
tft.drawString("", 0, 60, 7);
delay(WAIT);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_YELLOW, TFT_BLACK);
tft.drawString("01", 0, 0, 8);
delay(WAIT);
tft.drawString("23", 0, 0, 8);
delay(WAIT);
tft.drawString("45", 0, 0, 8);
delay(WAIT);
tft.drawString("67", 0, 0, 8);
delay(WAIT);
tft.drawString("89", 0, 0, 8);
delay(WAIT);
tft.drawString("0:.", 0, 0, 8);
delay(WAIT);
tft.setTextColor(TFT_MAGENTA);
tft.drawNumber(millis() - targetTime, 0, 100, 4);
delay(4000);
// Now test them with transparent background
targetTime = millis();
tft.setTextSize(1);
tft.fillScreen(TFT_BROWN);
tft.setTextColor(TFT_GREEN);
tft.drawString(" !\"#$%&'()*+,-./0123456", 0, 0, 2);
tft.drawString("789:;<=>?@ABCDEFGHIJKL", 0, 16, 2);
tft.drawString("MNOPQRSTUVWXYZ[\\]^_`", 0, 32, 2);
tft.drawString("abcdefghijklmnopqrstuvw", 0, 48, 2);
xpos = 0;
xpos += tft.drawString("xyz{|}~", 0, 64, 2);
tft.drawChar(127, xpos, 64, 2);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.setTextColor(TFT_GREEN);
tft.drawString(" !\"#$%&'()*+,-.", 0, 0, 4);
tft.drawString("/0123456789:;", 0, 26, 4);
tft.drawString("<=>?@ABCDE", 0, 52, 4);
tft.drawString("FGHIJKLMNO", 0, 78, 4);
tft.drawString("PQRSTUVWX", 0, 104, 4);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.drawString("YZ[\\]^_`abc", 0, 0, 4);
tft.drawString("defghijklmno", 0, 26, 4);
tft.drawString("pqrstuvwxyz", 0, 52, 4);
xpos = 0;
xpos += tft.drawString("{|}~", 0, 78, 4);
tft.drawChar(127, xpos, 78, 4);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.setTextColor(TFT_BLUE);
tft.drawString("012345", 0, 0, 6);
tft.drawString("6789", 0, 40, 6);
tft.drawString("apm-:.", 0, 80, 6);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.setTextColor(TFT_RED);
tft.drawString("0123", 0, 0, 7);
tft.drawString("4567", 0, 60, 7);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.drawString("890:.", 0, 0, 7);
tft.drawString("", 0, 60, 7);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.setTextColor(TFT_YELLOW);
tft.drawString("0123", 0, 0, 8);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.drawString("4567", 0, 0, 8);
delay(WAIT);
tft.fillScreen(TFT_BROWN);
tft.drawString("890:.", 0, 0, 8);
delay(WAIT);
tft.setTextColor(TFT_MAGENTA);
tft.drawNumber(millis() - targetTime, 0, 100, 4);
delay(4000);;
}

View File

@@ -0,0 +1,128 @@
/*
Font draw speed and flicker test, draws all numbers 0-999 in each font
(0-99 in font 8)
Average time in milliseconds to draw a character is shown in red
A total of 2890 characters are drawn in each font (190 in font 8)
Needs fonts 2, 4, 6, 7 and 8
Make sure all the display driver and pin connections are correct by
editing the User_Setup.h file in the TFT_eSPI library folder.
Note that yield() or delay(0) must be called in long duration for/while
loops to stop the ESP8266 watchdog triggering.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
#########################################################################
*/
#include <TFT_eSPI.h> // Graphics and font library for ILI9341 driver chip
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
unsigned long drawTime = 0;
void setup(void) {
tft.init();
tft.setRotation(1);
}
void loop() {
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
drawTime = millis();
for (int i = 0; i < 1000; i++) {
tft.drawNumber(i, 0, 0, 1);
}
drawTime = millis() - drawTime;
tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
delay(4000);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
drawTime = millis();
for (int i = 0; i < 1000; i++) {
tft.drawNumber(i, 0, 0, 2);
}
drawTime = millis() - drawTime;
tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
delay(4000);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
drawTime = millis();
for (int i = 0; i < 1000; i++) {
tft.drawNumber(i, 0, 0, 4);
}
drawTime = millis() - drawTime;
tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
delay(4000);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
drawTime = millis();
for (int i = 0; i < 1000; i++) {
yield(); tft.drawNumber(i, 0, 0, 6);
}
drawTime = millis() - drawTime;
tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
delay(4000);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
drawTime = millis();
for (int i = 0; i < 1000; i++) {
yield(); tft.drawNumber(i, 0, 0, 7);
}
drawTime = millis() - drawTime;
tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
delay(4000);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
drawTime = millis();
for (int i = 0; i < 100; i++) {
yield(); tft.drawNumber(i, 0, 0, 8);
}
drawTime = millis() - drawTime;
tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 190.0, 3, 0, 80, 4);
delay(4000);
}

View File

@@ -0,0 +1,134 @@
/*
An example analogue clock using a TFT LCD screen to show the time
use of some of the drawing commands with the ST7735 library.
For a more accurate clock, it would be better to use the RTClib library.
But this is just a demo.
Uses compile time to set the time so a reset will start with the compile time again
Gilchrist 6/2/2014 1.0
Updated by Bodmer
*/
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
#define TFT_GREY 0xBDF7
float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0; // Saved H, M, S x & y multipliers
float sdeg=0, mdeg=0, hdeg=0;
uint16_t osx=64, osy=64, omx=64, omy=64, ohx=64, ohy=64; // Saved H, M, S x & y coords
uint16_t x0=0, x1=0, yy0=0, yy1=0;
uint32_t targetTime = 0; // for next 1 second timeout
static uint8_t conv2d(const char* p) {
uint8_t v = 0;
if ('0' <= *p && *p <= '9')
v = *p - '0';
return 10 * v + *++p - '0';
}
uint8_t hh=conv2d(__TIME__), mm=conv2d(__TIME__+3), ss=conv2d(__TIME__+6); // Get H, M, S from compile time
bool initial = 1;
void setup(void) {
tft.init();
tft.setRotation(0);
tft.fillScreen(TFT_GREY);
tft.setTextColor(TFT_GREEN, TFT_GREY); // Adding a black background colour erases previous text automatically
// Draw clock face
tft.fillCircle(64, 64, 61, TFT_BLUE);
tft.fillCircle(64, 64, 57, TFT_BLACK);
// Draw 12 lines
for(int i = 0; i<360; i+= 30) {
sx = cos((i-90)*0.0174532925);
sy = sin((i-90)*0.0174532925);
x0 = sx*57+64;
yy0 = sy*57+64;
x1 = sx*50+64;
yy1 = sy*50+64;
tft.drawLine(x0, yy0, x1, yy1, TFT_BLUE);
}
// Draw 60 dots
for(int i = 0; i<360; i+= 6) {
sx = cos((i-90)*0.0174532925);
sy = sin((i-90)*0.0174532925);
x0 = sx*53+64;
yy0 = sy*53+64;
tft.drawPixel(x0, yy0, TFT_BLUE);
if(i==0 || i==180) tft.fillCircle(x0, yy0, 1, TFT_CYAN);
if(i==0 || i==180) tft.fillCircle(x0+1, yy0, 1, TFT_CYAN);
if(i==90 || i==270) tft.fillCircle(x0, yy0, 1, TFT_CYAN);
if(i==90 || i==270) tft.fillCircle(x0+1, yy0, 1, TFT_CYAN);
}
tft.fillCircle(65, 65, 3, TFT_RED);
// Draw text at position 64,125 using fonts 4
// Only font numbers 2,4,6,7 are valid. Font 6 only contains characters [space] 0 1 2 3 4 5 6 7 8 9 : . a p m
// Font 7 is a 7 segment font and only contains characters [space] 0 1 2 3 4 5 6 7 8 9 : .
tft.drawCentreString("Time flies",64,130,4);
targetTime = millis() + 1000;
}
void loop() {
if (targetTime < millis()) {
targetTime = millis()+1000;
ss++; // Advance second
if (ss==60) {
ss=0;
mm++; // Advance minute
if(mm>59) {
mm=0;
hh++; // Advance hour
if (hh>23) {
hh=0;
}
}
}
// Pre-compute hand degrees, x & y coords for a fast screen update
sdeg = ss*6; // 0-59 -> 0-354
mdeg = mm*6+sdeg*0.01666667; // 0-59 -> 0-360 - includes seconds
hdeg = hh*30+mdeg*0.0833333; // 0-11 -> 0-360 - includes minutes and seconds
hx = cos((hdeg-90)*0.0174532925);
hy = sin((hdeg-90)*0.0174532925);
mx = cos((mdeg-90)*0.0174532925);
my = sin((mdeg-90)*0.0174532925);
sx = cos((sdeg-90)*0.0174532925);
sy = sin((sdeg-90)*0.0174532925);
if (ss==0 || initial) {
initial = 0;
// Erase hour and minute hand positions every minute
tft.drawLine(ohx, ohy, 65, 65, TFT_BLACK);
ohx = hx*33+65;
ohy = hy*33+65;
tft.drawLine(omx, omy, 65, 65, TFT_BLACK);
omx = mx*44+65;
omy = my*44+65;
}
// Redraw new hand positions, hour and minute hands not erased here to avoid flicker
tft.drawLine(osx, osy, 65, 65, TFT_BLACK);
tft.drawLine(ohx, ohy, 65, 65, TFT_WHITE);
tft.drawLine(omx, omy, 65, 65, TFT_WHITE);
osx = sx*47+65;
osy = sy*47+65;
tft.drawLine(osx, osy, 65, 65, TFT_RED);
tft.fillCircle(65, 65, 3, TFT_RED);
}
}

View File

@@ -0,0 +1,135 @@
/*
An example digital clock using a TFT LCD screen to show the time.
Demonstrates use of the font printing routines. (Time updates but date does not.)
For a more accurate clock, it would be better to use the RTClib library.
But this is just a demo.
This examples uses the hardware SPI only. Non-hardware SPI
is just too slow (~8 times slower!)
Based on clock sketch by Gilchrist 6/2/2014 1.0
Updated by Bodmer
A few colour codes:
code color
0x0000 Black
0xFFFF White
0xBDF7 Light Gray
0x7BEF Dark Gray
0xF800 Red
0xFFE0 Yellow
0xFBE0 Orange
0x79E0 Brown
0x7E0 Green
0x7FF Cyan
0x1F Blue
0xF81F Pink
*/
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
uint32_t targetTime = 0; // for next 1 second timeout
byte omm = 99;
bool initial = 1;
byte xcolon = 0;
unsigned int colour = 0;
static uint8_t conv2d(const char* p) {
uint8_t v = 0;
if ('0' <= *p && *p <= '9')
v = *p - '0';
return 10 * v + *++p - '0';
}
uint8_t hh=conv2d(__TIME__), mm=conv2d(__TIME__+3), ss=conv2d(__TIME__+6); // Get H, M, S from compile time
void setup(void) {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_YELLOW, TFT_BLACK); // Note: the new fonts do not draw the background colour
targetTime = millis() + 1000;
}
void loop() {
if (targetTime < millis()) {
targetTime = millis()+1000;
ss++; // Advance second
if (ss==60) {
ss=0;
omm = mm;
mm++; // Advance minute
if(mm>59) {
mm=0;
hh++; // Advance hour
if (hh>23) {
hh=0;
}
}
}
if (ss==0 || initial) {
initial = 0;
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.setCursor (8, 52);
tft.print(__DATE__); // This uses the standard ADAFruit small font
tft.setTextColor(TFT_BLUE, TFT_BLACK);
tft.drawCentreString("It is windy",120,48,2); // Next size up font 2
//tft.setTextColor(0xF81F, TFT_BLACK); // Pink
//tft.drawCentreString("12.34",80,100,6); // Large font 6 only contains characters [space] 0 1 2 3 4 5 6 7 8 9 . : a p m
}
// Update digital time
byte xpos = 6;
byte ypos = 0;
if (omm != mm) { // Only redraw every minute to minimise flicker
// Uncomment ONE of the next 2 lines, using the ghost image demonstrates text overlay as time is drawn over it
tft.setTextColor(0x39C4, TFT_BLACK); // Leave a 7 segment ghost image, comment out next line!
//tft.setTextColor(TFT_BLACK, TFT_BLACK); // Set font colour to black to wipe image
// Font 7 is to show a pseudo 7 segment display.
// Font 7 only contains characters [space] 0 1 2 3 4 5 6 7 8 9 0 : .
tft.drawString("88:88",xpos,ypos,7); // Overwrite the text to clear it
tft.setTextColor(0xFBE0); // Orange
omm = mm;
if (hh<10) xpos+= tft.drawChar('0',xpos,ypos,7);
xpos+= tft.drawNumber(hh,xpos,ypos,7);
xcolon=xpos;
xpos+= tft.drawChar(':',xpos,ypos,7);
if (mm<10) xpos+= tft.drawChar('0',xpos,ypos,7);
tft.drawNumber(mm,xpos,ypos,7);
}
if (ss%2) { // Flash the colon
tft.setTextColor(0x39C4, TFT_BLACK);
xpos+= tft.drawChar(':',xcolon,ypos,7);
tft.setTextColor(0xFBE0, TFT_BLACK);
}
else {
tft.drawChar(':',xcolon,ypos,7);
colour = random(0xFFFF);
// Erase the old text with a rectangle, the disadvantage of this method is increased display flicker
tft.fillRect (0, 64, 160, 20, TFT_BLACK);
tft.setTextColor(colour);
tft.drawRightString("Colour",75,64,4); // Right justified string drawing to x position 75
String scolour = String(colour,HEX);
scolour.toUpperCase();
char buffer[20];
scolour.toCharArray(buffer,20);
tft.drawString(buffer,82,64,4);
}
}
}

View File

@@ -0,0 +1,50 @@
/*
Ellipse drawing example
This sketch does not use any fonts.
*/
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
void setup(void) {
tft.init();
tft.setRotation(1);
}
void loop() {
tft.fillScreen(TFT_BLACK);
// Draw some random filled elipses
for (int i = 0; i < 20; i++)
{
int rx = random(40);
int ry = random(40);
int x = rx + random(160 - rx - rx);
int y = ry + random(128 - ry - ry);
tft.fillEllipse(x, y, rx, ry, random(0xFFFF));
}
delay(2000);
tft.fillScreen(TFT_BLACK);
// Draw some random outline elipses
for (int i = 0; i < 20; i++)
{
int rx = random(40);
int ry = random(40);
int x = rx + random(160 - rx - rx);
int y = ry + random(128 - ry - ry);
tft.drawEllipse(x, y, rx, ry, random(0xFFFF));
}
delay(2000);
}

View File

@@ -0,0 +1,210 @@
/*
An example analogue meter using a ST7735 TFT LCD screen
This example uses the hardware SPI only
Needs Font 2 (also Font 4 if using large scale label)
Updated by Bodmer for variable meter size
*/
// Define meter size
#define M_SIZE 0.667
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
#define TFT_GREY 0x5AEB
#define TFT_ORANGE 0xFD20 /* 255, 165, 0 */
float ltx = 0; // Saved x coord of bottom of needle
uint16_t osx = M_SIZE*120, osy = M_SIZE*120; // Saved x & y coords
uint32_t updateTime = 0; // time for next update
int old_analog = -999; // Value last displayed
int value[6] = {0, 0, 0, 0, 0, 0};
int old_value[6] = { -1, -1, -1, -1, -1, -1};
int d = 0;
void setup(void) {
Serial.begin(57600); // For debug
tft.init();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
analogMeter(); // Draw analogue meter
updateTime = millis(); // Next update time
}
void loop() {
if (updateTime <= millis()) {
updateTime = millis() + 35; // Update meter every 35 milliseconds
// Create a Sine wave for testing
d += 4; if (d >= 360) d = 0;
value[0] = 50 + 50 * sin((d + 0) * 0.0174532925);
//value[0] = random(0,100);
//unsigned long tt = millis();
plotNeedle(value[0], 0); // It takes between 2 and 14ms to replot the needle with zero delay
//Serial.println(millis()-tt);
}
}
// #########################################################################
// Draw the analogue meter on the screen
// #########################################################################
void analogMeter()
{
// Meter outline
tft.fillRect(0, 0, M_SIZE*239, M_SIZE*131, TFT_GREY);
tft.fillRect(1, M_SIZE*3, M_SIZE*234, M_SIZE*125, TFT_WHITE);
tft.setTextColor(TFT_BLACK); // Text colour
// Draw ticks every 5 degrees from -50 to +50 degrees (100 deg. FSD swing)
for (int i = -50; i < 51; i += 5) {
// Long scale tick length
int tl = 15;
// Coodinates of tick to draw
float sx = cos((i - 90) * 0.0174532925);
float sy = sin((i - 90) * 0.0174532925);
uint16_t x0 = sx * (M_SIZE*100 + tl) + M_SIZE*120;
uint16_t y0 = sy * (M_SIZE*100 + tl) + M_SIZE*150;
uint16_t x1 = sx * M_SIZE*100 + M_SIZE*120;
uint16_t y1 = sy * M_SIZE*100 + M_SIZE*150;
// Coordinates of next tick for zone fill
float sx2 = cos((i + 5 - 90) * 0.0174532925);
float sy2 = sin((i + 5 - 90) * 0.0174532925);
int x2 = sx2 * (M_SIZE*100 + tl) + M_SIZE*120;
int y2 = sy2 * (M_SIZE*100 + tl) + M_SIZE*150;
int x3 = sx2 * M_SIZE*100 + M_SIZE*120;
int y3 = sy2 * M_SIZE*100 + M_SIZE*150;
// Yellow zone limits
//if (i >= -50 && i < 0) {
// tft.fillTriangle(x0, y0, x1, y1, x2, y2, TFT_YELLOW);
// tft.fillTriangle(x1, y1, x2, y2, x3, y3, TFT_YELLOW);
//}
// Green zone limits
if (i >= 0 && i < 25) {
tft.fillTriangle(x0, y0, x1, y1, x2, y2, TFT_GREEN);
tft.fillTriangle(x1, y1, x2, y2, x3, y3, TFT_GREEN);
}
// Orange zone limits
if (i >= 25 && i < 50) {
tft.fillTriangle(x0, y0, x1, y1, x2, y2, TFT_ORANGE);
tft.fillTriangle(x1, y1, x2, y2, x3, y3, TFT_ORANGE);
}
// Short scale tick length
if (i % 25 != 0) tl = 8;
// Recalculate coords incase tick lenght changed
x0 = sx * (M_SIZE*100 + tl) + M_SIZE*120;
y0 = sy * (M_SIZE*100 + tl) + M_SIZE*150;
x1 = sx * M_SIZE*100 + M_SIZE*120;
y1 = sy * M_SIZE*100 + M_SIZE*150;
// Draw tick
tft.drawLine(x0, y0, x1, y1, TFT_BLACK);
// Check if labels should be drawn, with position tweaks
if (i % 25 == 0) {
// Calculate label positions
x0 = sx * (M_SIZE*100 + tl + 10) + M_SIZE*120;
y0 = sy * (M_SIZE*100 + tl + 10) + M_SIZE*150;
switch (i / 25) {
case -2: tft.drawCentreString("0", x0+4, y0-4, 1); break;
case -1: tft.drawCentreString("25", x0+2, y0, 1); break;
case 0: tft.drawCentreString("50", x0, y0, 1); break;
case 1: tft.drawCentreString("75", x0, y0, 1); break;
case 2: tft.drawCentreString("100", x0-2, y0-4, 1); break;
}
}
// Now draw the arc of the scale
sx = cos((i + 5 - 90) * 0.0174532925);
sy = sin((i + 5 - 90) * 0.0174532925);
x0 = sx * M_SIZE*100 + M_SIZE*120;
y0 = sy * M_SIZE*100 + M_SIZE*150;
// Draw scale arc, don't draw the last part
if (i < 50) tft.drawLine(x0, y0, x1, y1, TFT_BLACK);
}
tft.drawString("%RH", M_SIZE*(3 + 230 - 40), M_SIZE*(119 - 20), 2); // Units at bottom right
tft.drawCentreString("%RH", M_SIZE*120, M_SIZE*75, 4); // Comment out to avoid font 4
tft.drawRect(1, M_SIZE*3, M_SIZE*236, M_SIZE*126, TFT_BLACK); // Draw bezel line
plotNeedle(0, 0); // Put meter needle at 0
}
// #########################################################################
// Update needle position
// This function is blocking while needle moves, time depends on ms_delay
// 10ms minimises needle flicker if text is drawn within needle sweep area
// Smaller values OK if text not in sweep area, zero for instant movement but
// does not look realistic... (note: 100 increments for full scale deflection)
// #########################################################################
void plotNeedle(int value, byte ms_delay)
{
tft.setTextColor(TFT_BLACK, TFT_WHITE);
char buf[8]; dtostrf(value, 4, 0, buf);
tft.drawRightString(buf, 33, M_SIZE*(119 - 20), 2);
if (value < -10) value = -10; // Limit value to emulate needle end stops
if (value > 110) value = 110;
// Move the needle until new value reached
while (!(value == old_analog)) {
if (old_analog < value) old_analog++;
else old_analog--;
if (ms_delay == 0) old_analog = value; // Update immediately if delay is 0
float sdeg = map(old_analog, -10, 110, -150, -30); // Map value to angle
// Calculate tip of needle coords
float sx = cos(sdeg * 0.0174532925);
float sy = sin(sdeg * 0.0174532925);
// Calculate x delta of needle start (does not start at pivot point)
float tx = tan((sdeg + 90) * 0.0174532925);
// Erase old needle image
tft.drawLine(M_SIZE*(120 + 24 * ltx) - 1, M_SIZE*(150 - 24), osx - 1, osy, TFT_WHITE);
tft.drawLine(M_SIZE*(120 + 24 * ltx), M_SIZE*(150 - 24), osx, osy, TFT_WHITE);
tft.drawLine(M_SIZE*(120 + 24 * ltx) + 1, M_SIZE*(150 - 24), osx + 1, osy, TFT_WHITE);
// Re-plot text under needle
tft.setTextColor(TFT_BLACK, TFT_WHITE);
tft.drawCentreString("%RH", M_SIZE*120, M_SIZE*75, 4); // // Comment out to avoid font 4
// Store new needle end coords for next erase
ltx = tx;
osx = M_SIZE*(sx * 98 + 120);
osy = M_SIZE*(sy * 98 + 150);
// Draw the needle in the new postion, magenta makes needle a bit bolder
// draws 3 lines to thicken needle
tft.drawLine(M_SIZE*(120 + 24 * ltx) - 1, M_SIZE*(150 - 24), osx - 1, osy, TFT_RED);
tft.drawLine(M_SIZE*(120 + 24 * ltx), M_SIZE*(150 - 24), osx, osy, TFT_MAGENTA);
tft.drawLine(M_SIZE*(120 + 24 * ltx) + 1, M_SIZE*(150 - 24), osx + 1, osy, TFT_RED);
// Slow needle down slightly as it approaches new postion
if (abs(old_analog - value) < 10) ms_delay += ms_delay / 5;
// Wait before next update
delay(ms_delay);
}
}

View File

@@ -0,0 +1,70 @@
/*
Test the tft.print() viz embedded tft.write() function
This sketch used font 2, 4, 7
Make sure all the display driver and pin connections are correct by
editing the User_Setup.h file in the TFT_eSPI library folder.
Note that yield() or delay(0) must be called in long duration for/while
loops to stop the ESP8266 watchdog triggering.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
#########################################################################
*/
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
#define TFT_GREY 0x5AEB // New colour
void setup(void) {
tft.init();
tft.setRotation(1);
}
void loop() {
// Fill screen with grey so we can see the effect of printing with and without
// a background colour defined
tft.fillScreen(TFT_GREY);
// Set "cursor" at top left corner of display (0,0) and select font 2
// (cursor will move to next line automatically during printing with 'tft.println'
// or stay on the line is there is room for the text with tft.print)
tft.setCursor(0, 0, 2);
// Set the font colour to be white with a black background, set text size multiplier to 1
tft.setTextColor(TFT_WHITE,TFT_BLACK); tft.setTextSize(1);
// We can now plot text on screen using the "print" class
tft.println("Hello World!");
// Set the font colour to be yellow with no background, set to font 7
tft.setTextColor(TFT_YELLOW); tft.setTextFont(2);
tft.println(1234.56);
// Set the font colour to be red with black background, set to font 4
tft.setTextColor(TFT_RED,TFT_BLACK); tft.setTextFont(4);
tft.println((long)3735928559, HEX); // Should print DEADBEEF
// Set the font colour to be green with black background, set to font 2
tft.setTextColor(TFT_GREEN,TFT_BLACK);
tft.setTextFont(2);
tft.println("Groop");
// Test some print formatting functions
float fnumber = 123.45;
// Set the font colour to be blue with no background, set to font 2
tft.setTextColor(TFT_BLUE); tft.setTextFont(2);
tft.print("Float = "); tft.println(fnumber); // Print floating point number
tft.print("Binary = "); tft.println((int)fnumber, BIN); // Print as integer value in binary
tft.print("Hexadecimal = "); tft.println((int)fnumber, HEX); // Print as integer number in Hexadecimal
while(1) yield(); // We must yield() to stop a watchdog timeout.
}

View File

@@ -0,0 +1,127 @@
/*
An example showing rainbow colours on a 1.8" TFT LCD screen
and to show a basic example of font use.
Make sure all the display driver and pin connections are correct by
editing the User_Setup.h file in the TFT_eSPI library folder.
Note that yield() or delay(0) must be called in long duration for/while
loops to stop the ESP8266 watchdog triggering.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
#########################################################################
*/
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
unsigned long targetTime = 0;
byte red = 31;
byte green = 0;
byte blue = 0;
byte state = 0;
unsigned int colour = red << 11;
void setup(void) {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
targetTime = millis() + 1000;
}
void loop() {
if (targetTime < millis()) {
targetTime = millis() + 10000;
// Colour changing state machine
for (int i = 0; i < 160; i++) {
tft.drawFastVLine(i, 0, tft.height(), colour);
switch (state) {
case 0:
green += 2;
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 -= 2;
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;
}
colour = red << 11 | green << 5 | blue;
}
// The standard ADAFruit font still works as before
tft.setTextColor(TFT_BLACK);
tft.setCursor (12, 5);
tft.print("Original ADAfruit font!");
// The new larger fonts do not use the .setCursor call, coords are embedded
tft.setTextColor(TFT_BLACK, TFT_BLACK); // Do not plot the background colour
// Overlay the black text on top of the rainbow plot (the advantage of not drawing the backgorund colour!)
tft.drawCentreString("Font size 2", 80, 14, 2); // Draw text centre at position 80, 12 using font 2
//tft.drawCentreString("Font size 2",81,12,2); // Draw text centre at position 80, 12 using font 2
tft.drawCentreString("Font size 4", 80, 30, 4); // Draw text centre at position 80, 24 using font 4
tft.drawCentreString("12.34", 80, 54, 6); // Draw text centre at position 80, 24 using font 6
tft.drawCentreString("12.34 is in font size 6", 80, 92, 2); // Draw text centre at position 80, 90 using font 2
// Note the x position is the top left of the font!
// draw a floating point number
float pi = 3.14159; // Value to print
int precision = 3; // Number of digits after decimal point
int xpos = 50; // x position
int ypos = 110; // y position
int font = 2; // font number only 2,4,6,7 valid. Font 6 only contains characters [space] 0 1 2 3 4 5 6 7 8 9 0 : a p m
xpos += tft.drawFloat(pi, precision, xpos, ypos, font); // Draw rounded number and return new xpos delta for next print position
tft.drawString(" is pi", xpos, ypos, font); // Continue printing from new x position
}
}

View File

@@ -0,0 +1,212 @@
// Sketch to display images on a 160 x 128 TFT
// Renders images stored in an array in program (FLASH)
// The JPEG images are stored in header files (see jpeg1.h etc)
// As well as the TFT_eSPI library:
// https://github.com/Bodmer/TFT_eSPI
// the sketch needs the JPEG Decoder library. This can be loaded via the Library Manager.
// or can be downloaded here:
// https://github.com/Bodmer/JPEGDecoder
//----------------------------------------------------------------------------------------------------
#include <SPI.h>
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
// JPEG decoder library
#include <JPEGDecoder.h>
// Return the minimum of two values a and b
#define minimum(a,b) (((a) < (b)) ? (a) : (b))
// Include the sketch header file that contains the image stored as an array of bytes
// More than one image array could be stored in each header file.
#include "jpeg1.h"
#include "jpeg2.h"
#include "jpeg3.h"
#include "jpeg4.h"
// Count how many times the image is drawn for test purposes
uint32_t icount = 0;
//----------------------------------------------------------------------------------------------------
//####################################################################################################
// Setup
//####################################################################################################
void setup() {
Serial.begin(115200);
tft.begin();
}
//####################################################################################################
// Main loop
//####################################################################################################
void loop() {
tft.setRotation(0); // portrait
tft.fillScreen(TFT_BLACK);
drawArrayJpeg(EagleEye, sizeof(EagleEye), 0, 16); // Draw a jpeg image stored in memory at x,y
delay(2000);
tft.setRotation(0); // portrait
tft.fillScreen(TFT_BLACK);
drawArrayJpeg(Tiger, sizeof(Tiger), 4, 0); // Draw a jpeg image stored in memory
delay(2000);
tft.setRotation(1); // landscape
tft.fillScreen(TFT_BLACK);
drawArrayJpeg(Baboon, sizeof(Baboon), 0, 4); // Draw a jpeg image stored in memory
delay(2000);
tft.setRotation(1); // landscape
tft.fillScreen(TFT_BLACK);
drawArrayJpeg(Mouse160, sizeof(Mouse160), 0, 11); // Draw a jpeg image stored in memory
delay(2000);
}
//####################################################################################################
// Draw a JPEG on the TFT pulled from a program memory array
//####################################################################################################
void drawArrayJpeg(const uint8_t arrayname[], uint32_t array_size, int xpos, int ypos) {
int x = xpos;
int y = ypos;
JpegDec.decodeArray(arrayname, array_size);
jpegInfo(); // Print information from the JPEG file (could comment this line out)
renderJPEG(x, y);
Serial.println("#########################");
}
//####################################################################################################
// Draw a JPEG on the TFT, images will be cropped on the right/bottom sides if they do not fit
//####################################################################################################
// This function assumes xpos,ypos is a valid screen coordinate. For convenience images that do not
// fit totally on the screen are cropped to the nearest MCU size and may leave right/bottom borders.
void renderJPEG(int xpos, int ypos) {
// retrieve infomration about the image
uint16_t *pImg;
uint16_t mcu_w = JpegDec.MCUWidth;
uint16_t mcu_h = JpegDec.MCUHeight;
uint32_t max_x = JpegDec.width;
uint32_t max_y = JpegDec.height;
// Jpeg images are draw as a set of image block (tiles) called Minimum Coding Units (MCUs)
// Typically these MCUs are 16x16 pixel blocks
// Determine the width and height of the right and bottom edge image blocks
uint32_t min_w = minimum(mcu_w, max_x % mcu_w);
uint32_t min_h = minimum(mcu_h, max_y % mcu_h);
// save the current image block size
uint32_t win_w = mcu_w;
uint32_t win_h = mcu_h;
// record the current time so we can measure how long it takes to draw an image
uint32_t drawTime = millis();
// save the coordinate of the right and bottom edges to assist image cropping
// to the screen size
max_x += xpos;
max_y += ypos;
// read each MCU block until there are no more
while (JpegDec.readSwappedBytes()) {
// save a pointer to the image block
pImg = JpegDec.pImage ;
// calculate where the image block should be drawn on the screen
int mcu_x = JpegDec.MCUx * mcu_w + xpos; // Calculate coordinates of top left corner of current MCU
int mcu_y = JpegDec.MCUy * mcu_h + ypos;
// check if the image block size needs to be changed for the right edge
if (mcu_x + mcu_w <= max_x) win_w = mcu_w;
else win_w = min_w;
// check if the image block size needs to be changed for the bottom edge
if (mcu_y + mcu_h <= max_y) win_h = mcu_h;
else win_h = min_h;
// copy pixels into a contiguous block
if (win_w != mcu_w)
{
uint16_t *cImg;
int p = 0;
cImg = pImg + win_w;
for (int h = 1; h < win_h; h++)
{
p += mcu_w;
for (int w = 0; w < win_w; w++)
{
*cImg = *(pImg + w + p);
cImg++;
}
}
}
// draw image MCU block only if it will fit on the screen
if (( mcu_x + win_w ) <= tft.width() && ( mcu_y + win_h ) <= tft.height())
{
tft.pushRect(mcu_x, mcu_y, win_w, win_h, pImg);
}
else if ( (mcu_y + win_h) >= tft.height()) JpegDec.abort(); // Image has run off bottom of screen so abort decoding
}
// calculate how long it took to draw the image
drawTime = millis() - drawTime;
// print the results to the serial port
Serial.print(F( "Total render time was : ")); Serial.print(drawTime); Serial.println(F(" ms"));
Serial.println(F(""));
}
//####################################################################################################
// Print image information to the serial port (optional)
//####################################################################################################
void jpegInfo() {
Serial.println(F("==============="));
Serial.println(F("JPEG image info"));
Serial.println(F("==============="));
Serial.print(F( "Width :")); Serial.println(JpegDec.width);
Serial.print(F( "Height :")); Serial.println(JpegDec.height);
Serial.print(F( "Components :")); Serial.println(JpegDec.comps);
Serial.print(F( "MCU / row :")); Serial.println(JpegDec.MCUSPerRow);
Serial.print(F( "MCU / col :")); Serial.println(JpegDec.MCUSPerCol);
Serial.print(F( "Scan type :")); Serial.println(JpegDec.scanType);
Serial.print(F( "MCU width :")); Serial.println(JpegDec.MCUWidth);
Serial.print(F( "MCU height :")); Serial.println(JpegDec.MCUHeight);
Serial.println(F("==============="));
}
//####################################################################################################
// Show the execution time (optional)
//####################################################################################################
// WARNING: for UNO/AVR legacy reasons printing text to the screen with the Mega might not work for
// sketch sizes greater than ~70KBytes because 16 bit address pointers are used in some libraries.
// The Due will work fine with the HX8357_Due library.
void showTime(uint32_t msTime) {
//tft.setCursor(0, 0);
//tft.setTextFont(1);
//tft.setTextSize(2);
//tft.setTextColor(TFT_WHITE, TFT_BLACK);
//tft.print(F(" JPEG drawn in "));
//tft.print(msTime);
//tft.println(F(" ms "));
Serial.print(F(" JPEG drawn in "));
Serial.print(msTime);
Serial.println(F(" ms "));
}

View File

@@ -0,0 +1,211 @@
// We need this header file to use FLASH as storage with PROGMEM directive
const uint8_t EagleEye[] PROGMEM = {
0xFF,0xD8,0xFF,0xE0,0x00,0x10,0x4A,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x00,0xB4,0x00,0xB4,0x00,0x00,0xFF,0xDB,0x00,0x43,0x00,0x04,0x03,0x03,0x03,0x03,0x02,0x04,
0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x06,0x0A,0x06,0x06,0x05,0x05,0x06,0x0C,0x08,0x09,0x07,0x0A,0x0E,0x0C,0x0F,0x0E,0x0E,0x0C,0x0D,0x0D,0x0F,0x11,0x16,0x13,0x0F,
0x10,0x15,0x11,0x0D,0x0D,0x13,0x1A,0x13,0x15,0x17,0x18,0x19,0x19,0x19,0x0F,0x12,0x1B,0x1D,0x1B,0x18,0x1D,0x16,0x18,0x19,0x18,0xFF,0xDB,0x00,0x43,0x01,0x04,0x04,
0x04,0x06,0x05,0x06,0x0B,0x06,0x06,0x0B,0x18,0x10,0x0D,0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xC0,
0x00,0x11,0x08,0x00,0x80,0x00,0x80,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,0xFF,0xC4,0x00,0x1D,0x00,0x00,0x03,0x01,0x00,0x03,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,0x07,0x04,0x02,0x03,0x08,0x01,0x09,0x00,0xFF,0xC4,0x00,0x3F,0x10,0x00,0x02,0x01,0x02,0x04,0x03,0x06,0x05,0x01,0x05,0x07,
0x03,0x05,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x11,0x00,0x05,0x12,0x21,0x06,0x31,0x41,0x13,0x14,0x22,0x51,0x61,0x71,0x07,0x32,0x81,0x91,0xA1,0xB1,0x23,0x42,0xC1,
0xD1,0xF0,0x15,0x24,0x25,0x33,0x52,0x62,0x72,0x08,0x34,0x92,0x16,0x43,0x53,0xA2,0xE1,0xFF,0xC4,0x00,0x1A,0x01,0x00,0x02,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x01,0x04,0x05,0x06,0xFF,0xC4,0x00,0x28,0x11,0x00,0x02,0x02,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x02,0x00,0x11,0x03,0x04,0x12,0x21,0x31,0x13,0x05,0x22,0x32,0x41,0x51,0x14,0x15,0x61,0x71,0x81,0x91,0xFF,0xDA,0x00,0x0C,0x03,0x01,0x00,0x02,0x11,
0x03,0x11,0x00,0x3F,0x00,0x6C,0x4C,0xFE,0x4C,0xAB,0x2B,0x4A,0x65,0xB5,0x2B,0x01,0x74,0x58,0x90,0x24,0x30,0x13,0x6D,0xEC,0x3F,0x7B,0xD7,0x9E,0x34,0x53,0xE7,0x51,
0x8D,0x15,0x11,0x42,0xD3,0x4A,0xA7,0x50,0x91,0x9F,0x48,0x66,0xF3,0x37,0xDC,0x9F,0xA7,0xDB,0x13,0xFC,0xE3,0x3D,0xA0,0xAC,0xCC,0x84,0x39,0x74,0x46,0x34,0x43,0x76,
0x9A,0x49,0x0B,0x28,0x3E,0xE4,0x0B,0xFD,0x00,0xF7,0x38,0x6B,0xE1,0x9C,0xF3,0x86,0x29,0x20,0x66,0xAB,0xA4,0x7A,0xD9,0x2C,0x2F,0x34,0xB2,0x68,0x43,0x6F,0xF7,0x58,
0x9B,0x7A,0x2E,0x38,0xAE,0x8C,0x00,0x27,0xB9,0xE8,0x43,0x83,0xF1,0x8C,0x73,0x71,0xB5,0x5E,0x59,0x46,0x8F,0x57,0x2B,0xB9,0x67,0x2B,0xD8,0xC7,0xE1,0xD4,0x4E,0xFC,
0xB9,0x91,0xEA,0xD8,0x16,0x2B,0xF3,0xEE,0x28,0xAA,0x4E,0xF3,0x53,0xDD,0x29,0x57,0x60,0x01,0x0A,0xAA,0x3F,0x4C,0x0B,0xAA,0xCD,0x78,0x4E,0x59,0x5E,0x70,0x89,0x08,
0x0D,0x71,0x69,0x1D,0x8F,0x3E,0x40,0xB3,0x1D,0xBD,0x80,0xC6,0xCA,0x0C,0xDE,0x3A,0x97,0x58,0xF2,0xAC,0xBA,0x5A,0x89,0x01,0xBA,0xEA,0x21,0x45,0xFA,0x1F,0x15,0xB0,
0x46,0xEB,0x88,0x3C,0x5D,0xCA,0x77,0x08,0xC1,0x96,0xE5,0x71,0xDB,0x2D,0x53,0x99,0x56,0x1E,0x73,0xB8,0x2B,0x1A,0x1E,0x5F,0x31,0xDD,0xBA,0xF2,0xBF,0x2E,0x78,0x25,
0x9B,0xE7,0xD9,0x95,0x04,0xD2,0x45,0x51,0x53,0x1B,0x80,0x36,0x85,0x06,0x94,0x3E,0x44,0x8F,0xE7,0x7C,0x22,0xC3,0x98,0x71,0x7D,0x2C,0x5A,0xCF,0x78,0x90,0x91,0xA7,
0xB1,0xA0,0x84,0x39,0xFF,0x00,0xC8,0x9E,0x9E,0x98,0x5C,0xAE,0xE2,0x5A,0xE3,0x9C,0x32,0x54,0x43,0x1D,0x35,0x41,0xF9,0x9A,0xA9,0x8C,0x92,0xDB,0xD5,0x4D,0xBF,0x8E,
0x23,0x29,0x65,0xAB,0x90,0x28,0xBB,0x8F,0xA2,0xBA,0xA3,0x36,0x74,0x7A,0xFE,0xED,0x28,0x53,0xE0,0x1F,0x30,0x51,0xE9,0x7B,0x5B,0xEF,0x86,0x38,0x33,0x7C,0xAF,0x26,
0xA4,0x12,0x54,0xB8,0x43,0x7D,0xA3,0x45,0x63,0xF8,0x17,0xFD,0x31,0x32,0xCB,0x12,0x7A,0xA9,0xE3,0xED,0xE6,0xCD,0x24,0x57,0x5D,0x43,0xB0,0x8C,0x42,0xBF,0xC3,0x0D,
0xB1,0x65,0x19,0x3C,0x22,0x36,0x58,0xC0,0x95,0xB9,0x34,0xB5,0x57,0x72,0x3D,0xB4,0x9B,0xF3,0xF3,0xC6,0x73,0x8C,0x77,0x77,0x1F,0xB8,0x9E,0x2A,0x30,0xBF,0x1B,0x65,
0x95,0xF2,0x68,0x8B,0x2E,0xA9,0xA9,0x07,0xE5,0x09,0x12,0xED,0xEA,0x4B,0x72,0xFB,0x1C,0x74,0xD7,0xAA,0x66,0x8C,0xAD,0x0F,0x0E,0x18,0x85,0xB7,0x33,0x4C,0x01,0xF5,
0xE5,0xB7,0xF5,0xB6,0x08,0x65,0xD4,0x70,0x50,0x46,0xB2,0x99,0x69,0x5A,0xE2,0xDD,0x98,0x4B,0x11,0xEB,0x72,0x6D,0xF8,0xC0,0x3E,0x2E,0xCF,0xF8,0x96,0x29,0x0C,0x79,
0x5E,0x4F,0x2C,0xF1,0xA7,0x36,0xA7,0xF1,0x93,0xCB,0xA5,0xBF,0x43,0xE7,0x82,0xC6,0x87,0x20,0xA6,0x13,0x3E,0x43,0xB5,0xB8,0x87,0x68,0xF8,0x46,0x86,0x37,0xED,0x99,
0xE1,0xA6,0x52,0x05,0x83,0x48,0xD2,0x8F,0xD4,0x5B,0x04,0x64,0xAF,0xCA,0x28,0xA1,0xEC,0x19,0xA9,0xE7,0xD3,0x71,0xFB,0x32,0x14,0x7B,0xD9,0xAE,0x3F,0x18,0x90,0xD3,
0xF1,0x07,0x12,0x55,0x32,0xC3,0x36,0x4B,0x99,0x87,0xE4,0x5A,0x65,0x65,0x00,0x7E,0x76,0xC1,0x24,0xCB,0xEB,0xEA,0xC7,0x69,0xA2,0x9A,0x26,0x03,0x70,0xDA,0x98,0xAE,
0xDB,0x78,0x74,0x8C,0x3B,0xC7,0x8D,0x20,0x16,0x66,0xEC,0xC7,0xF7,0xCC,0x32,0xAA,0x98,0x13,0xB2,0x9F,0xBB,0x9B,0xEC,0x4C,0xAB,0x6F,0xB0,0x00,0x63,0x1B,0x45,0x54,
0x6A,0xC2,0xD1,0x66,0x54,0x73,0x5B,0x61,0x78,0xF5,0x7E,0x16,0xC4,0xE1,0x6B,0x2E,0xA7,0xAA,0xE4,0x66,0x85,0x82,0x90,0x35,0x0A,0x57,0x52,0x3E,0xAC,0x45,0xF1,0x40,
0xE1,0xBC,0xB2,0xA9,0xA4,0xED,0x66,0xAB,0x6E,0x7F,0x2C,0x8D,0x1A,0xED,0xE9,0xCC,0x81,0x84,0xDA,0xB9,0xDA,0x3B,0x8C,0x2A,0x71,0x8B,0x33,0xEE,0x55,0x3F,0x11,0x51,
0x80,0xC6,0x92,0x9A,0x7B,0xF5,0x55,0x74,0xFB,0x82,0x76,0xC3,0x1B,0x4F,0x57,0x55,0x02,0x3E,0x61,0x45,0xDD,0x5C,0x7F,0xF1,0xB9,0x03,0xF4,0xC1,0x25,0x80,0x0A,0x62,
0xAC,0xE2,0xE3,0x90,0x49,0x2E,0x48,0xFC,0x60,0x64,0xF4,0xF4,0x82,0x76,0x92,0xA6,0xB0,0xA5,0x8E,0xA1,0xAD,0x98,0xFE,0x3F,0x96,0x36,0x10,0x55,0x6A,0x63,0x2E,0x1D,
0xAE,0x7E,0x7D,0x51,0xD3,0xB4,0xD6,0x73,0x3A,0xA2,0xAA,0x8B,0xEA,0x60,0xA1,0x47,0x4F,0x7C,0x74,0xD5,0xF6,0xB3,0x59,0x1E,0xAE,0x48,0x69,0xD7,0x90,0x06,0xDA,0xCD,
0xF9,0x91,0x84,0x61,0x98,0x66,0x51,0x47,0xFE,0x61,0x13,0x11,0xB1,0x3F,0x2C,0x6B,0xE6,0x3D,0x7D,0x71,0xB3,0x2D,0xCC,0xEA,0xAA,0x67,0x58,0xA9,0xEA,0x43,0x48,0xA7,
0x79,0x0B,0x02,0x47,0xFC,0x6F,0xD7,0x0C,0x08,0x3B,0x26,0x5A,0xBD,0xFB,0x40,0x8D,0x75,0x93,0xCB,0x96,0x4B,0x1B,0xB4,0x33,0x3A,0xBF,0xCA,0xEE,0xA4,0x29,0xFA,0x9C,
0x14,0xCB,0xF8,0xD4,0xE5,0xCD,0x18,0x92,0x46,0x0D,0x20,0xF9,0x23,0x3A,0x40,0xFE,0x38,0x51,0xAF,0x6C,0xC2,0xB2,0xAF,0xFC,0x63,0x32,0x96,0x8E,0x25,0x5F,0xD9,0x40,
0xCD,0xDA,0xC8,0xC7,0xD8,0x72,0xBE,0x30,0x35,0x05,0x5C,0x68,0xD3,0x35,0x35,0x5C,0x3B,0x17,0x43,0xD9,0x30,0x24,0x0F,0x32,0x05,0xC7,0xBE,0x2F,0xD8,0xDC,0x42,0xDC,
0x54,0xCB,0x1D,0x07,0x19,0x33,0x09,0x0A,0xD3,0x42,0x74,0x8D,0x5A,0xAA,0x5D,0xA4,0x22,0xDB,0xEC,0x09,0xFE,0xAF,0x8E,0xEA,0x4E,0x31,0xCB,0x2B,0xA6,0x96,0xB3,0x30,
0xA6,0x7A,0x7D,0x3E,0x18,0xE4,0x89,0x82,0xDC,0xF2,0x1E,0x1D,0x0D,0xF6,0xBE,0x22,0x19,0x6D,0x5D,0x29,0xAB,0x59,0x59,0x65,0xED,0x6E,0x3C,0x08,0xAD,0xEF,0xBD,0xAE,
0x6F,0xF7,0xC3,0x6D,0x33,0xD0,0xD4,0x65,0x8D,0x98,0x4B,0x9B,0xA2,0x44,0xAD,0x74,0x11,0xC7,0xA9,0xD1,0xB9,0xE9,0x3A,0xD6,0xE0,0xFA,0x83,0x84,0x38,0x17,0x40,0x43,
0x5C,0x97,0xF7,0x1E,0x33,0x5F,0x88,0xD9,0x9E,0x52,0xE2,0x28,0x29,0xE6,0x70,0xC4,0x30,0xED,0xA5,0xB1,0xD2,0x7F,0xDA,0x1B,0x9F,0xD0,0x60,0x52,0xF1,0xF5,0x45,0x4D,
0x72,0xB4,0x94,0x72,0x76,0x8D,0xF3,0x33,0x35,0xC1,0xFF,0x00,0xEB,0x8E,0xBC,0xA3,0x84,0x32,0x1C,0xFF,0x00,0x34,0x12,0xE6,0x39,0xAC,0xBA,0x19,0x75,0x42,0xF3,0x96,
0x0D,0x25,0xC1,0xF0,0x8E,0x45,0x8D,0xF6,0xD9,0x85,0xB0,0x53,0x87,0xFE,0x12,0x66,0xF2,0xD0,0x87,0xAF,0xA8,0x31,0x33,0xC8,0x58,0xA3,0xF6,0xEA,0xF1,0xA0,0xF9,0x5E,
0xF7,0xD3,0xE2,0x07,0xCC,0xE2,0x0C,0xB8,0xD5,0x68,0xC0,0x39,0x0D,0xF7,0x0B,0x1E,0x3B,0xA3,0xA4,0xA6,0x88,0xD4,0x45,0x40,0x8D,0x6B,0x18,0x96,0x7B,0xCB,0x6F,0x3D,
0x27,0x97,0xDB,0x02,0xF8,0x83,0x8E,0xA4,0xAE,0x30,0xC2,0xCE,0xBD,0xD9,0xFC,0x49,0xFD,0xDB,0x5E,0xA1,0xD0,0x8F,0x5E,0x9B,0x61,0xB3,0x3A,0xF8,0x6D,0xC3,0x51,0xF0,
0xAF,0x7C,0xCF,0xA5,0xA7,0xA4,0x68,0x63,0x11,0xB1,0x39,0x99,0x9C,0x97,0x0D,0xE2,0x6B,0x6C,0xA3,0x62,0x06,0xDB,0x6D,0x89,0xFD,0x63,0x7C,0x2B,0xA3,0xA2,0x96,0x0A,
0x4C,0xF5,0x83,0xB4,0x80,0x04,0x17,0x7F,0x08,0xBE,0xE0,0xA9,0x21,0x6D,0xB7,0x53,0x7C,0x2C,0xE7,0x50,0x7E,0x26,0x4D,0xD7,0x0B,0xE5,0xFC,0x44,0xD0,0xD2,0xAD,0x5D,
0x3C,0xB7,0x2A,0x6C,0xC8,0xF9,0x7C,0x8D,0xA4,0x79,0x9E,0x60,0x72,0xC1,0x78,0x3E,0x24,0x66,0x46,0x99,0x52,0x9A,0x90,0x37,0x8F,0x79,0x2C,0xD1,0xDF,0xA5,0xAE,0x0F,
0xF0,0xC2,0x36,0x7B,0x59,0x92,0x54,0xE4,0xD0,0x8E,0x1C,0xCE,0x24,0x16,0x90,0xDA,0x15,0x0F,0x21,0x03,0x50,0x08,0xB7,0x64,0xE7,0xB9,0xE5,0xCF,0x6C,0x64,0xA6,0xE2,
0x3E,0x23,0xC8,0x62,0x9E,0x91,0xE7,0xCC,0xDD,0x67,0x43,0x1C,0xF1,0xC9,0x01,0x4D,0x26,0xD7,0x17,0x0E,0x01,0x3B,0x5A,0xDC,0xBD,0x0E,0x2D,0x33,0x06,0xEC,0x57,0xF7,
0x08,0x19,0x6B,0xE1,0xDF,0x89,0x52,0x41,0x28,0x6A,0xBA,0x07,0x7B,0x9B,0xB3,0x77,0x99,0x0A,0xFD,0x80,0xC5,0x4B,0x27,0xF8,0x90,0xAE,0x8B,0x28,0xA7,0xAC,0x89,0x58,
0xD8,0x2B,0x90,0x76,0xF3,0x1A,0x80,0xDB,0x1E,0x38,0xA3,0xE3,0xE9,0xA9,0xEA,0xDE,0x9E,0xAB,0x30,0x92,0x32,0x48,0x67,0x8E,0xA0,0x58,0xF2,0xD8,0x5A,0xDF,0xCF,0x0F,
0xDC,0x3F,0xC6,0x94,0x91,0xCC,0xB3,0xC9,0x11,0x64,0xD8,0x93,0x4E,0x74,0x10,0x3A,0x9D,0x8D,0xFF,0x00,0xAF,0xBD,0x32,0x6D,0xF7,0x28,0x8D,0x52,0x1B,0xE5,0x3D,0x79,
0x45,0xC4,0xCF,0x57,0x0A,0x34,0xBD,0xA6,0x96,0xB7,0xCC,0xA8,0x30,0x41,0xA2,0xEF,0xA8,0xAD,0x0D,0x9D,0x41,0xB9,0x54,0x09,0xAA,0xFE,0x63,0x7C,0x79,0xEB,0x23,0xE3,
0x5C,0xBE,0x4A,0xB5,0xEE,0x55,0xE5,0x37,0x04,0xAF,0x6A,0x41,0x07,0x6B,0x8D,0xD4,0x79,0xF3,0xC3,0xC5,0x2F,0x14,0xF1,0x0C,0x35,0x62,0x65,0x68,0x2A,0x69,0x24,0x6B,
0x45,0x22,0x11,0xA8,0xFF,0x00,0xCB,0xC5,0xB7,0x5E,0x57,0xC2,0xEC,0xB7,0xCA,0x51,0xC4,0x3B,0x49,0xF9,0xED,0x3E,0x70,0xD9,0x92,0xA5,0x2C,0xBA,0xBB,0x15,0x16,0x62,
0x16,0xC5,0x8F,0x3F,0x61,0xF9,0xC6,0xAC,0x86,0xA7,0x23,0x6A,0xBE,0xC2,0xBA,0x29,0x52,0x21,0x20,0x01,0x52,0x75,0x82,0xEB,0xFE,0xE6,0x20,0xD8,0x7B,0x60,0xD4,0x7C,
0x1B,0x05,0x54,0x81,0x23,0x65,0x65,0x06,0xC8,0x81,0x77,0xBF,0x9B,0x1E,0x40,0x13,0x7E,0xBC,0x94,0xE3,0x54,0xDF,0x0E,0x65,0x34,0xAE,0x91,0xEA,0xD6,0x00,0xDA,0x35,
0xDD,0xCF,0x41,0xA8,0xF3,0x3B,0xF2,0xFE,0x44,0xE3,0x5F,0x95,0x07,0x13,0x10,0xF2,0x5D,0xCE,0x72,0xF1,0x05,0x3A,0x67,0xE8,0x94,0xEB,0x96,0x42,0xB4,0xC8,0x4D,0x3A,
0x51,0xCA,0xAA,0xC6,0xE3,0xAB,0xE9,0x21,0x8F,0x2F,0x5F,0x2C,0x2F,0x56,0x71,0x44,0x94,0xAE,0xD3,0x0E,0xCE,0xAD,0xA4,0x3E,0x28,0x1A,0x47,0x5E,0xCC,0xF5,0xBD,0xAD,
0xCF,0xD3,0x03,0x6B,0x78,0x52,0xA2,0x87,0x3D,0x8B,0x2E,0x94,0x3A,0x55,0x1D,0xCA,0x75,0xB9,0x36,0x03,0xFA,0xF2,0xC7,0xDA,0x8E,0x1C,0xAA,0xA7,0x6E,0xCE,0x4A,0x49,
0xA5,0x62,0xDA,0x2E,0xA2,0xE0,0x7B,0x7A,0xEC,0x70,0x40,0xE3,0xAE,0x24,0x3B,0xCC,0x21,0x9A,0x7C,0x42,0x97,0x30,0xA2,0x8A,0x08,0xF2,0xB4,0x85,0xE3,0x42,0x9A,0xE3,
0x95,0xEC,0x56,0xE3,0xC2,0x7D,0x2C,0x2C,0x05,0xFE,0xF8,0x15,0xFF,0x00,0xAB,0xB3,0xB9,0x68,0xFB,0x80,0x82,0x9C,0xD3,0x10,0x08,0x8B,0xB2,0xBE,0x9B,0x0B,0x6D,0xD7,
0x05,0xE9,0x38,0x58,0xC3,0x34,0x5D,0xF2,0x07,0x90,0x3E,0xA3,0xDD,0xB5,0x69,0xD1,0xE1,0xD8,0x9D,0xB9,0x83,0x63,0x6F,0xA6,0x0F,0x49,0x43,0x94,0xF0,0xCD,0x1D,0x25,
0x7C,0xD1,0xC1,0x52,0xEC,0xCC,0x86,0x89,0xD7,0xC6,0xC2,0xC7,0xC6,0xDF,0xE9,0x1B,0xFD,0xC0,0xB6,0x33,0xE6,0xD4,0xE3,0x43,0xB0,0x0B,0x63,0x2D,0x70,0xB1,0x16,0x62,
0xF5,0x1E,0x69,0xC6,0x89,0x45,0x04,0x89,0x53,0xDC,0xA9,0x20,0xBA,0xAC,0x85,0x40,0x45,0xBD,0xCD,0x8D,0xF9,0xF5,0xDB,0xD4,0xE3,0x7C,0x5F,0x15,0x38,0xBF,0x2B,0x83,
0xB1,0xA7,0xE3,0x0C,0xDC,0xFE,0xD0,0x3B,0xA5,0x34,0xA6,0x34,0x20,0x0B,0x0D,0xC1,0x1B,0x5B,0x60,0x2D,0x6C,0x2F,0xE6,0x95,0x99,0x8E,0x65,0x53,0x23,0x54,0x3B,0x08,
0x8D,0x99,0x63,0x4F,0x0A,0x2E,0xDB,0x58,0x60,0x34,0xB4,0xF5,0x0B,0x24,0x61,0xE0,0x91,0x9E,0x4E,0x5B,0x6C,0x70,0x78,0x6D,0xBE,0x47,0xFE,0x4A,0x6D,0xA0,0xD0,0x11,
0xC3,0x31,0xF8,0x85,0x26,0x7B,0x57,0x5B,0x98,0x67,0x09,0x2E,0x61,0x23,0x69,0x58,0xCD,0x75,0x4B,0xBB,0xA7,0x4D,0xBC,0xEC,0x07,0xE4,0x63,0x66,0x53,0xC7,0x19,0x04,
0x15,0x90,0xCF,0x2E,0x40,0x22,0x2A,0x82,0x30,0xD1,0xA8,0x22,0xDA,0xAF,0xA8,0xFF,0x00,0xA8,0xDB,0x6C,0x29,0x47,0x96,0x39,0x81,0x5E,0x4A,0x29,0x2E,0x08,0x36,0x55,
0xBE,0xDE,0xB8,0x68,0xCA,0x78,0x7F,0xBF,0x00,0x05,0x2B,0x20,0x41,0x73,0x6B,0x5F,0x7C,0x2B,0x2A,0xE1,0xA3,0x66,0xBF,0xD9,0x6A,0xEC,0x7E,0xA3,0xFE,0x51,0xC5,0x9C,
0x15,0x57,0x9B,0xCB,0x3C,0x35,0x42,0x3B,0x21,0x65,0x86,0xA5,0x01,0xD6,0xED,0xD0,0x93,0xBD,0xAE,0x39,0xF3,0x00,0xFD,0x70,0xF8,0xB5,0x14,0xD5,0x73,0x45,0x4D,0x31,
0x8E,0xA6,0x1A,0xB5,0xBA,0x4A,0x8C,0x16,0xD2,0x03,0x76,0xD8,0xFE,0xF0,0x06,0xD7,0xE4,0x6F,0xCF,0x12,0x84,0xF8,0x6B,0x0D,0x7E,0x46,0x64,0x89,0x94,0x55,0xA8,0xED,
0x07,0x69,0xE1,0xE9,0xC8,0x1F,0x3E,0x7D,0x77,0xBE,0x30,0x49,0xC4,0x12,0x77,0xEA,0x2C,0x9A,0xB2,0x8A,0x3C,0xAA,0xA2,0x8A,0x11,0x02,0x4F,0x48,0x8D,0x79,0x8F,0xFA,
0xA4,0x04,0x95,0x24,0x8F,0x20,0x09,0xF3,0xC0,0x63,0xC0,0x1C,0x56,0x33,0x7F,0xDC,0x22,0xF5,0xF2,0xE2,0x51,0x73,0x0E,0x07,0xCB,0x33,0xAA,0x9B,0x3D,0x22,0x39,0x3A,
0x9D,0x2A,0x15,0x4B,0x12,0x3C,0x88,0xD8,0x9E,0x77,0xB0,0xF2,0xB5,0xB1,0x3A,0xE2,0x2C,0x8B,0x33,0xE1,0xBC,0xDB,0xBA,0x52,0x4F,0xDB,0x22,0x3E,0xAE,0xCA,0x32,0x43,
0x80,0x3A,0x8E,0xA0,0x60,0xEF,0x0E,0x7C,0x4B,0x8A,0x8F,0x88,0x57,0x27,0xCC,0x2A,0x7B,0x78,0x89,0x55,0xEF,0x40,0x59,0x5C,0x5B,0x90,0x07,0xE5,0xDC,0xEF,0xFF,0x00,
0xEE,0x2B,0x39,0x9F,0x09,0xE5,0x3C,0x57,0x90,0xD2,0xE6,0x80,0xB3,0xA8,0x1E,0x3B,0xD8,0x9D,0x82,0x8B,0x5C,0x1B,0x81,0xB8,0xE5,0xBF,0xA1,0xC5,0x2E,0x53,0x89,0xB6,
0x34,0x7E,0xC2,0x46,0xE1,0xCC,0x85,0xE4,0x7C,0x4D,0x9E,0x51,0xA0,0x44,0xA9,0x66,0x76,0xBD,0x8C,0xBE,0x19,0x06,0xE3,0x91,0x3F,0x5E,0x58,0xA3,0x70,0xF7,0x12,0x55,
0x55,0x65,0xEA,0xF0,0xD6,0x97,0x2B,0xE2,0x54,0x9A,0xEC,0x09,0xB5,0x8A,0xDF,0x9A,0x9E,0x83,0x6F,0x2C,0x04,0xAE,0xE0,0x81,0x4D,0x9A,0x3A,0xC3,0x0C,0xDA,0x54,0xD9,
0x22,0xAA,0x6B,0xA8,0x17,0xBF,0x86,0x51,0xB5,0xEF,0xEC,0x7D,0xF0,0x22,0x6A,0x15,0xA0,0x83,0x55,0x33,0x3E,0xAD,0x64,0xDD,0x0F,0x8E,0x3E,0x5B,0x6F,0xD3,0x0E,0x39,
0x15,0x87,0x12,0xD7,0xDA,0x79,0x94,0x8A,0x5E,0x19,0x96,0x8E,0x7E,0xDD,0xE0,0xED,0x5A,0xA1,0x89,0xD2,0xAB,0x7B,0xE9,0xB8,0xD2,0xDE,0xB7,0x00,0xDB,0x90,0xD5,0xE7,
0xC8,0xCE,0x4F,0x92,0x35,0x5C,0xD1,0xCF,0x1A,0x1E,0xEF,0x1C,0xA1,0x74,0x84,0xB9,0xD4,0x4D,0xF4,0xAF,0xBD,0x94,0x7B,0x73,0xD8,0x93,0x87,0x3E,0x1C,0x92,0x2C,0xDD,
0x33,0x1A,0x69,0xA3,0x92,0x9D,0x0C,0x77,0x89,0xF4,0x9B,0xE9,0x0E,0xA5,0x8E,0xAB,0x7C,0xCC,0x4D,0xCF,0xB8,0xC1,0x7A,0xD3,0x1D,0x3D,0x6D,0x33,0x51,0x46,0xB2,0x2D,
0x42,0x9D,0x30,0xD2,0x8E,0x48,0x00,0x17,0x1E,0x40,0xF2,0xBF,0x97,0x95,0xF1,0x97,0x69,0x1C,0x19,0x5C,0x4F,0x34,0x71,0x75,0x32,0x27,0xC6,0x7A,0x79,0xD2,0x68,0x92,
0x7E,0xC3,0x5B,0x3E,0x9B,0x84,0x62,0x2E,0x2D,0xF4,0x22,0xDF,0x4E,0xB8,0xC5,0x9B,0xCE,0xD4,0x79,0xAC,0x6D,0x1D,0xFB,0x72,0xE9,0x24,0x64,0xA9,0x0A,0x35,0x21,0x23,
0x9F,0x36,0xDC,0x7B,0x58,0xE1,0xC7,0xE2,0x2E,0x5A,0x68,0xF3,0x24,0xE2,0x59,0xF4,0x24,0x93,0xAB,0x34,0x6A,0xA9,0x63,0x7E,0x87,0x91,0xE6,0x2F,0xCF,0x90,0x23,0x08,
0x39,0x1C,0x15,0x99,0xA5,0x7C,0x99,0xC6,0x6D,0x22,0x53,0xD2,0x52,0x21,0x98,0x3C,0xD7,0x20,0x8B,0xDC,0x80,0x47,0x52,0x6F,0x6C,0x4C,0xDA,0x81,0x8F,0x1D,0xCB,0x4C,
0x65,0x8F,0xF1,0x1A,0xB2,0x9C,0xA7,0x32,0x8A,0x7A,0x3C,0xA6,0x3C,0xAE,0x2A,0x9C,0xEE,0xBA,0x33,0xDD,0x69,0x65,0x1E,0x08,0x10,0x27,0xFD,0xC1,0xF2,0x00,0x0B,0xDB,
0xA9,0x03,0xCF,0x05,0x26,0xF8,0x57,0x96,0x65,0xB4,0xD2,0x55,0xE6,0x7D,0xBE,0x65,0x3B,0x5D,0xA4,0x92,0x5F,0x08,0x04,0x1D,0xC1,0x1F,0xC0,0x7B,0x60,0xBF,0xC1,0x3C,
0xF4,0x71,0x46,0x73,0xC5,0xFC,0x49,0x2C,0x4E,0xD5,0xAF,0x0C,0x74,0xB4,0x20,0x12,0x5A,0x28,0x94,0x92,0x40,0xEB,0xB9,0x09,0xFF,0x00,0x88,0xC1,0xAC,0xE7,0x33,0xA8,
0x87,0x87,0x4A,0xCF,0x33,0x09,0x5C,0x98,0x44,0x3C,0xEF,0xE2,0x1B,0xB0,0xE6,0x76,0x23,0x1E,0x43,0x55,0xA9,0xC8,0x99,0xBC,0x4A,0x69,0xB8,0xBF,0xF6,0x74,0xF1,0xE0,
0x39,0x17,0x75,0x71,0x24,0xF9,0xDA,0x65,0xB9,0x6E,0x56,0x2B,0xA5,0xCA,0x29,0xC4,0x20,0xE8,0x58,0x54,0x69,0x69,0x18,0x8E,0x77,0xC4,0xBB,0x3C,0x97,0x32,0xCC,0xE2,
0xED,0x66,0xA8,0x65,0x48,0xC1,0xD1,0x0C,0x7B,0x58,0x5A,0xD6,0x1F,0x4C,0x1A,0xF8,0xCD,0xC5,0xB9,0xA4,0x5C,0x4F,0x4D,0x97,0x2D,0xD5,0x60,0x80,0x7C,0xF1,0x90,0x6E,
0x7D,0x3C,0xB1,0x32,0x87,0x88,0x26,0x9A,0xA1,0x0E,0x63,0xAE,0x68,0xD4,0xDF,0x48,0x00,0x03,0xF4,0xC7,0xBD,0xF4,0x7D,0x26,0x35,0xC2,0x32,0x37,0x24,0xCF,0x3F,0xAF,
0xCA,0xDE,0x42,0x8B,0xC0,0x13,0xE4,0x19,0xDE,0x67,0x94,0xD5,0xBB,0x41,0x5A,0xE4,0x93,0xBA,0x86,0xB8,0xF6,0xFC,0x62,0x99,0xC2,0x5C,0x6B,0x2E,0x6F,0x54,0x0C,0x91,
0xA2,0xCA,0x14,0x24,0xAB,0xD1,0x87,0x2D,0x40,0x74,0xF5,0xC4,0xEF,0x31,0xCD,0xF2,0xCC,0xC0,0xB2,0xBD,0x03,0xA2,0x86,0x06,0x3D,0x04,0x2E,0xD6,0x00,0x83,0xF6,0xC7,
0x1E,0x1C,0xAC,0x86,0x93,0x8A,0xE1,0x92,0x35,0x31,0xC4,0xEC,0x14,0xAE,0xAB,0xEC,0x7D,0x71,0xB3,0x57,0xA3,0xC7,0x95,0x0D,0x88,0x9D,0x36,0x62,0xAC,0x01,0x9E,0xB7,
0xE1,0xCE,0x10,0xAB,0xE2,0x30,0x3B,0x8C,0x35,0x75,0x52,0x18,0xF5,0x84,0xA6,0x89,0xAC,0x17,0x6B,0xF2,0xDA,0xDB,0xDA,0xF8,0x42,0xF8,0xA5,0xC2,0xF2,0xD1,0x7F,0x89,
0xF7,0x5E,0xCE,0x78,0x16,0xD2,0x12,0x77,0x2A,0x7E,0x52,0x6D,0xE4,0x71,0x56,0xF8,0x4B,0xF1,0x73,0x32,0xE0,0x9C,0xB2,0x4A,0x1A,0x58,0xA2,0xAA,0xA6,0x60,0x74,0xA4,
0x8B,0xB8,0x3B,0x72,0x6E,0x76,0xDB,0xDB,0x00,0xB8,0xEF,0x34,0x19,0xD2,0x54,0x09,0x8A,0xCD,0x55,0x59,0x1B,0x19,0x43,0xED,0x6D,0xB5,0x7D,0xBF,0x96,0x3C,0xB8,0x38,
0xF4,0xB9,0x11,0xB1,0xB5,0xB7,0xE3,0xF1,0x3B,0x7E,0x26,0xCA,0x18,0x15,0xE2,0x41,0x66,0x97,0x2D,0xA8,0xCA,0xA8,0xA4,0x92,0x9A,0x51,0x37,0x6A,0x0B,0xCF,0x19,0xB0,
0x0A,0x41,0x00,0x5B,0xCE,0xF6,0xDF,0x17,0x4F,0x86,0x79,0xAC,0x93,0xF0,0x05,0x45,0x2C,0xE1,0xC4,0x88,0x7B,0x30,0x74,0x73,0x00,0xEE,0x43,0x5F,0xC3,0xCB,0xAF,0x4C,
0x79,0xF6,0xA2,0xAE,0x46,0xA4,0x97,0x4C,0x51,0xC6,0x91,0xB9,0x40,0xA9,0x7B,0x0B,0x1E,0x78,0xF5,0xAF,0xC3,0x3C,0x9E,0x66,0xC8,0x06,0x53,0x4E,0x8C,0x28,0xDB,0x2F,
0x82,0xA1,0x83,0x1B,0x89,0x25,0x72,0x43,0x13,0xD0,0x12,0x9D,0x3A,0x80,0x3C,0xF1,0xDC,0xF5,0x24,0x1B,0x46,0x40,0x3A,0x98,0xB4,0xEC,0x28,0xA9,0x98,0xB2,0xB8,0xA1,
0xAB,0x9E,0x48,0x5A,0xA9,0x1C,0x4A,0x40,0x91,0x1D,0x44,0xAA,0x4E,0xFB,0x11,0xBD,0xF9,0xF5,0x04,0xFB,0x8B,0x1C,0x00,0xCD,0xB8,0x42,0x96,0xB3,0x36,0x91,0x29,0xA3,
0x14,0xE8,0x8C,0x74,0x46,0xA8,0xF6,0xE5,0xC9,0x4F,0x3E,0xB7,0xF2,0xF4,0x18,0x66,0xCB,0x72,0x6A,0xD8,0x69,0x5F,0x30,0xA7,0x99,0xF4,0x8A,0xAD,0x01,0x96,0xEC,0x57,
0x6B,0x05,0xD3,0xD6,0xE0,0x1F,0xAE,0x36,0xD1,0x57,0x36,0x65,0x4B,0x2D,0x14,0xF4,0xA5,0xC2,0xF8,0x16,0x40,0x81,0x9A,0xFB,0xDF,0x90,0xE7,0xEE,0x6C,0x3A,0xE3,0x20,
0x7E,0x23,0x8C,0xA5,0x43,0x1C,0x74,0xBC,0x2E,0xD4,0x40,0x87,0xA8,0x91,0xD6,0x08,0xF4,0x2F,0x31,0x6F,0x11,0xB7,0xB9,0x2B,0xFC,0xF1,0xF2,0x82,0x33,0x43,0x95,0xCB,
0x2C,0xC4,0x9A,0xB9,0x27,0x11,0x07,0xEA,0x88,0x3C,0x2B,0xE9,0x60,0x01,0xD2,0x39,0x5F,0xA6,0xD8,0x16,0xBC,0x4F,0x57,0x49,0x3D,0x3D,0x0C,0xD4,0xE9,0x2C,0x85,0x5A,
0x67,0xA9,0x85,0x6E,0xB1,0xBC,0x9B,0x85,0xE5,0xB5,0x81,0x27,0x7E,0xB8,0x29,0x5B,0x58,0xD4,0xEC,0xAD,0xA8,0x46,0x18,0xEB,0x40,0xCC,0x41,0x27,0x9E,0xC4,0xAF,0xEE,
0x8B,0x01,0x60,0x79,0x1E,0x58,0x1C,0x8C,0x20,0xAA,0xF3,0xCC,0x93,0x7C,0x59,0xA2,0x4C,0xD2,0xBA,0x82,0x09,0xE9,0x41,0x33,0x54,0x22,0x2B,0xB5,0xF7,0x53,0x70,0x76,
0xBD,0x99,0x8E,0xDB,0xDA,0xDD,0x31,0x3C,0xF8,0xAD,0x95,0x66,0x33,0x70,0x45,0x3E,0x5D,0xC1,0xF0,0x43,0x57,0x96,0xD1,0x6A,0xA9,0xAE,0xEE,0xF7,0x57,0x45,0x06,0xC0,
0x30,0x3C,0xD4,0x73,0xF4,0xBF,0xA6,0x2B,0x5C,0x6D,0x0C,0x79,0x96,0x53,0x98,0x3C,0xD5,0x22,0x3A,0xBE,0xC4,0x84,0x60,0x4C,0x8E,0xDE,0x20,0xC1,0x6F,0xA4,0x01,0x6D,
0x2B,0x6B,0x7F,0x1C,0x48,0xF8,0x3F,0x89,0xB3,0x3E,0x1F,0x15,0xD2,0x66,0xD9,0x79,0xAD,0xA1,0x8E,0x36,0xA7,0x78,0x82,0x02,0x41,0xD8,0x80,0xDD,0x6D,0x6B,0x83,0xEF,
0x8E,0x6B,0x62,0x7D,0xC3,0x20,0x17,0x46,0xEA,0x3F,0x80,0x2A,0x75,0xFF,0x00,0xD3,0x63,0x14,0xE2,0xFA,0xEA,0x68,0x49,0x49,0x65,0xCB,0xD9,0x6C,0x5A,0xCB,0x71,0x26,
0xAF,0xA9,0xDC,0x7E,0x7D,0x71,0x43,0xE2,0x68,0xE6,0x5C,0xB2,0xA6,0x96,0x85,0xCB,0x4D,0x1B,0xAC,0xF2,0x31,0x37,0xB1,0x04,0x91,0xBF,0x9E,0xDC,0xBD,0x31,0x28,0xCB,
0xF2,0xF8,0x6A,0x38,0xA6,0x2C,0xF7,0x80,0xEA,0x4D,0x05,0x7C,0x5F,0xB6,0x34,0x73,0x38,0x0A,0x4F,0x50,0x8C,0x7D,0x3C,0xFD,0x71,0x40,0xFE,0xDD,0x4C,0xFA,0x81,0x2A,
0x69,0x61,0x78,0x65,0x47,0x06,0xBA,0x19,0x76,0x65,0x90,0x13,0x75,0x3D,0x6C,0x7A,0x63,0x83,0xEA,0xB8,0x9F,0xF5,0x5F,0xAA,0x51,0xC1,0xEF,0xF8,0xA9,0xD6,0xD1,0x95,
0x38,0xFC,0x77,0xCC,0x82,0x7C,0x68,0xCA,0x25,0x19,0xAC,0x19,0xC4,0x72,0x34,0xC8,0x62,0x09,0x23,0xDE,0xE6,0xE7,0x71,0x7F,0x4D,0xF1,0x26,0x4B,0x16,0x37,0xC7,0xAD,
0x73,0xDC,0x9E,0x9B,0x33,0xA8,0x9E,0x82,0x7A,0x78,0xE5,0xA7,0x98,0x7E,0xD1,0x98,0x05,0x29,0x7E,0x57,0x1D,0x31,0x14,0xCF,0xBE,0x11,0xE6,0x34,0xF9,0x84,0x83,0x24,
0x9E,0x2A,0x88,0xB5,0x00,0x15,0xCE,0x96,0x17,0xDB,0xF5,0x23,0xEF,0x8F,0x61,0xE8,0xFE,0xA9,0x8F,0xC6,0x31,0xB9,0xAA,0x9C,0x3D,0x7E,0x81,0xF7,0x97,0x5E,0x4C,0x9C,
0x47,0xA4,0x4A,0x58,0x80,0x6D,0xCA,0xF8,0x3B,0xC2,0x59,0x4C,0xD9,0x87,0x13,0x45,0x32,0x53,0xF6,0xB0,0xC2,0x7B,0x47,0x1A,0x49,0x16,0xF2,0x38,0x29,0x07,0xC3,0x3C,
0xFF,0x00,0xBF,0x76,0x15,0xFD,0x8D,0x20,0x06,0xCC,0x5D,0xAE,0x7C,0xF6,0xC5,0x0B,0x87,0xF2,0x28,0x38,0x69,0x85,0x25,0x3D,0x41,0x09,0x20,0x3A,0xAA,0x19,0x6D,0x71,
0xE7,0xFA,0x63,0xA1,0xAA,0xF5,0x3C,0x4A,0x84,0x21,0xB3,0x31,0xE9,0xB4,0x0E,0xD9,0x2D,0x85,0x46,0x6C,0xB5,0xE8,0xF4,0x30,0x96,0x27,0x84,0x32,0x85,0x5D,0x27,0x68,
0xFD,0x06,0x08,0x66,0x50,0x11,0x93,0xD7,0x66,0x1D,0xF1,0x5D,0x69,0xE9,0xD9,0x35,0x9B,0x16,0xB1,0x5B,0x01,0xCB,0xD7,0x1D,0x32,0xE5,0xB0,0x0A,0x76,0x73,0x5E,0x67,
0x95,0x80,0xB4,0x69,0xE1,0x5F,0x3C,0x2E,0xF1,0x55,0x44,0x54,0x1C,0x3E,0x32,0x85,0x98,0x3D,0x7D,0x59,0x0A,0xF0,0xC6,0x49,0x28,0x97,0xB8,0xD8,0x1E,0xBF,0xC7,0x1E,
0x47,0x0A,0x0D,0x46,0x71,0xB4,0xF2,0x4C,0xF4,0x2E,0xC3,0x16,0x33,0x27,0xF4,0x99,0x6D,0x55,0x5C,0x51,0x52,0x0B,0x2B,0xD4,0x4C,0x54,0x13,0xC8,0x5C,0xDA,0xFF,0x00,
0x4C,0x7B,0x3F,0xE1,0xCE,0x53,0x3D,0x27,0x07,0xD7,0xB5,0x2C,0xAE,0x29,0xAB,0xA5,0x44,0x81,0x25,0xF9,0xFB,0x34,0x04,0x2B,0x11,0xEC,0x47,0x2E,0x46,0xF8,0x8A,0xFC,
0x35,0xF8,0x47,0x99,0x66,0xF5,0x50,0xE7,0x59,0xCC,0x12,0x25,0x0D,0x37,0xED,0x16,0x94,0xA9,0xB9,0x00,0x03,0xA9,0xBD,0x37,0xC7,0xAA,0x28,0x8E,0x49,0x41,0x1D,0x2D,
0x6C,0x0D,0x2C,0x14,0xF4,0xE0,0xC4,0x90,0x25,0xEE,0xC4,0x80,0x00,0xB2,0xDC,0xF5,0x3B,0x75,0xC7,0xA4,0xD6,0x65,0xF2,0x91,0x89,0x3A,0xFC,0xCE,0x26,0x15,0xA0,0x49,
0x93,0x4C,0xDE,0x3A,0xCE,0x1D,0x99,0xA8,0xA0,0x80,0xC0,0x63,0x73,0x7A,0xC5,0xF0,0x6E,0xD7,0xE4,0x3C,0xEC,0x6C,0x39,0x90,0x05,0xCF,0x30,0x30,0x67,0x84,0x29,0xE8,
0x20,0x71,0x53,0x2C,0x80,0x36,0x9D,0x28,0xAA,0xC3,0xDC,0xDC,0xF4,0xDF,0x7B,0x7D,0xF0,0x03,0xE2,0x23,0xCF,0x9D,0xE6,0xF1,0x8A,0x09,0xDE,0x52,0x80,0x2B,0x6F,0xBA,
0x28,0x1F,0xBD,0x6F,0x97,0xF5,0xF7,0xC6,0x1C,0xB6,0x56,0xC9,0x72,0xC1,0x13,0x78,0xC8,0xBE,0x94,0xBD,0xD9,0xF7,0xDA,0xCB,0xFA,0x0F,0x3D,0xF6,0xC2,0x7E,0x3D,0xCD,
0x82,0x99,0x6A,0xA5,0x23,0x35,0x82,0x3A,0x2C,0xD4,0x53,0xD2,0x19,0xA9,0x63,0xAB,0x91,0x95,0xA4,0xA7,0x84,0xA2,0xBF,0x5F,0x10,0xB5,0xD9,0xBD,0x79,0x60,0x17,0x14,
0x54,0xD4,0x51,0xC1,0xDD,0x29,0x65,0xA8,0x47,0x56,0xBC,0x33,0x9D,0x76,0x3C,0x80,0xF9,0xCE,0xC7,0xCC,0x8F,0xBE,0x19,0x6A,0x26,0x8F,0x3D,0xC9,0xA1,0xA4,0xA4,0x31,
0xCB,0x16,0x90,0xD3,0x52,0xD7,0x06,0x32,0x3D,0xC0,0x27,0x44,0x83,0x7E,0xB7,0xFB,0x72,0xC0,0x2E,0x2F,0xA7,0xA6,0x5E,0x18,0x78,0x60,0x5A,0x82,0xD0,0x85,0x71,0x11,
0x87,0xB4,0x74,0xEB,0x70,0xD7,0x0C,0x45,0xFD,0xF7,0x1C,0xF0,0xC3,0x8A,0x8D,0x4C,0xC1,0xEE,0x2C,0x4F,0x5D,0x59,0x5D,0x42,0x90,0xC9,0x58,0x1B,0x30,0x58,0xFC,0x41,
0xE3,0xB1,0x3C,0xEE,0x6C,0x1A,0xDC,0x8F,0x3E,0x78,0x8F,0xE6,0x39,0xBD,0x56,0x4F,0xC5,0x52,0xC7,0x57,0x97,0x45,0x51,0x34,0xDA,0x92,0x59,0x35,0x04,0x2E,0x87,0x63,
0x65,0x22,0xEA,0x4D,0xED,0x71,0xB5,0xAF,0x8A,0x64,0x39,0xBE,0x57,0x34,0xA2,0x19,0x19,0x2A,0xD6,0x44,0x04,0x80,0xD2,0x24,0x88,0x77,0xE4,0x5C,0x9B,0xFB,0x7E,0x70,
0xA5,0xC7,0x3C,0x2B,0x4F,0x9D,0x70,0xFC,0xB9,0x9E,0x47,0x32,0x19,0xE9,0xED,0x74,0x98,0x08,0xE4,0x5E,0x9B,0x10,0x6C,0x45,0xF6,0xC1,0xA2,0x10,0xDD,0x4B,0x2D,0x62,
0x61,0xEE,0x19,0x7E,0x67,0x51,0x45,0x2F,0x0D,0xC4,0xF4,0xEB,0x2B,0x76,0xAC,0x93,0x5F,0xFB,0xBE,0xE3,0x52,0xD9,0x77,0x61,0x61,0xF3,0x00,0x36,0x1C,0x86,0x3E,0xE5,
0xF5,0xB2,0x55,0xE7,0x81,0x73,0xF9,0x1B,0x2E,0xA9,0x70,0xCE,0x73,0x73,0x73,0xAB,0x48,0x3E,0x16,0x03,0x67,0x5D,0x40,0x03,0x7B,0xE2,0x69,0x95,0x71,0x6D,0x66,0x45,
0x9D,0x32,0xD7,0x42,0xE5,0xD6,0xE1,0x40,0x60,0xAC,0xBE,0x7C,0xBD,0x07,0xE7,0x15,0x3A,0x7E,0x22,0xA2,0xE3,0x3C,0xB1,0xD6,0xAA,0x49,0xE2,0x99,0xAD,0xA7,0x53,0x76,
0x8B,0x38,0x08,0xAA,0xEE,0xE2,0xE4,0x86,0xD4,0xA0,0x92,0x3E,0xBD,0x4E,0x26,0x7D,0x0A,0xE4,0xEC,0x71,0x2B,0x1E,0xA4,0xA3,0x7B,0x7B,0x9D,0xF5,0x52,0xCF,0x3C,0xB1,
0xBB,0xAB,0xCC,0x84,0xBC,0xBD,0xA4,0x2C,0x35,0x3A,0xEB,0x24,0xB9,0x53,0x66,0x0A,0x4E,0xFB,0x8E,0xBE,0xB8,0x01,0x9C,0x54,0x2B,0x4D,0x3B,0x42,0x2A,0x23,0x37,0x52,
0xB7,0x8D,0xC0,0x7B,0x6F,0x60,0x6D,0x6E,0x7B,0xE3,0x56,0x5F,0x42,0x33,0x3C,0x9B,0x30,0xAB,0xA0,0x47,0x2E,0xA3,0xB1,0xDF,0x99,0x51,0x72,0x59,0xD5,0x6D,0x61,0xE1,
0x3C,0xED,0x72,0x56,0xD7,0xDF,0x07,0xB2,0x6F,0xED,0x15,0x4C,0xB5,0xD8,0x42,0xF0,0xD2,0xA3,0xB4,0x7A,0xA3,0x2C,0x4A,0x92,0x08,0xBA,0x9E,0xAC,0x58,0x7D,0xC6,0x39,
0x69,0xE9,0x43,0x09,0x3B,0x09,0x13,0x6F,0xEE,0x0C,0xC2,0x9B,0x98,0x82,0xF9,0x8C,0x0F,0x52,0xD1,0xB8,0x91,0xDC,0x90,0x75,0x68,0x2D,0x7F,0xEB,0x9E,0x09,0x55,0xD5,
0xCB,0x53,0x0C,0x71,0xE5,0x59,0x5D,0x4D,0x4C,0x97,0x11,0xBB,0x18,0xCA,0x2B,0x82,0x2D,0x6F,0x7E,0x78,0x7B,0x5C,0xB6,0xA2,0x09,0xE7,0x8A,0x5A,0x79,0x5A,0x79,0x81,
0x53,0x32,0xC2,0x40,0x0A,0x4F,0x8B,0x98,0xF0,0xDA,0xC7,0xED,0x86,0x3E,0x17,0xCA,0xEB,0x9F,0x2F,0x86,0xBE,0x85,0x69,0xA0,0x68,0x19,0x66,0x44,0x91,0xFF,0x00,0xEE,
0x1B,0x51,0x50,0xC0,0xB7,0x87,0xF7,0xC7,0xD3,0xA6,0x21,0xD0,0x86,0x23,0x71,0xBA,0x82,0x7D,0x41,0x87,0x0A,0x24,0xA3,0x22,0xF8,0x75,0xC6,0xB5,0x75,0xD3,0x15,0x8B,
0xBA,0x3A,0x80,0xC4,0x37,0x89,0x88,0x6E,0x41,0x57,0xAE,0xC7,0xCF,0x0F,0xD9,0x77,0xC3,0x8C,0x83,0x87,0x44,0x79,0xC5,0x6D,0x4B,0x55,0x67,0x32,0x3A,0x87,0x79,0x40,
0x62,0xC4,0xDE,0xDA,0x7E,0xC3,0x90,0xFE,0x18,0x76,0xA9,0x99,0x24,0xA2,0xA8,0xCC,0xAA,0xEB,0x6A,0x04,0xF4,0xC1,0xBB,0x57,0x41,0xA5,0x09,0x20,0x35,0xF5,0x2D,0xFA,
0x93,0xB6,0xC2,0xD6,0xDB,0x1D,0xD4,0xF9,0x8C,0x8B,0xC3,0x54,0xA6,0xA6,0x6A,0x10,0x95,0x23,0xF6,0x4A,0xF2,0xAA,0xBA,0x2B,0xDB,0x53,0x6D,0xAC,0xAF,0x87,0xC8,0x83,
0xE7,0x73,0x8D,0x2B,0xA7,0xDA,0x6C,0x71,0x10,0xD9,0x99,0xC7,0xBA,0x6F,0xA6,0x35,0xF0,0x2C,0x11,0xCD,0x1A,0x52,0xC2,0xA9,0xAD,0x04,0x7F,0x33,0x06,0x1F,0xB8,0x09,
0x0C,0xDD,0x7D,0x2C,0xDB,0x9B,0x8B,0x60,0x7E,0x6D,0xC4,0x91,0x25,0x0C,0xF4,0xB9,0x42,0x14,0x2C,0x09,0x24,0x4C,0x42,0x81,0xE6,0xC3,0x99,0x3E,0x96,0x00,0x60,0x5E,
0x7F,0xC4,0xC2,0x83,0x3A,0x7A,0x4C,0x9B,0x30,0x54,0x82,0xA2,0x25,0x13,0x2C,0x26,0xE3,0x61,0xD5,0xED,0xA8,0x9F,0xAE,0x16,0x17,0x31,0xD5,0x52,0x4D,0x10,0x88,0x20,
0x17,0xED,0x9C,0x8D,0xDA,0xDB,0xB9,0xBE,0xE4,0x5E,0xF6,0x1B,0x1F,0xAE,0x1B,0xB3,0x67,0x52,0xD4,0x5C,0x21,0x02,0xC7,0x4F,0x04,0xC9,0x51,0x38,0x31,0x9B,0x33,0x2A,
0xDC,0x6A,0x24,0xD8,0xF9,0x9F,0xB9,0xBF,0xD7,0x19,0x86,0x69,0x0D,0x2C,0xCF,0x23,0x0F,0xDA,0xDB,0xC0,0x84,0xEE,0x83,0xCC,0xFA,0x9F,0x7B,0xFA,0xE1,0x66,0xB7,0x3B,
0x8A,0x92,0xA1,0xCD,0x24,0x9D,0xE2,0xA1,0xB6,0xEF,0x0F,0x63,0xA7,0xFE,0x23,0x96,0x38,0x51,0xD5,0xA8,0xA9,0x5A,0x9A,0xE9,0xF5,0x03,0xE2,0x52,0x4D,0xB7,0xF3,0x1E,
0x67,0xD7,0x02,0x79,0x8D,0x59,0x68,0x92,0xA2,0x18,0x57,0xB7,0xCD,0x62,0x6A,0x4A,0x13,0x3B,0x43,0x4D,0x99,0x45,0xE2,0x60,0x57,0x93,0x3D,0xB7,0x23,0x6D,0x26,0xDC,
0xB9,0x8F,0xDE,0xC6,0x2C,0xEB,0x3B,0x32,0xF0,0xDD,0x65,0x2C,0xA1,0x6B,0x3B,0x44,0x2C,0x84,0x44,0x19,0x18,0x81,0xE2,0x3A,0x4F,0x89,0x48,0xEA,0x01,0x1E,0xDB,0xE0,
0x4E,0x5D,0x9C,0x66,0x0A,0x29,0xF2,0x2A,0x9A,0x85,0x7A,0x2A,0x44,0x4A,0x86,0x8E,0x51,0xE1,0x98,0x31,0x2A,0xCC,0x08,0xEA,0x00,0x04,0x7F,0xC0,0xF9,0xE0,0x2E,0x6F,
0x9A,0x3D,0x4C,0x83,0x25,0x4A,0x18,0xE4,0xA4,0xA7,0x70,0x3B,0x5D,0x5A,0x1D,0xF5,0x5C,0xAB,0x01,0xB5,0x87,0xFB,0xBC,0xFA,0xEF,0x8D,0xFD,0x09,0xCF,0x1D,0xC5,0x6C,
0xB2,0x3C,0xCA,0x5C,0xAE,0x44,0x30,0x56,0x2C,0x01,0x18,0x89,0x23,0x8C,0x4C,0x85,0x4F,0x3E,0x6D,0xB7,0xDB,0x0A,0xD9,0x86,0x99,0x29,0x62,0x85,0x6A,0xA3,0x9A,0x38,
0xC9,0xD4,0x12,0x37,0x1B,0xF9,0x78,0x6E,0x7A,0x61,0xCB,0x3A,0xA1,0xAD,0xAA,0x96,0x3C,0xC7,0x26,0x8D,0xEA,0x2A,0x14,0x69,0x78,0xBB,0x34,0x69,0x13,0x6E,0x64,0x82,
0xA6,0xE3,0xD5,0x4E,0xDB,0x82,0x70,0x0E,0xA8,0x56,0xD4,0x2F,0x61,0x9A,0xF7,0xE8,0x65,0xD2,0x6C,0x92,0xEA,0x9C,0x0B,0x1E,0x56,0x04,0x39,0x3F,0x8C,0x0E,0xEF,0xA8,
0xC2,0x2E,0x4B,0xB3,0xAC,0xB6,0x87,0x32,0x98,0xF7,0x38,0x3B,0x09,0xA2,0x07,0x50,0x88,0xBB,0xDF,0x7E,0x7E,0x2D,0xF0,0xBB,0xA7,0x3A,0xCB,0x2A,0x4B,0xD2,0xCD,0x2B,
0x0B,0x1F,0x93,0x66,0x02,0xF6,0xE9,0xBE,0x29,0x71,0x54,0xD1,0xD0,0xE6,0xB5,0x54,0x53,0xB4,0x8A,0x8D,0xCE,0x23,0x0C,0x94,0xFA,0x47,0xB1,0x61,0xF9,0xC7,0x1A,0xE9,
0xA8,0x25,0x8A,0x38,0xA9,0x2B,0xEA,0x26,0x57,0xBD,0xBF,0xBB,0x06,0x60,0x2D,0xCB,0xC6,0x3D,0x70,0xEF,0x31,0x15,0x71,0x47,0x0E,0xE3,0x01,0x64,0xDC,0x77,0x98,0xD3,
0x4B,0x09,0xAA,0xCB,0x44,0xE2,0x30,0x2D,0xAC,0x14,0xBD,0xBE,0x50,0x4F,0x22,0x01,0x00,0xE1,0x9F,0x2C,0xF8,0xA9,0x48,0xB2,0xA3,0xE6,0x14,0xF5,0x92,0x4A,0xCE,0xD2,
0xC8,0x16,0x72,0x2F,0x2D,0xAC,0x1A,0xC7,0x6B,0x01,0x60,0x07,0xA5,0xAF,0x80,0x74,0xD4,0x12,0x35,0x48,0x2B,0x96,0x8E,0xC8,0x1B,0x0E,0xF0,0x48,0x00,0xFD,0x2D,0xF7,
0xBD,0xB1,0xDB,0x36,0x65,0x95,0x3C,0x81,0xA4,0xA2,0x8A,0x32,0xA7,0x41,0x7D,0x23,0x9D,0xBF,0xD4,0x18,0x5F,0xEF,0x88,0x76,0x9E,0x84,0xA0,0xBB,0x7B,0x8F,0xB0,0xFC,
0x42,0xE1,0xB3,0x95,0xE4,0x94,0xD5,0x27,0x30,0xD1,0x10,0xFE,0xFC,0xA1,0xB5,0x89,0x85,0xF5,0x69,0xB1,0x3C,0xB5,0x74,0x04,0x5F,0x1A,0x5F,0xE2,0x2C,0xF9,0xCA,0x9C,
0xB7,0x28,0xA2,0xAC,0x14,0x33,0xCA,0x21,0x14,0xA0,0x84,0x0C,0x6E,0x34,0x80,0x4D,0xFA,0xDB,0x13,0xCE,0xF3,0x49,0x57,0x10,0x8A,0x92,0x92,0x79,0x99,0x98,0x03,0x2E,
0x8D,0x4C,0x3D,0xB9,0x00,0x3D,0xCE,0x0E,0xD2,0xD2,0xCD,0x47,0x1A,0xCD,0x53,0x0D,0x34,0x60,0x8D,0x51,0x76,0xB2,0x89,0x98,0x8B,0x73,0x08,0x80,0xFE,0x6F,0x80,0xDA,
0x39,0xE2,0x31,0x47,0xDC,0xA0,0xE4,0xB0,0xE6,0x79,0xAD,0x3B,0x97,0x86,0xA2,0x1A,0x75,0x62,0xD2,0x35,0x88,0x50,0x6F,0x7B,0x12,0x45,0xAF,0xE9,0x61,0x8C,0x99,0xA6,
0x61,0x54,0xD2,0x2A,0xAD,0x78,0x48,0x21,0x27,0x93,0x03,0x61,0xEB,0x6B,0x01,0xFA,0xFA,0x61,0x66,0x0E,0x2E,0xAC,0xA9,0x59,0xA9,0xCF,0x7B,0xA9,0x00,0x85,0x3D,0xAB,
0x5A,0x31,0xB7,0x45,0xF0,0xFE,0x77,0xC7,0x19,0xD6,0x59,0xA9,0x43,0x54,0xD6,0x53,0xC7,0x1F,0x35,0x45,0x1A,0xD8,0xFB,0x03,0x60,0x3E,0x97,0xC2,0x88,0x11,0x80,0x42,
0x75,0x3C,0x43,0x0C,0x59,0x7B,0x88,0x64,0x65,0x47,0x05,0x43,0x85,0xB9,0x90,0x7A,0x7A,0x7E,0x3D,0xF0,0x01,0x73,0x1A,0xEA,0xF9,0xFB,0x08,0x63,0x74,0x8E,0x4D,0xEE,
0x4D,0xC9,0xF7,0x38,0xEE,0x58,0x29,0x60,0x46,0x7E,0xCD,0xA5,0x98,0x8D,0xDE,0x56,0xE6,0x3C,0xB7,0xE5,0xED,0xB6,0x38,0x45,0x5A,0x61,0x04,0x2C,0xD1,0x53,0x8B,0xEE,
0xA9,0xD7,0xEA,0x71,0x2E,0xFA,0x11,0xAA,0x3F,0x30,0x95,0x3D,0x1D,0x3D,0x02,0x8A,0xAA,0x99,0x10,0x37,0x21,0xA9,0xB9,0xFD,0x3A,0x9F,0xEA,0xD8,0xD1,0x4F,0xDA,0x55,
0x95,0x92,0x9A,0x9C,0xEA,0x5F,0xFD,0xC7,0xD8,0x0D,0xFA,0x75,0xC6,0x6A,0x69,0xA8,0x98,0x87,0xD3,0x34,0xCC,0x4D,0xB5,0x10,0x58,0x03,0xEE,0x76,0xFC,0xE3,0x62,0xCD,
0x5C,0x11,0x60,0xCB,0xE8,0xDD,0xB9,0x8D,0x4E,0x40,0x3C,0xC7,0x41,0x8C,0xE5,0x4C,0x68,0x68,0xC1,0x9A,0xB2,0xC5,0xC4,0x8B,0x06,0x57,0x5D,0x25,0x53,0xBC,0x46,0x36,
0xA8,0xEC,0xC2,0x26,0xA6,0x91,0xAD,0xA5,0x40,0x00,0x28,0x0C,0x76,0x1E,0xB8,0x2B,0x25,0x3D,0x1C,0xE7,0x2E,0x96,0xA2,0x50,0xD5,0x54,0xF4,0xC9,0x10,0x96,0xDF,0xE4,
0x85,0x07,0xB2,0x2E,0x79,0x59,0x80,0x65,0x3C,0xF9,0x82,0x70,0x7F,0x30,0xE0,0x89,0xE8,0xB2,0xD8,0xE7,0xA4,0xA7,0xEC,0x91,0xE5,0xD1,0x3D,0x4B,0x9B,0xBC,0x84,0x92,
0xA4,0xA5,0xB9,0x2A,0xAB,0x11,0x7E,0xA7,0x09,0x59,0xC4,0x99,0x86,0x5A,0xAB,0x49,0x5B,0x1B,0xA4,0x15,0xDA,0x9C,0x4B,0x26,0xC1,0xA3,0x56,0xD3,0x7F,0xD0,0x60,0xD3,
0x52,0xAF,0xF7,0x31,0x04,0xFB,0x31,0x6B,0x3A,0x8D,0x2B,0x6A,0x6A,0x73,0x0A,0x56,0x7A,0x3A,0xD8,0x34,0x87,0x8E,0xFE,0x19,0x58,0x91,0x61,0x7B,0x75,0xB0,0x3C,0xED,
0xB1,0xC7,0x7D,0x35,0x6E,0x67,0x5F,0x45,0x35,0x2C,0x95,0x22,0x99,0xE3,0x5D,0x6F,0x4B,0x3A,0x07,0xB0,0xB8,0x07,0x49,0x66,0x17,0xBD,0xF9,0x2D,0xC7,0xA6,0x39,0x56,
0x9A,0x5A,0xFA,0x98,0x9A,0x9E,0x36,0x95,0x51,0x23,0x80,0xBE,0x9B,0x76,0x97,0x0C,0xC1,0x58,0x79,0xF8,0x5B,0x7F,0x41,0xE7,0x81,0x0E,0xD5,0x49,0x45,0x24,0xAE,0x7B,
0x46,0x25,0x81,0x8A,0x5D,0xCB,0x28,0x36,0xBA,0x8F,0x3B,0x9E,0x5E,0x98,0x33,0x94,0x54,0x30,0x20,0x9C,0xCA,0x79,0x29,0x33,0x2B,0xBB,0xC7,0x32,0xF2,0xD2,0x90,0xBA,
0x5B,0xCB,0x96,0x9F,0xE3,0x8C,0x35,0x72,0xD6,0x30,0x3D,0x95,0x0E,0x99,0x6D,0x74,0x77,0x2E,0x58,0xDF,0xCB,0x51,0xDB,0x6B,0xF4,0xC1,0x07,0x9E,0x89,0x32,0xE1,0x5B,
0x3E,0x5C,0xF2,0x40,0xCE,0x02,0xCF,0x4F,0x21,0x4E,0x5D,0x2F,0xD4,0xFA,0x36,0x3F,0xA7,0xAE,0xCB,0xAA,0x4F,0xF8,0x42,0x6A,0x2A,0x06,0x9E,0xD5,0xB4,0x35,0xFD,0x45,
0xED,0x7F,0xA6,0x2C,0x71,0xDC,0x65,0x54,0x06,0x32,0x2A,0xE9,0x22,0x2D,0x2C,0x0F,0xAF,0x4E,0xA2,0x65,0x60,0xBB,0x75,0xDA,0xE4,0xFE,0x98,0xEF,0x5E,0x1E,0x9A,0xA1,
0x3B,0xC4,0xF4,0xE9,0x23,0x8D,0xC4,0x93,0xC8,0xCF,0x61,0xE4,0x03,0x5B,0xF5,0xC3,0x06,0x55,0x21,0xCD,0x40,0xA5,0xA9,0x8E,0xBE,0x09,0x94,0x58,0xBD,0x29,0x8C,0xEA,
0x1E,0x5F,0x28,0x37,0xFA,0xE3,0xAA,0xBA,0x3C,0x9A,0x15,0x68,0xA7,0x8F,0x38,0x91,0xF7,0x00,0xCE,0x25,0x22,0xDF,0x7C,0x2D,0x9E,0x8F,0xF3,0x08,0x28,0x23,0x88,0xAF,
0x55,0x55,0x55,0x1C,0xB1,0xB4,0xDA,0x54,0xC6,0x6C,0x0A,0x13,0x1A,0x8F,0x60,0x08,0xB7,0xDF,0x06,0x67,0xCF,0xE9,0xEB,0xBB,0x29,0x62,0xA8,0x95,0x24,0x8A,0xD7,0x42,
0xC5,0xD7,0x63,0xD3,0x51,0xB9,0xFA,0x9C,0x0A,0xAC,0xA6,0xA4,0x8E,0x56,0x78,0x69,0xA3,0x50,0x0D,0xEE,0xF4,0xAE,0x6D,0xB7,0x99,0xC7,0x5C,0x33,0x53,0x4A,0x5A,0xF5,
0xA5,0x1C,0x30,0x50,0xBD,0x9B,0x28,0x3E,0xA3,0xD3,0x1A,0x15,0xB7,0x08,0xB2,0x00,0xEE,0x1A,0x9B,0x38,0xAE,0xAC,0x84,0x53,0xB0,0x22,0x3B,0xDF,0x4D,0xED,0xAB,0xDC,
0x01,0x8D,0x54,0xB2,0xB0,0x87,0xB3,0x88,0x41,0x4E,0xD6,0xDF,0xB2,0x8C,0xB3,0x13,0xEA,0x4E,0x07,0xC5,0x4E,0xA2,0xC5,0xE6,0x4B,0x83,0xB9,0xD0,0x58,0x9F,0xB9,0xC6,
0xF8,0x3F,0xB5,0x10,0x83,0x4C,0x91,0xB2,0xF4,0x3B,0x0C,0x43,0xD4,0x80,0xCC,0xA6,0x0E,0xD6,0x72,0xD5,0x95,0x15,0x6F,0xA6,0xD7,0x2C,0xDA,0x2F,0xEA,0x06,0x3B,0xA3,
0x8E,0x38,0x27,0x2F,0x05,0x33,0x05,0x26,0xF7,0x23,0x57,0xD6,0xFC,0xB1,0xDA,0xD5,0x39,0xB4,0x4C,0x75,0x44,0xA1,0x81,0xF9,0x8A,0x5A,0xFE,0xD6,0x1B,0xE3,0xA6,0x4E,
0xF8,0xD2,0x86,0x9A,0xA3,0xB2,0xB8,0xE4,0x11,0x71,0x70,0xB7,0xAF,0xE2,0x16,0xA3,0xAD,0x2F,0xA4,0x24,0x41,0xD8,0x1E,0x67,0x95,0xB0,0x6E,0x0A,0xC1,0x1D,0x38,0x59,
0x6B,0x61,0x80,0x11,0xC8,0xA6,0xDF,0xD7,0xAE,0x14,0xE0,0xA8,0x58,0x9C,0xC7,0xDB,0xC9,0x7B,0xF3,0x00,0x6F,0xF6,0xC7,0xC7,0xAC,0x70,0x42,0x69,0x91,0xF5,0x7C,0xA1,
0x93,0x9E,0xFC,0xEC,0x70,0xA6,0xC5,0x70,0xD5,0xC7,0xD0,0x9F,0xFF,0xD9,};

View File

@@ -0,0 +1,299 @@
// We need this header file to use FLASH as storage with PROGMEM directive
const uint8_t Tiger[] PROGMEM = {
0xFF,0xD8,0xFF,0xE0,0x00,0x10,0x4A,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x00,0xB4,0x00,0xB4,0x00,0x00,0xFF,0xDB,0x00,0x43,0x00,0x04,0x03,0x03,0x03,0x03,0x02,0x04,
0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x06,0x0A,0x06,0x06,0x05,0x05,0x06,0x0C,0x08,0x09,0x07,0x0A,0x0E,0x0C,0x0F,0x0E,0x0E,0x0C,0x0D,0x0D,0x0F,0x11,0x16,0x13,0x0F,
0x10,0x15,0x11,0x0D,0x0D,0x13,0x1A,0x13,0x15,0x17,0x18,0x19,0x19,0x19,0x0F,0x12,0x1B,0x1D,0x1B,0x18,0x1D,0x16,0x18,0x19,0x18,0xFF,0xDB,0x00,0x43,0x01,0x04,0x04,
0x04,0x06,0x05,0x06,0x0B,0x06,0x06,0x0B,0x18,0x10,0x0D,0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xC0,
0x00,0x11,0x08,0x00,0xA0,0x00,0x78,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,0xFF,0xC4,0x00,0x1D,0x00,0x00,0x02,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,0x04,0x07,0x00,0x03,0x08,0x02,0x01,0x09,0xFF,0xC4,0x00,0x40,0x10,0x00,0x01,0x03,0x02,0x05,0x02,0x04,0x03,0x06,0x04,0x05,
0x02,0x07,0x01,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x11,0x00,0x06,0x12,0x21,0x31,0x07,0x41,0x13,0x22,0x51,0x61,0x14,0x71,0x81,0x08,0x15,0x23,0x32,0x91,0xA1,0x42,
0x62,0xB1,0xD1,0x33,0x52,0xC1,0xE1,0xF0,0x63,0x72,0x16,0x17,0x24,0x34,0x43,0x82,0x92,0xC2,0xFF,0xC4,0x00,0x1B,0x01,0x00,0x03,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x05,0x02,0x06,0x01,0x00,0x07,0xFF,0xC4,0x00,0x30,0x11,0x00,0x02,0x02,0x01,0x03,0x03,0x03,0x01,0x07,0x04,0x03,0x00,
0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x03,0x11,0x04,0x12,0x21,0x31,0x41,0x51,0x05,0x13,0x22,0x61,0x14,0x23,0x42,0x71,0x81,0x91,0xB1,0x32,0xC1,0xD1,0xF0,0x33,0xA1,
0xE1,0xFF,0xDA,0x00,0x0C,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3F,0x00,0x75,0x87,0x3D,0xB4,0x20,0xC7,0x6D,0xB0,0xDE,0x9E,0x34,0xA7,0xB7,0x7B,0x83,0x81,0xE3,
0x30,0xAD,0xDA,0xBA,0x63,0xB2,0xC8,0x75,0x29,0x56,0x92,0xA4,0x10,0x40,0xFA,0x76,0x3F,0xF3,0xDF,0x00,0xB3,0x5C,0xBA,0xB8,0xF0,0x98,0xA4,0x18,0x6D,0x21,0xC3,0xA1,
0x6E,0xBE,0x6C,0x52,0x3B,0x9B,0x5F,0x73,0xFF,0x00,0x36,0xC0,0x6A,0x3B,0x49,0xCA,0xF4,0x79,0x2F,0x2A,0x58,0x99,0x29,0xD7,0x37,0x56,0x91,0xE7,0x59,0xE1,0x29,0x1D,
0xAF,0xFD,0xFB,0x63,0xF3,0x21,0x4F,0xC7,0x3D,0xCF,0x69,0xD5,0x6F,0x00,0xFD,0x21,0xFC,0xC7,0xD4,0x98,0x54,0x19,0xEC,0xD3,0x13,0x19,0xD9,0x95,0x17,0x9C,0xB1,0x89,
0x19,0x3B,0xB6,0xDD,0xFF,0x00,0xC4,0x51,0x3B,0x01,0xED,0x84,0xB6,0xBA,0xB9,0x9F,0xA0,0x4D,0x0D,0x55,0x72,0xF5,0x32,0x74,0x17,0x56,0x50,0x92,0xA6,0x14,0x82,0xA1,
0xB9,0xDF,0x73,0xF2,0xE3,0x0B,0xB5,0xCA,0xEC,0x7A,0x45,0x6C,0x29,0xE7,0xDB,0x45,0x42,0x5A,0x8A,0xE5,0x49,0xD9,0x76,0x3C,0x0B,0x7B,0x01,0x60,0x07,0xA2,0x46,0x2C,
0xFC,0x85,0x12,0x4E,0x61,0x8C,0xC3,0xF1,0xD9,0x4D,0x46,0x9E,0xE9,0x50,0xD6,0x0A,0x75,0x80,0x8B,0xEA,0x3A,0x49,0x1D,0xC5,0xBE,0xA9,0xFA,0x75,0x1A,0x3F,0x49,0x55,
0x4C,0x91,0x96,0x32,0x16,0xAB,0xD4,0x18,0xB6,0x41,0xE2,0x15,0xCB,0x13,0xBA,0x69,0x9C,0x5D,0x6A,0x32,0xE9,0x8A,0xA3,0xD5,0x1A,0x6C,0x15,0xC2,0x5E,0xA4,0xDC,0x1B,
0x59,0x48,0x23,0xCA,0x41,0x24,0x7A,0x1D,0xF7,0x18,0x25,0x5F,0x89,0x91,0xEB,0x5E,0x3C,0x14,0x57,0xA2,0xB5,0x3D,0x94,0x84,0x25,0x0B,0x74,0x58,0x11,0x6B,0x02,0x0F,
0xA6,0x90,0x30,0xBD,0xD4,0x2C,0x91,0x4B,0x8E,0xDC,0x7A,0xBC,0x15,0xBF,0x1D,0xB6,0x80,0x71,0x7A,0x54,0x10,0xAD,0x3C,0x94,0x83,0xDA,0xE3,0x8F,0x98,0xC1,0x0A,0xB6,
0x4F,0xE9,0x9C,0x5A,0x53,0xB5,0x0A,0x9C,0x78,0xE9,0x6D,0x60,0x15,0x4B,0x93,0x21,0x45,0x4B,0xF4,0x3A,0x8A,0xBB,0xE1,0x6D,0x4E,0xC4,0x3B,0x2E,0x66,0x38,0xED,0xD7,
0xF9,0x9A,0x4A,0xD7,0x50,0xB9,0x0A,0x20,0xB8,0x09,0xA7,0x39,0x11,0x9F,0x83,0x0D,0xD6,0xA7,0xD3,0x02,0x92,0xCC,0x86,0x0E,0xB5,0xB7,0xA4,0x9F,0x2F,0x37,0x0A,0xB9,
0x20,0x28,0x8B,0x27,0x91,0x73,0xA4,0xA6,0x0C,0x49,0xB3,0xE3,0x46,0x9E,0xFE,0x66,0x64,0xC3,0x8E,0x12,0x97,0x96,0x5D,0x51,0x2A,0x2B,0x04,0x13,0xCF,0x73,0xE8,0x3F,
0xCB,0x8A,0xB6,0x26,0x7D,0xC8,0xF9,0x5F,0xAA,0x6B,0xAB,0xD2,0x22,0x85,0x41,0x42,0x94,0xDB,0x6A,0x69,0x4B,0x04,0x00,0x2D,0xA8,0x02,0x48,0x50,0x3B,0xFA,0x60,0xBE,
0x78,0xFB,0x40,0x26,0x72,0xD0,0x8C,0xAE,0xDD,0x2A,0xA3,0x1C,0xA3,0xF1,0x5A,0x94,0xCA,0xD0,0xE8,0x20,0xEF,0x6B,0xEC,0xA0,0x47,0x6D,0xFB,0xE3,0x2D,0xA2,0x66,0x75,
0x5A,0xD4,0xED,0x3C,0xF8,0xFF,0x00,0x31,0x53,0xA5,0xA8,0x8D,0xC5,0xB9,0x12,0x7D,0x3F,0xAD,0xA8,0xA5,0xE7,0xC8,0xB5,0x4A,0x75,0x2D,0x87,0x63,0x44,0x74,0xA9,0x0C,
0xBC,0x2F,0xAC,0x10,0x42,0x8D,0xBB,0x13,0x72,0x71,0xD7,0xF9,0x6B,0xED,0x31,0xD3,0xFC,0xC5,0x45,0x4B,0xAA,0x9E,0xD4,0x19,0x1E,0x16,0xA7,0x23,0xC8,0x55,0x8A,0x0F,
0xA7,0xBE,0x3F,0x3F,0xE2,0x57,0x32,0x6E,0x6C,0x79,0x65,0x70,0xC5,0x1A,0x63,0x96,0x51,0x46,0xBB,0x24,0xAB,0x7B,0xE9,0x36,0x02,0xC7,0x01,0x66,0xD1,0xEA,0x31,0xA5,
0xAD,0x98,0xCB,0x2E,0x84,0x1B,0x82,0x0F,0x3F,0xF0,0x62,0xE5,0x06,0x8A,0xC6,0xC5,0x1B,0x0C,0x0F,0xD9,0xD9,0x3F,0xA3,0x99,0x6E,0xFD,0xAC,0x73,0x65,0x03,0x35,0xE7,
0x48,0x4E,0xE5,0xC7,0xD8,0x74,0xA1,0x8B,0x3C,0xB6,0xB7,0x17,0xBE,0xC0,0xE2,0x47,0x43,0xE9,0x2E,0xFF,0x00,0xE5,0x33,0xF2,0xDE,0xF0,0x23,0xC6,0x12,0x12,0x94,0xAD,
0xB5,0x94,0xBC,0xFA,0xAF,0x75,0x1B,0xF7,0xB0,0x20,0x0B,0x0F,0x5C,0x24,0xE5,0x1E,0x8D,0xE6,0x4C,0xC3,0xF0,0xD5,0x1A,0xC3,0x6B,0x87,0x0D,0xF5,0x0F,0x05,0x0E,0x9B,
0x39,0x20,0x7A,0x81,0xC8,0x4F,0xAA,0x8F,0xD2,0xF8,0xE9,0x39,0xD4,0x88,0xD9,0x73,0x24,0xC7,0xCA,0xD4,0xE8,0xCD,0xC5,0x6A,0x1B,0x05,0xC2,0xE5,0xB7,0x70,0xF2,0x79,
0x1D,0xCF,0xF6,0xC6,0x75,0x56,0xD3,0x65,0x66,0xB0,0x73,0x88,0xBE,0xA0,0x32,0x2E,0x0F,0x53,0x16,0xDF,0x71,0xF6,0x96,0xCB,0xED,0xB4,0xA7,0x63,0xF8,0x28,0x01,0xED,
0x7A,0x82,0x95,0xE2,0x58,0x8B,0xF7,0x36,0xEF,0xDF,0x12,0x96,0xF8,0x87,0x1A,0x4A,0x0C,0x92,0x12,0xE3,0x61,0x6B,0x0A,0x55,0xFF,0x00,0x89,0x23,0xFA,0x6F,0xF5,0x38,
0x1F,0x22,0x43,0x8A,0xF0,0xD8,0x75,0x44,0xC6,0x08,0x5B,0x84,0xB6,0x78,0x52,0x5C,0x1A,0x7F,0xDF,0x1A,0x66,0xBE,0x17,0x4F,0x9A,0xA9,0x0D,0x23,0x49,0x53,0x68,0x04,
0x8E,0x52,0x53,0xB8,0x3F,0xA0,0xFD,0x31,0xC4,0x32,0xE0,0x32,0x8F,0x3F,0xDE,0x0D,0xB2,0xB8,0xCF,0x89,0x19,0xB9,0x0C,0x54,0x50,0xB9,0xD1,0x9D,0x57,0x92,0x56,0x95,
0xDF,0xF8,0x95,0xED,0x7F,0x61,0x8C,0xC4,0x26,0x69,0x71,0xE3,0x20,0xB8,0xE3,0xEA,0x67,0xC0,0xB8,0x6D,0x90,0x7F,0x3A,0x94,0x90,0x47,0xE8,0x06,0x33,0x1A,0xB7,0x2A,
0x40,0x10,0x37,0xD5,0xB9,0xB3,0x02,0x66,0x1C,0xB5,0x93,0xE9,0x4B,0x76,0x6D,0x66,0xB3,0x25,0x60,0x6E,0xB0,0xB9,0x04,0xEA,0x26,0xFB,0x5B,0xBD,0xCE,0x11,0xE3,0x66,
0xAF,0xB9,0x25,0x47,0x97,0x0D,0x95,0x39,0x42,0x2F,0x16,0x23,0xDC,0x5C,0xF8,0xAA,0x49,0x24,0xEF,0x63,0x7B,0x5F,0xD7,0x9C,0x3B,0x64,0x4E,0x9D,0xC5,0x7A,0xB3,0x36,
0xA7,0x56,0x4B,0xAF,0x2E,0x38,0x4A,0x90,0xCB,0xAE,0xEB,0x0D,0x95,0x02,0x4A,0x97,0xEA,0x6D,0x6D,0xBD,0xF0,0xA7,0xD4,0x16,0x60,0x66,0x3E,0xB1,0xB3,0x94,0x40,0x54,
0x78,0x10,0x46,0x94,0x86,0x5A,0xD9,0x6E,0xDB,0x51,0xBD,0xAC,0x05,0xED,0x6D,0x47,0x80,0x0E,0x3A,0x1D,0x1D,0x60,0xDC,0x54,0x92,0xD8,0xE7,0x3D,0xBF,0x41,0x3A,0x5D,
0x43,0xFD,0xDE,0x40,0xC6,0x62,0x8E,0x7A,0x99,0x1E,0x66,0x66,0x63,0xC3,0x91,0xE1,0xBC,0xF9,0x4D,0xED,0x73,0xA5,0x26,0xDC,0x0F,0x6D,0xF1,0xD2,0x9D,0x0C,0x79,0xD9,
0x9D,0x3D,0xAB,0x40,0xA6,0xCC,0x63,0xE2,0x92,0xB0,0xEC,0x55,0x11,0x70,0xCA,0x37,0x49,0x6D,0x29,0xE4,0xA8,0x6B,0x49,0x3B,0x0B,0x6C,0x38,0xB0,0xC7,0x21,0x57,0x0A,
0x65,0xF5,0x21,0xD8,0xF2,0x9A,0x28,0x4B,0x72,0x92,0xDE,0x94,0x02,0xAB,0x36,0x9B,0x00,0x3C,0xBB,0x93,0xA4,0x6F,0x6E,0xF8,0xE9,0x4E,0x87,0xD7,0x65,0xD0,0xA3,0x4B,
0xA6,0x57,0x7C,0x66,0xDF,0x75,0xEF,0x04,0xBC,0xD8,0x43,0x2A,0x69,0x49,0x56,0x9B,0x8B,0x0B,0x84,0x5C,0x94,0xF7,0xE2,0xFB,0x76,0xE8,0xD3,0xE1,0x83,0x23,0xDA,0xB9,
0x40,0x25,0xE7,0x54,0x8B,0x0A,0x96,0xA9,0x54,0xA9,0xAE,0x22,0x73,0xA6,0x10,0x71,0x48,0x5A,0x75,0x16,0xCF,0x60,0x05,0xB6,0x01,0x49,0x27,0xDE,0xF8,0xE6,0x5C,0xC5,
0xD3,0xFA,0xA6,0x6F,0xCE,0x82,0x35,0x7B,0x36,0x8A,0x7D,0x21,0xB6,0x93,0xF0,0xCD,0x3A,0x8F,0xF0,0xC0,0xE4,0x14,0xDC,0x0E,0xC7,0x7B,0xFA,0x62,0xE6,0xAC,0xE6,0x39,
0x15,0xDA,0xFC,0xA2,0xD3,0x05,0xBD,0x36,0x41,0x52,0x8A,0x81,0x70,0x24,0xF9,0x82,0x81,0x36,0xE7,0x7E,0xFC,0xED,0xEE,0xC9,0x96,0xB2,0x9D,0x16,0xB7,0x25,0x2A,0xAD,
0x86,0xDD,0x6A,0x4B,0x44,0x16,0x08,0x0B,0x41,0x41,0xE7,0x51,0x3B,0x0E,0xC0,0x7C,0xFF,0x00,0x5E,0x7F,0x5D,0xA8,0x65,0xBF,0x75,0x7D,0x7C,0xCA,0x1A,0x34,0x51,0x5E,
0x1E,0x73,0x9C,0x18,0xFD,0x10,0xC8,0x66,0xA1,0x47,0xAA,0x56,0xD3,0x98,0x1F,0x71,0x00,0x19,0x08,0x8D,0xE2,0x23,0xFE,0xD0,0x37,0x00,0x8B,0x73,0x7E,0xF8,0x89,0x96,
0x22,0x74,0xD5,0xA9,0xE7,0x30,0xC1,0x88,0xD2,0x19,0x7D,0x61,0x29,0xF8,0xB4,0x58,0x32,0xE6,0xF6,0x09,0xD5,0xB0,0xBD,0xBB,0x7F,0x6C,0x5C,0x3D,0x42,0xC9,0x7F,0x66,
0x5C,0xB7,0x19,0xAA,0xB4,0x98,0x6C,0xC1,0x44,0x55,0xA9,0x83,0xE1,0xA9,0xC5,0x25,0xE7,0x45,0xD5,0xA7,0x48,0xFC,0xD6,0xB1,0x1F,0xB6,0x29,0x4E,0xAC,0xF5,0x13,0x25,
0xE6,0x3E,0x98,0x42,0xA1,0xD2,0x32,0xE4,0x9A,0x63,0xC9,0x7D,0x2F,0xC2,0x2A,0x68,0x34,0x85,0x35,0xE6,0x05,0x76,0x1D,0x8D,0xAC,0x07,0xCF,0x02,0x6A,0x5B,0x50,0xC0,
0x21,0x6F,0x97,0x53,0x9E,0x3F,0x68,0xD5,0x77,0x04,0x19,0x20,0x71,0xD0,0x62,0x1F,0xCD,0xB9,0xEE,0x3A,0x59,0x4B,0x31,0xFA,0x66,0xBA,0xDA,0x54,0xAF,0x08,0x3E,0xEB,
0x09,0x53,0x64,0xDB,0x6D,0x3A,0x42,0xAF,0xBF,0xCB,0x11,0x32,0x6D,0x4D,0xE7,0xFA,0xAD,0x4F,0xA7,0x56,0x7A,0x61,0x2A,0x96,0xCC,0xA1,0xA0,0xFE,0x77,0x1B,0x41,0x00,
0xE9,0x55,0x88,0xB5,0xAF,0xB1,0xFA,0x62,0xB6,0xCA,0x15,0xA9,0xB9,0x1E,0x84,0xFD,0x49,0x8A,0xE3,0xB1,0xEA,0x05,0xC4,0x29,0x98,0x12,0x0A,0x83,0x2F,0x20,0x8B,0xEF,
0xD8,0x1B,0x5E,0xD8,0x7A,0xCB,0x5D,0x68,0xAF,0xD7,0xAB,0xE8,0x5E,0x5E,0xA8,0xA2,0x89,0x5A,0xD3,0xF8,0x30,0xE6,0x7E,0x3C,0x39,0x6B,0xB7,0xE5,0x04,0xEE,0xDA,0x8F,
0x03,0x7B,0x1D,0xB1,0x9F,0xB2,0xB5,0x4A,0x55,0x17,0x2A,0x3F,0x16,0x4F,0xF1,0x3D,0x6B,0x77,0xF2,0x4F,0x3E,0x38,0x9D,0x75,0x0F,0x2C,0x57,0xC2,0x5F,0xAD,0x30,0xCA,
0x65,0x06,0xDB,0x01,0x90,0xED,0x90,0x00,0xB5,0xEC,0x2E,0x7D,0x79,0x3C,0x61,0x12,0xA9,0x9E,0x8D,0x46,0x94,0xBA,0x35,0x65,0xA6,0x90,0x56,0xAD,0x08,0x73,0x48,0xF2,
0x1E,0xC2,0xE7,0xDC,0x0E,0xFC,0xE1,0x7B,0xA7,0xDF,0x68,0x6A,0xAE,0x69,0x96,0xAA,0x2E,0x76,0xA6,0xA2,0x95,0x55,0xA7,0x3A,0x1B,0x01,0x96,0xCA,0x10,0x55,0xBE,0xD6,
0xBF,0x3F,0xAE,0xD8,0x3D,0xD4,0xBA,0x1A,0x5E,0x44,0x2A,0xB4,0x64,0xB4,0xDC,0x67,0x8A,0x6D,0xA4,0xEC,0x95,0x5C,0x92,0x6D,0xEF,0xA8,0xF7,0xE7,0x18,0xB6,0xC6,0xD3,
0xAE,0xC4,0x3C,0x8E,0xB2,0x36,0xBA,0x97,0xB3,0xEF,0x3A,0x48,0x31,0x18,0x65,0xAC,0xA7,0x50,0x17,0x05,0xC5,0x90,0x52,0xA3,0xB9,0x48,0x59,0xD5,0xDF,0xE7,0x85,0xA9,
0xF3,0x0C,0xC8,0x8E,0x42,0x48,0xB9,0x6F,0x4D,0xEF,0xDC,0xD8,0xF6,0xFA,0x60,0x8B,0x8D,0xBE,0xE6,0x51,0x42,0x22,0x5A,0xCF,0xA1,0x41,0x66,0xF6,0x26,0xC0,0x8F,0xD6,
0xF6,0xC0,0xB7,0x99,0x42,0x29,0x88,0x96,0xD8,0x5F,0x8C,0xB5,0x36,0xA7,0x4A,0x8F,0x60,0x39,0xFD,0xF1,0x0D,0x57,0x36,0x9F,0xA9,0x8B,0x5B,0x66,0xED,0x8A,0x7B,0x08,
0x42,0x04,0x26,0x6A,0x6E,0x36,0xFF,0x00,0x8C,0x13,0xE1,0xA5,0x2D,0xB8,0x87,0x2F,0xAC,0xDA,0xC0,0x8B,0xFA,0xEF,0xFB,0x63,0x31,0x1E,0x85,0x35,0x2E,0xD7,0x42,0x12,
0xE1,0x40,0x0A,0x25,0x41,0x63,0x75,0xA8,0x9B,0x03,0xFB,0x1C,0x66,0x1B,0x64,0x50,0x79,0x12,0x86,0x8A,0xCA,0x99,0x4E,0xF1,0xDE,0x58,0x79,0x7B,0x2B,0xC1,0xA0,0xD2,
0x19,0xA7,0xC5,0x05,0x65,0x43,0x5B,0xEF,0x2B,0x72,0xEA,0xB9,0xBA,0x8F,0xF7,0xEC,0x46,0x39,0xE6,0x5B,0xCE,0xC1,0xFB,0x41,0x56,0x61,0x3D,0x1D,0xA4,0xB7,0x25,0x4A,
0x4F,0xC4,0xB8,0x2C,0x50,0x9D,0xC6,0xDD,0xCD,0xEF,0xFB,0x0D,0xB1,0xD7,0x74,0xFA,0x42,0xE5,0x28,0xA9,0xC4,0x94,0x21,0x80,0x9B,0x94,0x9E,0x4D,0xEF,0x6F,0xD2,0xC3,
0xE4,0x4E,0x2A,0x7E,0xA2,0xE5,0x9A,0x68,0xCC,0xAF,0x54,0x92,0x94,0xB4,0xB7,0xD0,0xA6,0xDC,0xB2,0x6E,0xA5,0x0D,0x8D,0xB6,0xDC,0x76,0x3F,0xEC,0x71,0x47,0x45,0x78,
0x1B,0xB7,0x7E,0x29,0x43,0x52,0x32,0x40,0x1D,0xA2,0x9F,0x4D,0x7A,0x57,0x95,0x69,0xB5,0x23,0x98,0xAA,0x95,0x26,0xAB,0x15,0x47,0x9A,0x2E,0xB6,0xC2,0x12,0xA5,0x25,
0x2A,0x36,0x51,0x29,0x57,0x2A,0x36,0xB7,0xA6,0xD7,0x17,0xC3,0xCD,0x2B,0x2D,0xCA,0x2F,0x38,0xFF,0x00,0xDD,0x32,0xC7,0x88,0xE2,0x92,0xDC,0xA6,0xDB,0xBA,0xDA,0x40,
0x36,0x4D,0xF6,0xDA,0xE3,0x6B,0x9B,0xF1,0xDB,0x9C,0x0E,0xA4,0x52,0x9E,0xA3,0xD2,0x91,0x51,0x2D,0x29,0x96,0xD2,0x3C,0x46,0xC7,0xF1,0x04,0x80,0x2C,0x4D,0xC9,0xFF,
0x00,0x9F,0x2C,0x33,0xD4,0x73,0xCD,0x17,0x28,0xD2,0x9F,0xA8,0x57,0xAB,0x21,0x86,0x14,0x82,0xB4,0x37,0x20,0x0D,0x6A,0x07,0x8B,0x27,0x9D,0xD3,0xB5,0xB6,0xB6,0xDF,
0x2C,0x52,0x3A,0xED,0xC3,0x62,0xF5,0x88,0x7B,0x04,0x1D,0xC6,0x4B,0x81,0x95,0x1B,0x43,0xAA,0x93,0x55,0x78,0x43,0x56,0xAF,0xC3,0x74,0xEE,0xA5,0xDA,0xDB,0x6E,0x6C,
0x4E,0xC7,0xB7,0x6E,0xF8,0x54,0xEA,0x27,0x5B,0xF2,0xDE,0x55,0x84,0xF5,0x36,0x34,0xAB,0xBE,0x84,0x5B,0xC4,0x49,0x1A,0xB5,0x0B,0x82,0x13,0xB5,0xEF,0x84,0xD8,0xFD,
0x6D,0xAF,0x67,0xEA,0x84,0xC8,0xD9,0x66,0x1A,0x11,0x19,0x92,0x03,0x73,0x1D,0x1A,0x4B,0x60,0x03,0xBE,0xDC,0xEC,0x47,0xF4,0xB7,0x7C,0x53,0xD5,0x7A,0x8E,0x43,0x99,
0xD5,0x38,0x70,0x2B,0xDE,0x2C,0x84,0xB5,0x20,0xB7,0x22,0x42,0x4D,0x9A,0x17,0xDB,0x71,0xDC,0x5F,0xF6,0xC2,0x25,0x1A,0xDB,0x0A,0x30,0x3C,0x72,0x71,0xD6,0x34,0xAA,
0x10,0x06,0x32,0x5D,0x5F,0x2E,0xD7,0xBA,0x8B,0x5A,0xA5,0x66,0x1A,0xE4,0xE4,0x44,0xCB,0xCF,0x38,0x1B,0x8B,0x1F,0x7D,0x7A,0x54,0x6E,0x12,0x84,0xF7,0x5A,0xBD,0x7F,
0xB6,0x2D,0x7C,0xC1,0xD1,0xDA,0x2D,0x4D,0xC7,0x2B,0x55,0x48,0xAF,0xCF,0x91,0x11,0x80,0xD4,0x58,0x2C,0xB8,0x1A,0x6C,0x36,0x81,0x74,0x37,0xFB,0x1B,0xF6,0xF3,0x1C,
0x5E,0x19,0x47,0x27,0x53,0xE4,0xC9,0x82,0xCA,0x62,0x47,0x31,0x98,0x48,0x0C,0x10,0x2E,0x10,0x34,0xEF,0xA7,0xD3,0x6C,0x72,0xBF,0xDA,0x8F,0x3C,0xE6,0xAA,0x3F,0x5B,
0x2A,0xB9,0x3A,0x93,0x54,0x91,0x0A,0x99,0x09,0xB6,0x9B,0x0D,0xB3,0x74,0x15,0x15,0x36,0x95,0x92,0x4F,0x3F,0xC5,0xFF,0x00,0x37,0xC7,0xDA,0x74,0xD4,0x6A,0xC8,0xF6,
0xDB,0x68,0x10,0x8E,0xF5,0xD5,0x90,0x46,0x49,0x95,0x66,0x67,0x7E,0x75,0x57,0x30,0x56,0x9C,0xA9,0xD2,0xBE,0x0D,0x41,0xF4,0xB0,0xF4,0x76,0x88,0x52,0x5B,0xD0,0x0A,
0x40,0x49,0x00,0x0B,0x80,0x8D,0x8F,0x7F,0xAE,0x1E,0x7A,0x4B,0x95,0x61,0xD2,0xE0,0xCB,0xCC,0x15,0x3A,0x8D,0x1E,0x4D,0x1D,0xC3,0xA1,0x3F,0x12,0x01,0x0A,0x4F,0x73,
0x73,0xBA,0x14,0x01,0xFD,0xF0,0x81,0x42,0xA8,0x55,0xA7,0x74,0xF2,0xB7,0x0D,0xE7,0x75,0x47,0x61,0x6D,0x48,0x53,0xAE,0xEE,0x75,0x15,0xDE,0xE0,0xF7,0x36,0xD5,0xF3,
0xBE,0x23,0xC1,0xCB,0x0A,0xA9,0xCA,0x34,0xD6,0xAB,0xEC,0xD3,0xD9,0x94,0xE5,0xC3,0x12,0x4A,0x92,0x85,0x1E,0x76,0xED,0x7B,0x14,0x9B,0x7F,0x30,0xC3,0xDA,0x85,0xF8,
0x35,0x45,0xB6,0x81,0x8C,0xF7,0xE3,0x03,0xF6,0x98,0xAF,0x39,0x0C,0x06,0x4C,0xE9,0x6C,0xCD,0x97,0x20,0x56,0x9B,0x8D,0x5C,0xCB,0x35,0x38,0x8F,0x68,0x92,0xDA,0x5D,
0x53,0x4E,0x82,0x00,0xD3,0xA6,0xCA,0x20,0xFC,0xAD,0x7F,0x7C,0x38,0x54,0x2A,0x52,0x2A,0xDD,0x32,0x34,0x61,0x4F,0x7F,0xE2,0x12,0x7F,0x0D,0xD7,0x05,0xBC,0x42,0x9B,
0x1B,0xA7,0x7D,0xC1,0xB0,0xDF,0xDF,0xDF,0x1C,0xF9,0xD2,0x4C,0x89,0x9E,0xA9,0xF9,0xE2,0xB3,0x47,0x11,0x1C,0x5C,0x15,0xD3,0x1D,0x7E,0x43,0xA8,0x57,0xE1,0xA8,0x22,
0xCA,0x6D,0x69,0x3D,0xC8,0x58,0x48,0xF5,0xB6,0xAC,0x5D,0x51,0xAA,0x6B,0x7B,0x2B,0xD3,0xDB,0x64,0xA8,0xA9,0xB4,0xAA,0xCA,0x52,0xCD,0xD2,0x54,0x9D,0x5B,0x7A,0xFE,
0x41,0xDF,0xB9,0xC4,0x8D,0x4D,0x2B,0x52,0x80,0x8D,0xB8,0x1E,0x86,0x4F,0xF5,0x2B,0xAC,0x2A,0x50,0x8C,0x4D,0xB0,0x50,0xA5,0x64,0xFA,0x21,0x37,0x0E,0xA9,0x6E,0x38,
0xA4,0xFB,0x05,0x10,0x71,0x01,0xC2,0x85,0xA9,0x4C,0xB5,0xAC,0xA5,0x6C,0xA9,0xCD,0x40,0xEC,0x90,0x9F,0x5F,0x9E,0x08,0x49,0x7D,0xD6,0x3E,0xEC,0xA7,0xEA,0x68,0x3B,
0xA1,0x0B,0xD2,0x8D,0xED,0x72,0x54,0xAF,0xD9,0x62,0xD8,0x1B,0x70,0xC4,0x47,0x14,0x38,0xF8,0x32,0x00,0xF9,0x9F,0xF7,0xC4,0xAB,0x49,0xA8,0x9F,0x3C,0x49,0xAA,0xC3,
0xDD,0x50,0xC3,0xA4,0x87,0x4F,0x85,0x21,0xB9,0x05,0xE4,0x4C,0x52,0x00,0x7D,0x22,0xC1,0x00,0x95,0x24,0x1D,0x40,0x5F,0xB5,0xAE,0x77,0xC6,0x63,0xC3,0xF3,0xD6,0xD3,
0x01,0xD2,0xB0,0x3C,0x45,0xF7,0xD8,0x1D,0xBB,0xE3,0x30,0xDB,0x56,0xED,0xCA,0xC2,0xE8,0xED,0x01,0x4E,0xE9,0xD6,0x93,0x62,0xB9,0x4F,0xA5,0x2D,0x0D,0x28,0x21,0xA0,
0x92,0x91,0x60,0x77,0xF5,0x27,0x14,0xC6,0x6F,0x69,0x32,0xAB,0x69,0x8F,0x09,0xB2,0x64,0x48,0x5F,0x95,0x29,0x49,0x04,0x20,0x7E,0x72,0x4D,0x8D,0x86,0xD7,0xF7,0xB6,
0xD7,0xC5,0xDB,0x59,0x21,0xD6,0x86,0xB4,0xAF,0xC9,0x77,0x0A,0x54,0x40,0x00,0x03,0xB0,0xDF,0x6B,0xFF,0x00,0x41,0xBE,0x28,0x47,0x2A,0xD5,0x0C,0xC9,0x9B,0x6A,0xB4,
0xF8,0x35,0x05,0x31,0x25,0xA5,0x84,0xB4,0xB8,0xA9,0x00,0x58,0x9D,0x85,0xB7,0xD4,0x93,0x6B,0xDC,0xD8,0x6D,0x70,0x3D,0x5E,0xAA,0x83,0xBB,0x22,0x5C,0x7B,0x40,0x19,
0x31,0x8E,0x5C,0xEA,0x7F,0x89,0x1E,0x87,0x2A,0x9A,0xB7,0x12,0x84,0xFF,0x00,0x86,0x8B,0x12,0x0F,0xF3,0x13,0x72,0x3E,0x43,0x7E,0x7E,0x58,0xE5,0x8E,0xAE,0xA6,0xB3,
0xD4,0x7E,0xB8,0x47,0xCB,0x70,0x19,0x08,0xF0,0x6C,0xD2,0x11,0x6B,0x04,0x0F,0x7B,0x5F,0x80,0x06,0x2F,0x3C,0xCB,0x5F,0xA1,0xF4,0xA2,0x8C,0xFC,0xEA,0xAC,0xCF,0xBC,
0xB3,0x03,0xA9,0x21,0x11,0xD0,0x3C,0xA9,0x51,0x17,0x37,0xE0,0xDB,0x8D,0xB6,0x1C,0x73,0x81,0x1D,0x14,0xE9,0xD5,0x5A,0xA0,0xF4,0xAE,0xA4,0x66,0x62,0xDA,0xA6,0x54,
0x54,0xA7,0x9B,0x2E,0x91,0x74,0x36,0x77,0xD4,0x7D,0x2E,0x3F,0x61,0x87,0x51,0x4E,0x9D,0x4D,0xC4,0x73,0xDB,0xF3,0x81,0x46,0xDE,0xDB,0x73,0xC4,0x64,0xC8,0x5D,0x37,
0xA6,0x65,0x1C,0xB4,0xDD,0x19,0x96,0x87,0x8B,0xA7,0xF1,0x5D,0xB7,0xF8,0x8A,0x3C,0x9B,0x9F,0xF9,0xB6,0x38,0xE7,0xAA,0x39,0x22,0xA5,0x92,0xBA,0x93,0x3E,0x0C,0x96,
0x9C,0x31,0xD6,0xE2,0x9D,0x8C,0xFD,0xB6,0x71,0xB2,0x49,0x1B,0xFA,0x8E,0x0E,0x3A,0x17,0xA9,0x3F,0x68,0xA6,0x28,0x19,0x91,0x34,0x9C,0xAB,0x0E,0x2D,0x41,0x96,0x54,
0x03,0xEF,0xAD,0x77,0x4A,0xAD,0xC8,0x41,0x1F,0xD7,0xF6,0xC2,0xE5,0x5F,0xAE,0xF9,0x55,0xFC,0xC4,0xC0,0x99,0x4D,0x4D,0x5E,0x99,0x29,0x84,0x29,0x6D,0x3A,0xD0,0x2B,
0x88,0xE9,0x27,0x5A,0x49,0x50,0xF3,0x0E,0x38,0xC6,0x34,0x6B,0xAC,0xD3,0xB9,0xB4,0xA6,0xED,0xD1,0x8B,0x1E,0xAB,0x06,0x33,0x8C,0x4E,0x82,0xFB,0x29,0x67,0xCF,0xFC,
0x5B,0xD3,0xAF,0x84,0x79,0x0A,0xF8,0xEA,0x3F,0x86,0xC2,0xC2,0xB7,0x52,0xD3,0xA0,0x58,0xFE,0xCA,0xC5,0x9B,0x9E,0x3A,0x41,0xD1,0x79,0xF2,0xEA,0x3D,0x46,0xEA,0x15,
0x26,0x13,0x6E,0x2D,0xA4,0x19,0x32,0x67,0x3A,0x50,0x84,0x84,0xA0,0x25,0x3B,0x5E,0xD7,0xB0,0x1F,0xA6,0x39,0x1B,0xA4,0x35,0x5E,0xA4,0xE4,0xBC,0xC5,0x9B,0x6A,0xBD,
0x3E,0xCA,0xEE,0xD5,0xCC,0x8A,0x9B,0x6D,0x86,0x10,0xC2,0x9C,0x4A,0x1A,0x21,0x6B,0x49,0xB0,0xE2,0xE9,0x29,0x00,0x9D,0xB1,0x62,0x66,0x3E,0xBD,0x65,0x7E,0xAA,0x65,
0x7A,0xEE,0x48,0xEA,0xF6,0x57,0x99,0x43,0x99,0x4D,0x2D,0x48,0x65,0x88,0xEA,0x5F,0x88,0x4A,0x5C,0x48,0x71,0x3A,0x4E,0xE1,0x61,0x2A,0x57,0x23,0x8B,0xFA,0x62,0x9E,
0x96,0x94,0xE4,0x8E,0x9E,0x24,0xFB,0x98,0x83,0x2A,0x39,0xF5,0x4C,0x99,0x52,0xA3,0xE7,0x8A,0x8E,0x54,0xCA,0xCA,0x67,0x28,0xD3,0x1D,0x65,0xB8,0x6E,0x06,0xCD,0xDF,
0x71,0x4A,0x29,0x41,0x70,0x5E,0xE0,0x12,0x36,0xF6,0x1E,0xB8,0x45,0x25,0xC9,0xA2,0x4B,0xE9,0x86,0xD3,0x29,0x65,0x0C,0x3A,0xB0,0xEB,0x21,0x5E,0x52,0x8B,0x15,0x11,
0x6B,0xEA,0x4E,0xF7,0xF6,0x4E,0x3A,0xF3,0xA8,0x39,0x07,0xA5,0xD9,0x2E,0x83,0x91,0x9F,0xC8,0xD4,0x64,0x8C,0xB7,0x99,0xEA,0x6C,0xB3,0x50,0x71,0x32,0x1C,0x5B,0x72,
0x19,0x5B,0x77,0x6C,0x28,0x28,0x91,0xC9,0xD4,0x0F,0x20,0x8D,0xB9,0x38,0xA8,0xFA,0xCF,0x43,0x6F,0x23,0x75,0x72,0xA7,0x47,0xA7,0x53,0xD6,0xAF,0x05,0x2D,0x29,0x0B,
0x29,0xD9,0xD8,0x8E,0x28,0xAD,0xBF,0xFF,0x00,0x2A,0x0B,0x6A,0xFD,0xEC,0x3D,0x70,0x9E,0xAF,0x47,0xEC,0xEE,0x74,0x1D,0x7E,0xBD,0x3F,0xDC,0x47,0x34,0xDA,0x93,0x66,
0x11,0x8C,0x49,0xCA,0xB9,0x87,0xA8,0x03,0x3A,0xC1,0xCB,0xF0,0x66,0xB3,0x49,0xA8,0x68,0x4C,0x78,0x73,0x02,0x35,0x25,0x5E,0x22,0x4E,0x94,0x38,0x91,0x74,0xA9,0xA5,
0x11,0xA4,0xEC,0x74,0xDC,0x1E,0xD8,0xB8,0xB2,0xDD,0x29,0xE8,0x59,0x58,0xC0,0xAF,0x40,0x4C,0x7A,0x8B,0x48,0x4B,0xAB,0x49,0xDB,0xCA,0x11,0xC2,0x6C,0x7B,0x05,0x14,
0x9F,0xAE,0xFB,0x1C,0x50,0x6F,0xE7,0x55,0xD0,0xB3,0x7C,0x69,0x54,0xC8,0xEA,0x2D,0xC7,0x29,0x91,0x16,0x42,0x01,0x2E,0x44,0x78,0x6F,0x61,0xEA,0x80,0xA4,0x6E,0x9F,
0x4C,0x75,0x20,0xA6,0xC0,0xCC,0xA4,0xF5,0x0A,0x0B,0xEB,0x5D,0x16,0xB3,0x4B,0x45,0x55,0x0D,0x07,0x42,0x04,0x67,0x6E,0x02,0xDA,0x04,0xFA,0x2F,0x51,0x23,0xE7,0x80,
0x0D,0x39,0xBB,0x4E,0x70,0xB8,0x23,0x90,0x3F,0x98,0x9F,0xA9,0x81,0xBB,0x24,0xC4,0x09,0x76,0x7A,0xB0,0x8A,0xAB,0x88,0x5F,0x82,0x87,0x83,0x60,0xDC,0x02,0xA4,0x70,
0x3F,0xA7,0xF4,0xC7,0xAA,0xD3,0x80,0x31,0x20,0x30,0x9D,0x04,0xA5,0x28,0x4A,0x51,0x6F,0x28,0xBF,0x6B,0xFB,0x61,0x87,0x32,0x65,0x78,0x02,0x20,0xA9,0x51,0x6A,0x3E,
0x3D,0x39,0xC4,0x83,0xAD,0xF0,0x75,0x25,0x42,0xC1,0x43,0x6B,0xF0,0x7E,0x5F,0xD3,0x0A,0xF5,0x36,0xD9,0x90,0x8F,0x19,0xA9,0x61,0x69,0x53,0x9A,0x94,0x94,0x20,0x92,
0x8B,0x1B,0x77,0xF9,0xFE,0xD8,0x85,0x7D,0x2D,0xB8,0x6E,0xFA,0x48,0xEC,0x4E,0x49,0x30,0x1C,0xD6,0x9F,0x90,0xD4,0x76,0x16,0x52,0xDA,0x00,0x2A,0xD6,0x6E,0x48,0x37,
0xF4,0xF9,0x63,0x30,0xC1,0x0A,0x0D,0x16,0x6C,0xC4,0x25,0xD4,0x4B,0x9C,0xA6,0xAC,0x52,0xD2,0x12,0x10,0x8B,0x8D,0xC6,0xA2,0x4F,0x00,0xDC,0x9E,0x05,0x87,0x38,0xCC,
0x38,0xAA,0xDD,0x01,0x1F,0xBC,0x1D,0x76,0x15,0x18,0xC4,0xBB,0xFA,0x95,0x9B,0xCC,0x5A,0xBD,0x3F,0x28,0x50,0x58,0x71,0xF9,0x12,0x55,0xE1,0xAF,0xC2,0x4D,0x94,0x96,
0xFB,0xAB,0x7E,0x00,0xE7,0xDF,0xDF,0x8C,0x49,0xA5,0xE4,0xBC,0x9B,0xD3,0xF8,0x6A,0xAE,0x19,0x28,0xA6,0xBA,0xB4,0xF8,0x92,0xA6,0xC8,0x78,0x92,0x4D,0xB7,0xDD,0x47,
0x8F,0xA0,0xC1,0xFC,0xA5,0x94,0x8A,0x24,0x3B,0x9A,0x6B,0x2D,0x87,0xA7,0xBC,0x48,0x61,0x97,0x2D,0xF8,0x48,0xDB,0x61,0xE8,0x4F,0x72,0x3B,0x7B,0x13,0x7E,0x6C,0xFB,
0x60,0x67,0x56,0xD1,0x06,0x36,0x5D,0x62,0xA8,0x95,0x49,0xF1,0xC1,0x91,0x12,0x3B,0xDF,0x95,0x2A,0x41,0xFC,0xE0,0x6F,0xBF,0xEF,0xBE,0x3A,0xCA,0x74,0x8A,0x06,0xE3,
0x29,0x35,0xC5,0x8E,0xD1,0x23,0xD4,0xF2,0x7B,0xDD,0x6B,0xFB,0x41,0xC0,0x83,0x40,0x4B,0xB3,0x28,0x31,0x02,0x57,0x22,0x68,0x68,0xF8,0x7A,0x0F,0x9A,0xFF,0x00,0x5F,
0xF5,0xC5,0xB9,0xF6,0x9E,0xAC,0x3D,0xD3,0x1E,0x82,0xC5,0xA2,0x51,0xDB,0x53,0x2B,0xAA,0x2B,0xE1,0x0B,0xE8,0x1A,0x74,0x21,0x29,0xB9,0x17,0x16,0xDC,0x8D,0xBE,0x57,
0xC1,0x5F,0xB3,0x64,0xE8,0x10,0x3A,0x37,0x4A,0x76,0x95,0x4E,0xF8,0x30,0xB6,0xFC,0xC1,0x6A,0x2A,0x2A,0xDF,0x72,0x2F,0xBD,0xAF,0x7C,0x22,0x7D,0xAA,0x2A,0xF4,0x6E,
0xAB,0x66,0x9C,0x97,0xD3,0x6A,0x3D,0x65,0x87,0x6A,0xAA,0x9E,0xAF,0x89,0x6A,0x3A,0x83,0x81,0x84,0x11,0x62,0x55,0x6E,0x08,0xB1,0x36,0xE7,0x0C,0x0A,0x14,0xFD,0xE3,
0x0E,0x07,0x49,0x95,0xB7,0x9D,0x99,0x9C,0x8D,0x90,0x3A,0x71,0x59,0xEA,0x26,0x64,0x51,0x5F,0x89,0x1E,0x98,0xD1,0xBC,0x89,0xA4,0x6C,0x3F,0x94,0x13,0xC9,0xC3,0xD7,
0x50,0xFA,0x45,0x45,0x4D,0x2A,0x2C,0xBA,0x14,0xB8,0xB0,0x60,0xC4,0x49,0x41,0x70,0xB7,0x77,0x1E,0x55,0xEC,0x75,0x28,0x90,0x0E,0xE3,0x6F,0x9E,0x2F,0xB6,0xB2,0x35,
0x3A,0x91,0x4A,0xA9,0xE4,0x8C,0xBF,0x29,0x0D,0x33,0x47,0xF0,0x94,0xEA,0xE2,0xAC,0x07,0x1D,0xD8,0x2C,0x85,0x7A,0x15,0x10,0x41,0xC5,0x55,0xF6,0x92,0x08,0x39,0x7E,
0x87,0x96,0xE2,0x2D,0xF8,0xB3,0xDF,0x79,0xB7,0x57,0x11,0xC2,0x6C,0x42,0xC1,0xD3,0xB9,0xE2,0xCA,0x49,0xDB,0xB6,0x21,0x59,0x6E,0xA2,0xDD,0x48,0xDA,0x76,0x81,0xFF,
0x00,0x52,0xC5,0x6D,0x52,0xA6,0x31,0x9C,0xCF,0x9D,0x13,0xCE,0xD9,0xC3,0xA3,0xF3,0xEB,0x39,0xA9,0x88,0x13,0xF3,0x0D,0x11,0xA6,0xD2,0xC5,0x40,0x8B,0xA7,0xE1,0xD2,
0x93,0x64,0xA8,0x85,0x5B,0xD7,0x63,0xDF,0x0E,0xDD,0x41,0xEB,0x97,0x47,0xF3,0xAB,0xAD,0x55,0xAB,0xF9,0x0A,0x4C,0x2A,0xD3,0xA8,0x09,0x8F,0x51,0x54,0x64,0x87,0x00,
0x20,0x79,0x94,0xA6,0xD6,0x14,0xA0,0x3D,0x2E,0x6E,0x2E,0x3B,0x9C,0x55,0xD9,0x7F,0x34,0x42,0xCA,0x32,0x27,0xD2,0xEB,0xCF,0xCF,0x93,0x97,0xAA,0xF4,0xB3,0x41,0xAB,
0xAD,0x9B,0x95,0xC6,0x70,0x5C,0x07,0xB4,0x9D,0x95,0xA4,0x93,0xC7,0x65,0x1E,0x70,0x12,0xAF,0x07,0x33,0xBF,0x40,0x42,0x58,0xCA,0xE2,0xB1,0x1E,0x08,0x2D,0xB1,0x98,
0xE2,0x85,0x39,0x13,0xC3,0x03,0x67,0x3C,0xA9,0x36,0x36,0xB5,0xC1,0x22,0xC7,0x9F,0x4C,0x52,0xD3,0x5C,0xCD,0x52,0x90,0xA0,0xF9,0xED,0x11,0xD4,0x56,0x05,0x87,0x92,
0x27,0x53,0xC6,0x81,0x0B,0x37,0xE4,0xAE,0x9F,0x35,0x45,0xAA,0x42,0x9D,0x43,0xA3,0xD5,0x5A,0xAB,0x48,0x59,0x25,0xB6,0x92,0xDA,0x50,0xAB,0xA1,0x08,0xDE,0xDE,0x73,
0x7D,0x1F,0xC2,0x76,0xD8,0x00,0x31,0x54,0x75,0x9F,0x38,0x2F,0x35,0x7D,0xA9,0x04,0xCA,0x43,0x8D,0x3B,0x05,0xCA,0x52,0x62,0x2D,0x0B,0x37,0x28,0x4B,0x6B,0x2B,0x0A,
0x23,0x84,0x92,0xBE,0x37,0xED,0xF2,0xC3,0x3F,0xD9,0xA9,0x74,0xF8,0x39,0x1F,0x30,0x64,0x9A,0xAC,0xD6,0x1D,0x93,0x0D,0x83,0x3E,0x3B,0x8D,0x2C,0x9F,0x19,0xA5,0x02,
0x54,0x9B,0x7A,0x83,0x62,0x7F,0xEF,0xC2,0x6C,0x7A,0x2D,0x26,0x6D,0x41,0xE7,0x56,0x14,0x1D,0x71,0xC0,0xF0,0x74,0x91,0x65,0x2C,0x70,0x0E,0xF7,0x21,0x22,0xD6,0x16,
0xFF,0x00,0x65,0x7D,0x56,0xE6,0xAD,0x3D,0xBF,0x23,0x10,0x9A,0x0A,0xF2,0xC5,0xBC,0x4A,0xAE,0xA9,0x4F,0x10,0x6A,0xCE,0xBA,0x1C,0x69,0x87,0xD9,0x74,0x1B,0x1E,0x09,
0x07,0x5E,0xDF,0x3B,0x94,0xDB,0x16,0x66,0x4D,0xA9,0xBB,0x99,0x32,0x95,0x33,0x2F,0xBE,0x99,0x0B,0xA5,0xD2,0x96,0xE2,0x20,0xC3,0x65,0xCD,0x28,0x52,0x8A,0x8A,0xCA,
0x96,0x6C,0x4A,0x80,0x0A,0x36,0x1F,0xCA,0xAD,0xEF,0x7C,0x06,0xCC,0xB4,0x18,0xCD,0x57,0x98,0x88,0x86,0x8A,0x03,0x81,0x20,0xBA,0xE0,0xB1,0x51,0x2A,0xDC,0x9E,0x6C,
0x0D,0xCE,0xFB,0x77,0xDB,0x12,0x7A,0x7C,0xC5,0x46,0x95,0x94,0x1A,0x9F,0x1A,0xA0,0x22,0xC8,0x92,0xE9,0x4B,0x4D,0xA1,0x24,0xA5,0x09,0x4D,0xC0,0x02,0xC0,0xD8,0x5D,
0x4A,0xF9,0xDC,0x9E,0x4E,0xF2,0xE8,0xB4,0xAD,0x4C,0x43,0x60,0x9E,0x23,0x1E,0xA3,0x8F,0x88,0x96,0xBC,0x60,0x22,0x52,0xEA,0x54,0xB7,0x69,0x12,0x51,0x19,0xF4,0x38,
0xB6,0x9E,0x54,0xA4,0xA9,0x01,0x7A,0x4E,0x93,0xA7,0xC3,0xB8,0x07,0xE7,0xD8,0x7C,0xF0,0xB8,0x88,0x54,0xF9,0xAE,0xB7,0x10,0x29,0xF6,0x02,0x98,0x0F,0x3A,0xEE,0xB4,
0x59,0x3B,0xA6,0xE7,0x7B,0x58,0x73,0x7D,0xEF,0xE9,0x83,0x15,0x70,0xEC,0xAC,0xA2,0xD2,0xA5,0xCF,0x31,0x63,0x34,0xB0,0x5D,0x71,0x57,0x25,0x5B,0x6E,0x12,0x3B,0x9E,
0x2C,0x3F,0x5C,0x00,0xA4,0x56,0xA3,0x07,0xD2,0x8A,0xAC,0x06,0x64,0xD3,0xD0,0x90,0xC2,0xDA,0xD3,0x6D,0x41,0x5A,0x41,0x51,0x3C,0xEA,0xEE,0x3D,0x3B,0x77,0xC4,0xB7,
0x56,0x20,0x09,0x15,0x90,0x06,0x35,0x99,0xB2,0x44,0xEA,0x2C,0x5A,0x67,0xDD,0xF1,0xA6,0x4E,0x2C,0xAD,0x41,0x2F,0x3E,0xE4,0x70,0x16,0xF8,0xBF,0xA8,0x5D,0xC0,0xE3,
0xCB,0x63,0x7E,0x4F,0x6B,0x66,0x02,0x66,0x3A,0x64,0x48,0x33,0x24,0x53,0xD8,0x4A,0x92,0x95,0x9F,0x1A,0x33,0x88,0x37,0x4A,0xD0,0x77,0xDE,0xFB,0x83,0x6D,0xAD,0xEA,
0x0E,0x33,0x1E,0x65,0x81,0xE9,0x14,0xDA,0x80,0x90,0xE3,0x91,0x3B,0x46,0xB9,0x51,0x79,0x8C,0xBB,0x26,0x5B,0x12,0x9B,0x43,0x85,0x3A,0x12,0xE1,0xB0,0x4B,0x63,0xB9,
0xBF,0xA0,0xDC,0xE3,0xF3,0x9B,0xAB,0xD9,0x6E,0x2B,0xBD,0x4B,0x12,0x3E,0x2D,0xE9,0x8F,0xCF,0x96,0x02,0xD6,0x91,0xA8,0xA9,0x4A,0x36,0xB6,0xF8,0xED,0xFC,0xFB,0x55,
0x62,0x7C,0x75,0xD2,0x59,0x70,0x29,0x9D,0x3A,0x74,0xA9,0x41,0x29,0x57,0x3C,0x93,0xB0,0x1B,0x9D,0x8F,0x38,0xA4,0xF3,0x76,0x50,0xA5,0xBB,0x49,0x76,0x4D,0x42,0x32,
0x94,0xF3,0x88,0x5A,0x52,0x9D,0xDB,0x5B,0xF7,0x16,0x28,0x4A,0xAD,0x74,0xA0,0x8D,0x94,0xAE,0x48,0x3A,0x47,0x73,0x8E,0xFE,0xC3,0xD8,0x46,0xAA,0x6D,0xBC,0xC8,0xD4,
0xDC,0xFF,0x00,0x44,0x8B,0xF6,0x62,0xA9,0xC5,0x5C,0x9A,0x84,0x58,0x54,0xFB,0x40,0x6A,0x5C,0x20,0xA6,0xDC,0x16,0xB2,0x50,0xEA,0x7D,0x2F,0xB1,0x23,0xDC,0xE2,0x88,
0xE9,0x9F,0x4F,0x33,0x9D,0x67,0xAE,0x51,0x69,0xF4,0xAA,0xBF,0xDD,0x75,0x16,0x90,0x67,0xC7,0xA8,0x12,0x16,0x16,0x9B,0x79,0x5C,0x45,0xFF,0x00,0x38,0x37,0xF7,0xE4,
0xE0,0xAC,0x8A,0x76,0x73,0x9F,0x0D,0xCA,0x46,0x64,0x90,0xCB,0x99,0x78,0xB8,0x08,0xA7,0xD3,0xCA,0x5A,0x4B,0x76,0xFC,0xBA,0x6D,0xC8,0x16,0xE0,0x93,0x7E,0x4D,0xCE,
0xF8,0xB1,0x1B,0x6E,0xAC,0xFE,0x44,0xA6,0xA7,0x23,0xD3,0x9C,0x6E,0xB5,0x42,0x5A,0x57,0x4E,0x98,0xE3,0x89,0x53,0xC9,0x4F,0x0A,0x42,0x92,0xBE,0x52,0x41,0x3B,0x6E,
0x36,0xF6,0xC0,0xC5,0xAB,0x8D,0x80,0xC3,0x0F,0x8E,0x71,0xDE,0x22,0x51,0xB2,0x97,0xDA,0x09,0x1D,0x43,0xCE,0x74,0xB8,0x12,0xDF,0x72,0xA8,0x82,0x17,0x55,0x2E,0x2D,
0x03,0xE2,0xC1,0x55,0xD2,0x50,0x54,0x2D,0xE6,0x1B,0x8B,0x5B,0x6D,0xB1,0x60,0xE7,0x3C,0x9B,0x51,0xEA,0xB6,0x72,0xA1,0x75,0x07,0x2A,0xC4,0x6E,0x4B,0x8C,0x46,0x4C,
0x2A,0xED,0x19,0xC7,0xD2,0xD4,0x88,0x52,0x59,0xBE,0xC5,0x27,0x71,0x7B,0x6C,0x6D,0xDB,0x0E,0x94,0x1C,0xC5,0x51,0xCB,0xB9,0x9D,0x39,0xFB,0xA9,0xF5,0x98,0x14,0xB1,
0x22,0x02,0x20,0xCA,0x8A,0xC2,0x6E,0xA7,0xDE,0x42,0x89,0x49,0x40,0x4F,0xE6,0x36,0x3C,0x76,0xF9,0x60,0x63,0x59,0x23,0x2C,0xF5,0xAF,0xA8,0x93,0x33,0xA7,0x4A,0x33,
0x45,0x5B,0x2C,0xD6,0x98,0x5A,0x53,0x52,0x84,0xB0,0xB8,0xEA,0x94,0x8B,0x5B,0x58,0x09,0x52,0x4A,0x6E,0x36,0x3D,0x8D,0xBB,0x6F,0x7F,0x0A,0x8B,0x15,0x8F,0x99,0xA0,
0xE5,0x58,0x1F,0x12,0x80,0x7D,0x99,0x12,0xAB,0xF5,0x86,0x23,0x26,0xA5,0x19,0xC5,0xC8,0x2E,0x3F,0x4E,0x92,0x94,0x87,0x19,0x5E,0xE1,0x49,0x20,0xF6,0xBF,0xF1,0x0F,
0x4C,0x58,0xDD,0x23,0xAA,0xC9,0xC8,0x52,0x27,0x2C,0x3C,0xF2,0xE9,0x73,0xD8,0x5B,0x53,0xA2,0x36,0xAD,0x9C,0xF2,0x90,0x08,0x1F,0xE6,0xDF,0xB7,0xFA,0xE2,0x46,0x73,
0xE9,0x5E,0x7C,0xA7,0xE6,0x05,0x37,0x57,0xA1,0xD7,0x2B,0x69,0x8D,0x71,0x1A,0x7C,0x95,0x47,0x6D,0xDD,0x27,0xFE,0xA2,0x5C,0x25,0x47,0xD2,0xE3,0x12,0x68,0xD4,0xB7,
0x69,0xF4,0x35,0xB3,0x55,0x86,0xC4,0x39,0x4A,0x46,0xA1,0x1D,0x4F,0xA5,0xE5,0x81,0x7D,0xB5,0xAA,0xC0,0x1F,0x40,0x00,0xF5,0x37,0xDB,0x10,0xCD,0xED,0x43,0xF0,0x65,
0x7F,0x6D,0x6D,0x4C,0x19,0x58,0xD0,0xE5,0xD6,0x59,0xCC,0xAD,0x4E,0xA6,0xFC,0x55,0x39,0x5A,0x94,0xD2,0xF4,0x9F,0x32,0x9B,0x37,0xD9,0x56,0xE7,0x6B,0x7E,0x98,0xBE,
0x29,0x74,0xB2,0xD5,0x2D,0xB5,0x85,0x29,0x0B,0x4A,0x00,0x50,0x52,0x74,0xDE,0xFF,0x00,0xBE,0x06,0x51,0x32,0xB4,0x65,0xC6,0x12,0x1F,0x69,0x3A,0xDC,0x37,0x52,0x49,
0x17,0xFD,0x70,0xEA,0xC4,0x76,0x9A,0xCB,0xF2,0x16,0x1B,0x51,0x17,0xB6,0xFB,0x58,0x58,0x0E,0x3E,0x98,0xC6,0xBB,0x54,0xB7,0xB0,0x20,0x4F,0x74,0xF5,0x1A,0xC1,0x11,
0x07,0x31,0x53,0xBE,0xF1,0x53,0x08,0x16,0x70,0x92,0xA0,0xA5,0x0B,0xD9,0x00,0x8B,0xDF,0xD8,0xED,0xDF,0x13,0x28,0x89,0xA7,0x52,0xB2,0x84,0x67,0x2A,0x75,0x14,0x33,
0x19,0x08,0xF0,0xEC,0x82,0x52,0xB7,0x56,0x9D,0xEC,0x90,0x05,0xEC,0x38,0x2A,0xE3,0x6C,0x19,0x44,0x45,0xB3,0x4C,0x5C,0xC5,0x36,0x15,0xBE,0xFC,0xD9,0x3F,0xF3,0xFD,
0x30,0x9F,0x59,0xA8,0xA9,0xF8,0x0D,0x45,0x95,0x20,0x3E,0x12,0xA5,0x29,0x8B,0xA0,0x79,0x00,0xF2,0xE8,0x4F,0x1A,0x46,0x94,0xA0,0xDB,0x7B,0x9B,0x9E,0xF8,0x9C,0xF5,
0x82,0xB9,0x3D,0xB9,0x8B,0x7A,0x88,0x2C,0xA2,0x4D,0xAD,0xE6,0x09,0x23,0x2F,0xA1,0x6C,0x4A,0x09,0x43,0x8F,0x2D,0xBF,0x05,0x5A,0x55,0xB2,0x8E,0xC0,0x5D,0x37,0xB8,
0xE6,0xE0,0xE0,0x32,0x2A,0xB2,0x58,0x60,0x30,0xCA,0xD6,0x94,0x36,0x91,0xA0,0x92,0x7B,0xFA,0xDA,0xD8,0xD5,0x34,0xC4,0x35,0x38,0xEC,0x49,0x48,0x6D,0x94,0xD9,0xFF,
0x00,0x1F,0xC3,0xD7,0x65,0x29,0x09,0x00,0x5B,0xD8,0xDC,0xDB,0x1E,0x65,0xC7,0x96,0xF8,0x4B,0x07,0xE1,0xDA,0x5E,0xE9,0xBA,0x97,0x64,0x27,0x7B,0xDE,0xFB,0xED,0xDF,
0x01,0x73,0xBB,0x91,0x23,0xDE,0x80,0x39,0x71,0xD3,0xFF,0x00,0x24,0xF8,0xD5,0x37,0x64,0xD3,0x97,0xE2,0x3C,0x7E,0x30,0xA9,0xB2,0x16,0xB5,0x2A,0xC9,0x4E,0xB4,0x83,
0xEF,0x6E,0x6E,0x3D,0xF1,0x98,0x80,0x90,0x93,0x19,0x2D,0xC4,0x42,0x1F,0x75,0x04,0x94,0x3C,0x7F,0x29,0x1A,0xBB,0x26,0xD7,0xDF,0xDC,0xFD,0x31,0x98,0xC7,0x20,0x0C,
0x98,0x11,0xED,0xE0,0x16,0x59,0x6D,0x66,0x4C,0xE3,0x4B,0x6E,0x49,0x94,0xFB,0xE8,0x6D,0xB4,0x90,0x95,0x2A,0xD7,0xB0,0xBE,0xDA,0x41,0xEE,0x77,0x23,0xB9,0x02,0xFE,
0x51,0x8A,0xE6,0x5F,0x50,0x9F,0x9F,0x50,0x65,0xD9,0x91,0x93,0x36,0x9A,0xFB,0x8A,0x40,0x65,0xE2,0x49,0x0D,0xF1,0x64,0xAC,0x58,0x83,0x62,0x4F,0xA5,0xC9,0x36,0xBE,
0x14,0x6B,0xEE,0x4A,0x7D,0x96,0x5B,0xD6,0xE2,0xDB,0x0A,0xF2,0xA0,0xEF,0xA0,0x90,0x55,0xFB,0x83,0x7C,0x6A,0x7A,0x32,0x86,0x57,0xA3,0x16,0x54,0x35,0xAC,0x38,0xE6,
0x9F,0x6B,0x81,0x7B,0xFB,0xD8,0x8F,0xA6,0x2C,0x37,0xA8,0x58,0xE7,0x8E,0x23,0x0C,0x98,0xFD,0x31,0x1A,0xE6,0x8C,0xB0,0xEA,0x0A,0x22,0xCF,0x9B,0x4E,0x71,0x46,0xC1,
0x12,0x5A,0x12,0x19,0x48,0x3C,0x10,0xEA,0x2C,0xBB,0x1E,0x47,0xE1,0x93,0x63,0xCE,0x1F,0x59,0xA1,0x54,0xE0,0x9A,0x63,0x94,0x39,0x34,0xD9,0xAA,0xD0,0x90,0x14,0xD4,
0x94,0xA1,0xD7,0xEC,0xDA,0x75,0x69,0x6D,0xCD,0x2B,0x3B,0xEF,0xB2,0x4F,0xD3,0x15,0x33,0x24,0xCB,0xCB,0x30,0x64,0x90,0x4A,0xA3,0xA8,0xA1,0x76,0x06,0xE4,0x5A,0xE8,
0xBF,0xE8,0x47,0xC8,0x0C,0x3F,0x0C,0xAD,0x5B,0xAC,0x66,0xB6,0xD0,0xD4,0x09,0x2B,0x8D,0x77,0x07,0x8D,0xE0,0x9F,0x0D,0xB4,0x96,0xD2,0x8B,0x95,0x71,0xC2,0x3D,0x70,
0x2A,0xEE,0x6D,0xFB,0xB1,0x93,0xF4,0x99,0x4C,0xE0,0xF8,0xE2,0x2D,0xF5,0x75,0xDF,0xBC,0x9F,0x6E,0x89,0x58,0x6A,0x5D,0x1E,0x5B,0x2E,0xA5,0xF6,0xD4,0xE2,0x0A,0x55,
0xA9,0x26,0xC9,0x58,0x06,0xDB,0xEE,0x76,0xFF,0x00,0x6C,0x35,0x57,0x0B,0x79,0xCD,0x54,0xAC,0xC3,0x44,0xCD,0x93,0xB2,0xB6,0x62,0x83,0x1F,0xE1,0x9E,0xA8,0xC5,0x8C,
0xB0,0x99,0x0D,0x94,0x6A,0x1A,0x80,0xB5,0xC5,0xC5,0xC7,0x3C,0x91,0xCE,0x37,0x66,0x08,0xBD,0x55,0x93,0x16,0x7C,0x6A,0x7D,0x31,0x99,0x30,0x22,0x2C,0x06,0xA1,0xD4,
0x43,0x12,0xD8,0x91,0xA9,0x44,0xA8,0x94,0x3A,0x48,0x4F,0x6B,0x14,0xD8,0x8B,0x73,0x8D,0xF4,0x68,0xD5,0x95,0xE5,0x77,0x4D,0x67,0x23,0xCD,0xCB,0xB3,0x59,0x05,0x7E,
0x2D,0x32,0x42,0x64,0x30,0xAB,0x6F,0xE5,0x65,0xC7,0x0A,0xB9,0xFF,0x00,0xA9,0x61,0xD8,0x76,0xC7,0x41,0x56,0xE6,0x50,0xE8,0x79,0x8C,0x23,0x02,0x30,0xC2,0x29,0x1A,
0xF7,0x5C,0x92,0x1C,0xA2,0xBB,0x9D,0xB2,0xCE,0x68,0x8A,0xD5,0xCF,0xC5,0xC8,0x76,0xCE,0xB5,0xDB,0x4A,0xB4,0xD8,0x8F,0xAD,0xFE,0x78,0xD3,0x42,0xCB,0xF2,0x61,0x32,
0x3E,0xF1,0x99,0x19,0xE7,0x96,0x4A,0x9C,0x6A,0x0A,0x74,0xB6,0x95,0xFF,0x00,0x98,0x93,0x75,0x2C,0xFB,0xA8,0xDB,0xDB,0x07,0x73,0xFF,0x00,0x50,0xA1,0xD0,0x19,0x82,
0xAA,0x96,0x56,0x53,0xD5,0x15,0xC5,0x6C,0xBD,0x25,0xB8,0x4A,0x65,0xB9,0x0A,0x20,0x92,0x02,0x96,0x91,0x75,0x00,0x6F,0x6D,0xC6,0xFC,0xE1,0x6F,0x29,0xE6,0xCA,0x7E,
0x6A,0xA8,0x38,0x88,0x90,0x5F,0xA7,0x3E,0x92,0x35,0x47,0x90,0xB1,0x73,0xE8,0x6C,0x3E,0x98,0x8B,0xAD,0xAF,0x51,0xB8,0xBB,0x2E,0x07,0x99,0x6B,0x4B,0x65,0x61,0x40,
0x07,0x99,0x65,0xC6,0x2C,0x22,0x21,0xFE,0x3B,0x8D,0x3A,0x81,0xB1,0x3B,0x1E,0x3D,0xB1,0xB9,0x88,0xB2,0x27,0x31,0xF0,0xAA,0x59,0x42,0x4A,0xAD,0x6D,0xF8,0xE0,0x6F,
0xE9,0x81,0x15,0x55,0x39,0x4C,0xCB,0xCE,0x2F,0xC5,0x42,0x1C,0x2D,0x92,0xCB,0x80,0xD8,0x8B,0x83,0xBE,0x26,0x74,0xFA,0x7C,0xDA,0xA6,0x52,0x61,0xD9,0xEE,0xA5,0xC7,
0x12,0x0A,0x0B,0xA9,0x57,0xF8,0x96,0xDA,0xFB,0xF7,0x3E,0xD8,0x51,0x17,0x3C,0xC2,0xBB,0x62,0x12,0x9F,0x4E,0x6E,0x24,0x45,0x46,0x8E,0xB5,0x2D,0x2A,0x1A,0x48,0x26,
0xF6,0xFF,0x00,0x7C,0x21,0x54,0xE2,0x8A,0x28,0x9B,0x21,0xE8,0x82,0x44,0x14,0x38,0x96,0x65,0x25,0x57,0x0B,0x6D,0xA5,0xDB,0xF1,0x13,0xE8,0x42,0x90,0x9B,0x1F,0x51,
0x63,0xCE,0x2C,0x99,0xAE,0x47,0x4B,0x7A,0x16,0xE2,0x11,0xA8,0xEA,0xDC,0xEE,0x7D,0xF7,0xF7,0xC2,0x85,0x5E,0x5B,0xCC,0x66,0x08,0xF2,0x5A,0x63,0xC7,0x0A,0x6D,0x68,
0x71,0x95,0x10,0x52,0xFB,0x76,0x1A,0x92,0xAB,0xF6,0x3C,0x0F,0x72,0x31,0xE3,0xE1,0x46,0x4F,0x4E,0xF1,0x1D,0x5B,0x1F,0x6F,0x22,0x26,0x47,0x31,0x64,0x53,0x93,0x67,
0x0F,0x9B,0x74,0xAC,0x8D,0x94,0x42,0x88,0x1F,0x22,0x40,0xFD,0xBD,0xF1,0x09,0x4E,0x87,0x62,0x21,0x2B,0x49,0x36,0x25,0x44,0x93,0x72,0x4E,0xD8,0x74,0x6A,0x8B,0x49,
0x72,0xA3,0x2A,0x2C,0x74,0x91,0x15,0xD4,0x09,0x91,0x17,0x7D,0x20,0xB6,0xBB,0x02,0x3D,0x8A,0x56,0x94,0xED,0xFD,0xF0,0x12,0x15,0x39,0xA9,0x15,0x69,0x14,0x87,0x02,
0x1C,0x5A,0xA4,0x06,0xCB,0xA8,0x5F,0x99,0x07,0x70,0x6D,0x7B,0x02,0x2E,0x7B,0xE1,0x67,0xA9,0x81,0x18,0x9C,0xFB,0xBA,0xE3,0xAC,0x11,0x4D,0x6D,0xC7,0xAA,0x4C,0xBA,
0xD4,0x85,0x30,0xD2,0x5B,0x70,0x14,0x5A,0xD7,0x57,0x3C,0xFD,0x07,0xE9,0x8C,0xC1,0x88,0x94,0x79,0x32,0x1B,0xA7,0x88,0xF2,0x59,0x5A,0x08,0xD7,0xE0,0x95,0x04,0x29,
0xC2,0x76,0x36,0xD5,0x6B,0xDA,0xC7,0x8B,0xE3,0x31,0xA5,0xA5,0x8C,0x2D,0x1F,0x31,0xC4,0xD3,0x53,0xCD,0xD1,0x63,0xB9,0x4C,0x11,0x28,0x71,0xE5,0x38,0x23,0x87,0x2C,
0xEC,0x68,0xC5,0x2B,0x21,0x24,0x5C,0xA0,0x33,0x71,0xF2,0x4A,0xC7,0x7C,0x1B,0xA9,0xC8,0x95,0xF7,0xF3,0x31,0xD7,0x47,0xA2,0xD3,0x12,0xCA,0x92,0xDC,0x78,0x71,0xE9,
0x49,0x95,0x2D,0xE0,0x94,0x0B,0x94,0xB0,0xAB,0x84,0x82,0x6E,0xA0,0x16,0x51,0x70,0x76,0xBD,0xB0,0x32,0x26,0x60,0xCB,0xF0,0xEA,0x54,0x58,0xD4,0x2A,0x7B,0xCA,0x75,
0xD6,0x94,0xDF,0xC6,0xBC,0xAD,0x2B,0x1B,0x9B,0x80,0xA1,0x65,0x8E,0x76,0x52,0x0B,0x46,0xC6,0xCA,0x07,0x0A,0x92,0xF3,0x35,0x6A,0xB1,0x4D,0x30,0x1B,0x3E,0x12,0x5E,
0x5E,0x85,0xC5,0x86,0x8F,0x05,0xB7,0x75,0x90,0x40,0x58,0x4D,0x82,0xCD,0xC9,0x17,0x55,0xCF,0xBE,0x28,0x7B,0xAA,0xA0,0xEE,0x39,0x3F,0x41,0x0C,0x0E,0x54,0xE3,0xAC,
0xB6,0xA9,0xB9,0xD6,0xA9,0x10,0xB7,0x4C,0x34,0xFC,0xBF,0x45,0x69,0xD1,0xA5,0x4E,0x3A,0x86,0x1B,0x94,0x14,0x2E,0x47,0xE0,0xC5,0x42,0x54,0x8D,0xC0,0xBA,0x56,0x95,
0x6C,0x39,0xC4,0x85,0xF5,0x72,0x64,0xAA,0xC9,0xA6,0x8C,0xCE,0xF9,0x7A,0x43,0xAA,0xD2,0xBA,0x74,0x12,0x12,0x12,0x92,0x36,0x51,0x2E,0x37,0x7F,0x4B,0xE9,0x38,0xA7,
0xE9,0x14,0x9C,0xC0,0x9A,0xDC,0x47,0xD5,0x47,0x53,0x4D,0x23,0x50,0x4B,0xD2,0x2E,0xCB,0x43,0x63,0x73,0xAD,0x44,0x27,0xEB,0x7C,0x3C,0x50,0xE8,0x99,0x39,0x99,0xB0,
0xBE,0xF7,0xCC,0x0C,0x2E,0x4A,0x92,0x24,0x18,0xB4,0xD7,0xCA,0x90,0x4E,0xAB,0x9D,0x6E,0x24,0x28,0x0E,0xC3,0x7D,0xBD,0xF0,0x4A,0x35,0x37,0x31,0x3B,0x07,0x18,0xFC,
0xBF,0xC4,0x18,0x25,0x80,0x3F,0x58,0xCE,0x9C,0xD5,0x0A,0xB4,0x99,0xF1,0x6A,0x01,0x53,0x54,0x8D,0xD3,0xAD,0xC6,0xD4,0xA3,0xC1,0xB1,0x48,0x6D,0xCD,0x3B,0xF1,0x72,
0x4E,0x03,0x25,0xAC,0xD0,0xE5,0x55,0xE8,0x99,0x5B,0xA7,0xF5,0xB7,0x18,0x4A,0x35,0x2A,0x5B,0x8A,0x6D,0x86,0x13,0xEA,0x7C,0x40,0x00,0x36,0xF4,0x02,0xFE,0xD8,0x78,
0xA3,0x56,0x32,0x7D,0x29,0x3E,0x3E,0x53,0xCA,0x71,0xDB,0x7D,0x63,0xFF,0x00,0x7D,0x21,0x03,0x59,0x03,0xB9,0x04,0x92,0x7D,0x2E,0x48,0xD8,0x76,0xC0,0x9A,0xD5,0x2F,
0x30,0x67,0x8A,0x7A,0xE6,0x4F,0x97,0x53,0x79,0x95,0x2F,0x5C,0x3A,0x74,0x0D,0x29,0x2E,0xA4,0x1B,0x15,0xA1,0x6E,0x03,0xE1,0xA6,0xE0,0x02,0xB1,0x64,0xEF,0x74,0x95,
0x11,0x6C,0x5A,0xD1,0xBB,0x2B,0x61,0x9B,0xAF,0xFB,0xD6,0x0C,0x31,0xDE,0x44,0x47,0x39,0x8A,0x89,0x2D,0x0E,0x65,0xFC,0xFC,0xC4,0x4A,0xCC,0x66,0xD2,0xA6,0xDC,0x62,
0x9C,0x1B,0x7A,0x65,0x3C,0x71,0xA9,0xA7,0x42,0x82,0x8A,0x41,0xFE,0x12,0x92,0x7E,0x63,0x04,0x27,0xE5,0x64,0xD1,0xDC,0x46,0x65,0xE9,0x71,0x83,0x9A,0x60,0x30,0xC0,
0x43,0x90,0x65,0x14,0x89,0xCC,0xA8,0x5B,0x60,0xAB,0x5C,0x5A,0xFB,0x83,0xB8,0xC2,0xAD,0x57,0x2A,0x57,0x29,0x75,0x70,0xBA,0x1A,0x93,0x4D,0xD6,0xEA,0x59,0xD5,0x45,
0x51,0x52,0xD0,0xE2,0xCD,0xB4,0xAA,0x6A,0xCF,0x88,0xFA,0x8D,0x8E,0xA5,0x6A,0x0D,0x27,0x72,0x80,0xA0,0x14,0x94,0x91,0xA1,0xD2,0xA0,0xBA,0xEA,0x6A,0x52,0xA5,0x39,
0x97,0xAA,0x21,0x45,0xCA,0x6D,0x46,0x94,0x0A,0x97,0x21,0xBB,0x59,0x2E,0xCA,0x42,0x80,0x57,0x9B,0xC8,0xAB,0x10,0x35,0x03,0x70,0x91,0x7C,0x12,0xFD,0x30,0x7F,0xAC,
0x7D,0x2D,0x29,0xCE,0x61,0xEC,0xB9,0x2A,0x9B,0x9E,0xB3,0x5A,0x69,0x75,0x15,0x49,0xA5,0xCE,0x7B,0xCA,0xF5,0x3E,0x48,0x28,0x00,0x01,0xFC,0x09,0xFA,0xF2,0x30,0x17,
0x24,0x56,0x2A,0x34,0xDE,0xA6,0xE6,0x5C,0x9F,0x9A,0x5E,0x66,0x99,0x2A,0x2C,0xAB,0xC3,0x68,0x82,0x94,0x3C,0xC1,0x2A,0x01,0x49,0x3F,0xC5,0x6B,0x27,0x7F,0xE6,0x18,
0x6F,0x15,0x0A,0xCC,0x87,0x23,0xBF,0x5F,0xA6,0xE5,0xDC,0xC2,0xEC,0x5B,0x2D,0xB9,0xE5,0x2E,0x42,0x70,0xAB,0xF8,0x4A,0xAE,0x9B,0x13,0xB7,0x00,0x8C,0x29,0xF5,0xB7,
0xEE,0x9E,0xA6,0xB5,0x4C,0x10,0xA9,0x7F,0x07,0x56,0x8A,0xAF,0x34,0xB4,0xAB,0x60,0x2D,0xF9,0x45,0xAF,0x71,0x7F,0x7C,0x24,0x9A,0x4A,0xD1,0x58,0x58,0x71,0x08,0x75,
0x79,0x65,0x03,0xA4,0x35,0x5C,0xCC,0x49,0x84,0xFA,0xA3,0xD3,0x9C,0x62,0x54,0xAB,0xE9,0x42,0x14,0xF0,0x64,0x73,0xCE,0xA5,0xD8,0x7E,0xF8,0x54,0x7A,0x74,0x9A,0xC4,
0xB8,0xF5,0x2F,0x87,0x4C,0x59,0x6C,0x38,0xE2,0x7C,0x22,0xE3,0x65,0x3B,0x58,0xEC,0xA0,0xAB,0x10,0x42,0x4E,0x3C,0x51,0xBA,0x6E,0xF3,0x2C,0xC2,0x97,0x5F,0x75,0xD9,
0x31,0x18,0xD3,0xE2,0x32,0xE2,0x89,0xBE,0xF6,0x25,0x6A,0x04,0x6E,0x2E,0x3C,0xB7,0x06,0xD8,0x3B,0x53,0x85,0x4D,0xA4,0xD7,0xCB,0xD2,0x63,0x35,0x1A,0x94,0xE8,0x52,
0x92,0x86,0x92,0x14,0xA5,0x92,0x09,0x01,0xB4,0x8B,0x69,0xE6,0xDB,0x90,0x08,0x22,0xDB,0x8D,0xA6,0x6A,0xC2,0x6C,0x2A,0x07,0xEB,0x05,0xAC,0xBC,0x05,0xDA,0xA7,0x3F,
0xDA,0x4A,0xA7,0xD4,0xD5,0x50,0x05,0x82,0xB7,0x19,0x75,0x09,0x5F,0x84,0x37,0x0B,0x4D,0xB6,0x71,0xAF,0xD9,0x2A,0x1F,0x2F,0x7C,0x25,0x57,0x49,0xF8,0xE7,0xDC,0x61,
0x4A,0xF1,0x1E,0x3A,0xB6,0xF5,0xB7,0xF7,0xBE,0x37,0xFD,0xE5,0xF0,0x53,0x19,0x79,0xB9,0xB2,0x1E,0x09,0x75,0x2B,0x69,0x4E,0xAB,0xCC,0x52,0x41,0x1E,0x55,0x77,0x4D,
0x80,0x04,0x1D,0xC1,0xDA,0xFC,0xE2,0x14,0xDB,0x2D,0xE5,0x3A,0x0A,0x0B,0x48,0x25,0x45,0x27,0xD0,0xF1,0xBE,0x25,0x5E,0xE0,0x00,0x33,0x24,0xB1,0xF9,0x0C,0xC3,0x39,
0x66,0xBA,0xFD,0x1E,0x42,0x22,0xBE,0xDA,0x9F,0x84,0xE4,0x84,0xA1,0x48,0x5A,0x42,0x92,0x93,0x71,0x62,0x2F,0xB5,0xC1,0x24,0x8F,0xDB,0x19,0x81,0x71,0x4C,0x87,0x58,
0x2A,0x69,0x2C,0x29,0x1A,0x89,0xD2,0xA4,0x02,0x9B,0x03,0xFB,0x7C,0xC6,0x33,0x07,0xAA,0xC2,0xAA,0x00,0x30,0xD5,0x07,0x03,0x28,0xBC,0x41,0xF1,0x7C,0x33,0x2A,0x14,
0xD3,0x29,0xA6,0xDB,0x62,0x2B,0xF2,0x4A,0xF5,0x6A,0x20,0x86,0x8A,0xC8,0x09,0x1B,0x9B,0x14,0x9D,0xBD,0xB0,0x31,0xBA,0xEA,0x60,0x26,0x64,0x4A,0x43,0x25,0xA5,0xB8,
0x4A,0x44,0xB5,0x1F,0xC6,0x25,0x24,0x90,0x52,0x46,0xCD,0xEC,0x0E,0xC9,0xDC,0x5E,0xDA,0x8E,0x23,0xC2,0x5A,0x15,0x40,0xAB,0x38,0xA1,0xA4,0xB7,0x19,0x41,0x00,0x76,
0x2B,0x21,0x1F,0xBE,0xB3,0x80,0xAC,0x2B,0xC2,0x8E,0x5C,0x00,0xDF,0x92,0x46,0x0B,0x5E,0x14,0x12,0x23,0x7B,0x87,0x5F,0x31,0xF9,0xD8,0x94,0xF9,0x68,0xA2,0x66,0xBA,
0x23,0x73,0x03,0x73,0x12,0xE3,0x32,0xE3,0x4D,0x7B,0xE2,0x14,0xCC,0x84,0x22,0xE7,0xCE,0x40,0xBA,0x56,0x95,0x25,0x42,0xE2,0xF7,0xD4,0x37,0xB6,0x23,0x51,0x61,0x49,
0x67,0x3C,0xB5,0x4E,0x92,0xA4,0xB6,0xEA,0x54,0x83,0xE0,0x6E,0xA5,0x2C,0xAF,0x52,0x92,0x3C,0xA3,0x91,0x7D,0xEF,0x6B,0x58,0xF7,0xC6,0xDC,0x82,0xE2,0x54,0x2A,0x14,
0x77,0x89,0x52,0x5F,0x52,0x5E,0x8C,0x00,0xB9,0xF1,0x90,0x85,0x80,0x00,0xF7,0x42,0x96,0x3F,0x4C,0x31,0x50,0x21,0x31,0x95,0x33,0x4B,0x2C,0xC5,0x51,0x95,0x99,0xE6,
0x21,0x05,0xB5,0x20,0x6A,0xFB,0xB9,0x05,0xBF,0x2E,0x93,0xDD,0xD5,0x5E,0xE0,0x8F,0xC8,0x0A,0x48,0x25,0x4A,0x05,0x26,0xA9,0x77,0xB3,0x37,0x69,0xEA,0x15,0x50,0x07,
0x93,0x2C,0x25,0x45,0x34,0x1A,0x2C,0x5A,0x42,0x62,0xAA,0x65,0x76,0x5A,0x94,0xD0,0x84,0x95,0x24,0x88,0xC8,0xDE,0xE5,0xC2,0x41,0x48,0x50,0x1C,0xA4,0x83,0x6E,0xF6,
0xFC,0xC8,0x25,0x5D,0xCD,0x11,0x32,0xE4,0x74,0x51,0xDC,0x71,0xE7,0xDF,0x4A,0x42,0x65,0xF8,0x0E,0x29,0x4A,0x75,0x64,0x6E,0x84,0xA9,0x64,0x90,0x8D,0xEC,0x5C,0x57,
0x99,0x5C,0x0B,0x80,0x40,0x4C,0x8D,0x99,0xA9,0xF9,0x5E,0x8F,0x29,0x30,0x58,0x32,0xE6,0xC1,0x49,0x42,0x9E,0x69,0xCD,0x69,0x6D,0x60,0x85,0x69,0xF5,0x21,0x37,0x49,
0x2A,0xE0,0xAA,0xD6,0xB8,0x49,0x25,0x46,0x81,0x99,0xA2,0xC9,0xCC,0x6D,0x89,0x0C,0x2D,0xE5,0xA9,0x2A,0x97,0x27,0x54,0x8F,0xC8,0x94,0xA4,0xAD,0x4A,0xB9,0x1B,0xB8,
0xAB,0x1B,0x5F,0xB9,0x04,0xF6,0xBB,0xFE,0xF1,0xAC,0x8A,0xEB,0x1C,0xFF,0x00,0x02,0x2E,0xA9,0x96,0x33,0xA1,0x9A,0xAA,0xD1,0x93,0x4B,0x65,0xAA,0xDB,0x51,0x98,0x7D,
0xD6,0x0A,0xFC,0x0D,0x23,0xF0,0x10,0xE7,0x94,0xDD,0x3C,0xDD,0x56,0xB1,0xBF,0x20,0x5A,0xF6,0x2A,0xD3,0x55,0x67,0xDA,0x6C,0x6A,0xD5,0x71,0x4B,0xA7,0xBF,0x1E,0x2B,
0x4D,0xF9,0x96,0x9D,0x00,0xA9,0x56,0x26,0xC4,0xDF,0xD0,0x92,0x7E,0x6A,0x27,0xBE,0x17,0xE5,0xD5,0x25,0x55,0xEB,0xCC,0x3B,0x21,0x87,0xD2,0xBF,0x1F,0xC7,0x90,0xAF,
0x88,0x48,0x42,0x02,0x49,0xB0,0xB6,0x9B,0x04,0x04,0xA4,0x80,0x38,0x48,0xF9,0xE3,0x4A,0xEA,0x54,0xA6,0xAB,0x2E,0xA6,0x43,0xCA,0x6C,0xC8,0x29,0x0E,0x2C,0x9F,0x15,
0x01,0x36,0xD8,0xDD,0x23,0x63,0xB0,0x57,0x7F,0x9E,0xD8,0x29,0xD7,0xB1,0x04,0x01,0xC7,0x99,0xE5,0x6A,0xC4,0x9E,0x78,0x13,0xE3,0xD1,0x17,0x12,0x10,0xF8,0xBA,0xAB,
0xA9,0x6F,0xF2,0x0D,0x3E,0x5D,0x7E,0xC0,0x0F,0x7C,0x65,0x29,0xB7,0xAA,0xF5,0x46,0xE2,0xC1,0x29,0x61,0x94,0x20,0xEB,0x79,0xD1,0xAB,0xC2,0x48,0xE5,0x77,0xE0,0x1F,
0x73,0xB0,0xE6,0xE3,0x91,0xB6,0x15,0x26,0x27,0xC6,0x97,0xD7,0x54,0x69,0x60,0x59,0xDF,0x11,0xE4,0xDA,0x3C,0x64,0x12,0x2C,0xB7,0x37,0xB5,0xCF,0x60,0x01,0x27,0x8B,
0x73,0x87,0xB8,0xCB,0xC8,0x28,0xA3,0xBB,0x0A,0x55,0x6A,0x3A,0x21,0x92,0x95,0xBA,0xD3,0x7A,0xCA,0x9E,0x50,0x02,0xCA,0x25,0x1F,0x98,0xFF,0x00,0x22,0x4D,0x93,0xEE,
0x45,0xF0,0x91,0x67,0xBC,0xED,0x06,0x17,0x39,0x1C,0x4D,0x71,0xAB,0xD4,0xF8,0xB0,0xA4,0x53,0xE8,0xCB,0xF8,0xC7,0x9B,0x57,0x83,0x22,0x59,0x46,0xBD,0x17,0x3B,0x2B,
0x41,0xFC,0xE9,0xF2,0x80,0x4E,0xF6,0xB6,0xC4,0x03,0x7C,0x29,0x66,0x56,0x0D,0x52,0x19,0x71,0x9F,0x19,0xC9,0x31,0xC1,0x71,0xC4,0xA5,0xC2,0xE1,0xB6,0xDA,0xB4,0xA9,
0x5B,0x91,0xB2,0x4D,0x8E,0xE0,0x13,0xCE,0x37,0x54,0xDC,0x8B,0x1E,0xB1,0x35,0xDC,0xBD,0x12,0x1A,0x9A,0x69,0xD4,0xB8,0x1C,0x4A,0xD6,0x54,0xA1,0x65,0x1B,0x28,0x6A,
0xDB,0x93,0xF5,0xC4,0xFA,0xC4,0xD4,0xC3,0xA5,0xC3,0xAB,0xB0,0xFD,0x39,0xA0,0xE2,0x9B,0x75,0x51,0xD9,0x8E,0xA2,0xA4,0x05,0x5C,0x1B,0xAA,0xF6,0x23,0xCC,0xAD,0xAD,
0xB1,0xB8,0xED,0x73,0x9B,0x14,0x10,0x54,0xF6,0x98,0xF6,0xF2,0xBC,0xF5,0x95,0x84,0xB9,0x2B,0x01,0x28,0xE1,0xA4,0xAF,0x5B,0x69,0x26,0xE4,0x5F,0x9F,0xA9,0xE7,0xB7,
0x38,0x2B,0x09,0xA5,0xD4,0xA7,0xA1,0x98,0xAE,0x34,0xB6,0xAC,0x94,0xB8,0x85,0x0B,0x85,0x6A,0xB0,0x1B,0xFC,0xCD,0x8F,0xCF,0x03,0xAA,0xC2,0x23,0x35,0xA7,0x23,0x36,
0x95,0x25,0x17,0xD6,0x84,0xFB,0x5E,0xE3,0xE9,0x6C,0x6A,0x81,0x29,0x48,0xCC,0x6B,0x69,0x95,0xAD,0xA4,0xBC,0x12,0x14,0xA6,0x94,0x53,0xB1,0x00,0x93,0x88,0x2C,0x06,
0x70,0xD1,0x4E,0xBC,0x18,0x69,0x55,0x07,0x29,0xB4,0xB6,0x60,0xC5,0x28,0x53,0x81,0x47,0xC6,0x55,0xEE,0x11,0xE6,0xB8,0x40,0x1F,0x5D,0xF1,0x98,0xFA,0xED,0x2A,0x2B,
0x0D,0x19,0x0C,0xA2,0x4C,0x98,0xE8,0x58,0xD2,0xEC,0x75,0x27,0x4E,0x90,0xBB,0x2B,0x5A,0x4E,0xE7,0xB7,0x1C,0x1F,0x98,0xC6,0x61,0xB0,0x84,0x46,0x12,0xD2,0x46,0x3A,
0x62,0x24,0x16,0xDC,0x46,0x57,0xAB,0xBC,0x91,0xA4,0x6B,0x69,0xB4,0x94,0x9B,0xED,0xA8,0x2B,0xFF,0x00,0xE3,0x10,0x58,0x4A,0x5F,0x86,0xDA,0x50,0xB6,0xD2,0x54,0x52,
0x9F,0x3A,0x82,0x47,0x04,0xF7,0xF9,0x60,0xB0,0xA5,0xCA,0x14,0xDA,0x8C,0x14,0xB6,0xE0,0x53,0xEE,0x38,0x96,0xD0,0xAF,0xE2,0x2D,0x8E,0x47,0xFF,0x00,0x65,0xDB,0xE9,
0x85,0xF6,0x5B,0xD3,0x97,0xD0,0x5C,0xD2,0x80,0xA7,0xC8,0x4B,0x8B,0xE1,0x21,0x3D,0xFE,0x97,0x38,0x68,0xA4,0x3D,0xA8,0x54,0x02,0x65,0x97,0xD3,0xA6,0x4C,0x1A,0x9B,
0x15,0x5A,0x84,0x74,0x69,0x6C,0x29,0xB4,0xB6,0xE0,0xF3,0x3E,0xEA,0x50,0x6C,0xD8,0x04,0xDE,0xDA,0x74,0xA9,0x44,0x76,0xF2,0xDC,0x15,0x0C,0x1A,0x8E,0xB6,0xA9,0xD9,
0x97,0x32,0xCA,0x6E,0x43,0x8E,0x56,0x6E,0xE1,0x71,0xC7,0x2C,0x4B,0x17,0x41,0xF2,0x92,0x3F,0xF9,0x4F,0x2A,0xFF,0x00,0x2F,0x17,0x2A,0x27,0x4A,0xED,0x1E,0xA8,0xB6,
0xAB,0x31,0x60,0xD3,0xF4,0x26,0x2C,0x56,0x97,0xF0,0xEA,0x58,0x1A,0xC5,0xD0,0xAD,0x4E,0x5C,0xEE,0x16,0xA2,0x01,0x24,0x6E,0x05,0x80,0x36,0x48,0xB6,0xF8,0x25,0x4D,
0xE6,0xAA,0xE5,0x92,0x4A,0x5C,0x94,0xF1,0xD0,0x08,0x48,0x3A,0x46,0x9B,0x5C,0xFB,0x9B,0x7D,0x3D,0xF0,0x55,0x60,0x89,0x85,0x9B,0x65,0xCA,0x29,0x82,0x6B,0xAD,0x4B,
0xFC,0x1A,0x43,0x0E,0xF8,0x3F,0x87,0xE3,0x2E,0xE9,0xDD,0xD5,0x28,0x70,0x0F,0x04,0x0B,0x11,0x71,0x89,0x54,0x7A,0x62,0x20,0xC4,0xA8,0xD3,0x9A,0x42,0x15,0x39,0xC6,
0x52,0xDA,0x94,0xB2,0x14,0x45,0x96,0x1C,0x2A,0x59,0xBD,0x80,0x05,0xBB,0x11,0xB7,0x27,0xDF,0x11,0x63,0x54,0xE7,0xAB,0x33,0x06,0x1D,0x6D,0x01,0x89,0x6E,0x05,0x38,
0xD4,0x96,0xFC,0x46,0x92,0x85,0x24,0x12,0xA4,0x8B,0xFF,0x00,0x2D,0xEE,0x0D,0xC6,0xFC,0x58,0xE1,0x89,0x11,0x22,0x54,0x21,0x98,0x34,0xDA,0x8A,0x69,0xEF,0x38,0x4A,
0xFC,0x27,0x14,0x4B,0x64,0x9B,0x6D,0xAB,0x73,0xC5,0xCD,0xCD,0xF6,0xE4,0x80,0x2F,0x8D,0x72,0x3E,0x50,0xAD,0x4E,0x17,0x89,0xF6,0x89,0x32,0x25,0x44,0xA9,0x11,0x13,
0xA4,0x32,0x09,0x71,0x6B,0xD9,0x2F,0x1F,0xC8,0x02,0x6F,0xD8,0xFB,0x9E,0xF7,0xEF,0xB4,0x28,0x2D,0xB1,0x26,0xB6,0x5E,0xA9,0x4D,0x54,0x68,0x2C,0x05,0x87,0x56,0x10,
0x15,0xA9,0x64,0x8E,0xC4,0x8B,0xF2,0x05,0x87,0x1C,0x8E,0x70,0x6A,0x15,0x36,0x99,0x4C,0x2D,0x53,0xE6,0x78,0x81,0xD5,0x24,0x10,0xE2,0x9B,0xD0,0x97,0x49,0x48,0x3E,
0x51,0x62,0x95,0xDB,0x8D,0xC8,0x1A,0x89,0x16,0x55,0xF6,0x92,0x9A,0x1F,0xDE,0xB2,0x54,0xF2,0xD0,0xEC,0xF6,0x14,0x0F,0xFE,0xA0,0x28,0x32,0x84,0x04,0xED,0x72,0x4D,
0xF4,0x01,0xBD,0x81,0x16,0x1B,0xDB,0x9C,0x6B,0xFE,0x50,0x14,0xF0,0x20,0xB6,0xA6,0xEC,0x31,0xE2,0x79,0x99,0x0A,0x8D,0x54,0xA6,0x44,0xA6,0x46,0xAB,0xB6,0xDC,0x6D,
0xDC,0x6D,0x0A,0xD4,0x94,0xE9,0xDA,0xEA,0x71,0x44,0x72,0x37,0xDF,0xB0,0x26,0xDB,0x62,0x0B,0x79,0x4E,0x11,0x75,0xB6,0xA1,0x09,0x4E,0x5D,0x25,0x2A,0x7E,0x3A,0x02,
0x93,0xB1,0x3C,0x90,0x4E,0xE0,0x5A,0xD6,0xD8,0xDF,0x13,0xE3,0xD4,0x29,0x10,0xDD,0x7D,0x34,0x48,0x69,0x9F,0x2D,0x95,0x80,0x5E,0x7E,0xFE,0x12,0x0F,0x1F,0x86,0x08,
0xF3,0xF2,0x45,0xD5,0x6F,0xFB,0x7B,0xE2,0x36,0x61,0x7D,0xF9,0x90,0x8C,0xD6,0xE4,0xAC,0xA4,0xD8,0x84,0x2D,0xC5,0x5D,0xAF,0x60,0x9B,0xEC,0x01,0xB5,0xB6,0xB6,0x3D,
0xC6,0xC2,0x14,0x4F,0x05,0x98,0x6F,0x6F,0xA0,0x91,0xD2,0xF3,0x59,0x7F,0x31,0x25,0xDF,0xBA,0x2A,0xB3,0xDB,0x2D,0x24,0xA4,0xAD,0x6D,0xB0,0xCA,0x94,0x94,0x94,0x85,
0x10,0x55,0xB9,0xBA,0x78,0xBF,0x7C,0x46,0x45,0x66,0xB5,0x29,0xA9,0x46,0x42,0x8B,0x6C,0xC8,0x0E,0x27,0xC1,0x00,0x69,0x21,0x44,0x9B,0x03,0x7B,0x5C,0x7B,0x5F,0x7F,
0x9E,0x31,0xDA,0x80,0xAD,0xD0,0x51,0x4D,0xAF,0xB5,0x05,0x94,0x02,0x52,0xDB,0x8A,0x6D,0x2B,0xF1,0x3D,0x48,0x57,0x20,0x82,0x06,0xC4,0x9E,0x4E,0xDC,0x61,0x7D,0x14,
0xFA,0x44,0x15,0xAC,0xC2,0x93,0x29,0xC7,0x52,0xA2,0x3F,0x00,0x15,0x21,0x5B,0x6D,0xB0,0xD8,0x63,0x76,0xA8,0x61,0x91,0xC1,0x84,0x75,0x5D,0xB8,0x1D,0x67,0x9A,0xF4,
0x4A,0x9C,0x79,0x11,0xA6,0xCF,0x78,0x3D,0x70,0x94,0x21,0xC1,0xDD,0x25,0x20,0xA4,0x7D,0x06,0x23,0x87,0x63,0xB5,0x50,0x89,0xE1,0xEA,0x0F,0x12,0x54,0xAB,0xFE,0x83,
0x1A,0x6A,0x0E,0x3E,0x56,0xEA,0x14,0xE4,0x85,0x2B,0x52,0x17,0xE1,0x29,0x67,0x48,0x23,0xFC,0xA3,0xF7,0xF6,0xBE,0x35,0x3A,0x7C,0x45,0xA5,0xF4,0x1B,0x29,0x2A,0xB7,
0xA7,0x06,0xDF,0xE9,0x88,0x3A,0xA5,0xC3,0x49,0xB7,0x28,0xDD,0xC4,0x77,0xCB,0x89,0x96,0xB8,0xCE,0x53,0xD4,0xC9,0x6D,0x32,0xA4,0x8F,0x02,0x51,0x48,0x3E,0x02,0xCA,
0x93,0xE7,0x49,0x3C,0x70,0x7E,0x78,0xCC,0x08,0xA7,0x38,0x2E,0xB5,0x29,0x4E,0x5B,0x48,0x70,0x29,0x27,0x70,0xA1,0x6F,0xDF,0x19,0x86,0xAA,0xBF,0x6A,0xED,0x30,0x4E,
0x76,0x31,0x13,0xFF,0xD9,};

View File

@@ -0,0 +1,283 @@
// We need this header file to use FLASH as storage with PROGMEM directive
const uint8_t Baboon[] PROGMEM = {
0xFF,0xD8,0xFF,0xE0,0x00,0x10,0x4A,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x00,0x48,0x00,0x48,0x00,0x00,0xFF,0xDB,0x00,0x43,0x00,0x04,0x03,0x03,0x03,0x03,0x02,0x04,
0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x06,0x0A,0x06,0x06,0x05,0x05,0x06,0x0C,0x08,0x09,0x07,0x0A,0x0E,0x0C,0x0F,0x0E,0x0E,0x0C,0x0D,0x0D,0x0F,0x11,0x16,0x13,0x0F,
0x10,0x15,0x11,0x0D,0x0D,0x13,0x1A,0x13,0x15,0x17,0x18,0x19,0x19,0x19,0x0F,0x12,0x1B,0x1D,0x1B,0x18,0x1D,0x16,0x18,0x19,0x18,0xFF,0xDB,0x00,0x43,0x01,0x04,0x04,
0x04,0x06,0x05,0x06,0x0B,0x06,0x06,0x0B,0x18,0x10,0x0D,0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xC0,
0x00,0x11,0x08,0x00,0x78,0x00,0xA0,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,0xFF,0xC4,0x00,0x1C,0x00,0x00,0x03,0x00,0x03,0x01,0x01,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,0x07,0x00,0x03,0x04,0x01,0x02,0x08,0xFF,0xC4,0x00,0x38,0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x05,0x03,0x03,0x03,0x04,
0x03,0x01,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x11,0x00,0x12,0x21,0x06,0x31,0x13,0x22,0x41,0x51,0x07,0x14,0x32,0x61,0x81,0x71,0x91,0xA1,0x15,0x23,0x42,0x52,0xD1,
0xF0,0x24,0xB1,0xC1,0xE1,0x33,0x43,0x72,0xF1,0xFF,0xC4,0x00,0x1B,0x01,0x00,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,
0x03,0x04,0x07,0x02,0x08,0x00,0xFF,0xC4,0x00,0x36,0x11,0x00,0x01,0x03,0x02,0x04,0x04,0x03,0x05,0x07,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x03,0x04,
0x11,0x05,0x12,0x21,0x41,0x06,0x22,0x31,0x61,0x13,0x51,0xB1,0x14,0x32,0x71,0x81,0xC1,0x15,0x23,0x33,0x34,0x62,0xA1,0xF0,0x07,0x35,0x42,0x52,0xB2,0xF1,0xFF,0xDA,
0x00,0x0C,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3F,0x00,0xD7,0x7B,0xA8,0xB1,0xD3,0xDC,0xE6,0x80,0xDD,0x67,0xAC,0x86,0x80,0x4A,0xAA,0xE6,0x47,0x99,0x61,0x24,
0x83,0x20,0xD8,0xE3,0x95,0x8F,0x7B,0x71,0xCE,0xDD,0xA0,0x83,0xE5,0xE3,0xCA,0x6A,0xEA,0xCB,0x47,0x47,0xD4,0xC9,0x35,0x40,0xB9,0xAF,0xCD,0x63,0xC6,0x83,0xCF,0x2F,
0x8A,0x63,0x8C,0x15,0x55,0x2B,0xB8,0x12,0xF8,0x61,0x93,0x86,0xDF,0xF5,0x03,0x80,0x12,0x6D,0x77,0x39,0x2A,0x52,0x78,0x69,0x92,0x9A,0x69,0xAA,0xA4,0x66,0xA9,0xA6,
0xBA,0x4E,0x23,0x77,0x56,0x4F,0x33,0x00,0xBC,0xE7,0x70,0x00,0xAA,0xA8,0x20,0x92,0x1B,0x2A,0x48,0xD0,0xE8,0x6E,0x36,0x8B,0x55,0xDA,0x9E,0xB6,0xA6,0x2F,0x1B,0x60,
0xDB,0x07,0x89,0x29,0x2A,0xBC,0x28,0xDA,0x63,0xDC,0x5F,0x6E,0x0A,0x92,0x0E,0x33,0x86,0xC6,0x70,0x72,0x06,0x9E,0x30,0x1D,0xCE,0xAB,0xBE,0x23,0x97,0x45,0x4E,0xBA,
0x3C,0x30,0xD8,0x27,0xB6,0x49,0xD4,0x34,0x75,0x34,0xEB,0x20,0xF0,0xE0,0x60,0xB1,0x3C,0x65,0x70,0x42,0x63,0xB9,0x3B,0xD8,0x8C,0x2F,0xEC,0x07,0x60,0xB5,0x53,0x52,
0x4D,0x53,0x55,0x4B,0x05,0xBF,0xE6,0xEA,0xA4,0x95,0xAA,0x43,0x2D,0x3A,0xC7,0x4F,0xB8,0xAB,0x80,0x14,0x12,0x4F,0xF8,0x76,0x03,0x20,0xAA,0xFB,0x1D,0x26,0x4D,0xD5,
0xF5,0x52,0x4B,0x3B,0x3D,0x57,0xCD,0x06,0x98,0xD4,0x23,0x95,0x08,0x44,0x83,0x3E,0x51,0x8E,0x70,0x49,0x27,0x27,0x3E,0x98,0xEC,0x74,0x45,0xFA,0xF7,0xCB,0xE2,0x8F,
0x16,0x1A,0x69,0x0F,0xF7,0x0C,0x0A,0x21,0x04,0xA8,0x62,0x46,0x46,0x08,0x25,0xDB,0x76,0x70,0x39,0x23,0x1E,0xBA,0x32,0xC7,0xC6,0x05,0xEF,0x65,0x4C,0xD3,0xCA,0x08,
0x24,0x5D,0x77,0x5C,0x2E,0xB7,0x89,0x20,0x4B,0x33,0x40,0x90,0x9A,0xDD,0xF1,0x55,0x6D,0xA9,0x59,0xC0,0x50,0x08,0x58,0x9D,0x58,0xA8,0x49,0x54,0x01,0x83,0xD8,0x64,
0x60,0x83,0x9D,0x0F,0xB2,0x75,0x4D,0xCA,0xD9,0x4B,0x5B,0x0D,0xCE,0xB1,0x24,0x59,0x0A,0x24,0x8A,0xB7,0x05,0xA9,0xDD,0xB4,0x02,0x46,0x40,0x2C,0x0F,0x1D,0xF2,0x47,
0x38,0x39,0xD0,0xA1,0xD7,0x72,0xD4,0xDE,0x29,0xAB,0x2B,0x2A,0x4C,0x72,0xC6,0xC8,0xB2,0x41,0x32,0x89,0xE1,0x2A,0xA0,0xE1,0xB1,0xEB,0xB4,0x93,0x80,0xDB,0xBD,0xCF,
0xBE,0xB5,0x37,0x50,0xD1,0xCF,0x05,0x67,0xF4,0xD8,0xA8,0xAA,0x25,0x24,0x3C,0x53,0x55,0xC6,0x5A,0x58,0x8F,0x00,0x8C,0x9E,0x0E,0x42,0xE3,0x91,0x8E,0xFA,0xE2,0xEC,
0x6E,0xB7,0x53,0x06,0x3C,0xB7,0x28,0x1A,0x22,0x35,0xA3,0xA9,0xFA,0x9E,0x96,0x34,0x6A,0x34,0x7A,0x70,0xDB,0xD9,0xE6,0x02,0x41,0x1B,0xF8,0x71,0xA9,0xC3,0x46,0x32,
0x54,0xE1,0x78,0x19,0xEF,0xCF,0x6D,0x79,0x59,0x6D,0x5B,0x15,0x19,0x6A,0xD5,0x69,0xA7,0x9E,0x75,0x6A,0x86,0x88,0x33,0xD3,0x37,0x94,0x91,0xB3,0x00,0x15,0xC0,0x2A,
0xDB,0x70,0x38,0x03,0x1C,0x63,0x4B,0xB6,0xAE,0xA8,0xAD,0xB6,0x53,0xB4,0x54,0x75,0x12,0xC7,0x02,0x82,0x66,0x05,0x42,0x82,0x4E,0x46,0x71,0xDF,0x38,0xC7,0x9B,0x82,
0x31,0xC1,0xD3,0x75,0x83,0xAC,0xE1,0x9D,0x60,0xA0,0x5B,0x75,0x3C,0x71,0xC8,0x36,0x3C,0xAD,0x89,0x3C,0x68,0xF3,0xC2,0x36,0x76,0x90,0x3B,0x00,0x46,0x48,0x04,0x8F,
0x30,0x1A,0x92,0x33,0x1B,0xC7,0xBD,0x62,0xBB,0x96,0x39,0x19,0xFE,0x3C,0xA8,0x7B,0xDC,0xBA,0x95,0x7A,0x85,0x24,0xFE,0xDD,0x22,0xD7,0x2A,0x4E,0x4A,0x40,0x8A,0xA5,
0xB2,0xD8,0xDD,0x9C,0x9C,0xE4,0x95,0xC9,0xE7,0x1F,0xC0,0xF1,0x43,0x7B,0x85,0x4A,0x5D,0x2D,0x9E,0x34,0xF5,0x21,0xE1,0x81,0xD0,0x7F,0x6C,0xB2,0xB7,0x86,0x4A,0xB6,
0xE0,0x30,0x01,0x62,0x4E,0x3B,0x83,0xEC,0x4E,0xAB,0xD0,0xDD,0xBA,0x7A,0x82,0xCB,0x4D,0xFD,0x4A,0xD1,0x09,0xA7,0x55,0xD9,0x99,0xC2,0xC9,0xE2,0x12,0xAD,0x89,0x16,
0x56,0xC0,0x3D,0xF2,0x40,0x53,0xC9,0xE7,0xB3,0x69,0x76,0xF9,0x35,0xAE,0xE5,0x6E,0xA3,0x9A,0xC7,0x7D,0x8C,0xC1,0x0C,0x6E,0x22,0xB2,0xAC,0x67,0xC6,0x63,0x92,0xAF,
0x9C,0x36,0xEF,0x32,0x8D,0xC4,0x91,0xFF,0x00,0xD8,0x40,0xD4,0xB2,0x53,0x46,0x05,0xF3,0x2A,0xBE,0x3B,0x9C,0x40,0x0D,0x16,0x49,0x33,0xA7,0x55,0x86,0xA9,0xA6,0xBB,
0x5B,0x5F,0xC3,0x08,0x57,0xE5,0xDC,0x6D,0xDE,0xA1,0x83,0xF2,0x46,0x01,0x21,0xC0,0x3C,0x1F,0xFD,0xBB,0x45,0xD0,0xF7,0x7A,0x9A,0x48,0x20,0xA7,0xB5,0xCD,0x04,0xCF,
0x39,0x32,0xCF,0x51,0x29,0x94,0x49,0x8C,0x86,0x0C,0x30,0x30,0x17,0x2D,0xEA,0x32,0x40,0xE7,0x9C,0xEB,0xBE,0xDD,0xD7,0xD4,0x17,0x4A,0xCC,0xDB,0xA9,0x67,0x6F,0x95,
0x88,0xA5,0x42,0x08,0x84,0x8E,0xC7,0x39,0xC1,0xC8,0x52,0xCA,0x09,0x6E,0x40,0x27,0xEE,0x3D,0x4D,0x4B,0xF1,0x2E,0x8E,0xDB,0x3A,0x42,0x92,0xC5,0x02,0xC7,0x0F,0x85,
0xE1,0x4B,0x0B,0xAC,0x8A,0xCC,0xC1,0x89,0x71,0xC8,0x1F,0x48,0x5C,0x7B,0x93,0x9E,0x35,0x6A,0x18,0xE9,0xD9,0xAB,0xCD,0xD4,0x2F,0x7C,0xAE,0xF7,0x00,0x5A,0x9B,0xE1,
0xDD,0xDD,0xAC,0x12,0x6E,0xAF,0x9A,0xA6,0xF6,0xE0,0x42,0xAC,0x26,0x55,0xDC,0x99,0x05,0xB8,0x6C,0x79,0x41,0x2A,0x7B,0xFA,0x0C,0x73,0xA5,0xDB,0xA5,0xB2,0x83,0xA7,
0x20,0xA3,0x34,0x77,0xA9,0xA9,0x46,0x04,0x13,0xC9,0x31,0x3E,0x1C,0xA7,0x04,0x3E,0xCE,0xC6,0x46,0x19,0x1C,0x67,0xD8,0xF7,0x3C,0x83,0xEA,0x3F,0x88,0xD7,0x6B,0xC5,
0xD1,0x80,0xAB,0x48,0xD7,0x77,0x87,0x23,0x53,0xC8,0xE3,0xC7,0x50,0x77,0x15,0xC9,0x39,0x61,0xCF,0xAE,0x7D,0x7B,0x67,0x4B,0xEB,0x59,0x3D,0xD2,0xF1,0x05,0x4D,0x75,
0x75,0x58,0xA3,0x81,0x8C,0x94,0xF4,0xCF,0x33,0x4A,0x14,0x83,0x9E,0xDC,0x0C,0x7E,0x87,0xF1,0xAA,0x92,0xD5,0x41,0x7B,0x35,0x4B,0x1D,0x2C,0xA0,0x5D,0xFD,0x0A,0x75,
0xB5,0xF4,0xCC,0xB2,0xA5,0x25,0x55,0xBA,0x86,0xBC,0x3C,0x85,0xA4,0x46,0x48,0x96,0x9C,0x91,0xBB,0x24,0x3B,0x3B,0x26,0x7B,0x67,0x2A,0x4E,0x08,0xF2,0x8E,0xFA,0x35,
0x17,0x43,0xED,0xF9,0x8A,0xCC,0xD2,0x08,0xAB,0x1C,0x24,0x66,0xA2,0x41,0x52,0xCE,0x32,0xAC,0x57,0x0C,0x47,0x9C,0x6D,0x38,0x2B,0x9C,0xE3,0x19,0x00,0x1D,0x22,0xDC,
0x7A,0xD6,0xE1,0x4F,0x71,0x92,0xB1,0x2E,0x93,0xD3,0x54,0x30,0x0B,0xF3,0x30,0xA0,0xDE,0x17,0x77,0x76,0xF5,0x27,0x81,0xDC,0x9E,0xDE,0xDC,0x68,0x74,0xFD,0x5D,0x7F,
0xAC,0xB7,0x2C,0x30,0x5F,0x9D,0xE2,0x72,0x37,0xC7,0x24,0xAC,0xAD,0x27,0xF9,0x12,0x40,0x38,0xC6,0x0B,0x0C,0x72,0x39,0x38,0xC0,0xC6,0xBB,0x74,0xD0,0xAE,0x84,0x12,
0x95,0x5F,0xA7,0xE9,0xFA,0x7B,0x25,0xC3,0xC2,0x91,0xA9,0x8D,0x30,0x6D,0xF3,0x78,0x91,0x28,0x07,0xCC,0x02,0x90,0xE5,0x40,0xCE,0x19,0x8F,0x97,0x19,0xC8,0x39,0xEC,
0x4F,0x6C,0x75,0xF6,0x9A,0x69,0xEA,0x68,0xAD,0xB5,0xD2,0x4B,0x23,0xC4,0x76,0x4F,0xB4,0xCE,0x5C,0x32,0xA6,0x4A,0x6D,0x19,0x66,0x5E,0x49,0x1C,0x8F,0x38,0x27,0xDD,
0x62,0x50,0xF5,0x3D,0xE2,0xDB,0x50,0xB5,0x30,0xD6,0x05,0x66,0x52,0x9E,0x1C,0x2E,0xE5,0x37,0x6D,0x20,0x36,0xDC,0xB0,0xFF,0x00,0x23,0x8E,0x3F,0xF3,0xAE,0x79,0xBA,
0x82,0xE1,0x52,0xB4,0xE0,0xDC,0x6B,0x64,0x76,0x2D,0xB6,0x49,0xE7,0x07,0x1E,0x65,0x23,0x0F,0x95,0xC8,0xF2,0x8E,0x71,0xAE,0x4D,0x63,0x18,0x6C,0x54,0x9E,0xC8,0xFD,
0xD5,0xA2,0xE7,0x57,0x41,0x54,0x91,0xCB,0x43,0x3C,0x0F,0x56,0x68,0xBC,0x0F,0x12,0x58,0xBC,0x47,0xCA,0x96,0x61,0x84,0x20,0xED,0x66,0xDC,0x18,0xB0,0x53,0xCA,0x8C,
0xE8,0x05,0x3D,0xE6,0xA1,0x77,0xD9,0xE1,0xB7,0xD6,0x4C,0xB1,0x13,0x59,0x3C,0x15,0x05,0x25,0x97,0x69,0x05,0xB7,0x8F,0x44,0x63,0x80,0x3C,0xD9,0x65,0x51,0xE5,0x51,
0xE9,0x32,0xA8,0xBF,0x5E,0x63,0x94,0x4C,0xB1,0xCA,0x33,0x08,0x8C,0x24,0xF2,0x31,0x38,0x3C,0x0D,0x85,0xB9,0x0B,0x80,0x46,0x41,0xCF,0x38,0xCE,0x38,0xD7,0x64,0xF7,
0x68,0xA5,0x8A,0xAD,0x96,0xE9,0x4F,0x42,0x2B,0x8F,0x87,0x3D,0x34,0x28,0x1B,0x2A,0x1B,0x80,0x66,0x18,0x07,0x24,0x64,0xF6,0x04,0x85,0xCE,0x48,0x07,0x55,0xA5,0x78,
0x90,0xDC,0x15,0x24,0x51,0x16,0xF2,0x93,0x75,0xF1,0x5F,0x5F,0x2D,0x1F,0xCB,0xBC,0xF2,0x55,0xC6,0xCE,0x3C,0x1A,0xEA,0x7A,0x0F,0x0E,0x28,0xE3,0x52,0x1B,0x6A,0xC8,
0x81,0x08,0x04,0x12,0x30,0x49,0x24,0x80,0x41,0xD0,0x09,0x18,0xC2,0x8C,0x94,0x75,0x95,0x32,0xC0,0xD2,0x28,0x8D,0xA3,0x99,0x82,0x36,0xD0,0x46,0xC0,0x76,0x1C,0x38,
0x1F,0xB0,0xFD,0xB5,0x45,0x6E,0x83,0x5A,0x09,0xDE,0xB0,0xC3,0x3C,0x0A,0x5F,0xC6,0x4A,0xA6,0x8C,0x98,0xE1,0x44,0xC3,0x00,0xA5,0x94,0x97,0x72,0xCC,0x00,0xC1,0x23,
0xD4,0x92,0x17,0x05,0x4A,0x6E,0x96,0xAE,0x32,0xC0,0x4B,0xD6,0x3D,0x39,0x91,0xB6,0xC5,0x28,0xCB,0x46,0x53,0x20,0x92,0x3B,0xE4,0x88,0xC6,0x49,0x00,0xE3,0x1C,0x10,
0x0E,0xA2,0xF0,0xDA,0xAE,0x78,0x8D,0x69,0xB2,0x0C,0xCA,0xF1,0x45,0x12,0x4A,0x24,0x85,0x59,0xD8,0x89,0x10,0x3F,0x87,0xB0,0x13,0x9E,0x30,0x1B,0x19,0x04,0xF1,0xEF,
0xDB,0x41,0xE2,0xAE,0x86,0x1A,0x80,0x23,0xDF,0x3C,0x95,0x19,0x10,0xE0,0x64,0xB3,0x13,0x81,0xC1,0xCF,0x39,0xCF,0xA7,0x3D,0xFD,0x8E,0xAC,0x14,0x5D,0x05,0x51,0x51,
0x4C,0x95,0x14,0xB5,0x1E,0x03,0x10,0xB1,0xA4,0x81,0x77,0x3B,0x10,0x0E,0x33,0xB3,0x24,0x70,0x40,0xCF,0x7F,0xB0,0xCE,0xA7,0x37,0x39,0x2C,0x9D,0x35,0xF1,0x0E,0xD1,
0x3C,0xD0,0x09,0x2A,0xAD,0xB5,0xE9,0x2D,0x74,0x91,0xCE,0x65,0x49,0x55,0x65,0xDD,0x8D,0xAC,0xA3,0x04,0x05,0x00,0xE0,0xE3,0xD3,0xBF,0x3A,0xF8,0x31,0x97,0xB1,0x51,
0x32,0xA3,0xCD,0x74,0xD3,0x74,0x7F,0x59,0x31,0x3F,0x2F,0x6F,0x2C,0x44,0xAD,0x11,0xDD,0x50,0x89,0xB4,0x8E,0xE4,0x1D,0xD8,0x23,0x9E,0xFA,0xD0,0x3A,0x53,0xAA,0xA8,
0xE4,0x09,0x1D,0xBE,0x8E,0xA6,0x45,0x07,0x7A,0xC5,0x59,0x19,0x61,0x83,0xEA,0x32,0x7F,0xE7,0xBE,0xAD,0x76,0x55,0xA4,0xB8,0x40,0xD4,0x6B,0x54,0x4A,0x22,0x1A,0x76,
0x68,0x64,0x21,0x80,0x39,0x21,0xC1,0xF5,0x04,0x1C,0x82,0x3D,0x31,0xA5,0x7B,0x37,0xC3,0xCA,0xAB,0x34,0xC6,0x64,0xBA,0xC5,0x25,0x24,0x13,0xBC,0xE8,0x52,0x11,0xF3,
0x32,0x97,0x00,0x62,0x49,0x79,0x66,0x00,0x00,0x02,0xE4,0x00,0x46,0x40,0x19,0xD2,0x51,0xE2,0x57,0x47,0x2C,0xB0,0xCA,0x43,0x0B,0x4E,0x80,0xB4,0x9B,0xA7,0x9A,0x7C,
0x0D,0x92,0xC7,0x13,0xA3,0xBB,0xB3,0x0B,0x93,0x7E,0x8A,0x5D,0x5B,0x6F,0xEA,0x1A,0x3A,0x37,0x9A,0xBE,0xDF,0x24,0x11,0xF8,0x8A,0xA1,0x84,0x88,0xC0,0x16,0xC8,0x00,
0x90,0x71,0xDF,0x8E,0x75,0xF5,0x59,0x4F,0x5F,0x60,0x96,0x1F,0xEA,0x56,0x9A,0xBA,0x59,0xB7,0x17,0x1E,0x2A,0x1F,0x0E,0x45,0x18,0x3C,0x30,0x3C,0x8E,0x79,0xC7,0xDB,
0x54,0x1F,0x8A,0x17,0x5A,0x6B,0x4F,0xC2,0xEA,0x8B,0x5C,0x90,0x87,0xAC,0xAC,0x95,0x22,0x85,0x78,0x66,0x01,0x64,0x59,0x1D,0xBD,0x71,0x80,0x02,0xF3,0xEA,0xFF,0x00,
0xAE,0x97,0xBE,0x1D,0xDF,0xBF,0xAB,0x59,0xE2,0xB1,0x75,0x12,0x2B,0xC3,0x2C,0x6E,0xF4,0x92,0x4B,0x30,0xDB,0x24,0x60,0x3A,0xB2,0xE0,0x1D,0xD9,0x07,0x24,0x00,0x46,
0x46,0x78,0x3C,0x1D,0x36,0xD0,0xCE,0x67,0xA6,0x6C,0xD2,0x36,0xCE,0x29,0x67,0x13,0x8F,0xD9,0xAA,0x1F,0x14,0x66,0xED,0x04,0x04,0x0A,0x97,0xA9,0xEA,0x68,0x6A,0xD6,
0xE3,0x44,0xA1,0x9B,0x77,0xD0,0x39,0x52,0x08,0xE5,0x4F,0x39,0xC1,0xCF,0xBF,0x3A,0x21,0x6D,0x65,0xAB,0x62,0xB2,0xBF,0xC9,0x2D,0x4C,0x81,0xBC,0x9B,0x56,0x25,0xC9,
0x04,0xE7,0x9C,0x01,0xF8,0xF7,0xD0,0x2E,0xA8,0xB4,0x41,0x66,0xBC,0xCA,0x69,0x65,0x44,0xA6,0x8D,0xC9,0x10,0x6E,0x12,0x6E,0xC1,0x00,0x85,0x75,0xF2,0x92,0xB9,0x20,
0xFA,0x1C,0x64,0x1C,0x92,0x35,0x96,0xB9,0xE3,0xAA,0x70,0xAA,0xDB,0x3B,0x12,0x76,0x96,0xDC,0x7D,0x39,0xE3,0xD3,0xDB,0xFD,0xB5,0x24,0x92,0x00,0x2E,0x35,0x55,0x1E,
0xDC,0xCC,0xBA,0x71,0x4A,0x4B,0xAD,0x15,0x05,0x45,0x3D,0x0F,0x50,0xD1,0x2D,0x34,0x93,0x6C,0x30,0x43,0x21,0x22,0x43,0x9E,0x0E,0xD5,0x51,0xC7,0x23,0xFE,0x67,0x40,
0x2B,0x8B,0xC1,0xBE,0x9A,0x4D,0x95,0x55,0xD2,0x38,0x01,0x95,0xF0,0x72,0x71,0xEA,0x4F,0x7F,0x4E,0xFA,0xFA,0x68,0xA2,0x85,0xCC,0xAB,0x57,0x53,0x3F,0x98,0x23,0x4A,
0x06,0x10,0x9E,0x38,0xDA,0x7B,0x1F,0x4C,0x73,0xFA,0x9E,0x75,0xDB,0xD3,0x4A,0xE6,0xB2,0xA6,0x76,0xA5,0x9E,0x49,0x19,0x82,0x46,0x60,0x52,0x5D,0x58,0xE7,0x00,0x36,
0x3C,0xA4,0xE3,0xBF,0x07,0xEF,0xDF,0x51,0x19,0x5A,0x74,0xBE,0x8A,0x0A,0x76,0x3B,0x3E,0x8B,0xAA,0xC1,0xD0,0xD7,0xBA,0x9F,0x06,0xA2,0xEB,0x71,0x14,0x01,0xC9,0x6F,
0x0F,0xC3,0x26,0x40,0x80,0x67,0x71,0xC7,0x0A,0x7D,0x3F,0x23,0x5C,0xB7,0x7B,0x5D,0x34,0x3D,0x53,0x6F,0xB0,0x59,0x2E,0x15,0x97,0x1A,0xEA,0xA9,0x22,0x89,0xA6,0x66,
0xF2,0x44,0xCC,0x42,0x95,0xC0,0x00,0x60,0x13,0x8F,0x5C,0x01,0xA7,0x7E,0xA6,0xBA,0xD4,0xD9,0xAC,0x49,0x6C,0xA5,0x48,0x05,0xE9,0xD5,0xDA,0x48,0xC0,0x45,0x58,0x40,
0x50,0xC1,0x02,0xB1,0xE0,0x8D,0x87,0xB8,0xC9,0x24,0x77,0x27,0x51,0xC3,0x27,0x53,0x74,0xE7,0x50,0xDA,0x6F,0xB5,0x14,0xD2,0xC6,0x77,0xC5,0x72,0xA6,0x33,0xF1,0xE2,
0xA0,0x7E,0xFE,0x99,0x04,0x82,0xBF,0x8D,0x77,0x03,0x9B,0xA5,0xD7,0x6F,0x71,0x79,0x39,0x3A,0x0F,0x55,0x68,0x83,0xE1,0x75,0xA9,0x6D,0xE6,0xB2,0xB6,0xAA,0xAD,0xE3,
0xF3,0x48,0xCD,0xBC,0xA9,0xD8,0x3D,0x76,0x8F,0x53,0x9E,0xDE,0x9A,0xF6,0x9B,0xA3,0x3E,0x1F,0x5E,0x6B,0x96,0xD3,0x4D,0x67,0xBB,0x5B,0xEB,0x8C,0x02,0xA6,0x24,0xA9,
0x79,0x61,0xF1,0xA3,0xDC,0xC9,0xBC,0x67,0x07,0x19,0x56,0x19,0x1E,0xDD,0xF4,0xD7,0xD3,0x1D,0x49,0x65,0xBF,0x5A,0xD3,0x15,0xB1,0x4F,0x14,0x88,0x41,0x86,0x56,0x50,
0xC1,0x4F,0x74,0x6F,0x76,0x18,0xC1,0xFD,0x33,0xEA,0x35,0xBA,0x9F,0xA5,0x7A,0x77,0xA6,0x2B,0xDA,0xE9,0x41,0x43,0x2D,0x3C,0x8E,0x85,0x0C,0xB3,0x4C,0x4A,0xC7,0x1E,
0xED,0xD8,0x00,0x9E,0x06,0x49,0x20,0x01,0x8E,0x75,0x9B,0x56,0x62,0xD5,0x6C,0x9E,0x58,0xAA,0x5C,0xF1,0x25,0xF9,0x72,0xF4,0x4E,0x54,0x74,0x50,0x18,0xE3,0x92,0x30,
0xDC,0x84,0x6B,0x7E,0xAA,0x5F,0xD5,0x7F,0x0E,0xA2,0xB2,0x74,0xE5,0xCE,0xED,0x68,0xAE,0xAA,0x91,0x6D,0xF1,0xA4,0xE6,0x19,0x18,0x3E,0x22,0x2D,0xB1,0xBC,0xC4,0x67,
0x21,0x99,0x4F,0xDC,0x13,0xED,0xA0,0xDD,0x3D,0x64,0xBB,0xDD,0xEC,0x62,0xBB,0xC1,0xDF,0x33,0x12,0x40,0xA9,0x6F,0x3C,0xF1,0x95,0xC7,0x95,0x48,0x20,0x9D,0xA0,0xB0,
0x3D,0xB8,0xC6,0x4E,0x34,0xDB,0xF1,0x0B,0xAB,0x1A,0x2E,0x94,0xA8,0xE9,0x9A,0x43,0xF3,0x17,0x6B,0x9A,0xA4,0x0C,0xA1,0x40,0x68,0xA0,0x0E,0x1D,0x9D,0xF9,0xC2,0x96,
0x2A,0xB8,0x04,0xFD,0x2A,0x49,0xC6,0x46,0x9D,0xFE,0x15,0xD9,0xA4,0x83,0xA4,0xA1,0xF9,0xAD,0x95,0x71,0x02,0x4A,0x54,0x92,0xDC,0x36,0x02,0xE7,0x6B,0x73,0x82,0x59,
0x88,0x3F,0xE9,0x20,0xF1,0xC8,0xD6,0x85,0x86,0x36,0x63,0x49,0x1F,0xB4,0xEA,0xFB,0x6B,0xE7,0xFC,0xB2,0x53,0xAF,0x91,0x82,0x79,0x04,0x06,0xED,0xBE,0x9F,0x0D,0xFF,
0x00,0x7B,0xA8,0x8F,0xF4,0xFA,0xB8,0xA5,0x79,0xA2,0xA7,0x64,0x96,0x9B,0x1C,0x08,0xD6,0x4D,0x84,0x1E,0xE7,0xCB,0xB4,0x1E,0x06,0xBA,0x20,0xB1,0x4D,0x3D,0x1C,0x93,
0x7C,0xB4,0xA6,0x3C,0x17,0xDA,0x40,0xCE,0xCC,0x8E,0x49,0xC0,0x18,0xCE,0x07,0x7E,0x72,0x35,0x49,0xEA,0x8A,0x3A,0x39,0x6F,0x48,0xA9,0x54,0x0B,0x07,0x0A,0x11,0x51,
0x64,0x60,0x01,0x3E,0x5C,0x16,0xC6,0x7F,0xF2,0xC4,0xE4,0x7A,0xEA,0xB6,0xD0,0x1A,0xAA,0xC8,0x66,0x89,0xE9,0xD9,0x0A,0xB6,0xFA,0x88,0x14,0x87,0x47,0x78,0xF3,0xB5,
0x99,0x4E,0xE4,0x6C,0xAB,0xB6,0x76,0x9C,0x81,0xC0,0x6C,0x6D,0xD5,0xE6,0xC2,0x45,0x9C,0x55,0x13,0x31,0x20,0x10,0x9A,0x51,0x8D,0x4A,0x25,0x2C,0x31,0x5B,0xA6,0xA8,
0xA7,0x26,0x20,0x66,0xF1,0x1A,0x55,0x50,0xA4,0x91,0x04,0x20,0xB3,0x67,0x73,0x63,0x7B,0xB0,0xCF,0x72,0x3E,0x93,0xA0,0x75,0x94,0xB0,0xBD,0xED,0xE2,0x4F,0x0D,0x64,
0x0E,0xEB,0x3D,0x51,0x75,0x72,0x19,0x81,0xCA,0x84,0xC6,0xC7,0xF2,0xEF,0x00,0xA7,0x19,0x7F,0x5C,0xE7,0x4C,0x0F,0x4B,0x73,0xAA,0xA3,0x48,0x64,0xA3,0x7A,0x59,0x48,
0x67,0xA7,0x94,0x53,0xF8,0xA6,0x22,0xB8,0x21,0x50,0xC6,0xA1,0x37,0x9F,0x2E,0x79,0x20,0x67,0x1B,0xB8,0x20,0xF0,0x5D,0x45,0x33,0x55,0xC1,0x4C,0xF1,0x2A,0xD4,0x46,
0xA1,0xC5,0x34,0x48,0xEA,0x91,0x77,0x1B,0xA5,0x7C,0x20,0xC7,0x00,0xB1,0x2F,0x8C,0x9E,0xCB,0xBB,0x9E,0x29,0xE4,0x26,0xD7,0x5F,0x48,0x33,0x2F,0x6C,0x97,0x68,0xA0,
0x81,0x29,0xA4,0x2B,0xF3,0x32,0xC4,0x24,0x5F,0x96,0x5D,0xA2,0x30,0x41,0x6F,0xAB,0x23,0x70,0x07,0x8F,0x5C,0x71,0xC8,0xC6,0x90,0x7A,0xB3,0xE1,0xFD,0x15,0x7D,0xD6,
0x20,0xCF,0x54,0x0B,0x40,0x92,0x48,0xFC,0x3C,0xA4,0x61,0x95,0x0A,0x93,0xF5,0x60,0x2E,0x0A,0x82,0x73,0xB7,0xD0,0xF3,0xA6,0xE1,0x43,0xFD,0x4B,0xC5,0x9C,0x50,0xAA,
0xBC,0x6E,0xC8,0x23,0xE7,0x62,0xA2,0x16,0x50,0xB8,0x2A,0x36,0x85,0xE3,0x92,0x32,0x49,0x07,0xD3,0x95,0xBB,0xD5,0xF2,0xA6,0xCF,0x2A,0xFF,0x00,0x53,0xB5,0xC9,0x2C,
0x2A,0x87,0xC0,0x90,0x9C,0xE1,0xBB,0x9D,0xA4,0x92,0xDB,0x4A,0xEF,0x1C,0x76,0x19,0xE3,0x18,0xC4,0xD2,0x35,0xF7,0xCC,0x15,0x68,0x89,0x6B,0x8B,0x42,0x9C,0xD3,0x1E,
0xB5,0xE9,0x7A,0x97,0x82,0xCB,0x51,0x2D,0x74,0x50,0x86,0xDA,0x69,0xFC,0xF2,0x2A,0x8E,0x4A,0x94,0xFA,0xC0,0x19,0xFA,0x58,0x63,0xBE,0x3B,0x92,0x4B,0x4F,0xF1,0x2B,
0xE2,0xBC,0xB4,0xE9,0x6D,0x4B,0x4C,0xB1,0x4A,0xE3,0x00,0xAD,0x0B,0x46,0xC0,0x0E,0xE4,0x93,0x81,0xEB,0xEB,0xAA,0x35,0xA2,0x9F,0xA7,0xFA,0x9A,0x58,0x8D,0x65,0xE6,
0x96,0xE9,0x38,0x6C,0x29,0x7A,0x64,0x7A,0x90,0x30,0x48,0x05,0x93,0x6C,0x98,0x1C,0x02,0x48,0xE3,0xD4,0xF6,0x23,0xB2,0x8A,0x3A,0x18,0xE9,0x84,0x12,0x5D,0x69,0xC2,
0x86,0x4C,0x2C,0x35,0xB2,0xB9,0xE5,0xBE,0x9F,0x0D,0x08,0x60,0x41,0xF5,0x3C,0x65,0xBB,0xE7,0x00,0xD3,0x96,0x86,0x8E,0x67,0xF8,0x92,0xC6,0x0B,0xBC,0xEC,0x8A,0x41,
0x5D,0x5F,0x13,0x32,0x46,0xE3,0x95,0x41,0xA9,0xBA,0x77,0xAF,0x7A,0x9B,0xA9,0x23,0x6B,0xC5,0x9E,0xF0,0x16,0x67,0x08,0xF5,0x13,0xC1,0x96,0x8C,0x77,0xC2,0x23,0x15,
0xC9,0xC6,0x7C,0xB9,0x1D,0xF3,0xEE,0x75,0x5B,0x87,0xE1,0x77,0x52,0xD0,0x74,0xA4,0xBF,0x23,0x6C,0x92,0x48,0xDA,0x7F,0x11,0xA5,0x96,0xBA,0x96,0x04,0x0F,0x10,0x05,
0x37,0x21,0x95,0xB6,0xF0,0x64,0x04,0x6E,0x0D,0xE7,0x27,0x3E,0x5C,0x13,0x2D,0x5F,0x65,0xA0,0xAE,0x13,0x41,0x57,0x57,0x25,0x4A,0x12,0x04,0x10,0x49,0x3C,0xE7,0xCC,
0x00,0x60,0xF1,0x31,0x59,0x01,0xF4,0x38,0x66,0xCE,0x48,0xC1,0x1A,0x19,0x76,0xB9,0xAD,0xF1,0x26,0xA4,0x66,0x95,0x9A,0x38,0xB6,0xAB,0xCD,0x51,0x18,0xF0,0x13,0x0B,
0x80,0xC8,0x8C,0x3C,0x25,0x04,0x7D,0x20,0xEE,0x39,0x39,0xCF,0x3A,0xBE,0xEA,0x78,0xDE,0xD6,0xDB,0x65,0x0C,0x93,0xCC,0x09,0x24,0x75,0x4A,0x7F,0x11,0x22,0xE9,0x96,
0xA1,0x9E,0x18,0xEA,0x62,0x6B,0xC5,0x1D,0x52,0x53,0xCC,0x23,0x50,0x9E,0x2A,0x98,0xF3,0xBD,0x40,0x66,0xC9,0x04,0x05,0x3C,0x9C,0x76,0xEC,0x06,0x57,0x12,0xC9,0x57,
0x6D,0x7A,0x06,0x55,0x8D,0x65,0x75,0x0D,0xB1,0x09,0x20,0xE3,0xBF,0x88,0xAD,0xF4,0xE3,0x20,0xF0,0x4A,0xF2,0x08,0xF5,0xCF,0x54,0xB6,0x48,0x2E,0x7D,0x65,0x4B,0x69,
0xB3,0xC9,0x05,0x79,0x11,0xB3,0xCF,0x3D,0x4A,0x36,0xD3,0x20,0x52,0x4B,0x21,0x03,0x81,0x82,0x36,0xF1,0xFA,0xE9,0x9A,0xFF,0x00,0x43,0x9E,0xA2,0xA4,0x96,0x82,0xB9,
0xA9,0x27,0x86,0x94,0xA8,0x56,0x90,0xBA,0xAA,0x8E,0xF9,0xC9,0x3E,0x50,0x06,0x38,0x0B,0xD8,0x70,0x34,0x2E,0xB8,0x39,0x9E,0xE8,0xEA,0x8A,0x61,0x6C,0x64,0xCD,0xCA,
0xFD,0x57,0x1C,0x74,0x15,0xB5,0x5D,0x42,0x7F,0xAE,0xC3,0x0A,0x47,0x0C,0xCA,0xC2,0x3A,0x3C,0x78,0x58,0x6E,0x01,0xCC,0x5C,0x01,0x9F,0x6C,0xB1,0xF4,0xD1,0xDA,0x19,
0x07,0x4C,0xD7,0x4B,0x7D,0xA5,0xC4,0x54,0x33,0x23,0x49,0x0B,0x2C,0x58,0x0D,0x2F,0x87,0x85,0x00,0x16,0xCA,0xE1,0xD8,0x90,0x58,0x93,0xC2,0x96,0x00,0x91,0x83,0xD7,
0x6B,0x49,0xA3,0xB9,0xA7,0xCC,0x16,0x85,0x80,0x8A,0x45,0x10,0x41,0xB6,0x13,0x84,0x42,0x5B,0x1C,0x2E,0xEC,0x31,0xED,0xF9,0xD7,0x44,0x51,0x43,0x75,0x92,0xE5,0x61,
0xAD,0xA3,0xA6,0x35,0x54,0xA1,0x6A,0xE8,0xB2,0xA0,0x9D,0xA1,0x86,0x5B,0x01,0x40,0x00,0x67,0xBF,0x3F,0x50,0xC0,0x3A,0x8E,0x90,0x09,0x25,0x73,0x6F,0x65,0x26,0x25,
0x4D,0xEC,0xB4,0xC2,0x46,0x82,0x12,0x9F,0x4D,0x57,0xD7,0x5C,0x7E,0x20,0x47,0x78,0xF0,0xED,0x74,0x4F,0x4F,0x33,0x89,0x21,0xAF,0x55,0x98,0xD5,0x39,0x46,0x23,0x29,
0xC6,0x36,0xE3,0x82,0x30,0x77,0x1C,0x8E,0x70,0x47,0x37,0x56,0xFC,0x3D,0xB8,0x55,0xDD,0x67,0xA8,0x9A,0xEE,0x0C,0xA8,0xC4,0x9A,0x69,0x29,0x64,0x59,0x22,0x0E,0xCC,
0xC4,0xEC,0x76,0x67,0xF0,0xC3,0x1F,0xA8,0x06,0xE1,0xB3,0xEF,0xAD,0xD7,0xB9,0xA8,0xAD,0x1D,0x56,0x67,0x9A,0xEE,0x29,0x6E,0xD1,0x82,0x85,0xD1,0x15,0xA2,0xA9,0x50,
0x36,0x11,0x22,0xC6,0x09,0x0E,0x78,0xC9,0xDA,0x73,0x9C,0x80,0x4F,0x21,0xB2,0xD1,0x3F,0x57,0x5C,0x20,0x11,0x4B,0x64,0x9E,0x6A,0x2C,0xED,0x87,0xC7,0xA3,0x01,0x07,
0x38,0xF2,0x1C,0x73,0xC0,0xC8,0x2D,0x1E,0x7F,0x5F,0x43,0x31,0x51,0xB8,0xBB,0x30,0x69,0x3F,0x2B,0xA5,0x77,0x55,0x06,0x34,0x73,0x80,0x3B,0xA9,0x05,0x4F,0xC3,0xCB,
0xD5,0x1D,0x63,0x49,0x49,0xD5,0x7D,0x3D,0x4D,0xB4,0x0F,0xEF,0xA5,0xC9,0x50,0x9E,0x70,0x17,0x6F,0xD5,0xF7,0xE4,0x70,0x3D,0x74,0x4E,0x86,0xC9,0x79,0x6A,0x51,0x42,
0x7A,0xE2,0xAE,0xEF,0x5C,0xDE,0x58,0xA0,0xB4,0x45,0x34,0xEE,0x8F,0xEB,0x82,0xC8,0xAB,0x9F,0x62,0xAE,0x31,0xE8,0x0E,0x78,0xB3,0x55,0x5A,0x6B,0xCC,0x7E,0x35,0x5F,
0x49,0x48,0xF3,0x48,0x72,0x2A,0xA1,0x96,0x57,0x61,0x8E,0xE4,0x23,0x95,0x0A,0x7B,0x72,0x0E,0x7E,0xFF,0x00,0xE3,0xAE,0x5A,0xAE,0xBC,0xB3,0x74,0x85,0x03,0x96,0xB0,
0xD7,0xD2,0x4C,0x63,0x3E,0x2B,0xCD,0x28,0x3E,0x31,0x1C,0xF2,0xA4,0xBE,0xD1,0xBB,0x9E,0x09,0x27,0x3D,0xC6,0x06,0x64,0x92,0x8E,0xD6,0xCF,0x17,0x4E,0x86,0xDA,0xE9,
0xF1,0x0A,0xC4,0x15,0x46,0x56,0xE4,0x64,0xC3,0xE4,0x50,0xEB,0x07,0xC3,0xB8,0x6D,0x34,0x66,0x86,0xA6,0xDF,0x14,0x15,0x12,0xAE,0x6A,0x17,0xE6,0x1A,0xAA,0xA6,0xB3,
0x38,0x2C,0x66,0x75,0x3E,0x51,0x9C,0x1F,0x0C,0x00,0x09,0x3E,0x62,0x73,0xCB,0x07,0x52,0xF5,0x5D,0xBA,0xC5,0x68,0x6B,0x41,0xB8,0xAC,0x95,0x86,0x21,0x1B,0x0A,0x74,
0x6F,0xEC,0xB8,0xCB,0x18,0xF3,0xE6,0x04,0x79,0x93,0xEC,0x0E,0x73,0x8E,0xDA,0x4A,0x9B,0xE2,0x6D,0xE3,0xA9,0xE4,0xD9,0x43,0x6E,0xA3,0xB4,0x40,0xC0,0xA0,0x64,0x4F,
0x0D,0x8E,0x40,0xCE,0x64,0x3E,0x66,0x20,0x60,0xE7,0xDF,0x07,0xD4,0x63,0x75,0xBA,0xD9,0x4C,0x16,0x6A,0x4A,0x77,0x6A,0xA0,0x72,0x65,0xA8,0x01,0x67,0x62,0x70,0x77,
0x17,0x2F,0x91,0x8F,0xCF,0xFA,0x89,0xC6,0x30,0x23,0xC9,0x98,0x67,0x72,0xE4,0xE5,0x8B,0x96,0xF7,0x28,0x54,0x6B,0x70,0xB9,0x57,0x45,0x4D,0x00,0x67,0x3B,0xE3,0x64,
0x91,0x8C,0x52,0xB8,0x45,0xC7,0x31,0x0D,0xC0,0x6F,0xCE,0x01,0x50,0xC4,0x6D,0x2C,0x30,0x31,0xCB,0x5C,0x35,0x0F,0x3D,0xC9,0x96,0x96,0x19,0x69,0xE3,0x91,0x3C,0xF5,
0x54,0xC0,0x41,0x18,0x0A,0xCE,0xC0,0x07,0x74,0x07,0x63,0x13,0xB8,0xA0,0x7C,0x92,0x0F,0xD5,0xE5,0x24,0x76,0xE4,0x83,0xA6,0x5A,0x29,0x6A,0x48,0x9E,0x6D,0x8A,0xBF,
0x35,0x13,0x4B,0x13,0xB2,0x30,0x6C,0xA1,0x51,0x94,0x3E,0x62,0x43,0x73,0x82,0xFC,0x13,0xE6,0x1A,0x27,0xE0,0xDA,0x52,0x24,0xB7,0x46,0xD7,0x0A,0xAA,0xC9,0xB1,0x51,
0xF2,0x55,0xCA,0x8F,0x14,0x92,0x72,0xCC,0x81,0xCB,0x85,0xCE,0x1B,0x38,0x0A,0xF9,0xF4,0xDD,0x9D,0x46,0x0D,0x97,0x44,0x5D,0x37,0x5D,0xE1,0x6B,0x85,0x55,0x4A,0xDA,
0xEE,0x7B,0x9A,0x8A,0x2D,0xE9,0x49,0x1C,0xE7,0xCA,0x72,0x08,0x67,0x4C,0x09,0x17,0xB8,0xC1,0x25,0x4F,0xD5,0x85,0x39,0xC3,0x21,0xB5,0x75,0xCA,0x4B,0x94,0x90,0xDE,
0x10,0x4C,0xD4,0xE4,0x84,0x96,0xB6,0x1C,0x64,0xE4,0x05,0x27,0x01,0x91,0x1B,0x24,0xE0,0x30,0xDE,0x02,0xB0,0xC0,0x66,0xC3,0x1F,0xA1,0x58,0x7A,0x56,0xC9,0x24,0xD1,
0x4F,0x53,0x53,0x2A,0x92,0x0D,0xCE,0xA1,0x1C,0xB3,0x36,0x32,0x63,0xC0,0x38,0x43,0xE4,0xEE,0x14,0x8C,0x0E,0x5B,0x1A,0x58,0xEA,0x7A,0xC3,0x53,0xD0,0x68,0xF4,0x86,
0xDD,0xF3,0xC9,0x28,0xCA,0xC1,0x2B,0x1D,0xA5,0x41,0x7F,0x2A,0x83,0x92,0xC0,0x1E,0x58,0x81,0xB7,0x83,0x92,0x58,0x60,0x7D,0x29,0xC8,0x46,0xEA,0xDC,0xB1,0x5D,0xBC,
0xAB,0x4D,0xEA,0xB2,0x29,0x42,0x54,0xC1,0x50,0x95,0xD5,0x61,0x3C,0x08,0xA0,0x2E,0x55,0xA7,0x04,0x85,0x2F,0x92,0x00,0x5C,0x36,0x14,0x67,0x0A,0x7C,0xC4,0x0E,0x41,
0xD2,0xCF,0x51,0x5E,0xEE,0x66,0xDF,0x12,0x4F,0x14,0x4D,0x18,0xDC,0xAB,0x2C,0xB2,0x17,0x69,0x7B,0x8F,0x10,0x60,0x95,0xC6,0x39,0x07,0xFC,0xB9,0xF5,0xCE,0x7C,0x35,
0x93,0xC9,0xE0,0x3C,0xF1,0xD7,0x55,0xC4,0x19,0x59,0x69,0xD9,0x96,0x11,0x93,0xE6,0x01,0x37,0x29,0x39,0xC6,0x32,0x54,0xA9,0xC8,0x38,0xE3,0xBF,0xC3,0x2D,0xC2,0xFD,
0x78,0x79,0x6A,0x6D,0x29,0x25,0x1A,0x90,0x48,0x76,0x2C,0x11,0x43,0x6E,0x20,0x12,0x0A,0xB0,0x04,0x73,0x8C,0x96,0xFB,0xE3,0x45,0xA0,0x63,0xE5,0x20,0x37,0xE7,0xD9,
0x53,0x7B,0x9A,0xD1,0x77,0x21,0x76,0x3B,0x35,0x3F,0x50,0xDD,0xC5,0x1C,0x97,0x7A,0x6A,0x06,0x69,0x44,0x91,0x04,0x83,0x3B,0x89,0x25,0x47,0x9F,0x20,0xFA,0x0F,0x53,
0xC9,0xF4,0xD5,0x8E,0x93,0xE0,0x9D,0x34,0xB4,0x0B,0x15,0x4D,0xEE,0xB6,0x51,0x23,0x6F,0x78,0xC6,0xD6,0x5D,0xC4,0x92,0x72,0x08,0x3C,0x73,0xDB,0x4C,0x96,0x4E,0x8E,
0xE9,0xDA,0xBB,0x04,0x46,0x3A,0x08,0x5A,0x19,0x23,0x52,0x1D,0x00,0x05,0xB2,0x33,0xCE,0x3F,0x8F,0xC6,0x88,0xDB,0xED,0xB7,0x4E,0x99,0xB8,0xAB,0x2C,0xB2,0xD5,0xDA,
0xC9,0xC3,0xA4,0x8D,0x99,0x22,0x3E,0xE0,0xFA,0x8E,0xDC,0x1E,0x74,0xED,0x0E,0x19,0x05,0x3B,0x43,0x64,0x60,0x75,0xF7,0x09,0x5A,0xA3,0x17,0x92,0x77,0x16,0x53,0xB8,
0xB4,0x8D,0x8A,0x19,0x6B,0xF8,0x4B,0x64,0xB6,0x4B,0xB5,0xE9,0x28,0x6E,0x14,0xEC,0x30,0x60,0xAA,0xA6,0x07,0x9F,0x7E,0x30,0x07,0xED,0xA5,0xFF,0x00,0x88,0xBF,0x07,
0x3A,0x46,0x5E,0x91,0xAC,0xBA,0xD8,0xE0,0x96,0xCD,0x76,0xA5,0x0D,0x3C,0x69,0x11,0xDD,0x1B,0xFA,0xED,0xDA,0x72,0x00,0xFD,0x3F,0x9D,0x5D,0xA9,0x61,0x49,0xA9,0x96,
0x65,0xC1,0xE3,0xF7,0xFB,0xE9,0x6B,0xE2,0x0B,0x44,0x9D,0x22,0xF1,0x89,0x0F,0x8B,0x29,0x0A,0x84,0x80,0x40,0x6F,0x41,0xF6,0xF6,0xCE,0x7D,0x74,0x3F,0x11,0x74,0x11,
0x53,0xC8,0x72,0x8B,0x00,0xAE,0x61,0x71,0xD5,0x54,0x54,0xC7,0x19,0x71,0x25,0xC4,0x05,0x01,0xF8,0x57,0x4C,0x24,0xB6,0x9B,0xA3,0x15,0x96,0x72,0x05,0x2E,0xD5,0x8C,
0xA8,0xC9,0x55,0x50,0xC4,0x92,0x72,0x72,0xB2,0x03,0x8C,0x8C,0x77,0xC7,0x1A,0x5C,0xEB,0x49,0xCC,0x5F,0x11,0xA1,0x8E,0x2A,0x53,0x35,0x0D,0x0E,0x21,0x2B,0x36,0xEC,
0x92,0x14,0x83,0xB9,0xB3,0x9C,0x11,0xE7,0x38,0xE0,0xF2,0x39,0xCE,0x74,0xF5,0xF0,0x9E,0xDD,0x53,0x43,0x3D,0xCE,0x79,0x44,0x50,0x45,0x1E,0xE2,0x23,0x50,0xA0,0xF8,
0xC4,0xE0,0x13,0xCE,0x3B,0x16,0x00,0x63,0xBF,0xEB,0xA0,0x77,0x6A,0x38,0x2A,0x7A,0xEA,0xAD,0xB7,0x46,0xD1,0xB3,0x8C,0xAA,0x8C,0xAA,0x9C,0x72,0x31,0xDC,0x8F,0x4E,
0x3F,0x6D,0x67,0x75,0xB8,0x93,0x1C,0xF6,0x2D,0x87,0x0E,0xC0,0xA4,0x8E,0x27,0x17,0x6E,0x6C,0x9E,0x6F,0x73,0xC6,0xD7,0x68,0x61,0x8A,0x92,0x99,0x92,0x2A,0x38,0xA6,
0x77,0x11,0xE5,0x40,0x78,0xD7,0x03,0x38,0xE4,0x01,0xB8,0x69,0x7F,0xAC,0x64,0xAD,0xA1,0xB5,0xD0,0x75,0xAD,0xBA,0x74,0x8C,0xD3,0xCC,0x21,0x9D,0x90,0x67,0x6A,0x1C,
0x28,0x24,0xF3,0xDB,0x00,0xFE,0xAB,0xFB,0xB4,0xDE,0xA4,0x0C,0xB0,0xBC,0x64,0x7F,0x72,0x96,0x20,0x07,0x75,0x20,0x20,0xFE,0x38,0xE3,0x5C,0xB4,0x30,0x0B,0x8F,0x4D,
0xD5,0x51,0x54,0x2D,0x3C,0x90,0xC8,0x8D,0x1C,0xBC,0x15,0xCA,0x30,0x23,0x04,0x8E,0xFC,0x13,0xFF,0x00,0x3B,0x0A,0xA4,0xAD,0xCB,0x5B,0x25,0xF4,0x03,0xA7,0xF3,0xE6,
0x8E,0x62,0x78,0x01,0x76,0x1A,0xC0,0xDD,0x49,0x17,0x53,0x9F,0x83,0x54,0x35,0xF7,0x6F,0x8D,0x4F,0x5F,0x3D,0x1F,0xCC,0x42,0xC2,0x42,0xAD,0x34,0x40,0x84,0x50,0x78,
0xDA,0x4F,0x7E,0x71,0xDB,0xDC,0xEB,0xF5,0xDC,0x76,0x6A,0x68,0x69,0x44,0x95,0x92,0x6C,0xFF,0x00,0x47,0x23,0xF8,0x1F,0xEF,0xA8,0xFF,0x00,0xC0,0xDB,0x5C,0x54,0xB5,
0x97,0x1B,0x8C,0xE5,0xD4,0xC3,0x88,0x22,0x8C,0x67,0x08,0x32,0x4F,0xEB,0x92,0x78,0xD5,0x7A,0x7F,0x99,0xB8,0x56,0x78,0x95,0x38,0x58,0x97,0x88,0xE2,0x19,0xC6,0x39,
0xFB,0x73,0xDF,0x5A,0x8E,0x13,0x3C,0xBE,0xCE,0xD7,0x0D,0x33,0x6A,0xB0,0x9C,0x62,0x9D,0x82,0x72,0xC9,0x46,0xAD,0x00,0x5B,0x6B,0xA1,0x57,0x0A,0xD8,0x20,0x45,0x8A,
0x86,0x96,0x6A,0xC6,0x5E,0x32,0xB8,0x20,0x7D,0xF2,0x78,0xFD,0xB4,0x97,0x78,0x9F,0xA9,0xEA,0x62,0x96,0x3A,0x7B,0x45,0x10,0x89,0x97,0x85,0xA8,0x93,0x82,0x3D,0x38,
0xC7,0x3D,0xF1,0xCE,0xA8,0xD2,0x53,0xA8,0x52,0x15,0x30,0xA0,0x67,0xCA,0x00,0xC6,0x94,0x2E,0x57,0x58,0x45,0x70,0xA4,0xA0,0x8C,0xCD,0x29,0xFA,0xE5,0x3F,0x4A,0x77,
0x03,0xF3,0x9F,0x41,0xA3,0xA0,0x07,0x32,0xF2,0xC8,0x40,0xEC,0x97,0x64,0x25,0xB2,0xFD,0xDB,0x02,0x82,0x75,0x05,0xB6,0xF1,0x6C,0xA9,0x0B,0x17,0x48,0x51,0x5A,0xF0,
0xC7,0x15,0x74,0xAC,0x32,0x30,0x32,0xBC,0x71,0xEA,0x3B,0x9D,0x6F,0xA2,0xB8,0x2C,0x76,0xCF,0x0A,0x18,0x2A,0x55,0xE0,0x63,0x2C,0xD3,0xBC,0xA1,0xE4,0x52,0x41,0xF3,
0xE0,0x70,0x06,0x73,0x9C,0x10,0x71,0xB8,0x63,0x04,0x6A,0x8F,0x73,0xE9,0x5E,0xA2,0xBE,0x93,0x25,0x5D,0x44,0x68,0x4F,0xD0,0xC3,0x92,0xAA,0x0F,0x38,0x07,0xBF,0x03,
0xFF,0x00,0x7A,0x9E,0xDE,0xAC,0x17,0x7B,0x1D,0xFE,0x35,0x37,0x69,0x91,0x00,0xF2,0xB9,0x1E,0x64,0x3D,0xB1,0x95,0x00,0xE0,0x86,0x23,0x1F,0x7C,0xE9,0x72,0xBE,0x90,
0x86,0x99,0x43,0x4E,0x5E,0xFF,0x00,0xF8,0x98,0xA8,0xEB,0x23,0x90,0x06,0x12,0x2F,0xD9,0x6B,0x13,0xBA,0x74,0xDD,0x2B,0xA5,0x7C,0x55,0x4A,0xEC,0x29,0x61,0x59,0x55,
0x64,0x4D,0xC7,0x92,0x5C,0xE5,0x5B,0x73,0x01,0x81,0xC1,0x56,0xE3,0xB9,0x1A,0x6D,0xB7,0x25,0x65,0xD6,0xB4,0xC7,0x73,0x78,0xA9,0xEA,0xD9,0x97,0x14,0x70,0x39,0xFE,
0xE1,0x03,0x20,0x9D,0xC7,0x20,0x80,0x73,0xE6,0x56,0xC8,0x24,0x1D,0xE0,0x69,0x55,0x62,0xA5,0xA3,0xAE,0xA4,0xAC,0xA8,0xF0,0x1A,0x04,0x56,0x86,0xA2,0x36,0x94,0x46,
0x08,0xC1,0x0A,0xCD,0xB8,0xE4,0x90,0x31,0xEA,0x72,0x40,0xE4,0x1D,0x77,0x59,0x6B,0x6E,0x75,0x57,0x89,0x23,0xB8,0xA7,0xCB,0x96,0x57,0x4A,0x1A,0xF6,0xA7,0x99,0x43,
0x80,0x3D,0x06,0x38,0x21,0x72,0x33,0xC8,0xC8,0x20,0x83,0x8C,0x95,0xC9,0x1C,0x58,0xFB,0x0D,0x91,0x86,0x92,0xE1,0x70,0x17,0x7D,0xCD,0xA7,0xBE,0xD4,0xAD,0x04,0xB0,
0xD4,0x41,0x4F,0x2F,0x9B,0xC2,0x69,0x5D,0xEA,0x64,0x0C,0xA0,0x06,0x0B,0xE1,0x94,0x0B,0xCB,0x70,0xE4,0x70,0x7B,0x1E,0x32,0x2E,0xD5,0xD1,0xB4,0x36,0x35,0x92,0x4B,
0x97,0xC9,0x4E,0x69,0x89,0x8A,0x2A,0x55,0x8E,0x22,0x22,0x0C,0x46,0x09,0x63,0xB8,0xB7,0x00,0x7D,0x58,0x3D,0xB0,0x08,0xC6,0xA8,0x14,0x8F,0x5B,0x25,0xAC,0xD2,0xC8,
0x7E,0x7E,0xE9,0x29,0x76,0x1F,0x27,0xB2,0x18,0xC8,0x2D,0x92,0x4B,0x32,0x20,0x62,0x33,0xDC,0x79,0xBD,0xBD,0xB4,0x09,0xF7,0x52,0xD1,0xD4,0x57,0x67,0x36,0xEA,0x79,
0x9A,0x19,0x26,0x92,0xA1,0x5A,0x39,0x1B,0x1F,0x51,0x2A,0x9F,0xDC,0x39,0x3D,0x9B,0x76,0x33,0xD8,0x63,0x1A,0xA9,0x47,0x1B,0x45,0xDA,0xA7,0x96,0x52,0x5B,0xA2,0x9C,
0x5C,0xAE,0x54,0x31,0xD0,0xCD,0x1D,0x9A,0xDD,0x04,0x95,0x01,0x18,0x3E,0xC8,0x43,0x6C,0x00,0x64,0x33,0x15,0x5E,0x14,0x1D,0xC0,0xFA,0x8D,0xA3,0x81,0xC1,0xD5,0xCB,
0xA1,0xEC,0xB4,0x63,0xA2,0x28,0xA4,0x58,0xD6,0x48,0xA5,0x89,0x64,0x65,0x0B,0x8D,0xC5,0x86,0x4F,0x6E,0xFD,0xCF,0x3A,0x97,0x5C,0x28,0xA9,0x7A,0x86,0xB1,0x69,0x60,
0xA3,0xCC,0x6B,0x30,0xF9,0x6A,0x91,0x4E,0x62,0x8C,0xE3,0xEB,0x21,0x5F,0x07,0x3E,0x99,0x0A,0xBD,0xC6,0x3D,0xF5,0x5B,0xE8,0xB8,0xE6,0xA4,0xE9,0xD8,0x28,0x67,0x5D,
0xBF,0x2A,0x5A,0x9C,0xE1,0xB8,0x1B,0x58,0x80,0x7B,0xF3,0xC1,0x1C,0xFD,0xB4,0xF9,0x80,0x44,0x6C,0xFD,0x34,0x23,0x43,0xF0,0x4A,0xB8,0xEB,0xB9,0x1A,0x6F,0xAD,0xF5,
0x5D,0x16,0xDA,0x53,0x63,0xBC,0x49,0x45,0xE1,0x2A,0xD1,0xD4,0x83,0x2C,0x08,0x4F,0xD2,0xC0,0x0D,0xCB,0xCF,0x20,0xF1,0x91,0xFA,0x9D,0x34,0x88,0x96,0xA2,0x3D,0xB2,
0x00,0x08,0xEF,0xBC,0x1E,0x75,0xCD,0x72,0xA0,0x15,0x76,0xC5,0xA8,0x84,0xA8,0x9A,0x22,0x19,0x19,0x8E,0x36,0xB0,0xE7,0xFD,0xFF,0x00,0x7D,0x74,0xD0,0x54,0x3C,0xD4,
0x71,0x4B,0x14,0x67,0x90,0x32,0x33,0x9C,0x7B,0xFF,0x00,0x39,0xD1,0x82,0xE3,0xE1,0xE5,0x1B,0x20,0xF1,0xC5,0xF7,0x99,0x8E,0xFA,0xA2,0x16,0x84,0x48,0xE6,0x34,0x92,
0x1E,0x08,0x3B,0x7F,0xE7,0xDB,0x40,0x3E,0x26,0xA9,0x8F,0xA4,0x6A,0x30,0x4A,0x1D,0xCA,0xA7,0x6F,0xA7,0x3E,0x9F,0x7E,0x34,0x69,0x1C,0x09,0x44,0x91,0x90,0x08,0x20,
0x9C,0x9E,0x0F,0xBE,0x80,0x7C,0x59,0x6D,0xDD,0x1E,0xAC,0x5F,0x61,0x79,0x11,0x38,0x38,0xDD,0xDF,0x83,0xEF,0xFF,0x00,0xF7,0x4A,0xB8,0xE9,0x73,0x28,0xA7,0xEE,0xD2,
0x9E,0x78,0x59,0x82,0x5C,0x42,0x99,0xA3,0xFD,0xC2,0x9A,0x58,0xC8,0xA4,0xE8,0xA9,0x6A,0x0A,0x10,0xD5,0x12,0xBB,0x2B,0xA9,0xF3,0x36,0xD3,0x8F,0x7C,0xE3,0xCC,0x7B,
0xFE,0xBA,0x55,0x8E,0x9E,0x49,0x6F,0xA2,0x51,0xB5,0x18,0xF3,0x84,0x62,0x77,0x64,0xFA,0xFB,0x7E,0x34,0xE7,0x39,0x96,0x9E,0xC7,0x4D,0x09,0x70,0x57,0x69,0xDC,0x5B,
0x20,0x9C,0xE7,0x9F,0xF6,0xE4,0x77,0xD0,0xBB,0x64,0x54,0xD5,0x35,0x89,0x21,0x55,0x58,0x90,0x0C,0x2B,0x64,0xE7,0xD3,0x24,0x9F,0x5F,0xF6,0xD6,0x47,0x2C,0xAE,0xF1,
0x63,0x1D,0x82,0xF4,0x9B,0x29,0x1A,0x62,0x21,0xCD,0xD6,0xF7,0xD3,0xB2,0xEE,0xB9,0x3F,0x87,0x4B,0x09,0x97,0x71,0x65,0x8D,0x06,0xEC,0x9C,0x0C,0x0F,0xA7,0x9D,0x6E,
0xB6,0xCF,0x23,0xC6,0xF1,0xC4,0xAC,0x43,0x29,0x00,0x00,0x70,0x38,0xFE,0x47,0xBF,0xE3,0x5F,0x15,0x8F,0x0A,0xCE,0xCA,0x64,0x57,0x24,0x71,0x84,0x00,0x63,0xDB,0x8F,
0xD3,0x5E,0xDA,0x32,0xCE,0xE8,0xB2,0x76,0xF3,0x02,0x07,0xAE,0x38,0xE0,0xEA,0x20,0xE7,0x3A,0xBC,0xEB,0xD5,0x59,0x74,0x2C,0xF6,0x21,0xCB,0x6B,0x26,0x5F,0x86,0xD4,
0xA9,0x49,0x2D,0xE2,0x98,0xB8,0x2C,0xD5,0x42,0x42,0xA1,0x89,0xE4,0xAE,0xEE,0xDE,0x83,0x2C,0x75,0x4E,0x45,0x2E,0xA8,0x13,0xCC,0x7B,0x13,0xA4,0x0E,0x88,0x81,0x7F,
0xA9,0xDC,0xE6,0x52,0xA1,0xA5,0x92,0x35,0xF2,0xAE,0x30,0x04,0x63,0x8E,0x47,0xDF,0x54,0x70,0x9F,0x29,0x42,0xC1,0x80,0x1C,0x70,0xD9,0xF7,0xED,0xAD,0x97,0x08,0x70,
0x6D,0x04,0x36,0x1B,0x7D,0x4A,0xF3,0x0F,0x13,0x46,0x3E,0xD6,0xA8,0x03,0xA0,0x3F,0x40,0x80,0xDF,0x1E,0x5A,0x99,0xDA,0x8A,0x90,0x98,0xE3,0xC6,0x1E,0x50,0x39,0xFD,
0x01,0xF4,0x3F,0x7D,0x0A,0x16,0xD8,0x29,0x99,0x7C,0x30,0x02,0x72,0xCD,0xC0,0xE7,0xF5,0xD1,0xC5,0x81,0x15,0x0C,0xA1,0x42,0x96,0xF4,0x27,0xB6,0x87,0xD6,0x48,0xD1,
0x53,0x33,0xC6,0x3C,0xF2,0x70,0xAA,0x07,0xAF,0xDF,0x4D,0x14,0x61,0xA0,0x5D,0xC9,0x1E,0xBD,0x85,0xE6,0xE1,0x2F,0xDC,0xAF,0x20,0x5C,0xD6,0xD7,0x40,0x86,0x4A,0x92,
0x32,0x5C,0xF0,0xA9,0xFB,0x1E,0xDA,0x99,0x75,0x55,0xA6,0xE5,0x49,0x71,0x82,0xAE,0xB9,0xEA,0xE7,0x59,0x64,0x29,0x2B,0x41,0x85,0x2B,0xFF,0x00,0xE4,0xFA,0xFE,0x7B,
0xEA,0xB7,0x68,0xB3,0xC7,0x45,0xBA,0x66,0x07,0xC5,0x72,0x1D,0x8B,0x71,0xB9,0xB1,0xDC,0x11,0xF8,0xD0,0x5E,0xBA,0x31,0x7F,0x4E,0x12,0xCC,0x8B,0x23,0x6E,0x5D,0x9C,
0x9C,0xA9,0xCF,0xDB,0xF4,0xD5,0x7C,0x42,0x95,0xD3,0xB0,0xB9,0xEE,0xE8,0xA6,0xA3,0xA9,0x6D,0x3B,0xD8,0xC6,0xB6,0xE4,0xF5,0x48,0x49,0xF2,0x37,0x47,0x82,0x39,0xC2,
0x57,0xC9,0x00,0xC8,0x92,0x7D,0xE6,0x44,0x6C,0x71,0x95,0x3D,0xCF,0x39,0x27,0x96,0x1F,0xF7,0xE9,0x5B,0x2F,0xF5,0x0A,0x19,0x2D,0x94,0x15,0x94,0x53,0x52,0x89,0x9B,
0x73,0x54,0xBB,0x81,0x14,0xA3,0x03,0x6E,0x58,0x13,0x81,0xDC,0x0F,0x30,0x1C,0x67,0x00,0xE3,0x5D,0x14,0xF4,0xD4,0x94,0xF6,0xF3,0x3D,0x2C,0x93,0x46,0xC5,0xD9,0xDA,
0xA6,0x9A,0x65,0x2E,0xB9,0xCE,0x42,0xED,0x1B,0x87,0x1C,0x9C,0x06,0x3D,0xF9,0x1D,0xC1,0x7B,0x65,0x05,0xBD,0x28,0xCD,0x65,0x25,0x43,0x90,0x63,0xCB,0xFF,0x00,0xD3,
0xF9,0xA4,0x00,0x0C,0xE7,0x07,0x7E,0xEE,0x46,0x49,0xEC,0x39,0xE4,0x69,0x46,0xA2,0x22,0x4D,0xC8,0xE8,0x99,0xE3,0x90,0xE8,0xD0,0x50,0x4A,0x98,0xA1,0x8E,0xDD,0x34,
0x54,0x7B,0x29,0x18,0x29,0x77,0x79,0x5E,0x27,0x92,0x50,0xBF,0x57,0x91,0x77,0x7A,0xE7,0x2D,0x81,0x8C,0xFA,0x71,0x94,0x6B,0xB5,0xD8,0xCF,0x47,0x34,0x76,0x19,0x17,
0xC6,0x64,0x06,0xA1,0x26,0x8B,0x6D,0x4C,0x98,0x23,0x84,0xF1,0x15,0xB6,0x8F,0xCF,0x1C,0x67,0x19,0x18,0x63,0xA8,0xB2,0xC1,0x5F,0x70,0x85,0x2B,0xAD,0x77,0x18,0xA1,
0x9E,0x47,0x8A,0x57,0xA6,0x11,0xCF,0x51,0x54,0xC9,0xE6,0xF3,0x6D,0x2A,0x23,0x89,0x77,0x73,0x92,0x46,0x00,0xED,0xDF,0x42,0xFA,0xCE,0xF4,0x6C,0x14,0xD3,0x52,0xD3,
0xD0,0xD4,0x3C,0x0E,0x86,0x24,0x96,0xA2,0x36,0x10,0xC5,0xC7,0x28,0x36,0x93,0x96,0x5F,0x31,0x19,0x00,0x0C,0xF6,0x23,0x07,0x40,0xA9,0xDA,0x1A,0x2E,0x3D,0xE4,0x62,
0x40,0x36,0x2B,0xEF,0xE1,0x6D,0x1B,0x1E,0xB5,0x28,0xEF,0x51,0x52,0x5E,0x2C,0x48,0x2A,0x18,0x9F,0x0D,0x81,0xCF,0x97,0x24,0x8C,0x70,0x73,0x9C,0x83,0x9F,0xB6,0x35,
0x64,0xA0,0x89,0xA8,0x7A,0xA2,0xE1,0x4B,0x2B,0xB1,0xF1,0x02,0xD4,0xC6,0x87,0xB7,0x6D,0xAC,0x3F,0x18,0x1F,0xB8,0xD4,0xBF,0xE0,0x55,0x04,0x69,0x9A,0xE4,0xA8,0x57,
0xF9,0x96,0x96,0x5F,0x11,0x54,0x2A,0xED,0xC8,0x03,0xB2,0xA9,0x3C,0x1E,0xF8,0xD5,0x76,0xF3,0x28,0xA7,0xBB,0xDB,0x6A,0xCA,0xB1,0x52,0x5A,0x12,0x71,0xC7,0x99,0x4F,
0x7F,0xB6,0x40,0xD6,0x9D,0x86,0xC5,0xE1,0xD3,0xC6,0x0F,0x95,0xD2,0x2E,0x31,0x28,0x92,0xA1,0xE0,0x74,0x16,0x47,0x20,0x0A,0xD1,0x18,0x5D,0x01,0x1E,0xFD,0xB5,0xA6,
0xDB,0x1A,0xD3,0x55,0xCD,0x12,0xB3,0x3A,0xE4,0xB1,0xDC,0x31,0xCE,0xBC,0xA5,0x3B,0x95,0x77,0x72,0xA3,0xD4,0x76,0xD7,0x44,0x71,0x47,0x1D,0x53,0x18,0x43,0x79,0xBC,
0xCA,0x71,0xFB,0x8D,0x71,0x33,0x72,0xB9,0x7D,0x4A,0xEC,0xCD,0x0B,0xEB,0x63,0xF8,0x9B,0x19,0x8F,0x6E,0xC3,0xD7,0x9C,0x69,0x6B,0xE2,0x10,0x92,0xA3,0xA4,0x69,0x15,
0x8B,0x1F,0xFA,0x95,0x04,0x1F,0x5C,0x06,0xED,0xF8,0xC6,0x9B,0xAA,0x95,0x96,0x54,0x77,0x88,0x47,0x91,0x92,0x01,0xC9,0xD2,0x9F,0x5C,0xA7,0x8F,0x61,0xA6,0x88,0x1D,
0xA4,0xD5,0x2E,0x31,0xCF,0xF8,0x9E,0xDA,0x5E,0xE2,0x53,0x7C,0x36,0x57,0x76,0x4E,0x1C,0x10,0x2D,0x8D,0x53,0xB4,0xEC,0xEF,0x44,0x81,0x73,0x96,0x46,0xB4,0x87,0x20,
0x79,0x70,0x80,0x16,0xE4,0x64,0x1C,0x7A,0x76,0xD7,0x15,0x95,0x96,0x69,0xF6,0xCC,0xE0,0x20,0x53,0xE6,0x0B,0xFF,0x00,0x6F,0xCE,0xBC,0xBC,0x02,0x19,0x57,0x79,0xE7,
0x92,0xA7,0xB0,0x3D,0xB5,0xED,0x92,0x97,0xC6,0x60,0x84,0xAE,0xD7,0x39,0x3B,0x71,0xC0,0x3F,0x9F,0xE3,0x58,0xC0,0x61,0x9A,0xAC,0x58,0x74,0xB2,0xF5,0x4B,0xC0,0x8A,
0x02,0x49,0xF9,0xAE,0xCB,0x9C,0x26,0x16,0x8D,0xD8,0x1D,0xC4,0x03,0x8C,0x93,0xFF,0x00,0x7F,0xCE,0xB9,0xED,0x72,0x95,0xAB,0x2B,0x18,0x0A,0x5C,0x63,0x03,0xD7,0x44,
0x2E,0x54,0xF4,0xFF,0x00,0x2E,0xAC,0x67,0xDA,0xE0,0x7D,0x27,0x07,0x70,0x3E,0xFC,0xF0,0x3F,0x9D,0x09,0xA2,0x8C,0x7C,0xDA,0x28,0xDC,0x39,0xDB,0x95,0xD7,0x15,0x99,
0xA2,0xAD,0x6D,0x97,0x14,0xE4,0x4F,0x4E,0x43,0x95,0x2B,0xE1,0xA3,0x3D,0x54,0xF7,0x49,0x66,0x39,0xC4,0xC0,0x0F,0x36,0x4F,0xD0,0xA3,0x27,0x3F,0xF8,0xD3,0xF5,0xC5,
0xC4,0xD5,0x42,0x91,0x58,0x08,0xE1,0xC1,0x7C,0x0E,0xED,0xED,0xA4,0x8F,0x86,0xC4,0x41,0x43,0x77,0x9D,0x94,0x85,0x5A,0xA2,0x0E,0x46,0x3B,0x46,0x9F,0xED,0xA6,0xB5,
0x2F,0x2C,0x01,0xD9,0x00,0x79,0x5B,0x7B,0x7A,0x91,0x93,0x9E,0x3F,0x7D,0x6E,0x18,0x53,0x2F,0x04,0x39,0xB6,0x68,0x5E,0x5B,0xE2,0xA7,0xB4,0x62,0x95,0x39,0x77,0x71,
0xFA,0x2C,0x63,0xE2,0xB1,0x76,0xC9,0x89,0x73,0xC6,0x7B,0xE8,0x5A,0xC4,0xF5,0x55,0xC6,0xA1,0xC1,0x08,0xBC,0x2F,0xE3,0xBF,0xE4,0xF1,0xA2,0x77,0x19,0x63,0x8A,0x95,
0x62,0xDC,0x79,0x1E,0x61,0x9C,0xF0,0x75,0xAA,0x9E,0x9C,0xC7,0x49,0x81,0xB0,0x67,0x3C,0x8F,0x41,0xED,0x8D,0x1C,0x8E,0x4C,0xA2,0xC9,0x49,0xF1,0x03,0xCC,0x57,0x1D,
0x49,0x0D,0xE6,0x75,0x18,0x51,0xC6,0x32,0x02,0xE7,0xF4,0xD2,0xBD,0xCE,0x81,0x6E,0xB3,0x96,0x96,0x32,0xE9,0x1E,0x55,0x19,0x8F,0x73,0x8E,0x49,0xC7,0x38,0xE7,0x1D,
0xF4,0xC1,0x74,0xA8,0x5A,0x6B,0x64,0xD3,0xC8,0xDB,0xD5,0x0B,0x65,0x40,0x27,0x9F,0x4F,0xE7,0x5C,0x74,0xAB,0x22,0x5B,0xD5,0xD8,0x06,0x0E,0xBB,0x98,0xFF,0x00,0x3C,
0x0E,0x71,0xDF,0x44,0x0B,0x03,0xDA,0x1A,0x50,0x27,0x12,0x1E,0x5E,0x3A,0xED,0xF1,0x52,0x19,0x25,0x9A,0xD9,0x7C,0x68,0x24,0x66,0x90,0x06,0x28,0x16,0x1C,0x09,0x00,
0x3D,0x8E,0x0E,0x07,0xD4,0x78,0xFD,0x7D,0x08,0x18,0x61,0xA3,0xBD,0xCD,0x47,0x57,0x15,0xBE,0xE7,0x2B,0x56,0x53,0xCA,0x18,0x94,0x96,0x95,0xA3,0x90,0xF6,0x5F,0x3A,
0x96,0x0A,0x70,0x72,0x32,0x41,0xED,0xEF,0x81,0xA5,0x8E,0xA1,0xAC,0xE9,0xAB,0x77,0x57,0x48,0x97,0x09,0x04,0x6F,0xBC,0xB9,0x99,0x23,0xDD,0xB5,0x87,0xA9,0x2D,0x80,
0x47,0x6E,0xD9,0x3F,0x6D,0x33,0xD0,0xCD,0x25,0xCE,0xD3,0x0D,0x63,0xD4,0xAB,0xC5,0x22,0x95,0x86,0x59,0x24,0x68,0xD6,0x4C,0x0E,0xC5,0x54,0x82,0xAD,0x8E,0x38,0x3C,
0xE3,0xB7,0x03,0x48,0x15,0x27,0x2C,0xAE,0x6B,0x4D,0xC5,0xD3,0x7D,0x3B,0xB3,0x35,0xAF,0x78,0xB6,0x89,0x7A,0xE5,0xD4,0x54,0xD6,0xDB,0x2D,0x5D,0x53,0x57,0x01,0x1D,
0x12,0x17,0x96,0x1F,0x1D,0x2A,0x65,0x92,0x42,0x40,0x51,0x29,0x50,0xB8,0xC9,0x65,0xE3,0x9C,0xE3,0xE9,0xF6,0x9B,0xF5,0x9D,0x75,0xE6,0xEB,0x5C,0x6A,0xFF,0x00,0xA9,
0x9B,0xA5,0x32,0xC6,0xBB,0x80,0xDE,0x63,0x88,0x6D,0xC9,0x19,0xE0,0x77,0xE4,0x0C,0xE7,0x8C,0xF3,0xC6,0x8D,0xF5,0x45,0xDA,0x93,0xA9,0x23,0xA3,0x92,0x19,0x63,0xA4,
0xAA,0x89,0x43,0xCB,0x4E,0xD1,0x96,0xF0,0xC9,0x52,0xAA,0x41,0x5C,0x16,0x38,0xCE,0x09,0xCB,0x65,0xF8,0x2A,0x09,0x25,0x6A,0xFF,0x00,0x7C,0x78,0xAD,0x72,0xD3,0x55,
0x3C,0xF0,0xE6,0x36,0x8D,0x25,0x45,0xDA,0x95,0x60,0x0C,0x32,0x82,0x32,0xC3,0x27,0xD0,0x1C,0x70,0x7D,0xCE,0x83,0x52,0x30,0x17,0x37,0x64,0xCC,0xE1,0x61,0x75,0x70,
0xF8,0x7D,0x6E,0x8E,0xC9,0xD3,0x1D,0x3C,0x62,0x05,0x16,0xA6,0x9C,0x97,0xE7,0x38,0x67,0xC3,0x72,0x77,0x73,0xC6,0xA8,0xB7,0x6B,0x78,0xA8,0xB0,0x49,0x93,0xB0,0xA7,
0x99,0x46,0x48,0x0A,0x47,0x20,0xE7,0xDB,0x3A,0x9C,0xD9,0x6B,0x76,0xFC,0x22,0xB0,0x5D,0xE0,0x8C,0x81,0x07,0xCB,0xC9,0x22,0x28,0x24,0xAA,0x61,0x41,0xCF,0x3C,0x7D,
0x47,0xF6,0xD5,0x42,0xDF,0x30,0xAC,0xB6,0x18,0xD8,0xE4,0xBC,0x7D,0x87,0xA6,0x47,0x7D,0x6A,0xD2,0xE9,0x0B,0x7C,0x3D,0x80,0xF4,0x59,0xB1,0x17,0x9C,0x99,0x37,0x27,
0xD5,0x69,0xB1,0xD4,0x47,0x5D,0x6E,0x82,0x7F,0x36,0x5D,0x01,0x23,0x69,0xE1,0xBD,0x47,0xE0,0xF1,0xA3,0x53,0x9F,0x24,0x45,0x53,0xCE,0x87,0xCC,0x73,0xDC,0x7E,0x9A,
0x54,0xE9,0xC9,0x3F,0xA7,0xDC,0xE5,0xA0,0x98,0x3E,0xD6,0x93,0x7C,0x7B,0xD7,0xB1,0xE3,0x70,0xE7,0xF2,0x7F,0x3A,0x77,0xA9,0x8D,0x3E,0x48,0x93,0xBB,0x24,0x76,0xCF,
0xF3,0xA1,0xB5,0x6F,0xE6,0x08,0x95,0x33,0x32,0x82,0x7C,0x97,0xD5,0xC2,0x3C,0x51,0xC6,0xCC,0xA3,0x2B,0x9C,0x30,0xF5,0xD4,0xFB,0xAD,0xA7,0x73,0x4D,0x49,0xB5,0x14,
0x84,0x9B,0xC4,0xC7,0x3E,0x8B,0x8C,0xFF,0x00,0x3A,0xA0,0xD3,0xC8,0x2B,0x3A,0x70,0x47,0x82,0x24,0x0B,0x80,0x4F,0xBE,0x90,0x3A,0xB0,0xAE,0xDA,0x58,0x25,0x69,0x1E,
0x49,0x18,0x84,0x29,0xC0,0xE0,0xAE,0x73,0x9E,0xFF,0x00,0xA6,0x97,0x31,0xA7,0x13,0x86,0x48,0x0F,0x6F,0x50,0x9E,0xB8,0x35,0x83,0xED,0xC8,0x1E,0x07,0x5B,0x9F,0xD9,
0x4D,0x2E,0x7F,0xFC,0xC4,0x12,0x09,0x19,0x04,0x83,0x9C,0xE8,0x9F,0x4D,0x3C,0x89,0x53,0x1C,0xE2,0x15,0x67,0x42,0x08,0xED,0xCF,0x39,0xE4,0x7A,0x8C,0x03,0xA1,0xB7,
0x50,0xAF,0x5E,0x15,0x19,0x4E,0x32,0x30,0x39,0xED,0xEF,0xC0,0xD1,0xBE,0x90,0x3E,0x0D,0x71,0x95,0xA4,0xDB,0x1A,0x9F,0x33,0x86,0xDA,0x14,0x7D,0xF1,0x8C,0x9C,0xE7,
0x8D,0x65,0x18,0x3C,0x62,0x4C,0x40,0xB4,0xF9,0xAF,0x4A,0x62,0xCF,0xF0,0xB0,0xF7,0x3B,0xC8,0x22,0x97,0xA9,0x1A,0x56,0x91,0x2A,0xD5,0x92,0x45,0x62,0x42,0xB2,0xE7,
0x19,0xC1,0xCE,0x73,0xEF,0x9D,0x2C,0x81,0x4D,0xE3,0xF2,0xE3,0x9C,0xF1,0xB4,0x9E,0x78,0xE4,0x01,0xEB,0xA6,0x6E,0xAF,0x8E,0x98,0xDC,0x1D,0x92,0x55,0x0D,0x22,0xE7,
0x2A,0x18,0x81,0xC9,0x03,0xD7,0xED,0xFC,0xE9,0x34,0xA9,0x8B,0xC2,0x75,0x40,0x4F,0xD9,0xBB,0x73,0xED,0xAE,0x71,0xE6,0x78,0x75,0x84,0x37,0x65,0x43,0x00,0x22,0x5A,
0x46,0xBC,0x1E,0xAA,0xA3,0xD1,0x4D,0xE1,0x74,0x95,0x42,0x00,0xED,0xE3,0x56,0x10,0x47,0x6F,0x44,0xCE,0x7F,0x6D,0x3A,0x51,0xC0,0x27,0xAC,0x0E,0x1C,0xED,0x4F,0x31,
0x04,0xFF,0x00,0x1A,0x48,0xE8,0x94,0x90,0x74,0x84,0x61,0x9C,0x96,0x92,0xB1,0xD8,0xE7,0xB7,0x08,0x34,0xF1,0x47,0x8A,0x7B,0x34,0xD3,0x86,0x04,0x82,0x00,0xCF,0x1F,
0xAE,0xB6,0x6C,0x39,0xC4,0x61,0xF1,0x38,0x75,0x2D,0x0B,0xCD,0x7C,0x46,0xC0,0xEC,0x6A,0xA1,0xA7,0xA0,0x71,0x5C,0xB5,0x8A,0xD3,0x56,0x05,0xC3,0x0C,0xB6,0xE6,0xF2,
0xF7,0xE7,0x80,0x4F,0xE9,0xAF,0x59,0xCA,0xA8,0x03,0x85,0x5C,0x9F,0x37,0x05,0xB5,0xF5,0x4B,0x1B,0x4D,0x23,0x48,0x06,0x77,0x72,0x57,0x9F,0xE7,0x5A,0x2E,0x38,0xA6,
0x82,0x59,0xA4,0x38,0x8D,0x01,0x62,0x5B,0x8E,0xDA,0x29,0x4E,0xD0,0x4D,0x8E,0xC9,0x5A,0xA6,0xE0,0x5C,0x6E,0x81,0x57,0xD4,0xC5,0x57,0x75,0x8E,0xD4,0xCA,0xC7,0x3E,
0x79,0x00,0xCF,0x00,0x1E,0x06,0x47,0xE4,0xFE,0x35,0xDF,0x35,0x2A,0xC3,0x11,0xA7,0xC3,0x00,0x47,0x0D,0xD8,0x76,0xCF,0xFC,0xCE,0xB9,0x6C,0xB4,0x1E,0x3B,0xCB,0x73,
0x92,0x46,0x77,0x75,0x24,0x81,0x8F,0x2E,0x47,0x00,0x73,0xCE,0x06,0x3F,0x7D,0x6B,0xBE,0x55,0xFC,0xB5,0x2D,0x45,0x4C,0x99,0x06,0x9D,0x09,0x24,0x61,0x77,0x71,0xF8,
0xF4,0xC6,0x89,0xB2,0x41,0x67,0x1F,0x20,0x84,0xD4,0xC4,0x1A,0x00,0x23,0x52,0xA0,0xDD,0x43,0x59,0x14,0xDD,0x69,0x30,0x68,0xE1,0x9E,0x25,0x72,0x1D,0x24,0x59,0x48,
0xDB,0xBB,0x6E,0x32,0xA0,0x00,0x7E,0xD9,0xCF,0xEF,0xAE,0x8B,0x45,0xCA,0x9E,0x6A,0x88,0xED,0xF0,0xD2,0x9A,0xA8,0x99,0xB7,0x46,0xBE,0x21,0x93,0x6B,0x2E,0x38,0xDA,
0xD1,0x85,0xC8,0x1F,0xEA,0x6C,0x63,0xD7,0x3A,0x58,0x7B,0x8C,0x93,0x75,0x65,0x4D,0x5D,0x3A,0xC8,0xB2,0xCB,0x92,0x6A,0xE9,0xCA,0xF9,0x94,0x1E,0x41,0xC0,0x20,0x2F,
0xA6,0x7F,0x5E,0x74,0xF1,0x64,0xB7,0x9A,0x4A,0x96,0xB8,0xDA,0xA8,0xD1,0x6E,0x32,0x45,0xB5,0xA1,0x96,0x76,0x8E,0x36,0xC0,0x05,0x9C,0x31,0xF3,0x30,0xFB,0xB0,0x55,
0x1F,0x70,0x72,0x73,0x69,0x8D,0xE5,0x2F,0x4D,0xF0,0xC6,0x5B,0x1B,0x5A,0x7C,0x94,0x5A,0xBA,0x92,0x01,0x05,0x43,0x08,0x96,0x27,0x76,0x51,0x37,0x84,0xF2,0xF8,0x71,
0xE4,0xFA,0x2E,0xD6,0xC8,0x39,0xCF,0x3D,0xB0,0x70,0x3D,0x74,0x3F,0xAB,0xAE,0x9F,0x2F,0x4B,0x0C,0x74,0xF5,0x42,0xAE,0x28,0x95,0x57,0x06,0x06,0x8E,0x32,0x71,0xE8,
0x18,0x64,0xFA,0xFB,0x67,0xD8,0x6B,0x35,0x9A,0x82,0x9B,0xF1,0x02,0x61,0x5F,0xA5,0x7E,0x0C,0xD5,0x3F,0x51,0x7C,0x04,0xA1,0x5F,0x19,0x1B,0x74,0x6F,0x0E,0x38,0x1D,
0x98,0x8C,0x60,0x0E,0x38,0xD3,0x77,0x46,0xD7,0x49,0xF2,0x29,0x42,0xEE,0xC2,0x5A,0x67,0x34,0xEE,0x59,0xF2,0x0E,0xCE,0x33,0x8C,0x7B,0x60,0xFE,0x75,0x9A,0xCD,0x6A,
0x91,0x6B,0x18,0x1F,0xA4,0x7A,0x05,0x99,0x56,0x69,0x33,0xED,0xB3,0xFE,0xA5,0x1F,0xB8,0xD2,0xB2,0xD6,0x7C,0xCC,0x58,0x12,0x29,0x0C,0xB9,0xC7,0xD5,0xEA,0x3B,0x67,
0x91,0xA6,0x44,0x7F,0x9D,0xB6,0x24,0x8A,0x70,0x42,0xE4,0xEE,0xF5,0xD6,0x6B,0x34,0x12,0xA3,0x40,0x1D,0xDD,0x1C,0x85,0xA0,0x12,0xDF,0x30,0xB4,0xD9,0xE4,0xF2,0x55,
0xD3,0x87,0x01,0xD4,0x96,0x50,0x17,0xBE,0x40,0xD4,0xCF,0xE2,0x14,0x81,0x6E,0x34,0x2D,0x27,0x23,0x0E,0xC0,0x0C,0x8E,0xDE,0xD8,0xF4,0x3F,0xF3,0x8D,0x66,0xB3,0x4B,
0xBC,0x49,0xFD,0xBA,0x6F,0x97,0xAA,0x78,0xFE,0x9E,0x6B,0x8E,0x53,0x37,0xF4,0xBB,0xFE,0x54,0xFD,0x99,0xDE,0x47,0xA8,0x0D,0xC9,0x24,0xF6,0xE3,0xBF,0xFE,0xF4,0xCD,
0xD1,0xF4,0x82,0xA6,0x79,0x09,0x8D,0xC2,0x8C,0x0D,0xDB,0xB3,0x82,0x48,0xED,0xDF,0x9E,0x73,0xAC,0xD6,0x6B,0x34,0xE1,0x5F,0xBC,0xAA,0x0E,0x72,0xF4,0x3F,0x12,0x48,
0xE8,0xE8,0x1C,0xE6,0xA2,0x9D,0x58,0x76,0xCE,0x23,0x0E,0xF2,0x28,0x5D,0x83,0x2E,0x1F,0x91,0xDD,0xB3,0xEC,0x4F,0xBE,0x93,0xA6,0x39,0x89,0x5C,0xB6,0x4F,0x3C,0x7B,
0x7E,0x75,0x9A,0xCD,0x7D,0xC4,0x5F,0x9D,0x72,0xA9,0xC3,0x3F,0x90,0x8D,0x54,0xFA,0x33,0xCD,0xD1,0xF4,0x64,0x63,0x7B,0x4B,0x33,0x0C,0x0E,0xF8,0x3B,0x73,0x9F,0x5E,
0x74,0xE1,0x73,0x94,0x53,0xD0,0x52,0x51,0xC2,0x09,0x32,0xB7,0x20,0x6B,0x35,0x9A,0xD7,0xA8,0x35,0xA3,0x81,0xBD,0x87,0xA0,0x5E,0x6B,0xE2,0x1D,0x31,0x7A,0xC7,0x79,
0x38,0xFA,0xAE,0xFA,0x62,0x90,0x51,0x16,0x23,0x73,0x37,0xE3,0x4A,0x3D,0x4F,0x54,0x93,0x4F,0x1D,0xB2,0x31,0xB4,0x2B,0x6F,0x75,0xF6,0xE7,0xCA,0x33,0xF7,0x23,0x59,
0xAC,0xD5,0xDA,0x5F,0xC4,0x77,0xC5,0x05,0xAA,0xFC,0x36,0xA2,0x70,0x2B,0xD0,0xDA,0x62,0x50,0x77,0x21,0x5D,0xAE,0xED,0x9C,0x93,0xDC,0xE9,0x3B,0xE2,0x35,0x54,0x90,
0x74,0xAD,0x45,0x3C,0x51,0xEF,0x79,0x10,0xB3,0xED,0xC2,0x90,0xB8,0xEF,0xCE,0xB3,0x59,0xAB,0xA3,0x58,0x9E,0x7B,0x14,0x1E,0x4E,0x69,0xDA,0x0E,0xC4,0x2F,0xCE,0xB6,
0xBB,0x6C,0xF5,0x95,0x33,0xC1,0xE1,0xD5,0x24,0xE1,0x0B,0x47,0x3B,0xAB,0x91,0x8D,0xD9,0x23,0x85,0xCB,0x0E,0x4F,0xE9,0xA6,0x68,0x23,0xAF,0xB4,0xA8,0x6A,0x38,0x05,
0xC1,0x2A,0x93,0xFB,0xCC,0xEA,0xED,0x26,0xE0,0x48,0x04,0x8C,0x92,0xA7,0xEC,0x76,0x93,0xEC,0x35,0x9A,0xCD,0x67,0x73,0xEC,0x9A,0xDA,0xBF,0xFF,0xD9,};

View File

@@ -0,0 +1,167 @@
// We need this header file to use FLASH as storage with PROGMEM directive
const uint8_t Mouse160[] PROGMEM = {
0xFF,0xD8,0xFF,0xE0,0x00,0x10,0x4A,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x00,0x48,0x00,0x48,0x00,0x00,0xFF,0xDB,0x00,0x43,0x00,0x04,0x03,0x03,0x03,0x03,0x02,0x04,
0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x06,0x0A,0x06,0x06,0x05,0x05,0x06,0x0C,0x08,0x09,0x07,0x0A,0x0E,0x0C,0x0F,0x0E,0x0E,0x0C,0x0D,0x0D,0x0F,0x11,0x16,0x13,0x0F,
0x10,0x15,0x11,0x0D,0x0D,0x13,0x1A,0x13,0x15,0x17,0x18,0x19,0x19,0x19,0x0F,0x12,0x1B,0x1D,0x1B,0x18,0x1D,0x16,0x18,0x19,0x18,0xFF,0xDB,0x00,0x43,0x01,0x04,0x04,
0x04,0x06,0x05,0x06,0x0B,0x06,0x06,0x0B,0x18,0x10,0x0D,0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xC0,
0x00,0x11,0x08,0x00,0x6B,0x00,0xA0,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,0xFF,0xC4,0x00,0x1D,0x00,0x00,0x02,0x03,0x00,0x03,0x01,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x03,0x06,0x07,0x00,0x02,0x08,0x01,0x09,0xFF,0xC4,0x00,0x3B,0x10,0x00,0x02,0x01,0x02,0x04,0x04,0x04,0x04,0x04,0x05,0x03,
0x04,0x03,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x11,0x00,0x05,0x12,0x21,0x06,0x13,0x31,0x41,0x22,0x51,0x61,0x71,0x07,0x14,0x81,0x91,0x23,0x32,0xA1,0xB1,0x08,0x15,
0x33,0x42,0xD1,0x52,0x62,0xC1,0x16,0x24,0x43,0xF1,0x82,0xB2,0xE1,0xFF,0xC4,0x00,0x19,0x01,0x00,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x03,0x01,0x04,0x05,0xFF,0xC4,0x00,0x22,0x11,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
0x11,0x03,0x21,0x31,0x41,0x12,0x13,0x22,0x51,0x04,0x14,0x32,0xFF,0xDA,0x00,0x0C,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3F,0x00,0xF5,0x73,0xE6,0xCF,0x96,0xC7,
0x24,0xF9,0xDE,0x4F,0x48,0xF0,0xAD,0xAF,0x51,0x08,0x04,0x93,0x7F,0xF4,0x9D,0xFF,0x00,0x5C,0x34,0xC8,0xF8,0x9F,0x85,0xB3,0x88,0xD9,0x32,0xF9,0xA0,0x59,0x10,0xF8,
0xE0,0x91,0x02,0x3A,0xF9,0x1B,0x10,0x36,0x3E,0x78,0x97,0xE4,0xA0,0x9C,0xAB,0xC9,0x1A,0x4C,0xAA,0x06,0x9B,0x81,0x6B,0x7A,0x8F,0x2C,0x52,0x33,0x9E,0x08,0xA7,0x35,
0x72,0xD5,0x65,0xB2,0xF2,0x27,0x6B,0xAF,0x2F,0x70,0x42,0xF9,0x7B,0x6E,0x77,0xC6,0xA9,0xC9,0x6B,0xA2,0x6F,0x1F,0xD1,0xA7,0x2D,0x2D,0x23,0x0B,0xAC,0x31,0x91,0xE6,
0x14,0x60,0x5A,0x8C,0xBB,0x2F,0xA8,0x3F,0x89,0x49,0x13,0x8B,0x5B,0xC4,0x83,0x1E,0x3B,0x3F,0x1E,0x38,0xEB,0xE1,0x5F,0xC4,0x9A,0xEE,0x1C,0xE2,0x06,0xFE,0x79,0x95,
0xC3,0x51,0xA2,0xCC,0x2D,0x2A,0xA1,0xB5,0xAC,0xC4,0xDC,0xD8,0x1E,0xF8,0xF4,0xAE,0x49,0xC4,0xF5,0x5C,0x65,0xC2,0x74,0x39,0xED,0x04,0x13,0x53,0xD1,0xD6,0x46,0x25,
0x55,0x94,0x69,0x76,0x53,0xD2,0xF6,0xE8,0x3B,0xE2,0x9E,0xC8,0xC5,0x09,0xEB,0x61,0x3C,0x49,0x94,0x64,0x52,0xE5,0x52,0x51,0x24,0x14,0x8B,0x23,0x0B,0x10,0xAA,0x09,
0x02,0xFB,0xF4,0xC7,0x29,0x68,0xF8,0x6A,0x99,0x56,0x9E,0x08,0xA9,0x14,0x84,0x1F,0xF8,0xC2,0x93,0xFA,0x62,0x1A,0xA8,0xF9,0x04,0x34,0x8A,0xF1,0x93,0x72,0x34,0xAD,
0xC8,0x18,0xAF,0x57,0x51,0x4F,0x23,0xBB,0xBA,0x94,0x36,0xDA,0xF7,0x18,0x45,0x99,0xCB,0xA2,0xFF,0x00,0xAF,0x65,0xD2,0x3C,0xB7,0x2D,0xD0,0x0C,0x74,0xD0,0x95,0x3B,
0x82,0xAA,0x2D,0x88,0xBE,0x46,0x93,0x5E,0xA1,0x02,0x0F,0x65,0x03,0x19,0xF5,0x1E,0x71,0x98,0x64,0xAE,0xB0,0xAC,0xAC,0xE8,0x5A,0xDA,0x5B,0x7D,0xB1,0x7B,0xCB,0xB3,
0x4A,0x6C,0xC6,0x8C,0x4F,0x0B,0x82,0x41,0xB3,0x28,0xEA,0xA7,0x16,0x52,0x4F,0x82,0x52,0x83,0xC6,0xCE,0x35,0x1D,0x31,0x8D,0x64,0xD0,0x81,0x8D,0xC5,0x80,0xB7,0x4B,
0x7F,0x9C,0x0D,0xC9,0x8B,0xFD,0x03,0x06,0x49,0x24,0x4A,0xE5,0x55,0xAF,0x6C,0x08,0xD2,0x2A,0xB1,0x56,0x36,0xB6,0x18,0x90,0x2B,0x41,0x1A,0x9B,0x14,0x5C,0x0E,0xF4,
0xD1,0x2E,0xE1,0x05,0xB0,0x4B,0xCA,0xBA,0xFC,0x64,0x0C,0x40,0xEC,0x19,0xEE,0x31,0xCE,0xE6,0xD8,0x01,0xCB,0x0C,0x5C,0xCF,0xC8,0x3A,0x61,0x4E,0x69,0x55,0x0D,0x13,
0x47,0x1A,0x21,0x92,0xA2,0x53,0xA6,0x28,0x10,0xEE,0xC7,0xCF,0xD0,0x79,0x9C,0x45,0xC5,0x9C,0x53,0x45,0xC3,0x79,0x6F,0xCC,0xC9,0xF8,0xD3,0xBF,0x86,0x18,0x14,0xEE,
0xE7,0xFC,0x0B,0x8B,0x9C,0x22,0xF8,0x59,0x3E,0x65,0x9C,0xF1,0x15,0x7E,0x73,0x9A,0x48,0xF2,0xAA,0x26,0xC4,0xC6,0x36,0x37,0x1B,0x2F,0xA0,0xDA,0xD8,0xCB,0xD5,0x16,
0x82,0xB8,0xD1,0x63,0xA8,0xA1,0x92,0x91,0xA2,0xA7,0xA8,0xD0,0xD5,0x06,0x21,0x24,0x96,0x16,0x00,0x92,0x76,0x18,0x11,0xA0,0x8D,0x4D,0x8A,0x2E,0x0F,0xCD,0x26,0x41,
0xC4,0x05,0x1E,0x6D,0x72,0xB4,0x60,0x15,0xF2,0x23,0xB0,0x1F,0x5C,0x41,0x2B,0x0B,0x69,0xEF,0x8C,0x28,0x2E,0x9E,0x08,0x99,0xAC,0x50,0x60,0x39,0x69,0x20,0xE6,0x7E,
0x4E,0xD8,0x3D,0xD8,0x33,0xDC,0x60,0x69,0x7F,0xA9,0xF4,0xC0,0x02,0x59,0xB2,0x7A,0x03,0xA8,0x9A,0x38,0x4B,0x11,0x72,0x4A,0x83,0x85,0x15,0x7C,0x23,0xC3,0xF5,0x12,
0x6B,0x9B,0x29,0xA5,0x79,0x3B,0xB1,0x41,0x8B,0x2B,0x31,0x63,0x73,0x85,0xF2,0xB0,0xB6,0x9E,0xF8,0x00,0xF4,0x36,0x5F,0x50,0xE8,0x81,0xCA,0x24,0xC1,0x01,0xB9,0x09,
0x73,0xD3,0xC8,0x62,0x6A,0x99,0xE3,0xA9,0xA5,0x13,0x72,0x82,0xB2,0xEE,0xB2,0x46,0x01,0x23,0xCF,0x63,0x88,0xEB,0x32,0xFA,0x2C,0xB2,0x49,0x2A,0x29,0x2B,0x4C,0x2D,
0xD6,0xCC,0xB7,0x1F,0x7C,0x05,0xCD,0x8F,0x30,0xA4,0x47,0xA9,0x9A,0x0D,0x40,0x9B,0x33,0x0D,0x21,0x87,0x90,0x7D,0x8F,0xDF,0x1C,0xB0,0x9F,0x68,0xD7,0x5D,0x1E,0x3C,
0xFE,0x26,0x32,0x6C,0xBE,0x87,0xE2,0x1A,0xE7,0x70,0x42,0xA1,0x2B,0x51,0x4B,0xE8,0x16,0xFC,0x40,0x2C,0xC7,0x6E,0xFD,0x0F,0xD7,0x1E,0xC3,0xF8,0x67,0x49,0x47,0x55,
0xF0,0x67,0x85,0xEA,0x50,0x16,0x07,0x29,0xA6,0x37,0x3D,0x7F,0xA4,0xB8,0xCD,0x7E,0x32,0x7C,0x3E,0x4E,0x32,0xE0,0x99,0x69,0x21,0x51,0x35,0x65,0x10,0x35,0x11,0x0D,
0x0A,0x5A,0x4D,0xBA,0x29,0xEF,0xF4,0xC3,0x1F,0xE1,0xE3,0x8D,0xA9,0x33,0x4F,0x84,0x34,0x99,0x24,0x8A,0x20,0xAE,0xC9,0x89,0xA2,0x95,0x19,0x89,0xB8,0x04,0x95,0x6D,
0xF7,0xE8,0x6D,0xEE,0x0E,0x1F,0x1F,0x3B,0x0A,0xD5,0x9A,0x7D,0x7C,0x54,0xD0,0x07,0x76,0x08,0x58,0x6F,0xBF,0x6C,0x57,0x04,0x30,0x55,0x54,0x30,0x75,0x32,0xB1,0xD8,
0xFA,0x60,0xAC,0xFA,0xAE,0x46,0x52,0xE5,0xC3,0x17,0xD8,0x79,0x5B,0x1D,0xF2,0x5A,0x46,0x8A,0x01,0xA1,0x35,0x4C,0xFD,0x5F,0xC8,0xE2,0xD7,0xBA,0x2D,0x8F,0x81,0x36,
0x77,0xC1,0xCB,0x2D,0x01,0x9E,0xC1,0x5C,0x02,0x42,0x8E,0x87,0x19,0xA6,0x65,0x5B,0x9D,0xF0,0xFC,0xEF,0x36,0x59,0xF8,0x73,0xAB,0x04,0x92,0x19,0x45,0xD5,0x81,0x36,
0x1D,0x7A,0x78,0xAD,0xBF,0xFB,0xB1,0xBF,0x56,0x1C,0xBA,0x92,0x91,0x4D,0x6A,0x33,0xB3,0x75,0x20,0xFF,0x00,0x9C,0x65,0x1C,0x65,0x43,0x1D,0x59,0x9A,0x4A,0x37,0x2C,
0x18,0x00,0x88,0xBD,0x19,0xAE,0x0F,0x43,0xDC,0x5B,0x1A,0x4E,0xDC,0xB4,0x63,0x75,0xBF,0xC4,0x26,0x6F,0x4F,0x9A,0xCB,0x97,0x55,0xE4,0x4D,0x4D,0x57,0x16,0xA2,0xCA,
0x58,0xD8,0x15,0x62,0xA7,0xF6,0x38,0xEB,0x0F,0xF1,0x1B,0xF3,0x4E,0xF0,0xAE,0x49,0x31,0x91,0x53,0x58,0x41,0x70,0x5E,0xC3,0xC5,0x6B,0xDB,0xDC,0x7D,0xB1,0x75,0xF8,
0x83,0xC0,0x39,0x35,0x45,0x74,0x99,0xC5,0x14,0x5F,0x89,0x14,0x12,0x3C,0xAC,0x77,0x2F,0xE1,0xF0,0x83,0xE9,0xB0,0x1F,0x53,0x8C,0x2D,0x32,0xD6,0xCB,0x6A,0x09,0x9E,
0x9D,0x5E,0x04,0x45,0x95,0x4B,0x2E,0xEC,0x0D,0xC3,0x0B,0xFD,0x09,0xFA,0x0C,0x43,0x27,0xE4,0x6C,0x4C,0x78,0xD5,0x9A,0x2A,0x7C,0x7C,0x35,0x21,0xA3,0xFE,0x4B,0x56,
0x25,0x54,0x2D,0xA5,0x86,0xFA,0x86,0xC4,0x7B,0xDA,0xC4,0x7A,0xE1,0xB8,0xF8,0xA6,0x2B,0x3E,0x4E,0x3D,0x33,0xC4,0x92,0xA2,0x16,0x3B,0x5F,0x73,0x72,0x3A,0xEC,0x40,
0x07,0x19,0x64,0x75,0x14,0x79,0x65,0x6D,0x0C,0xF3,0x13,0xCF,0x99,0x96,0x49,0x13,0x4D,0xED,0xE2,0xD3,0x60,0x7D,0x40,0xFB,0xE2,0xC0,0xB1,0xD0,0xFC,0x85,0x43,0x23,
0x46,0xAB,0x0C,0x9A,0x5C,0x1D,0xB4,0x5F,0x50,0xF0,0xFD,0xEF,0x85,0x8E,0x7F,0x20,0x78,0xD4,0x5E,0x8B,0x4E,0x69,0x92,0xD5,0x67,0x39,0xE4,0x19,0xAC,0xF5,0x32,0xCA,
0x8C,0x0A,0xC7,0x16,0x92,0x79,0x6A,0x2F,0xB7,0xED,0xFA,0xE2,0xED,0xC1,0x6D,0xFC,0xAF,0x2F,0x68,0x0A,0xD9,0xEA,0x49,0x63,0xA6,0xF7,0xD9,0x85,0xEC,0x3E,0xA0,0xE0,
0x0E,0x06,0xE2,0x6C,0xA3,0x36,0xCC,0xA3,0xA1,0x58,0x16,0x6F,0x12,0x84,0x88,0x36,0x93,0x60,0xAC,0x4F,0xBE,0xEA,0x6F,0xEF,0x8B,0x8E,0x65,0x05,0x2D,0x5E,0x68,0x33,
0x3C,0xBA,0x45,0x02,0x10,0x62,0x90,0x2A,0xDB,0xC7,0xE1,0xBF,0xEA,0x3E,0xC3,0x17,0x83,0xB5,0xB3,0x6F,0x54,0x29,0xCF,0xF9,0x31,0xD6,0xAE,0x61,0x10,0x70,0xE2,0x40,
0x0B,0xD8,0x9F,0x05,0xB7,0xFF,0x00,0xDE,0x3A,0xF3,0xD2,0x58,0x96,0x60,0xC1,0x94,0x8E,0xAB,0xB8,0xC3,0x7C,0xF5,0x29,0xD7,0x26,0xF9,0xAA,0x52,0xB2,0x8D,0x1A,0xE4,
0x42,0x7C,0x24,0xE9,0xF1,0x0F,0xDF,0x15,0x6C,0xB2,0x90,0xD2,0x65,0x08,0x35,0x12,0x1B,0xF1,0x2C,0x7F,0xB6,0xFB,0xD8,0x61,0x8C,0x08,0x9A,0x53,0x76,0x1F,0xDC,0x36,
0xC0,0xAE,0xC5,0x56,0xE3,0xCF,0x1D,0xDD,0x99,0xDA,0xE5,0xB6,0x1D,0x06,0x06,0x76,0x0C,0xD7,0x18,0x0C,0x6A,0xC8,0xA7,0x93,0x51,0x2A,0x46,0xE0,0xF5,0xC0,0xB2,0xFF,
0x00,0x4F,0xEB,0x89,0xA4,0x7D,0x56,0x03,0xA1,0xC0,0x8E,0xC1,0x9A,0xE3,0x18,0xEF,0xA0,0x77,0xD1,0xBE,0x66,0x35,0x55,0xB5,0x3A,0x9E,0x0A,0x6D,0x2A,0x0E,0xDA,0xD8,
0x23,0x7B,0xF5,0xC4,0x55,0x10,0x4B,0x4F,0x43,0xCA,0x04,0x3B,0x3E,0xE6,0x2D,0x5A,0x3F,0x4D,0xC3,0x7D,0xB0,0xCD,0xE5,0x14,0x5C,0xA2,0x94,0x4D,0x25,0xBA,0xB1,0x2A,
0x00,0xF4,0xF3,0xC0,0x55,0xF2,0xA9,0x03,0x9D,0x96,0x4A,0x8B,0x21,0xB0,0x65,0x7B,0x0F,0xB7,0xF9,0xC7,0x94,0x75,0x82,0x64,0x74,0x51,0xC7,0x3B,0xA2,0xE9,0x8B,0x59,
0x37,0x49,0x08,0x2B,0x7F,0x20,0xBE,0x5E,0xD8,0xA9,0x66,0x3C,0x3B,0x47,0xC0,0x9F,0x15,0xA2,0xE2,0x8A,0x18,0xB9,0x39,0x4E,0x6F,0xF8,0x39,0x8C,0x51,0xAF,0x86,0x19,
0x3A,0xA4,0x96,0xDF,0x6D,0x5D,0x4F,0xA9,0xC6,0x93,0x95,0xE5,0xCA,0xD0,0x7C,0xCA,0xC2,0x0C,0x7D,0x46,0xB3,0xAC,0xAF,0xD3,0x0C,0x2B,0xE8,0x56,0x7A,0x27,0x35,0x10,
0x89,0x14,0xAE,0xEA,0x46,0xA5,0x23,0xD4,0x77,0xC5,0x7C,0xE5,0xFD,0x0A,0xE6,0x96,0x8A,0x26,0x75,0x5D,0x04,0x87,0x95,0x0B,0x6A,0x8D,0x0D,0xF5,0x03,0xFE,0x31,0x65,
0xE1,0x49,0x61,0x6C,0xAC,0x19,0xE4,0x1A,0xBD,0x70,0x83,0x32,0xC8,0x53,0x27,0xAD,0x67,0x48,0x1D,0xB2,0xF9,0x53,0x5C,0x52,0x2E,0xEB,0x1B,0x77,0x4F,0x31,0xE9,0x8E,
0xBC,0x3D,0x53,0x1C,0xB5,0x75,0x10,0xCA,0x5B,0x42,0x0D,0xB4,0xEC,0x17,0xD4,0xE3,0xB2,0x16,0xDD,0x98,0x92,0x6A,0x91,0x66,0xE2,0x41,0x0C,0xB9,0x74,0xA6,0x33,0x76,
0xEA,0x18,0x6F,0x6D,0xB1,0x96,0x66,0xD5,0x13,0xD6,0xE5,0xD4,0xF4,0xF4,0x09,0x6A,0xA5,0x71,0x0C,0xB1,0xDE,0xE1,0xD1,0xB7,0xD4,0x3D,0x41,0x43,0xF4,0xC5,0xC7,0x8B,
0x4C,0xD0,0x65,0x6B,0x55,0x4B,0x32,0x08,0xE6,0x65,0x89,0x64,0x2F,0xB5,0xC9,0xB0,0xDA,0xDE,0xBD,0x70,0x3D,0x16,0x47,0x4B,0x03,0xC7,0x2C,0xAC,0xC5,0x96,0xCF,0x1B,
0x92,0x7A,0x9E,0xB7,0xFB,0x91,0x89,0x64,0x9D,0xBA,0x89,0xBA,0x8A,0x14,0xD6,0x52,0x5B,0x84,0xDF,0x99,0x09,0x25,0xD5,0xA1,0x57,0x6F,0xCC,0x6C,0xDB,0x13,0xF4,0x1F,
0xAE,0x30,0xFE,0x29,0xA3,0xA6,0xA7,0x8D,0xB2,0xA8,0x60,0x2F,0xAC,0xB4,0x6A,0xF1,0x81,0xF8,0x46,0xFE,0x11,0xD3,0xFD,0xC4,0x63,0xD0,0x19,0xC0,0xAB,0xA9,0xAA,0x9E,
0x38,0xD9,0x63,0xA0,0x44,0x11,0x4C,0xC1,0x6F,0xC9,0x7B,0xDC,0x1F,0xD7,0xAF,0x98,0x18,0xA9,0x45,0xC2,0x0F,0x2E,0x65,0x34,0x55,0x50,0xA9,0x59,0xE2,0x05,0x25,0x53,
0x72,0xEE,0x84,0x91,0xF5,0xB5,0xB7,0xEF,0x71,0x8C,0x94,0x53,0xD3,0x23,0x07,0x4F,0x66,0x03,0x99,0xE5,0x70,0xD0,0xE4,0x51,0xAD,0x5A,0xF3,0x2B,0x29,0x69,0xD2,0x37,
0x41,0xDD,0xB5,0xDC,0x11,0xEA,0x14,0xDF,0xDC,0x60,0x4C,0xDA,0x82,0x9A,0x1C,0xB0,0xE7,0x10,0x57,0x12,0xD2,0x40,0xD3,0x3C,0x57,0xFF,0x00,0x68,0xD3,0xF7,0x04,0x7D,
0xF1,0xA8,0x71,0x47,0x0B,0x1F,0x94,0xAB,0xA8,0x11,0x82,0xC0,0xCF,0x7B,0xDC,0xB1,0x01,0x14,0x10,0x3B,0x6D,0x73,0xFA,0x63,0x31,0xCC,0xB8,0x5E,0x5A,0x5B,0x72,0xE6,
0x60,0xAA,0x51,0x80,0x63,0x70,0xC8,0x5A,0xCD,0x7F,0x40,0x05,0xF6,0xC2,0x7A,0x90,0xD7,0x72,0xD0,0x07,0xC3,0xCE,0x26,0x97,0x2A,0xE2,0xEA,0x1A,0xC9,0x98,0x88,0x63,
0x9C,0xC6,0xEA,0xA3,0x49,0x11,0xDC,0xB3,0x9F,0xB1,0x3F,0x7C,0x7A,0x43,0x28,0xAB,0x9A,0xA7,0x27,0x4F,0x97,0x78,0xE2,0x89,0x97,0xE6,0x27,0x91,0x89,0x66,0xD6,0xC4,
0xED,0x61,0xE8,0x3A,0x63,0x0E,0xCB,0xF8,0x52,0x92,0xB7,0x26,0x86,0xBE,0x14,0x92,0x19,0x65,0x56,0x46,0xDA,0xEA,0xAC,0xA1,0x77,0xB7,0x6B,0xDF,0xFE,0x71,0x60,0xE1,
0x1C,0xE2,0xAF,0x2D,0x57,0xC9,0xEB,0x25,0xE6,0x4F,0x15,0x4B,0x69,0x7B,0x0D,0x3C,0xA2,0x00,0x02,0xF7,0xDC,0x8D,0xC7,0xD3,0x14,0x26,0x6A,0x95,0xAB,0x3B,0xE5,0x53,
0x53,0x99,0xDC,0x29,0x5E,0x61,0x05,0x74,0xEE,0xC6,0xE0,0x7D,0xF7,0xC0,0x25,0xC0,0x8A,0x38,0x94,0x12,0x15,0x40,0x2C,0x7B,0xDB,0x1C,0x69,0x11,0xE3,0xB4,0x3A,0xF9,
0x6E,0x06,0xEC,0x6E,0x4F,0xAE,0x21,0x79,0x02,0x80,0x01,0x1A,0xBB,0x8C,0x75,0x18,0xD5,0x9C,0xA9,0x7B,0xCB,0xA5,0x7A,0x0E,0xB8,0x12,0x59,0x44,0x63,0xD7,0x12,0xC9,
0x11,0x2A,0x35,0x74,0x1E,0x58,0x0A,0x70,0x55,0x2C,0xC4,0x03,0xDB,0x00,0x6E,0xCE,0x34,0xEA,0xC6,0xE7,0xF6,0xC0,0x72,0xB2,0xDB,0x48,0x60,0x4F,0xA6,0x24,0x55,0x7E,
0x58,0x76,0x16,0xBF,0x4C,0x40,0xE9,0xA7,0x71,0xD3,0x09,0x36,0xB8,0x66,0x9E,0x96,0xCC,0xA9,0x20,0x50,0x19,0xCC,0x71,0xE9,0x17,0xD4,0xC5,0xB4,0xDF,0xDA,0xF8,0x12,
0x6A,0xC8,0x92,0x8B,0x97,0x33,0x5A,0x39,0x3C,0x37,0x8D,0x43,0x5E,0xFE,0x87,0x06,0x67,0xB1,0x7C,0xC4,0xD4,0xF1,0x84,0xD0,0x41,0x27,0x5B,0x90,0x74,0xFD,0x2F,0x84,
0xB5,0x79,0x41,0x68,0xFF,0x00,0x02,0xA5,0xE7,0xA8,0xB6,0xAD,0x52,0x48,0x42,0xA7,0xB0,0xED,0x8F,0x2E,0xF7,0x47,0x50,0xFF,0x00,0x87,0x79,0xEB,0x01,0x50,0x96,0x8F,
0xB1,0x7E,0xA7,0xF4,0xC1,0xF5,0xCB,0x2C,0xF1,0x78,0x26,0x9A,0x9C,0x9D,0x98,0x0F,0x5F,0x7C,0x20,0xCA,0x6B,0xFE,0x56,0xB5,0x61,0x9A,0xAD,0xE4,0x20,0x6E,0x11,0x18,
0xDB,0xEB,0xBE,0x1A,0xD7,0xE6,0x17,0x48,0xC8,0x76,0xB3,0x11,0x7B,0xA8,0xDC,0x7D,0x71,0xD5,0x85,0xD2,0x21,0x93,0x92,0x0A,0x8E,0x1E,0xCE,0x9E,0x0F,0x96,0x15,0x74,
0x55,0x31,0x01,0xB3,0x4E,0xAE,0xAC,0x7D,0xEC,0x6D,0xFA,0x61,0x74,0x1C,0x39,0x57,0x96,0xD4,0x55,0xC5,0x23,0xC2,0xCB,0x56,0x8A,0xA8,0xAB,0xD1,0x2C,0xB6,0x3E,0x5D,
0xF7,0xC5,0x91,0xF3,0x65,0x48,0x06,0x88,0x9D,0x89,0xDF,0x63,0x6F,0xDF,0x15,0x3E,0x20,0xCD,0xB3,0x00,0x5A,0x5E,0x6D,0x3A,0x12,0x6D,0x1A,0xF3,0x40,0x3E,0xD8,0xB2,
0x9D,0x21,0x09,0x66,0x9A,0x90,0x81,0x97,0x3C,0x49,0x24,0xC9,0x74,0x61,0xB5,0xAF,0xEA,0x3B,0xE2,0x37,0xA0,0x0B,0x44,0x94,0x70,0xA1,0x2C,0x1B,0x71,0x19,0x20,0x2D,
0xFC,0xAE,0x7C,0xF1,0x5C,0x85,0x5D,0xEA,0x35,0xDE,0x78,0xDE,0x57,0xBB,0x19,0xAE,0x00,0x3E,0x63,0xD3,0x0D,0x93,0x30,0x87,0x20,0xAB,0x59,0xAB,0xA5,0x92,0x71,0x3B,
0x00,0x14,0x38,0xBA,0x93,0xE4,0xDD,0x2D,0xE8,0x6D,0x84,0x35,0xBB,0x33,0xAF,0x8D,0x1F,0x17,0x72,0xCF,0x86,0x19,0x71,0xA7,0xA6,0x8A,0x1A,0xCC,0xE6,0x45,0x59,0x19,
0x25,0xB0,0x10,0x9D,0xB6,0x20,0x1F,0x11,0xB7,0x6C,0x65,0x7F,0x0E,0x7F,0x88,0x8C,0xC7,0x8B,0x38,0xB6,0x9B,0x21,0xCC,0xA9,0x29,0xB2,0xE9,0xE7,0x2E,0x90,0x54,0xC3,
0xF9,0x75,0x15,0x36,0x52,0xA7,0xBF,0x50,0x3E,0x98,0xCA,0xBF,0x88,0x5A,0xB9,0x73,0x0F,0x8E,0xB5,0xB5,0x75,0xF1,0x4C,0xB1,0xAD,0x5B,0xE9,0x57,0x36,0xD4,0x9A,0x86,
0x9F,0xD3,0x1A,0x27,0x0F,0x7C,0x3B,0xE1,0xEE,0x22,0x9E,0x2F,0x88,0xFC,0x23,0x40,0xD9,0x42,0x41,0x99,0x51,0xC5,0x4F,0x93,0xCC,0x4B,0x3B,0x84,0x50,0x65,0x97,0x51,
0xFE,0xD2,0x45,0xF6,0xB8,0xDC,0x8B,0xE3,0xA6,0x2A,0x91,0x87,0xA1,0xB3,0x3A,0x58,0x17,0x28,0x86,0x24,0x85,0xA7,0xD5,0x19,0x46,0x04,0xF9,0xA5,0x9C,0x93,0xEB,0xFF,
0x00,0x18,0xCF,0x38,0x8F,0x84,0x05,0x3A,0xB2,0x56,0xA3,0x37,0x2A,0xF0,0x2A,0xAD,0xFC,0x31,0xEE,0x2C,0x4F,0xA5,0xBA,0xE2,0xFD,0x59,0x58,0x29,0x16,0x3D,0x48,0x35,
0xCD,0x20,0x57,0xE6,0x0B,0x69,0xDF,0x62,0x0F,0x99,0x16,0xC1,0x0F,0x24,0x39,0xDD,0x5D,0x4C,0x33,0x05,0xE6,0x68,0x0B,0xBF,0x52,0xE4,0xFF,0x00,0x82,0x70,0xAF,0xE4,
0xB4,0x6A,0x74,0x64,0x3C,0x3F,0x56,0xE9,0x4F,0x15,0x37,0x2A,0x34,0x49,0x23,0xE6,0xA0,0xD8,0x0F,0x10,0x0A,0x6F,0x7E,0xD7,0xBF,0xDC,0x63,0x1B,0xCE,0xF8,0xD6,0x9F,
0x25,0xF8,0xB8,0xFC,0x3B,0x99,0xB1,0x89,0x20,0x64,0x8A,0x09,0xC1,0x01,0x0E,0xB5,0x56,0xF1,0x9E,0xBD,0x4F,0x5D,0xF1,0xE8,0x57,0xC9,0x10,0xD7,0xCB,0x24,0x69,0x64,
0x85,0xCA,0x24,0x2C,0x9A,0x40,0xD4,0xEA,0x16,0xD7,0xED,0x72,0x7E,0xB8,0xF3,0x67,0xC6,0xAE,0x05,0x9A,0xAF,0xE2,0x0E,0x53,0x55,0x4D,0x4E,0x0C,0x2F,0x12,0xA5,0x4C,
0x8A,0x46,0xFA,0x58,0x90,0x4F,0xFF,0x00,0x12,0x07,0xA5,0xB1,0x8A,0x1A,0xA6,0x61,0xE8,0xFC,0xB9,0x9E,0x5A,0x38,0xE7,0x9A,0x4D,0x6C,0x40,0xFC,0xBD,0x3A,0x6C,0x06,
0x19,0x94,0x28,0x6C,0x48,0x24,0x8D,0xF1,0x5C,0xE1,0x69,0x0D,0x4E,0x47,0x05,0x41,0xA9,0x25,0x51,0x79,0x60,0x29,0xEE,0x36,0xB9,0xEF,0xD3,0x0D,0x9E,0xB2,0x39,0x91,
0xB9,0x12,0x8D,0x20,0xD9,0x9F,0xF7,0xB6,0x28,0x04,0xB5,0x33,0x05,0xBC,0x69,0xE3,0x7B,0xF4,0x07,0xA7,0xBE,0x00,0x92,0x22,0xF3,0x97,0x9C,0xEB,0x7E,0x9B,0x1D,0x86,
0x3A,0x4B,0x3C,0x68,0x49,0x4B,0x2C,0x60,0x7E,0x66,0x6B,0xFD,0xF0,0x0C,0xD9,0x94,0x3C,0xD2,0xBC,0xCD,0x4C,0x3B,0xF6,0xC0,0x01,0xB2,0x3A,0xB2,0x58,0x60,0x39,0x18,
0x34,0x84,0x8E,0x9D,0xB1,0xF1,0xA7,0x0E,0x97,0x2C,0xAA,0x2F,0xEF,0x88,0x65,0xD2,0x1B,0x79,0x35,0x1F,0x3E,0xD8,0x84,0xDB,0xE1,0x81,0xE9,0xFC,0xD6,0x2A,0x63,0x5A,
0xCB,0x20,0xD6,0x41,0xBE,0x90,0x6D,0x6F,0xB6,0x12,0x66,0xC6,0xAA,0x2B,0x06,0x95,0x29,0xE3,0x6E,0xA9,0x1C,0x65,0xDB,0xEA,0x4D,0xED,0x8B,0x6C,0xB4,0xF0,0xA3,0x4B,
0x2E,0x98,0xCB,0xF4,0x2C,0x45,0xDA,0xDF,0xAE,0x2B,0x35,0xD4,0xF5,0x55,0x55,0x84,0x3C,0xBA,0xD7,0xB4,0x43,0xC2,0x00,0xFD,0xCF,0xB9,0xC7,0x9D,0x5F,0x2B,0x3A,0x85,
0xF9,0x32,0xE6,0x26,0x53,0x2F,0xF3,0x39,0x8A,0xDE,0xC2,0x24,0x83,0x55,0xBD,0xFB,0x0C,0x77,0xCC,0xE9,0xB3,0x29,0xEA,0x23,0x98,0x66,0x93,0x23,0x46,0x40,0x29,0x50,
0x42,0xDF,0x7F,0x2E,0xDD,0x70,0x6E,0x5B,0x44,0xB4,0x92,0xEA,0x69,0x0B,0x6F,0xF9,0x75,0x78,0x40,0xF3,0xDC,0xE0,0xBA,0xF9,0xD1,0x23,0x3A,0x62,0x66,0x24,0x58,0x00,
0x7F,0xF7,0x8B,0x62,0xE4,0x4C,0x9C,0x04,0xC6,0xF9,0x92,0x65,0x8A,0x86,0xAA,0x29,0x64,0x23,0xF2,0x93,0x75,0xFA,0x77,0xC5,0x37,0x35,0xCF,0xAB,0xE8,0x39,0xE2,0xB7,
0x24,0x13,0x8B,0xF8,0x5A,0x21,0x72,0x77,0xEC,0xB6,0xC5,0x89,0x26,0x5A,0x58,0x62,0x67,0x82,0x58,0xD9,0x85,0xC5,0xD9,0x74,0xB7,0xDC,0xDF,0x0B,0xB3,0x29,0x11,0xE1,
0x96,0xA4,0x47,0x0C,0x41,0x96,0xC4,0xB3,0x81,0xA8,0x7D,0xF1,0xD2,0xDD,0x90,0x10,0xFF,0x00,0xD4,0xA9,0x51,0x96,0xBB,0x4B,0x46,0x69,0xC2,0x25,0xD5,0x24,0x42,0xB6,
0xC2,0xFC,0xB5,0x2A,0x2A,0x5C,0x66,0x55,0x0A,0xB2,0x95,0x3E,0x0E,0x54,0xBE,0x18,0xFA,0xEF,0xA4,0x92,0x3A,0x1F,0x4C,0x7D,0xAB,0xCC,0xE0,0xE5,0x07,0x9B,0x25,0x57,
0x8D,0x4D,0x96,0x56,0x2A,0x2F,0xEA,0x0D,0xF1,0x0B,0xC8,0x15,0x05,0x4C,0xA6,0x68,0x65,0x2D,0x65,0x57,0xA9,0xD5,0x1B,0x7A,0x5E,0xE5,0xB0,0xB2,0x8D,0xE8,0x65,0x6B,
0x67,0x4C,0xFB,0x82,0x72,0xCE,0x27,0x9B,0x9F,0x53,0x95,0xE5,0xEB,0x58,0xDB,0xBC,0xD3,0x21,0x91,0x0A,0x5B,0xCA,0xC2,0xC7,0x07,0x45,0x1D,0x16,0x55,0x41,0xFC,0xAA,
0x38,0xBE,0x42,0x64,0x50,0xE2,0x61,0xE2,0x49,0xB4,0xDF,0xD2,0xC3,0xED,0xE5,0x89,0x20,0x7C,0xC9,0xE0,0x57,0xAA,0x58,0x4C,0x1A,0xBF,0xF1,0x31,0x72,0x41,0xF3,0x24,
0x5C,0xFE,0xB8,0x1F,0x3C,0xAF,0xA7,0xA3,0xC9,0x24,0xF9,0xAA,0x1A,0x8A,0xDA,0x52,0xA4,0x37,0x2F,0x4B,0x32,0x93,0xEF,0xDB,0xD4,0x6F,0x8A,0xE3,0x5D,0x98,0xD5,0x72,
0x03,0xC4,0x4E,0xE6,0x92,0x96,0x8D,0x67,0x15,0x06,0xAA,0x30,0xCD,0x2A,0x1B,0x84,0x20,0xEA,0x17,0x03,0xD4,0x7E,0xA7,0x10,0xE5,0x19,0xD0,0x8A,0x54,0xAB,0xAE,0xA6,
0xE4,0x43,0x19,0x40,0x00,0x37,0x77,0x00,0x90,0x48,0xF6,0xB6,0x2B,0xD4,0x39,0x57,0x31,0x20,0xAC,0xCB,0xE5,0x9A,0xA2,0x12,0x54,0x82,0xED,0xAA,0x48,0xC0,0xD8,0x86,
0x3B,0x5F,0x6B,0x58,0xFA,0x77,0xC3,0xCF,0xE5,0xE5,0x53,0x4C,0xE4,0x48,0xB7,0x36,0x94,0xAE,0xEA,0x3A,0xFF,0x00,0xFB,0x8A,0xD6,0xEC,0xD5,0x06,0xCE,0xD9,0xE5,0x4C,
0x74,0x1C,0x8C,0xEA,0x34,0x32,0x34,0x87,0x98,0xF0,0x90,0x00,0x74,0xBA,0x28,0x5F,0x70,0x6C,0x41,0xF4,0xC6,0x47,0xC7,0x39,0xA5,0x3E,0x65,0x41,0x9A,0x31,0xA2,0xE5,
0xC2,0x8A,0x64,0x86,0x4B,0x58,0xDD,0xC9,0xB9,0x3D,0x2C,0x00,0x16,0xB7,0xA8,0xC5,0xC3,0x88,0xEA,0x9E,0xAE,0x9D,0xE9,0x91,0x4B,0x98,0x86,0x94,0x70,0x4F,0x84,0x03,
0xB7,0xD6,0xF6,0xDB,0x00,0x0C,0xA6,0x3C,0xDB,0x85,0x6A,0x72,0xDA,0x70,0x08,0x93,0x4F,0x34,0x3E,0xED,0x7B,0x11,0xF5,0x16,0xBD,0x81,0xC6,0x2A,0x7B,0x40,0xE0,0xD1,
0x41,0xE1,0x6A,0xF9,0xD2,0x9D,0xE3,0xAB,0x9F,0x5D,0x21,0x3A,0x95,0xD9,0x74,0x93,0x7E,0xB6,0x23,0xFB,0x6F,0xE5,0x8B,0x22,0xF1,0x6D,0x1C,0x6E,0x29,0xE9,0xAC,0x54,
0x0E,0xBB,0xF8,0x7F,0xCE,0x33,0xBE,0x2D,0xE7,0x65,0xFC,0x59,0x16,0x5B,0x02,0x4D,0x1D,0x3D,0x24,0x62,0x23,0x1B,0x58,0x82,0xD6,0x1B,0xD8,0x77,0xF7,0xC4,0x50,0xD5,
0x4A,0xAB,0x66,0x70,0x96,0xED,0x7B,0x93,0xEF,0x86,0x14,0xD0,0x64,0xCF,0x01,0x66,0xE6,0x39,0x62,0x77,0x00,0xE1,0x44,0xB9,0xE3,0xF3,0x4E,0xC6,0xDD,0xB0,0x91,0x56,
0x46,0xB0,0x56,0x69,0x2E,0x2F,0xE1,0xBF,0xFC,0x63,0xAD,0x4C,0x52,0xC7,0x10,0x0D,0xB6,0xAE,0xF6,0xC0,0x05,0x98,0xE7,0xCC,0xB4,0x88,0x58,0xD8,0x61,0x7D,0x6F,0x16,
0x18,0xA9,0xCB,0x23,0x11,0x7D,0x86,0xF8,0x49,0x30,0x78,0xF2,0xC0,0xFA,0xAC,0xC7,0xB6,0x11,0xCD,0xAE,0x55,0x92,0x02,0xD7,0xBE,0xE0,0x9E,0xC7,0xBE,0x25,0x38,0x36,
0xC0,0xFD,0x28,0x97,0x5F,0x38,0x8F,0xED,0x2B,0xF9,0xAD,0xDF,0x0B,0x6A,0xBC,0x11,0x4B,0x15,0x19,0x1A,0xC0,0x21,0xE5,0xBD,0xC7,0x9E,0x1D,0x4F,0x0C,0x73,0xDA,0x4D,
0x82,0x76,0x4B,0xEE,0x70,0xA6,0xB7,0x91,0x0C,0x9A,0x52,0x3D,0x89,0xB9,0xBF,0xFC,0x63,0xCF,0x71,0x69,0xD3,0x2C,0xB2,0x7D,0x95,0x69,0xE9,0x2A,0x90,0x13,0xF3,0xAC,
0x0D,0xB5,0x36,0xDB,0x9F,0xF6,0x9C,0x4A,0x89,0xA6,0x99,0x5A,0xA1,0x99,0xD9,0x8E,0xA0,0x19,0xAE,0xD6,0xF6,0x1B,0xFD,0xF0,0xF1,0x12,0x3A,0xAD,0x5A,0x84,0x42,0xDD,
0xD4,0xDC,0x74,0xB5,0xB0,0x0C,0x32,0xAC,0x4E,0xC5,0xC8,0x2D,0x7B,0x97,0x3B,0x0D,0x87,0x9F,0x96,0x3A,0x21,0x1A,0x5B,0x07,0x28,0xB1,0x7C,0x9F,0xF6,0xF5,0x0A,0x6A,
0xA9,0xC1,0x88,0x6E,0xA4,0xA0,0x3B,0xF6,0xB9,0x3B,0xE2,0x63,0x4F,0x95,0xCD,0x2D,0xCC,0x43,0x4D,0xB7,0x58,0xF6,0x5F,0xB6,0x22,0xAD,0x26,0xBB,0x4C,0xDC,0xC4,0x64,
0x53,0x73,0xB6,0xC6,0xDD,0xFF,0x00,0x4C,0x47,0x15,0x40,0x91,0x04,0x46,0x55,0x72,0x6F,0xAB,0xB0,0x5C,0x32,0x69,0xED,0x13,0x71,0x6B,0x90,0x6A,0x88,0x60,0xE6,0xBC,
0x73,0xBA,0x53,0x53,0xA9,0xDB,0xC0,0x18,0x91,0xF5,0x07,0x0B,0xA5,0x9B,0x28,0xA1,0xAF,0x88,0x98,0xA6,0xA8,0x49,0x18,0x04,0x24,0x0B,0x13,0xED,0xD4,0xF4,0xC3,0xA6,
0xAA,0xA2,0x4B,0x00,0x8B,0x52,0xCD,0xB1,0xF0,0xDC,0x03,0xF5,0xC2,0xEA,0xA4,0x9E,0x35,0xE6,0x5F,0x94,0x4F,0x78,0xD4,0x0B,0x0F,0x7B,0x62,0x94,0x9F,0x02,0x96,0x3A,
0x1A,0xAC,0xBE,0xAE,0x36,0x32,0x51,0xB2,0xB5,0xB6,0x56,0x0B,0xFB,0x12,0x6D,0x8A,0x5F,0x1B,0x41,0x53,0x96,0x66,0x34,0xB9,0xDE,0x5B,0xA9,0x45,0xF9,0x6F,0x4E,0x84,
0xE9,0x75,0xEE,0x18,0x1D,0xB1,0xF2,0x96,0x8B,0x31,0xA7,0x9C,0x81,0x53,0x35,0x4C,0x6C,0x2E,0xAA,0x64,0xB1,0x5D,0xF7,0xF2,0xC4,0x35,0xF5,0x10,0x54,0x29,0xA4,0xAD,
0xA3,0x55,0x98,0x8D,0x3A,0x95,0xB5,0xB0,0xF6,0xDB,0x15,0x82,0xA5,0xB0,0x07,0xA6,0xA4,0xA4,0x9C,0x35,0x76,0x55,0x4C,0xF4,0xF0,0xB0,0x3C,0xC8,0x82,0xD9,0x45,0xCF,
0xF6,0xEC,0x3E,0xD8,0x9E,0x47,0x35,0x91,0xB5,0x25,0x2F,0x81,0x5E,0xCA,0xDA,0xFB,0x1F,0xA7,0x7C,0x73,0x2D,0x8A,0x9A,0x9A,0x54,0x82,0x47,0x92,0x35,0x40,0x03,0x2D,
0x3A,0xDF,0x7F,0x56,0x37,0xFB,0x01,0x87,0x07,0x86,0x24,0xA8,0x98,0x4D,0x0C,0xC4,0x03,0xE2,0x21,0x45,0x81,0x3B,0x6F,0x8D,0x77,0xD1,0x7C,0x2E,0x3C,0x48,0xA9,0x65,
0xDC,0x37,0x24,0xF4,0xF3,0xCE,0xE0,0x5D,0x58,0xC6,0xF7,0x1B,0x06,0xDE,0xDF,0x70,0x31,0xD3,0x27,0xC8,0xCE,0x57,0x9D,0xCE,0x2A,0x2C,0x91,0x3F,0x8D,0x8B,0x0B,0x5B,
0x4A,0xED,0xED,0xD7,0x17,0xAA,0xFC,0x96,0xB7,0xF0,0xA1,0x13,0x14,0x76,0xB0,0x3A,0x16,0xDA,0xED,0xD0,0x9F,0x5D,0xF1,0x58,0xE3,0x19,0xE1,0xE1,0xDC,0xBA,0xA2,0xB6,
0xB2,0xAE,0x29,0x6A,0x99,0x08,0x10,0x96,0xD3,0xCC,0xDA,0xC6,0xDE,0x76,0xC6,0x28,0x24,0x5B,0x34,0xE0,0xE3,0x56,0x79,0xF7,0x8F,0x32,0xEA,0x4A,0xAE,0x26,0xAC,0xAD,
0x8B,0x30,0xA4,0x97,0xC5,0xAA,0xCB,0x2E,0xAD,0x8F,0xB8,0xEC,0x71,0x43,0x99,0x9E,0x24,0xB0,0xB5,0x89,0xD8,0x83,0x7C,0x5B,0xDA,0xBD,0x9E,0xAA,0xAA,0x5A,0xC2,0x65,
0x0C,0x8C,0x46,0xAE,0xA3,0x7B,0x81,0xEB,0x8A,0xCD,0x7C,0x34,0xED,0x7D,0x00,0x46,0x42,0x8B,0x1F,0x71,0x7C,0x3B,0x76,0x71,0x1D,0x28,0x2A,0xDE,0x79,0xD4,0x73,0x08,
0xB1,0xE9,0x87,0xF4,0x39,0x85,0x88,0xA6,0xAB,0x84,0x4D,0x01,0xF3,0x1B,0x8F,0x63,0x84,0x79,0x64,0x5F,0x2B,0x3B,0x54,0x4D,0xA0,0x82,0x2C,0xB7,0xE8,0x70,0x49,0x96,
0xB1,0xE6,0x78,0xC2,0xDD,0x62,0x25,0x98,0xA8,0xE8,0x3C,0xFD,0xB1,0x80,0x32,0xCD,0x62,0x81,0x20,0x67,0xA6,0x94,0x10,0xA3,0xFA,0x67,0xAD,0xB0,0x86,0x9C,0xAF,0xCF,
0xA4,0x8E,0x40,0x1D,0x0E,0x0E,0x66,0x54,0x93,0x4C,0xAC,0x41,0x6D,0xD6,0xC2,0xFA,0xBD,0xB0,0x25,0x55,0x25,0x40,0x88,0xCD,0x4E,0xCB,0x23,0x7F,0xA3,0xB8,0xC0,0x07,
0xE8,0xB2,0xC8,0xA8,0x9E,0x19,0x8D,0xC8,0x37,0x24,0xF7,0xED,0x85,0xD5,0xD3,0xC5,0x55,0x30,0x8D,0xC1,0x5B,0x8F,0xCA,0x08,0x3F,0x5C,0x57,0x56,0xAE,0xA5,0xA1,0xB1,
0x99,0x88,0xBE,0x39,0x3C,0xB2,0x43,0x4B,0xCE,0x8D,0xAC,0xFB,0x1B,0xF5,0xFE,0xEB,0x63,0x8D,0x45,0x2D,0x00,0xEA,0xC9,0x4A,0xC0,0x23,0x85,0x53,0xDA,0xFD,0xBA,0x58,
0x63,0xBC,0xAD,0x4F,0x2C,0x3F,0x2E,0xFA,0x34,0x80,0x59,0xD4,0x7E,0xD8,0xAB,0x45,0x53,0x3C,0x92,0x21,0x79,0x19,0x88,0x7D,0xAF,0xEE,0x71,0xD3,0x32,0xA8,0x9D,0x21,
0x25,0x25,0x65,0x24,0x6E,0x41,0xB7,0x7C,0x52,0x0A,0xD8,0x0F,0x1E,0x11,0x2A,0x15,0x79,0x34,0xC2,0x17,0x7D,0x27,0xAF,0xA6,0x17,0x0A,0x1A,0x61,0xCC,0x85,0x26,0xD0,
0xA5,0x6E,0x58,0x01,0xA9,0x8F,0x90,0x38,0x55,0xF3,0xB5,0x5C,0x8F,0xEB,0xB7,0xE4,0xC7,0xC6,0x25,0x68,0xA9,0xE6,0x04,0x87,0x29,0xBB,0x61,0x3C,0x77,0x66,0xDE,0xA8,
0x32,0x48,0x45,0x39,0x91,0x69,0x8D,0x90,0x30,0x55,0x24,0x76,0x06,0xE7,0x03,0x55,0xB4,0x8E,0x9A,0x35,0xB0,0x50,0x77,0x8C,0x9E,0xBE,0x67,0x10,0xD4,0xBB,0xA4,0x57,
0x56,0x6E,0xA3,0xBD,0xFB,0xE0,0x79,0xDD,0x9D,0x81,0x66,0x24,0xB3,0x6F,0xEB,0x8A,0xC2,0x29,0xAB,0x30,0x9E,0x58,0xF5,0xD1,0x98,0x92,0x59,0x43,0xB7,0x64,0x6B,0x5C,
0xFB,0xE2,0xAD,0x98,0x65,0xF9,0xAC,0x39,0x80,0xA8,0x5A,0x89,0x23,0xBB,0x5D,0xFB,0x83,0xE9,0x7E,0xD7,0xC3,0xF8,0x27,0x95,0x46,0x81,0x21,0x0B,0xCB,0x26,0xD8,0x44,
0x95,0x13,0xD5,0xF3,0x63,0xA9,0x95,0x9D,0x4C,0xA1,0x48,0x26,0xDB,0x11,0xE9,0x8E,0x88,0x2B,0x74,0x2C,0x9D,0x2B,0x03,0x8B,0x89,0x6B,0x72,0xEC,0xEE,0x9E,0x19,0xD1,
0x54,0xC8,0x4F,0x31,0x95,0xAF,0xB0,0xD8,0x0B,0x1D,0x86,0xE7,0x76,0xEB,0x6C,0x5A,0xB2,0x8F,0x88,0x1C,0xDA,0x3D,0x4C,0xC2,0x15,0xD6,0xCA,0x14,0x8D,0xF6,0xB5,0xC0,
0x3D,0xF1,0x88,0xD4,0xD7,0x56,0x0E,0x20,0x96,0x4F,0x98,0x72,0xC9,0x50,0x55,0x6E,0x6F,0x60,0x51,0x81,0x1F,0x5B,0x0C,0x76,0xCA,0x2A,0x67,0x93,0x3A,0x91,0x5E,0x4B,
0x85,0x52,0x46,0xC3,0x63,0xAB,0x17,0x51,0x48,0x59,0xCD,0xA7,0x46,0x9F,0xC4,0xDF,0x14,0xF3,0x6A,0x03,0x34,0xD4,0xC8,0xB5,0x11,0x00,0xB6,0x00,0x5C,0xAF,0x51,0xEE,
0x31,0x93,0x71,0x47,0x16,0x55,0x71,0x31,0x77,0xCC,0x6A,0x57,0xE6,0x95,0x43,0x0D,0x1F,0xDB,0x71,0xFB,0xE1,0xC7,0x10,0xED,0x48,0x95,0x0B,0xE1,0x94,0x38,0xF1,0x2E,
0xDD,0x4A,0x83,0xD3,0xAE,0x29,0xD5,0x27,0xE6,0x83,0xD4,0x4E,0x15,0xE5,0xD6,0x46,0xAB,0x00,0x6D,0x73,0xE5,0x89,0x64,0x7D,0x0D,0x07,0x6A,0xCA,0x8C,0xF5,0x55,0x14,
0xEE,0x46,0xED,0x66,0xB8,0x0C,0x2F,0xDF,0x10,0x57,0x54,0xA5,0x4C,0xFC,0xD4,0x6F,0x0C,0xAC,0x5D,0x93,0xFD,0x3B,0xEE,0x31,0x62,0x6A,0x4A,0x7A,0x8A,0x8A,0x81,0x34,
0x41,0x82,0x53,0x4A,0xCB,0xB9,0x16,0x21,0x49,0x07,0x14,0xB4,0x45,0x5A,0xBB,0xA8,0xB7,0x80,0xE2,0x63,0x0F,0xE4,0x8D,0x1E,0xBE,0xE8,0xC1,0x63,0x30,0xC6,0xDA,0x6E,
0x36,0x62,0xA0,0x9F,0xD4,0xE1,0xFE,0x55,0x1C,0x2E,0xDF,0x3E,0xF4,0xEA,0x64,0x0A,0xCA,0xAA,0x3A,0x3B,0x11,0x6D,0xF1,0x50,0xAA,0x76,0x4C,0xC1,0x4A,0x9B,0x6C,0x3F,
0xFA,0x0C,0x59,0x32,0x09,0x1C,0xD0,0x50,0x5D,0xCF,0x8F,0x9F,0x23,0x6F,0xD5,0x95,0x45,0x8F,0xD3,0x14,0x84,0x13,0x40,0x11,0x9D,0x23,0xC9,0x47,0x1B,0xD3,0x46,0x87,
0x96,0x0A,0xDA,0x20,0x00,0x2C,0xB6,0x36,0x07,0xAD,0xB7,0xB6,0x2B,0xF9,0x14,0x95,0x34,0x39,0x84,0xD5,0x35,0xD0,0x13,0x1C,0x06,0xCE,0x87,0x61,0xE2,0x52,0x05,0xCF,
0x98,0xB8,0x38,0xF9,0xC3,0x95,0x13,0xD4,0x56,0x3C,0x33,0xCA,0xF2,0x20,0x46,0x60,0xAC,0x76,0x06,0xE7,0x7F,0xD3,0x0E,0x73,0xF5,0x55,0xCB,0xA1,0x89,0x54,0x04,0x96,
0xEC,0xE2,0xDF,0x98,0x80,0x37,0xC2,0xC9,0x53,0xA0,0x3F,0xFF,0xD9,};

View File

@@ -0,0 +1,711 @@
/*
Adapted from the Adafruit and Xark's PDQ graphicstest sketch.
This sketch uses the GLCD font only.
Make sure all the display driver and pin connections are correct by
editing the User_Setup.h file in the TFT_eSPI library folder.
Note that yield() or delay(0) must be called in long duration for/while
loops to stop the ESP8266 watchdog triggering.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
#########################################################################
*/
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
// These are used to get information about static SRAM and flash memory sizes
extern "C" char __data_start[]; // start of SRAM data
extern "C" char _end[]; // end of SRAM data (used to check amount of SRAM this program's variables use)
extern "C" char __data_load_end[]; // end of FLASH (used to check amount of Flash this program's code and data uses)
void setup()
{
Serial.begin(115200);
Serial.println(F("TFT 1.8\" SPI TFT Test! "));
tft.init(); // initialize LCD
}
// NOTE: This demo should run, but may look odd on 128x128 LCD (vs 128x160)
void loop(void)
{
Serial.print(F(__DATE__ " " __TIME__ " - Flash=0x"));
// These are not compatible with the ESP8266 core library
//Serial.print((uint16_t)__data_load_end, HEX);
//Serial.print(F(" RAM=0x"));
//Serial.println((uint16_t)_end - (uint16_t)__data_start, HEX);
Serial.println(F("Benchmark Time (microseconds)"));
uint32_t usecHaD = testHaD();
Serial.print(F("HaD pushColor "));
Serial.println(usecHaD);
delay(100);
uint32_t usecFillScreen = testFillScreen();
Serial.print(F("Screen fill "));
Serial.println(usecFillScreen);
delay(100);
tft.setRotation(1);
uint32_t usecText = testText();
Serial.print(F("Text "));
Serial.println(usecText);
delay(100);
tft.setRotation(0);
uint32_t usecPixels = testPixels();
Serial.print(F("Pixels "));
Serial.println(usecPixels);
delay(100);
uint32_t usecLines = testLines(TFT_BLUE);
Serial.print(F("Lines "));
Serial.println(usecLines);
delay(100);
uint32_t usecFastLines = testFastLines(TFT_RED, TFT_BLUE);
Serial.print(F("Horiz/Vert Lines "));
Serial.println(usecFastLines);
delay(100);
uint32_t usecRects = testRects(TFT_GREEN);
Serial.print(F("Rectangles (outline) "));
Serial.println(usecRects);
delay(100);
uint32_t usecFilledRects = testFilledRects(TFT_YELLOW, TFT_MAGENTA);
Serial.print(F("Rectangles (filled) "));
Serial.println(usecFilledRects);
delay(100);
uint32_t usecFilledCircles = testFilledCircles(10, TFT_MAGENTA);
Serial.print(F("Circles (filled) "));
Serial.println(usecFilledCircles);
delay(100);
uint32_t usecCircles = testCircles(10, TFT_WHITE);
Serial.print(F("Circles (outline) "));
Serial.println(usecCircles);
delay(100);
uint32_t usecTriangles = testTriangles();
Serial.print(F("Triangles (outline) "));
Serial.println(usecTriangles);
delay(100);
uint32_t usecFilledTrangles = testFilledTriangles();
Serial.print(F("Triangles (filled) "));
Serial.println(usecFilledTrangles);
delay(100);
uint32_t usecRoundRects = testRoundRects();
Serial.print(F("Rounded rects (outline) "));
Serial.println(usecRoundRects);
delay(100);
uint32_t usedFilledRoundRects = testFilledRoundRects();
Serial.print(F("Rounded rects (filled) "));
Serial.println(usedFilledRoundRects);
delay(100);
Serial.println(F("Done!"));
uint16_t c = 4;
int8_t d = 1;
for (int32_t i = 0; i < tft.height(); i++)
{
tft.drawFastHLine(0, i, tft.width(), c);
c += d;
if (c <= 4 || c >= 11)
d = -d;
}
tft.setCursor(0, 0);
tft.setTextColor(TFT_MAGENTA);
tft.println(F("Bodmer's TFT_eSPI"));
tft.setTextSize(1);
tft.setTextColor(TFT_WHITE);
tft.println(F("SPI TFT on ESP8266"));
tft.println(F(""));
tft.setTextSize(1);
tft.setTextColor(tft.color565(0x80, 0x80, 0x80));
// These are not compatible with the ESP8266 core library
//tft.print(F("Flash=0x"));
//tft.print((uint16_t)__data_load_end, HEX);
//tft.print(F(" RAM=0x"));
//tft.print((uint16_t)_end - (uint16_t)__data_start, HEX);
tft.setTextColor(TFT_GREEN);
tft.print(F("Benchmark usec"));
tft.setTextColor(TFT_CYAN);
tft.print(F("HaD logo "));
tft.setTextColor(TFT_YELLOW);
printnice(usecHaD);
tft.setTextColor(TFT_CYAN);
tft.print(F("Clear "));
tft.setTextColor(TFT_YELLOW);
printnice(usecFillScreen);
tft.setTextColor(TFT_CYAN);
tft.print(F("Text "));
tft.setTextColor(TFT_YELLOW);
printnice(usecText);
tft.setTextColor(TFT_CYAN);
tft.print(F("Pixels "));
tft.setTextColor(TFT_YELLOW);
printnice(usecPixels);
tft.setTextColor(TFT_CYAN);
tft.print(F("Lines "));
tft.setTextColor(TFT_YELLOW);
printnice(usecLines);
tft.setTextColor(TFT_CYAN);
tft.print(F("H/V Lines "));
tft.setTextColor(TFT_YELLOW);
printnice(usecFastLines);
tft.setTextColor(TFT_CYAN);
tft.print(F("Rectangles "));
tft.setTextColor(TFT_YELLOW);
printnice(usecRects);
tft.setTextColor(TFT_CYAN);
tft.print(F("Rects-Fill "));
tft.setTextColor(TFT_YELLOW);
printnice(usecFilledRects);
tft.setTextColor(TFT_CYAN);
tft.print(F("Circles "));
tft.setTextColor(TFT_YELLOW);
printnice(usecCircles);
tft.setTextColor(TFT_CYAN);
tft.print(F("CircleFill "));
tft.setTextColor(TFT_YELLOW);
printnice(usecFilledCircles);
tft.setTextColor(TFT_CYAN);
tft.print(F("Triangles "));
tft.setTextColor(TFT_YELLOW);
printnice(usecTriangles);
tft.setTextColor(TFT_CYAN);
tft.print(F("Tris-Fill "));
tft.setTextColor(TFT_YELLOW);
printnice(usecFilledTrangles);
tft.setTextColor(TFT_CYAN);
tft.print(F("Rnd-Rects "));
tft.setTextColor(TFT_YELLOW);
printnice(usecRoundRects);
tft.setTextColor(TFT_CYAN);
tft.print(F("RRects-Fill"));
tft.setTextColor(TFT_YELLOW);
printnice(usedFilledRoundRects);
tft.setTextSize(1);
tft.println(F(""));
tft.setTextColor(TFT_GREEN);
tft.print(F("Benchmark Completed!"));
delay(15 * 1000L);
}
void printnice(int32_t v)
{
char str[32] = { 0 };
sprintf(str, "%d", v);
for (char *p = (str+strlen(str))-3; p > str; p -= 3)
{
memmove(p+1, p, strlen(p)+1);
*p = ',';
}
while (strlen(str) < 10)
{
memmove(str+1, str, strlen(str)+1);
*str = ' ';
}
tft.print(str);
}
static inline uint32_t micros_start() __attribute__ ((always_inline));
static inline uint32_t micros_start()
{
uint8_t oms = millis();
while ((uint8_t)millis() == oms)
;
return micros();
}
uint32_t testHaD()
{
// pseudo-code for cheesy RLE
// start with color1
// while more input data remaining
// count = 0nnnnnnn = 1 byte or 1nnnnnnn nnnnnnnn 2 bytes (0 - 32767)
// repeat color count times
// toggle color1/color2
static const uint8_t HaD_128x160[] PROGMEM =
{
0x85, 0x91, 0x09, 0x4b, 0x09, 0x24, 0x0a, 0x47, 0x09, 0x27, 0x0a, 0x44, 0x0a, 0x29, 0x0a, 0x42,
0x0a, 0x2b, 0x0a, 0x41, 0x0a, 0x2c, 0x0a, 0x3e, 0x0b, 0x2f, 0x09, 0x3d, 0x09, 0x32, 0x08, 0x3c,
0x09, 0x33, 0x09, 0x3b, 0x08, 0x33, 0x0a, 0x3a, 0x0a, 0x31, 0x0b, 0x3a, 0x0c, 0x1d, 0x01, 0x10,
0x0d, 0x39, 0x0c, 0x1d, 0x01, 0x10, 0x0d, 0x39, 0x0d, 0x0f, 0x01, 0x0c, 0x03, 0x0d, 0x0e, 0x39,
0x0e, 0x0c, 0x03, 0x0c, 0x04, 0x0b, 0x0f, 0x39, 0x0f, 0x0a, 0x04, 0x0c, 0x05, 0x09, 0x10, 0x39,
0x10, 0x08, 0x05, 0x0c, 0x06, 0x07, 0x11, 0x39, 0x11, 0x06, 0x06, 0x0d, 0x07, 0x04, 0x13, 0x37,
0x12, 0x05, 0x07, 0x0d, 0x08, 0x02, 0x15, 0x34, 0x15, 0x03, 0x08, 0x0d, 0x20, 0x32, 0x20, 0x0e,
0x21, 0x31, 0x20, 0x0f, 0x21, 0x2e, 0x22, 0x10, 0x22, 0x2b, 0x22, 0x12, 0x22, 0x12, 0x05, 0x12,
0x22, 0x14, 0x22, 0x0c, 0x0f, 0x0c, 0x22, 0x16, 0x22, 0x08, 0x15, 0x08, 0x22, 0x18, 0x22, 0x05,
0x19, 0x05, 0x21, 0x1c, 0x1f, 0x04, 0x1c, 0x05, 0x1f, 0x1f, 0x1c, 0x04, 0x1e, 0x04, 0x1d, 0x2b,
0x11, 0x04, 0x21, 0x03, 0x12, 0x36, 0x0f, 0x03, 0x24, 0x03, 0x10, 0x38, 0x0d, 0x03, 0x26, 0x03,
0x0d, 0x3b, 0x0b, 0x03, 0x28, 0x03, 0x0b, 0x3d, 0x0a, 0x03, 0x29, 0x03, 0x09, 0x40, 0x07, 0x03,
0x2b, 0x03, 0x07, 0x42, 0x05, 0x03, 0x2c, 0x04, 0x04, 0x45, 0x04, 0x03, 0x2d, 0x03, 0x04, 0x46,
0x02, 0x03, 0x2e, 0x03, 0x03, 0x48, 0x01, 0x03, 0x2f, 0x03, 0x01, 0x4c, 0x31, 0x4e, 0x32, 0x4e,
0x33, 0x4c, 0x34, 0x4c, 0x34, 0x4c, 0x35, 0x4b, 0x35, 0x4a, 0x0e, 0x03, 0x14, 0x04, 0x0d, 0x4a,
0x0b, 0x09, 0x0e, 0x0a, 0x0a, 0x4a, 0x0a, 0x0b, 0x0c, 0x0c, 0x09, 0x4a, 0x09, 0x0d, 0x0a, 0x0e,
0x09, 0x49, 0x08, 0x0f, 0x09, 0x0e, 0x09, 0x49, 0x08, 0x0f, 0x09, 0x0f, 0x08, 0x49, 0x08, 0x0f,
0x09, 0x0f, 0x08, 0x49, 0x07, 0x0f, 0x0a, 0x0f, 0x08, 0x49, 0x07, 0x0f, 0x0b, 0x0e, 0x08, 0x49,
0x07, 0x0d, 0x0e, 0x0d, 0x08, 0x49, 0x07, 0x0b, 0x13, 0x0a, 0x08, 0x49, 0x08, 0x07, 0x18, 0x08,
0x08, 0x49, 0x08, 0x06, 0x1b, 0x06, 0x08, 0x49, 0x09, 0x04, 0x1c, 0x05, 0x08, 0x4a, 0x09, 0x04,
0x1d, 0x04, 0x08, 0x4a, 0x0a, 0x03, 0x1d, 0x03, 0x09, 0x4b, 0x19, 0x02, 0x1a, 0x4b, 0x19, 0x03,
0x19, 0x4b, 0x18, 0x04, 0x18, 0x4d, 0x17, 0x05, 0x17, 0x4a, 0x01, 0x02, 0x17, 0x05, 0x16, 0x4a,
0x02, 0x02, 0x17, 0x05, 0x16, 0x02, 0x03, 0x44, 0x03, 0x03, 0x16, 0x02, 0x01, 0x02, 0x16, 0x02,
0x03, 0x43, 0x05, 0x03, 0x15, 0x01, 0x03, 0x01, 0x15, 0x03, 0x04, 0x41, 0x06, 0x03, 0x15, 0x01,
0x03, 0x01, 0x14, 0x03, 0x07, 0x3d, 0x09, 0x03, 0x2d, 0x03, 0x08, 0x3b, 0x0a, 0x04, 0x2b, 0x03,
0x0a, 0x39, 0x0c, 0x03, 0x2a, 0x04, 0x0b, 0x37, 0x0e, 0x03, 0x28, 0x03, 0x0e, 0x2e, 0x04, 0x03,
0x10, 0x03, 0x27, 0x03, 0x10, 0x03, 0x03, 0x24, 0x19, 0x03, 0x26, 0x03, 0x1a, 0x1e, 0x1d, 0x03,
0x24, 0x03, 0x1e, 0x19, 0x20, 0x04, 0x21, 0x03, 0x20, 0x17, 0x22, 0x04, 0x1f, 0x03, 0x22, 0x15,
0x22, 0x04, 0x21, 0x04, 0x21, 0x13, 0x22, 0x05, 0x15, 0x01, 0x0b, 0x05, 0x21, 0x12, 0x21, 0x06,
0x15, 0x01, 0x0b, 0x06, 0x21, 0x10, 0x21, 0x07, 0x0a, 0x01, 0x0a, 0x01, 0x0b, 0x07, 0x21, 0x0e,
0x20, 0x0a, 0x09, 0x02, 0x09, 0x02, 0x09, 0x09, 0x20, 0x0e, 0x08, 0x02, 0x15, 0x0b, 0x08, 0x03,
0x08, 0x03, 0x08, 0x0b, 0x15, 0x03, 0x08, 0x0d, 0x07, 0x04, 0x13, 0x0d, 0x06, 0x05, 0x06, 0x06,
0x05, 0x0d, 0x14, 0x04, 0x07, 0x0c, 0x07, 0x06, 0x11, 0x38, 0x12, 0x06, 0x06, 0x0c, 0x06, 0x08,
0x10, 0x39, 0x10, 0x08, 0x05, 0x0c, 0x04, 0x0b, 0x0f, 0x39, 0x0f, 0x0a, 0x04, 0x0c, 0x03, 0x0d,
0x0e, 0x39, 0x0e, 0x0c, 0x03, 0x0c, 0x02, 0x0e, 0x0e, 0x39, 0x0d, 0x0f, 0x01, 0x0c, 0x01, 0x10,
0x0d, 0x39, 0x0d, 0x0f, 0x01, 0x1e, 0x0c, 0x39, 0x0c, 0x30, 0x0a, 0x3a, 0x0a, 0x33, 0x09, 0x3b,
0x08, 0x34, 0x09, 0x3b, 0x09, 0x32, 0x09, 0x3c, 0x0a, 0x2f, 0x0a, 0x3e, 0x0a, 0x2d, 0x0b, 0x3f,
0x0a, 0x2b, 0x0b, 0x41, 0x0a, 0x29, 0x0b, 0x43, 0x0a, 0x27, 0x0a, 0x46, 0x0a, 0x25, 0x0a, 0x49,
0x09, 0x23, 0x08, 0x4e, 0x08, 0x96, 0x12
};
tft.fillScreen(TFT_BLACK);
uint32_t start = micros_start();
tft.startWrite();
for (int i = 0; i < 0x10; i++)
{
tft.setAddrWindow(0, 0, tft.width(), tft.height());
uint16_t cnt = 0;
uint16_t color = tft.color565((i << 4) | i, (i << 4) | i, (i << 4) | i);
uint16_t curcolor = 0;
const uint8_t *cmp = &HaD_128x160[0];
tft.startWrite();
while (cmp < &HaD_128x160[sizeof(HaD_128x160)])
{
cnt = pgm_read_byte(cmp++);
if (cnt & 0x80)
cnt = ((cnt & 0x7f) << 8) | pgm_read_byte(cmp++);
tft.pushColor(curcolor, cnt); // PDQ_GFX has count
curcolor ^= color;
}
tft.endWrite();
}
tft.endWrite();
uint32_t t = micros() - start;
tft.setTextColor(TFT_YELLOW);
tft.setCursor(0, 145);
tft.print(F(" http://hackaday.io/"));
tft.print(F(" Xark"));
delay(3 * 1000L);
return t;
}
uint32_t testFillScreen()
{
uint32_t start = micros_start();
for (uint8_t i = 0; i < 12; i++)
{
tft.fillScreen(TFT_WHITE);
tft.fillScreen(TFT_RED);
tft.fillScreen(TFT_GREEN);
tft.fillScreen(TFT_BLUE);
tft.fillScreen(TFT_BLACK);
}
return micros() - start;
}
uint32_t testText() {
tft.fillScreen(TFT_BLACK);
uint32_t start = micros_start();
tft.setCursor(0, 0);
tft.setTextColor(TFT_WHITE); tft.setTextSize(1);
tft.println(F("Hello World!"));
tft.setTextColor(tft.color565(0xff, 0x00, 0x00));
tft.print(F("RED "));
tft.setTextColor(tft.color565(0x00, 0xff, 0x00));
tft.print(F("GREEN "));
tft.setTextColor(tft.color565(0x00, 0x00, 0xff));
tft.println(F("BLUE"));
tft.setTextColor(TFT_YELLOW);
tft.println(1234.56);
tft.setTextColor(TFT_RED);
tft.println(0xDEADBEEF, HEX);
tft.setTextColor(TFT_GREEN);
tft.setTextSize(2);
tft.println(F("Groop"));
tft.println(F("I implore thee,"));
tft.setTextSize(1);
tft.println(F("my foonting turlingdromes."));
tft.println(F("And hooptiously drangle me"));
tft.println(F("with crinkly bindlewurdles,"));
tft.println(F("Or I will rend thee"));
tft.println(F("in the gobberwarts"));
tft.println(F("with my blurglecruncheon,"));
tft.println(F("see if I don't!"));
tft.println(F(""));
tft.setTextColor(TFT_MAGENTA);
tft.println(F("Woot!"));
uint32_t t = micros() - start;
delay(1000);
return t;
}
uint32_t testPixels()
{
int32_t w = tft.width();
int32_t h = tft.height();
uint32_t start = micros_start();
tft.startWrite();
for (uint16_t y = 0; y < h; y++)
{
for (uint16_t x = 0; x < w; x++)
{
tft.drawPixel(x, y, tft.color565(x<<3, y<<3, x*y));
}
}
tft.endWrite();
return micros() - start;
}
uint32_t testLines(uint16_t color)
{
uint32_t start, t;
int32_t x1, y1, x2, y2;
int32_t w = tft.width();
int32_t h = tft.height();
tft.fillScreen(TFT_BLACK);
x1 = y1 = 0;
y2 = h - 1;
start = micros_start();
for (x2 = 0; x2 < w; x2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
x2 = w - 1;
for (y2 = 0; y2 < h; y2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
t = micros() - start; // fillScreen doesn't count against timing
tft.fillScreen(TFT_BLACK);
x1 = w - 1;
y1 = 0;
y2 = h - 1;
start = micros_start();
for (x2 = 0; x2 < w; x2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
x2 = 0;
for (y2 = 0; y2 < h; y2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
t += micros() - start;
tft.fillScreen(TFT_BLACK);
x1 = 0;
y1 = h - 1;
y2 = 0;
start = micros_start();
for (x2 = 0; x2 < w; x2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
x2 = w - 1;
for (y2 = 0; y2 < h; y2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
t += micros() - start;
tft.fillScreen(TFT_BLACK);
x1 = w - 1;
y1 = h - 1;
y2 = 0;
start = micros_start();
for (x2 = 0; x2 < w; x2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
x2 = 0;
for (y2 = 0; y2 < h; y2 += 6)
{
tft.drawLine(x1, y1, x2, y2, color);
}
t += micros() - start;
return t;
}
uint32_t testFastLines(uint16_t color1, uint16_t color2)
{
uint32_t start;
int32_t x, y;
int32_t w = tft.width();
int32_t h = tft.height();
tft.fillScreen(TFT_BLACK);
start = micros_start();
for (y = 0; y < h; y += 5)
tft.drawFastHLine(0, y, w, color1);
for (x = 0; x < w; x += 5)
tft.drawFastVLine(x, 0, h, color2);
return micros() - start;
}
uint32_t testRects(uint16_t color)
{
uint32_t start;
int32_t n, i, i2;
int32_t cx = tft.width() / 2;
int32_t cy = tft.height() / 2;
tft.fillScreen(TFT_BLACK);
n = min(tft.width(), tft.height());
start = micros_start();
for (i = 2; i < n; i += 6)
{
i2 = i / 2;
tft.drawRect(cx-i2, cy-i2, i, i, color);
}
return micros() - start;
}
uint32_t testFilledRects(uint16_t color1, uint16_t color2)
{
uint32_t start, t = 0;
int32_t n, i, i2;
int32_t cx = tft.width() / 2 - 1;
int32_t cy = tft.height() / 2 - 1;
tft.fillScreen(TFT_BLACK);
n = min(tft.width(), tft.height());
for (i = n; i > 0; i -= 6)
{
i2 = i / 2;
start = micros_start();
tft.fillRect(cx-i2, cy-i2, i, i, color1);
t += micros() - start;
// Outlines are not included in timing results
tft.drawRect(cx-i2, cy-i2, i, i, color2);
}
return t;
}
uint32_t testFilledCircles(uint8_t radius, uint16_t color)
{
uint32_t start;
int32_t x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;
tft.fillScreen(TFT_BLACK);
start = micros_start();
for (x = radius; x < w; x += r2)
{
for (y = radius; y < h; y += r2)
{
tft.fillCircle(x, y, radius, color);
}
}
return micros() - start;
}
uint32_t testCircles(uint8_t radius, uint16_t color)
{
uint32_t start;
int32_t x, y, r2 = radius * 2;
int32_t w = tft.width() + radius;
int32_t h = tft.height() + radius;
// Screen is not cleared for this one -- this is
// intentional and does not affect the reported time.
start = micros_start();
for (x = 0; x < w; x += r2)
{
for (y = 0; y < h; y += r2)
{
tft.drawCircle(x, y, radius, color);
}
}
return micros() - start;
}
uint32_t testTriangles()
{
uint32_t start;
int32_t n, i;
int32_t cx = tft.width()/ 2 - 1;
int32_t cy = tft.height() / 2 - 1;
tft.fillScreen(TFT_BLACK);
n = min(cx, cy);
start = micros_start();
for (i = 0; i < n; i += 5)
{
tft.drawTriangle(
cx , cy - i, // peak
cx - i, cy + i, // bottom left
cx + i, cy + i, // bottom right
tft.color565(0, 0, i));
}
return micros() - start;
}
uint32_t testFilledTriangles()
{
uint32_t start, t = 0;
int32_t i;
int32_t cx = tft.width() / 2 - 1;
int32_t cy = tft.height() / 2 - 1;
tft.fillScreen(TFT_BLACK);
start = micros_start();
for (i = min(cx,cy); i > 10; i -= 5) {
start = micros_start();
tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
tft.color565(0, i, i));
t += micros() - start;
tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
tft.color565(i, i, 0));
}
return t;
}
uint32_t testRoundRects()
{
uint32_t start;
int32_t w, i, i2;
int32_t cx = tft.width() / 2 - 1;
int32_t cy = tft.height() / 2 - 1;
tft.fillScreen(TFT_BLACK);
w = min(tft.width(), tft.height());
start = micros_start();
for (i = 0; i < w; i += 6)
{
i2 = i / 2;
tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
}
return micros() - start;
}
uint32_t testFilledRoundRects()
{
uint32_t start;
int32_t i, i2;
int32_t cx = tft.width() / 2 - 1;
int32_t cy = tft.height() / 2 - 1;
tft.fillScreen(TFT_BLACK);
start = micros_start();
for (i = min(tft.width(), tft.height()); i > 20; i -= 6)
{
i2 = i / 2;
tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
}
return micros() - start;
}

View File

@@ -0,0 +1,274 @@
/*
Adapted from the Adafruit graphicstest sketch.
This sketch uses the GLCD font (font 1) only. Disable other fonts to make
the sketch fit in an UNO!
Make sure all the display driver and pin connections are correct by
editing the User_Setup.h file in the TFT_eSPI library folder.
Note that yield() or delay(0) must be called in long duration for/while
loops to stop the ESP8266 watchdog triggering.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
#########################################################################
*/
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
float p = 3.1415926;
void setup(void) {
Serial.begin(9600);
Serial.print("Hello! ST7735 TFT Test");
// Use this initializer if you're using a 1.8" TFT
tft.init(); // initialize a ST7735S chip
Serial.println("Initialized");
uint16_t time = millis();
tft.fillScreen(TFT_BLACK);
time = millis() - time;
Serial.println(time, DEC);
delay(500);
// large block of text
tft.fillScreen(TFT_BLACK);
testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", TFT_WHITE);
delay(1000);
// tft print function!
tftPrintTest();
delay(4000);
// a single pixel
tft.drawPixel(tft.width()/2, tft.height()/2, TFT_GREEN);
delay(500);
// line draw test
testlines(TFT_YELLOW);
delay(500);
// optimized lines
testfastlines(TFT_RED, TFT_BLUE);
delay(500);
testdrawrects(TFT_GREEN);
delay(500);
testfillrects(TFT_YELLOW, TFT_MAGENTA);
delay(500);
tft.fillScreen(TFT_BLACK);
testfillcircles(10, TFT_BLUE);
testdrawcircles(10, TFT_WHITE);
delay(500);
testroundrects();
delay(500);
testtriangles();
delay(500);
mediabuttons();
delay(500);
Serial.println("done");
delay(1000);
}
void loop() {
tft.invertDisplay(true);
delay(500);
tft.invertDisplay(false);
delay(500);
}
void testlines(uint16_t color) {
tft.fillScreen(TFT_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, 0, x, tft.height()-1, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, 0, tft.width()-1, y, color);
}
tft.fillScreen(TFT_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, 0, 0, y, color);
}
tft.fillScreen(TFT_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, tft.height()-1, x, 0, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
}
tft.fillScreen(TFT_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
}
}
void testdrawtext(char *text, uint16_t color) {
tft.setCursor(0, 0);
tft.setTextColor(color);
tft.setTextWrap(true);
tft.print(text);
}
void testfastlines(uint16_t color1, uint16_t color2) {
tft.fillScreen(TFT_BLACK);
for (int16_t y=0; y < tft.height(); y+=5) {
tft.drawFastHLine(0, y, tft.width(), color1);
}
for (int16_t x=0; x < tft.width(); x+=5) {
tft.drawFastVLine(x, 0, tft.height(), color2);
}
}
void testdrawrects(uint16_t color) {
tft.fillScreen(TFT_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
}
}
void testfillrects(uint16_t color1, uint16_t color2) {
tft.fillScreen(TFT_BLACK);
for (int16_t x=tft.width()-1; x > 6; x-=6) {
tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
}
}
void testfillcircles(uint8_t radius, uint16_t color) {
for (int16_t x=radius; x < tft.width(); x+=radius*2) {
for (int16_t y=radius; y < tft.height(); y+=radius*2) {
tft.fillCircle(x, y, radius, color);
}
}
}
void testdrawcircles(uint8_t radius, uint16_t color) {
for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
tft.drawCircle(x, y, radius, color);
}
}
}
void testtriangles() {
tft.fillScreen(TFT_BLACK);
int color = 0xF800;
int t;
int w = tft.width()/2;
int x = tft.height()-1;
int y = 0;
int z = tft.width();
for(t = 0 ; t <= 15; t+=1) {
tft.drawTriangle(w, y, y, x, z, x, color);
x-=4;
y+=4;
z-=4;
color+=100;
}
}
void testroundrects() {
tft.fillScreen(TFT_BLACK);
int color = 100;
int i;
int t;
for(t = 0 ; t <= 4; t+=1) {
int x = 0;
int y = 0;
int w = tft.width()-2;
int h = tft.height()-2;
for(i = 0 ; i <= 16; i+=1) {
tft.drawRoundRect(x, y, w, h, 5, color);
x+=2;
y+=3;
w-=4;
h-=6;
color+=1100;
}
color+=100;
}
}
void tftPrintTest() {
tft.setTextWrap(false);
tft.fillScreen(TFT_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(TFT_RED);
tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(TFT_YELLOW);
tft.setTextSize(2);
tft.println("Hello World!");
tft.setTextColor(TFT_GREEN);
tft.setTextSize(3);
tft.println("Hello World!");
tft.setTextColor(TFT_BLUE);
tft.setTextSize(4);
tft.print(1234.567);
delay(1500);
tft.setCursor(0, 0);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE);
tft.setTextSize(0);
tft.println("Hello World!");
tft.setTextSize(1);
tft.setTextColor(TFT_GREEN);
tft.print(p, 6);
tft.println(" Want pi?");
tft.println(" ");
tft.print(8675309, HEX); // print 8,675,309 out in HEX!
tft.println(" Print HEX!");
tft.println(" ");
tft.setTextColor(TFT_WHITE);
tft.println("Sketch has been");
tft.println("running for: ");
tft.setTextColor(TFT_MAGENTA);
tft.print(millis() / 1000);
tft.setTextColor(TFT_WHITE);
tft.print(" seconds.");
}
void mediabuttons() {
// play
tft.fillScreen(TFT_BLACK);
tft.fillRoundRect(25, 10, 78, 60, 8, TFT_WHITE);
tft.fillTriangle(42, 20, 42, 60, 90, 40, TFT_RED);
delay(500);
// pause
tft.fillRoundRect(25, 90, 78, 60, 8, TFT_WHITE);
tft.fillRoundRect(39, 98, 20, 45, 5, TFT_GREEN);
tft.fillRoundRect(69, 98, 20, 45, 5, TFT_GREEN);
delay(500);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, TFT_BLUE);
delay(50);
// pause color
tft.fillRoundRect(39, 98, 20, 45, 5, TFT_RED);
tft.fillRoundRect(69, 98, 20, 45, 5, TFT_RED);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, TFT_GREEN);
}

View File

@@ -0,0 +1,343 @@
// Demo based on:
// UTFT_Demo_320x240 by Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
/*
This sketch uses the GLCD and font 2 only.
Make sure all the display driver and pin connections are correct by
editing the User_Setup.h file in the TFT_eSPI library folder.
Note that yield() or delay(0) must be called in long duration for/while
loops to stop the ESP8266 watchdog triggering.
#########################################################################
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
#########################################################################
*/
#include <TFT_eSPI.h> // Graphics and font library for ST7735 driver chip
#include <SPI.h>
TFT_eSPI myGLCD = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
#define DELAY 500
#define TFT_GREY 0x7BEF
#define TFT_W 160
#define TFT_H 128
unsigned long runTime = 0;
void setup()
{
randomSeed(analogRead(A0));
// Setup the LCD
myGLCD.init();
myGLCD.setRotation(1);
}
void loop()
{
//randomSeed(millis());
randomSeed(1234); // This ensure test is repeatable with exact same draws each loop
int buf[TFT_W - 2];
int x, x2;
int y, y2;
int r;
runTime = millis();
// Clear the screen and draw the frame
myGLCD.fillScreen(TFT_BLACK);
myGLCD.fillRect(0, 0, TFT_W - 1, 14, TFT_RED);
myGLCD.fillRect(0, TFT_H - 14, TFT_W - 1, 14, TFT_GREY);
myGLCD.setTextColor(TFT_BLACK, TFT_RED);
myGLCD.drawCentreString("* TFT_S6D02A1 *", TFT_W / 2, 4, 1);
myGLCD.setTextColor(TFT_YELLOW, TFT_GREY);
myGLCD.drawCentreString("Adapted by Bodmer", TFT_W / 2, TFT_H - 12, 1);
myGLCD.drawRect(0, 14, TFT_W - 1, TFT_H - 28, TFT_BLUE);
// Draw crosshairs
myGLCD.drawLine(TFT_W / 2 - 1, 15, TFT_W / 2 - 1, TFT_H - 16, TFT_BLUE);
myGLCD.drawLine(1, TFT_H / 2 - 1, TFT_W - 2, TFT_H / 2 - 1, TFT_BLUE);
for (int i = 9; i < TFT_W - 1; i += 10)
myGLCD.drawLine(i, TFT_H / 2 - 3, i, TFT_H / 2 + 1, TFT_BLUE);
for (int i = 19; i < TFT_H - 20; i += 10)
myGLCD.drawLine(TFT_W / 2 - 3, i, TFT_W / 2 + 1, i, TFT_BLUE);
// Draw sin-, cos- and tan-lines
myGLCD.setTextColor(TFT_CYAN);
myGLCD.drawString("Sin", 5, 15, 2);
for (int i = 1; i < TFT_W - 2; i++)
{
myGLCD.drawPixel(i, TFT_H / 2 - 1 + (sin(((i * 2.26) * 3.14) / 180) * 48), TFT_CYAN);
}
myGLCD.setTextColor(TFT_RED);
myGLCD.drawString("Cos", 5, 30, 2);
for (int i = 1; i < TFT_W - 2; i++)
{
myGLCD.drawPixel(i, TFT_H / 2 - 1 + (cos(((i * 2.26) * 3.14) / 180) * 48), TFT_RED);
}
myGLCD.setTextColor(TFT_YELLOW);
myGLCD.drawString("Tan", 5, 45, 2);
for (int i = 1; i < TFT_W - 2; i++)
{
myGLCD.drawPixel(i, TFT_H / 2 - 1 + (tan(((i * 2.26) * 3.14) / 180)), TFT_YELLOW);
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
myGLCD.drawLine(TFT_W / 2 - 1, 15, TFT_W / 2 - 1, TFT_H - 16, TFT_BLUE);
myGLCD.drawLine(1, TFT_H / 2 - 1, TFT_W - 2, TFT_H / 2 - 1, TFT_BLUE);
int col = 0;
// Draw a moving sinewave
x = 1;
for (int i = 1; i < ((TFT_W - 3) * 20); i++)
{
x++;
if (x == TFT_W - 2)
x = 1;
if (i > TFT_W - 2)
{
if ((x == TFT_W / 2 - 1) || (buf[x - 1] == TFT_H / 2 - 1))
col = TFT_BLUE;
else
myGLCD.drawPixel(x, buf[x - 1], TFT_BLACK);
}
y = TFT_H / 2 + (sin(((i * 2.2) * 3.14) / 180) * (49 - (i / 100)));
myGLCD.drawPixel(x, y, TFT_BLUE);
buf[x - 1] = y;
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
// Draw some filled rectangles
for (int i = 1; i < 6; i++)
{
switch (i)
{
case 1:
col = TFT_MAGENTA;
break;
case 2:
col = TFT_RED;
break;
case 3:
col = TFT_GREEN;
break;
case 4:
col = TFT_BLUE;
break;
case 5:
col = TFT_YELLOW;
break;
}
myGLCD.fillRect(30 + (i * 10), 20 + (i * 10), 30, 30, col);
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
// Draw some filled, rounded rectangles
for (int i = 1; i < 6; i++)
{
switch (i)
{
case 1:
col = TFT_MAGENTA;
break;
case 2:
col = TFT_RED;
break;
case 3:
col = TFT_GREEN;
break;
case 4:
col = TFT_BLUE;
break;
case 5:
col = TFT_YELLOW;
break;
}
myGLCD.fillRoundRect(TFT_W / 2 + 20 - (i * 10), 20 + (i * 10), 30, 30, 3, col);
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
// Draw some filled circles
for (int i = 1; i < 6; i++)
{
switch (i)
{
case 1:
col = TFT_MAGENTA;
break;
case 2:
col = TFT_RED;
break;
case 3:
col = TFT_GREEN;
break;
case 4:
col = TFT_BLUE;
break;
case 5:
col = TFT_YELLOW;
break;
}
myGLCD.fillCircle(45 + (i * 10), 30 + (i * 10), 15, col);
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
// Draw some lines in a pattern
for (int i = 15; i < TFT_H - 16; i += 5)
{
myGLCD.drawLine(1, i, (i * 1.44) - 10, TFT_H - 17, TFT_RED);
}
for (int i = TFT_H - 17; i > 15; i -= 5)
{
myGLCD.drawLine(TFT_W - 3, i, (i * 1.44) - 11, 15, TFT_RED);
}
for (int i = TFT_H - 17; i > 15; i -= 5)
{
myGLCD.drawLine(1, i, TFT_W + 11 - (i * 1.44), 15, TFT_CYAN);
}
for (int i = 15; i < TFT_H - 16; i += 5)
{
myGLCD.drawLine(TFT_W - 3, i, TFT_W + 10 - (i * 1.44), TFT_H - 17, TFT_CYAN);
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
// Draw some random circles
for (int i = 0; i < 100; i++)
{
x = 32 + random(TFT_W - 2 - 32 - 30);
y = 45 + random(TFT_H - 19 - 45 - 30);
r = random(30);
myGLCD.drawCircle(x, y, r, random(0xFFFF));
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
// Draw some random rectangles
for (int i = 0; i < 100; i++)
{
x = 2 + random(TFT_W - 4);
y = 16 + random(TFT_H - 33);
x2 = 2 + random(TFT_H - 4);
y2 = 16 + random(TFT_H - 33);
if (x2 < x) {
r = x; x = x2; x2 = r;
}
if (y2 < y) {
r = y; y = y2; y2 = r;
}
myGLCD.drawRect(x, y, x2 - x, y2 - y, random(0xFFFF));
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
// Draw some random rounded rectangles
for (int i = 0; i < 100; i++)
{
x = 2 + random(TFT_W - 4);
y = 16 + random(TFT_H - 33);
x2 = 2 + random(TFT_W - 4);
y2 = 16 + random(TFT_H - 33);
// We need to get the width and height and do some window checking
if (x2 < x) {
r = x; x = x2; x2 = r;
}
if (y2 < y) {
r = y; y = y2; y2 = r;
}
// We need a minimum size of 6
if ((x2 - x) < 6) x2 = x + 6;
if ((y2 - y) < 6) y2 = y + 6;
myGLCD.drawRoundRect(x, y, x2 - x, y2 - y, 3, random(0xFFFF));
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
//randomSeed(1234);
int colour = 0;
for (int i = 0; i < 100; i++)
{
x = 2 + random(TFT_W - 4);
y = 16 + random(TFT_H - 31);
x2 = 2 + random(TFT_W - 4);
y2 = 16 + random(TFT_H - 31);
colour = random(0xFFFF);
myGLCD.drawLine(x, y, x2, y2, colour);
}
delay(DELAY);
myGLCD.fillRect(1, 15, TFT_W - 3, TFT_H - 31, TFT_BLACK);
#define RANDOM
#ifdef RANDOM
// Draw 10,000 pixels
// It takes 30ms to calculate the 30,000 random numbers so this is not a true drawPixel speed test
for (int i=0; i<10000; i++)
{
myGLCD.drawPixel(2+random(TFT_W - 3), 16+random(TFT_H - 31),random(0xFFFF));
}
#else
// Draw 10,000 pixels to fill a 100x100 pixel box, better drawPixel speed test
// use the coords as the colour to produce the banding
byte i = 100;
while (i--) {
byte j = 100;
while (j--) myGLCD.drawPixel(i + TFT_W / 2 - 50, j + TFT_H / 2 - 50, i + j);
}
#endif
delay(DELAY);
myGLCD.fillScreen(TFT_BLUE);
myGLCD.fillRoundRect(20, 20, TFT_W - 40, TFT_H - 60, 6, TFT_RED);
myGLCD.setTextColor(TFT_WHITE, TFT_RED);
myGLCD.drawCentreString("That's it!", TFT_W / 2 - 1, 23, 2);
myGLCD.drawCentreString("Restarting in a", TFT_W / 2 - 1, 40, 2);
myGLCD.drawCentreString("few seconds...", TFT_W / 2 - 1, 57, 2);
runTime = millis() - runTime;
myGLCD.setTextColor(TFT_GREEN, TFT_BLUE);
myGLCD.drawCentreString("Draw time: (msecs)", TFT_W / 2, TFT_H - 34, 2);
myGLCD.drawNumber(runTime - 11 * DELAY, TFT_W / 2 - 20, TFT_H - 17, 2);
delay (5000);
}