Added Watchy basic example

pull/1/head
sqfmi 2019-11-16 23:08:17 -05:00
parent 1455aa4b39
commit 80c448c32b
6 changed files with 1359 additions and 0 deletions

69
.gitignore vendored Normal file
View File

@ -0,0 +1,69 @@
app/bin/
app/pde.jar
build/macosx/work/
arduino-core/bin/
arduino-core/arduino-core.jar
hardware/arduino/bootloaders/caterina_LUFA/Descriptors.o
hardware/arduino/bootloaders/caterina_LUFA/Descriptors.lst
hardware/arduino/bootloaders/caterina_LUFA/Caterina.sym
hardware/arduino/bootloaders/caterina_LUFA/Caterina.o
hardware/arduino/bootloaders/caterina_LUFA/Caterina.map
hardware/arduino/bootloaders/caterina_LUFA/Caterina.lst
hardware/arduino/bootloaders/caterina_LUFA/Caterina.lss
hardware/arduino/bootloaders/caterina_LUFA/Caterina.elf
hardware/arduino/bootloaders/caterina_LUFA/Caterina.eep
hardware/arduino/bootloaders/caterina_LUFA/.dep/
build/*.zip
build/*.tar.bz2
build/windows/work/
build/windows/*.zip
build/windows/*.tgz
build/windows/*.tar.bz2
build/windows/libastylej*
build/windows/liblistSerials*
build/windows/arduino-*.zip
build/windows/dist/*.tar.gz
build/windows/dist/*.tar.bz2
build/windows/launch4j-*.tgz
build/windows/launch4j-*.zip
build/windows/launcher/launch4j
build/windows/WinAVR-*.zip
build/macosx/arduino-*.zip
build/macosx/dist/*.tar.gz
build/macosx/dist/*.tar.bz2
build/macosx/*.tar.bz2
build/macosx/libastylej*
build/macosx/appbundler*.jar
build/macosx/appbundler*.zip
build/macosx/appbundler
build/macosx/appbundler-1.0ea-arduino?
build/macosx/appbundler-1.0ea-arduino*.zip
build/macosx/appbundler-1.0ea-upstream*.zip
build/linux/work/
build/linux/dist/*.tar.gz
build/linux/dist/*.tar.bz2
build/linux/*.tgz
build/linux/*.tar.xz
build/linux/*.tar.bz2
build/linux/*.zip
build/linux/libastylej*
build/linux/liblistSerials*
build/shared/reference*.zip
build/shared/Edison*.zip
build/shared/Galileo*.zip
build/shared/WiFi101-Updater-ArduinoIDE-Plugin*.zip
test-bin
*.iml
.idea
.DS_Store
.directory
hardware/arduino/avr/libraries/Bridge/examples/XivelyClient/passwords.h
avr-toolchain-*.zip
/app/nbproject/private/
/arduino-core/nbproject/private/
/app/build/
/arduino-core/build/
manifest.mf
nbbuild.xml
nbproject

View File

@ -0,0 +1,73 @@
#include <DS3232RTC.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>
#include "GxGDEH0154D67.h"
#include "DSEG7_Classic_Bold_48.h"
DS3232RTC RTC(false);
GxIO_Class io(SPI, /*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16); // arbitrary selection of 17, 16
GxEPD_Class display(io, /*RST=*/ 16, /*BUSY=*/ 4); // arbitrary selection of (16), 4
void setup()
{
esp_sleep_enable_ext0_wakeup(GPIO_NUM_33,0); //enable deep sleep wake on RTC interrupt
RTC.begin();
if(RTC.oscStopped(false)){ //check if RTC has been stopped
RTC.squareWave(SQWAVE_NONE); //disable square wave output
RTC.set(compileTime()); //set RTC time to compile time
RTC.setAlarm(ALM2_EVERY_MINUTE, 0, 0, 0, 1); //set alarm to every minute
RTC.alarmInterrupt(ALARM_2, true); //enable alarm interrupt
}
RTC.alarm(ALARM_2); //resets the alarm flag in the RTC
showTime();
esp_deep_sleep_start();
}
void loop(){}
void showTime()
{
display.init();
display.fillScreen(GxEPD_BLACK);
display.setTextColor(GxEPD_WHITE);
display.setFont(&DSEG7_Classic_Bold_48);
display.setCursor(15, 120);
tmElements_t currentTime;
RTC.read(currentTime);
if(currentTime.Hour < 10){
display.print('0');
}
display.print(currentTime.Hour);
display.print(':');
if(currentTime.Minute < 10){
display.print('0');
}
display.print(currentTime.Minute);
display.update();
display.deepSleep();
}
time_t compileTime()
{
const time_t FUDGE(10); //fudge factor to allow for upload time, etc. (seconds, YMMV)
const char *compDate = __DATE__, *compTime = __TIME__, *months = "JanFebMarAprMayJunJulAugSepOctNovDec";
char compMon[3], *m;
strncpy(compMon, compDate, 3);
compMon[3] = '\0';
m = strstr(months, compMon);
tmElements_t tm;
tm.Month = ((m - months) / 3 + 1);
tm.Day = atoi(compDate + 4);
tm.Year = atoi(compDate + 7) - 1970;
tm.Hour = atoi(compTime);
tm.Minute = atoi(compTime + 3);
tm.Second = atoi(compTime + 6);
time_t t = makeTime(tm);
return t + FUDGE; //add fudge factor to allow for compile time
}

8
library.properties Normal file
View File

@ -0,0 +1,8 @@
name=Watchy
version=1.0.0
author=SQFMI
maintainer=SQFMI
sentence=Watchy - An Open Source E-Ink SmartWatch by SQFMI
paragraph=This library contains code samples for Watchy
category=Other
url=https://github.com/sqfmi/Watchy

199
src/DSEG7_Classic_Bold_48.h Normal file
View File

