diff --git a/ConnectingHardware.md b/ConnectingHardware.md index c705833..957d1a6 100644 --- a/ConnectingHardware.md +++ b/ConnectingHardware.md @@ -1,14 +1,17 @@ # GxEPD A simple E-Paper display library with common base class and separate IO class for Arduino. -## For SPI e-paper displays from Dalian Good Display -## and SPI e-paper boards from Waveshare +- With full Graphics and Text support using Adafruit_GFX + +- For SPI e-paper displays from Dalian Good Display +- and SPI e-paper boards from Waveshare ### important note : -### - these displays are for 3.3V supply and 3.3V data lines -### - never connect data lines directly to 5V Arduino data pins, use e.g. 4k7/10k resistor divider +- these displays are for 3.3V supply and 3.3V data lines +- never connect data lines directly to 5V Arduino data pins, use e.g. 4k7/10k resistor divider - series resistor only is not enough for reliable operation (back-feed effect through protection diodes) -### - do not forget to connect GND +- 4k7/10k resistor divider may not work with flat cable extensions or Waveshare 4.2 board, use level converter then +- do not forget to connect GND ## mapping suggestions @@ -37,6 +40,10 @@ A simple E-Paper display library with common base class and separate IO class fo #### mapping suggestion for Arduino MEGA - BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51 +#### mapping suggestion for Arduino DUE +- BUSY -> 7, RST -> 9, DC -> 8, CS-> 77, CLK -> 76, DIN -> 75 +- SPI pins are on 6 pin 2x3 SPI header + ## connection scheme for (discontinued) DESTM32-S2 connection board for e-paper panels: ``` diff --git a/MyEPDs_UpdateInfos.pdf b/MyEPDs_UpdateInfos.pdf index b033114..c7da52f 100644 Binary files a/MyEPDs_UpdateInfos.pdf and b/MyEPDs_UpdateInfos.pdf differ diff --git a/README.md b/README.md index f80519f..a757bfd 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,11 @@ A simple E-Paper display library with common base class and separate IO class fo ## and SPI e-paper boards from Waveshare ### important note : -### - these displays are for 3.3V supply and 3.3V data lines -### - never connect data lines directly to 5V Arduino data pins, use e.g. 4k7/10k resistor divider +- these displays are for 3.3V supply and 3.3V data lines +- never connect data lines directly to 5V Arduino data pins, use e.g. 4k7/10k resistor divider - series resistor only is not enough for reliable operation (back-feed effect through protection diodes) -### - do not forget to connect GND +- 4k7/10k resistor divider may not work with flat cable extensions or Waveshare 4.2 board, use level converter then +- do not forget to connect GND ### Paged Drawing, Picture Loop for AVR - This library uses paged drawing to cope with RAM restriction and missing single pixel update support @@ -33,8 +34,10 @@ A simple E-Paper display library with common base class and separate IO class fo - GDEW0154Z04 1.54" b/w/r 200x200 - GDEW0154Z17 1.54" b/w/r 152x152 - GDE0213B1 2.13" b/w +- GDEW0213I5F 2.13" b/w flexible - GDEW0213Z16 2.13" b/w/r - GDEH029A1 2.9" b/w +- GDEW029T5 2.9" b/w - GDEW029Z10 2.9" b/w/r - GDEW027C44 2.7" b/w/r - GDEW027W3 2.7" b/w @@ -52,7 +55,10 @@ A simple E-Paper display library with common base class and separate IO class fo ### for pin mapping suggestions see ConnectingHardware.md -### Version 3.0.4 +### Version 3.0.5 +- added support for GDEW029T5 +- fixed wavetable for GDEW0213I5F +#### Version 3.0.4 - GxGDEW027W3 with fast partial update support, based on new demo code wavetable - mapping suggestion added for Arduino MEGA - NOTE: use voltage divider resistors for 5V Arduinos, series resistor is not reliable enough diff --git a/examples/GxEPD_Example/GxEPD_Example.ino b/examples/GxEPD_Example/GxEPD_Example.ino index 3f61c58..d7b4965 100644 --- a/examples/GxEPD_Example/GxEPD_Example.ino +++ b/examples/GxEPD_Example/GxEPD_Example.ino @@ -34,6 +34,10 @@ // mapping suggestion for Arduino MEGA // BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51 +// mapping suggestion for Arduino DUE +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 77, CLK -> 76, DIN -> 75 +// SPI pins are also on 6 pin 2x3 SPI header + // include library, include base class, make path known #include @@ -45,6 +49,7 @@ //#include // 2.13" b/w //#include // 2.13" b/w/r //#include // 2.9" b/w +//#include // 2.9" b/w IL0373 //#include // 2.9" b/w/r //#include // 2.7" b/w/r //#include // 2.7" b/w @@ -157,7 +162,7 @@ void loop() showBitmapExample(); delay(2000); #if !defined(__AVR) - drawCornerTest(); + //drawCornerTest(); showFont("FreeMonoBold9pt7b", &FreeMonoBold9pt7b); showFont("FreeMonoBold12pt7b", &FreeMonoBold12pt7b); //showFont("FreeMonoBold18pt7b", &FreeMonoBold18pt7b); @@ -292,6 +297,23 @@ void showBitmapExample() } #endif +#if defined(_GxGDEW029T5_H_) +void showBitmapExample() +{ + display.drawExampleBitmap(BitmapExample1, sizeof(BitmapExample1)); + delay(2000); + display.drawExampleBitmap(BitmapExample2, sizeof(BitmapExample2)); + delay(5000); + display.drawExampleBitmap(BitmapExample3, sizeof(BitmapExample3)); + delay(5000); + display.fillScreen(GxEPD_WHITE); + display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK); + display.update(); + delay(5000); +// showBoat(); +} +#endif + #if defined(_GxGDEW029Z10_H_) #define HAS_RED_COLOR void showBitmapExample() diff --git a/examples/PartialUpdateExample/PartialUpdateExample.ino b/examples/PartialUpdateExample/PartialUpdateExample.ino index 3bea09f..cf0041a 100644 --- a/examples/PartialUpdateExample/PartialUpdateExample.ino +++ b/examples/PartialUpdateExample/PartialUpdateExample.ino @@ -30,6 +30,10 @@ // mapping suggestion for Arduino MEGA // BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51 +// mapping suggestion for Arduino DUE +// BUSY -> 7, RST -> 9, DC -> 8, CS-> 77, CLK -> 76, DIN -> 75 +// SPI pins are also on 6 pin 2x3 SPI header + // include library, include base class, make path known #include @@ -38,6 +42,7 @@ //#include // 2.13" b/w 104x212 flexible //#include // 2.13" b/w //#include // 2.9" b/w +//#include // 2.9" b/w IL0373 //#include // 2.7" b/w //#include // 4.2" b/w // these displays do not fully support partial update diff --git a/library.properties b/library.properties index 238e23b..e07e3e0 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=GxEPD -version=3.0.4 +version=3.0.5 author=Jean-Marc Zingg maintainer=Jean-Marc Zingg sentence=Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. diff --git a/src/GxGDEW0213I5F/GxGDEW0213I5F.cpp b/src/GxGDEW0213I5F/GxGDEW0213I5F.cpp index c50ce98..77852ac 100644 --- a/src/GxGDEW0213I5F/GxGDEW0213I5F.cpp +++ b/src/GxGDEW0213I5F/GxGDEW0213I5F.cpp @@ -1,7 +1,7 @@ // class GxGDEW0213I5F : Display class for GDEW0213I5F e-Paper from Dalian Good Display Co., Ltd.: http://www.e-paper-display.com/products_detail/productId=397.html // // based on Demo Example from Good Display, available here: http://www.e-paper-display.com/download_detail/downloadsId=597.html -// Controller: IL0373 : http://www.good-display.com/download_detail/downloadsId=535.html +// Controller: IL0373 : http://www.e-paper-display.com/download_detail/downloadsId=535.html // // Author : J-M Zingg // @@ -22,99 +22,119 @@ #endif //full screen update LUT -const unsigned char GxGDEW0213I5F::lut_20_vcomDC[] = { - 0x00 , 0x08 , 0x00 , 0x00 , 0x00 , 0x02, - 0x60 , 0x28 , 0x28 , 0x00 , 0x00 , 0x01, - 0x00 , 0x14 , 0x00 , 0x00 , 0x00 , 0x01, - 0x00 , 0x12 , 0x12 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 - , 0x00 , 0x00, +const unsigned char GxGDEW0213I5F::lut_20_vcomDC[] = +{ + 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x60, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_21_ww[] = { - 0x40 , 0x08 , 0x00 , 0x00 , 0x00 , 0x02, - 0x90 , 0x28 , 0x28 , 0x00 , 0x00 , 0x01, - 0x40 , 0x14 , 0x00 , 0x00 , 0x00 , 0x01, - 0xA0 , 0x12 , 0x12 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, + +const unsigned char GxGDEW0213I5F::lut_21_ww[] = +{ + 0x40, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x40, 0x14, 0x00, 0x00, 0x00, 0x01, + 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_22_bw[] = { - 0x40 , 0x17 , 0x00 , 0x00 , 0x00 , 0x02 , - 0x90 , 0x0F , 0x0F , 0x00 , 0x00 , 0x03 , - 0x40 , 0x0A , 0x01 , 0x00 , 0x00 , 0x01 , - 0xA0 , 0x0E , 0x0E , 0x00 , 0x00 , 0x02 , - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , + +const unsigned char GxGDEW0213I5F::lut_22_bw[] = +{ + 0x40, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x40, 0x14, 0x00, 0x00, 0x00, 0x01, + 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_23_wb[] = { - 0x80 , 0x08 , 0x00 , 0x00 , 0x00 , 0x02, - 0x90 , 0x28 , 0x28 , 0x00 , 0x00 , 0x01, - 0x80 , 0x14 , 0x00 , 0x00 , 0x00 , 0x01, - 0x50 , 0x12 , 0x12 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, + +const unsigned char GxGDEW0213I5F::lut_23_wb[] = +{ + 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x80, 0x14, 0x00, 0x00, 0x00, 0x01, + 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_24_bb[] = { - 0x80 , 0x08 , 0x00 , 0x00 , 0x00 , 0x02, - 0x90 , 0x28 , 0x28 , 0x00 , 0x00 , 0x01, - 0x80 , 0x14 , 0x00 , 0x00 , 0x00 , 0x01, - 0x50 , 0x12 , 0x12 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, + +const unsigned char GxGDEW0213I5F::lut_24_bb[] = +{ + 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x80, 0x14, 0x00, 0x00, 0x00, 0x01, + 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //partial screen update LUT -const unsigned char GxGDEW0213I5F::lut_20_vcomDC_partial[] = { - 0x00 , 0x19 , 0x01 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 - , 0x00 , 0x00, +//#define Tx19 0x19 // original value is 25 (phase length) +#define Tx19 0x28 // new value for test is 40 (phase length) +const unsigned char GxGDEW0213I5F::lut_20_vcomDC_partial[] = +{ + 0x00, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_21_ww_partial[] = { - 0x00 , 0x19 , 0x01 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, + +const unsigned char GxGDEW0213I5F::lut_21_ww_partial[] = +{ + 0x00, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_22_bw_partial[] = { - 0x80 , 0x19 , 0x01 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, + +const unsigned char GxGDEW0213I5F::lut_22_bw_partial[] = +{ + 0x80, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_23_wb_partial[] = { - 0x40 , 0x19 , 0x01 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, + +const unsigned char GxGDEW0213I5F::lut_23_wb_partial[] = +{ + 0x40, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -const unsigned char GxGDEW0213I5F::lut_24_bb_partial[] = { - 0x00 , 0x19 , 0x01 , 0x00 , 0x00 , 0x01, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, - 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00, + +const unsigned char GxGDEW0213I5F::lut_24_bb_partial[] = +{ + 0x00, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; // Partial Update Delay, may have an influence on degradation @@ -465,7 +485,7 @@ void GxGDEW0213I5F::_waitWhileBusy(const char* comment) { if (digitalRead(_busy) == 1) break; delay(1); - if (micros() - start > 20000000) // >14.9s ! + if (micros() - start > 10000000) { if (_diag_enabled) Serial.println("Busy Timeout!"); break; diff --git a/src/GxGDEW0213I5F/GxGDEW0213I5F.h b/src/GxGDEW0213I5F/GxGDEW0213I5F.h index f55b960..f056457 100644 --- a/src/GxGDEW0213I5F/GxGDEW0213I5F.h +++ b/src/GxGDEW0213I5F/GxGDEW0213I5F.h @@ -1,7 +1,7 @@ // class GxGDEW0213I5F : Display class for GDEW0213I5F e-Paper from Dalian Good Display Co., Ltd.: http://www.e-paper-display.com/products_detail/productId=397.html // // based on Demo Example from Good Display, available here: http://www.e-paper-display.com/download_detail/downloadsId=597.html -// Controller: IL0373 : http://www.good-display.com/download_detail/downloadsId=535.html +// Controller: IL0373 : http://www.e-paper-display.com/download_detail/downloadsId=535.html // // Author : J-M Zingg // diff --git a/src/GxGDEW029T5/BitmapExamples.h b/src/GxGDEW029T5/BitmapExamples.h new file mode 100644 index 0000000..a9a51b6 --- /dev/null +++ b/src/GxGDEW029T5/BitmapExamples.h @@ -0,0 +1,910 @@ +#ifndef _GxBitmapExamples_H_ +#define _GxBitmapExamples_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + +const unsigned char BitmapExample2[] PROGMEM = +{ + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF8, 0X07, 0X8C, 0XC4, 0X1F, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFB, 0XF7, 0X31, 0XF9, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFA, 0X17, 0X7E, 0X3A, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFA, 0X14, 0X1D, 0XC9, 0XDF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFA, 0X14, 0X1D, 0XC9, 0XDF, 0XFF, + 0X00, 0X4C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFA, 0X14, 0X3C, 0X03, 0X3F, 0XFF, + 0X00, 0X92, 0X00, 0X00, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFB, 0XF7, 0X10, 0X78, 0X3F, 0XFF, + 0X00, 0X92, 0X00, 0X07, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X7F, 0XF8, 0X07, 0XAF, 0X49, 0X3F, 0XFF, + 0X00, 0X92, 0X00, 0X0F, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0X0D, 0X79, 0X3F, 0XFF, + 0X00, 0X64, 0X00, 0X1F, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X7F, 0XFE, 0X03, 0X41, 0X02, 0X1F, 0XFF, + 0X00, 0X00, 0X00, 0X3E, 0X07, 0X3E, 0X00, 0X00, 0X00, 0X7F, 0XFE, 0X03, 0X41, 0X02, 0X1F, 0XFF, + 0X00, 0X00, 0X00, 0X38, 0X03, 0X8F, 0X00, 0X00, 0X00, 0X7F, 0XFE, 0XFF, 0X20, 0XF1, 0XFF, 0XFF, + 0X00, 0X74, 0X00, 0X70, 0X01, 0X87, 0X80, 0X00, 0X00, 0X7F, 0XFA, 0XD0, 0XFC, 0X43, 0X1F, 0XFF, + 0X00, 0X92, 0X00, 0X70, 0X01, 0X83, 0XC0, 0X00, 0X00, 0X7F, 0XFF, 0X2C, 0XF3, 0X49, 0XFF, 0XFF, + 0X00, 0X92, 0X00, 0X70, 0X01, 0XC1, 0XC0, 0X00, 0X00, 0X7F, 0XFD, 0X14, 0X6F, 0X72, 0XDF, 0XFF, + 0X00, 0X92, 0X00, 0X70, 0X01, 0XC1, 0XC0, 0X00, 0X00, 0X7F, 0XF8, 0X38, 0X72, 0X05, 0X3F, 0XFF, + 0X00, 0X7C, 0X00, 0X70, 0X01, 0XC1, 0XC0, 0X00, 0X00, 0X7F, 0XF8, 0X38, 0X72, 0X05, 0X3F, 0XFF, + 0X00, 0X00, 0X00, 0X38, 0X03, 0XC0, 0XE0, 0X00, 0X00, 0X7F, 0XFA, 0X04, 0X43, 0XFB, 0X3F, 0XFF, + 0X00, 0X00, 0X00, 0X3E, 0X0F, 0X80, 0XE0, 0X00, 0X00, 0X7F, 0XFA, 0XE8, 0XA0, 0XF3, 0X3F, 0XFF, + 0X07, 0XFE, 0X00, 0X1F, 0XFF, 0X80, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0X17, 0X6F, 0X07, 0X1F, 0XFF, + 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X00, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFC, 0X6E, 0XFF, 0XFF, 0XFF, + 0X00, 0X7E, 0X00, 0X07, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF8, 0X04, 0XAD, 0X40, 0X1F, 0XFF, + 0X00, 0X94, 0X00, 0X01, 0XF8, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF8, 0X04, 0XAD, 0X40, 0X1F, 0XFF, + 0X00, 0X92, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFB, 0XF4, 0X92, 0XCF, 0XDF, 0XFF, + 0X00, 0X92, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFA, 0X17, 0X6F, 0XC8, 0XDF, 0XFF, + 0X00, 0X4C, 0X00, 0X00, 0X00, 0X7C, 0X00, 0X00, 0X00, 0X7F, 0XFA, 0X17, 0X91, 0XC8, 0XDF, 0XFF, + 0X00, 0X00, 0X00, 0X07, 0X80, 0XFF, 0X00, 0X00, 0X00, 0X7F, 0XFA, 0X17, 0X32, 0X48, 0XDF, 0XFF, + 0X00, 0X00, 0X00, 0X1F, 0XE1, 0XFF, 0X80, 0X00, 0X00, 0X7F, 0XFB, 0XF4, 0X13, 0XCF, 0XDF, 0XFF, + 0X00, 0X4C, 0X00, 0X1F, 0XF3, 0XFF, 0XC0, 0X00, 0X00, 0X7F, 0XFB, 0XF4, 0X13, 0XCF, 0XDF, 0XFF, + 0X00, 0X92, 0X00, 0X3F, 0XFF, 0XC3, 0XC0, 0X00, 0X00, 0X7F, 0XF8, 0X04, 0XA0, 0X40, 0X1F, 0XFF, + 0X00, 0X92, 0X00, 0X78, 0X3F, 0X81, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X92, 0X00, 0X70, 0X1F, 0X00, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X64, 0X00, 0X70, 0X0E, 0X00, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X70, 0X0E, 0X00, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X70, 0X1E, 0X00, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X70, 0X1E, 0X00, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X38, 0X7F, 0X01, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X3F, 0XFB, 0XC3, 0XC0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X1F, 0XF3, 0XFF, 0XC0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X74, 0X00, 0X0F, 0XE1, 0XFF, 0X80, 0X20, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X92, 0X00, 0X03, 0XC0, 0XFF, 0X00, 0X24, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X92, 0X00, 0X00, 0X00, 0X3C, 0X00, 0X1F, 0XF0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X92, 0X00, 0X00, 0X00, 0X00, 0X00, 0X24, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X7C, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X24, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XC0, 0X1F, 0XF0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X7E, 0X00, 0X00, 0X00, 0X03, 0XE0, 0X04, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X80, 0X00, 0X00, 0X00, 0X03, 0XC0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X80, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X01, 0XC0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X20, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X7E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X10, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X10, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X20, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X40, 0X00, 0X07, 0X80, 0X7C, 0X00, 0X01, 0XC0, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0XFE, 0X00, 0X1F, 0XE0, 0XFF, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X3F, 0XF1, 0XFF, 0X80, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X3F, 0XFB, 0XFF, 0X80, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X04, 0XFE, 0X00, 0X7C, 0X3B, 0X83, 0XC0, 0X01, 0XE0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X78, 0X1F, 0X01, 0XC0, 0X02, 0X10, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X70, 0X1F, 0X00, 0XE0, 0X12, 0X10, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X82, 0X00, 0X70, 0X0E, 0X00, 0XE0, 0X1A, 0X10, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X03, 0XFE, 0X00, 0X70, 0X0E, 0X00, 0XE0, 0X07, 0XE0, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X80, 0X00, 0X70, 0X0E, 0X00, 0XE0, 0X01, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X38, 0X0E, 0X00, 0XE0, 0X0E, 0XC0, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X10, 0X00, 0X38, 0X00, 0X00, 0XE0, 0X11, 0X30, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X10, 0X00, 0X3C, 0X00, 0X01, 0XC0, 0X11, 0X10, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X10, 0X00, 0X00, 0X00, 0X01, 0XC0, 0X11, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X67, 0XFF, + 0X07, 0XFE, 0X00, 0X00, 0X00, 0X00, 0XC0, 0X0E, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X42, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X82, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X82, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X97, 0XFF, + 0X00, 0X7C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XC0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, 0X20, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X67, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X20, 0X10, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X74, 0X00, 0X3F, 0XFF, 0XFF, 0XE0, 0X10, 0X20, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X5B, 0XFF, + 0X00, 0X92, 0X00, 0X3F, 0XFF, 0XFF, 0XE0, 0X0F, 0XC0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X92, 0X00, 0X3F, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, + 0X00, 0X92, 0X00, 0X3F, 0XFF, 0XFF, 0XE0, 0X00, 0X80, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X7C, 0X00, 0X18, 0X00, 0X00, 0X00, 0X1F, 0XF0, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X67, 0XFF, + 0X00, 0X00, 0X00, 0X1C, 0X00, 0X00, 0X00, 0X08, 0X80, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X5B, 0XFF, + 0X00, 0X00, 0X00, 0X1C, 0X00, 0X00, 0X00, 0X04, 0X80, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X82, 0X00, 0X0E, 0X00, 0X00, 0X00, 0X03, 0X80, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X03, 0XFE, 0X00, 0X0C, 0X00, 0X00, 0X00, 0X00, 0X80, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X97, 0XFF, + 0X00, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, + 0X04, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X6B, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X6B, 0XFF, + 0X00, 0X7E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X6B, 0XFF, + 0X00, 0X80, 0X00, 0X00, 0X00, 0X7C, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X9B, 0XFF, + 0X00, 0X80, 0X00, 0X18, 0X01, 0XFE, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X40, 0X00, 0X1C, 0X03, 0XFF, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X03, 0XFF, + 0X00, 0X7E, 0X00, 0X38, 0X07, 0XFF, 0X80, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, + 0X00, 0X80, 0X00, 0X38, 0X07, 0X83, 0X80, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XBF, 0XFF, + 0X00, 0X80, 0X03, 0XF8, 0X0F, 0X01, 0XFC, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X40, 0X03, 0XF8, 0X0F, 0X01, 0XFC, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0XFE, 0X03, 0XF8, 0X1E, 0X01, 0XFC, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X67, 0XFF, + 0X00, 0X00, 0X00, 0X3C, 0X3E, 0X01, 0XC0, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X5B, 0XFF, + 0X00, 0X00, 0X00, 0X1E, 0X3C, 0X01, 0XC0, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X5B, 0XFF, + 0X04, 0XFE, 0X00, 0X1F, 0XFC, 0X01, 0XC0, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X00, 0X00, 0X0F, 0XF8, 0X03, 0X80, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, + 0X00, 0X02, 0X00, 0X07, 0XF0, 0X03, 0X80, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XF7, 0XFF, + 0X00, 0X02, 0X00, 0X03, 0XE0, 0X03, 0X80, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, + 0X00, 0X02, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X77, 0XFF, + 0X00, 0X02, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XB7, 0XFF, + 0X00, 0X02, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XD7, 0XFF, + 0X07, 0XFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XE7, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XA7, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0X5B, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0X5B, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XA7, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, 0XFF, 0XFF, 0XFF, 0XEF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X7F, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X7F, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF2, 0X7F, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE6, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0X0E, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0X1E, 0X7F, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3E, 0X7F, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7E, 0X7F, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X02, 0XF8, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X19, 0XFF, 0XFF, 0XF6, 0XF1, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XF7, 0XD9, 0XFF, 0XFF, 0XEE, 0XE3, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDC, 0X7F, 0XFF, 0XCE, 0X87, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDE, 0X7F, 0XFF, 0X8E, 0X8F, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XF7, 0X7F, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDE, 0X3F, 0XFF, 0X0E, 0X1F, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XE7, 0X3F, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDF, 0X03, 0XF8, 0X3E, 0X7F, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XDF, 0XC0, 0X00, 0XFE, 0X7F, 0XF8, 0X07, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X1F, 0XF0, 0X00, 0XFE, 0XFF, 0XE0, 0X03, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XF0, 0X1F, 0XFC, 0X0F, 0XFE, 0XFF, 0X87, 0XF1, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFE, 0X7F, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFC, 0X7F, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFC, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF8, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFC, 0X7F, 0XDF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, + 0XF0, 0X7F, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFB, 0X9F, 0XDF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, + 0XF0, 0X1F, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFB, 0X9F, 0XDF, 0XFF, 0XFF, 0XF8, 0X1F, 0XFF, + 0XF2, 0X07, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XF3, 0X9F, 0XDF, 0XFF, 0XFF, 0XFF, 0X07, 0XFF, + 0XF3, 0X80, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XF3, 0X9F, 0XDF, 0XFF, 0XFF, 0XF8, 0X07, 0XFF, + 0XF3, 0XF8, 0X0F, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFB, 0X9F, 0XDF, 0XFF, 0XFF, 0XE0, 0XF7, 0XFF, + 0XF3, 0XFF, 0X01, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XF8, 0X1F, 0XDF, 0XFF, 0XFF, 0XE7, 0XF7, 0XFF, + 0XF3, 0XFF, 0XE0, 0X1F, 0XFF, 0XFF, 0XFE, 0XF9, 0XF8, 0X3F, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF3, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFE, 0XF8, 0XFF, 0XFF, 0X1F, 0XFF, 0XFF, 0XF0, 0X3F, 0XFF, + 0XF3, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFE, 0XFC, 0XFF, 0XFF, 0X1F, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0X1F, 0XF8, 0XFF, 0XFF, 0XFF, 0XEB, 0XBF, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0X0F, 0XF8, 0XFF, 0XFF, 0XFF, 0XE9, 0XBF, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0X87, 0XE1, 0XFF, 0XFC, 0X0F, 0XEC, 0X3F, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XC0, 0X03, 0XFF, 0XF8, 0X0F, 0XF6, 0X7F, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFC, 0X3F, 0XFF, 0XFB, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XF8, 0X0F, 0X00, 0X3F, 0XFF, + 0XF3, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XF8, 0X0F, 0X00, 0X3F, 0XFF, + 0XF3, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF3, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF3, 0XFF, 0XC0, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XD8, 0X0F, 0XF0, 0X7F, 0XFF, + 0XF3, 0XFF, 0X81, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XD8, 0X0F, 0XE0, 0X3F, 0XFF, + 0XF3, 0XFC, 0X0F, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XF3, 0XE0, 0X7F, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0XF0, 0X0F, 0XFF, 0XFF, 0XFF, 0XF7, 0X7F, 0XFF, + 0XF0, 0X1F, 0XFE, 0X1F, 0XFF, 0XFF, 0XFE, 0XFF, 0X0F, 0XF8, 0XFF, 0XFC, 0X0F, 0XE0, 0X07, 0XFF, + 0XF0, 0X1F, 0XFC, 0X1F, 0XFF, 0XFF, 0XFE, 0XFF, 0X0F, 0XFC, 0XFF, 0XF8, 0X0F, 0XE0, 0X07, 0XFF, + 0XF3, 0XFF, 0XE0, 0XDF, 0XFF, 0XFF, 0XFE, 0XFE, 0X7F, 0XFF, 0X3F, 0XFB, 0X4F, 0XF6, 0X7F, 0XFF, + 0XFF, 0XFF, 0XC1, 0XDF, 0XFF, 0XFF, 0XFE, 0XFE, 0XFF, 0XFF, 0X1F, 0XFB, 0X6F, 0XE4, 0X3F, 0XFF, + 0XFF, 0XFF, 0XC3, 0XDF, 0XFF, 0XFF, 0XFE, 0XF8, 0XFF, 0XFF, 0X9F, 0XF9, 0X0F, 0XEC, 0XBF, 0XFF, + 0XFF, 0XFF, 0X87, 0XDF, 0XFF, 0XFF, 0XFE, 0XF8, 0XFF, 0XFF, 0X9F, 0XFD, 0X9F, 0XE9, 0XBF, 0XFF, + 0XFF, 0XFF, 0X8F, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFC, 0X7F, 0XDF, 0XFF, 0XFF, 0XE1, 0X3F, 0XFF, + 0XFF, 0XFF, 0X8F, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XF8, 0X7F, 0XDF, 0XFB, 0XFF, 0XF3, 0X7F, 0XFF, + 0XFF, 0XFF, 0X8F, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFB, 0XBF, 0XDF, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X8F, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFB, 0XBF, 0XDF, 0XF8, 0X0F, 0X20, 0X3F, 0XFF, + 0XFF, 0XFF, 0X8F, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFB, 0XBF, 0XDF, 0XF8, 0X0F, 0X20, 0X3F, 0XFF, + 0XFF, 0XFF, 0XC3, 0XDF, 0XFF, 0XFF, 0XFE, 0XFB, 0XFB, 0XBF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XC1, 0XDF, 0XCF, 0XCF, 0X8E, 0XF9, 0XFC, 0X7F, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XE0, 0X5F, 0X87, 0X87, 0X0E, 0XF8, 0XFF, 0XFF, 0X9F, 0XFB, 0XEF, 0X00, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFE, 0X1F, 0X33, 0X37, 0X76, 0XFC, 0X7F, 0XFF, 0X1F, 0XE0, 0X0F, 0X00, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0X33, 0X37, 0X76, 0XFE, 0XFF, 0XFF, 0X3F, 0XE0, 0X0F, 0XF7, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0X87, 0X87, 0X0E, 0XFF, 0X3F, 0XFC, 0X7F, 0XFB, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XCF, 0XCF, 0X8E, 0XFF, 0X0F, 0XF8, 0X7F, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFF, 0X80, 0X03, 0XFF, 0XF9, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XE0, 0X07, 0XFF, 0XF8, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFC, 0X7F, 0XFF, 0XFE, 0X03, 0XFE, 0XFF, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFC, 0XFF, 0XFF, 0XFE, 0X01, 0XFE, 0XFF, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFC, 0XFF, 0XFF, 0XF8, 0X3D, 0XFE, 0XFF, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFC, 0XFF, 0XFF, 0XF9, 0XFD, 0XFF, 0XFF, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XF0, 0X0F, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XC3, 0XC7, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, + 0XFF, 0X98, 0X00, 0X1F, 0XFF, 0XFF, 0XFE, 0XFF, 0X87, 0XF1, 0XFF, 0XFC, 0X1F, 0XF7, 0X7F, 0XFF, + 0XFF, 0X98, 0X00, 0X1F, 0XFF, 0XFF, 0XFE, 0XFF, 0X0F, 0XF8, 0XFF, 0XF8, 0X0F, 0XEF, 0XBF, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFC, 0X7F, 0XFF, 0X3F, 0XFB, 0XEF, 0XE0, 0X3F, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF8, 0XFF, 0XFF, 0X3F, 0XFB, 0XEF, 0XF0, 0X7F, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFF, 0XFF, 0X9F, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFC, 0X7F, 0X9F, 0XFC, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XF9, 0XF8, 0X3F, 0X9F, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFB, 0XFB, 0X9F, 0XDF, 0XDF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFB, 0XFB, 0X9F, 0XDF, 0XDF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFB, 0XFB, 0X9F, 0XDF, 0XDF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0X98, 0XFF, 0XDF, 0XFF, 0XFF, 0XFE, 0XFB, 0XFB, 0X9F, 0XDF, 0XC0, 0X0F, 0XE0, 0X3F, 0XFF, + 0XFF, 0X98, 0X00, 0X1F, 0XFF, 0XFF, 0XFE, 0XF9, 0XFC, 0X3F, 0XDF, 0XC0, 0X0F, 0XF0, 0X7F, 0XFF, + 0XFF, 0X98, 0X00, 0X1F, 0XFF, 0XFF, 0XFE, 0XF9, 0XFC, 0X7F, 0X9F, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XF9, 0XFF, 0XFF, 0X9F, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFC, 0XFF, 0XFF, 0X1F, 0XDF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFC, 0XFF, 0XFF, 0X3F, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0X8F, 0XF8, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0X9F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XCF, 0XF1, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, + 0XFF, 0X9F, 0X80, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XC3, 0XC3, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XFF, + 0XFF, 0X9F, 0X0F, 0XBF, 0XFE, 0XE7, 0XFE, 0XFF, 0XF0, 0X07, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0X98, 0X7F, 0XBF, 0XFE, 0XE7, 0XFE, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X90, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X83, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XFF, 0XF8, 0X3F, 0XFF, 0XFF, 0XFF, 0XE0, 0X0F, 0XFF, + 0XFF, 0X8F, 0XFF, 0XBF, 0X0E, 0XE7, 0XFE, 0XFF, 0XC3, 0X87, 0XFF, 0XFF, 0XFF, 0XE0, 0X07, 0XFF, + 0XFF, 0X9F, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFF, 0X87, 0XF1, 0XFF, 0XFF, 0XFF, 0XF7, 0X77, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFF, 0X0F, 0XF8, 0XFF, 0XFF, 0XFF, 0XEF, 0XB7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFE, 0X3F, 0XFE, 0X7F, 0XFF, 0XFF, 0XE0, 0X37, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X0E, 0XE7, 0XFE, 0XFC, 0XFF, 0XFF, 0X7F, 0XFF, 0XFF, 0XF0, 0X6F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X9E, 0XE7, 0XFE, 0XF8, 0XFF, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XF8, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XF9, 0XF8, 0X3F, 0X9F, 0XFF, 0XFF, 0XFF, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XFB, 0XF9, 0X1F, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X0E, 0XE7, 0XFE, 0XFB, 0XFB, 0X9F, 0XDF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFB, 0XFB, 0X9F, 0XDF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFB, 0XFB, 0X9F, 0XDF, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFB, 0XF8, 0X3F, 0X9F, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X0E, 0XE7, 0XFE, 0XF9, 0XFC, 0X7F, 0X9F, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X9E, 0XE7, 0XFE, 0XF9, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XF8, 0XFF, 0XFF, 0X1F, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XFC, 0X7F, 0XFF, 0X3F, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XFE, 0X3F, 0XFE, 0X7F, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X9E, 0XE7, 0XFE, 0XFF, 0X1F, 0XFC, 0X7F, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFF, 0X83, 0XC0, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XF6, 0XE7, 0XFE, 0XFF, 0XE0, 0X01, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X0E, 0XE7, 0XFE, 0XFF, 0XFC, 0X7F, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0X9E, 0XE7, 0XFE, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBF, 0XFE, 0XE7, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +const unsigned char BitmapExample1[] PROGMEM = +{ + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X9E, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X9F, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XF8, 0X0F, 0XFF, 0X81, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X7F, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XF0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0XC0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0X80, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0X9F, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0X9F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0X8F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0X01, 0XF8, 0X0F, 0XFF, 0XC0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X01, 0XF8, 0X0F, 0XFF, 0XC0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X01, 0XF8, 0X0F, 0XFF, 0XF0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X01, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X01, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X01, 0XF8, 0X0F, 0XFF, 0XC7, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X01, 0XF8, 0X0F, 0XFF, 0X86, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0X86, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0X9F, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0X9F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0X83, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XC0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XE0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X0F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X81, 0XF1, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XF1, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X90, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X1F, 0XFF, 0X93, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X1F, 0XFF, 0X9B, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X89, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X88, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XD8, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X1F, 0XF8, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X1F, 0XF8, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X1F, 0XFF, 0XC0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XE1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X01, 0X83, 0XFF, 0XFF, 0X80, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X03, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0X80, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X0F, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X0F, 0X83, 0XFF, 0XFF, 0X9E, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X9F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X8F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X1F, 0XFF, 0XF0, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0XDC, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0X88, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0X98, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0X90, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0X91, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0X81, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X81, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XC3, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XE7, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XF8, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XF8, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XF8, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X7F, 0XC0, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, 0X9E, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XBF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X8F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XC0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XF0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0XFF, 0XF0, 0X01, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0XFF, 0X80, 0X00, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0XFF, 0X00, 0X00, 0X7F, 0XFF, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0XFE, 0X00, 0X00, 0X3F, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0XF8, 0X00, 0X00, 0X1F, 0XF8, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X01, 0XF0, 0X00, 0X00, 0X1F, 0XF8, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XE0, 0X07, 0XFC, 0X1F, 0XF8, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE1, 0XFF, 0X80, 0X1F, 0XFC, 0X1F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0X00, 0X3F, 0XFC, 0X1F, 0XFF, 0X9E, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X7F, 0XF0, 0X1F, 0XFF, 0X9F, 0XBF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0XFC, 0X00, 0X1F, 0XFF, 0X8F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X03, 0XFC, 0X00, 0X3F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X07, 0XFC, 0X00, 0X3F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X1F, 0XFC, 0X00, 0X7F, 0XFF, 0XC0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0X7F, 0XFC, 0X00, 0XFF, 0XFF, 0XF0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XC0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X9F, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X9F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X8F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XC0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X7F, 0XFF, 0XFF, 0XF8, 0X1F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0X9F, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0X9F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X87, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XC0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XE0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9E, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XC0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XF0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFE, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFC, 0XC7, 0XCF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFC, 0X03, 0X87, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFE, 0X01, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X01, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0X80, 0X00, 0X00, 0X07, 0XE3, 0XFF, 0X99, 0X13, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0X00, 0X00, 0X00, 0X03, 0XE3, 0XFF, 0X99, 0X1B, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XA0, 0X00, 0X00, 0X07, 0XE3, 0XFF, 0X81, 0X1B, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X80, 0X13, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X80, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XE6, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0X63, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X81, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XE0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XF8, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X03, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X03, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0XD5, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0XF8, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFE, 0X03, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X7F, 0XFF, 0XFF, 0XF0, 0X03, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, 0X87, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XC0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0XF0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XF8, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X07, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X03, 0XE3, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X03, 0XE3, 0XFF, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XF0, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XE0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X81, 0XFF, 0XFF, 0XFF, 0XFE, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X81, 0XFE, 0X07, 0XFF, 0XFE, 0X03, 0XFF, 0XC0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XFE, 0X07, 0XFF, 0XFF, 0X83, 0XFF, 0XF8, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFE, 0X07, 0XFF, 0XFF, 0XC3, 0XFF, 0XE0, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFE, 0X07, 0XFF, 0XFF, 0XC3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFE, 0X07, 0XFF, 0XFF, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFE, 0X07, 0XFF, 0XFF, 0XE3, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X07, 0XE0, 0X03, 0XE3, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X03, 0XC0, 0X03, 0XE3, 0XFF, 0XF8, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X00, 0X00, 0X00, 0X07, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0X80, 0X1F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X7F, 0XFF, 0XFF, 0XF8, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +const unsigned char BitmapExample3[] PROGMEM = +{ + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0XFF, 0XFF, 0X7F, 0XFF, 0XFF, 0XE0, 0X00, 0X0F, 0XE0, 0X38, 0X7C, 0X18, 0X01, 0XFF, + 0XFF, 0XFE, 0X3F, 0XFF, 0X1F, 0XFF, 0XFF, 0XE0, 0X00, 0X0F, 0XE0, 0X38, 0X7C, 0X18, 0X01, 0XFF, + 0XFF, 0XFE, 0X1F, 0XFF, 0X0F, 0XFF, 0XFF, 0XE7, 0XFF, 0X8F, 0X87, 0XC1, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0X0F, 0XFF, 0X87, 0XFF, 0XFF, 0XE7, 0XFF, 0X8F, 0X87, 0XC1, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XC3, 0XFF, 0XE1, 0XFF, 0XFF, 0XE7, 0XFF, 0X8F, 0X87, 0XC1, 0XFF, 0XE0, 0XFF, 0XFF, + 0XFF, 0XFF, 0XE1, 0XFF, 0XF0, 0XFF, 0XFF, 0XE7, 0X01, 0X8F, 0X9F, 0XFE, 0X03, 0XE7, 0X3F, 0XFF, + 0XFF, 0XFF, 0XF0, 0X03, 0XF8, 0X01, 0XFF, 0XE7, 0X01, 0X8F, 0X9F, 0XFE, 0X03, 0XE7, 0X3F, 0XFF, + 0XFF, 0XFF, 0XFC, 0X03, 0XFE, 0X01, 0XFF, 0XE7, 0X01, 0X8C, 0X00, 0XF9, 0XFC, 0X60, 0XF9, 0XFF, + 0XFF, 0XFF, 0XF0, 0X03, 0XF8, 0X01, 0XFF, 0XE7, 0X01, 0X8C, 0X00, 0XF9, 0XFC, 0X60, 0XF9, 0XFF, + 0XFF, 0XFF, 0XE1, 0XFF, 0XF0, 0XFF, 0XFF, 0XE7, 0X01, 0X8C, 0X00, 0XF9, 0XFC, 0X60, 0XF9, 0XFF, + 0XFF, 0XFF, 0XC3, 0XFF, 0XE1, 0XFF, 0XFF, 0XE7, 0X01, 0X8C, 0X07, 0XF8, 0X00, 0X07, 0XC7, 0XFF, + 0XFF, 0XFF, 0X0F, 0XFF, 0X87, 0XFF, 0XFF, 0XE7, 0X01, 0X8C, 0X07, 0XF8, 0X00, 0X07, 0XC7, 0XFF, + 0XFF, 0XFE, 0X1F, 0XFF, 0X0F, 0XFF, 0XFF, 0XE7, 0XFF, 0X8F, 0X80, 0XC0, 0X0F, 0XE0, 0X07, 0XFF, + 0XFF, 0XFE, 0X3F, 0XFF, 0X1F, 0XFF, 0XFF, 0XE7, 0XFF, 0X8F, 0X80, 0XC0, 0X0F, 0XE0, 0X07, 0XFF, + 0XFF, 0XFE, 0XFF, 0XFF, 0X7F, 0XFF, 0XFF, 0XE0, 0X00, 0X0F, 0XE7, 0X3F, 0X8C, 0X60, 0XC7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X0F, 0XE7, 0X3F, 0X8C, 0X60, 0XC7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XF1, 0XFF, 0XE0, 0X00, 0X0F, 0XE7, 0X3F, 0X8C, 0X60, 0XC7, 0XFF, + 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X39, 0X8F, 0XE0, 0XC7, 0XFF, + 0XFF, 0XFF, 0XFC, 0X07, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X39, 0X8F, 0XE0, 0XC7, 0XFF, + 0XFF, 0XFF, 0XF0, 0X1F, 0XFF, 0XF1, 0XFF, 0XFF, 0X00, 0X03, 0X98, 0X01, 0X80, 0X07, 0X01, 0XFF, + 0XFF, 0XFF, 0XC0, 0X1F, 0XFF, 0XF1, 0XFF, 0XFF, 0X00, 0X03, 0X98, 0X01, 0X80, 0X07, 0X01, 0XFF, + 0XFF, 0XFF, 0X03, 0X1F, 0XFF, 0XF1, 0XFF, 0XFF, 0X00, 0X03, 0X98, 0X01, 0X80, 0X07, 0X01, 0XFF, + 0XFF, 0XFE, 0X0F, 0X1F, 0XFF, 0XF1, 0XFF, 0XFF, 0X3F, 0XFF, 0X87, 0X00, 0X7F, 0X80, 0XFF, 0XFF, + 0XFF, 0XFE, 0X3F, 0X1F, 0XFF, 0XF1, 0XFF, 0XFF, 0X3F, 0XFF, 0X87, 0X00, 0X7F, 0X80, 0XFF, 0XFF, + 0XFF, 0XFE, 0X0F, 0X1F, 0XFF, 0XF1, 0XFF, 0XE7, 0X39, 0X80, 0X7F, 0XF8, 0X0C, 0X07, 0XC1, 0XFF, + 0XFF, 0XFF, 0X03, 0X1F, 0X00, 0X01, 0XFF, 0XE7, 0X39, 0X80, 0X7F, 0XF8, 0X0C, 0X07, 0XC1, 0XFF, + 0XFF, 0XFF, 0XC0, 0X1F, 0X00, 0X01, 0XFF, 0XFF, 0XC6, 0X7C, 0X7F, 0XC7, 0X8C, 0X60, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X1F, 0X00, 0X01, 0XFF, 0XFF, 0XC6, 0X7C, 0X7F, 0XC7, 0X8C, 0X60, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XC6, 0X7C, 0X7F, 0XC7, 0X8C, 0X60, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XF8, 0XC1, 0X8C, 0X1F, 0X3F, 0X8F, 0X87, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XF8, 0XC1, 0X8C, 0X1F, 0X3F, 0X8F, 0X87, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, 0XFF, 0XFF, 0XE0, 0X07, 0XF0, 0X1F, 0XC6, 0X00, 0X18, 0XC7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X01, 0XFF, 0XE0, 0X07, 0XF0, 0X1F, 0XC6, 0X00, 0X18, 0XC7, 0XFF, + 0XFF, 0XFF, 0XE0, 0X3F, 0X00, 0X01, 0XFF, 0XE0, 0X07, 0XF0, 0X1F, 0XC6, 0X00, 0X18, 0XC7, 0XFF, + 0XFF, 0XFF, 0XC0, 0X1F, 0X00, 0X01, 0XFF, 0XE7, 0X00, 0X0C, 0X18, 0X07, 0XFF, 0XE7, 0XC7, 0XFF, + 0XFF, 0XFF, 0X00, 0X07, 0XFF, 0XE1, 0XFF, 0XE7, 0X00, 0X0C, 0X18, 0X07, 0XFF, 0XE7, 0XC7, 0XFF, + 0XFF, 0XFF, 0X0F, 0X87, 0XFF, 0X87, 0XFF, 0XE7, 0X3E, 0X70, 0X67, 0X00, 0X7F, 0X87, 0XC7, 0XFF, + 0XFF, 0XFE, 0X1F, 0XC3, 0XFF, 0X0F, 0XFF, 0XE7, 0X3E, 0X70, 0X67, 0X00, 0X7F, 0X87, 0XC7, 0XFF, + 0XFF, 0XFE, 0X3F, 0XE3, 0XFC, 0X3F, 0XFF, 0XFF, 0XC1, 0X8F, 0X9F, 0X3F, 0X80, 0X1F, 0XC1, 0XFF, + 0XFF, 0XFE, 0X3F, 0XE3, 0XF8, 0X7F, 0XFF, 0XFF, 0XC1, 0X8F, 0X9F, 0X3F, 0X80, 0X1F, 0XC1, 0XFF, + 0XFF, 0XFE, 0X3F, 0XE3, 0XE1, 0XFF, 0XFF, 0XFF, 0XC1, 0X8F, 0X9F, 0X3F, 0X80, 0X1F, 0XC1, 0XFF, + 0XFF, 0XFE, 0X3F, 0XE3, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0X3E, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0X3F, 0XE3, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0X3E, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0X3F, 0XE3, 0X00, 0X01, 0XFF, 0XE0, 0X00, 0X0C, 0X67, 0X39, 0X8C, 0X00, 0X01, 0XFF, + 0XFF, 0XFE, 0X3F, 0XE3, 0X00, 0X01, 0XFF, 0XE0, 0X00, 0X0C, 0X67, 0X39, 0X8C, 0X00, 0X01, 0XFF, + 0XFF, 0XFE, 0X00, 0X03, 0X00, 0X01, 0XFF, 0XE0, 0X00, 0X0C, 0X67, 0X39, 0X8C, 0X00, 0X01, 0XFF, + 0XFF, 0XFE, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0X8C, 0X60, 0XC6, 0X7C, 0X7F, 0XF9, 0XFF, + 0XFF, 0XFE, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0X8C, 0X60, 0XC6, 0X7C, 0X7F, 0XF9, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X3F, 0XFF, 0XE7, 0X01, 0X8F, 0X9F, 0X3F, 0XFC, 0X60, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X0F, 0XFF, 0XE7, 0X01, 0X8F, 0X9F, 0X3F, 0XFC, 0X60, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X07, 0XFF, 0XE7, 0X01, 0X8F, 0XE0, 0XC1, 0XFC, 0X60, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X87, 0XC3, 0XFF, 0XE7, 0X01, 0X8F, 0XE0, 0XC1, 0XFC, 0X60, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XE3, 0XFF, 0XE7, 0X01, 0X8F, 0XE0, 0XC1, 0XFC, 0X60, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X0F, 0XE1, 0XFF, 0XE7, 0X01, 0X8F, 0X87, 0XC6, 0X0C, 0X60, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0XF1, 0XFF, 0XE7, 0X01, 0X8F, 0X87, 0XC6, 0X0C, 0X60, 0X39, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0XF1, 0XFF, 0XE7, 0XFF, 0X8C, 0X00, 0XC7, 0XFC, 0X7F, 0XF9, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0XF1, 0XFF, 0XE7, 0XFF, 0X8C, 0X00, 0XC7, 0XFC, 0X7F, 0XF9, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0XF1, 0XFF, 0XE7, 0XFF, 0X8C, 0X00, 0XC7, 0XFC, 0X7F, 0XF9, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0XF1, 0XFF, 0XE0, 0X00, 0X0C, 0X67, 0X00, 0X0C, 0X00, 0X01, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X0F, 0XE1, 0XFF, 0XE0, 0X00, 0X0C, 0X67, 0X00, 0X0C, 0X00, 0X01, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0X00, 0X03, 0X87, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0X00, 0X03, 0XC0, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0X00, 0X03, 0XE0, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X8F, 0XFF, 0XF8, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF3, 0XF3, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF3, 0XFB, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF3, 0XF3, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XFF, 0XE0, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X0F, 0XFF, 0XF8, 0X7F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X1F, 0XFF, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFB, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, + 0XFB, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, + 0XF9, 0XFF, 0XFF, 0XFF, 0XF3, 0XFF, 0XFF, 0XFF, 0XFE, 0X1F, 0XFF, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, + 0XF9, 0XFF, 0XFF, 0XFF, 0XF3, 0XFF, 0XFF, 0XFF, 0XFF, 0X0F, 0XFF, 0XF8, 0X7F, 0XFF, 0XFF, 0XFF, + 0XF8, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0X81, 0XFF, 0XE0, 0X7F, 0XFF, 0XFF, 0XFF, + 0XF8, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X7F, 0XFF, 0XFF, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X7F, 0XFF, 0XFF, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X3F, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X3F, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X1F, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X1F, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X0F, 0XFF, 0XFE, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X07, 0XFF, 0XFF, 0XC1, 0XFF, + 0XF8, 0X0F, 0XFF, 0XFE, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XF8, 0X03, 0XFF, 0XFF, 0XBC, 0X7F, + 0XF8, 0X07, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0X30, 0X00, 0XFF, 0XFF, 0XBF, 0XFF, + 0XF8, 0X07, 0XFF, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X21, 0XF0, 0XFF, 0XFF, 0XBF, 0XFF, + 0XF8, 0X03, 0XFF, 0XF8, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X0F, 0X03, 0XFC, 0X7F, 0XFF, 0XDF, 0XFF, + 0XF8, 0X03, 0XFF, 0XF8, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0X87, 0XFC, 0X7F, 0XFF, 0XC3, 0XFF, + 0XF8, 0X01, 0XFF, 0XF0, 0X03, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0X87, 0XFE, 0X3F, 0XFF, 0XBC, 0X7F, + 0XF8, 0X01, 0XFF, 0XF0, 0X03, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XC7, 0XFE, 0X3F, 0XFF, 0XBF, 0XFF, + 0XF8, 0X00, 0XFF, 0XE0, 0X03, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XC7, 0XFE, 0X3F, 0XFF, 0XBF, 0XFF, + 0XF8, 0X00, 0XFF, 0XE0, 0X03, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XC7, 0XFE, 0X3F, 0XFF, 0XDF, 0XFF, + 0XF8, 0X00, 0X7F, 0XC0, 0X03, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XE7, 0XFE, 0X3F, 0XFF, 0X83, 0XFF, + 0XF8, 0X00, 0X7F, 0XC0, 0X03, 0XFF, 0XFF, 0XFF, 0XFE, 0X1F, 0XFF, 0XFC, 0X3F, 0XFF, 0XFC, 0X7F, + 0XF8, 0X00, 0X3F, 0X80, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0XFF, 0XFC, 0X7F, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X3F, 0X80, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X07, 0XFF, 0XF0, 0X7F, 0XFF, 0XC1, 0XFF, + 0XF8, 0X00, 0X1F, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XC0, 0XFF, 0XFF, 0XBE, 0XFF, + 0XF8, 0X00, 0X1F, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, 0XC3, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X0E, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XF3, 0XFF, 0XCF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X0E, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X04, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0X7F, + 0XF8, 0X00, 0X04, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBD, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0X9F, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XCF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XF8, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XF0, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X06, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0X01, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0XF9, 0XBF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, + 0XF8, 0X3C, 0X00, 0X03, 0XC3, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFF, 0X7F, 0XFF, 0XFF, 0XFC, 0X00, 0X3F, 0XFF, 0XFF, 0XBF, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0X07, 0XFF, 0XFF, 0XE0, 0X00, 0X07, 0XFF, 0XFF, 0XCF, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0X01, 0XFF, 0XFF, 0XC0, 0X00, 0X01, 0XFF, 0XFF, 0XF3, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0XF1, 0XFF, 0XFF, 0X87, 0XE3, 0XC0, 0XFF, 0XFF, 0XFD, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0XFF, 0XFF, 0XFF, 0X1F, 0XF1, 0XF8, 0XFF, 0XFF, 0XFE, 0X7F, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFF, 0X7F, 0XFF, 0XFF, 0X1F, 0XF8, 0XFC, 0X7F, 0XFF, 0XF0, 0X9F, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0X0F, 0XFF, 0XFE, 0X3F, 0XFC, 0XFC, 0X3F, 0XFF, 0X8F, 0XEF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0X01, 0XFF, 0XFE, 0X3F, 0XFC, 0X7E, 0X3F, 0XFF, 0XFF, 0XEF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFF, 0XF1, 0XFF, 0XFE, 0X3F, 0XFC, 0X7E, 0X3F, 0XFF, 0XC7, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFC, 0X7E, 0X3F, 0XFF, 0XB0, 0X7F, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFF, 0X07, 0XFF, 0XFE, 0X3F, 0XFC, 0X7E, 0X3F, 0XFF, 0XB6, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0X01, 0XFF, 0XFE, 0X1F, 0XF8, 0X7E, 0X3F, 0XFF, 0XB7, 0X7F, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0XF9, 0XFF, 0XFF, 0X0F, 0XF8, 0XFC, 0X7F, 0XFF, 0XB7, 0X7F, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0XFF, 0XFF, 0XFF, 0X07, 0XE0, 0XF8, 0X7F, 0XFF, 0XDB, 0X7F, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFF, 0X7F, 0XFF, 0XFF, 0X80, 0X01, 0XE0, 0XFF, 0XFE, 0X38, 0XFF, + 0XF8, 0X3C, 0X1E, 0X03, 0XC3, 0XFE, 0X07, 0XFF, 0XFF, 0XE0, 0X03, 0XE1, 0XFF, 0XFF, 0XC1, 0XFF, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFE, 0X01, 0XFF, 0XFF, 0XF8, 0X0F, 0XE7, 0XFF, 0XFF, 0XFE, 0X7F, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFE, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC3, 0XFF, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBC, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0X7F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X8E, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0XC7, 0XFF, 0XFF, 0XF0, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0X3F, 0XBF, 0XFF, 0XFF, 0XF3, 0X83, 0XFF, 0XFF, 0XFF, 0X0F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFF, 0X00, 0X3F, 0XFF, 0XFF, 0XE7, 0XB9, 0XFF, 0XFF, 0XDF, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFF, 0XC0, 0XFF, 0XFF, 0XFF, 0XEF, 0X3D, 0XFF, 0XFF, 0XB8, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFF, 0X0B, 0XFE, 0X23, 0XFF, 0XC0, 0X00, 0X7F, 0XFF, 0XB3, 0X7F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0X09, 0XFC, 0X21, 0XFF, 0XEF, 0X7D, 0XFF, 0XFF, 0XB7, 0X7F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0XED, 0XFD, 0XDC, 0XFF, 0XE7, 0X79, 0XFF, 0XFF, 0XA7, 0X7F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0XED, 0XFD, 0XDE, 0XFF, 0XF0, 0X63, 0XFF, 0XFF, 0XCF, 0X7F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0X6D, 0XFC, 0X0E, 0XFF, 0XF8, 0XE7, 0XFF, 0XFE, 0XFC, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFF, 0X01, 0XFE, 0X20, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFF, 0X83, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0X3D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X81, 0XFF, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFE, 0X1D, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDC, 0X7F, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFE, 0X8D, 0XFC, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0XFF, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFE, 0XC5, 0XFE, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X3F, 0XFF, 0XFF, 0XC3, 0XFE, 0XE1, 0XFE, 0X78, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0XF1, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XF9, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0XC3, 0XFA, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFE, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, + 0XF8, 0X00, 0X00, 0X0F, 0XC3, 0XFF, 0XF1, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, + 0XF8, 0X00, 0X00, 0X3F, 0XC3, 0XFD, 0XFF, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0XFF, + 0XF8, 0X00, 0X01, 0XFF, 0X83, 0XF9, 0XE7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3B, 0XFF, + 0XF8, 0X00, 0X07, 0XFE, 0X03, 0XFB, 0XC3, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X81, 0XFF, + 0XF8, 0X00, 0X1F, 0XF0, 0X03, 0XFB, 0X8D, 0XFC, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDC, 0X7F, + 0XF8, 0X00, 0X7F, 0XE0, 0X03, 0XFB, 0X9D, 0XFE, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0XFF, + 0XF8, 0X01, 0XFF, 0XE0, 0X03, 0XFA, 0X1D, 0XFE, 0X78, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X0F, 0XFD, 0XE0, 0X03, 0XFC, 0X3D, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X3F, 0XF1, 0XE0, 0X03, 0XFE, 0X79, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0X7F, + 0XF8, 0X3F, 0X81, 0XE0, 0X03, 0XFF, 0XFB, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0XFF, + 0XF8, 0X3E, 0X01, 0XE0, 0X03, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X3C, 0X01, 0XE0, 0X03, 0XFF, 0XFF, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0XFF, + 0XF8, 0X3C, 0X01, 0XE0, 0X03, 0XFF, 0XFF, 0XFC, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0XFF, + 0XF8, 0X3F, 0X01, 0XE0, 0X03, 0XFF, 0XFF, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X3F, 0XE1, 0XE0, 0X03, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X0F, 0XF9, 0XE0, 0X03, 0XFF, 0X0B, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X01, 0XFF, 0XE0, 0X03, 0XFE, 0X09, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0X7F, + 0XF8, 0X00, 0X7F, 0XE0, 0X03, 0XFE, 0XED, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, + 0XF8, 0X00, 0X1F, 0XF0, 0X03, 0XFE, 0XED, 0XFD, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X07, 0XFE, 0X03, 0XFE, 0X6D, 0XFD, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0XFF, + 0XF8, 0X00, 0X01, 0XFF, 0X83, 0XFF, 0X01, 0XFD, 0XF0, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0XFF, + 0XF8, 0X00, 0X00, 0X3F, 0XC3, 0XFF, 0X83, 0XFD, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X00, 0X0F, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X00, 0X03, 0XC3, 0XFF, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0XC3, 0XFE, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0XF9, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0XFF, 0XFF, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X78, 0X03, 0XFF, 0X7F, 0XFE, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X01, 0X80, 0XFE, 0X03, 0XFE, 0X0F, 0XFC, 0X81, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDC, 0X3F, + 0XF8, 0X07, 0X81, 0XFF, 0X03, 0XFE, 0X01, 0XFD, 0XBC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0X5F, + 0XF8, 0X0F, 0X83, 0XFF, 0X03, 0XFB, 0XF1, 0XFD, 0XBE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X6F, + 0XF8, 0X0F, 0X83, 0X8F, 0X83, 0XFA, 0X0F, 0XFE, 0X0E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBF, 0X6F, + 0XF8, 0X1F, 0X07, 0X87, 0X83, 0XFE, 0X01, 0XFE, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0X6F, + 0XF8, 0X1E, 0X07, 0X07, 0XC3, 0XFF, 0XF1, 0XFF, 0X81, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0XEF, + 0XF8, 0X3E, 0X07, 0X03, 0XC3, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, + 0XF8, 0X3C, 0X07, 0X03, 0XC3, 0XF8, 0X0F, 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X3C, 0X06, 0X03, 0XC3, 0XFE, 0X01, 0XFC, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, + 0XF8, 0X3C, 0X0E, 0X03, 0XC3, 0XFF, 0XF1, 0XFD, 0XC0, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, + 0XF8, 0X3C, 0X0E, 0X03, 0XC3, 0XFE, 0XFF, 0XFD, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, + 0XF8, 0X3C, 0X0E, 0X03, 0XC3, 0XFC, 0XFD, 0XFC, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XFF, + 0XF8, 0X3C, 0X0E, 0X03, 0XC3, 0XFE, 0X0D, 0XFE, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, + 0XF8, 0X3C, 0X0C, 0X03, 0XC3, 0XFE, 0X01, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X3C, 0X1C, 0X07, 0XC3, 0XFE, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, 0XFF, + 0XF8, 0X1E, 0X1C, 0X07, 0X83, 0XFE, 0X1F, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, + 0XF8, 0X1F, 0X3C, 0X0F, 0X83, 0XFE, 0X01, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, + 0XF8, 0X1F, 0XF8, 0X1F, 0X83, 0XFF, 0XE1, 0XFC, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X0F, 0XF8, 0X3F, 0X03, 0XFF, 0XFB, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, + 0XF8, 0X07, 0XF0, 0X3E, 0X03, 0XFF, 0XFD, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, + 0XF8, 0X03, 0XC0, 0X3C, 0X03, 0XFE, 0X1D, 0XFF, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XFF, + 0XF8, 0X00, 0X00, 0X30, 0X03, 0XFE, 0X01, 0XFC, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XE3, 0XFD, 0XE1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFD, 0XF6, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0X1F, 0XFC, 0XF6, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X07, 0XFE, 0X04, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XF9, 0XE3, 0XFF, 0X0D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XFB, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XFD, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XFD, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFB, 0XFD, 0XFD, 0X0F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFD, 0XFD, 0XFD, 0XC3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFC, 0X79, 0XFD, 0XF0, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFE, 0X03, 0XFD, 0XFC, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0X87, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +#endif diff --git a/src/GxGDEW029T5/BitmapWaveshare.h b/src/GxGDEW029T5/BitmapWaveshare.h new file mode 100644 index 0000000..893e608 --- /dev/null +++ b/src/GxGDEW029T5/BitmapWaveshare.h @@ -0,0 +1,210 @@ +/** + * @filename : imagedata.cpp + * @brief : data file for epd demo + * + * Copyright (C) Waveshare August 22 2017 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documnetation 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 + * furished 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 OR 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. + */ +#ifndef _BitmapWaveshare_H_ +#define _BitmapWaveshare_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + +const unsigned char BitmapExample1[2762] PROGMEM = { /* 0X00,0X01,0X68,0X00,0XD4,0X00, */ + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, + 0XFC,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0X1C,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X9C,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X18,0X07,0XDC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X38,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X74,0X06,0X7C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X66,0X06,0X7C, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X66,0X02,0X7C,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XE4,0X00,0X3C,0X00,0X00,0X01,0X80,0X00,0X00, + 0X00,0X00,0X00,0X01,0XC0,0X00,0X3C,0X00,0X0E,0X01,0X80,0X00,0X00,0X00,0X00,0X00, + 0X7F,0XC0,0X00,0X3C,0X00,0X0E,0X01,0X80,0X00,0X00,0X00,0X00,0X1F,0XC0,0X00,0X00, + 0X7C,0X00,0X0E,0XE1,0X80,0X00,0X00,0X00,0X00,0X3F,0X00,0X00,0X00,0X7C,0X00,0X0E, + 0XE1,0X80,0X00,0X00,0X00,0X00,0X3C,0X00,0X00,0X00,0XFC,0X00,0X0E,0XE1,0X80,0X00, + 0X00,0X00,0X00,0X70,0X00,0X00,0X00,0XFC,0X00,0X0E,0XE1,0X80,0X00,0X04,0X00,0X00, + 0XC0,0X00,0X00,0X00,0XFC,0X00,0X0E,0XE1,0X80,0X00,0X04,0X00,0X01,0XC0,0X00,0X00, + 0X01,0XFC,0X00,0X0E,0XE1,0X80,0X00,0X0C,0X00,0X07,0X80,0X00,0X00,0X01,0XFC,0X00, + 0X0E,0XE1,0X80,0X00,0X1E,0X00,0X0F,0X00,0X00,0X00,0X03,0XDC,0X00,0X0E,0XE1,0X80, + 0X00,0X1E,0X00,0X3C,0X00,0X00,0X00,0X3F,0X1C,0X00,0X0E,0XE1,0X80,0X00,0X3B,0X00, + 0X78,0X00,0X00,0X00,0XFE,0X1C,0X00,0X0F,0XE1,0X80,0X00,0X3B,0X00,0X70,0X00,0X00, + 0X01,0XFE,0X1E,0X00,0X0F,0XFF,0X80,0X00,0X33,0X00,0X70,0X00,0X00,0X07,0XF8,0X1E, + 0X00,0X0F,0XFF,0X80,0X00,0X33,0X00,0X7C,0X00,0X00,0X07,0XC0,0X0E,0X00,0X0F,0XFF, + 0X80,0X00,0X73,0X00,0X3F,0XFF,0XC0,0X07,0XFF,0XCE,0X00,0X00,0X00,0X00,0X00,0X63, + 0X00,0X1F,0XFF,0XC0,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X63,0X00,0X1F,0XFF, + 0XC0,0X00,0XFF,0XFF,0X00,0X07,0XF0,0X80,0X00,0X63,0X00,0XFF,0X80,0X00,0X00,0X00, + 0XF7,0X80,0X07,0XF0,0X80,0X00,0X63,0X00,0XFE,0X00,0X00,0X00,0X00,0X7F,0X80,0X07, + 0XF9,0X80,0X00,0X63,0X01,0XF8,0X00,0X00,0X00,0X00,0X3F,0X80,0X0E,0X3B,0X80,0X00, + 0X63,0X03,0XE0,0X00,0X00,0X00,0X00,0X3F,0X80,0X0E,0X3F,0X80,0X00,0X63,0X07,0X80, + 0X00,0X00,0X00,0X00,0X1F,0X80,0X0E,0X3F,0X00,0X00,0X63,0X0F,0X00,0X00,0X00,0X00, + 0X00,0X1F,0X80,0X0E,0X3F,0X00,0X00,0X63,0X1E,0X00,0X00,0X00,0X00,0X00,0X0F,0X80, + 0X0E,0X3E,0X00,0X00,0X63,0XFC,0X00,0X00,0X00,0X00,0X00,0X0F,0X80,0X0E,0X3C,0X00, + 0X00,0X67,0XF8,0X00,0X00,0X00,0X00,0X00,0X0F,0X80,0X0E,0X3C,0X00,0X00,0X67,0XF0, + 0X00,0X00,0X00,0X00,0X00,0X0F,0X80,0X0E,0X3C,0X00,0X00,0X67,0XE0,0X00,0X00,0X00, + 0X00,0X00,0X0F,0X80,0X0E,0X38,0X00,0X00,0X7F,0XC0,0X00,0X00,0X00,0X00,0X00,0X1F, + 0X80,0X0E,0X38,0X00,0X00,0X7F,0XC0,0X00,0X00,0X00,0X00,0X00,0X1C,0X00,0X0E,0X78, + 0X00,0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X1C,0X00,0X0F,0XFF,0X80,0X00,0X7F, + 0X00,0X00,0X00,0X00,0X07,0XFF,0XF8,0X00,0X0F,0XFF,0X80,0X00,0X3F,0X00,0X00,0X00, + 0X00,0X3F,0X01,0XF0,0X00,0X0F,0XFF,0X00,0X00,0X3F,0X00,0X00,0X00,0X00,0XF8,0X01, + 0XE0,0X00,0X00,0X00,0X00,0X00,0X3E,0X00,0X00,0X00,0X07,0XE0,0X00,0XF0,0X00,0X00, + 0X00,0X00,0X00,0X1E,0X00,0X00,0X00,0X0F,0X80,0X00,0X78,0X00,0X07,0XFF,0X80,0X00, + 0X1E,0X00,0X00,0X00,0X1F,0X00,0X00,0X3C,0X00,0X07,0XFF,0X80,0X00,0X1E,0X00,0X00, + 0X00,0X1E,0X00,0X00,0X1E,0X00,0X07,0XFF,0X80,0X00,0X0E,0X00,0X00,0X00,0X18,0X00, + 0X00,0X07,0X00,0X0F,0X18,0X00,0X00,0X06,0X00,0X00,0X00,0X18,0X00,0X00,0X07,0X80, + 0X0E,0X18,0X00,0X00,0X07,0X00,0X00,0X00,0X70,0X00,0X00,0X07,0X80,0X0E,0X18,0X00, + 0X00,0X07,0X00,0X00,0X01,0XE0,0X00,0X00,0X03,0X80,0X0E,0X18,0X00,0X00,0X07,0X00, + 0X00,0X0F,0XE0,0X00,0X00,0X03,0X80,0X0E,0X18,0X00,0X00,0X03,0X80,0X00,0X3F,0XF0, + 0X00,0X00,0X03,0X80,0X0E,0X18,0X00,0X00,0X03,0X80,0X00,0X00,0X3F,0X00,0X00,0X03, + 0X80,0X0E,0X18,0X00,0X00,0X03,0XC0,0X00,0X00,0X3F,0X00,0X00,0X03,0X80,0X0E,0X18, + 0X00,0X00,0X03,0XC0,0X00,0X00,0X3E,0X00,0X00,0X07,0X80,0X0F,0X18,0X00,0X00,0X01, + 0XE0,0X00,0X00,0X3C,0X04,0X00,0X07,0X80,0X07,0XFF,0X80,0X00,0X01,0XE0,0X00,0X00, + 0X3C,0X04,0X00,0X07,0X80,0X07,0XFF,0X80,0X00,0X00,0XF0,0X00,0X00,0X1C,0X1C,0X60, + 0X07,0X80,0X03,0XFF,0X80,0X00,0X00,0XF0,0X00,0X00,0X1E,0X3F,0XF0,0X07,0X80,0X00, + 0X00,0X00,0X00,0X00,0X7F,0XF8,0X00,0X1F,0X7F,0XF0,0X07,0X80,0X00,0X00,0X00,0X00, + 0X00,0X7F,0XFF,0X80,0X1F,0XFF,0XF0,0X07,0X80,0X0F,0XFF,0X80,0X00,0X00,0X3F,0XFF, + 0XC0,0X0F,0XFF,0XE0,0X07,0X80,0X0F,0XFF,0X80,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X7C, + 0XC0,0X07,0X80,0X0F,0XFF,0X80,0X00,0X00,0X03,0XFF,0XF8,0X00,0X18,0XE0,0X07,0X80, + 0X00,0XE0,0X00,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0XF0,0X07,0X80,0X00,0XE0,0X00, + 0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0XF0,0X0F,0X00,0X00,0XE0,0X00,0X00,0X00,0X00, + 0XFF,0XFF,0X80,0X00,0XF0,0X0E,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X7F,0XFF,0XE0, + 0X00,0XF0,0X0E,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0,0X00,0XF0,0X0E, + 0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X00,0XFF,0XE0,0X00,0XF0,0X0E,0X00,0X00,0XE0, + 0X00,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0XF0,0X06,0X00,0X00,0XE0,0X00,0X00,0X00, + 0X00,0X00,0X07,0XF0,0X00,0XF0,0X07,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X00,0X01, + 0XF0,0X00,0XF0,0X07,0X80,0X00,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X98,0X00,0XF0, + 0X07,0X80,0X0F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X1C,0X01,0XF0,0X07,0X80,0X0F, + 0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X1E,0X01,0XF0,0X07,0X00,0X0F,0XFF,0X80,0X00, + 0X00,0X00,0X00,0X00,0X0F,0X81,0XF0,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X07,0X81,0XF0,0X0E,0X00,0X00,0X1E,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X81, + 0XF0,0X0E,0X00,0X0C,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC1,0XF0,0X0E,0X00, + 0X0E,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0XE0,0X0F,0X00,0X0E,0XE3,0X80, + 0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0X07,0X00,0X0E,0XE3,0X80,0X00,0X00,0X00, + 0X00,0X00,0X00,0XE0,0X00,0X07,0X80,0X0E,0XE3,0X80,0X00,0X00,0X00,0X00,0X00,0X00, + 0X60,0X00,0X07,0X80,0X0E,0XE3,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X00,0X07, + 0X80,0X0E,0XE3,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X00,0X07,0X80,0X0E,0XE3, + 0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X70,0X00,0X0F,0X00,0X0E,0XE3,0X80,0X00,0X00, + 0X00,0X00,0X00,0X00,0XF0,0X00,0X0E,0X00,0X0E,0XE3,0X80,0X00,0X00,0X00,0X00,0X01, + 0XFF,0XFF,0XC0,0X0E,0X00,0X0E,0XE3,0X80,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF8, + 0X0E,0X00,0X0F,0XE3,0X80,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFC,0X0F,0X00,0X07, + 0XE3,0X80,0X00,0X00,0X00,0X0F,0XFC,0X00,0X03,0XFF,0XFF,0X00,0X07,0XE3,0X80,0X00, + 0X00,0X00,0X3F,0XE0,0X7F,0XFC,0X7F,0XFF,0X80,0X07,0XC3,0X80,0X00,0X00,0X00,0XFF, + 0XCF,0XFF,0XFF,0XE7,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X3F,0XFF,0XFF, + 0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0XFF,0XFF,0XFF,0XFE,0XFF,0X80, + 0X0E,0X01,0X80,0X00,0X00,0X0F,0X81,0XFF,0XFF,0XFF,0XFE,0X7F,0X00,0X0E,0X01,0X80, + 0X00,0X00,0X1F,0X00,0XFF,0XFF,0XFF,0XFE,0X3E,0X00,0X0E,0XE1,0X80,0X00,0X00,0X7E, + 0X00,0XFF,0XFF,0XFF,0XFF,0XBE,0X00,0X0E,0XE1,0X80,0X00,0X00,0XFC,0X01,0XFF,0X7F, + 0XFF,0XFF,0XC7,0X80,0X0E,0XE1,0X80,0X00,0X01,0XF8,0X00,0XFE,0X3F,0XFF,0XFF,0XC3, + 0X80,0X0E,0XE1,0X80,0X00,0X03,0XF0,0X00,0X7F,0XFF,0XFF,0XFF,0XE3,0X80,0X0E,0XE1, + 0X80,0X00,0X03,0XE0,0X00,0XFF,0XFF,0XFF,0XFF,0XF1,0X80,0X0E,0XE1,0X80,0X00,0X03, + 0XC0,0X01,0XFF,0XFF,0XFF,0XFF,0XF1,0XC0,0X0E,0XE1,0X80,0X00,0X03,0X80,0X03,0XFF, + 0XFF,0XFF,0XFF,0XF8,0XE0,0X0E,0XE1,0X80,0X00,0X07,0X00,0X01,0XFF,0XFF,0XFF,0XFF, + 0XFC,0XE0,0X0E,0XE1,0X80,0X00,0X0E,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFE,0X70,0X0F, + 0XE1,0X80,0X00,0X1C,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFE,0X70,0X0F,0XE1,0X80,0X00, + 0X1C,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XF0,0X0F,0XFF,0X80,0X00,0X3C,0X00,0X00, + 0X20,0X7F,0XFF,0XFF,0XFF,0XF0,0X0F,0XFF,0X80,0X00,0X3C,0X00,0X00,0X30,0X1F,0XFF, + 0XFF,0XFF,0XF0,0X0F,0XFF,0X80,0X00,0X3C,0X00,0X00,0X38,0X0F,0XFF,0XFF,0XFF,0XF0, + 0X00,0X00,0X00,0X00,0X38,0X00,0X00,0X1E,0X03,0XFF,0XFF,0XFF,0XF0,0X0C,0X00,0X00, + 0X00,0X78,0X00,0X00,0X0F,0XE0,0X7F,0XFF,0XFE,0XF0,0X0E,0X00,0X00,0X00,0X70,0X00, + 0X00,0X01,0XFC,0X00,0X0F,0XF9,0X80,0X07,0X80,0X00,0X00,0XF0,0X00,0X00,0X00,0X7F, + 0XC0,0X01,0XE7,0X80,0X07,0XC0,0X00,0X00,0XE0,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X3F, + 0X00,0X01,0XE0,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFE,0X00,0X00,0XF8, + 0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFE,0X00,0X00,0X7C,0X00,0X00,0XF0, + 0X00,0X00,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X1F,0X00,0X00,0XF0,0X00,0X00,0X00, + 0X00,0X00,0X00,0X1C,0X00,0X00,0X0F,0X80,0X00,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, + 0X1C,0X00,0X00,0X07,0X80,0X00,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X00,0X00, + 0X1F,0X00,0X00,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X00,0X00,0X3E,0X00,0X00, + 0X78,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X00,0X00,0XF8,0X00,0X00,0X78,0X00,0X00, + 0X00,0X00,0X00,0X00,0X1C,0X00,0X01,0XF0,0X00,0X00,0X7C,0X00,0X00,0X00,0X00,0X00, + 0X00,0X1C,0X00,0X07,0XE0,0X00,0X00,0X3C,0X00,0X00,0X00,0X00,0X00,0X00,0X1C,0X00, + 0X0F,0X80,0X00,0X00,0X1C,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X00,0X0E,0X00,0X00, + 0X00,0X1C,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X00,0X0C,0X00,0X00,0X00,0X0E,0X00, + 0X00,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X07,0X00,0X00,0X00,0X00, + 0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X0C, + 0X00,0X03,0XFF,0X00,0X00,0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X0C,0X00,0X07,0XFF, + 0X80,0X00,0X03,0XC0,0X00,0X07,0X00,0X00,0X00,0X0C,0X00,0X07,0XFF,0X80,0X00,0X01, + 0XF0,0X00,0X0F,0X00,0X00,0X00,0X0C,0X00,0X07,0X3B,0X00,0X00,0X00,0X78,0X00,0X3F, + 0X00,0X00,0X00,0X0E,0X00,0X0E,0X18,0X00,0X00,0X00,0X3C,0X00,0X3E,0X00,0X00,0X00, + 0X0E,0X00,0X0E,0X18,0X00,0X00,0X00,0X0F,0X00,0X7C,0X00,0X00,0X00,0X0E,0X00,0X0E, + 0X18,0X00,0X00,0X00,0X07,0X00,0XF8,0X00,0X00,0X00,0X0E,0X00,0X0E,0X18,0X00,0X00, + 0X00,0X07,0X01,0XF0,0X00,0X00,0X00,0X0E,0X00,0X0E,0X18,0X00,0X00,0X00,0X03,0X01, + 0XC0,0X00,0X00,0X00,0X0E,0X00,0X0E,0X18,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00, + 0X00,0X0E,0X00,0X0E,0X18,0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X00,0X00,0X0E,0X00, + 0X0E,0X18,0X00,0X00,0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X0E,0X00,0X0F,0X18,0X00, + 0X00,0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X0E,0X00,0X07,0XFF,0X80,0X00,0X00,0X00, + 0XC0,0X00,0X00,0X00,0X00,0X0E,0X00,0X07,0XFF,0X80,0X00,0X00,0X00,0XE0,0X00,0X00, + 0X00,0X00,0X0E,0X00,0X03,0XFF,0X80,0X00,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X0E, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X0E,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0XE0,0X00,0X00,0X00,0X00,0X0F,0X00,0X0F,0XFF,0X00,0X00,0X00, + 0X00,0XE0,0X00,0X00,0X00,0X00,0X0F,0X80,0X0F,0XFF,0X80,0X00,0X00,0X00,0XF0,0X00, + 0X00,0X00,0X00,0X0F,0X80,0X0F,0XFF,0X80,0X00,0X00,0X00,0XF0,0X00,0X00,0X00,0X00, + 0X0F,0X80,0X00,0X07,0X80,0X00,0X00,0X00,0XF0,0X00,0X00,0X00,0X00,0X0F,0X80,0X00, + 0X03,0X80,0X00,0X00,0X00,0XF0,0X00,0X00,0X00,0X00,0X0F,0X80,0X00,0X03,0X80,0X00, + 0X00,0X00,0X70,0X00,0X00,0X00,0X00,0X0F,0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X78, + 0X00,0X00,0X00,0X00,0X0F,0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X38,0X00,0X00,0X00, + 0X00,0X0F,0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X3C,0X00,0X00,0X00,0X00,0X0F,0X80, + 0X00,0X03,0X80,0X00,0X00,0X00,0X3C,0X00,0X00,0X00,0X00,0X0F,0X80,0X0F,0XFF,0X80, + 0X00,0X00,0X00,0X3C,0X00,0X00,0X00,0X00,0X1F,0X80,0X0F,0XFF,0X80,0X00,0X00,0X00, + 0X3C,0X00,0X00,0X00,0X00,0X1F,0X80,0X0F,0XFF,0X80,0X00,0X00,0X00,0X1E,0X00,0X00, + 0X00,0X00,0X1F,0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X1F,0X00,0X00,0X00,0X00,0X1F, + 0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X0F,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0X03, + 0X80,0X00,0X00,0X00,0X07,0X80,0X00,0X00,0X00,0X3F,0X80,0X00,0X03,0X80,0X00,0X00, + 0X00,0X07,0X80,0X00,0X00,0X00,0X3F,0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X07,0XC0, + 0X00,0X00,0X00,0X3B,0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X03,0XC0,0X00,0X00,0X00, + 0X79,0X80,0X00,0X03,0X80,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X00,0X7B,0X80,0X00, + 0X07,0X80,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X00,0XF3,0X80,0X0F,0XFF,0X80,0X00, + 0X00,0X00,0X00,0XF0,0X00,0X00,0X01,0XF3,0X80,0X0F,0XFF,0X00,0X00,0X00,0X00,0X00, + 0X38,0X00,0X00,0X01,0XE3,0X80,0X0F,0XFE,0X00,0X00,0X00,0X00,0X00,0X3C,0X00,0X00, + 0X01,0XE3,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3E,0X00,0X00,0X01,0XC3,0X80, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X80,0X00,0X01,0X83,0X80,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X0F,0XC0,0X00,0X03,0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X07,0XE0,0X00,0X07,0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF0, + 0X00,0X1E,0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XC3, + 0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XE3,0X80,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XDF,0XE3,0X80,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X03,0X8F,0XF3,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X03,0X0F,0XF3,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X87, + 0XF3,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC7,0XF3,0X80,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF3,0XE3,0X80,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XE3,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X7F,0X83,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X3F,0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, + 0X00,0X00,0X00,0X00, +}; + +#endif diff --git a/src/GxGDEW029T5/GxGDEW029T5.cpp b/src/GxGDEW029T5/GxGDEW029T5.cpp new file mode 100644 index 0000000..a2ea28b --- /dev/null +++ b/src/GxGDEW029T5/GxGDEW029T5.cpp @@ -0,0 +1,1003 @@ +// class GxGDEW029T5 : Display class for GDEW029T5 e-Paper from Dalian Good Display Co., Ltd.: http://www.e-paper-display.com/products_detail/productId=397.html +// +// based on Demo Example from Good Display, available here: http://www.e-paper-display.com/download_detail/downloadsId=597.html +// Controller: IL0373 : http://www.e-paper-display.com/download_detail/downloadsId=535.html +// +// Author : J-M Zingg +// +// Version : see library.properties +// +// License: GNU GENERAL PUBLIC LICENSE V3, see LICENSE +// +// Library: https://github.com/ZinggJM/GxEPD + +#include "GxGDEW029T5.h" + +//#define DISABLE_DIAGNOSTIC_OUTPUT + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + +//full screen update LUT +const unsigned char GxGDEW029T5::lut_20_vcomDC[] = +{ + 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x60, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_21_ww[] = +{ + 0x40, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x40, 0x14, 0x00, 0x00, 0x00, 0x01, + 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_22_bw[] = +{ + 0x40, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x40, 0x14, 0x00, 0x00, 0x00, 0x01, + 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_23_wb[] = +{ + 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x80, 0x14, 0x00, 0x00, 0x00, 0x01, + 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_24_bb[] = +{ + 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, + 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, + 0x80, 0x14, 0x00, 0x00, 0x00, 0x01, + 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +//partial screen update LUT +//#define Tx19 0x19 // original value is 25 (phase length) +#define Tx19 0x20 // new value for test is 32 (phase length) +const unsigned char GxGDEW029T5::lut_20_vcomDC_partial[] = +{ + 0x00, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_21_ww_partial[] = +{ + 0x00, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_22_bw_partial[] = +{ + 0x80, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_23_wb_partial[] = +{ + 0x40, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxGDEW029T5::lut_24_bb_partial[] = +{ + 0x00, Tx19, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +// Partial Update Delay, may have an influence on degradation +#define GxGDEW029T5_PU_DELAY 100 + +GxGDEW029T5::GxGDEW029T5(GxIO& io, int8_t rst, int8_t busy) + : GxEPD(GxGDEW029T5_WIDTH, GxGDEW029T5_HEIGHT), IO(io), + _current_page(-1), _using_partial_mode(false), _diag_enabled(false), + _rst(rst), _busy(busy) +{ +} + +void GxGDEW029T5::drawPixel(int16_t x, int16_t y, uint16_t color) +{ + if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) return; + + // check rotation, move pixel around if necessary + switch (getRotation()) + { + case 1: + swap(x, y); + x = GxGDEW029T5_WIDTH - x - 1; + break; + case 2: + x = GxGDEW029T5_WIDTH - x - 1; + y = GxGDEW029T5_HEIGHT - y - 1; + break; + case 3: + swap(x, y); + y = GxGDEW029T5_HEIGHT - y - 1; + break; + } + uint16_t i = x / 8 + y * GxGDEW029T5_WIDTH / 8; + if (_current_page < 1) + { + if (i >= sizeof(_buffer)) return; + } + else + { + y -= _current_page * GxGDEW029T5_PAGE_HEIGHT; + if ((y < 0) || (y >= GxGDEW029T5_PAGE_HEIGHT)) return; + i = x / 8 + y * GxGDEW029T5_WIDTH / 8; + } + + if (!color) + _buffer[i] = (_buffer[i] | (1 << (7 - x % 8))); + else + _buffer[i] = (_buffer[i] & (0xFF ^ (1 << (7 - x % 8)))); +} + + +void GxGDEW029T5::init(uint32_t serial_diag_bitrate) +{ + if (serial_diag_bitrate > 0) + { + Serial.begin(serial_diag_bitrate); + _diag_enabled = true; + } + IO.init(); + IO.setFrequency(4000000); // 4MHz + if (_rst >= 0) + { + digitalWrite(_rst, HIGH); + pinMode(_rst, OUTPUT); + } + pinMode(_busy, INPUT); + fillScreen(GxEPD_WHITE); + _current_page = -1; + _using_partial_mode = false; +} + +void GxGDEW029T5::fillScreen(uint16_t color) +{ + uint8_t data = (color == GxEPD_BLACK) ? 0xFF : 0x00; + for (uint16_t x = 0; x < sizeof(_buffer); x++) + { + _buffer[x] = data; + } +} + +void GxGDEW029T5::update(void) +{ + if (_current_page != -1) return; + _using_partial_mode = false; + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // 0xFF is white + } + _writeCommand(0x13); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData((i < sizeof(_buffer)) ? ~_buffer[i] : 0xFF); + } + _writeCommand(0x12); //display refresh + _waitWhileBusy("update"); + _sleep(); +} + +void GxGDEW029T5::drawBitmap(const uint8_t *bitmap, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color, int16_t mode) +{ + if (mode & bm_default) mode |= bm_invert; + drawBitmapBM(bitmap, x, y, w, h, color, mode); +} + +void GxGDEW029T5::drawBitmap(const uint8_t* bitmap, uint32_t size, int16_t mode) +{ + if (_current_page != -1) return; + //if (mode & bm_default) mode |= bm_invert; // Snoopy is inverted + // example bitmaps are made for y-decrement, x-increment, for origin on opposite corner + // bm_flip_x for normal display (bm_flip_y would be rotated) + if (mode & bm_default) mode |= bm_flip_x; + if (mode & bm_partial_update) + { + if (!_using_partial_mode) _wakeUp(); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + _setPartialRamArea(0, 0, GxGDEW029T5_WIDTH - 1, GxGDEW029T5_HEIGHT - 1); + _writeCommand(0x13); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + uint8_t data = 0xFF; // white is 0xFF on device + if (i < size) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[i]); +#else + data = bitmap[i]; +#endif + if (mode & bm_invert) data = ~data; + } + _writeData(data); + } + _writeCommand(0x12); //display refresh + _waitWhileBusy("drawBitmap"); + IO.writeCommandTransaction(0x92); // partial out + } // leave both controller buffers equal + delay(GxGDEW029T5_PU_DELAY); // don't stress this display + } + else + { + _using_partial_mode = false; + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // white is 0xFF on device + } + _writeCommand(0x13); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + uint8_t data = 0xFF; // white is 0xFF on device + if (i < size) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[i]); +#else + data = bitmap[i]; +#endif + if (mode & bm_invert) data = ~data; + } + _writeData(data); + } + _writeCommand(0x12); //display refresh + _waitWhileBusy("drawBitmap"); + _sleep(); + } +} + +void GxGDEW029T5::eraseDisplay(bool using_partial_update) +{ + if (_current_page != -1) return; + if (using_partial_update) + { + if (!_using_partial_mode) _wakeUp(); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + _setPartialRamArea(0, 0, GxGDEW029T5_WIDTH - 1, GxGDEW029T5_HEIGHT - 1); + _writeCommand(0x13); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // white is 0xFF on device + } + _writeCommand(0x12); //display refresh + _waitWhileBusy("eraseDisplay"); + IO.writeCommandTransaction(0x92); // partial out + if (_using_partial_mode) break; + } // leave both controller buffers equal + } + else + { + _using_partial_mode = false; // remember + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE * 2; i++) + { + _writeData(0xFF); // white is 0xFF on device + } + _writeCommand(0x13); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // white is 0xFF on device + } + _writeCommand(0x12); //display refresh + _waitWhileBusy("eraseDisplay"); + _sleep(); + } +} + +void GxGDEW029T5::updateWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool using_rotation) +{ + if (_current_page != -1) return; + if (using_rotation) _rotate(x, y, w, h); + if (x >= GxGDEW029T5_WIDTH) return; + if (y >= GxGDEW029T5_HEIGHT) return; + uint16_t xe = gx_uint16_min(GxGDEW029T5_WIDTH, x + w) - 1; + uint16_t ye = gx_uint16_min(GxGDEW029T5_HEIGHT, y + h) - 1; + // x &= 0xFFF8; // byte boundary, not needed here + uint16_t xs_bx = x / 8; + uint16_t xe_bx = (xe + 7) / 8; + if (!_using_partial_mode) _wakeUp(); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + _setPartialRamArea(x, y, xe, ye); + IO.writeCommandTransaction(0x13); + for (int16_t y1 = y; y1 <= ye; y1++) + { + for (int16_t x1 = xs_bx; x1 < xe_bx; x1++) + { + uint16_t idx = y1 * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; // white is 0x00 in buffer + IO.writeDataTransaction(~data); // white is 0xFF on device + } + } + IO.writeCommandTransaction(0x12); //display refresh + _waitWhileBusy("updateWindow"); + IO.writeCommandTransaction(0x92); // partial out + } // leave both controller buffers equal + delay(GxGDEW029T5_PU_DELAY); // don't stress this display +} + +void GxGDEW029T5::updateToWindow(uint16_t xs, uint16_t ys, uint16_t xd, uint16_t yd, uint16_t w, uint16_t h, bool using_rotation) +{ + if (using_rotation) + { + switch (getRotation()) + { + case 1: + swap(xs, ys); + swap(xd, yd); + swap(w, h); + xs = GxGDEW029T5_WIDTH - xs - w - 1; + xd = GxGDEW029T5_WIDTH - xd - w - 1; + break; + case 2: + xs = GxGDEW029T5_WIDTH - xs - w - 1; + ys = GxGDEW029T5_HEIGHT - ys - h - 1; + xd = GxGDEW029T5_WIDTH - xd - w - 1; + yd = GxGDEW029T5_HEIGHT - yd - h - 1; + break; + case 3: + swap(xs, ys); + swap(xd, yd); + swap(w, h); + ys = GxGDEW029T5_HEIGHT - ys - h - 1; + yd = GxGDEW029T5_HEIGHT - yd - h - 1; + break; + } + } + if (xs >= GxGDEW029T5_WIDTH) return; + if (ys >= GxGDEW029T5_HEIGHT) return; + if (xd >= GxGDEW029T5_WIDTH) return; + if (yd >= GxGDEW029T5_HEIGHT) return; + // the screen limits are the hard limits + uint16_t xde = gx_uint16_min(GxGDEW029T5_WIDTH, xd + w) - 1; + uint16_t yde = gx_uint16_min(GxGDEW029T5_HEIGHT, yd + h) - 1; + if (!_using_partial_mode) _wakeUp(); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + // soft limits, must send as many bytes as set by _SetRamArea + uint16_t yse = ys + yde - yd; + uint16_t xss_d8 = xs / 8; + uint16_t xse_d8 = xss_d8 + _setPartialRamArea(xd, yd, xde, yde); + IO.writeCommandTransaction(0x13); + for (int16_t y1 = ys; y1 <= yse; y1++) + { + for (int16_t x1 = xss_d8; x1 < xse_d8; x1++) + { + uint16_t idx = y1 * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; // white is 0x00 in buffer + IO.writeDataTransaction(~data); // white is 0xFF on device + } + } + IO.writeCommandTransaction(0x12); //display refresh + _waitWhileBusy("updateToWindow"); + IO.writeCommandTransaction(0x92); // partial out + } // leave both controller buffers equal + delay(GxGDEW029T5_PU_DELAY); // don't stress this display +} + +void GxGDEW029T5::powerDown() +{ + _using_partial_mode = false; // force _wakeUp() + _sleep(); +} + +uint16_t GxGDEW029T5::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t xe, uint16_t ye) +{ + x &= 0xFFF8; // byte boundary + xe = (xe - 1) | 0x0007; // byte boundary - 1 + IO.writeCommandTransaction(0x90); // partial window + //IO.writeDataTransaction(x / 256); + IO.writeDataTransaction(x % 256); + //IO.writeDataTransaction(xe / 256); + IO.writeDataTransaction(xe % 256); + IO.writeDataTransaction(y / 256); + IO.writeDataTransaction(y % 256); + IO.writeDataTransaction(ye / 256); + IO.writeDataTransaction(ye % 256); + IO.writeDataTransaction(0x01); // don't see any difference + //IO.writeDataTransaction(0x00); // don't see any difference + return (7 + xe - x) / 8; // number of bytes to transfer per line +} + +void GxGDEW029T5::_writeCommand(uint8_t command) +{ + IO.writeCommandTransaction(command); +} + +void GxGDEW029T5::_writeData(uint8_t data) +{ + IO.writeDataTransaction(data); +} + +void GxGDEW029T5::_waitWhileBusy(const char* comment) +{ + unsigned long start = micros(); + while (1) + { + if (digitalRead(_busy) == 1) break; + delay(1); + if (micros() - start > 10000000) + { + if (_diag_enabled) Serial.println("Busy Timeout!"); + break; + } + } + if (comment) + { +#if !defined(DISABLE_DIAGNOSTIC_OUTPUT) + if (_diag_enabled) + { + unsigned long elapsed = micros() - start; + Serial.print(comment); + Serial.print(" : "); + Serial.println(elapsed); + } +#endif + } + (void) start; +} + +void GxGDEW029T5::_wakeUp() +{ + // reset required for wakeup + if (_rst >= 0) + { + digitalWrite(_rst, 0); + delay(10); + digitalWrite(_rst, 1); + delay(10); + } + + _writeCommand(0x01); //POWER SETTING + _writeData (0x03); + _writeData (0x00); + _writeData (0x2b); + _writeData (0x2b); + _writeData (0x03); + + _writeCommand(0x06); //boost soft start + _writeData (0x17); //A + _writeData (0x17); //B + _writeData (0x17); //C + + _writeCommand(0x04); + _waitWhileBusy("_wakeUp Power On"); + + _writeCommand(0x00); //panel setting + _writeData(0xbf); //LUT from register, 128x296 + _writeData(0x0d); //VCOM to 0V fast + + _writeCommand(0x30); //PLL setting + _writeData (0x3a); // 3a 100HZ 29 150Hz 39 200HZ 31 171HZ + + _writeCommand(0x61); //resolution setting + _writeData (GxGDEW029T5_WIDTH); + _writeData (GxGDEW029T5_HEIGHT >> 8); + _writeData (GxGDEW029T5_HEIGHT & 0xFF); + + _Init_FullUpdate(); +} + +void GxGDEW029T5::_sleep(void) +{ + _writeCommand(0x02); //power off + _waitWhileBusy("_sleep Power Off"); + if (_rst >= 0) + { + _writeCommand(0x07); // deep sleep + _writeData (0xa5); + } +} + +void GxGDEW029T5::_Init_FullUpdate(void) +{ + _writeCommand(0x82); //vcom_DC setting + //_writeData (0x28); + _writeData (0x08); + _writeCommand(0X50); //VCOM AND DATA INTERVAL SETTING + _writeData(0x97); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57 WBRmode:VBDF F7 VBDW 77 VBDB 37 VBDR B7 + unsigned int count; + { + _writeCommand(0x20); //vcom + for (count = 0; count < 44; count++) + { + _writeData(lut_20_vcomDC[count]); + } + + _writeCommand(0x21); //ww -- + for (count = 0; count < 42; count++) + { + _writeData(lut_21_ww[count]); + } + + _writeCommand(0x22); //bw r + for (count = 0; count < 42; count++) + { + _writeData(lut_22_bw[count]); + } + + _writeCommand(0x23); //wb w + for (count = 0; count < 42; count++) + { + _writeData(lut_23_wb[count]); + } + + _writeCommand(0x24); //bb b + for (count = 0; count < 42; count++) + { + _writeData(lut_24_bb[count]); + } + } +} + +void GxGDEW029T5::_Init_PartialUpdate(void) +{ + _writeCommand(0x82); //vcom_DC setting + _writeData (0x08); + _writeCommand(0X50); + //_writeData(0x47); + //_writeData(0x97); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57 WBRmode:VBDF F7 VBDW 77 VBDB 37 VBDR B7 + _writeData(0x17); + unsigned int count; + { + _writeCommand(0x20); //vcom + for (count = 0; count < 44; count++) + { + _writeData(lut_20_vcomDC_partial[count]); + } + + _writeCommand(0x21); //ww -- + for (count = 0; count < 42; count++) + { + _writeData(lut_21_ww_partial[count]); + } + + _writeCommand(0x22); //bw r + for (count = 0; count < 42; count++) + { + _writeData(lut_22_bw_partial[count]); + } + + _writeCommand(0x23); //wb w + for (count = 0; count < 42; count++) + { + _writeData(lut_23_wb_partial[count]); + } + + _writeCommand(0x24); //bb b + for (count = 0; count < 42; count++) + { + _writeData(lut_24_bb_partial[count]); + } + } +} + +void GxGDEW029T5::drawPaged(void (*drawCallback)(void)) +{ + if (_current_page != -1) return; + _using_partial_mode = false; + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // 0xFF is white + } + _writeCommand(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + fillScreen(GxEPD_WHITE); + drawCallback(); + for (int16_t y1 = 0; y1 < GxGDEW029T5_PAGE_HEIGHT; y1++) + { + for (int16_t x1 = 0; x1 < GxGDEW029T5_WIDTH / 8; x1++) + { + uint16_t idx = y1 * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; + _writeData(~data); // white is 0xFF on device + } + } + } + _current_page = -1; + _writeCommand(0x12); //display refresh + _waitWhileBusy("drawPaged"); + _sleep(); +} + +void GxGDEW029T5::drawPaged(void (*drawCallback)(uint32_t), uint32_t p) +{ + if (_current_page != -1) return; + _using_partial_mode = false; + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // 0xFF is white + } + _writeCommand(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + fillScreen(GxEPD_WHITE); + drawCallback(p); + for (int16_t y1 = 0; y1 < GxGDEW029T5_PAGE_HEIGHT; y1++) + { + for (int16_t x1 = 0; x1 < GxGDEW029T5_WIDTH / 8; x1++) + { + uint16_t idx = y1 * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; + _writeData(~data); // white is 0xFF on device + } + } + } + _current_page = -1; + _writeCommand(0x12); //display refresh + _waitWhileBusy("drawPaged"); + _sleep(); +} + +void GxGDEW029T5::drawPaged(void (*drawCallback)(const void*), const void* p) +{ + if (_current_page != -1) return; + _using_partial_mode = false; + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // 0xFF is white + } + _writeCommand(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + fillScreen(GxEPD_WHITE); + drawCallback(p); + for (int16_t y1 = 0; y1 < GxGDEW029T5_PAGE_HEIGHT; y1++) + { + for (int16_t x1 = 0; x1 < GxGDEW029T5_WIDTH / 8; x1++) + { + uint16_t idx = y1 * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; + _writeData(~data); // white is 0xFF on device + } + } + } + _current_page = -1; + _writeCommand(0x12); //display refresh + _waitWhileBusy("drawPaged"); + _sleep(); +} + +void GxGDEW029T5::drawPaged(void (*drawCallback)(const void*, const void*), const void* p1, const void* p2) +{ + if (_current_page != -1) return; + _using_partial_mode = false; + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // 0xFF is white + } + _writeCommand(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + fillScreen(GxEPD_WHITE); + drawCallback(p1, p2); + for (int16_t y1 = 0; y1 < GxGDEW029T5_PAGE_HEIGHT; y1++) + { + for (int16_t x1 = 0; x1 < GxGDEW029T5_WIDTH / 8; x1++) + { + uint16_t idx = y1 * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; + _writeData(~data); // white is 0xFF on device + } + } + } + _current_page = -1; + _writeCommand(0x12); //display refresh + _waitWhileBusy("drawPaged"); + _sleep(); +} + +void GxGDEW029T5::_rotate(uint16_t& x, uint16_t& y, uint16_t& w, uint16_t& h) +{ + switch (getRotation()) + { + case 1: + swap(x, y); + swap(w, h); + x = GxGDEW029T5_WIDTH - x - w - 1; + break; + case 2: + x = GxGDEW029T5_WIDTH - x - w - 1; + y = GxGDEW029T5_HEIGHT - y - h - 1; + break; + case 3: + swap(x, y); + swap(w, h); + y = GxGDEW029T5_HEIGHT - y - h - 1; + break; + } +} + +void GxGDEW029T5::drawPagedToWindow(void (*drawCallback)(void), uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if (_current_page != -1) return; + _rotate(x, y, w, h); + if (x >= GxGDEW029T5_WIDTH) return; + if (y >= GxGDEW029T5_HEIGHT) return; + uint16_t xe = gx_uint16_min(GxGDEW029T5_WIDTH, x + w) - 1; + uint16_t ye = gx_uint16_min(GxGDEW029T5_HEIGHT, y + h) - 1; + uint16_t xs_bx = x / 8; + uint16_t xe_bx = (xe + 7) / 8; + if (!_using_partial_mode) eraseDisplay(true); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + _setPartialRamArea(x, y, xe, ye); + IO.writeCommandTransaction(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + uint16_t yds = gx_uint16_max(y, _current_page * GxGDEW029T5_PAGE_HEIGHT); + uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEW029T5_PAGE_HEIGHT) - 1; + if (yde > yds) + { + fillScreen(GxEPD_WHITE); + drawCallback(); + uint16_t ys = yds % GxGDEW029T5_PAGE_HEIGHT; + for (int16_t y1 = yds; y1 <= yde; ys++, y1++) + { + for (int16_t x1 = xs_bx; x1 < xe_bx; x1++) + { + uint16_t idx = ys * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; // white is 0x00 in buffer + IO.writeDataTransaction(~data); // white is 0xFF on device + } + } + } + } + _current_page = -1; + IO.writeCommandTransaction(0x12); //display refresh + _waitWhileBusy("drawPagedToWindow"); + IO.writeCommandTransaction(0x92); // partial out + } // leave both controller buffers equal + delay(GxGDEW029T5_PU_DELAY); // don't stress this display +} + +void GxGDEW029T5::drawPagedToWindow(void (*drawCallback)(uint32_t), uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint32_t p) +{ + if (_current_page != -1) return; + _rotate(x, y, w, h); + if (x >= GxGDEW029T5_WIDTH) return; + if (y >= GxGDEW029T5_HEIGHT) return; + uint16_t xe = gx_uint16_min(GxGDEW029T5_WIDTH, x + w) - 1; + uint16_t ye = gx_uint16_min(GxGDEW029T5_HEIGHT, y + h) - 1; + uint16_t xs_bx = x / 8; + uint16_t xe_bx = (xe + 7) / 8; + if (!_using_partial_mode) eraseDisplay(true); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + _setPartialRamArea(x, y, xe, ye); + IO.writeCommandTransaction(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + uint16_t yds = gx_uint16_max(y, _current_page * GxGDEW029T5_PAGE_HEIGHT); + uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEW029T5_PAGE_HEIGHT) - 1; + if (yde > yds) + { + fillScreen(GxEPD_WHITE); + drawCallback(p); + uint16_t ys = yds % GxGDEW029T5_PAGE_HEIGHT; + for (int16_t y1 = yds; y1 <= yde; ys++, y1++) + { + for (int16_t x1 = xs_bx; x1 < xe_bx; x1++) + { + uint16_t idx = ys * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; // white is 0x00 in buffer + IO.writeDataTransaction(~data); // white is 0xFF on device + } + } + } + } + _current_page = -1; + IO.writeCommandTransaction(0x12); //display refresh + _waitWhileBusy("drawPagedToWindow"); + IO.writeCommandTransaction(0x92); // partial out + } // leave both controller buffers equal + delay(GxGDEW029T5_PU_DELAY); // don't stress this display +} + +void GxGDEW029T5::drawPagedToWindow(void (*drawCallback)(const void*), uint16_t x, uint16_t y, uint16_t w, uint16_t h, const void* p) +{ + if (_current_page != -1) return; + _rotate(x, y, w, h); + if (x >= GxGDEW029T5_WIDTH) return; + if (y >= GxGDEW029T5_HEIGHT) return; + uint16_t xe = gx_uint16_min(GxGDEW029T5_WIDTH, x + w) - 1; + uint16_t ye = gx_uint16_min(GxGDEW029T5_HEIGHT, y + h) - 1; + uint16_t xs_bx = x / 8; + uint16_t xe_bx = (xe + 7) / 8; + if (!_using_partial_mode) eraseDisplay(true); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + _setPartialRamArea(x, y, xe, ye); + IO.writeCommandTransaction(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + uint16_t yds = gx_uint16_max(y, _current_page * GxGDEW029T5_PAGE_HEIGHT); + uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEW029T5_PAGE_HEIGHT) - 1; + if (yde > yds) + { + fillScreen(GxEPD_WHITE); + drawCallback(p); + uint16_t ys = yds % GxGDEW029T5_PAGE_HEIGHT; + for (int16_t y1 = yds; y1 <= yde; ys++, y1++) + { + for (int16_t x1 = xs_bx; x1 < xe_bx; x1++) + { + uint16_t idx = ys * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; // white is 0x00 in buffer + IO.writeDataTransaction(~data); // white is 0xFF on device + } + } + } + } + _current_page = -1; + IO.writeCommandTransaction(0x12); //display refresh + _waitWhileBusy("drawPagedToWindow"); + IO.writeCommandTransaction(0x92); // partial out + } // leave both controller buffers equal + delay(GxGDEW029T5_PU_DELAY); // don't stress this display +} + +void GxGDEW029T5::drawPagedToWindow(void (*drawCallback)(const void*, const void*), uint16_t x, uint16_t y, uint16_t w, uint16_t h, const void* p1, const void* p2) +{ + if (_current_page != -1) return; + _rotate(x, y, w, h); + if (x >= GxGDEW029T5_WIDTH) return; + if (y >= GxGDEW029T5_HEIGHT) return; + uint16_t xe = gx_uint16_min(GxGDEW029T5_WIDTH, x + w) - 1; + uint16_t ye = gx_uint16_min(GxGDEW029T5_HEIGHT, y + h) - 1; + uint16_t xs_bx = x / 8; + uint16_t xe_bx = (xe + 7) / 8; + if (!_using_partial_mode) eraseDisplay(true); + _using_partial_mode = true; + _Init_PartialUpdate(); + for (uint16_t twice = 0; twice < 2; twice++) + { // leave both controller buffers equal + IO.writeCommandTransaction(0x91); // partial in + _setPartialRamArea(x, y, xe, ye); + IO.writeCommandTransaction(0x13); + for (_current_page = 0; _current_page < GxGDEW029T5_PAGES; _current_page++) + { + uint16_t yds = gx_uint16_max(y, _current_page * GxGDEW029T5_PAGE_HEIGHT); + uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEW029T5_PAGE_HEIGHT) - 1; + if (yde > yds) + { + fillScreen(GxEPD_WHITE); + drawCallback(p1, p2); + uint16_t ys = yds % GxGDEW029T5_PAGE_HEIGHT; + for (int16_t y1 = yds; y1 <= yde; ys++, y1++) + { + for (int16_t x1 = xs_bx; x1 < xe_bx; x1++) + { + uint16_t idx = ys * (GxGDEW029T5_WIDTH / 8) + x1; + uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; // white is 0x00 in buffer + IO.writeDataTransaction(~data); // white is 0xFF on device + } + } + } + } + _current_page = -1; + IO.writeCommandTransaction(0x12); //display refresh + _waitWhileBusy("drawPagedToWindow"); + IO.writeCommandTransaction(0x92); // partial out + } // leave both controller buffers equal + delay(GxGDEW029T5_PU_DELAY); // don't stress this display +} + +void GxGDEW029T5::drawCornerTest(uint8_t em) +{ + if (_current_page != -1) return; + _using_partial_mode = false; + _wakeUp(); + _writeCommand(0x10); + for (uint32_t i = 0; i < GxGDEW029T5_BUFFER_SIZE; i++) + { + _writeData(0xFF); // white is 0xFF on device + } + _writeCommand(0x13); + for (uint32_t y = 0; y < GxGDEW029T5_HEIGHT; y++) + { + for (uint32_t x = 0; x < GxGDEW029T5_WIDTH / 8; x++) + { + uint8_t data = 0xFF; // white is 0xFF on device + if ((x < 1) && (y < 8)) data = 0x00; + if ((x > GxGDEW029T5_WIDTH / 8 - 3) && (y < 16)) data = 0x00; + if ((x > GxGDEW029T5_WIDTH / 8 - 4) && (y > GxGDEW029T5_HEIGHT - 25)) data = 0x00; + if ((x < 4) && (y > GxGDEW029T5_HEIGHT - 33)) data = 0x00; + _writeData(data); + } + } + _writeCommand(0x12); //display refresh + _waitWhileBusy("drawCornerTest"); + _sleep(); +} diff --git a/src/GxGDEW029T5/GxGDEW029T5.h b/src/GxGDEW029T5/GxGDEW029T5.h new file mode 100644 index 0000000..7f06bbd --- /dev/null +++ b/src/GxGDEW029T5/GxGDEW029T5.h @@ -0,0 +1,124 @@ +// class GxGDEW029T5 : Display class for GDEW029T5 e-Paper from Dalian Good Display Co., Ltd.: http://www.e-paper-display.com/products_detail/productId=397.html +// +// based on Demo Example from Good Display, available here: http://www.e-paper-display.com/download_detail/downloadsId=597.html +// Controller: IL0373 : http://www.e-paper-display.com/download_detail/downloadsId=535.html +// +// Author : J-M Zingg +// +// Version : see library.properties +// +// License: GNU GENERAL PUBLIC LICENSE V3, see LICENSE +// +// Library: https://github.com/ZinggJM/GxEPD + +#ifndef _GxGDEW029T5_H_ +#define _GxGDEW029T5_H_ + +#include "../GxEPD.h" + +#define GxGDEW029T5_WIDTH 128 +#define GxGDEW029T5_HEIGHT 296 + +#define GxGDEW029T5_BUFFER_SIZE (uint32_t(GxGDEW029T5_WIDTH) * uint32_t(GxGDEW029T5_HEIGHT) / 8) + +// divisor for AVR, should be factor of GxGDEW029T5_HEIGHT +#define GxGDEW029T5_PAGES 8 + +#define GxGDEW029T5_PAGE_HEIGHT (GxGDEW029T5_HEIGHT / GxGDEW029T5_PAGES) +#define GxGDEW029T5_PAGE_SIZE (GxGDEW029T5_BUFFER_SIZE / GxGDEW029T5_PAGES) + +class GxGDEW029T5 : public GxEPD +{ + public: +#if defined(ESP8266) + //GxGDEW029T5(GxIO& io, int8_t rst = D4, int8_t busy = D2); + // use pin numbers, other ESP8266 than Wemos may not use Dx names + GxGDEW029T5(GxIO& io, int8_t rst = 2, int8_t busy = 4); +#else + GxGDEW029T5(GxIO& io, int8_t rst = 9, int8_t busy = 7); +#endif + void drawPixel(int16_t x, int16_t y, uint16_t color); + void init(uint32_t serial_diag_bitrate = 0); // = 0 : disabled + void fillScreen(uint16_t color); // to buffer + void update(void); + // to buffer, may be cropped, drawPixel() used, update needed + void drawBitmap(const uint8_t *bitmap, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color, int16_t mode = bm_normal); + // to full screen, filled with white if size is less, no update needed + void drawBitmap(const uint8_t *bitmap, uint32_t size, int16_t mode = bm_normal); // only bm_normal, bm_invert, bm_partial_update modes implemented + void eraseDisplay(bool using_partial_update = false); + // partial update of rectangle from buffer to screen, does not power off + void updateWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h, bool using_rotation = true); + // partial update of rectangle at (xs,ys) from buffer to screen at (xd,yd), does not power off + void updateToWindow(uint16_t xs, uint16_t ys, uint16_t xd, uint16_t yd, uint16_t w, uint16_t h, bool using_rotation = true); + // terminate cleanly updateWindow or updateToWindow before removing power or long delays + void powerDown(); + // paged drawing, for limited RAM, drawCallback() is called GxGDEW029T5_PAGES times + // each call of drawCallback() should draw the same + void drawPaged(void (*drawCallback)(void)); + void drawPaged(void (*drawCallback)(uint32_t), uint32_t); + void drawPaged(void (*drawCallback)(const void*), const void*); + void drawPaged(void (*drawCallback)(const void*, const void*), const void*, const void*); + // paged drawing to screen rectangle at (x,y) using partial update + void drawPagedToWindow(void (*drawCallback)(void), uint16_t x, uint16_t y, uint16_t w, uint16_t h); + void drawPagedToWindow(void (*drawCallback)(uint32_t), uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint32_t); + void drawPagedToWindow(void (*drawCallback)(const void*), uint16_t x, uint16_t y, uint16_t w, uint16_t h, const void*); + void drawPagedToWindow(void (*drawCallback)(const void*, const void*), uint16_t x, uint16_t y, uint16_t w, uint16_t h, const void*, const void*); + void drawCornerTest(uint8_t em = 0x01); + private: + template static inline void + swap(T& a, T& b) + { + T t = a; + a = b; + b = t; + } + uint16_t _setPartialRamArea(uint16_t x, uint16_t y, uint16_t xe, uint16_t ye); + void _writeData(uint8_t data); + void _writeCommand(uint8_t command); + void _wakeUp(); + void _sleep(); + void _Init_FullUpdate(); + void _Init_PartialUpdate(); + void _waitWhileBusy(const char* comment = 0); + void _rotate(uint16_t& x, uint16_t& y, uint16_t& w, uint16_t& h); + private: +#if defined(__AVR) + uint8_t _buffer[GxGDEW029T5_PAGE_SIZE]; +#else + uint8_t _buffer[GxGDEW029T5_BUFFER_SIZE]; +#endif + GxIO& IO; + int16_t _current_page; + bool _using_partial_mode; + bool _diag_enabled; + int8_t _rst; + int8_t _busy; + static const unsigned char lut_20_vcomDC[]; + static const unsigned char lut_21_ww[]; + static const unsigned char lut_22_bw[]; + static const unsigned char lut_23_wb[]; + static const unsigned char lut_24_bb[]; + static const unsigned char lut_20_vcomDC_partial[]; + static const unsigned char lut_21_ww_partial[]; + static const unsigned char lut_22_bw_partial[]; + static const unsigned char lut_23_wb_partial[]; + static const unsigned char lut_24_bb_partial[]; +#if defined(ESP8266) || defined(ESP32) + public: + // the compiler of these packages has a problem with signature matching to base classes + void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color) + { + Adafruit_GFX::drawBitmap(x, y, bitmap, w, h, color); + }; +#endif +}; + +#ifndef GxEPD_Class +#define GxEPD_Class GxGDEW029T5 +#define GxEPD_WIDTH GxGDEW029T5_WIDTH +#define GxEPD_HEIGHT GxGDEW029T5_HEIGHT +#define GxEPD_BitmapExamples +#define GxEPD_BitmapExamplesQ "GxGDEW029T5/BitmapExamples.h" +#endif + +#endif