@ -0,0 +1,199 @@
// Created by http://oleddisplay.squix.ch/ Consider a donation
// In case of problems make sure that you are using the font file with the correct version!
const uint8_t DSEG7_Classic_Bold_48Bitmaps[] PROGMEM = {
// Bitmap Data:
0x00, // ' '
0x00, // '!'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '"'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '#'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '$'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '%'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '&'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '''
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '('
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // ')'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '*'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '+'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // ','
0x1F,0xFF,0xF0,0x3F,0xFF,0xF8,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x3F,0xFF,0xF8,0x1F,0xFF,0xF0, // '-'
0x79,0xFB,0xF7,0xEF,0xCF,0x00, // '.'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '/'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xE0,0x00,0x01,0xEF,0x00,0x00,0x03,0xB8,0x00,0x00,0x06,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xEF,0x80,0x00,0x07,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0xBF,0xFF,0xE7,0xBD,0xFF,0xFF,0xCE,0xEF,0xFF,0xFF,0x99,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // '0'
0x00,0x18,0x71,0xE7,0xDF,0xBF,0x7E,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E,0xFD,0xF9,0xF1,0xE1,0xC1,0x80,0x0E,0x3C,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x3E,0x3C,0x38,0x30,0x00, // '1'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xE6,0x07,0xFF,0xFF,0x38,0x0F,0xFF,0xF9,0xE0,0x00,0x00,0x0F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x00,0xF8,0x0F,0xFF,0xF9,0xE0,0x7F,0xFF,0xF3,0x83,0xFF,0xFF,0xE6,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0x0F,0xBF,0xFF,0xE0,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0x3D,0xFF,0xFF,0xC0,0xEF,0xFF,0xFF,0x81,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // '2'
0x7F,0xFF,0xFF,0x0F,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xE6,0x1F,0xFF,0xFC,0xE0,0xFF,0xFF,0x9E,0x00,0x00,0x03,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x03,0xE0,0xFF,0xFF,0x9E,0x1F,0xFF,0xFC,0xE3,0xFF,0xFF,0xE6,0x3F,0xFF,0xFE,0x01,0xFF,0xFF,0xCE,0x0F,0xFF,0xF9,0xE0,0x00,0x00,0x3E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x7E,0x00,0x00,0x07,0xE0,0x00,0x00,0x3E,0x0F,0xFF,0xF9,0xE1,0xFF,0xFF,0xCE,0x3F,0xFF,0xFE,0x67,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0x87,0xFF,0xFF,0xF0, // '3'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0xFF,0xFF,0x9E,0xF7,0xFF,0xFF,0x3B,0xBF,0xFF,0xFE,0x60,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xCE,0x03,0xFF,0xFE,0x78,0x00,0x00,0x03,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3E,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xE0,0x00,0x00,0x01,0x80,0x00,0x00,0x00, // '4'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x03,0xEF,0xFF,0xF8,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xEF,0xFF,0xF8,0x0F,0x7F,0xFF,0xF0,0x3B,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0x80,0x1F,0xFF,0xFC,0xE0,0x3F,0xFF,0xE7,0x80,0x00,0x00,0x3E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xE0,0x3F,0xFF,0xE7,0x81,0xFF,0xFF,0xCE,0x0F,0xFF,0xFF,0x98,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // '5'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x03,0xEF,0xFF,0xF8,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xEF,0xFF,0xF8,0x0F,0x7F,0xFF,0xF0,0x3B,0xFF,0xFF,0xE0,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0xEF,0xBF,0xFF,0xE7,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0xBF,0xFF,0xE7,0xBD,0xFF,0xFF,0xCE,0xEF,0xFF,0xFF,0x99,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // '6'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xE0,0x00,0x01,0xEF,0x00,0x00,0x03,0xB8,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x3E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00, // '7'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0xEF,0xBF,0xFF,0xE7,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0xBF,0xFF,0xE7,0xBD,0xFF,0xFF,0xCE,0xEF,0xFF,0xFF,0x99,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // '8'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0x0F,0xFF,0xFF,0x80,0x1F,0xFF,0xFC,0xE0,0x3F,0xFF,0xE7,0x80,0x00,0x00,0x3E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xE0,0x3F,0xFF,0xE7,0x81,0xFF,0xFF,0xCE,0x0F,0xFF,0xFF,0x98,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // '9'
0x79,0xF3,0xF7,0xEF,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x9F,0xBF,0x7E,0x78, // ':'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // ';'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '<'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '='
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '>'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '?'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '@'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0xEF,0xBF,0xFF,0xE7,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0x80,0x00,0x07,0xBC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x19,0x00,0x00,0x00,0x00, // 'A'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0xFF,0xFF,0x80,0xF7,0xFF,0xFF,0x03,0xBF,0xFF,0xFE,0x0E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'B'
0x03,0xFF,0xFE,0x00,0x7F,0xFF,0xF0,0x0F,0xFF,0xFF,0x8E,0xFF,0xFF,0xF8,0xF7,0xFF,0xFF,0x0F,0xBF,0xFF,0xE0,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0x5F,0xFF,0xFF,0xC3,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xC0, // 'C'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0x80,0xFF,0xFF,0x9E,0x07,0xFF,0xFF,0x38,0x3F,0xFF,0xFE,0x6E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'D'
0x1F,0xFF,0xFF,0xC3,0xFF,0xFF,0xFE,0x5F,0xFF,0xFF,0xCE,0xFF,0xFF,0xF8,0xF7,0xFF,0xFF,0x0F,0xBF,0xFF,0xE0,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0xEF,0xFF,0xFF,0x8F,0x7F,0xFF,0xF0,0xFB,0xFF,0xFE,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFB,0xFF,0xFE,0x0F,0x7F,0xFF,0xF0,0xEF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xE1,0xFF,0xFF,0xFC, // 'E'
0x1F,0xFF,0xFF,0xC3,0xFF,0xFF,0xFE,0x5F,0xFF,0xFF,0xCE,0xFF,0xFF,0xF8,0xF7,0xFF,0xFF,0x0F,0xBF,0xFF,0xE0,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0xEF,0xFF,0xFF,0x8F,0x7F,0xFF,0xF0,0xFB,0xFF,0xFE,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xF8,0x00,0x00,0x0F,0x00,0x00,0x00,0xE0,0x00,0x00,0x04,0x00,0x00,0x00, // 'F'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x03,0xEF,0xFF,0xF8,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xEF,0x80,0x00,0x07,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0xBF,0xFF,0xE7,0xBD,0xFF,0xFF,0xCE,0xEF,0xFF,0xFF,0x99,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // 'G'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0xFF,0xFF,0x80,0xF7,0xFF,0xFF,0x03,0xBF,0xFF,0xFE,0x0E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xF8,0x00,0x00,0x7B,0xC0,0x00,0x00,0xEE,0x00,0x00,0x01,0x90,0x00,0x00,0x00, // 'H'
0x1C,0x79,0xF7,0xEF,0xDF,0xBF,0x7E,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E,0x7C,0x78,0x70,0x60,0x00, // 'I'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x6E,0x00,0x00,0x00,0x3C,0x00,0x00,0x0E,0xF8,0x00,0x00,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'J'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x03,0xEF,0xFF,0xF8,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xEF,0xFF,0xF8,0x0F,0x7F,0xFF,0xF0,0x3B,0xFF,0xFF,0xE0,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0xEF,0xBF,0xFF,0xE7,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0x80,0x00,0x07,0xBC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x19,0x00,0x00,0x00,0x00, // 'K'
0x40,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0x80,0x00,0x00,0xF0,0x00,0x00,0x0E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF8,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFB,0xFF,0xFE,0x0F,0x7F,0xFF,0xF0,0xEF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xE1,0xFF,0xFF,0xFC, // 'L'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xE0,0x00,0x01,0xEF,0x00,0x00,0x03,0xB8,0x00,0x00,0x06,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xEF,0x80,0x00,0x07,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0x80,0x00,0x07,0xBC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x19,0x00,0x00,0x00,0x00, // 'M'
0x03,0xFF,0xFE,0x00,0x1F,0xFF,0xFC,0x00,0xFF,0xFF,0xF8,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xE0,0x00,0x01,0xEF,0x00,0x00,0x03,0xB8,0x00,0x00,0x06,0x40,0x00,0x00,0x00, // 'N'
0x03,0xFF,0xFE,0x00,0x1F,0xFF,0xFC,0x00,0xFF,0xFF,0xF8,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0x5F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFC,0x00, // 'O'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0x0F,0xBF,0xFF,0xE0,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0xE0,0x00,0x00,0x01,0x00,0x00,0x00,0x00, // 'P'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0x0F,0xFF,0xFF,0x80,0x1F,0xFF,0xFC,0xE0,0x3F,0xFF,0xE7,0x80,0x00,0x00,0x3E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00, // 'Q'
0x03,0xFF,0xFE,0x00,0xFF,0xFF,0xE0,0x3F,0xFF,0xFE,0x77,0xFF,0xFF,0xCF,0x7F,0xFF,0xF1,0xF7,0xFF,0xFC,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF0,0x00,0x00,0x3C,0x00,0x00,0x07,0x00,0x00,0x00,0x40,0x00,0x00,0x00, // 'R'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0xFF,0xFF,0x80,0xF7,0xFF,0xFF,0x03,0xBF,0xFF,0xFE,0x00,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xCE,0x03,0xFF,0xFE,0x78,0x00,0x00,0x03,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3E,0x03,0xFF,0xFE,0x78,0x1F,0xFF,0xFC,0xE0,0xFF,0xFF,0xF9,0x87,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'S'
0x40,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0xEF,0xFF,0xFF,0x8F,0x7F,0xFF,0xF0,0xFB,0xFF,0xFE,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFB,0xFF,0xFE,0x0F,0x7F,0xFF,0xF0,0xEF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xE1,0xFF,0xFF,0xFC, // 'T'
0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xEF,0x80,0x00,0x07,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0xBF,0xFF,0xE7,0xBD,0xFF,0xFF,0xCE,0xEF,0xFF,0xFF,0x99,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // 'U'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0x00,0x00,0x1E,0xF0,0x00,0x00,0x3B,0x80,0x00,0x00,0x6E,0x00,0x00,0x00,0x3C,0x00,0x00,0x0E,0xF8,0x00,0x00,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'V'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0xFF,0xFF,0x9E,0xF7,0xFF,0xFF,0x3B,0xBF,0xFF,0xFE,0x6E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'W'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0xFF,0xFF,0x9E,0xF7,0xFF,0xFF,0x3B,0xBF,0xFF,0xFE,0x6E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xF8,0x00,0x00,0x7B,0xC0,0x00,0x00,0xEE,0x00,0x00,0x01,0x90,0x00,0x00,0x00, // 'X'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0xFF,0xFF,0x9E,0xF7,0xFF,0xFF,0x3B,0xBF,0xFF,0xFE,0x60,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xCE,0x03,0xFF,0xFE,0x78,0x00,0x00,0x03,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3E,0x03,0xFF,0xFE,0x78,0x1F,0xFF,0xFC,0xE0,0xFF,0xFF,0xF9,0x87,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'Y'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xE6,0x07,0xFF,0xFF,0x38,0x0F,0xFF,0xF9,0xE0,0x00,0x00,0x0F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x06,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0x3D,0xFF,0xFF,0xC0,0xEF,0xFF,0xFF,0x81,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // 'Z'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '['
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '\'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // ']'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '^'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '_'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '`'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0xEF,0xBF,0xFF,0xE7,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0x80,0x00,0x07,0xBC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x19,0x00,0x00,0x00,0x00, // 'a'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0xFF,0xFF,0x80,0xF7,0xFF,0xFF,0x03,0xBF,0xFF,0xFE,0x0E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'b'
0x03,0xFF,0xFE,0x00,0x7F,0xFF,0xF0,0x0F,0xFF,0xFF,0x8E,0xFF,0xFF,0xF8,0xF7,0xFF,0xFF,0x0F,0xBF,0xFF,0xE0,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0x5F,0xFF,0xFF,0xC3,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xC0, // 'c'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0x80,0xFF,0xFF,0x9E,0x07,0xFF,0xFF,0x38,0x3F,0xFF,0xFE,0x6E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'd'
0x1F,0xFF,0xFF,0xC3,0xFF,0xFF,0xFE,0x5F,0xFF,0xFF,0xCE,0xFF,0xFF,0xF8,0xF7,0xFF,0xFF,0x0F,0xBF,0xFF,0xE0,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0xEF,0xFF,0xFF,0x8F,0x7F,0xFF,0xF0,0xFB,0xFF,0xFE,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFB,0xFF,0xFE,0x0F,0x7F,0xFF,0xF0,0xEF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xE1,0xFF,0xFF,0xFC, // 'e'
0x1F,0xFF,0xFF,0xC3,0xFF,0xFF,0xFE,0x5F,0xFF,0xFF,0xCE,0xFF,0xFF,0xF8,0xF7,0xFF,0xFF,0x0F,0xBF,0xFF,0xE0,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0xEF,0xFF,0xFF,0x8F,0x7F,0xFF,0xF0,0xFB,0xFF,0xFE,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xF8,0x00,0x00,0x0F,0x00,0x00,0x00,0xE0,0x00,0x00,0x04,0x00,0x00,0x00, // 'f'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x03,0xEF,0xFF,0xF8,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xEF,0x80,0x00,0x07,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0xBF,0xFF,0xE7,0xBD,0xFF,0xFF,0xCE,0xEF,0xFF,0xFF,0x99,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // 'g'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0xFF,0xFF,0x80,0xF7,0xFF,0xFF,0x03,0xBF,0xFF,0xFE,0x0E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xF8,0x00,0x00,0x7B,0xC0,0x00,0x00,0xEE,0x00,0x00,0x01,0x90,0x00,0x00,0x00, // 'h'
0x1C,0x79,0xF7,0xEF,0xDF,0xBF,0x7E,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E,0x7C,0x78,0x70,0x60,0x00, // 'i'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x03,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x6E,0x00,0x00,0x00,0x3C,0x00,0x00,0x0E,0xF8,0x00,0x00,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'j'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x03,0xEF,0xFF,0xF8,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xEF,0xFF,0xF8,0x0F,0x7F,0xFF,0xF0,0x3B,0xFF,0xFF,0xE0,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0xEF,0xBF,0xFF,0xE7,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0x80,0x00,0x07,0xBC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x19,0x00,0x00,0x00,0x00, // 'k'
0x40,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0x80,0x00,0x00,0xF0,0x00,0x00,0x0E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF8,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFB,0xFF,0xFE,0x0F,0x7F,0xFF,0xF0,0xEF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xE1,0xFF,0xFF,0xFC, // 'l'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xE0,0x00,0x01,0xEF,0x00,0x00,0x03,0xB8,0x00,0x00,0x06,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xEF,0x80,0x00,0x07,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0x80,0x00,0x07,0xBC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x19,0x00,0x00,0x00,0x00, // 'm'
0x03,0xFF,0xFE,0x00,0x1F,0xFF,0xFC,0x00,0xFF,0xFF,0xF8,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xE0,0x00,0x01,0xEF,0x00,0x00,0x03,0xB8,0x00,0x00,0x06,0x40,0x00,0x00,0x00, // 'n'
0x03,0xFF,0xFE,0x00,0x1F,0xFF,0xFC,0x00,0xFF,0xFF,0xF8,0x3B,0xFF,0xFF,0xE0,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0x5F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFC,0x00, // 'o'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0xEF,0xFF,0xFF,0x83,0xDF,0xFF,0xFC,0x0F,0xBF,0xFF,0xE0,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0x3C,0x00,0x00,0x00,0xE0,0x00,0x00,0x01,0x00,0x00,0x00,0x00, // 'p'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3B,0xFF,0xFF,0xE6,0xF7,0xFF,0xFF,0x3B,0xEF,0xFF,0xF9,0xEF,0xC0,0x00,0x0F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x00,0xFB,0xEF,0xFF,0xF9,0xEF,0x7F,0xFF,0xF3,0xBB,0xFF,0xFF,0xE6,0x0F,0xFF,0xFF,0x80,0x1F,0xFF,0xFC,0xE0,0x3F,0xFF,0xE7,0x80,0x00,0x00,0x3E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00, // 'q'
0x03,0xFF,0xFE,0x00,0xFF,0xFF,0xE0,0x3F,0xFF,0xFE,0x77,0xFF,0xFF,0xCF,0x7F,0xFF,0xF1,0xF7,0xFF,0xFC,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF0,0x00,0x00,0x3C,0x00,0x00,0x07,0x00,0x00,0x00,0x40,0x00,0x00,0x00, // 'r'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0xFF,0xFF,0x80,0xF7,0xFF,0xFF,0x03,0xBF,0xFF,0xFE,0x00,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xCE,0x03,0xFF,0xFE,0x78,0x00,0x00,0x03,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3E,0x03,0xFF,0xFE,0x78,0x1F,0xFF,0xFC,0xE0,0xFF,0xFF,0xF9,0x87,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 's'
0x40,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0xF7,0xFF,0xFF,0x0E,0xFF,0xFF,0xF8,0xEF,0xFF,0xFF,0x8F,0x7F,0xFF,0xF0,0xFB,0xFF,0xFE,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFC,0x00,0x00,0x0F,0xC0,0x00,0x00,0xFB,0xFF,0xFE,0x0F,0x7F,0xFF,0xF0,0xEF,0xFF,0xFF,0x85,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xE1,0xFF,0xFF,0xFC, // 't'
0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xEF,0x80,0x00,0x07,0xBF,0x00,0x00,0x3E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x03,0xEF,0xBF,0xFF,0xE7,0xBD,0xFF,0xFF,0xCE,0xEF,0xFF,0xFF,0x99,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // 'u'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0x00,0x00,0x1E,0xF0,0x00,0x00,0x3B,0x80,0x00,0x00,0x6E,0x00,0x00,0x00,0x3C,0x00,0x00,0x0E,0xF8,0x00,0x00,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'v'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0xFF,0xFF,0x9E,0xF7,0xFF,0xFF,0x3B,0xBF,0xFF,0xFE,0x6E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xFB,0xFF,0xFE,0x7B,0xDF,0xFF,0xFC,0xEE,0xFF,0xFF,0xF9,0x97,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'w'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0xFF,0xFF,0x9E,0xF7,0xFF,0xFF,0x3B,0xBF,0xFF,0xFE,0x6E,0xFF,0xFF,0xF8,0x3D,0xFF,0xFF,0xCE,0xFB,0xFF,0xFE,0x7B,0xF0,0x00,0x03,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x3E,0xF8,0x00,0x00,0x7B,0xC0,0x00,0x00,0xEE,0x00,0x00,0x01,0x90,0x00,0x00,0x00, // 'x'
0x40,0x00,0x00,0x03,0x80,0x00,0x00,0x6F,0x00,0x00,0x03,0xBE,0x00,0x00,0x1E,0xFC,0x00,0x00,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x1F,0xBF,0x00,0x00,0x7E,0xFC,0x00,0x01,0xFB,0xF0,0x00,0x07,0xEF,0xC0,0x00,0x0F,0xBE,0xFF,0xFF,0x9E,0xF7,0xFF,0xFF,0x3B,0xBF,0xFF,0xFE,0x60,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xCE,0x03,0xFF,0xFE,0x78,0x00,0x00,0x03,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3E,0x03,0xFF,0xFE,0x78,0x1F,0xFF,0xFC,0xE0,0xFF,0xFF,0xF9,0x87,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xE0,0x7F,0xFF,0xFF,0x00, // 'y'
0x1F,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xE6,0x07,0xFF,0xFF,0x38,0x0F,0xFF,0xF9,0xE0,0x00,0x00,0x0F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x7E,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x06,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xBF,0xFF,0xE0,0x3D,0xFF,0xFF,0xC0,0xEF,0xFF,0xFF,0x81,0x7F,0xFF,0xFF,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xF0, // 'z'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '{'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE, // '|'
0xFF,0xFB,0xFF,0xEC,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6C,0x01,0xB0,0x06,0xC0,0x1B,0x00,0x6F,0xFF,0xBF,0xFE // '}'
};
const GFXglyph DSEG7_Classic_Bold_48Glyphs[] PROGMEM = {
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
{ 0, 1, 1, 11, 0, 0 }, // ' '
{ 1, 1, 1, 40, 0, 0 }, // '!'
{ 2, 14, 32, 18, 2, -32 }, // '"'
{ 58, 14, 32, 18, 2, -32 }, // '#'
{ 114, 14, 32, 18, 2, -32 }, // '$'
{ 170, 14, 32, 18, 2, -32 }, // '%'
{ 226, 14, 32, 18, 2, -32 }, // '&'
{ 282, 14, 32, 18, 2, -32 }, // '''
{ 338, 14, 32, 18, 2, -32 }, // '('
{ 394, 14, 32, 18, 2, -32 }, // ')'
{ 450, 14, 32, 18, 2, -32 }, // '*'
{ 506, 14, 32, 18, 2, -32 }, // '+'
{ 562, 14, 32, 18, 2, -32 }, // ','
{ 618, 24, 6, 40, 8, -27 }, // '-'
{ 636, 7, 6, 1, -3, -6 }, // '.'
{ 642, 14, 32, 18, 2, -32 }, // '/'
{ 698, 30, 48, 40, 5, -48 }, // '0'
{ 878, 7, 44, 40, 28, -46 }, // '1'
{ 917, 30, 48, 40, 5, -48 }, // '2'
{ 1097, 28, 48, 40, 7, -48 }, // '3'
{ 1265, 30, 44, 40, 5, -46 }, // '4'
{ 1430, 30, 48, 40, 5, -48 }, // '5'
{ 1610, 30, 48, 40, 5, -48 }, // '6'
{ 1790, 30, 46, 40, 5, -48 }, // '7'
{ 1963, 30, 48, 40, 5, -48 }, // '8'
{ 2143, 30, 48, 40, 5, -48 }, // '9'
{ 2323, 7, 25, 11, 2, -36 }, // ':'
{ 2345, 14, 32, 18, 2, -32 }, // ';'
{ 2401, 14, 32, 18, 2, -32 }, // '<'
{ 2457, 14, 32, 18, 2, -32 }, // '='
{ 2513, 14, 32, 18, 2, -32 }, // '>'
{ 2569, 14, 32, 18, 2, -32 }, // '?'
{ 2625, 14, 32, 18, 2, -32 }, // '@'
{ 2681, 30, 46, 40, 5, -48 }, // 'A'
{ 2854, 30, 46, 40, 5, -46 }, // 'B'
{ 3027, 28, 27, 40, 5, -27 }, // 'C'
{ 3122, 30, 46, 40, 5, -46 }, // 'D'
{ 3295, 28, 48, 40, 5, -48 }, // 'E'
{ 3463, 28, 46, 40, 5, -48 }, // 'F'
{ 3624, 30, 48, 40, 5, -48 }, // 'G'
{ 3804, 30, 44, 40, 5, -46 }, // 'H'
{ 3969, 7, 21, 40, 28, -23 }, // 'I'
{ 3988, 30, 46, 40, 5, -46 }, // 'J'
{ 4161, 30, 46, 40, 5, -48 }, // 'K'
{ 4334, 28, 46, 40, 5, -46 }, // 'L'
{ 4495, 30, 46, 40, 5, -48 }, // 'M'
{ 4668, 30, 25, 40, 5, -27 }, // 'N'
{ 4762, 30, 27, 40, 5, -27 }, // 'O'
{ 4864, 30, 46, 40, 5, -48 }, // 'P'
{ 5037, 30, 46, 40, 5, -48 }, // 'Q'
{ 5210, 27, 25, 40, 5, -27 }, // 'R'
{ 5295, 30, 46, 40, 5, -46 }, // 'S'
{ 5468, 28, 46, 40, 5, -46 }, // 'T'
{ 5629, 30, 24, 40, 5, -24 }, // 'U'
{ 5719, 30, 46, 40, 5, -46 }, // 'V'
{ 5892, 30, 46, 40, 5, -46 }, // 'W'
{ 6065, 30, 44, 40, 5, -46 }, // 'X'
{ 6230, 30, 46, 40, 5, -46 }, // 'Y'
{ 6403, 30, 48, 40, 5, -48 }, // 'Z'
{ 6583, 14, 32, 18, 2, -32 }, // '['
{ 6639, 14, 32, 18, 2, -32 }, // '\'
{ 6695, 14, 32, 18, 2, -32 }, // ']'
{ 6751, 14, 32, 18, 2, -32 }, // '^'
{ 6807, 14, 32, 18, 2, -32 }, // '_'
{ 6863, 14, 32, 18, 2, -32 }, // '`'
{ 6919, 30, 46, 40, 5, -48 }, // 'a'
{ 7092, 30, 46, 40, 5, -46 }, // 'b'
{ 7265, 28, 27, 40, 5, -27 }, // 'c'
{ 7360, 30, 46, 40, 5, -46 }, // 'd'
{ 7533, 28, 48, 40, 5, -48 }, // 'e'
{ 7701, 28, 46, 40, 5, -48 }, // 'f'
{ 7862, 30, 48, 40, 5, -48 }, // 'g'
{ 8042, 30, 44, 40, 5, -46 }, // 'h'
{ 8207, 7, 21, 40, 28, -23 }, // 'i'
{ 8226, 30, 46, 40, 5, -46 }, // 'j'
{ 8399, 30, 46, 40, 5, -48 }, // 'k'
{ 8572, 28, 46, 40, 5, -46 }, // 'l'
{ 8733, 30, 46, 40, 5, -48 }, // 'm'
{ 8906, 30, 25, 40, 5, -27 }, // 'n'
{ 9000, 30, 27, 40, 5, -27 }, // 'o'
{ 9102, 30, 46, 40, 5, -48 }, // 'p'
{ 9275, 30, 46, 40, 5, -48 }, // 'q'
{ 9448, 27, 25, 40, 5, -27 }, // 'r'
{ 9533, 30, 46, 40, 5, -46 }, // 's'
{ 9706, 28, 46, 40, 5, -46 }, // 't'
{ 9867, 30, 24, 40, 5, -24 }, // 'u'
{ 9957, 30, 46, 40, 5, -46 }, // 'v'
{ 10130, 30, 46, 40, 5, -46 }, // 'w'
{ 10303, 30, 44, 40, 5, -46 }, // 'x'
{ 10468, 30, 46, 40, 5, -46 }, // 'y'
{ 10641, 30, 48, 40, 5, -48 }, // 'z'
{ 10821, 14, 32, 18, 2, -32 }, // '{'
{ 10877, 14, 32, 18, 2, -32 }, // '|'
{ 10933, 14, 32, 18, 2, -32 } // '}'
};
const GFXfont DSEG7_Classic_Bold_48 PROGMEM = {
(uint8_t *)DSEG7_Classic_Bold_48Bitmaps,(GFXglyph *)DSEG7_Classic_Bold_48Glyphs,0x20, 0x7E, 53};

875
src/GxGDEH0154D67.cpp Normal file
View File

@ -0,0 +1,875 @@
// class GxGDEH0154D67 : Display class for GDEH0154D67 e-Paper from Dalian Good Display Co., Ltd.: www.good-display.com
//
// Author : SQFMI
//
// Version : see library.properties
//
// License: GNU GENERAL PUBLIC LICENSE V3, see LICENSE
//
// Library: https://github.com/sqfmi/GxEPD
#include "GxGDEH0154D67.h"
//#define DISABLE_DIAGNOSTIC_OUTPUT
#if defined(ESP8266) || defined(ESP32)
#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif
// Partial Update Delay, may have an influence on degradation
#define GxGDEH0154D67_PU_DELAY 300
/*const uint8_t GxGDEH0154D67::LUTDefault_full[] =
{
0x32, // command
0x50, 0xAA, 0x55, 0xAA, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t GxGDEH0154D67::LUTDefault_part[] =
{
0x32, // command
0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t GxGDEH0154D67::GDOControl[] = {0x01, (GxGDEH0154D67_Y_PIXELS - 1) % 256, (GxGDEH0154D67_Y_PIXELS - 1) / 256, 0x00}; //for 1.54inch
const uint8_t GxGDEH0154D67::softstart[] = {0x0c, 0xd7, 0xd6, 0x9d};
const uint8_t GxGDEH0154D67::VCOMVol[] = {0x2c, 0x9b}; // VCOM 7c
const uint8_t GxGDEH0154D67::DummyLine[] = {0x3a, 0x1a}; // 4 dummy line per gate
const uint8_t GxGDEH0154D67::Gatetime[] = {0x3b, 0x08}; // 2us per line*/
GxGDEH0154D67::GxGDEH0154D67(GxIO& io, int8_t rst, int8_t busy) :
GxEPD(GxGDEH0154D67_WIDTH, GxGDEH0154D67_HEIGHT), IO(io),
_current_page(-1), _using_partial_mode(false), _diag_enabled(false),
_rst(rst), _busy(busy)
{
}
void GxGDEH0154D67::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 = GxGDEH0154D67_WIDTH - x - 1;
break;
case 2:
x = GxGDEH0154D67_WIDTH - x - 1;
y = GxGDEH0154D67_HEIGHT - y - 1;
break;
case 3:
swap(x, y);
y = GxGDEH0154D67_HEIGHT - y - 1;
break;
}
uint16_t i = x / 8 + y * GxGDEH0154D67_WIDTH / 8;
if (_current_page < 1)
{
if (i >= sizeof(_buffer)) return;
}
else
{
y -= _current_page * GxGDEH0154D67_PAGE_HEIGHT;
if ((y < 0) || (y >= GxGDEH0154D67_PAGE_HEIGHT)) return;
i = x / 8 + y * GxGDEH0154D67_WIDTH / 8;
}
if (!color)
_buffer[i] = (_buffer[i] | (1 << (7 - x % 8)));
else
_buffer[i] = (_buffer[i] & (0xFF ^ (1 << (7 - x % 8))));
}
void GxGDEH0154D67::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);
}
if (_busy >= 0) pinMode(_busy, INPUT);
fillScreen(GxEPD_WHITE);
_current_page = -1;
_using_partial_mode = false;
}
void GxGDEH0154D67::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 GxGDEH0154D67::update(void)
{
if (_current_page != -1) return;
_using_partial_mode = false;
_Init_Full(0x03);
_writeCommand(0x24);
for (uint16_t y = 0; y < GxGDEH0154D67_HEIGHT; y++)
{
for (uint16_t x = 0; x < GxGDEH0154D67_WIDTH / 8; x++)
{
uint16_t idx = y * (GxGDEH0154D67_WIDTH / 8) + x;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
_Update_Full();
_PowerOff();
}
void GxGDEH0154D67::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_flip_x | bm_invert;
drawBitmapBM(bitmap, x, y, w, h, color, mode);
}
void GxGDEH0154D67::drawBitmap(const uint8_t *bitmap, uint32_t size, int16_t mode)
{
if (_current_page != -1) return;
// 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;
uint8_t ram_entry_mode = 0x03; // y-increment, x-increment for normal mode
if ((mode & bm_flip_y) && (mode & bm_flip_x)) ram_entry_mode = 0x00; // y-decrement, x-decrement
else if (mode & bm_flip_y) ram_entry_mode = 0x01; // y-decrement, x-increment
else if (mode & bm_flip_x) ram_entry_mode = 0x02; // y-increment, x-decrement
if (mode & bm_partial_update)
{
_using_partial_mode = true; // remember
_Init_Part(ram_entry_mode);
_writeCommand(0x24);
for (uint32_t i = 0; i < GxGDEH0154D67_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);
}
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
_writeCommand(0x24);
for (uint32_t i = 0; i < GxGDEH0154D67_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);
}
delay(GxGDEH0154D67_PU_DELAY);
_PowerOff();
}
else
{
_using_partial_mode = false; // remember
_Init_Full(ram_entry_mode);
_writeCommand(0x24);
for (uint32_t i = 0; i < GxGDEH0154D67_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);
}
_Update_Full();
_PowerOff();
}
}
void GxGDEH0154D67::eraseDisplay(bool using_partial_update)
{
if (_current_page != -1) return;
if (using_partial_update)
{
_using_partial_mode = true; // remember
_Init_Part(0x01);
_writeCommand(0x24);
for (uint32_t i = 0; i < GxGDEH0154D67_BUFFER_SIZE; i++)
{
_writeData(0xFF);
}
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
_writeCommand(0x24);
for (uint32_t i = 0; i < GxGDEH0154D67_BUFFER_SIZE; i++)
{
_writeData(0xFF);
}
delay(GxGDEH0154D67_PU_DELAY);
}
else
{
_using_partial_mode = false; // remember
_Init_Full(0x01);
_writeCommand(0x24);
for (uint32_t i = 0; i < GxGDEH0154D67_BUFFER_SIZE; i++)
{
_writeData(0xFF);
}
_Update_Full();
_PowerOff();
}
}
void GxGDEH0154D67::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 >= GxGDEH0154D67_WIDTH) return;
if (y >= GxGDEH0154D67_HEIGHT) return;
uint16_t xe = gx_uint16_min(GxGDEH0154D67_WIDTH, x + w) - 1;
uint16_t ye = gx_uint16_min(GxGDEH0154D67_HEIGHT, y + h) - 1;
uint16_t xs_d8 = x / 8;
uint16_t xe_d8 = xe / 8;
_Init_Part(0x03);
_SetRamArea(xs_d8, xe_d8, y % 256, y / 256, ye % 256, ye / 256); // X-source area,Y-gate area
_SetRamPointer(xs_d8, y % 256, y / 256); // set ram
_waitWhileBusy(0, 100); // needed ?
_writeCommand(0x24);
for (int16_t y1 = y; y1 <= ye; y1++)
{
for (int16_t x1 = xs_d8; x1 <= xe_d8; x1++)
{
uint16_t idx = y1 * (GxGDEH0154D67_WIDTH / 8) + x1;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
_SetRamArea(xs_d8, xe_d8, y % 256, y / 256, ye % 256, ye / 256); // X-source area,Y-gate area
_SetRamPointer(xs_d8, y % 256, y / 256); // set ram
_waitWhileBusy(0, 100); // needed ?
_writeCommand(0x24);
for (int16_t y1 = y; y1 <= ye; y1++)
{
for (int16_t x1 = xs_d8; x1 <= xe_d8; x1++)
{
uint16_t idx = y1 * (GxGDEH0154D67_WIDTH / 8) + x1;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
delay(GxGDEH0154D67_PU_DELAY);
}
void GxGDEH0154D67::_writeToWindow(uint16_t xs, uint16_t ys, uint16_t xd, uint16_t yd, uint16_t w, uint16_t h)
{
//Serial.printf("_writeToWindow(%d, %d, %d, %d, %d, %d)\n", xs, ys, xd, yd, w, h);
// the screen limits are the hard limits
if (xs >= GxGDEH0154D67_WIDTH) return;
if (ys >= GxGDEH0154D67_HEIGHT) return;
if (xd >= GxGDEH0154D67_WIDTH) return;
if (yd >= GxGDEH0154D67_HEIGHT) return;
w = gx_uint16_min(w, GxGDEH0154D67_WIDTH - xs);
w = gx_uint16_min(w, GxGDEH0154D67_WIDTH - xd);
h = gx_uint16_min(h, GxGDEH0154D67_HEIGHT - ys);
h = gx_uint16_min(h, GxGDEH0154D67_HEIGHT - yd);
uint16_t xds_d8 = xd / 8;
uint16_t xde_d8 = (xd + w - 1) / 8;
uint16_t yde = yd + h - 1;
// soft limits, must send as many bytes as set by _SetRamArea
uint16_t xse_d8 = xs / 8 + xde_d8 - xds_d8;
uint16_t yse = ys + h - 1;
_SetRamArea(xds_d8, xde_d8, yd % 256, yd / 256, yde % 256, yde / 256); // X-source area,Y-gate area
_SetRamPointer(xds_d8, yd % 256, yd / 256); // set ram
_waitWhileBusy(0, 100); // needed ?
_writeCommand(0x24);
for (int16_t y1 = ys; y1 <= yse; y1++)
{
for (int16_t x1 = xs / 8; x1 <= xse_d8; x1++)
{
uint16_t idx = y1 * (GxGDEH0154D67_WIDTH / 8) + x1;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
}
void GxGDEH0154D67::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 = GxGDEH0154D67_WIDTH - xs - w - 1;
xd = GxGDEH0154D67_WIDTH - xd - w - 1;
break;
case 2:
xs = GxGDEH0154D67_WIDTH - xs - w - 1;
ys = GxGDEH0154D67_HEIGHT - ys - h - 1;
xd = GxGDEH0154D67_WIDTH - xd - w - 1;
yd = GxGDEH0154D67_HEIGHT - yd - h - 1;
break;
case 3:
swap(xs, ys);
swap(xd, yd);
swap(w, h);
ys = GxGDEH0154D67_HEIGHT - ys - h - 1;
yd = GxGDEH0154D67_HEIGHT - yd - h - 1;
break;
}
}
_Init_Part(0x03);
_writeToWindow(xs, ys, xd, yd, w, h);
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
_writeToWindow(xs, ys, xd, yd, w, h);
delay(GxGDEH0154D67_PU_DELAY);
}
void GxGDEH0154D67::powerDown()
{
_using_partial_mode = false;
_PowerOff();
}
void GxGDEH0154D67::deepSleep()
{
_writeCommand(0x10); //enter deep sleep
_writeData(0x01);
}
void GxGDEH0154D67::_writeCommand(uint8_t command)
{
if ((_busy >= 0) && digitalRead(_busy))
{
String str = String("command 0x") + String(command, HEX);
_waitWhileBusy(str.c_str(), 100); // needed?
}
IO.writeCommandTransaction(command);
}
void GxGDEH0154D67::_writeData(uint8_t data)
{
IO.writeDataTransaction(data);
}
void GxGDEH0154D67::_writeCommandData(const uint8_t* pCommandData, uint8_t datalen)
{
if ((_busy >= 0) && digitalRead(_busy))
{
String str = String("command 0x") + String(pCommandData[0], HEX);
_waitWhileBusy(str.c_str(), 100); // needed?
}
IO.startTransaction();
IO.writeCommand(*pCommandData++);
for (uint8_t i = 0; i < datalen - 1; i++) // sub the command
{
IO.writeData(*pCommandData++);
}
IO.endTransaction();
}
void GxGDEH0154D67::_waitWhileBusy(const char* comment, uint16_t busy_time)
{
if (_busy >= 0)
{
unsigned long start = micros();
while (1)
{
if (!digitalRead(_busy)) 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;
}
else delay(busy_time);
}
void GxGDEH0154D67::_setRamDataEntryMode(uint8_t em)
{
const uint16_t xPixelsPar = GxGDEH0154D67_X_PIXELS - 1;
const uint16_t yPixelsPar = GxGDEH0154D67_Y_PIXELS - 1;
em = gx_uint16_min(em, 0x03);
_writeCommand(0x11);
_writeData(em);
switch (em)
{
case 0x00: // x decrease, y decrease
_SetRamArea(xPixelsPar / 8, 0x00, yPixelsPar % 256, yPixelsPar / 256, 0x00, 0x00); // X-source area,Y-gate area
_SetRamPointer(xPixelsPar / 8, yPixelsPar % 256, yPixelsPar / 256); // set ram
break;
case 0x01: // x increase, y decrease : as in demo code
_SetRamArea(0x00, xPixelsPar / 8, yPixelsPar % 256, yPixelsPar / 256, 0x00, 0x00); // X-source area,Y-gate area
_SetRamPointer(0x00, yPixelsPar % 256, yPixelsPar / 256); // set ram
break;
case 0x02: // x decrease, y increase
_SetRamArea(xPixelsPar / 8, 0x00, 0x00, 0x00, yPixelsPar % 256, yPixelsPar / 256); // X-source area,Y-gate area
_SetRamPointer(xPixelsPar / 8, 0x00, 0x00); // set ram
break;
case 0x03: // x increase, y increase : normal mode
_SetRamArea(0x00, xPixelsPar / 8, 0x00, 0x00, yPixelsPar % 256, yPixelsPar / 256); // X-source area,Y-gate area
_SetRamPointer(0x00, 0x00, 0x00); // set ram
break;
}
}
void GxGDEH0154D67::_SetRamArea(uint8_t Xstart, uint8_t Xend, uint8_t Ystart, uint8_t Ystart1, uint8_t Yend, uint8_t Yend1)
{
_writeCommand(0x44);
_writeData(Xstart);
_writeData(Xend);
_writeCommand(0x45);
_writeData(Ystart);
_writeData(Ystart1);
_writeData(Yend);
_writeData(Yend1);
}
void GxGDEH0154D67::_SetRamPointer(uint8_t addrX, uint8_t addrY, uint8_t addrY1)
{
_writeCommand(0x4e);
_writeData(addrX);
_writeCommand(0x4f);
_writeData(addrY);
_writeData(addrY1);
}
void GxGDEH0154D67::_PowerOn(void)
{
_writeCommand(0x22);
_writeData(0xc0);
_writeCommand(0x20);
_waitWhileBusy("_PowerOn", power_on_time);
}
void GxGDEH0154D67::_PowerOff(void)
{
_writeCommand(0x22);
_writeData(0xc3);
_writeCommand(0x20);
_waitWhileBusy("_PowerOff", power_off_time);
}
void GxGDEH0154D67::_InitDisplay(uint8_t em)
{
_writeCommand(0x12);
_waitWhileBusy("_SWReset", power_on_time);
_writeCommand(0x01);
_writeData(0xC7);
_writeData(0x00);
_writeData(0x00);
_writeCommand(0x3C);
_writeData(0x05);
_writeCommand(0x18);
_writeData(0x80);
/*_writeCommandData(GDOControl, sizeof(GDOControl)); // Pannel configuration, Gate selection
_writeCommandData(softstart, sizeof(softstart)); // X decrease, Y decrease
_writeCommandData(VCOMVol, sizeof(VCOMVol)); // VCOM setting
_writeCommandData(DummyLine, sizeof(DummyLine)); // dummy line per gate
_writeCommandData(Gatetime, sizeof(Gatetime)); // Gate time setting*/
_setRamDataEntryMode(em);
}
void GxGDEH0154D67::_Init_Full(uint8_t em)
{
_InitDisplay(em);
//_writeCommandData(LUTDefault_full, sizeof(LUTDefault_full));
_PowerOn();
}
void GxGDEH0154D67::_Init_Part(uint8_t em)
{
_InitDisplay(em);
//_writeCommandData(LUTDefault_part, sizeof(LUTDefault_part));
_PowerOn();
}
void GxGDEH0154D67::_Update_Full(void)
{
_writeCommand(0x22);
_writeData(0xf7);
_writeCommand(0x20);
_waitWhileBusy("_Update_Full", full_refresh_time);
//_writeCommand(0xff);
}
void GxGDEH0154D67::_Update_Part(void)
{
_writeCommand(0x22);
_writeData(0xff);
_writeCommand(0x20);
_waitWhileBusy("_Update_Part", partial_refresh_time);
//_writeCommand(0xff);
}
void GxGDEH0154D67::drawPaged(void (*drawCallback)(void))
{
if (_current_page != -1) return;
_using_partial_mode = false;
_Init_Full(0x03);
_writeCommand(0x24);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
fillScreen(GxEPD_WHITE);
drawCallback();
for (int16_t y1 = 0; y1 < GxGDEH0154D67_PAGE_HEIGHT; y1++)
{
for (int16_t x1 = 0; x1 < GxGDEH0154D67_WIDTH / 8; x1++)
{
uint16_t idx = y1 * (GxGDEH0154D67_WIDTH / 8) + x1;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
}
_current_page = -1;
_Update_Full();
_PowerOff();
}
void GxGDEH0154D67::drawPaged(void (*drawCallback)(uint32_t), uint32_t p)
{
if (_current_page != -1) return;
_using_partial_mode = false;
_Init_Full(0x03);
_writeCommand(0x24);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
fillScreen(GxEPD_WHITE);
drawCallback(p);
for (int16_t y1 = 0; y1 < GxGDEH0154D67_PAGE_HEIGHT; y1++)
{
for (int16_t x1 = 0; x1 < GxGDEH0154D67_WIDTH / 8; x1++)
{
uint16_t idx = y1 * (GxGDEH0154D67_WIDTH / 8) + x1;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
}
_current_page = -1;
_Update_Full();
_PowerOff();
}
void GxGDEH0154D67::drawPaged(void (*drawCallback)(const void*), const void* p)
{
if (_current_page != -1) return;
_using_partial_mode = false;
_Init_Full(0x03);
_writeCommand(0x24);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
fillScreen(GxEPD_WHITE);
drawCallback(p);
for (int16_t y1 = 0; y1 < GxGDEH0154D67_PAGE_HEIGHT; y1++)
{
for (int16_t x1 = 0; x1 < GxGDEH0154D67_WIDTH / 8; x1++)
{
uint16_t idx = y1 * (GxGDEH0154D67_WIDTH / 8) + x1;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
}
_current_page = -1;
_Update_Full();
_PowerOff();
}
void GxGDEH0154D67::drawPaged(void (*drawCallback)(const void*, const void*), const void* p1, const void* p2)
{
if (_current_page != -1) return;
_using_partial_mode = false;
_Init_Full(0x03);
_writeCommand(0x24);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
fillScreen(GxEPD_WHITE);
drawCallback(p1, p2);
for (int16_t y1 = 0; y1 < GxGDEH0154D67_PAGE_HEIGHT; y1++)
{
for (int16_t x1 = 0; x1 < GxGDEH0154D67_WIDTH / 8; x1++)
{
uint16_t idx = y1 * (GxGDEH0154D67_WIDTH / 8) + x1;
uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00;
_writeData(~data);
}
}
}
_current_page = -1;
_Update_Full();
_PowerOff();
}
void GxGDEH0154D67::_rotate(uint16_t& x, uint16_t& y, uint16_t& w, uint16_t& h)
{
switch (getRotation())
{
case 1:
swap(x, y);
swap(w, h);
x = GxGDEH0154D67_WIDTH - x - w - 1;
break;
case 2:
x = GxGDEH0154D67_WIDTH - x - w - 1;
y = GxGDEH0154D67_HEIGHT - y - h - 1;
break;
case 3:
swap(x, y);
swap(w, h);
y = GxGDEH0154D67_HEIGHT - y - h - 1;
break;
}
}
void GxGDEH0154D67::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 (!_using_partial_mode)
{
eraseDisplay(false);
eraseDisplay(true);
}
_using_partial_mode = true;
_Init_Part(0x03);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback();
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback();
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
delay(GxGDEH0154D67_PU_DELAY);
_current_page = -1;
_PowerOff();
}
void GxGDEH0154D67::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 (!_using_partial_mode)
{
eraseDisplay(false);
eraseDisplay(true);
}
_using_partial_mode = true;
_Init_Part(0x03);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback(p);
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback(p);
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
delay(GxGDEH0154D67_PU_DELAY);
_current_page = -1;
_PowerOff();
}
void GxGDEH0154D67::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 (!_using_partial_mode)
{
eraseDisplay(false);
eraseDisplay(true);
}
_using_partial_mode = true;
_Init_Part(0x03);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback(p);
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback(p);
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
delay(GxGDEH0154D67_PU_DELAY);
_current_page = -1;
_PowerOff();
}
void GxGDEH0154D67::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 (!_using_partial_mode)
{
eraseDisplay(false);
eraseDisplay(true);
}
_using_partial_mode = true;
_Init_Part(0x03);
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback(p1, p2);
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
_Update_Part();
delay(GxGDEH0154D67_PU_DELAY);
// update erase buffer
for (_current_page = 0; _current_page < GxGDEH0154D67_PAGES; _current_page++)
{
uint16_t yds = gx_uint16_max(y, _current_page * GxGDEH0154D67_PAGE_HEIGHT);
uint16_t yde = gx_uint16_min(y + h, (_current_page + 1) * GxGDEH0154D67_PAGE_HEIGHT);
if (yde > yds)
{
fillScreen(GxEPD_WHITE);
drawCallback(p1, p2);
uint16_t ys = yds % GxGDEH0154D67_PAGE_HEIGHT;
_writeToWindow(x, ys, x, yds, w, yde - yds);
}
}
delay(GxGDEH0154D67_PU_DELAY);
_current_page = -1;
_PowerOff();
}
void GxGDEH0154D67::drawCornerTest(uint8_t em)
{
if (_current_page != -1) return;
_Init_Full(em);
_writeCommand(0x24);
for (uint32_t y = 0; y < GxGDEH0154D67_HEIGHT; y++)
{
for (uint32_t x = 0; x < GxGDEH0154D67_WIDTH / 8; x++)
{
uint8_t data = 0xFF;
if ((x < 1) && (y < 8)) data = 0x00;
if ((x > GxGDEH0154D67_WIDTH / 8 - 3) && (y < 16)) data = 0x00;
if ((x > GxGDEH0154D67_WIDTH / 8 - 4) && (y > GxGDEH0154D67_HEIGHT - 25)) data = 0x00;
if ((x < 4) && (y > GxGDEH0154D67_HEIGHT - 33)) data = 0x00;
_writeData(data);
}
}
_Update_Full();
_PowerOff();
}

135
src/GxGDEH0154D67.h Normal file
View File

@ -0,0 +1,135 @@
// class GxGDEH0154D67 : Display class for GDEP015OC1 e-Paper from Dalian Good Display Co., Ltd.: www.good-display.com
//
// based on Demo Example from Good Display, available here: http://www.good-display.com/download_detail/downloadsId=515.html
// Controller : IL3829 : http://www.good-display.com/download_detail/downloadsId=534.html
//
// Author : J-M Zingg
//
// Version : see library.properties
//
// License: GNU GENERAL PUBLIC LICENSE V3, see LICENSE
//
// Library: https://github.com/ZinggJM/GxEPD
#ifndef _GxGDEH0154D67_H_
#define _GxGDEH0154D67_H_
#include <Arduino.h>
#include <GxEPD.h>
// the physical number of pixels (for controller parameter)
#define GxGDEH0154D67_X_PIXELS 200
#define GxGDEH0154D67_Y_PIXELS 200
#define GxGDEH0154D67_WIDTH GxGDEH0154D67_X_PIXELS
#define GxGDEH0154D67_HEIGHT GxGDEH0154D67_Y_PIXELS
#define GxGDEH0154D67_BUFFER_SIZE (uint32_t(GxGDEH0154D67_WIDTH) * uint32_t(GxGDEH0154D67_HEIGHT) / 8)
// divisor for AVR, should be factor of GxGDEH0154D67_HEIGHT
#define GxGDEH0154D67_PAGES 5
#define GxGDEH0154D67_PAGE_HEIGHT (GxGDEH0154D67_HEIGHT / GxGDEH0154D67_PAGES)
#define GxGDEH0154D67_PAGE_SIZE (GxGDEH0154D67_BUFFER_SIZE / GxGDEH0154D67_PAGES)
class GxGDEH0154D67 : public GxEPD
{
public:
#if defined(ESP8266)
//GxGDEH0154D67(GxIO& io, int8_t rst = D4, int8_t busy = D2);
// use pin numbers, other ESP8266 than Wemos may not use Dx names
GxGDEH0154D67(GxIO& io, int8_t rst = 2, int8_t busy = 4);
#else
GxGDEH0154D67(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); // 0x0 black, >0x0 white, 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();
void deepSleep();
// paged drawing, for limited RAM, drawCallback() is called GxGDEH0154D67_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 <typename T> static inline void
swap(T& a, T& b)
{
T t = a;
a = b;
b = t;
}
void _writeToWindow(uint16_t xs, uint16_t ys, uint16_t xd, uint16_t yd, uint16_t w, uint16_t h);
void _writeData(uint8_t data);
void _writeCommand(uint8_t command);
void _writeCommandData(const uint8_t* pCommandData, uint8_t datalen);
void _SetRamPointer(uint8_t addrX, uint8_t addrY, uint8_t addrY1);
void _SetRamArea(uint8_t Xstart, uint8_t Xend, uint8_t Ystart, uint8_t Ystart1, uint8_t Yend, uint8_t Yend1);
void _PowerOn(void);
void _PowerOff(void);
void _waitWhileBusy(const char* comment, uint16_t busy_time);
void _setRamDataEntryMode(uint8_t em);
void _InitDisplay(uint8_t em);
void _Init_Full(uint8_t em);
void _Init_Part(uint8_t em);
void _Update_Full(void);
void _Update_Part(void);
void _rotate(uint16_t& x, uint16_t& y, uint16_t& w, uint16_t& h);
protected:
#if defined(__AVR)
uint8_t _buffer[GxGDEH0154D67_PAGE_SIZE];
#else
uint8_t _buffer[GxGDEH0154D67_BUFFER_SIZE];
#endif
private:
GxIO& IO;
int16_t _current_page;
bool _using_partial_mode;
bool _diag_enabled;
int8_t _rst;
int8_t _busy;
static const uint16_t power_on_time = 80; // ms, e.g. 73508us
static const uint16_t power_off_time = 80; // ms, e.g. 68982us
static const uint16_t full_refresh_time = 4200; // ms, e.g. 1113273us
static const uint16_t partial_refresh_time = 300; // ms, e.g. 290867us
#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 GxGDEH0154D67
#define GxEPD_WIDTH GxGDEH0154D67_WIDTH
#define GxEPD_HEIGHT GxGDEH0154D67_HEIGHT
#define GxEPD_BitmapExamples <GxGDEH0154D67/BitmapExamples.h>
#define GxEPD_BitmapExamplesQ "GxGDEH0154D67/BitmapExamples.h"
#endif
#endif