diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index 111f68e09..71d9180f2 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -69,6 +69,8 @@ jobs: - source-path: ./ - name: ArduinoJson - name: Time + - name: AsyncTCP + - name: ESPAsyncWebServer - source-url: https://github.com/SolderedElectronics/Soldered-MFRC522-RFID-Reader-Arduino-Library.git - source-url: https://github.com/SolderedElectronics/Soldered-WS2812-Smart-Leds-Arduino-Library.git - source-url: https://github.com/SolderedElectronics/Soldered-BME280-BME680-Gas-Sensor-Arduino-Library.git diff --git a/README.md b/README.md index c0cd98fa7..2c237fce0 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,11 @@ There are many examples in the library that you demonstrate how to use any of th ### Documentation -Find Inkplate documentation [here](https://inkplate.readthedocs.io/en/latest/arduino.html). +Find Inkplate documentation [here](https://soldered.com/documentation/inkplate). ### Soldered Image Converter -In order to display an Image on Inkplate, you can use the Soldered Image Converter to convert from .png, .jpg, .bmp to .h files which can be easily added to your project. Download the latest release [here](https://github.com/SolderedElectronics/Soldered-Image-Converter/releases). +In order to display an Image on Inkplate, you can use the Soldered Image Converter to convert from .png, .jpg, .bmp to .h files which can be easily added to your project. See the latest version [here](http://soldered.com/image-converter). ### Using Inkplate with another microcontroller - Peripheral mode diff --git a/examples/Inkplate10/Advanced/DeepSleep/Inkplate10_Simple_Deep_Sleep/Inkplate10_Simple_Deep_Sleep.ino b/examples/Inkplate10/Advanced/DeepSleep/Inkplate10_Simple_Deep_Sleep/Inkplate10_Simple_Deep_Sleep.ino index 00cfdccdf..4f5c84510 100644 --- a/examples/Inkplate10/Advanced/DeepSleep/Inkplate10_Simple_Deep_Sleep/Inkplate10_Simple_Deep_Sleep.ino +++ b/examples/Inkplate10/Advanced/DeepSleep/Inkplate10_Simple_Deep_Sleep/Inkplate10_Simple_Deep_Sleep.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Battery_Voltage/Inkplate10_Read_Battery_Voltage.ino b/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Battery_Voltage/Inkplate10_Read_Battery_Voltage.ino index 40beb7bcd..fdac31bce 100644 --- a/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Battery_Voltage/Inkplate10_Read_Battery_Voltage.ino +++ b/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Battery_Voltage/Inkplate10_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Temperature/Inkplate10_Read_Temperature.ino b/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Temperature/Inkplate10_Read_Temperature.ino index 1c327640c..b01063cc4 100644 --- a/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Temperature/Inkplate10_Read_Temperature.ino +++ b/examples/Inkplate10/Advanced/Other/Inkplate10_Read_Temperature/Inkplate10_Read_Temperature.ino @@ -14,7 +14,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate10/Basic/Inkplate10_Black_And_White/Inkplate10_Black_And_White.ino b/examples/Inkplate10/Basic/Inkplate10_Black_And_White/Inkplate10_Black_And_White.ino index f9f2b50d7..d2f114b7b 100644 --- a/examples/Inkplate10/Basic/Inkplate10_Black_And_White/Inkplate10_Black_And_White.ino +++ b/examples/Inkplate10/Basic/Inkplate10_Black_And_White/Inkplate10_Black_And_White.ino @@ -15,7 +15,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate10/Basic/Inkplate10_Black_And_White/logo.h b/examples/Inkplate10/Basic/Inkplate10_Black_And_White/logo.h index 00bc0286e..4661af05b 100644 --- a/examples/Inkplate10/Basic/Inkplate10_Black_And_White/logo.h +++ b/examples/Inkplate10/Basic/Inkplate10_Black_And_White/logo.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t logo[] PROGMEM = { diff --git a/examples/Inkplate10/Basic/Inkplate10_Grayscale/image.h b/examples/Inkplate10/Basic/Inkplate10_Grayscale/image.h index 0895394a7..b3768320c 100644 --- a/examples/Inkplate10/Basic/Inkplate10_Grayscale/image.h +++ b/examples/Inkplate10/Basic/Inkplate10_Grayscale/image.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t picture1[] = { 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0xaa, 0xaa, 0x99, 0x99, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xa9, 0x99, 0x99, 0xaa, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0x9a, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x99, 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x9a, 0xaa, 0xaa, 0xba, 0xaa, 0xba, 0x9a, 0xba, 0xaa, 0xa9, 0x98, 0x88, 0x87, 0x77, 0x88, 0x88, 0x77, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x78, 0x88, 0x87, 0x77, 0x77, diff --git a/examples/Inkplate10/Basic/Inkplate10_Hello_World/Inkplate10_Hello_World.ino b/examples/Inkplate10/Basic/Inkplate10_Hello_World/Inkplate10_Hello_World.ino index 2f8ae4adc..21bb74647 100644 --- a/examples/Inkplate10/Basic/Inkplate10_Hello_World/Inkplate10_Hello_World.ino +++ b/examples/Inkplate10/Basic/Inkplate10_Hello_World/Inkplate10_Hello_World.ino @@ -15,7 +15,7 @@ In order to convert your images into a format compatible with Inkplate, use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ diff --git a/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/Inkplate10_Peripheral_Mode.ino b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/Inkplate10_Peripheral_Mode.ino index 9f51f2f75..5f9e5ac0b 100644 --- a/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/Inkplate10_Peripheral_Mode.ino +++ b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/Inkplate10_Peripheral_Mode.ino @@ -1,11 +1,12 @@ /* - Inkplate10_Peripheral_Mode sketch for Soldered Inkplate 10 - Select "e-radionica Inkplate10" or "Soldered Inkplate10" from Tools -> Board menu. - Don't have "e-radionica Inkplate10" or "Soldered Inkplate10" option? Follow our tutorial and add it: + Inkplate10_Peripheral_Mode sketch for Soldered Inkplate 10. + For this example you will need only a USB-C cable and Inkplate 10 + Select "Soldered Inkplate10" from Tools -> Board menu. + Don't have "Soldered Inkplate10" option? Follow our tutorial and add it: https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ Using this sketch, you don't have to program and control e-paper using Arduino code. - Instead, you can send UART command. This give you flexibility that you can use this Inkplate 10 on any platform! + Instead, you can send UART command. This give you flexibility that you can use this Inkplate 5 on any platform! Because it uses UART, it's little bit slower and it's not recommended to send bunch of drawPixel command to draw some image. Instead, load bitmaps and pictures on SD card and load image from SD. @@ -15,594 +16,49 @@ Learn more about Peripheral Mode: https://inkplate.readthedocs.io/en/latest/peripheral-mode.html - UART settings are: 115200 baud, standard parity, ending with "\n\r" (both) + UART settings are: 115200 baud, standard parity, ending with "\n\r" (Both NL & CR) You can send commands via USB port or by directly connecting to ESP32 TX and RX pins. - Don't forget you need to send #L(1)* after each command to show it on the display - (equal to display.display()). - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 15 July 2020 by Soldered + Want to learn more about Inkplate? Visit https://soldered.com/documentation/inkplate/ + 15 April 2024 by Soldered */ +// Include Inkplate library. +#include "Inkplate.h" -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#if !defined(ARDUINO_INKPLATE10) && !defined(ARDUINO_INKPLATE10V2) -#error \ - "Wrong board selection for this example, please select e-radionica Inkplate10 or Soldered Inkplate10 in the boards menu." -#endif +// Include peripheral mode library. +#include "InkplatePeripheralMode.h" -#include -Inkplate display(INKPLATE_1BIT); +// Include the header files with sketch settngs (buffer size, serial timeput, argument termination char etc). +#include "settings.h" -#define BUFFER_SIZE 1000 -char commandBuffer[BUFFER_SIZE + 1]; -char strTemp[2001]; +// Pointer to the singleton class instance. +PeripheralMode *peripheral; + +// Inkplate object. +Inkplate display(INKPLATE_3BIT); void setup() { + // Init Inkplate library. display.begin(); - Serial.begin(115200); - memset(commandBuffer, 0, BUFFER_SIZE); -} - -void loop() -{ - // put your main code here, to run repeatedly: - if (Serial.available()) - { - while (Serial.available()) - { - for (int i = 0; i < (BUFFER_SIZE - 1); i++) - { - commandBuffer[i] = commandBuffer[i + 1]; - } - commandBuffer[BUFFER_SIZE - 1] = Serial.read(); - } - } - char *s = NULL; - char *e = NULL; - for (int i = 0; i < BUFFER_SIZE; i++) - { - if (commandBuffer[i] == '#' && s == NULL) - s = &commandBuffer[i]; - if (commandBuffer[i] == '*' && e == NULL) - e = &commandBuffer[i]; - } - if (s != NULL && e != NULL) - { - if ((e - s) > 0) - { - int x, x1, x2, y, y1, y2, x3, y3, l, c, w, h, r, n, rx, ry, xc, yc, yr; - uint8_t hr, min, sec, wday, day, mon, k, as, am, ah, ad, aw, amc, v; - bool ie, ip; - System::rtcCountdownSrcClock sc; - uint32_t ep, ae; - char b; - char temp[150]; - switch (*(s + 1)) - { - case '?': - Serial.print("OK"); - break; - - case '0': - sscanf(s + 3, "%d,%d,%d", &x, &y, &c); - // sprintf(temp, "display.drawPixel(%d, %d, %d)\n\r", x, y, c); - // Serial.print(temp); - display.drawPixel(x, y, c); - break; - - case '1': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawLine(x1, y1, x2, y2, c); - break; - - case '2': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastVLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastVLine(x, y, l, c); - break; - - case '3': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastHLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastHLine(x, y, l, c); - break; - - case '4': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.drawRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.drawRect(x, y, w, h, c); - break; - - case '5': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.drawCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.drawCircle(x, y, r, c); - break; - - case '6': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.drawTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.drawTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case '7': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.drawRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.drawRoundRect(x, y, w, h, r, c); - break; - - case '8': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.fillRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.fillRect(x, y, w, h, c); - break; - - case '9': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.fillCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.fillCircle(x, y, r, c); - break; - case 'A': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.fillTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.fillTriangle(x1, y1, x2, y2, x3, y3, c); - break; + // Create one instance of the object. + peripheral = PeripheralMode::getInstance(); - case 'B': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.fillRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.fillRoundRect(x, y, w, h, r, c); - break; - - case 'C': - sscanf(s + 3, "\"%2000[^\"]\"", strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - // Serial.print("display.print(\""); - // Serial.print(strTemp); - // Serial.println("\");"); - display.print(strTemp); - break; - - case 'D': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setTextSize(%d)\n", c); - // Serial.print(temp); - display.setTextSize(c); - break; - - case 'E': - sscanf(s + 3, "%d,%d", &x, &y); - // sprintf(temp, "display.setCursor(%d, %d)\n", x, y); - // Serial.print(temp); - display.setCursor(x, y); - break; - - case 'F': - sscanf(s + 3, "%c", &b); - // sprintf(temp, "display.setTextWrap(%s)\n", b == 'T' ? "True" : "False"); - // Serial.print(temp); - if (b == 'T') - display.setTextWrap(true); - if (b == 'F') - display.setTextWrap(false); - break; - - case 'G': - sscanf(s + 3, "%d", &c); - c &= 3; - // sprintf(temp, "display.setRotation(%d)\n", c); - // Serial.print(temp); - display.setRotation(c); - break; - - case 'H': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawBitmapFromSd(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - - case 'I': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setDisplayMode(%s)\n", c == 0 ? "INKPLATE_1BIT" : "INKPLATE_3BIT"); - // Serial.print(temp); - if (c == 1) - display.selectDisplayMode(INKPLATE_1BIT); - if (c == 3) - display.selectDisplayMode(INKPLATE_3BIT); - break; - - case 'J': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - if (display.getDisplayMode() == INKPLATE_1BIT) - { - Serial.println("#J(0)*"); - Serial.flush(); - } - if (display.getDisplayMode() == INKPLATE_3BIT) - { - Serial.println("#J(1)*"); - Serial.flush(); - } - } - break; - - case 'K': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.clearDisplay();\n"); - display.clearDisplay(); - } - break; - - case 'L': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.display();\n"); - display.display(); - } - break; - - case 'M': - sscanf(s + 3, "%d,%d,%d", &y1, &x2, &y2); - // sprintf(temp, "display.partialUpdate(%d, %d, %d);\n", y1, x2, y2); - // Serial.print(temp); - display.partialUpdate(); - break; - - case 'N': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#N("); - Serial.print(display.readTemperature(), DEC); - // Serial.print(23, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'O': - sscanf(s + 3, "%d", &c); - if (c >= 0 && c <= 2) - { - Serial.print("#O("); - Serial.print(display.readTouchpad(c), DEC); - // Serial.print(0, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'P': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#P("); - Serial.print(display.readBattery(), 2); - // Serial.print(3.54, 2); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'Q': - sscanf(s + 3, "%d", &c); - c &= 1; - // if (c == 0) Serial.print("display.einkOff();\n"); - // if (c == 1) Serial.print("display.einkOn();\n"); - if (c == 0) - display.einkOff(); - if (c == 1) - display.einkOn(); - break; - - case 'R': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#R("); - Serial.print(display.getPanelState(), DEC); - // Serial.print(1, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'S': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawImage(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - case 'T': - int t; - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c, &t); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawThickLine(x1, y1, x2, y2, c, t); - break; - case 'U': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawElipse(rx, ry, xc, yc, c); - break; - case 'V': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.fillElipse(rx, ry, xc, yc, c); - break; - case 'W': - sscanf(s + 3, "%d,%d,%d", &hr, &min, &sec); - // sprintf(temp, "display.rtcSetTime(%d, %d, %d);\n\r", hr, min, sec); - // Serial.println(temp); - display.rtcSetTime(hr, min, sec); - break; - case 'X': - sscanf(s + 3, "%d,%d,%d,%d", &wday, &day, &mon, &yr); - // sprintf(temp, "display.rtcSetDate(%d, %d, %d, %d);\n\r", wday, day, mon, yr); - // Serial.println(temp); - display.rtcSetDate(wday, day, mon, yr); - break; - case 'Y': - sscanf(s + 3, "%d", &ep); - // sprintf(temp, "display.rtcSetEpoch(%d);\n\r", ep); - // Serial.println(temp); - display.rtcSetEpoch(ep); - break; - case 'Z': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - display.rtcGetRtcData(); - Serial.print("#Z("); - Serial.print(display.rtcGetEpoch()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'a': - sscanf(s + 3, "%d", &k); - if (k > 6) - { - Serial.println("INVALID"); - break; - } - display.rtcGetRtcData(); - Serial.print("#a("); - switch (k) - { - case 0: - Serial.print(display.rtcGetSecond()); - break; - case 1: - Serial.print(display.rtcGetMinute()); - break; - case 2: - Serial.print(display.rtcGetHour()); - break; - case 3: - Serial.print(display.rtcGetDay()); - break; - case 4: - Serial.print(display.rtcGetWeekday()); - break; - case 5: - Serial.print(display.rtcGetMonth()); - break; - case 6: - Serial.print(display.rtcGetYear()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'b': - sscanf(s + 3, "%d,%d,%d,%d,%d", &as, &am, &ah, &ad, &aw); - // sprintf(temp, "display.rtcSetAlarm(%d, %d, %d, %d, %d);\n\r", as, am, ah, ad, aw); - // Serial.println(temp); - display.rtcSetAlarm(as, am, ah, ad, aw); - break; - case 'c': - sscanf(s + 3, "%d,%d", &ae, &amc); - // sprintf(temp, "display.rtcSetAlarmEpoch(%d, %d);\n\r", ae, amc); - // Serial.println(temp); - display.rtcSetAlarmEpoch(ae, amc); - break; - case 'd': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#d("); - Serial.print(display.rtcCheckAlarmFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'e': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearAlarmFlag()"); - display.rtcClearAlarmFlag(); - Serial.flush(); - } - break; - case 'f': - sscanf(s + 3, "%d", &k); - if (k > 4) - { - Serial.println("INVALID"); - break; - } - Serial.print("#f("); - switch (k) - { - case 0: - Serial.print(display.rtcGetAlarmSecond()); - break; - case 1: - Serial.print(display.rtcGetAlarmMinute()); - break; - case 2: - Serial.print(display.rtcGetAlarmHour()); - break; - case 3: - Serial.print(display.rtcGetAlarmDay()); - break; - case 4: - Serial.print(display.rtcGetAlarmWeekday()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'g': - sscanf(s + 3, "%d,%d,%d,%d", &sc, &v, &ie, &ip); - - if (sc > 3) - { - Serial.println("ERROR"); - break; - } + // Set the baud rate (in this case 115200 bauds), set the serial buffer and it's size. + if (!peripheral->begin(&Serial, &display, 115200ULL, SERIAL_UART_RX_PIN, SERIAL_UART_TX_PIN, SERIAL_BUFFER_SIZE)) + { + // Send an error message on serial. + Serial.println("Peripheral mode init failed!\nProgram halted!"); - // sprintf(temp, "display.rtcTimerSet(%d, %d, %d, %d);\n\r", sc, v, ie, ip); - // Serial.println(temp); - display.rtcTimerSet(sc, v, ie, ip); - break; - case 'h': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#h("); - Serial.print(display.rtcCheckTimerFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'i': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearTimerFlag()"); - display.rtcClearTimerFlag(); - } - break; - case 'j': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcDisableTimer()"); - display.rtcDisableTimer(); - } - break; - case 'k': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#k("); - Serial.print(display.rtcIsSet()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'l': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcReset()"); - display.rtcReset(); - } - break; - } - *s = 0; - *e = 0; - } + // Stop the program from executing! + while(1); } + Serial.println("READY"); } -int hexToChar(char c) +void loop() { - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - return -1; -} + // Check if there is something in the serial. + peripheral->getDataFromSerial(SERIAL_TIMEOUT_MS); +} \ No newline at end of file diff --git a/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/InkplatePeripheralMode.cpp b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/InkplatePeripheralMode.cpp new file mode 100644 index 000000000..5b30be486 --- /dev/null +++ b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/InkplatePeripheralMode.cpp @@ -0,0 +1,1605 @@ +// Add header of the library to the source files. +#include "InkplatePeripheralMode.h" + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +// Include the list with all available commands. +#include "commandList.h" + +// Define the static member. +PeripheralMode* PeripheralMode::_instancePtr = nullptr; + +bool PeripheralMode::begin(HardwareSerial *_serialPtr, Inkplate *_inkplatePtr, uint32_t _baud, uint8_t _rxPin, uint8_t _txPin, uint32_t _size) +{ + // Store every parameter locally and check them. + if ((_serialPtr == nullptr) || (_inkplatePtr == nullptr) || (_size == 0)) return false; + _serial = _serialPtr; + _display = _inkplatePtr; + _bufferSize = _size; + + // Init the serial communication @ desired communication speed. Also set the pins. + _serial->begin(_baud, SERIAL_8N1, _rxPin, _txPin); + + // Allocate memory for the serial buffer in the PSRAM. + _serialBuffer = (char*)ps_malloc(_bufferSize * sizeof(char)); + + // Check if allocation is successful. + if (_serialBuffer == NULL) + { + return false; + } + + // If everything is ok, return true. + return true; +} + +bool PeripheralMode::getDataFromSerial(unsigned long _timeout) +{ + // Variable used for timeouting incoming serial data. + unsigned long _timestamp; + + // Variables for parsing. + char *_commandEndPosition = NULL; + + if (_serial->available()) + { + // You got something on the serial? Cool! + // First capture the current time (needed for timeouting!). + _timestamp = millis(); + + // Capture the timestamp for automatic buffer cleaning. + _bufferAutoCleanTimestamp = millis(); + + // Try to capture incoming serial data until the timeout or until the buffer is full! + while (((unsigned long)(millis() - _timestamp) < _timeout) && (_serialBufferIndex < (_bufferSize - 2))) + { + if (_serial->available()) + { + _serialBuffer[_serialBufferIndex++] = _serial->read(); + _timestamp = millis(); + } + } + + // Add a nul-terminating char. + _serialBuffer[_serialBufferIndex] = '\0'; + + // Go though all commands that are received. + _commandEndPosition = _serialBuffer; + while (_commandEndPosition != NULL) + { + // Variables for parsing. + int _command = 0; + int _repeatable = 0; + int _payloadSize = 0; + char *_payload = NULL; + + // Check received for validity. If everything went ok, parse the command. + if (checkPacket(_commandEndPosition, _bufferSize - (uint32_t)(_commandEndPosition - _serialBuffer), &_command, &_repeatable, &_payloadSize, &_payload, &_commandEndPosition)) + { + // If is a valid command, try to parse it. + parseCommand(_command, _repeatable, _payloadSize, _payload); + + // Reset the counter. + _serialBufferIndex = 0; + + // Go to the next command by advancing to the next index. + _commandEndPosition++; + } + } + } + + // Periodically clear the buffer from the remained invalid data. + if (((unsigned long)(millis() - _bufferAutoCleanTimestamp) >= SERIAL_BUFFER_CLEAN_TIME_MS) && _serialBufferIndex) + { + // Clear the buffer. + memset(_serialBuffer, 0, _bufferSize); + + // Reset the index variable. + _serialBufferIndex = 0; + + Serial.println("Cleaned"); + } + + // If data is not valid, return false; + return false; +} + +bool PeripheralMode::checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandLastPosition) +{ + // Prepare the command end position pointer - set it to null. Later in the code it will be set to some address that corresponds end position of the command. + // If not found, it will stay on null. + *_commandLastPosition = NULL; + + // -------------------PARSING START AND STOP FLAGS------------------- + // First check if there is start and stop flags. + char *_startFlag = strstr(_buffer, "TS"); + + // Check start flag. If the start flag is wrong, return error. + if (_startFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _startFlag; + + Serial.printf("Passed 1st check!\n"); + Serial.flush(); + + // -------------------PARSING COMMAND------------------- + // Check the command and payload size. + // First find the first semicolon. + char *_cmd = strchr(_startFlag + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_cmd == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _cmd; + + Serial.printf("Passed 2nd check!\n"); + Serial.flush(); + + // Check if there is a command. Move pointer by one place to the right (skip the semicolon). + int _cmdDataInt = strtol(_cmd + 1, NULL, 16); + + // If command if equal to zero, something is wrong. + if (_cmdDataInt == 0) return false; + + Serial.printf("Passed 3rd check!\n"); + Serial.flush(); + + // -------------------PARSING REPEATABLE FLAG------------------- + // Get the repeatable flag. + char *_repeatable = strchr(_cmd + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_repeatable == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _repeatable; + + Serial.printf("Passed 4th check!\n"); + Serial.flush(); + + // Get the repeatable flag data from HEX. Move one place to the right (skip the semicolon). + int _repeatableFlagInt = strtol(_repeatable + 1, NULL, 16); + + // Repeatable flag can only be one or zero. Discard otherwise. + if (_repeatableFlagInt > 1 || _repeatableFlagInt < 0) return false; + + Serial.printf("Passed 5th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD SIZE------------------- + // Go to the next semicolon (payload size). + char *_payload = strchr(_repeatable + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_payload == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payload; + + Serial.printf("Passed 6th check!\n"); + Serial.flush(); + + // Get the number! + int _payloadSizeInt = strtol(_payload + 1, NULL, 16); + + // Go to the start of the payload by finding next semicolon. + char *_payloadDataInt = strchr(_payload + 1, TEMR_CHAR); + + if (_payloadDataInt == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payloadDataInt; + + // -------------------CHECKING THE STOP FLAG------------------- + // Go to the next semicolon, which is for the stop flag. + // For the stop flag is a little bit more complicated. Since this can be found in the payload, we need to find the last one 0xaa in the buffer. + // For that we are gonna try to go though the whole command and check if the stop flag is at the end. If not, command is considered invalid. + char *_stopFlag = strchr(_payloadDataInt + 1 + _payloadSizeInt, TEMR_CHAR); + + if (_stopFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _stopFlag; + + // Check if the stop flag is really there. If not, return with fail. + if (strstr(_stopFlag, "TE") != (_stopFlag + 1)) return false; + + // Update the stop flag position by one (move after the semicolon). + _stopFlag++; + + Serial.printf("Passed 7th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD DATA------------------- + // Increment the pointer. Now we're at the first byte of the payload. + _payloadDataInt++; + + // Check for the size. If the size is ok, fill the command, payload size and payload data start pointers. + if ((_stopFlag - _payloadDataInt - 1) == _payloadSizeInt) + { + *_command = _cmdDataInt; + *_repeatableFlag = _repeatableFlagInt; + *_payloadSize = _payloadSizeInt; + *_payloadDataStart = _payloadDataInt; + return true; + } + + Serial.printf("ERROR: stopFlag: %d payloadDataInt: %d payloadSizeInt %d\n", _stopFlag, _payloadDataInt, _payloadSizeInt); + Serial.flush(); + + // Otherwise, return null, indicating an error. + return false; +} + +void PeripheralMode::sendResponse(int _command, int _payloadSize, char *_payload) +{ + _serial->printf("TS;%04X;%04X;%s;TE\r\n", _command, _payloadSize, _payload); +} + +char* PeripheralMode::getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size) +{ + // Count already found arguments. + int _currentArgument = 0; + + // If is selected argument that does not exist, return NULL pointer as error; + if (_n >= _noOfArgs || _n < 0) return NULL; + + // Try get the wanted arguments. + // First declare two pinters; one represents start of the argument, second end. + // In initial state, start of the first argument is, well, start of the payload buffer. + // End of the first argument is start of the second argument -> semicolon. + char *_start = _inBuffer; + char *_stop = (char*)memchr((char*)(_inBuffer + 1), TEMR_CHAR, _payloadSize); + + // Run trough the loop until you hit the right argument. + while ((_currentArgument != _n) && (_start != NULL)) + { + // Copy end of the last argument and move the pointer by one place (to skip the semicolon). + _start = _stop + 1; + + // Try to find, next semicolon (or start of the next argument) + _stop = (char*)memchr((char*)(_stop + 1), TEMR_CHAR, _payloadSize - (_stop - _inBuffer) + 1); + + // Increment argument counter. + _currentArgument++; + } + + // Return what has been found and also return the size of the argument. + if (_size != NULL) *_size = _stop - _start; + return _start; +} + +int PeripheralMode::getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize) +{ + // Find the total number of arguments. + int _noOfArgs = 0; + + // Count every semicolon (add also one at the end of the payload). + for (int i = 0; i < _payloadSize + 1; i++) + { + if (_inBuffer[i] == TEMR_CHAR) _noOfArgs++; + } + + // Return the number. + return _noOfArgs; +} + +void PeripheralMode::parseCommand(int _command, int _repeat, int _payloadSize, char* _payload) +{ + // Parse the command. You can add command if needed. + // First find the number of sent arguments. + int _numberOfArgs = getNumberOfArgs(_payload, _payloadSize); + + switch(_command) + { + case CMD_PING: + { + // Payload doesn't matter here, just send the response. + sendResponse(CMD_PING, strlen((char*)_okResponseString), (char*)_okResponseString); + break; + } + case CMD_DRAW_PIXEL: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 3, _repeat); + + // Arguments can be repeated for faster transfer, so multiple pixels can be written at once. + for (int i = 0; i < _numberOfArgs; i+=3) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argColor == NULL) return; + + // Write the pixels. + _display->drawPixel(atol(_argX), atol(_argY), atol(_argColor)); + } + break; + } + case CMD_DRAW_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTVLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastVLine(atol(_argX), atol(_argY), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTHLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastHLine(atol(_argX), atol(_argY), atol(_argW), atol(_argColor)); + } + break; + } + case CMD_DRAW_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_DRAW_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_THICK_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + char *_argThick; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argThick = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL || _argThick == NULL) return; + + // Write the lines. + _display->drawThickLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor), atol(_argThick)); + } + break; + } + case CMD_DRAW_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_FILL_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_FILL_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_FILL_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_PRINT: + { + // Check the number of arguments, it can only be one and do not allow repeated payload. + if (_numberOfArgs != 1 || _repeat) return; + + // Get the arguments ant it's size. + char *_arg; + uint32_t _argSize; + _arg = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &_argSize); + + // Convert them from HEX ASCII to ASCII of the fly. + hexAsciiToAscii(_arg, _argSize); + + // Add nul-terminating char at the end of the argument (text) + _arg[_argSize / 2] = '\0'; + + // Print it on display. + _display->print(_arg); + break; + } + case CMD_SET_TEXT_SIZE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textSize; + + // Get the arguments ant it's size. + _textSize = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textSize == NULL) return; + + // Set new text size. + _display->setTextSize(atol(_textSize)); + break; + } + case CMD_SET_TEXT_COLOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_textColor; + char *_bgColor; + + // Get the arguments ant it's size. + _textColor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _bgColor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_textColor == NULL || _bgColor == NULL) return; + + // Set new text and background color. + _display->setTextColor(atol(_textColor), atol(_bgColor)); + break; + } + case CMD_SET_CURSOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_xCursor; + char *_yCursor; + + // Get the arguments ant it's size. + _xCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_xCursor == NULL || _yCursor == NULL) return; + + // Set new text cursor position. + _display->setCursor(atol(_xCursor), atol(_yCursor)); + break; + } + case CMD_SET_TEXT_WRAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textWrap; + + // Get the arguments ant it's size. + _textWrap = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textWrap == NULL) return; + + // Set text wrapping.. + _display->setTextWrap(atol(_textWrap)); + break; + } + case CMD_SET_ROTATION: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_rotation; + + // Get the arguments ant it's size. + _rotation = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_rotation == NULL) return; + + // Set text wrapping.. + _display->setRotation(atol(_rotation)); + break; + } + case CMD_SD_CARD_INIT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_init; + + // Get the arguments ant it's size. + _init = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_init == NULL && atol(_init) != 1) return; + + // Try to init microSD card + if (_display->sdCardInit()) + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_failResponseString), (char*)_failResponseString); + } + break; + } + case CMD_SD_CARD_SLEEP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_uSDSleep; + + // Get the arguments ant it's size. + _uSDSleep = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_uSDSleep == NULL && atol(_uSDSleep) != 1) return; + + // Set microSD card to sleep. + _display->sdCardSleep(); + break; + } + case CMD_DRAW_BITMAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_color; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _color = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _color == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + hexAsciiToAscii(_hexData, _argSize); + + // Display the bitmap. + _display->drawBitmap(atol(_xPos), atol(_yPos), (uint8_t*)_hexData, atol(_w), atol(_h), atol(_color)); + + break; + } + case CMD_DRAW_IMAGE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_dither; + char *_invert; + char *_path; + char *_pathType; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _dither = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _invert = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _pathType = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _path = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _dither == NULL || _invert == NULL || _pathType==NULL ||_path == NULL) return; + + if(_pathType == 0) + { + // Convert it on the fly from HEX ASCII to standard ASCII. This can be done directly in the buffer since ASCII will take up half the size of the original _path size. + hexAsciiToAscii(_path, _argSize); + + // Add null-termination at the end of the argument. + _path[_argSize / 2] = '\0'; + + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_path, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + } + else + { + char _pathNew[_argSize+1]; + strncpy(_pathNew, _path, _argSize); + _pathNew[_argSize]='\0'; + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_pathNew, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + } + + + break; + + } + case CMD_DRAW_IMAGE_BUFFER: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 4, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. + hexAsciiToAscii(_hexData, _argSize); + + // Display the image from the buffer. + _display->drawImage((const uint8_t*)_hexData, atol(_xPos), atol(_yPos), atol(_w), atol(_h)); + break; + } + case CMD_SET_MODE: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + _display->setDisplayMode(atol(_arg1)); + break; + } + case CMD_GET_MODE: + { + char response[1]; + itoa(_display->getDisplayMode(), response, 10); + sendResponse(CMD_GET_MODE, strlen(response), response); + break; + } + case CMD_CLEAR_DISPLAY: + { + // No payload check needed, just clear the display + _display->clearDisplay(); + + break; + } + case CMD_DISPLAY: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + // Execute the command! + _display->display(atol(_arg1)); + break; + } + case CMD_PARTIAL_UPDATE: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + // Execute the command! + _display->partialUpdate(atol(_arg1), atol(_arg2)); + break; + } + case CMD_READ_TEMP: + { + char response[4]; + itoa(_display->readTemperature(), response, 10); + sendResponse(CMD_READ_TEMP, strlen(response), response); + break; + } + case CMD_READ_TOUCHPAD: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + char response[1]; + itoa(_display->readTouchpad(atoi(_arg1)), response, 10); + sendResponse(CMD_READ_TOUCHPAD, strlen(response), response); + + break; + } + case CMD_READ_BATTERY: + { + Serial.println(_display->readBattery()); + char response[50]; + sprintf(response,"%lf", _display->readBattery()); + sendResponse(CMD_READ_BATTERY, strlen(response), response); + break; + } + case CMD_EINK_PMIC: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + if(atoi(_arg1) == 0) + { + _display->einkOff(); + } + else + { + _display->einkOn(); + } + + break; + } + case CMD_RTC_SET_TIME: + { + // Check the number of arguments. + if (_numberOfArgs != 3) return; + + // Get the argument. + char *_arg1; // H + char *_arg2; // M + char *_arg3; // S + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL) return; + + + + _display->rtcSetTime(atoi(_arg1), atoi(_arg2), atoi(_arg3)); + + break; + } + case CMD_RTC_SET_DATE: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Weekday + char *_arg2; // Day + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + + _display->rtcSetDate(atoi(_arg1), atoi(_arg2), atoi(_arg3), atoi(_arg4)); + break; + } + case CMD_RTC_SET_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // Epoch + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + _display->rtcSetEpoch(atoll(_arg1)); + break; + } + case CMD_RTC_UPDATE: + { + _display->rtcGetRtcData(); + break; + } + case CMD_RTC_GET_DATA_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d %d/%d/%d", _display->rtcGetHour(),_display->rtcGetMinute(), _display->rtcGetSecond(), + _display->rtcGetWeekday(), _display->rtcGetDay(), _display->rtcGetMonth(), _display->rtcGetYear()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_ALARM: + { + // Check the number of arguments. + if (_numberOfArgs != 5) return; + + // Get the argument. + char *_arg1; // sec + char *_arg2; // min + char *_arg3; // hour + char *_arg4; // day + char *_arg5; // weekday + + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _arg5 = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL || _arg5== NULL) return; + + _display->rtcEnableAlarm(); + + _display->rtcSetAlarm(atoi(_arg1),atoi(_arg2),atoi(_arg3),atoi(_arg4),atoi(_arg5)); + + break; + } + case CMD_RTC_SET_ALARM_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; // epoch + char *_arg2; // match + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + _display->rtcSetAlarmEpoch(atoll(_arg1),atoi(_arg2)); + + break; + } + case CMD_RTC_CLEAR_AL_FLAG: + { + _display->rtcClearAlarmFlag(); + break; + } + case CMD_RTC_GET_ALARM_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d-%d", _display->rtcGetAlarmHour(),_display->rtcGetAlarmMinute(), _display->rtcGetAlarmSecond(), _display->rtcGetAlarmDay(), _display->rtcGetAlarmWeekday()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_TIMER: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Source clock + char *_arg2; // + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + Inkplate::rtcCountdownSrcClock clock; + + switch(atoi(_arg1)) + { + case 0: + clock=Inkplate::TIMER_CLOCK_4096HZ; + break; + case 1: + clock=Inkplate::TIMER_CLOCK_64HZ; + break; + case 2: + clock=Inkplate::TIMER_CLOCK_1HZ; + break; + case 3: + clock=Inkplate::TIMER_CLOCK_1PER60HZ; + break; + default: + return; + + } + + _display->rtcTimerSet(clock, atoi(_arg2), atoi(_arg3), atoi(_arg4)); + + break; + } + case CMD_RTC_GET_TIMER_FLAG: + { + char response[1]; + itoa(_display->rtcCheckTimerFlag(), response, 10); + sendResponse(CMD_RTC_GET_TIMER_FLAG, strlen(response), response); + + break; + } + case CMD_RTC_CLEAR_TIMER_FLAG: + { + _display->rtcClearTimerFlag(); + break; + } + case CMD_RTC_DISABLE_TIMER: + { + _display->rtcDisableTimer(); + break; + } + case CMD_RTC_IS_SET: + { + char response[1]; + itoa(_display->rtcIsSet(), response, 10); + sendResponse(CMD_RTC_IS_SET, strlen(response), response); + break; + } + case CMD_RTC_RESET: + { + _display->rtcReset(); + break; + } + case CMD_ESP32_DEEPSLEEP: + { + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + esp_deep_sleep_start(); + break; + } + case CMD_ESP32_LIGHTSLEEP: + { + + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + delay(10); + esp_light_sleep_start(); + break; + } + case CMD_TOUCH_INIT: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_AVAILABLE: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_GET_DATA: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_CONNECT_WIFI: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_ssid; + char *_password; + + uint32_t ssidSize, passwordSize; + + _ssid = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &ssidSize); + _password = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &passwordSize); + + // Check if they are valid. + if (_ssid == NULL || _password == NULL) return; + + char ssid[ssidSize + 1]; + char password[passwordSize + 1]; + + strncpy(ssid, _ssid, ssidSize); + ssid[ssidSize] = '\0'; + + strncpy(password, _password, passwordSize); + password[passwordSize] = '\0'; + + + Serial.println(ssid); + Serial.println(password); + + + if(_display->connectWiFi(ssid, password)) + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + case CMD_DISCONNECT_WIFI: + { + _display->disconnect(); + break; + } + case CMD_GET_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + + // Get the arguments. + char *_server; + + uint32_t serverSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + + strncpy(server,_server, serverSize); + + server[serverSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + + // Your Domain name with URL path or IP address with path + http.begin(server); + + // Send HTTP GET request + int httpResponseCode = http.GET(); + + if (httpResponseCode>0) { + String payload = http.getString(); + sendResponse(CMD_GET_REQUEST, strlen(payload.c_str()), (char*)payload.c_str()); + } + else { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + } + else + { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + + case CMD_POST_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_server; + char *_postMessage; + + uint32_t serverSize; + uint32_t postSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + _postMessage = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &postSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + char postMessage[postSize+1]; + + strncpy(server,_server, serverSize); + strncpy(postMessage, _postMessage, postSize); + + server[serverSize]='\0'; + postMessage[postSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + // Your Domain name with URL path or IP address with path + http.begin(server); + + http.addHeader("Content-Type", "text/plain"); + + int httpResponseCode = http.POST(postMessage); + + if (httpResponseCode>0) { + sendResponse(CMD_POST_REQUEST, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else { + sendResponse(CMD_POST_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + + } + break; + } + } +} + +int PeripheralMode::hexToChar(int a, int b) +{ + return ((16 * charToInt(a)) + charToInt(b)); +} + +int PeripheralMode::charToInt(char a) +{ + // Convert to uppercase + a = toupper(a); + + if (a >= '0' && a <= '9') + return a - '0'; + if (a >= 'A' && a <= 'F') + return ((a - 'A') + 10); +} + +void PeripheralMode::checkArguments(int *_noOfArgs, int _maxArg, int _repeat) +{ + // Check the number of the arguments. + if ((*_noOfArgs) < _maxArg) return; + + // If the repeatable payload option is not enabled, restrict to only first argument. + if (!_repeat) (*_noOfArgs) = _maxArg; +} + +void PeripheralMode::hexAsciiToAscii(char *_buffer, uint32_t _size) +{ + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + for (uint32_t i = 0; i < _size; i+=2) + { + _buffer[i / 2] = hexToChar(_buffer[i], _buffer[i + 1]); + } +} \ No newline at end of file diff --git a/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/InkplatePeripheralMode.h b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/InkplatePeripheralMode.h new file mode 100644 index 000000000..be5ad3c17 --- /dev/null +++ b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/InkplatePeripheralMode.h @@ -0,0 +1,77 @@ +// Add header guards. +#ifndef __INKPLATEPERIPHERALMODE_H__ +#define __INKPLATEPERIPHERALMODE_H__ + +// Add an main Arduino header file. +#include + +// Add an Inkplate library. +#include + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +//#include + +// Make a class for the peripheral mode. +class PeripheralMode +{ + private: + // Use singleton class to not being able to use multiple instances of this class (since only makes sense to make only one Peripheral mode). + // Private constructor to prevent direct instantiation. + PeripheralMode() {} + + // Static pointer to the single instance. + static PeripheralMode* _instancePtr; + + // Pointer to the Arduino Serial object, + HardwareSerial *_serial = nullptr; + + // Pointer to the Inkplate library object, + Inkplate *_display = nullptr; + + // Variable for counting incoming serial data. + uint32_t _serialBufferIndex = 0; + + // Pointer to the allocated serial buffer in the PSRAM. + char *_serialBuffer = nullptr; + + // Size of the buffer for parsing the commands. + uint32_t _bufferSize = 0; + + // Commonly used responeses + const char *_okResponseString = "OK"; + const char *_failResponseString = "FAIL"; + + // Variable for timestamping last received data for the automatic buffer clear. + unsigned long _bufferAutoCleanTimestamp = 0; + + bool checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandEndPosition); + void sendResponse(int _command, int _payloadSize, char *_payload); + char* getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size); + int getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize); + void parseCommand(int _command, int _repeat, int _payloadSize, char* _payload); + int hexToChar(int a, int b); + int charToInt(char a); + void checkArguments(int *_noOfArgs, int _maxArg, int _repeat); + void hexAsciiToAscii(char *_buffer, uint32_t _size); + + public: + static PeripheralMode* getInstance() + { + // Check if the instance is already been made. If not, make it. + if (PeripheralMode::_instancePtr == nullptr) + { + // Make a new instance and save the address to the pointer. + PeripheralMode::_instancePtr = new PeripheralMode(); + } + + // Return the instance pointer. This way only one object is created. + return PeripheralMode::_instancePtr; + } + + bool begin(HardwareSerial *_serial, Inkplate *_inkplate, uint32_t _baud = 115200ULL, uint8_t _rxPin = -1, uint8_t _txPin = -1, uint32_t _size = SERIAL_BUFFER_SIZE); + bool getDataFromSerial(unsigned long _timeout); +}; + +#endif \ No newline at end of file diff --git a/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/commandList.h b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/commandList.h new file mode 100644 index 000000000..efc956871 --- /dev/null +++ b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/commandList.h @@ -0,0 +1,73 @@ +#ifndef __COMMAND_LIST_H__ +#define __COMMAND_LIST_H__ + +#define CMD_PING 0x0001 +// Commands from 0x01 to 0x0A are reserved for future use. Command 0x00 is invalid! + +#define CMD_DRAW_PIXEL 0x000A +#define CMD_DRAW_LINE 0x000B +#define CMD_DRAW_FASTVLINE 0x000C +#define CMD_DRAW_FASTHLINE 0x000D +#define CMD_DRAW_RECT 0x000E +#define CMD_DRAW_CIRCLE 0x000F +#define CMD_DRAW_TRIANGLE 0x0010 +#define CMD_DRAW_ROUND_RECT 0x0011 +#define CMD_DRAW_THICK_LINE 0x0012 +#define CMD_DRAW_ELIPSE 0x0013 +#define CMD_FILL_RECT 0x0014 +#define CMD_FILL_CIRCLE 0x0015 +#define CMD_FILL_TRIANGLE 0x0016 +#define CMD_FILL_ROUND_RECT 0x0017 +#define CMD_FILL_ELIPSE 0x0018 +#define CMD_PRINT 0x0019 +#define CMD_SET_TEXT_SIZE 0x001A +#define CMD_SET_TEXT_COLOR 0x001B +#define CMD_SET_CURSOR 0x001C +#define CMD_SET_TEXT_WRAP 0x001D +#define CMD_SET_ROTATION 0x001E +#define CMD_SD_CARD_INIT 0x001F +#define CMD_SD_CARD_SLEEP 0x0020 +#define CMD_DRAW_BITMAP 0x0021 +#define CMD_DRAW_IMAGE 0x0022 +#define CMD_SET_MODE 0x0023 +#define CMD_GET_MODE 0x0024 +#define CMD_CLEAR_DISPLAY 0x0025 +#define CMD_DISPLAY 0x0026 +#define CMD_PARTIAL_UPDATE 0x0027 +#define CMD_READ_TEMP 0x0028 +#define CMD_READ_TOUCHPAD 0x0029 +#define CMD_READ_BATTERY 0x002A +#define CMD_EINK_PMIC 0x002B +#define CMD_RTC_SET_TIME 0x002C +#define CMD_RTC_SET_DATE 0x002D +#define CMD_RTC_SET_EPOCH 0x002E +#define CMD_RTC_UPDATE 0x002F +#define CMD_RTC_GET_DATA_ALL 0x0030 +#define CMD_RTC_SET_ALARM 0x0031 +#define CMD_RTC_SET_ALARM_EPOCH 0x0032 +#define CMD_RTC_CLEAR_AL_FLAG 0x0033 +#define CMD_RTC_GET_ALARM_ALL 0x0034 +#define CMD_RTC_SET_TIMER 0x0035 +#define CMD_RTC_GET_TIMER_FLAG 0x0036 +#define CMD_RTC_CLEAR_TIMER_FLAG 0x0037 +#define CMD_RTC_DISABLE_TIMER 0x0038 +#define CMD_RTC_IS_SET 0x0039 +#define CMD_RTC_RESET 0x003A +#define CMD_ESP32_DEEPSLEEP 0x003B +#define CMD_ESP32_LIGHTSLEEP 0x003C +#define CMD_TOUCH_INIT 0x003D +#define CMD_TOUCH_AVAILABLE 0x003E +#define CMD_TOUCH_GET_DATA 0x003F +#define CMD_DRAW_IMAGE_BUFFER 0x0040 +#define CMD_CONNECT_WIFI 0x0041 +#define CMD_DISCONNECT_WIFI 0x0042 +#define CMD_GET_REQUEST 0x0043 +#define CMD_POST_REQUEST 0x0044 +// #define CMD_ 0x0042 +// #define CMD_ 0x0043 +// #define CMD_ 0x0044 +// #define CMD_ 0x0045 +// #define CMD_ 0x0046 +// #define CMD_ 0x0047 + +#endif diff --git a/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/settings.h b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/settings.h new file mode 100644 index 000000000..53e1874f4 --- /dev/null +++ b/examples/Inkplate10/Diagnostics/Inkplate10_Peripheral_Mode/settings.h @@ -0,0 +1,20 @@ +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +// Size of the Serial buffer (in bytes). Change if needed. It's stored in the PSRAM of the ESP32. +#define SERIAL_BUFFER_SIZE 65535 + +// Timeout for the incomming data. It's is counted from the last received char from te serial. +#define SERIAL_TIMEOUT_MS 100 + +// Define default ESP32 UART RX and TX pins +#define SERIAL_UART_RX_PIN 3 +#define SERIAL_UART_TX_PIN 1 + +// Termination char for the arguments (see documentation!) +#define TEMR_CHAR ';' + +// How long it takes to clear the buffer from unprocessed or invalid commands. +#define SERIAL_BUFFER_CLEAN_TIME_MS 60000ULL + +#endif diff --git a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h b/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h deleted file mode 100644 index 7f2ed9e6b..000000000 --- a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h +++ /dev/null @@ -1,203 +0,0 @@ -// 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 Open_Sans_SemiBold_16Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xDB, 0x6D, 0xB6, 0x03, 0x60, // '!' - 0xDB, 0x6D, 0xB6, // '"' - 0x09, 0x03, 0x20, 0x6C, 0x3F, 0xE1, 0x20, 0x24, 0x04, 0x87, 0xFC, 0x36, 0x04, 0xC0, 0x90, 0x12, 0x00, // '#' - 0x10, 0x10, 0x7C, 0xFE, 0xD0, 0xD0, 0x78, 0x3C, 0x16, 0x96, 0xFE, 0xFC, 0x10, 0x10, // '$' - 0x70, 0xC6, 0x84, 0x26, 0x61, 0x32, 0x09, 0xB0, 0x69, 0x71, 0xD2, 0xC1, 0xB2, 0x09, 0x90, 0xCC, 0x84, 0x2C, - 0x61, 0xC0, // '%' - 0x3C, 0x07, 0xE0, 0x66, 0x06, 0x60, 0x6C, 0x03, 0x80, 0x78, 0xCC, 0xCC, 0xC7, 0x8C, 0x38, 0xFF, 0x87, 0xCC, // '&' - 0xDB, 0x60, // ''' - 0x23, 0x11, 0x8C, 0x42, 0x10, 0x84, 0x31, 0x84, 0x30, 0x80, // '(' - 0x43, 0x08, 0x63, 0x08, 0x42, 0x10, 0x8C, 0x62, 0x31, 0x00, // ')' - 0x10, 0x10, 0xD6, 0xFE, 0x38, 0x6C, 0x44, // '*' - 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, // '+' - 0x66, 0x44, // ',' - 0xEE, // '-' - 0xD8, // '.' - 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x00, // '/' - 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, // '0' - 0x18, 0xEF, 0x96, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, // '1' - 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x08, 0x10, 0x20, 0xC0, 0xFE, 0xFE, // '2' - 0x7C, 0xFE, 0x86, 0x06, 0x04, 0x78, 0x7C, 0x06, 0x06, 0x06, 0xFE, 0xF8, // '3' - 0x06, 0x03, 0x80, 0xE0, 0x78, 0x16, 0x0D, 0x86, 0x61, 0x18, 0xFF, 0xBF, 0xE0, 0x60, 0x18, // '4' - 0x7C, 0xFC, 0xC0, 0xC0, 0xFC, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFC, 0xF8, // '5' - 0x1E, 0x7E, 0x60, 0xC0, 0xFC, 0xFE, 0xC6, 0xC2, 0xC2, 0xC6, 0x7E, 0x3C, // '6' - 0xFE, 0xFE, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, // '7' - 0x7C, 0xFE, 0xC6, 0xC6, 0x64, 0x38, 0x7C, 0xC6, 0x82, 0xC6, 0xFE, 0x7C, // '8' - 0x78, 0xFC, 0xC6, 0xC6, 0x86, 0xC6, 0xFE, 0x7E, 0x06, 0x0C, 0xFC, 0xF0, // '9' - 0xD8, 0x00, 0x06, 0xC0, // ':' - 0x66, 0x00, 0x00, 0x06, 0x64, 0x40, // ';' - 0x02, 0x0E, 0x38, 0xE0, 0xC0, 0x38, 0x0E, 0x02, // '<' - 0xFE, 0x00, 0x00, 0x00, 0xFE, // '=' - 0x80, 0xE0, 0x38, 0x0E, 0x06, 0x38, 0xE0, 0x80, // '>' - 0x78, 0xFC, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, // '?' - 0x0F, 0x81, 0xC6, 0x18, 0x08, 0x9F, 0x6D, 0x99, 0x4C, 0xCA, 0x46, 0x52, 0x32, 0x99, 0xB6, 0x77, 0x10, 0x00, - 0x61, 0x01, 0xF8, 0x00, // '@' - 0x0E, 0x00, 0xE0, 0x0A, 0x01, 0xB0, 0x1B, 0x03, 0x18, 0x31, 0x83, 0xF8, 0x7F, 0xC6, 0x0C, 0x60, 0xCC, 0x06, // 'A' - 0xFC, 0x7F, 0x21, 0xD0, 0x68, 0x67, 0xF3, 0xF9, 0x06, 0x83, 0x41, 0xBF, 0xDF, 0x80, // 'B' - 0x1F, 0x3F, 0x98, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x1F, 0xC3, 0xE0, // 'C' - 0xFC, 0x3F, 0x88, 0x72, 0x0E, 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x83, 0xA1, 0xCF, 0xE3, 0xF0, // 'D' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x03, 0xF7, 0xE0, // 'E' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x02, 0x04, 0x00, // 'F' - 0x1F, 0x87, 0xF1, 0xC0, 0x70, 0x0C, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE0, 0xCE, 0x19, 0xFF, 0x0F, 0xC0, // 'G' - 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x81, 0xBF, 0xEF, 0xFA, 0x06, 0x81, 0xA0, 0x68, 0x1A, 0x06, // 'H' - 0xAA, 0xAA, 0xAA, // 'I' - 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x63, 0x7B, 0x80, // 'J' - 0xC3, 0x30, 0xCC, 0x63, 0x30, 0xD8, 0x36, 0x0F, 0x83, 0x30, 0xC6, 0x31, 0x8C, 0x33, 0x06, // 'K' - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xFE, // 'L' - 0xC0, 0x6E, 0x0E, 0xE0, 0xEA, 0x0A, 0xB1, 0xAB, 0x12, 0x91, 0x29, 0xB2, 0x9A, 0x28, 0xE2, 0x8E, 0x28, 0xC2, // 'M' - 0xC0, 0xB8, 0x2E, 0x0A, 0xC2, 0xB8, 0xA6, 0x28, 0xCA, 0x3A, 0x86, 0xA0, 0xE8, 0x3A, 0x06, // 'N' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0xC1, 0xF0, // 'O' - 0xF8, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x80, 0x80, 0x80, 0x80, // 'P' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0x81, 0xF0, - 0x03, 0x80, 0x18, 0x00, 0xC0, // 'Q' - 0xFC, 0x3F, 0x8C, 0x73, 0x0C, 0xC3, 0x31, 0xCF, 0xE3, 0xF0, 0xCC, 0x31, 0x8C, 0x33, 0x0E, // 'R' - 0x7C, 0xFE, 0xC2, 0xC0, 0xE0, 0x78, 0x1C, 0x06, 0x06, 0x86, 0xFE, 0xFC, // 'S' - 0xFF, 0xBF, 0xE0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'T' - 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xCC, 0x31, 0xFE, 0x0F, 0x00, // 'U' - 0xC0, 0xD8, 0x11, 0x86, 0x30, 0xC6, 0x10, 0x66, 0x0C, 0xC1, 0x90, 0x1E, 0x03, 0xC0, 0x70, 0x06, 0x00, // 'V' - 0xC3, 0x86, 0xC3, 0x86, 0x63, 0x8C, 0x62, 0x8C, 0x66, 0xCC, 0x66, 0xCC, 0x24, 0xC8, 0x34, 0x58, 0x3C, 0x78, - 0x3C, 0x78, 0x18, 0x30, 0x18, 0x30, // 'W' - 0x61, 0x8C, 0x30, 0xCC, 0x19, 0x81, 0xE0, 0x18, 0x07, 0x80, 0xF0, 0x33, 0x06, 0x61, 0x86, 0x60, 0x60, // 'X' - 0xC1, 0x98, 0xC6, 0x30, 0xD8, 0x36, 0x07, 0x01, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'Y' - 0xFE, 0x7F, 0x01, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x3F, 0xDF, 0xE0, // 'Z' - 0xF6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xC0, // '[' - 0xC0, 0x81, 0x83, 0x02, 0x06, 0x0C, 0x08, 0x18, 0x30, 0x20, 0x60, // '\' - 0xF1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1B, 0xC0, // ']' - 0x08, 0x07, 0x01, 0x40, 0x98, 0x22, 0x10, 0xCC, 0x10, // '^' - 0xFE, // '_' - 0xC4, 0x20, // '`' - 0x7C, 0x7E, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xFE, 0x76, // 'a' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB8, 0xDF, 0xCD, 0xE0, // 'b' - 0x3C, 0xFB, 0x06, 0x0C, 0x18, 0x30, 0x3E, 0x3C, // 'c' - 0x03, 0x01, 0x80, 0xC0, 0x67, 0xB3, 0xFB, 0x1D, 0x86, 0xC3, 0x61, 0xB1, 0xDF, 0xE7, 0xB0, // 'd' - 0x3C, 0x7E, 0xC6, 0xFE, 0xFE, 0xC0, 0xC0, 0x7E, 0x3C, // 'e' - 0x1E, 0x3C, 0x30, 0x30, 0x7C, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // 'f' - 0x3F, 0x99, 0x86, 0x31, 0x8C, 0x62, 0x0F, 0x06, 0x01, 0xFC, 0x7F, 0x30, 0x6C, 0x1B, 0x0C, 0x7E, 0x00, // 'g' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x30, // 'h' - 0xD8, 0x0D, 0xB6, 0xDB, 0x6C, // 'i' - 0x31, 0x80, 0x03, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDE, 0xE0, // 'j' - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x66, 0x63, 0x61, 0xB0, 0xF8, 0x7C, 0x33, 0x18, 0xCC, 0x70, // 'k' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6C, // 'l' - 0xDC, 0xF3, 0xFF, 0xEE, 0x71, 0xB0, 0xC6, 0xC2, 0x1B, 0x08, 0x6C, 0x21, 0xB0, 0x86, 0xC2, 0x18, // 'm' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x00, // 'n' - 0x3C, 0x3F, 0x30, 0xD8, 0x6C, 0x36, 0x1B, 0x0C, 0xFC, 0x3C, 0x00, // 'o' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x8D, 0xFC, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x00, // 'p' - 0x7B, 0x3F, 0xB1, 0xD8, 0x6C, 0x36, 0x1B, 0x1D, 0xFE, 0x7B, 0x01, 0x80, 0xC0, 0x60, 0x30, // 'q' - 0xDD, 0xFB, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 'r' - 0x79, 0xFB, 0x17, 0x07, 0x81, 0x83, 0x7E, 0xF8, // 's' - 0x20, 0x41, 0xF7, 0xE6, 0x0C, 0x18, 0x30, 0x60, 0x78, 0xF0, // 't' - 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x1C, 0xFE, 0x7B, 0x00, // 'u' - 0xC1, 0x90, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x40, 0x70, 0x1C, 0x00, // 'v' - 0xC7, 0x19, 0x1C, 0x46, 0x53, 0x19, 0x4C, 0x6D, 0xB0, 0xB6, 0x83, 0x8E, 0x0E, 0x38, 0x38, 0xE0, // 'w' - 0x63, 0x18, 0xC3, 0x60, 0x70, 0x1C, 0x07, 0x03, 0x61, 0x8C, 0x63, 0x00, // 'x' - 0xC1, 0x98, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x60, 0x70, 0x1C, 0x06, 0x01, 0x83, 0xC0, 0xE0, 0x00, // 'y' - 0xFD, 0xF8, 0x30, 0xC3, 0x0C, 0x30, 0x7E, 0xFC, // 'z' - 0x1C, 0x70, 0xC1, 0x83, 0x06, 0x38, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x03, 0x07, 0x00, // '{' - 0xAA, 0xAA, 0xAA, 0xAA, 0x80, // '|' - 0xE0, 0xE0, 0xC1, 0x83, 0x06, 0x07, 0x1C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_16Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 5, 0, 0}, // ' ' - {1, 3, 12, 5, 1, -12}, // '!' - {6, 6, 4, 8, 1, -12}, // '"' - {9, 11, 12, 11, 0, -12}, // '#' - {26, 8, 14, 10, 1, -13}, // '$' - {40, 13, 12, 15, 1, -12}, // '%' - {60, 12, 12, 13, 1, -12}, // '&' - {78, 3, 4, 5, 1, -12}, // ''' - {80, 5, 15, 6, 1, -12}, // '(' - {90, 5, 15, 6, 0, -12}, // ')' - {100, 8, 7, 10, 1, -13}, // '*' - {107, 8, 7, 10, 1, -9}, // '+' - {114, 4, 4, 5, 0, -2}, // ',' - {116, 4, 2, 6, 1, -5}, // '-' - {117, 3, 2, 5, 1, -2}, // '.' - {118, 7, 12, 7, 0, -12}, // '/' - {129, 8, 12, 10, 1, -12}, // '0' - {141, 6, 12, 10, 1, -12}, // '1' - {150, 8, 12, 10, 1, -12}, // '2' - {162, 8, 12, 10, 1, -12}, // '3' - {174, 10, 12, 10, 0, -12}, // '4' - {189, 8, 12, 10, 1, -12}, // '5' - {201, 8, 12, 10, 1, -12}, // '6' - {213, 8, 12, 10, 1, -12}, // '7' - {225, 8, 12, 10, 1, -12}, // '8' - {237, 8, 12, 10, 1, -12}, // '9' - {249, 3, 9, 5, 1, -9}, // ':' - {253, 4, 11, 5, 0, -9}, // ';' - {259, 8, 8, 10, 1, -10}, // '<' - {267, 8, 5, 10, 1, -8}, // '=' - {272, 8, 8, 10, 1, -10}, // '>' - {280, 8, 12, 8, 0, -12}, // '?' - {292, 13, 13, 15, 1, -12}, // '@' - {314, 12, 12, 12, 0, -12}, // 'A' - {332, 9, 12, 12, 2, -12}, // 'B' - {346, 9, 12, 11, 1, -12}, // 'C' - {360, 10, 12, 13, 2, -12}, // 'D' - {375, 7, 12, 10, 2, -12}, // 'E' - {386, 7, 12, 10, 2, -12}, // 'F' - {397, 11, 12, 13, 1, -12}, // 'G' - {414, 10, 12, 13, 2, -12}, // 'H' - {429, 2, 12, 6, 2, -12}, // 'I' - {432, 5, 15, 6, -1, -12}, // 'J' - {442, 10, 12, 11, 1, -12}, // 'K' - {457, 8, 12, 10, 2, -12}, // 'L' - {469, 12, 12, 16, 2, -12}, // 'M' - {487, 10, 12, 14, 2, -12}, // 'N' - {502, 12, 12, 14, 1, -12}, // 'O' - {520, 8, 12, 11, 2, -12}, // 'P' - {532, 12, 15, 14, 1, -12}, // 'Q' - {555, 10, 12, 11, 1, -12}, // 'R' - {570, 8, 12, 10, 1, -12}, // 'S' - {582, 10, 12, 10, 0, -12}, // 'T' - {597, 11, 12, 13, 1, -12}, // 'U' - {614, 11, 12, 11, 0, -12}, // 'V' - {631, 16, 12, 16, 0, -12}, // 'W' - {655, 11, 12, 11, 0, -12}, // 'X' - {672, 10, 12, 10, 0, -12}, // 'Y' - {687, 9, 12, 10, 1, -12}, // 'Z' - {701, 5, 15, 6, 1, -12}, // '[' - {711, 7, 12, 7, 0, -12}, // '\' - {722, 5, 15, 6, 0, -12}, // ']' - {732, 10, 7, 10, 0, -12}, // '^' - {741, 8, 1, 8, 0, 1}, // '_' - {742, 4, 3, 10, 3, -13}, // '`' - {744, 8, 9, 10, 1, -9}, // 'a' - {753, 9, 13, 11, 1, -13}, // 'b' - {768, 7, 9, 9, 1, -9}, // 'c' - {776, 9, 13, 11, 1, -13}, // 'd' - {791, 8, 9, 10, 1, -9}, // 'e' - {800, 8, 13, 7, 0, -13}, // 'f' - {813, 10, 13, 10, 0, -9}, // 'g' - {830, 9, 13, 11, 1, -13}, // 'h' - {845, 3, 13, 5, 1, -13}, // 'i' - {850, 5, 17, 5, -1, -13}, // 'j' - {861, 9, 13, 10, 1, -13}, // 'k' - {876, 3, 13, 5, 1, -13}, // 'l' - {881, 14, 9, 16, 1, -9}, // 'm' - {897, 9, 9, 11, 1, -9}, // 'n' - {908, 9, 9, 11, 1, -9}, // 'o' - {919, 9, 13, 11, 1, -9}, // 'p' - {934, 9, 13, 11, 1, -9}, // 'q' - {949, 7, 9, 8, 1, -9}, // 'r' - {957, 7, 9, 9, 1, -9}, // 's' - {965, 7, 11, 7, 0, -11}, // 't' - {975, 9, 9, 11, 1, -9}, // 'u' - {986, 10, 9, 10, 0, -9}, // 'v' - {998, 14, 9, 14, 0, -9}, // 'w' - {1014, 10, 9, 10, 0, -9}, // 'x' - {1026, 10, 13, 10, 0, -9}, // 'y' - {1043, 7, 9, 9, 1, -9}, // 'z' - {1051, 7, 15, 7, 0, -12}, // '{' - {1065, 2, 17, 10, 4, -13}, // '|' - {1070, 7, 15, 7, 0, -12} // '}' -}; -const GFXfont Open_Sans_SemiBold_16 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_16Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_16Glyphs, 0x20, 0x7E, 23}; \ No newline at end of file diff --git a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h b/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h deleted file mode 100644 index 0fa23e60d..000000000 --- a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h +++ /dev/null @@ -1,276 +0,0 @@ -// 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 Open_Sans_SemiBold_24Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x0E, 0xEE, 0xE0, // '!' - 0x66, 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x30, // '"' - 0x06, 0x30, 0x0C, 0x60, 0x18, 0xC0, 0x71, 0x80, 0xC6, 0x0F, 0xFF, 0x9F, 0xFF, 0x06, 0x30, 0x18, 0xE0, 0x31, - 0x83, 0xFF, 0xF7, 0xFF, 0xE3, 0x8C, 0x06, 0x38, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, // '#' - 0x06, 0x00, 0x30, 0x07, 0xF0, 0xFF, 0xC7, 0x66, 0x73, 0x03, 0x98, 0x0E, 0xC0, 0x7E, 0x00, 0xFC, 0x01, 0xF8, - 0x0D, 0xC0, 0x67, 0x03, 0x3B, 0x1B, 0x9F, 0xFC, 0x7F, 0x80, 0x30, 0x01, 0x80, // '$' - 0x3C, 0x06, 0x07, 0xE0, 0xE0, 0xE6, 0x0C, 0x0C, 0x71, 0x80, 0xC7, 0x18, 0x0C, 0x73, 0x00, 0xC7, 0x70, 0x0E, - 0x66, 0x78, 0x7E, 0xEF, 0xC3, 0xCC, 0xCE, 0x01, 0xDC, 0x60, 0x19, 0xC6, 0x03, 0x1C, 0x60, 0x71, 0xC6, 0x06, - 0x0C, 0xE0, 0xE0, 0xFC, 0x0C, 0x07, 0x80, // '%' - 0x0F, 0x80, 0x0F, 0xF0, 0x03, 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x0E, 0x70, 0x01, 0xFC, 0x00, 0x3C, 0x00, - 0x3F, 0x07, 0x1F, 0xE1, 0xCF, 0x3C, 0xE3, 0x83, 0xB8, 0xE0, 0x7C, 0x38, 0x0F, 0x07, 0x0F, 0xC1, 0xFF, 0xB8, - 0x1F, 0x87, 0x00, // '&' - 0xDB, 0x6D, 0x80, // ''' - 0x1C, 0x30, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xE0, 0xC1, - 0xC0, // '(' - 0xE0, 0xC1, 0xC1, 0x83, 0x83, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x71, 0xC3, 0x0E, - 0x00, // ')' - 0x0E, 0x00, 0xE0, 0x0E, 0x08, 0x42, 0xFF, 0xEF, 0xFE, 0x0E, 0x01, 0xB0, 0x3B, 0x83, 0x18, 0x11, 0x00, // '*' - 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x7F, 0xFB, 0xFF, 0xC0, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, // '+' - 0x73, 0x39, 0xCC, 0x60, // ',' - 0xFD, 0xF8, // '-' - 0xEE, 0xEE, // '.' - 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x07, - 0x01, 0x80, 0xE0, 0x00, // '/' - 0x1F, 0x01, 0xFE, 0x1C, 0x38, 0xE1, 0xCE, 0x06, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x71, 0xC3, 0x87, 0xF8, 0x0F, 0x80, // '0' - 0x0E, 0x1E, 0x3E, 0xF6, 0xE6, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // '1' - 0x1F, 0x83, 0xFE, 0x1C, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF0, // '2' - 0x3F, 0x87, 0xFE, 0x18, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0x00, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x7B, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '3' - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x1B, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0x38, 0x0E, 0x70, 0x38, 0xE0, 0x61, - 0xC1, 0x83, 0x87, 0xFF, 0xEF, 0xFF, 0xC0, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, // '4' - 0x7F, 0xE3, 0xFF, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x73, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '5' - 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x9E, 0x1F, 0xFC, 0xF0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x39, 0xE3, 0x87, 0xF8, 0x0F, 0x80, // '6' - 0xFF, 0xF7, 0xFF, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, - 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x38, 0x00, // '7' - 0x1F, 0x81, 0xFE, 0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x38, 0x71, 0xE7, 0x07, 0xF0, 0x1F, 0x83, 0xDE, 0x1C, 0x39, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0xC3, 0x8F, 0xFC, 0x1F, 0x80, // '8' - 0x1F, 0x01, 0xFE, 0x1C, 0x79, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0x70, 0xF3, 0xFF, 0x87, 0xDC, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x0F, 0x0F, 0xF0, 0x7E, 0x00, // '9' - 0xEE, 0xEE, 0x00, 0x00, 0x0E, 0xEE, 0xE0, // ':' - 0x73, 0x9C, 0xE0, 0x00, 0x00, 0x00, 0x1C, 0xE6, 0x73, 0x18, // ';' - 0x00, 0x10, 0x03, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3C, - 0x00, 0x20, // '<' - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, // '=' - 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, 0x3C, 0x01, - 0x00, 0x00, // '>' - 0x3F, 0x1F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x80, 0x70, 0x0E, 0x00, 0x00, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, // '?' - 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0x80, 0xE0, 0x30, 0x01, 0x83, 0x00, 0x0E, 0x38, 0x7E, 0x31, 0x8F, 0xF1, - 0x8C, 0x61, 0x86, 0xE7, 0x0C, 0x36, 0x30, 0x63, 0xB1, 0x83, 0x19, 0xCE, 0x38, 0xC6, 0x3F, 0xFC, 0x30, 0xF1, - 0xC1, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0x00, // '@' - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x66, 0x00, 0x73, 0x80, 0x39, 0xC0, 0x18, 0x60, 0x1C, - 0x38, 0x0E, 0x1C, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0x81, 0xC3, 0x80, 0x71, 0xC0, 0x38, 0xC0, 0x1C, 0xE0, 0x07, - 0x00, // 'A' - 0xFF, 0x83, 0xFF, 0x8E, 0x0F, 0x38, 0x1C, 0xE0, 0x73, 0x81, 0xCE, 0x0E, 0x3F, 0xF0, 0xFF, 0xE3, 0x83, 0xCE, - 0x07, 0x38, 0x0E, 0xE0, 0x3B, 0x81, 0xEE, 0x0F, 0x3F, 0xF8, 0xFF, 0xC0, // 'B' - 0x07, 0xF0, 0x7F, 0xE3, 0xC1, 0x8E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x87, 0xFE, 0x07, 0xF0, // 'C' - 0xFF, 0x80, 0xFF, 0xE0, 0xE0, 0xF0, 0xE0, 0x38, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x38, 0xE0, 0xF0, 0xFF, 0xE0, 0xFF, 0x80, // 'D' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0xFC, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'E' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'F' - 0x03, 0xF8, 0x1F, 0xF8, 0xF8, 0x21, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0xFD, 0xC1, - 0xF9, 0x80, 0x73, 0x80, 0xE7, 0x01, 0xCF, 0x03, 0x8F, 0x07, 0x0F, 0xFE, 0x07, 0xF8, // 'G' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1C, // 'H' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, // 'I' - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x1C, 0xFC, 0xF0, // 'J' - 0xE0, 0x73, 0x83, 0xCE, 0x0E, 0x38, 0x70, 0xE3, 0x83, 0x9C, 0x0E, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xDC, 0x0E, - 0x78, 0x38, 0xE0, 0xE1, 0xC3, 0x87, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x78, // 'K' - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'L' - 0xF0, 0x03, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7C, 0x03, 0xEF, 0xC0, 0xFD, 0xD8, 0x1B, 0xBB, 0x07, 0x77, 0x70, - 0xCE, 0xE6, 0x19, 0xDC, 0xC7, 0x3B, 0x9C, 0xC7, 0x71, 0x98, 0xEE, 0x3F, 0x1D, 0xC7, 0xC3, 0xB8, 0x78, 0x77, - 0x0F, 0x0E, 0xE1, 0xC1, 0xC0, // 'M' - 0xF0, 0x0E, 0xF8, 0x0E, 0xF8, 0x0E, 0xFC, 0x0E, 0xFE, 0x0E, 0xEE, 0x0E, 0xE7, 0x0E, 0xE7, 0x0E, 0xE3, 0x8E, - 0xE1, 0xCE, 0xE1, 0xCE, 0xE0, 0xEE, 0xE0, 0xFE, 0xE0, 0x7E, 0xE0, 0x3E, 0xE0, 0x3E, 0xE0, 0x1E, // 'N' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, // 'O' - 0xFF, 0x87, 0xFF, 0x38, 0x39, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x3C, 0xFF, 0xC7, 0xF8, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x00, // 'P' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, // 'Q' - 0xFF, 0x03, 0xFF, 0x0E, 0x1E, 0x38, 0x38, 0xE0, 0xE3, 0x83, 0x8E, 0x0E, 0x38, 0x78, 0xFF, 0xC3, 0xFC, 0x0E, - 0x38, 0x38, 0xE0, 0xE1, 0xC3, 0x83, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x70, // 'R' - 0x1F, 0x87, 0xFC, 0x70, 0x4E, 0x00, 0xE0, 0x0E, 0x00, 0x78, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0xC1, 0xCF, 0xFC, 0x7F, 0x00, // 'S' - 0xFF, 0xFD, 0xFF, 0xF8, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'T' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1D, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xCE, 0x07, 0x1E, 0x1E, 0x1F, 0xF8, 0x0F, 0xC0, // 'U' - 0xE0, 0x0E, 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x1C, 0x30, 0x18, 0x38, 0x38, 0x38, 0x38, 0x18, 0x30, 0x1C, 0x70, - 0x1C, 0x70, 0x0C, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x06, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, // 'V' - 0xE0, 0x38, 0x0E, 0x60, 0x38, 0x0C, 0x70, 0x7C, 0x1C, 0x70, 0x7C, 0x1C, 0x70, 0x6C, 0x1C, 0x30, 0xEC, 0x18, - 0x38, 0xEE, 0x38, 0x38, 0xCE, 0x38, 0x38, 0xC6, 0x38, 0x19, 0xC7, 0x30, 0x1D, 0xC7, 0x70, 0x1D, 0x83, 0x70, - 0x1D, 0x83, 0x70, 0x0F, 0x83, 0xE0, 0x0F, 0x01, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xC0, // 'W' - 0x70, 0x1C, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0xC0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x38, 0x38, 0x70, 0x1C, 0xE0, 0x1E, // 'X' - 0xE0, 0x1C, 0xE0, 0x71, 0xC0, 0xE1, 0xC3, 0x83, 0x87, 0x03, 0x9C, 0x07, 0x38, 0x07, 0xE0, 0x07, 0x80, 0x0F, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'Y' - 0xFF, 0xF7, 0xFF, 0x80, 0x38, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0x80, 0x1F, 0xFE, 0xFF, 0xF0, // 'Z' - 0xFB, 0xEC, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3E, 0xF8, // '[' - 0xE0, 0x18, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, // '\' - 0xFB, 0xE1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0xBE, 0xF8, // ']' - 0x06, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x60, 0x1D, 0x80, 0x63, 0x03, 0x8C, 0x0C, 0x18, 0x30, 0x61, 0x80, 0xC6, - 0x03, 0x00, // '^' - 0xFF, 0xDF, 0xF8, // '_' - 0xF0, 0xE0, 0xE0, 0xE0, // '`' - 0x1F, 0x83, 0xFC, 0x30, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x7F, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'a' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x77, 0xC3, 0xFF, 0x1E, 0x1C, 0xE0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x83, 0x9E, 0x1C, 0xDF, 0xC6, 0x7C, 0x00, // 'b' - 0x0F, 0xC7, 0xF9, 0xE0, 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE1, 0x1F, 0xE1, 0xF8, // 'c' - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x0F, 0xB8, 0xFF, 0xCE, 0x1E, 0x70, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x39, 0xC1, 0xCE, 0x1E, 0x3F, 0xF0, 0xF9, 0x80, // 'd' - 0x0F, 0x81, 0xFE, 0x1C, 0x38, 0xE0, 0xEE, 0x07, 0x7F, 0xFB, 0xFF, 0xDC, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x08, - 0x7F, 0xC0, 0xFC, 0x00, // 'e' - 0x07, 0xC3, 0xF0, 0x70, 0x0C, 0x01, 0x80, 0xFF, 0x3F, 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, - 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, // 'f' - 0x0F, 0xF8, 0xFF, 0xE3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x83, 0x8E, 0x0F, 0xF0, 0x1F, 0x80, 0xC0, 0x03, - 0x00, 0x0F, 0xF8, 0x3F, 0xF1, 0xC1, 0xCE, 0x03, 0x38, 0x0C, 0xE0, 0x71, 0xFF, 0x83, 0xF8, 0x00, // 'g' - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0xF8, 0xFF, 0xCF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, // 'h' - 0xEE, 0xE0, 0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'i' - 0x1C, 0x38, 0x70, 0x00, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, - 0xC3, 0xBE, 0x78, // 'j' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x73, 0x87, 0x1C, 0x70, 0xE7, 0x07, 0x70, 0x3F, 0x01, - 0xFC, 0x0F, 0xF0, 0x73, 0x83, 0x8E, 0x1C, 0x38, 0xE0, 0xE7, 0x07, 0x80, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xCF, 0x8F, 0x8D, 0xFD, 0xFC, 0xF1, 0xF0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, - 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xE0, // 'm' - 0xCF, 0x8D, 0xFC, 0xF0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xE0, // 'n' - 0x0F, 0x80, 0xFF, 0x87, 0x8F, 0x1C, 0x1C, 0xE0, 0x3B, 0x80, 0xEE, 0x03, 0xB8, 0x0E, 0xE0, 0x39, 0xC1, 0xC7, - 0x8F, 0x0F, 0xF8, 0x0F, 0x80, // 'o' - 0xCF, 0x86, 0xFE, 0x3C, 0x39, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x07, 0x3C, 0x39, - 0xFF, 0x8E, 0xF8, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, // 'p' - 0x1F, 0x31, 0xFF, 0x9C, 0x3C, 0xE0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x73, 0x83, 0x9C, 0x3C, - 0x7F, 0xE1, 0xF7, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, // 'q' - 0xCF, 0x6F, 0x3F, 0x9E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, // 'r' - 0x3F, 0x8F, 0xF3, 0x82, 0x70, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x3C, 0x01, 0xC0, 0x3B, 0x07, 0x7F, 0xC7, 0xF0, // 's' - 0x18, 0x0C, 0x0E, 0x0F, 0xEF, 0xF1, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0x7C, 0x1E, // 't' - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'u' - 0xE0, 0x39, 0x80, 0xC7, 0x07, 0x1C, 0x1C, 0x30, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xD8, 0x03, 0xE0, 0x07, 0x00, // 'v' - 0xE0, 0xF0, 0x73, 0x07, 0x83, 0x1C, 0x3C, 0x38, 0xE3, 0xF1, 0xC3, 0x1B, 0x8C, 0x1C, 0xCC, 0xE0, 0xE6, 0x67, - 0x07, 0x73, 0xB8, 0x1B, 0x0D, 0x80, 0xD8, 0x7C, 0x07, 0xC3, 0xE0, 0x1C, 0x1E, 0x00, 0xE0, 0x70, 0x00, // 'w' - 0x70, 0x70, 0xE3, 0x83, 0x8E, 0x07, 0x70, 0x0D, 0x80, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x1D, 0xC0, 0x77, 0x03, - 0x8E, 0x1C, 0x1C, 0x70, 0x70, // 'x' - 0xE0, 0x39, 0xC1, 0xC7, 0x07, 0x1C, 0x1C, 0x38, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xF8, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x00, // 'y' - 0xFF, 0xBF, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0xFE, 0xFF, 0x80, // 'z' - 0x0E, 0x1E, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0xF0, 0xE0, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x1C, 0x1E, 0x06, // '{' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // '|' - 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x1E, 0x0E, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x70, 0xF0, 0xE0 // '}' -}; -const GFXglyph Open_Sans_SemiBold_24Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 7, 0, 0}, // ' ' - {1, 4, 17, 8, 2, -17}, // '!' - {10, 9, 6, 11, 1, -17}, // '"' - {17, 15, 17, 17, 1, -17}, // '#' - {49, 13, 19, 15, 1, -18}, // '$' - {80, 20, 17, 22, 1, -17}, // '%' - {123, 18, 17, 19, 1, -17}, // '&' - {162, 3, 6, 7, 2, -17}, // ''' - {165, 7, 21, 9, 1, -17}, // '(' - {184, 7, 21, 9, 1, -17}, // ')' - {203, 12, 11, 14, 1, -18}, // '*' - {220, 13, 12, 15, 1, -15}, // '+' - {240, 5, 6, 7, 1, -3}, // ',' - {244, 7, 2, 9, 1, -8}, // '-' - {246, 4, 4, 8, 2, -4}, // '.' - {248, 10, 17, 10, 0, -17}, // '/' - {270, 13, 17, 15, 1, -17}, // '0' - {298, 8, 17, 15, 2, -17}, // '1' - {315, 13, 17, 15, 1, -17}, // '2' - {343, 13, 17, 15, 1, -17}, // '3' - {371, 15, 17, 15, 0, -17}, // '4' - {403, 13, 17, 15, 1, -17}, // '5' - {431, 13, 17, 15, 1, -17}, // '6' - {459, 13, 17, 15, 1, -17}, // '7' - {487, 13, 17, 15, 1, -17}, // '8' - {515, 13, 17, 15, 1, -17}, // '9' - {543, 4, 13, 8, 2, -13}, // ':' - {550, 5, 16, 8, 1, -13}, // ';' - {560, 13, 12, 15, 1, -15}, // '<' - {580, 13, 7, 15, 1, -12}, // '=' - {592, 13, 12, 15, 1, -15}, // '>' - {612, 11, 17, 12, 0, -17}, // '?' - {636, 21, 19, 23, 1, -17}, // '@' - {686, 17, 17, 17, 0, -17}, // 'A' - {723, 14, 17, 17, 2, -17}, // 'B' - {753, 14, 17, 16, 1, -17}, // 'C' - {783, 16, 17, 19, 2, -17}, // 'D' - {817, 11, 17, 14, 2, -17}, // 'E' - {841, 11, 17, 14, 2, -17}, // 'F' - {865, 15, 17, 18, 1, -17}, // 'G' - {897, 15, 17, 19, 2, -17}, // 'H' - {929, 4, 17, 8, 2, -17}, // 'I' - {938, 8, 22, 8, -2, -17}, // 'J' - {960, 14, 17, 16, 2, -17}, // 'K' - {990, 11, 17, 14, 2, -17}, // 'L' - {1014, 19, 17, 23, 2, -17}, // 'M' - {1055, 16, 17, 20, 2, -17}, // 'N' - {1089, 18, 17, 20, 1, -17}, // 'O' - {1128, 13, 17, 16, 2, -17}, // 'P' - {1156, 18, 21, 20, 1, -17}, // 'Q' - {1204, 14, 17, 16, 2, -17}, // 'R' - {1234, 12, 17, 14, 1, -17}, // 'S' - {1260, 15, 17, 15, 0, -17}, // 'T' - {1292, 15, 17, 19, 2, -17}, // 'U' - {1324, 16, 17, 16, 0, -17}, // 'V' - {1358, 24, 17, 24, 0, -17}, // 'W' - {1409, 16, 17, 16, 0, -17}, // 'X' - {1443, 15, 17, 15, 0, -17}, // 'Y' - {1475, 13, 17, 15, 1, -17}, // 'Z' - {1503, 6, 21, 9, 2, -17}, // '[' - {1519, 10, 17, 10, 0, -17}, // '\' - {1541, 6, 21, 9, 1, -17}, // ']' - {1557, 14, 11, 14, 0, -17}, // '^' - {1577, 11, 2, 11, 0, 2}, // '_' - {1580, 7, 4, 15, 4, -19}, // '`' - {1584, 12, 13, 15, 1, -13}, // 'a' - {1604, 13, 18, 16, 2, -18}, // 'b' - {1634, 11, 13, 13, 1, -13}, // 'c' - {1652, 13, 18, 16, 1, -18}, // 'd' - {1682, 13, 13, 15, 1, -13}, // 'e' - {1704, 11, 18, 10, 0, -18}, // 'f' - {1729, 14, 19, 14, 0, -13}, // 'g' - {1763, 12, 18, 16, 2, -18}, // 'h' - {1790, 4, 18, 8, 2, -18}, // 'i' - {1799, 7, 24, 8, -1, -18}, // 'j' - {1820, 13, 18, 15, 2, -18}, // 'k' - {1850, 4, 18, 8, 2, -18}, // 'l' - {1859, 20, 13, 24, 2, -13}, // 'm' - {1892, 12, 13, 16, 2, -13}, // 'n' - {1912, 14, 13, 16, 1, -13}, // 'o' - {1935, 13, 19, 16, 2, -13}, // 'p' - {1966, 13, 19, 16, 1, -13}, // 'q' - {1997, 9, 13, 11, 2, -13}, // 'r' - {2012, 11, 13, 13, 1, -13}, // 's' - {2030, 9, 16, 10, 0, -16}, // 't' - {2048, 12, 13, 16, 2, -13}, // 'u' - {2068, 14, 13, 14, 0, -13}, // 'v' - {2091, 21, 13, 21, 0, -13}, // 'w' - {2126, 14, 13, 14, 0, -13}, // 'x' - {2149, 14, 19, 14, 0, -13}, // 'y' - {2183, 10, 13, 12, 1, -13}, // 'z' - {2200, 8, 21, 10, 1, -17}, // '{' - {2221, 4, 24, 14, 5, -18}, // '|' - {2233, 8, 21, 10, 1, -17} // '}' -}; -const GFXfont Open_Sans_SemiBold_24 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_24Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_24Glyphs, 0x20, 0x7E, 33}; \ No newline at end of file diff --git a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h b/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h deleted file mode 100644 index 3da740530..000000000 --- a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h +++ /dev/null @@ -1,363 +0,0 @@ -// 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 Open_Sans_SemiBold_32Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFB, 0xEF, 0xBC, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x00, 0x07, 0x3E, 0xFB, 0xE7, 0x00, // '!' - 0xF3, 0xDE, 0x7B, 0xCF, 0x70, 0xEE, 0x1C, 0xC3, 0x18, 0x63, 0x0C, // '"' - 0x01, 0xC3, 0x00, 0x18, 0x70, 0x03, 0x87, 0x00, 0x38, 0x70, 0x03, 0x87, 0x00, 0x38, 0x60, 0x03, 0x86, 0x07, - 0xFF, 0xFE, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x07, 0x0E, 0x00, 0x70, 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC7, - 0x00, 0x18, 0x70, 0x00, // '#' - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x7F, 0x03, 0xFF, 0xCF, 0xFF, 0x3E, 0xC6, 0x79, 0x80, 0xF3, 0x01, 0xE6, - 0x03, 0xEC, 0x03, 0xF8, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x03, 0x3C, 0x06, 0x38, 0x0C, 0x70, - 0x19, 0xEE, 0x37, 0xDF, 0xFF, 0x3F, 0xFC, 0x1F, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, // '$' - 0x1F, 0x00, 0x38, 0x07, 0xF0, 0x0E, 0x01, 0xFF, 0x01, 0xC0, 0x38, 0xE0, 0x70, 0x07, 0x1C, 0x1C, 0x01, 0xC3, - 0x83, 0x80, 0x38, 0x38, 0xE0, 0x07, 0x07, 0x1C, 0x00, 0xE1, 0xC7, 0x00, 0x0E, 0x38, 0xE7, 0xC1, 0xC7, 0x39, - 0xFC, 0x3F, 0xEF, 0x7F, 0xC3, 0xF9, 0xCE, 0x38, 0x3E, 0x71, 0xC7, 0x00, 0x0E, 0x78, 0x70, 0x03, 0x8E, 0x0E, - 0x00, 0x71, 0xC1, 0xC0, 0x1C, 0x1C, 0x38, 0x03, 0x83, 0x8E, 0x00, 0xE0, 0x71, 0xC0, 0x38, 0x0F, 0xF8, 0x07, - 0x00, 0xFE, 0x01, 0xC0, 0x0F, 0x80, // '%' - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xE0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xC0, 0x07, 0x07, 0x80, 0x0E, - 0x0F, 0x00, 0x1E, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x03, 0xC7, 0xFE, - 0x07, 0x1F, 0x3E, 0x1E, 0x3C, 0x3E, 0x3C, 0x78, 0x3E, 0xF0, 0xE0, 0x3F, 0xE1, 0xC0, 0x3F, 0x83, 0xC0, 0x3E, - 0x07, 0xC1, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0x9E, 0x03, 0xF8, 0x1E, 0x00, // '&' - 0xF7, 0xBD, 0xCE, 0x31, 0x8C, // ''' - 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x83, 0xC0, 0xE0, 0x78, 0x1C, 0x0E, 0x03, 0x81, 0xE0, // '(' - 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x00, // ')' - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x18, 0x03, 0xCC, 0xF3, 0xFF, 0xFD, 0xFF, 0xFE, 0x03, - 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xCE, 0x01, 0xE7, 0x80, 0xE1, 0xC0, 0x10, 0xC0, // '*' - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, - 0xFF, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, // '+' - 0x3C, 0xF1, 0xE3, 0xC7, 0x0E, 0x38, 0x70, // ',' - 0xFF, 0x7F, 0xBF, 0xC0, // '-' - 0x73, 0xEF, 0xBE, 0x70, // '.' - 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x03, - 0xC0, 0x00, // '/' - 0x07, 0xE0, 0x0F, 0xF8, 0x0F, 0xFE, 0x07, 0x87, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x1C, 0xF0, - 0x0E, 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x38, 0xE0, 0x1C, 0x70, 0x1E, - 0x3C, 0x0F, 0x1E, 0x07, 0x87, 0x87, 0x81, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '0' - 0x03, 0xC0, 0xF8, 0x3F, 0x0F, 0xE7, 0xFD, 0xF7, 0x9C, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, // '1' - 0x07, 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x0F, 0x07, 0x82, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // '2' - 0x0F, 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0x78, 0x3C, 0x20, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF8, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0xE0, 0x3E, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, // '3' - 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0E, - 0x38, 0x0F, 0x1C, 0x07, 0x0E, 0x07, 0x07, 0x07, 0x83, 0x83, 0x81, 0xC3, 0x80, 0xE1, 0xFF, 0xFE, 0xFF, 0xFF, - 0x7F, 0xFF, 0x80, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, // '4' - 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xFF, - 0x83, 0xFF, 0xC7, 0xFF, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xF6, - 0x07, 0xCF, 0xFF, 0x9F, 0xFE, 0x0F, 0xE0, 0x00, // '5' - 0x01, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x71, - 0xF0, 0x3B, 0xFE, 0x1F, 0xFF, 0x1F, 0x87, 0xCF, 0x81, 0xE7, 0x80, 0x7B, 0xC0, 0x3C, 0xE0, 0x1E, 0x70, 0x0F, - 0x3C, 0x07, 0x9E, 0x07, 0x87, 0x87, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '6' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, // '7' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xC7, 0x81, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x70, 0x38, 0x3E, - 0x7C, 0x0F, 0xF8, 0x01, 0xF8, 0x03, 0xFE, 0x03, 0xEF, 0xC3, 0xC1, 0xF1, 0xC0, 0x79, 0xE0, 0x1C, 0xF0, 0x0F, - 0x78, 0x07, 0x9C, 0x03, 0x8F, 0x07, 0xC7, 0xFF, 0xC0, 0xFF, 0xC0, 0x1F, 0x80, // '8' - 0x07, 0xC0, 0x0F, 0xF8, 0x0F, 0xFE, 0x0F, 0x87, 0x87, 0x81, 0xE3, 0x80, 0xF3, 0xC0, 0x39, 0xE0, 0x1C, 0xF0, - 0x0F, 0x78, 0x07, 0x9E, 0x07, 0xCF, 0x87, 0xE3, 0xFF, 0xE1, 0xFF, 0x70, 0x3E, 0x38, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x1F, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, 0x00, // '9' - 0x73, 0xEF, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, 0xBE, 0x70, // ':' - 0x38, 0xF9, 0xF3, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x3C, 0x70, 0xE1, 0xC7, 0x0E, - 0x00, // ';' - 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x06, // '<' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0xFF, 0xFC, // '=' - 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, // '>' - 0x1F, 0xC0, 0xFF, 0xE1, 0xFF, 0xE3, 0x83, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xC0, 0x00, // '?' - 0x00, 0x7F, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xBF, 0x80, 0x3C, 0x00, 0xF0, 0x1E, 0x00, 0x1E, 0x0F, 0x00, - 0x03, 0xC3, 0x83, 0xF8, 0x71, 0xC1, 0xFF, 0x0E, 0x70, 0xFB, 0xC3, 0xB8, 0x70, 0x70, 0xEE, 0x3C, 0x1C, 0x3B, - 0x8E, 0x07, 0x0E, 0xE3, 0x81, 0xC3, 0xB8, 0xE0, 0x70, 0xEE, 0x38, 0x1C, 0x3B, 0x8E, 0x07, 0x0E, 0xE3, 0xC3, - 0xC7, 0x38, 0x7B, 0xFB, 0xCE, 0x0F, 0xE7, 0xE1, 0xC1, 0xF0, 0xF0, 0x78, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, - 0xE0, 0x02, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, // '@' - 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x77, 0x00, 0x01, 0xDC, 0x00, 0x0F, 0x78, 0x00, 0x3D, - 0xE0, 0x00, 0xE3, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x1C, 0x00, 0x70, 0x70, 0x03, 0xC1, 0xE0, 0x0E, 0x03, 0x80, - 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0x80, 0x0E, 0x1E, 0x00, - 0x3C, 0x78, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x80, // 'A' - 0xFF, 0xE0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E, 0x07, 0xCF, 0x01, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, - 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xE7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, - 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x07, 0xEF, 0xFF, 0xE7, 0xFF, 0xE3, 0xFF, 0xC0, // 'B' - 0x01, 0xFC, 0x01, 0xFF, 0xE1, 0xFF, 0xF0, 0xFC, 0x1C, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x0C, 0x1F, 0xFF, 0x03, 0xFF, 0xC0, 0x3F, 0xE0, // 'C' - 0xFF, 0xE0, 0x1F, 0xFF, 0x03, 0xFF, 0xF8, 0x78, 0x1F, 0x8F, 0x00, 0xF1, 0xE0, 0x0F, 0x3C, 0x01, 0xE7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xC0, 0x7C, 0x78, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, // 'D' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0xCF, - 0xFF, 0x3F, 0xFC, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'E' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0xFF, 0x3F, 0xFC, 0xFF, 0xF3, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x00, // 'F' - 0x00, 0xFF, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xC1, 0xF8, 0x18, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, 0x3F, 0xEF, 0x03, 0xFE, 0xF0, - 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x3C, 0x01, 0xE3, 0xF0, 0x1E, 0x1F, 0xFF, 0xE0, 0xFF, - 0xFE, 0x01, 0xFF, 0x00, // 'G' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, - 0xF0, // 'H' - 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xC0, // 'I' - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, - 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x03, 0xCF, 0xF3, 0xF8, 0xF8, - 0x00, // 'J' - 0xF0, 0x0F, 0x3C, 0x07, 0xCF, 0x03, 0xE3, 0xC0, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x1E, 0x03, 0xCF, 0x80, - 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3E, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF8, // 'K' - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'L' - 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x0F, 0xDF, 0xC0, 0x0F, 0xEE, 0xE0, 0x07, 0x77, 0x70, 0x03, - 0xFB, 0xBC, 0x03, 0xBD, 0xCE, 0x01, 0xDE, 0xE7, 0x00, 0xEF, 0x73, 0xC0, 0xE7, 0xB8, 0xE0, 0x73, 0xDC, 0x70, - 0x79, 0xEE, 0x3C, 0x38, 0xF7, 0x0E, 0x1C, 0x7B, 0x87, 0x1E, 0x3D, 0xC3, 0xCE, 0x1E, 0xE0, 0xE7, 0x0F, 0x70, - 0x7F, 0x07, 0xB8, 0x1F, 0x83, 0xDC, 0x0F, 0xC1, 0xEE, 0x07, 0xC0, 0xF7, 0x01, 0xE0, 0x7B, 0x80, 0xF0, 0x3C, // 'M' - 0xF8, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xEF, 0xE0, 0x0E, 0xFE, 0x00, 0xEE, 0xF0, 0x0E, 0xEF, 0x80, 0xEE, - 0x78, 0x0E, 0xE3, 0xC0, 0xEE, 0x3C, 0x0E, 0xE1, 0xE0, 0xEE, 0x1F, 0x0E, 0xE0, 0xF0, 0xEE, 0x07, 0x8E, 0xE0, - 0x78, 0xEE, 0x03, 0xCE, 0xE0, 0x3E, 0xEE, 0x01, 0xEE, 0xE0, 0x0F, 0xEE, 0x00, 0xFE, 0xE0, 0x07, 0xEE, 0x00, - 0x7E, 0xE0, 0x03, 0xE0, // 'N' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, // 'O' - 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xF0, 0x7E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x7C, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, // 'P' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, // 'Q' - 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x3C, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0xC3, 0xFF, 0xE0, 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF0, // 'R' - 0x0F, 0xE0, 0x3F, 0xFC, 0x7F, 0xFC, 0xF8, 0x18, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x3C, 0xE0, 0x7C, 0xFF, 0xF8, 0xFF, 0xF0, 0x3F, 0xC0, // 'S' - 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, // 'T' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x79, 0xE0, 0x1E, 0x3E, 0x07, 0xC3, 0xFF, 0xF0, 0x3F, 0xFC, 0x01, 0xFE, - 0x00, // 'U' - 0xF0, 0x00, 0xF3, 0x80, 0x07, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC3, 0x80, 0x1C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, - 0x03, 0x80, 0x70, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x03, 0x81, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x03, 0x87, - 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x03, 0x9C, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, // 'V' - 0xF0, 0x07, 0x80, 0x3C, 0xE0, 0x0F, 0x00, 0x71, 0xE0, 0x3E, 0x01, 0xE3, 0xC0, 0x7E, 0x03, 0xC7, 0x80, 0xFC, - 0x07, 0x87, 0x01, 0xF8, 0x0E, 0x0F, 0x07, 0xF8, 0x3C, 0x1E, 0x0E, 0x70, 0x78, 0x3C, 0x1C, 0xE0, 0xF0, 0x38, - 0x79, 0xC1, 0xC0, 0x78, 0xF3, 0xC7, 0x80, 0xF1, 0xC3, 0x8F, 0x01, 0xE3, 0x87, 0x1E, 0x01, 0xCF, 0x0F, 0x38, - 0x03, 0x9C, 0x1E, 0x70, 0x07, 0xB8, 0x1D, 0xE0, 0x0F, 0x70, 0x3B, 0xC0, 0x0E, 0xE0, 0x77, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0xF0, 0x03, 0xC0, 0x00, // 'W' - 0x78, 0x01, 0xE1, 0xE0, 0x1E, 0x0F, 0x00, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x07, 0x87, 0x80, 0x1E, 0x78, - 0x00, 0xF3, 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, - 0x00, 0x1E, 0xF0, 0x00, 0xF3, 0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x81, 0xE0, 0x78, 0x0F, 0x83, 0xC0, - 0x3C, 0x3C, 0x00, 0xF3, 0xC0, 0x07, 0xC0, // 'X' - 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x03, 0xC3, 0xC0, 0x78, 0x3C, 0x07, 0x81, 0xE0, 0xF0, 0x1E, 0x0E, 0x00, - 0xF1, 0xE0, 0x07, 0x1C, 0x00, 0x7B, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, // 'Y' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // 'Z' - 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, // '[' - 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, - 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x70, - 0x03, 0xC0, // '\' - 0xFE, 0xFE, 0xFE, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xFE, 0xFE, 0xFE, // ']' - 0x01, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0x9C, 0x00, 0xE7, 0x00, 0x38, 0xE0, - 0x1C, 0x38, 0x07, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x38, 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x70, // '^' - 0xFF, 0xFD, 0xFF, 0xF8, // '_' - 0xF0, 0x78, 0x3C, 0x1C, 0x0E, // '`' - 0x07, 0xF0, 0x3F, 0xFC, 0x1F, 0xFE, 0x1C, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x07, 0xFE, 0x3F, 0xFE, - 0x7C, 0x0E, 0x78, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x1F, 0x86, // 'a' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, // 'b' - 0x07, 0xF0, 0x7F, 0xE7, 0xFF, 0x1F, 0x04, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xF0, 0x67, 0xFF, 0x8F, 0xFE, 0x0F, 0xE0, // 'c' - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x0F, 0x8E, 0x3F, 0xEE, - 0x7F, 0xFE, 0x7C, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'd' - 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xCF, 0x03, 0xDE, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, - 0xFB, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x81, 0x9F, 0xFF, 0x0F, 0xFE, 0x07, 0xF0, // 'e' - 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xFC, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, // 'f' - 0x07, 0xFF, 0x83, 0xFF, 0xE1, 0xE3, 0xF8, 0xF0, 0x78, 0x38, 0x0E, 0x0E, 0x03, 0x83, 0x80, 0xE0, 0xE0, 0x38, - 0x3C, 0x1E, 0x07, 0x8F, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, - 0x3F, 0xFF, 0x9E, 0x01, 0xE7, 0x00, 0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0x9E, 0x03, 0xE7, 0xFF, 0xF0, 0xFF, 0xF8, - 0x0F, 0xF0, 0x00, // 'g' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'h' - 0x73, 0xCF, 0x9C, 0x00, 0x00, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, // 'i' - 0x07, 0x03, 0xC0, 0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, - 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x3C, 0x0F, - 0x3F, 0xCF, 0xE3, 0xF0, // 'j' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, - 0xE0, 0xF0, 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xF3, 0xC0, - 0xE1, 0xE0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE0, 0x78, 0xE0, 0x7C, 0xE0, 0x3C, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xE3, 0xE0, 0x7C, 0x3B, 0xFE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFB, 0xE1, 0xFC, 0x1E, 0xF0, 0x3E, 0x07, 0xBC, 0x07, - 0x80, 0xEF, 0x01, 0xE0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, - 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, - 0x03, 0x80, // 'm' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'n' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xCF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xC0, 0x0E, 0xE0, - 0x07, 0x70, 0x03, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF3, 0xE1, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xE0, - 0x00, // 'o' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xE0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x7C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, // 'p' - 0x0F, 0x8E, 0x3F, 0xEE, 0x7F, 0xFE, 0x78, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, // 'q' - 0xE3, 0xDC, 0xFB, 0xBF, 0x7F, 0xAF, 0x81, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'r' - 0x1F, 0xC1, 0xFF, 0xCF, 0xFF, 0x3C, 0x18, 0xE0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x1F, 0xC0, - 0x1F, 0x00, 0x1E, 0x00, 0x7B, 0x03, 0xCF, 0xFF, 0x3F, 0xF8, 0x7F, 0x80, // 's' - 0x1C, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x7F, 0xEF, 0xFE, 0xFF, 0xE3, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1F, 0xE1, 0xFE, 0x07, 0xE0, // 't' - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'u' - 0xF0, 0x07, 0x9C, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x3D, 0xE0, 0x07, 0x70, 0x01, 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, // 'v' - 0xF0, 0x1E, 0x03, 0xCE, 0x03, 0xC0, 0x71, 0xE0, 0xFC, 0x1E, 0x3C, 0x1F, 0x83, 0xC3, 0x83, 0xF0, 0x70, 0x70, - 0xE7, 0x1E, 0x0F, 0x1C, 0xE3, 0xC1, 0xE3, 0x9C, 0x78, 0x1C, 0x73, 0x8E, 0x03, 0x9C, 0x3B, 0xC0, 0x7B, 0x87, - 0x78, 0x07, 0x70, 0xEE, 0x00, 0xEC, 0x1D, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0x3E, 0x07, 0xC0, - 0x07, 0x80, 0x78, 0x00, // 'w' - 0x78, 0x07, 0x87, 0x81, 0xE0, 0xF8, 0x7C, 0x0F, 0x0F, 0x00, 0xF3, 0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x3C, 0x3C, 0x0F, 0x03, 0xC3, - 0xE0, 0x7C, 0x78, 0x07, 0x80, // 'x' - 0xF0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x1D, 0xE0, 0x07, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, - 0x7C, 0x00, 0x00, // 'y' - 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // 'z' - 0x01, 0xC0, 0xF8, 0x3F, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x03, 0xE1, - 0xF8, 0x3C, 0x07, 0xE0, 0x3E, 0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF8, - 0x1F, 0x00, 0xE0, // '{' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, // '|' - 0xE0, 0x1F, 0x03, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF0, - 0x1F, 0x80, 0x70, 0x7E, 0x1F, 0x03, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x1F, 0x83, - 0xE0, 0x70, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_32Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 9, 0, 0}, // ' ' - {1, 6, 23, 10, 2, -23}, // '!' - {19, 11, 8, 15, 2, -23}, // '"' - {30, 20, 23, 22, 1, -23}, // '#' - {88, 15, 27, 19, 2, -25}, // '$' - {139, 27, 23, 29, 1, -23}, // '%' - {217, 23, 23, 25, 2, -23}, // '&' - {284, 5, 8, 9, 2, -23}, // ''' - {289, 9, 28, 11, 1, -23}, // '(' - {321, 9, 28, 11, 1, -23}, // ')' - {353, 17, 15, 19, 1, -24}, // '*' - {385, 17, 15, 19, 1, -19}, // '+' - {417, 7, 8, 10, 1, -4}, // ',' - {424, 9, 3, 11, 1, -10}, // '-' - {428, 6, 5, 10, 2, -5}, // '.' - {432, 13, 23, 13, 0, -23}, // '/' - {470, 17, 23, 19, 1, -23}, // '0' - {519, 11, 23, 19, 2, -23}, // '1' - {551, 17, 23, 19, 1, -23}, // '2' - {600, 16, 23, 19, 1, -23}, // '3' - {646, 17, 23, 19, 1, -23}, // '4' - {695, 15, 23, 19, 2, -23}, // '5' - {739, 17, 23, 19, 1, -23}, // '6' - {788, 17, 23, 19, 1, -23}, // '7' - {837, 17, 23, 19, 1, -23}, // '8' - {886, 17, 23, 19, 1, -23}, // '9' - {935, 6, 17, 10, 2, -17}, // ':' - {948, 7, 21, 10, 1, -17}, // ';' - {967, 17, 16, 19, 1, -20}, // '<' - {1001, 15, 9, 19, 2, -16}, // '=' - {1018, 17, 16, 19, 1, -20}, // '>' - {1052, 15, 23, 16, 0, -23}, // '?' - {1096, 26, 26, 30, 2, -23}, // '@' - {1181, 22, 23, 22, 0, -23}, // 'A' - {1245, 17, 23, 22, 3, -23}, // 'B' - {1294, 18, 23, 21, 2, -23}, // 'C' - {1346, 19, 23, 24, 3, -23}, // 'D' - {1401, 14, 23, 19, 3, -23}, // 'E' - {1442, 14, 23, 18, 3, -23}, // 'F' - {1483, 20, 23, 24, 2, -23}, // 'G' - {1541, 19, 23, 25, 3, -23}, // 'H' - {1596, 5, 23, 11, 3, -23}, // 'I' - {1611, 10, 29, 11, -2, -23}, // 'J' - {1648, 18, 23, 21, 3, -23}, // 'K' - {1700, 14, 23, 18, 3, -23}, // 'L' - {1741, 25, 23, 31, 3, -23}, // 'M' - {1813, 20, 23, 26, 3, -23}, // 'N' - {1871, 22, 23, 26, 2, -23}, // 'O' - {1935, 16, 23, 21, 3, -23}, // 'P' - {1981, 22, 28, 26, 2, -23}, // 'Q' - {2058, 18, 23, 21, 3, -23}, // 'R' - {2110, 16, 23, 19, 2, -23}, // 'S' - {2156, 19, 23, 19, 0, -23}, // 'T' - {2211, 19, 23, 25, 3, -23}, // 'U' - {2266, 21, 23, 21, 0, -23}, // 'V' - {2327, 31, 23, 31, 0, -23}, // 'W' - {2417, 21, 23, 21, 0, -23}, // 'X' - {2478, 20, 23, 20, 0, -23}, // 'Y' - {2536, 17, 23, 19, 1, -23}, // 'Z' - {2585, 8, 28, 12, 3, -23}, // '[' - {2613, 13, 23, 13, 0, -23}, // '\' - {2651, 8, 28, 12, 1, -23}, // ']' - {2679, 18, 15, 18, 0, -23}, // '^' - {2713, 15, 2, 15, 0, 3}, // '_' - {2717, 8, 5, 20, 6, -24}, // '`' - {2722, 16, 17, 20, 1, -17}, // 'a' - {2756, 16, 24, 21, 3, -24}, // 'b' - {2804, 14, 17, 17, 2, -17}, // 'c' - {2834, 16, 24, 21, 2, -24}, // 'd' - {2882, 15, 17, 19, 2, -17}, // 'e' - {2914, 13, 24, 13, 1, -24}, // 'f' - {2953, 18, 25, 19, 0, -17}, // 'g' - {3010, 16, 24, 21, 3, -24}, // 'h' - {3058, 6, 24, 10, 2, -24}, // 'i' - {3076, 10, 32, 10, -2, -24}, // 'j' - {3116, 16, 24, 19, 3, -24}, // 'k' - {3164, 4, 24, 10, 3, -24}, // 'l' - {3176, 26, 17, 32, 3, -17}, // 'm' - {3232, 16, 17, 21, 3, -17}, // 'n' - {3266, 17, 17, 21, 2, -17}, // 'o' - {3303, 16, 25, 21, 3, -17}, // 'p' - {3353, 16, 25, 21, 2, -17}, // 'q' - {3403, 11, 17, 15, 3, -17}, // 'r' - {3427, 14, 17, 17, 2, -17}, // 's' - {3457, 12, 21, 14, 1, -21}, // 't' - {3489, 16, 17, 21, 2, -17}, // 'u' - {3523, 18, 17, 18, 0, -17}, // 'v' - {3562, 27, 17, 27, 0, -17}, // 'w' - {3620, 19, 17, 19, 0, -17}, // 'x' - {3661, 18, 25, 18, 0, -17}, // 'y' - {3718, 14, 17, 16, 1, -17}, // 'z' - {3748, 11, 28, 13, 1, -23}, // '{' - {3787, 3, 32, 19, 8, -24}, // '|' - {3799, 11, 28, 13, 1, -23} // '}' -}; -const GFXfont Open_Sans_SemiBold_32 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_32Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_32Glyphs, 0x20, 0x7E, 45}; \ No newline at end of file diff --git a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h b/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h deleted file mode 100644 index 93d1d062a..000000000 --- a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h +++ /dev/null @@ -1,798 +0,0 @@ -// 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 Open_Sans_SemiBold_56Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x3F, 0x9F, 0xCF, 0xF7, 0xFB, 0xF9, 0xFC, 0x7C, 0x00, // '!' - 0xFC, 0x3F, 0x7E, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0xF8, - 0x1F, 0x7C, 0x0F, 0xBE, 0x07, 0xDF, 0x03, 0xE7, 0x81, 0xE3, 0xC0, 0xF0, // '"' - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x1F, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x3E, 0x00, - 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0xF0, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xC0, 0x00, // '#' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0x78, - 0xFC, 0x3F, 0x8F, 0x01, 0x8F, 0xE1, 0xE0, 0x01, 0xFC, 0x3C, 0x00, 0x3F, 0x87, 0x80, 0x07, 0xF0, 0xF0, 0x00, - 0x7F, 0x1E, 0x00, 0x0F, 0xF3, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x1F, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0x3C, 0x3F, 0x80, 0x07, 0x83, 0xF0, 0x00, 0xF0, 0x7E, - 0x80, 0x1E, 0x1F, 0xDC, 0x03, 0xC7, 0xFB, 0xF8, 0x7B, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, // '$' - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x0F, 0xC0, 0x07, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0x7E, 0x00, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x7E, 0x01, - 0xF0, 0x00, 0x3F, 0x03, 0xF0, 0x1F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0xF8, 0x00, 0x0F, 0xC0, 0xFC, 0x0F, 0x80, - 0x00, 0x7E, 0x07, 0xE0, 0xFC, 0x00, 0x03, 0xF0, 0x3F, 0x07, 0xC0, 0x00, 0x1F, 0x81, 0xF8, 0x7E, 0x00, 0x00, - 0xFC, 0x0F, 0xC3, 0xE0, 0xFC, 0x03, 0xE0, 0x7C, 0x3F, 0x1F, 0xF8, 0x1F, 0x03, 0xE1, 0xF1, 0xFF, 0xE0, 0xF8, - 0x1F, 0x1F, 0x1F, 0xFF, 0x07, 0xE1, 0xF8, 0xF8, 0xFF, 0xFC, 0x1F, 0xFF, 0x8F, 0x8F, 0xC3, 0xE0, 0xFF, 0xFC, - 0xFC, 0x7C, 0x1F, 0x83, 0xFF, 0xC7, 0xC3, 0xE0, 0x7C, 0x0F, 0xFC, 0x7E, 0x3F, 0x03, 0xE0, 0x1F, 0x83, 0xE1, - 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0xFC, 0x00, 0x01, 0xF0, 0x7E, 0x07, 0xE0, 0x00, 0x1F, 0x83, 0xF0, - 0x3F, 0x00, 0x00, 0xF8, 0x1F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x0F, 0xC0, 0x00, 0x7C, 0x07, 0xE0, 0x7E, - 0x00, 0x07, 0xC0, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, - 0x3F, 0x00, 0x3E, 0x0F, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, // '%' - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x7F, 0x00, - 0x00, 0x03, 0xFB, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x01, 0xFF, 0xF8, 0x00, 0xFC, 0x07, - 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xE7, 0xF8, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x0F, 0xE0, 0xFE, 0x07, 0xF8, 0x3F, - 0x83, 0xF8, 0x07, 0xF8, 0x7F, 0x07, 0xF0, 0x07, 0xF9, 0xFC, 0x0F, 0xE0, 0x07, 0xFB, 0xF8, 0x1F, 0x80, 0x07, - 0xFF, 0xE0, 0x3F, 0x00, 0x07, 0xFF, 0xC0, 0x7F, 0x00, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x01, 0xFE, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xF7, 0xF8, 0x07, 0xFF, 0xFF, 0xC7, 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xF8, 0x07, 0xFF, 0xF0, - 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, // '&' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xF1, 0xE3, 0xC7, 0x8F, 0x00, // ''' - 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xFC, - 0x00, 0xFC, // '(' - 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, - 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, - 0xFC, 0x00, // ')' - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x70, 0x1F, 0x01, 0xC7, 0xF1, 0xF1, 0xFC, 0x7F, - 0xFE, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x07, 0xF1, - 0xFC, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, 0x03, 0xC0, 0x78, 0x00, 0x08, 0x02, - 0x00, // '*' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, // '+' - 0x3F, 0x8F, 0xE3, 0xF8, 0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x3E, 0x00, // ',' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0xC0, // '-' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // '.' - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, // '/' - 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0x00, 0xFE, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0x7E, - 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0x7E, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x3F, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x3F, 0x87, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x07, - 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x0F, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, // '0' - 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0x7E, - 0x7F, 0x9F, 0xBF, 0xC7, 0xE7, 0xE1, 0xF8, 0xF0, 0x7E, 0x10, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, // '1' - 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, - 0x3F, 0xE0, 0x7F, 0xC0, 0xFC, 0x00, 0xFE, 0x03, 0x80, 0x03, 0xF8, 0x08, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, // '2' - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x03, - 0xF8, 0x0F, 0xF8, 0x3E, 0x00, 0x3F, 0x81, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x80, 0x00, 0x1F, 0xCE, 0x00, 0x03, 0xFC, - 0xFE, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, // '3' - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x1F, 0x7F, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x03, 0xE3, 0xF8, 0x00, 0x0F, 0xC7, 0xF0, - 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x01, 0xF8, 0x3F, 0x80, 0x07, 0xE0, 0x7F, 0x00, 0x0F, 0x80, - 0xFE, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0xF8, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, // '4' - 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF7, 0xFC, 0x00, - 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xC0, 0x3F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x03, 0xFC, 0x7E, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, // '5' - 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, - 0x7F, 0xE0, 0x10, 0x0F, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0xFC, 0x7F, 0xF8, 0x0F, 0xCF, 0xFF, 0xE0, 0xFD, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x8F, 0xF8, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xF8, 0x03, 0xF8, - 0x1F, 0xE0, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, // '6' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, // '7' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0x7E, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0xC0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x03, 0xFC, 0x0F, 0xE0, 0x0F, 0xF9, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x81, 0xFC, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0xFC, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0xC0, 0x03, - 0xF8, 0xFF, 0x00, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, // '8' - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF0, 0x7F, 0x80, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7E, - 0x1F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0xFC, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x9F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x3F, - 0xE7, 0xF8, 0x03, 0xFE, 0x1F, 0xF0, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0xFC, 0x0F, 0xFF, 0xE7, - 0xE0, 0x1F, 0xFE, 0x3F, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x01, 0x00, 0x7F, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, // '9' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // ':' - 0x1F, 0x07, 0xF0, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF0, 0x7E, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x00, // ';' - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, // '<' - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, // '=' - 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, // '>' - 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF8, 0x0F, - 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, // '?' - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x3F, 0xE0, 0x0F, 0x81, 0xF0, 0x07, 0xFF, 0xF0, - 0x3E, 0x1F, 0x00, 0xFF, 0xFF, 0x81, 0xF0, 0xF8, 0x0F, 0xFF, 0xFC, 0x0F, 0x8F, 0x80, 0xFF, 0x07, 0xE0, 0x3E, - 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xF3, 0xE0, 0x7E, 0x00, 0xF8, 0x0F, 0x9F, 0x03, 0xE0, 0x07, 0xC0, 0x7D, 0xF0, - 0x3F, 0x00, 0x3E, 0x03, 0xEF, 0x81, 0xF0, 0x01, 0xF0, 0x1F, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xFB, 0xE0, 0x7C, - 0x00, 0x7C, 0x07, 0xDF, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0xF8, 0x1F, 0x00, 0x3F, 0x01, 0xE7, 0xC0, 0xF8, 0x01, - 0xF8, 0x1F, 0x3E, 0x07, 0xC0, 0x0F, 0xC0, 0xF9, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xCF, 0x80, 0xF8, 0x0F, 0xF0, - 0x7C, 0x7C, 0x07, 0xF0, 0xFF, 0xC7, 0xE1, 0xF0, 0x1F, 0xFF, 0x9F, 0xFE, 0x0F, 0x80, 0x7F, 0xFC, 0xFF, 0xE0, - 0x7E, 0x01, 0xFF, 0x83, 0xFE, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xE0, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, // '@' - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, - 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, // 'A' - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x7F, 0x3F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, - 0x00, 0xFE, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x03, 0xFC, - 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, // 'B' - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFC, 0x0F, 0xF8, 0x00, 0x18, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x04, 0x0F, 0xFF, 0x00, 0x7C, - 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0x80, // 'C' - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x3F, 0xE0, 0xFE, 0x00, - 0x07, 0xFC, 0x3F, 0x80, 0x00, 0xFF, 0x8F, 0xE0, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, - 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x1F, 0xF8, 0x3F, 0x80, 0x3F, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, // 'D' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'E' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, // 'F' - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, 0xC0, 0x7F, 0xE0, 0x00, 0x30, 0x0F, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xFF, 0xEF, 0xE0, 0x01, - 0xFF, 0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0xBF, 0x80, 0x07, 0xFF, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x7E, 0x00, 0x1F, - 0xFF, 0xCF, 0xE0, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x01, - 0xFC, 0xFF, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x00, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0x80, 0x1F, 0xE0, 0x7F, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFC, 0x00, // 'G' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, - 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0xFE, // 'H' - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, // 'I' - 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x3F, 0xE7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xC0, - 0x00, // 'J' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xF0, 0xFE, 0x00, - 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xDF, - 0xE0, 0x00, 0xFF, 0x8F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x03, 0xFC, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xF0, - 0xFE, 0x00, 0x07, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x01, 0xFE, // 'K' - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'L' - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x7F, 0xF0, - 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xBF, 0xFC, 0x00, 0x00, - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x1F, 0x7E, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xDF, 0xBF, 0x00, 0x00, 0xFD, 0xFB, - 0xF7, 0xE0, 0x00, 0x1F, 0x3F, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xEF, 0xCF, 0xC0, 0x00, 0xF8, 0xFD, 0xF9, 0xF8, - 0x00, 0x1F, 0x1F, 0xBF, 0x1F, 0x80, 0x07, 0xE7, 0xF7, 0xE3, 0xF0, 0x00, 0xF8, 0xFE, 0xFC, 0x7E, 0x00, 0x3F, - 0x1F, 0xDF, 0x87, 0xE0, 0x07, 0xE3, 0xFB, 0xF0, 0xFC, 0x00, 0xF8, 0x7F, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0xEF, - 0xC1, 0xF8, 0x07, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0xBF, 0x03, 0xE0, 0x3F, 0x07, 0xF7, 0xE0, 0x7E, - 0x07, 0xC0, 0xFE, 0xFC, 0x0F, 0xC0, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0x3F, 0x03, 0xFB, 0xF0, 0x1F, 0x87, 0xC0, - 0x7F, 0x7E, 0x03, 0xF1, 0xF8, 0x0F, 0xEF, 0xC0, 0x3F, 0x3F, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xC0, 0x3F, 0xBF, - 0x00, 0xFD, 0xF8, 0x07, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0xFE, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, - 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x7E, 0x00, 0x7F, 0xC0, 0x0F, 0xEF, 0xC0, 0x0F, 0xF8, 0x01, - 0xFD, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xBF, 0x00, 0x1F, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0xFE, // 'M' - 0xFF, 0x80, 0x00, 0x0F, 0xDF, 0xF0, 0x00, 0x01, 0xFB, 0xFF, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0x00, 0x07, 0xEF, - 0xFE, 0x00, 0x00, 0xFD, 0xFF, 0xE0, 0x00, 0x1F, 0xBF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xC0, 0x00, 0x7E, 0xFF, - 0xFC, 0x00, 0x0F, 0xDF, 0xBF, 0x80, 0x01, 0xFB, 0xF7, 0xF8, 0x00, 0x3F, 0x7E, 0x7F, 0x00, 0x07, 0xEF, 0xC7, - 0xF0, 0x00, 0xFD, 0xF8, 0xFF, 0x00, 0x1F, 0xBF, 0x0F, 0xE0, 0x03, 0xF7, 0xE1, 0xFE, 0x00, 0x7E, 0xFC, 0x1F, - 0xC0, 0x0F, 0xDF, 0x81, 0xFC, 0x01, 0xFB, 0xF0, 0x3F, 0xC0, 0x3F, 0x7E, 0x03, 0xF8, 0x07, 0xEF, 0xC0, 0x3F, - 0x80, 0xFD, 0xF8, 0x07, 0xF8, 0x1F, 0xBF, 0x00, 0x7F, 0x03, 0xF7, 0xE0, 0x0F, 0xF0, 0x7E, 0xFC, 0x00, 0xFE, - 0x0F, 0xDF, 0x80, 0x0F, 0xE1, 0xFB, 0xF0, 0x01, 0xFE, 0x3F, 0x7E, 0x00, 0x1F, 0xC7, 0xEF, 0xC0, 0x01, 0xFC, - 0xFD, 0xF8, 0x00, 0x3F, 0xDF, 0xBF, 0x00, 0x03, 0xFB, 0xF7, 0xE0, 0x00, 0x7F, 0xFE, 0xFC, 0x00, 0x07, 0xFF, - 0xDF, 0x80, 0x00, 0x7F, 0xFB, 0xF0, 0x00, 0x0F, 0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xEF, 0xC0, 0x00, 0x0F, 0xFD, - 0xF8, 0x00, 0x01, 0xFF, 0xBF, 0x00, 0x00, 0x1F, 0xF7, 0xE0, 0x00, 0x03, 0xFE, // 'N' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, // 'O' - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0x80, 0x7F, 0xE7, 0xF0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x7F, 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x00, 0xFE, - 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x07, 0xFB, 0xF8, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, // 'P' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, // 'Q' - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x3F, 0xF0, 0x7F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x1F, 0xE1, 0xFC, - 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x7F, 0x03, 0xF8, 0x03, - 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x1F, 0xC0, 0xFE, 0x00, - 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, // 'R' - 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFE, 0x1F, 0xF0, 0x1F, 0x83, 0xF8, 0x00, 0x30, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, // 'S' - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, // 'T' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0F, 0xFC, 0x03, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, // 'U' - 0xFE, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x01, 0xFC, - 0x3F, 0x00, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x03, 0xF0, - 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, - 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, // 'V' - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0xF8, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x1F, 0x80, 0x07, 0xDF, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFD, 0xF8, - 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF7, 0xE0, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x3E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xF8, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xE0, - 0x07, 0xE0, 0x1F, 0x0F, 0xC0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x00, 0x7F, 0x03, 0xF0, 0x7E, - 0x07, 0xF0, 0x01, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0xC0, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x7E, 0x00, 0x0F, 0xC1, - 0xF8, 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x87, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x3F, 0x80, - 0x01, 0xF8, 0xFC, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xC0, 0x1F, - 0x9F, 0xC0, 0x00, 0x3F, 0x3E, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0xF9, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, // 'W' - 0x7F, 0x80, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x03, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x3F, 0x80, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x01, 0xFE, // 'X' - 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, // 'Y' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, // 'Z' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // '[' - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, // '\' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, - 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, - 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // ']' - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x0F, 0x8F, 0x80, - 0x00, 0x7C, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x03, - 0xE7, 0xC0, 0x00, 0x0F, 0x80, // '^' - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, // '_' - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, // '`' - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0xFF, 0x01, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0x03, 0xF9, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x0F, 0xE7, 0xF0, 0x01, 0xFD, 0xFC, - 0x00, 0x3F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x01, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF9, 0xFE, 0x07, - 0xFF, 0x3F, 0xFF, 0xF7, 0xE3, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0x0F, 0x83, 0xFF, 0xC1, 0xF0, 0x1F, 0xE0, 0x00, // 'a' - 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, 0x0F, 0xE0, 0x0F, 0xC7, 0xFF, 0x80, 0xFC, 0xFF, 0xFC, 0x0F, 0xDF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFF, 0x00, 0x1F, 0xCF, 0xF8, 0x03, 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xF9, 0xFF, 0xFE, 0x0F, - 0x8F, 0xFF, 0xC0, 0xF8, 0x7F, 0xF8, 0x00, 0x01, 0xFE, 0x00, // 'b' - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x1F, 0xE0, 0x3C, - 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x3F, 0xE0, 0x3C, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xE0, // 'c' - 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, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7E, 0x07, 0xFF, 0xE7, 0xE0, 0xFF, - 0xFF, 0x7E, 0x1F, 0xFF, 0xFF, 0xE3, 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x07, - 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF3, 0xE0, - 0x7F, 0xFE, 0x3E, 0x03, 0xFF, 0xC3, 0xE0, 0x0F, 0xE0, 0x00, // 'd' - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, - 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x3F, 0x7F, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x30, 0x7F, 0xC0, - 0x3E, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, // 'e' - 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0x02, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x80, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, // 'f' - 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, - 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFE, 0x00, 0x7E, 0x01, 0xFC, - 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC3, 0xF8, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x07, 0xEF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0xFE, 0x1F, 0xE0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, // 'g' - 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, 0x0F, 0xF0, 0x0F, 0xC7, 0xFF, 0xC0, 0xFC, 0xFF, 0xFE, 0x0F, 0xDF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, - 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xE0, // 'h' - 0x3C, 0x3F, 0x3F, 0x9F, 0xEF, 0xE3, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x00, // 'i' - 0x00, 0x78, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x00, // 'j' - 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, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, - 0x0F, 0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x07, 0xF8, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x1F, - 0xE0, 0x0F, 0xC1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x0F, 0xC7, 0xF0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xBF, 0x80, - 0x0F, 0xE1, 0xFC, 0x00, 0xFC, 0x1F, 0xE0, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F, 0x80, - 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFC, 0x00, 0x7F, 0x8F, - 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x1F, 0xC0, // 'k' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, - 0xFB, 0xF0, // 'l' - 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x03, 0xE1, 0xFF, 0xE0, 0x3F, 0xFE, 0x0F, 0x8F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xCF, 0xF8, - 0x07, 0xFF, 0x00, 0x7F, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, 0xC0, 0x03, 0xF3, 0xF8, 0x00, - 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, - 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, - 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, - 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, // 'm' - 0x00, 0x0F, 0xF0, 0x0F, 0x87, 0xFF, 0xC0, 0xF8, 0xFF, 0xFE, 0x0F, 0x9F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE0, // 'n' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xF8, 0x7F, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x3F, - 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, - 0xE1, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, // 'o' - 0x00, 0x0F, 0xE0, 0x0F, 0x87, 0xFF, 0x80, 0xF8, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFC, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x3F, 0xCF, 0xF8, 0x03, - 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFD, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xC0, 0xFC, 0x7F, 0xF8, - 0x0F, 0xC1, 0xFE, 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, // 'p' - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x07, 0xFF, 0xE3, 0xE0, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, - 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF7, 0xE0, 0x7F, 0xFE, 0x7E, 0x03, 0xFF, 0xC7, - 0xE0, 0x0F, 0xF0, 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, // 'q' - 0x00, 0x0F, 0xDF, 0x07, 0xFB, 0xE3, 0xFF, 0x7C, 0xFF, 0xEF, 0x9F, 0xFD, 0xF7, 0xFF, 0x3F, 0xF8, 0x07, 0xFC, - 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x00, // 'r' - 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xE0, 0x3E, 0x3F, - 0x00, 0x08, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFD, - 0x80, 0x03, 0xF3, 0xE0, 0x1F, 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x07, - 0xFE, 0x00, // 's' - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x10, 0x3F, 0xFF, 0x80, - 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x1F, 0xE0, // 't' - 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, - 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x80, 0x3F, 0xE7, 0xFC, 0x0F, - 0xFE, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xE3, 0xE0, 0x7F, 0xFC, 0x3E, 0x01, 0xFE, 0x00, - 0x00, // 'u' - 0xFE, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF0, 0x00, - 0x3F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0x7E, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, // 'v' - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xBF, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0xFC, - 0x00, 0xFF, 0xC0, 0x0F, 0xC7, 0xE0, 0x07, 0xFE, 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0xF0, 0x07, 0xF1, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0x87, 0xE0, 0x1F, 0x7E, 0x01, 0xF8, 0x3F, 0x00, 0xF9, 0xF0, 0x0F, 0xC1, 0xFC, 0x07, 0xCF, - 0x80, 0xFE, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xE3, 0xF0, 0x3F, 0x01, 0xF8, 0x1F, 0x0F, 0x81, - 0xF8, 0x0F, 0xE0, 0xF8, 0x7C, 0x1F, 0xC0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x01, 0xF8, 0x7C, 0x1F, 0x87, 0xE0, - 0x0F, 0xC3, 0xE0, 0x7C, 0x3F, 0x00, 0x3F, 0x3F, 0x03, 0xF3, 0xF0, 0x01, 0xF9, 0xF8, 0x1F, 0x9F, 0x80, 0x0F, - 0xCF, 0x80, 0x7C, 0xFC, 0x00, 0x7E, 0x7C, 0x03, 0xE7, 0xE0, 0x01, 0xF7, 0xE0, 0x1F, 0x7E, 0x00, 0x0F, 0xFE, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, // 'w' - 0x7F, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, - 0xC0, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0xC0, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x7F, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xE0, - 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0xFE, 0x1F, 0xE0, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x0F, 0xE0, // 'x' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x7F, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xF1, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, // 'y' - 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'z' - 0x00, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x07, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x01, 0xF0, // '{' - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, // '|' - 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0xFF, 0xE0, 0x1F, 0xF0, 0x03, 0xF8, - 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_56Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 16, 0, 0}, // ' ' - {1, 9, 41, 16, 4, -40}, // '!' - {48, 17, 14, 25, 4, -40}, // '"' - {78, 35, 40, 37, 1, -40}, // '#' - {253, 27, 46, 33, 3, -43}, // '$' - {409, 45, 42, 49, 2, -41}, // '%' - {646, 39, 42, 42, 3, -41}, // '&' - {851, 7, 14, 15, 4, -40}, // ''' - {864, 15, 49, 19, 2, -40}, // '(' - {956, 15, 49, 19, 2, -40}, // ')' - {1048, 28, 26, 32, 2, -43}, // '*' - {1139, 27, 27, 33, 3, -33}, // '+' - {1231, 10, 14, 16, 2, -7}, // ',' - {1249, 15, 5, 19, 2, -18}, // '-' - {1259, 9, 8, 16, 4, -7}, // '.' - {1268, 23, 40, 23, 0, -40}, // '/' - {1383, 29, 42, 33, 2, -41}, // '0' - {1536, 18, 40, 33, 4, -40}, // '1' - {1626, 29, 41, 33, 2, -41}, // '2' - {1775, 28, 42, 33, 2, -41}, // '3' - {1922, 31, 40, 33, 1, -40}, // '4' - {2077, 27, 41, 33, 3, -40}, // '5' - {2216, 28, 42, 33, 3, -41}, // '6' - {2363, 29, 40, 33, 2, -40}, // '7' - {2508, 29, 42, 33, 2, -41}, // '8' - {2661, 29, 42, 33, 2, -41}, // '9' - {2814, 9, 32, 16, 4, -31}, // ':' - {2850, 11, 38, 17, 2, -31}, // ';' - {2903, 27, 28, 33, 3, -34}, // '<' - {2998, 27, 16, 33, 3, -28}, // '=' - {3052, 27, 28, 33, 3, -34}, // '>' - {3147, 25, 42, 26, 0, -41}, // '?' - {3279, 45, 45, 51, 3, -40}, // '@' - {3533, 38, 40, 38, 0, -40}, // 'A' - {3723, 30, 40, 38, 5, -40}, // 'B' - {3873, 32, 42, 37, 3, -41}, // 'C' - {4041, 34, 40, 42, 5, -40}, // 'D' - {4211, 24, 40, 32, 5, -40}, // 'E' - {4331, 24, 40, 31, 5, -40}, // 'F' - {4451, 35, 42, 42, 3, -41}, // 'G' - {4635, 33, 40, 43, 5, -40}, // 'H' - {4800, 8, 40, 18, 5, -40}, // 'I' - {4840, 17, 51, 18, -4, -40}, // 'J' - {4949, 32, 40, 37, 5, -40}, // 'K' - {5109, 24, 40, 31, 5, -40}, // 'L' - {5229, 43, 40, 53, 5, -40}, // 'M' - {5444, 35, 40, 45, 5, -40}, // 'N' - {5619, 39, 42, 45, 3, -41}, // 'O' - {5824, 27, 40, 35, 5, -40}, // 'P' - {5959, 39, 51, 45, 3, -41}, // 'Q' - {6208, 31, 40, 37, 5, -40}, // 'R' - {6363, 27, 42, 32, 3, -41}, // 'S' - {6505, 31, 40, 33, 1, -40}, // 'T' - {6660, 33, 41, 43, 5, -40}, // 'U' - {6830, 36, 40, 36, 0, -40}, // 'V' - {7010, 54, 40, 54, 0, -40}, // 'W' - {7280, 36, 40, 36, 0, -40}, // 'X' - {7460, 34, 40, 34, 0, -40}, // 'Y' - {7630, 29, 40, 33, 2, -40}, // 'Z' - {7775, 14, 49, 19, 4, -40}, // '[' - {7861, 23, 40, 23, 0, -40}, // '\' - {7976, 14, 49, 19, 1, -40}, // ']' - {8062, 29, 26, 31, 1, -40}, // '^' - {8157, 25, 4, 25, 0, 5}, // '_' - {8170, 14, 9, 34, 10, -43}, // '`' - {8186, 27, 32, 33, 2, -31}, // 'a' - {8294, 28, 44, 36, 5, -43}, // 'b' - {8448, 24, 32, 29, 3, -31}, // 'c' - {8544, 28, 44, 36, 3, -43}, // 'd' - {8698, 27, 32, 33, 3, -31}, // 'e' - {8806, 23, 43, 21, 1, -43}, // 'f' - {8930, 30, 44, 32, 1, -31}, // 'g' - {9095, 28, 43, 37, 5, -43}, // 'h' - {9246, 9, 42, 17, 4, -42}, // 'i' - {9294, 16, 55, 17, -3, -42}, // 'j' - {9404, 28, 43, 33, 5, -43}, // 'k' - {9555, 7, 43, 17, 5, -43}, // 'l' - {9593, 46, 31, 55, 5, -31}, // 'm' - {9772, 28, 31, 37, 5, -31}, // 'n' - {9881, 29, 32, 35, 3, -31}, // 'o' - {9997, 28, 44, 36, 5, -31}, // 'p' - {10151, 28, 44, 36, 3, -31}, // 'q' - {10305, 19, 31, 25, 5, -31}, // 'r' - {10379, 23, 32, 28, 3, -31}, // 's' - {10471, 21, 38, 23, 1, -37}, // 't' - {10571, 28, 31, 37, 4, -30}, // 'u' - {10680, 31, 30, 31, 0, -30}, // 'v' - {10797, 45, 30, 47, 1, -30}, // 'w' - {10966, 30, 30, 32, 1, -30}, // 'x' - {11079, 31, 43, 31, 0, -30}, // 'y' - {11246, 24, 30, 28, 2, -30}, // 'z' - {11336, 21, 49, 23, 1, -40}, // '{' - {11465, 6, 56, 32, 13, -43}, // '|' - {11507, 20, 49, 22, 1, -40} // '}' -}; -const GFXfont Open_Sans_SemiBold_56 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_56Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_56Glyphs, 0x20, 0x7E, 77}; \ No newline at end of file diff --git a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Inkplate10_Crowdsupply_Campaing_Tracker.ino b/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Inkplate10_Crowdsupply_Campaing_Tracker.ino deleted file mode 100644 index 316f42fa5..000000000 --- a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/Inkplate10_Crowdsupply_Campaing_Tracker.ino +++ /dev/null @@ -1,205 +0,0 @@ -/* - Inkplate10_Crowdsupply_Campaing_Tracker example for Soldered Inkplate 10 - For this example you will need only USB cable and Inkplate 10. - Select "e-radionica Inkplate10" or "Soldered Inkplate10" from Tools -> Board menu. - Don't have "e-radionica Inkplate10" or "Soldered Inkplate10" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 10 to display html data. - This example gets html data from crowdsource campaing and displays them on Inkplate screen. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 8 December 2022 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#if !defined(ARDUINO_INKPLATE10) && !defined(ARDUINO_INKPLATE10V2) -#error \ - "Wrong board selection for this example, please select e-radionica Inkplate10 or Soldered Inkplate10 in the boards menu." -#endif - -#include "Inkplate.h" // Include Inkplate library to the sketch -#include "generatedUI.h" // include generated UI - -#define DELAY_MS 60000 * 60 // Delay between fetching data -#define URL "https://www.crowdsupply.com/soldered/inkplate-10" // Link to the Inkplate 10 crowdsupply campaign - -// Enter your Wi-Fi credentials -#define ssid "" -#define password "" - -// Create an object on Inkplate library and also set library into 1Bit (BW) mode -Inkplate display(INKPLATE_1BIT); - -uint32_t n; // Variable for counting position in the buffer -char *buf; // Pointer to the buffer - -// Declaration of the function used later -String textInTag(const char *tag, const char *tagEnd, int dt = 1); - -void setup() -{ - Serial.begin(115200); // Init serial communication - display.begin(); // Init Inkplate library (you should call this function ONLY ONCE) - - // Connect to WiFi - while (!display.connectWiFi(ssid, password)) - { - Serial.print('.'); - delay(1000); - } - - // Allocate memory for the buffer - buf = (char *)ps_malloc(100000); - - // Create an HTTPclient object and do the GET request - HTTPClient http; - if (http.begin(URL) && http.GET() > 0) - { - // Create an HTTPclient object and do the GET request - while (http.getStreamPtr()->available()) - { - char c = http.getStreamPtr()->read(); - buf[n++] = c; - delayMicroseconds(100); - } - - // Add the end of the string - buf[n] = 0; - } - Serial.println("Buffer load complete!"); - - // Get the values for each field. - // When we did a get request, we got HTML as a response because there is no API on this web page. - // If you open the source of the page, you will see the HTML code. Here in the function we pass tags we are - // interested in and get the value between the tags as a string. - text1_content = textInTag("

", "

"); - text3_content = textInTag("

", "

"); - text4_content = textInTag("

", "

"); - text7_content = textInTag("

", "

"); - text11_content = textInTag("", ""); - - int percent; - text11_content.replace(",", ""); - sscanf(text11_content.c_str(), "%d%%", &percent); - - // Draw parcent slider - if (percent < 100 && percent > 0) - { - float per = (float)(percent / 100.00); - int diff = line0_end_x - line0_start_x; - Serial.println(per); - Serial.println(diff); - line0_end_x = line0_start_x + (diff * per); - } - else if (percent >= 100) - { - } - else - { - line0_end_x = line0_start_x; - } - - text13_content = textInTag("", ""); // Separate the number of updates - text14_content = - textInTag("", ""); // Separate the date when founded - text17_content = textInTag("", ""); // Separate the number of backers - - text19_content += textInTag("", - ""); // Separate the last update date - - // Display the content on the screen - mainDraw(); - display.display(); - - // Free the buffer - free(buf); - - // Go to sleep - esp_sleep_enable_timer_wakeup(1000LL * DELAY_MS); - (void)esp_deep_sleep_start(); -} - -void loop() -{ - // Never here -} - -/** - * @brief The function that returns content between HTML tags as a string. - * - * @param const char *tag - * The starting tag from which we want to get the value - * - * @param const char *tagEnd - * The ending tag from which we want to get the value - * - * @param int dt - * How many end tags (*tagEnd) want to skip. Default is 1 - * - * @return String value between passed tags - */ -String textInTag(const char *tag, const char *tagEnd, int dt) -{ - String r; // String for result - char *start = strstr(buf, tag) + strlen(tag); // Pointer to the beginning of the text after the tag - char *end = start - 1; // Set tag end one address before start pointer - while (dt--) - { - // Search where is the "tagEnd" starting from the last "end" which is the beginning for the first time - // (*end = start - 1) and repeat it "dt" times - end = strstr(end + 1, tagEnd); - } - - // Remove "<" and ">" from the result string - int d = 0; - for (char *t = start; t < end; ++t) - { - if (*t == '<') - ++d; - if (d == 0 && *t != '\n') - { - r += *t; - } - if (*t == '>') - --d; - } - - // Remove certain words to get only the data we want - // Hacky solution: - r.replace(""", "\""); - r.replace(" ", " "); - - r.replace("raised", ""); - r.replace("goal", ""); - r.replace("Funded!", ""); - r.replace("funded", ""); - r.replace(" on", ""); - r.replace("updates", ""); - - // Remove the following from the result string if it exists and put it in the separate string that displays on - // the screen - if (r.indexOf("hours left") != -1) - { - r.replace("hours left", ""); - text17_content = "hours left"; - } - if (r.indexOf("days left") != -1) - { - r.replace("days left", ""); - text17_content = "days left"; - } - - r.replace("backers", ""); - r.replace("Subscribe to Updates", ""); - - // Remove extraneous whitespace characters at the beginning or the end of the string - r.trim(); - - // If there is a dollar sign, the result is the string after that - if (r.indexOf("$") != -1) - r = r.substring(r.indexOf("$") + 1); - - return r; -} diff --git a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/generatedUI.h b/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/generatedUI.h deleted file mode 100644 index 5560ab331..000000000 --- a/examples/Inkplate10/Projects/Inkplate10_Crowdsupply_Campaing_Tracker/generatedUI.h +++ /dev/null @@ -1,352 +0,0 @@ -#include "Arduino.h" -#include "Fonts/Open_Sans_SemiBold_16.h" -#include "Fonts/Open_Sans_SemiBold_24.h" -#include "Fonts/Open_Sans_SemiBold_32.h" -#include "Fonts/Open_Sans_SemiBold_56.h" -#include "Inkplate.h" - -extern Inkplate display; - -int rect0_a_x = 10; -int rect0_a_y = 10; -int rect0_b_x = 790; -int rect0_b_y = 790; -int rect0_fill = -1; -int rect0_radius = -1; -int rect0_color = BLACK; - -String text1_content; -int text1_cursor_x = 40; -int text1_cursor_y = 40; -const GFXfont *text1_font = &Open_Sans_SemiBold_32; - -String text2_content = "Soldered"; -int text2_cursor_x = 40; -int text2_cursor_y = 80; -const GFXfont *text2_font = &Open_Sans_SemiBold_16; - -String text3_content; -int text3_cursor_x = 30; -int text3_cursor_y = 150; -const GFXfont *text3_font = &Open_Sans_SemiBold_16; - -String text4_content; -int text4_cursor_x = 70; -int text4_cursor_y = 305; -const GFXfont *text4_font = &Open_Sans_SemiBold_32; - -String text5_content = "$"; -int text5_cursor_x = 50; -int text5_cursor_y = 300; -const GFXfont *text5_font = &Open_Sans_SemiBold_24; - -String text6_content = "raised"; -int text6_cursor_x = 220; -int text6_cursor_y = 305; -const GFXfont *text6_font = &Open_Sans_SemiBold_24; - -String text7_content; -int text7_cursor_x = 70; -int text7_cursor_y = 405; -const GFXfont *text7_font = &Open_Sans_SemiBold_32; - -String text8_content = "$"; -int text8_cursor_x = 50; -int text8_cursor_y = 395; -const GFXfont *text8_font = &Open_Sans_SemiBold_24; - -String text9_content = "goal"; -int text9_cursor_x = 220; -int text9_cursor_y = 405; -const GFXfont *text9_font = &Open_Sans_SemiBold_24; - -int rect1_a_x = 40; -int rect1_a_y = 250; -int rect1_b_x = 350; -int rect1_b_y = 525; -int rect1_fill = -1; -int rect1_radius = -1; -int rect1_color = BLACK; - -int rect2_a_x = 450; -int rect2_a_y = 250; -int rect2_b_x = 760; -int rect2_b_y = 525; -int rect2_fill = -1; -int rect2_radius = -1; -int rect2_color = BLACK; - -int rect3_a_x = 50; -int rect3_a_y = 450; -int rect3_b_x = 340; -int rect3_b_y = 477; -int rect3_fill = -1; -int rect3_radius = -1; -int rect3_color = BLACK; - -int line0_start_x = 50; -int line0_start_y = 463; -int line0_end_x = 340; -int line0_end_y = 463; -int line0_color = BLACK; -int line0_thickness = 26; -int line0_gradient = 0; - -String text11_content = "100%"; -int text11_cursor_x = 175; -int text11_cursor_y = 445; -const GFXfont *text11_font = &Open_Sans_SemiBold_16; - -String text12_content = "Funded!"; -int text12_cursor_x = 150; -int text12_cursor_y = 500; -const GFXfont *text12_font = &Open_Sans_SemiBold_16; - -String text13_content; -int text13_cursor_x = 460; -int text13_cursor_y = 305; -const GFXfont *text13_font = &Open_Sans_SemiBold_32; - -String text14_content; -int text14_cursor_x = 460; -int text14_cursor_y = 390; -const GFXfont *text14_font = &Open_Sans_SemiBold_32; - -String text15_content; -int text15_cursor_x = 600; -int text15_cursor_y = 406; -const GFXfont *text15_font = &Open_Sans_SemiBold_32; - -String text16_content = "updates"; -int text16_cursor_x = 600; -int text16_cursor_y = 305; -const GFXfont *text16_font = &Open_Sans_SemiBold_24; - -String text17_content; -int text17_cursor_x = 460; -int text17_cursor_y = 470; -const GFXfont *text17_font = &Open_Sans_SemiBold_24; - -String text18_content = "backers"; -int text18_cursor_x = 600; -int text18_cursor_y = 470; -const GFXfont *text18_font = &Open_Sans_SemiBold_24; - -String text19_content = "Last update posted "; -int text19_cursor_x = 275; -int text19_cursor_y = 570; -const GFXfont *text19_font = &Open_Sans_SemiBold_16; - -void mainDraw() -{ - if (rect0_radius != -1 && rect0_fill != -1) - display.fillRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius != -1 && rect0_fill == -1) - display.drawRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius == -1 && rect0_fill != -1) - display.fillRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - else if (rect0_radius == -1 && rect0_fill == -1) - display.drawRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - - display.setFont(text1_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text1_cursor_x, text1_cursor_y); - display.print(text1_content); - //Serial.print("Text 1: "); - //Serial.println(text1_content); - - display.setFont(text2_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text2_cursor_x, text2_cursor_y); - display.print(text2_content); - //Serial.print("Text 2: "); - //Serial.println(text2_content); - - // Manual edit: - GFXcanvas1 canvas(750, 150); - canvas.setFont(text3_font); - canvas.setTextColor(BLACK, WHITE); - canvas.setTextSize(1); - canvas.setCursor(0, 20); - canvas.print(text3_content); - // canvas.drawRect(0, 0, 100, 100, BLACK); - //Serial.print("Text 3: "); - //Serial.println(text3_content); - - display.drawBitmap(text3_cursor_x, text3_cursor_y, canvas.getBuffer(), 750, 150, BLACK, WHITE); - - display.setFont(text4_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text4_cursor_x, text4_cursor_y); - display.print(text4_content); - //Serial.print("Text 4: ");// - //Serial.println(text4_content)//; - - display.setFont(text5_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text5_cursor_x, text5_cursor_y); - display.print(text5_content); - //Serial.print("Text 5: "); - //Serial.println(text5_content); - - display.setFont(text6_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text6_cursor_x, text6_cursor_y); - display.print(text6_content); - //Serial.print("Text 6: "); - //Serial.println(text6_content); - - display.setFont(text7_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text7_cursor_x, text7_cursor_y); - display.print(text7_content); - //Serial.print("Text 7: "); - //Serial.println(text7_content); - - display.setFont(text8_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text8_cursor_x, text8_cursor_y); - display.print(text8_content); - //Serial.print("Text 8: "); - //Serial.println(text8_content); - - display.setFont(text9_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text9_cursor_x, text9_cursor_y); - display.print(text9_content); - //Serial.print("Text 9: "); - //Serial.println(text9_content); - - if (rect1_radius != -1 && rect1_fill != -1) - display.fillRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius != -1 && rect1_fill == -1) - display.drawRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius == -1 && rect1_fill != -1) - display.fillRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - else if (rect1_radius == -1 && rect1_fill == -1) - display.drawRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - - if (rect2_radius != -1 && rect2_fill != -1) - display.fillRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius != -1 && rect2_fill == -1) - display.drawRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius == -1 && rect2_fill != -1) - display.fillRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - else if (rect2_radius == -1 && rect2_fill == -1) - display.drawRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - - if (rect3_radius != -1 && rect3_fill != -1) - display.fillRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius != -1 && rect3_fill == -1) - display.drawRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius == -1 && rect3_fill != -1) - display.fillRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - else if (rect3_radius == -1 && rect3_fill == -1) - display.drawRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - - if (line0_gradient <= line0_color && line0_thickness == 1) - { - display.drawLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color); - } - else if (line0_gradient <= line0_color && line0_thickness != 1) - { - display.drawThickLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_thickness); - } - else if (line0_gradient > line0_color && line0_thickness == 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - 1); - } - else if (line0_gradient > line0_color && line0_thickness != 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - line0_thickness); - } - display.setFont(text11_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text11_cursor_x, text11_cursor_y); - display.print(text11_content); - //Serial.print("Text 11: "); - //Serial.println(text11_content); - - display.setFont(text12_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text12_cursor_x, text12_cursor_y); - display.print(text12_content); - //Serial.print("Text 12: "); - //Serial.println(text12_content); - - display.setFont(text13_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text13_cursor_x, text13_cursor_y); - display.print(text13_content); - //Serial.print("Text 13: "); - //Serial.println(text13_content); - - display.setFont(text14_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text14_cursor_x, text14_cursor_y); - display.print(text14_content); - //Serial.print("Text 14: "); - //Serial.println(text14_content); - - display.setFont(text15_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text15_cursor_x, text15_cursor_y); - display.print(text15_content); - //Serial.print("Text 15: "); - //Serial.println(text15_content); - - display.setFont(text16_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text16_cursor_x, text16_cursor_y); - display.print(text16_content); - //Serial.print("Text 16: "); - //Serial.println(text16_content); - - display.setFont(text17_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text17_cursor_x, text17_cursor_y); - display.print(text17_content); - //Serial.print("Text 17: "); - //Serial.println(text17_content); - - display.setFont(text18_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text18_cursor_x, text18_cursor_y); - display.print(text18_content); - //Serial.print("Text 18: "); - //Serial.println(text18_content); - - display.setFont(text19_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text19_cursor_x, text19_cursor_y); - display.print(text19_content); - //Serial.print("Text 19: "); - //Serial.println(text19_content); -} diff --git a/examples/Inkplate10/Projects/Inkplate10_Google_Calendar/Inkplate10_Google_Calendar.ino b/examples/Inkplate10/Projects/Inkplate10_Google_Calendar/Inkplate10_Google_Calendar.ino index 364b13c3d..ade2ebb01 100644 --- a/examples/Inkplate10/Projects/Inkplate10_Google_Calendar/Inkplate10_Google_Calendar.ino +++ b/examples/Inkplate10/Projects/Inkplate10_Google_Calendar/Inkplate10_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate10_Google_Calendar for Soldered Inkplate 10 +Inkplate10_Google_Calendar for Soldered Inkplate 10 -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ #include "src/includes.h" // Include necessary libraries and dependencies for Inkplate and networking diff --git a/examples/Inkplate10/Projects/Inkplate10_Image_Uploader/Inkplate10_Image_Uploader.ino b/examples/Inkplate10/Projects/Inkplate10_Image_Uploader/Inkplate10_Image_Uploader.ino index 153cb456c..bca13b35b 100644 --- a/examples/Inkplate10/Projects/Inkplate10_Image_Uploader/Inkplate10_Image_Uploader.ino +++ b/examples/Inkplate10/Projects/Inkplate10_Image_Uploader/Inkplate10_Image_Uploader.ino @@ -1,9 +1,9 @@ /* Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 10 + Compatible with Soldered Inkplate 10 -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 10 diff --git a/examples/Inkplate10/Projects/Inkplate10_Lan_Gallery/Inkplate10_Lan_Gallery.ino b/examples/Inkplate10/Projects/Inkplate10_Lan_Gallery/Inkplate10_Lan_Gallery.ino new file mode 100644 index 000000000..90b21c887 --- /dev/null +++ b/examples/Inkplate10/Projects/Inkplate10_Lan_Gallery/Inkplate10_Lan_Gallery.ino @@ -0,0 +1,425 @@ +/* + Inkplate Lan Gallery Example + Compatible with Soldered Inkplate 10 + + Getting started: + For this project you will need: Inkplate 10, microSD card (formatted to FAT32!) + and WiFi connection. + + Step 1: Place the formatted microSD card in onboard slot on Inkplate 10 + + Step 2: Install `AsyncTCP` and `ESPAsyncWebServer` libraries, they are available directly from + Arduino Library Manager. + + Step 3: Modify the ssid, password and IMAGE_CHANGE_INTERVAL variables. SSID and password + need to be the same as the network you are trying to connect, and INTERVAL_CHANGE_TIMER + changes the duration between image changes (in miliseconds, default is 30000ms or 30s) + + Step 4: Upload the code as usual + + Step 5: Using another device connected to the same network open a browser and + go to langallery.local + + Step 6: Press the 'Choose File' button and select a picture that you want to upload, and + after that press the 'Upload' button + + Overview: + This example demonstartes how to run a webapp, handle multiple users at once, upload files + to onboard SD card and display uploaded images in random order on the e-ink display. Images + will be automatically resized. + +*/ + +// Ensure corect board is selected +#if !defined(ARDUINO_INKPLATE10) && !defined(ARDUINO_INKPLATE10V2) +#error "Select 'Soldered Inkplate10' in the boards menu." +#endif + +#include "Inkplate.h" //Inkplate library + +// Initialize Inkplate (3-bit grayscale mode) +Inkplate display(INKPLATE_3BIT); + + +// WiFi network credentials +const char* ssid = "YOUR_SSID"; +const char* password = "YOUR_PASSWORD"; + +// Image rotation/change inteerval (milliseconds) +#define IMAGE_CHANGE_INTERVAL 30000UL + +// Linked list structure for storing image filepaths +struct Node { + char* path; + int id; + Node* next; +}; + +Node* head = nullptr; // Pointer to the first node in circular list +int nodeCount = 0; // Total number of images found + +SemaphoreHandle_t sdMutex; // Mutex for SD card access synchronization +SdFile* currentUploadFile = nullptr; // File object for current upload +volatile bool uploadComplete = false; //Flag to indicate upload completion + +// Forward declaration +void setupWebServer(); + +// Add a new image node to the linked list +void addNode(const char* p, int id) { + Node* n = (Node*)malloc(sizeof(Node)); + if (!n) return; + n->path = strdup(p); + n->id = id; + if (!head) { + head = n; + n->next = head; + } else { + Node* t = head; + while (t->next != head) t = t->next; + t->next = n; + n->next = head; + } + nodeCount++; +} + +// Build a list of all image files found on the SD card +bool buildImageList() { + Serial.println("Building image list..."); + if (!display.sdCardInit()) { + display.clearDisplay(); + display.print("SD Card init failed!"); + display.display(); + return false; + } + SdFile root; + if (!root.open("/")) { + Serial.println("Failed to open root directory!"); + return false; + } + + // Free any existing list before rebuilding + if (head) { + Node* current = head; + Node* first = head; + do { + Node* next = current->next; + free(current->path); + free(current); + current = next; + } while (current != first); + head = nullptr; + } + nodeCount = 0; + +// Iterate through SD card root directory and find image files + SdFile e; + while (e.openNext(&root, O_RDONLY)) { + char name[64]; + e.getName(name, sizeof(name)); + String nm(name); + nm.toLowerCase(); + if (nm.endsWith(".bmp") || nm.endsWith(".jpg") || nm.endsWith(".jpeg")) { + Serial.printf("Found image: %s\n", name); + addNode(name, nodeCount); + } + e.close(); + } + root.close(); + Serial.printf("Total images found: %d\n", nodeCount); + return nodeCount > 0; +} + +// Pick a random image node from the list +Node* pickRandomNode() { + if (!head) return nullptr; + int id = random(nodeCount); + Node* t = head; + while (t->id != id) t = t->next; + return t; +} + +//read BMP image dimensions directly from SD card +static bool readBmpSize_SdFat(const char* path, int &w, int &h) { + w = h = 0; + SdFile f; + if (!f.open(path, O_RDONLY)) return false; + + uint8_t hdr[26]; + int n = f.read(hdr, sizeof(hdr)); + f.close(); + if (n < 26) return false; + if (hdr[0] != 'B' || hdr[1] != 'M') return false; + + int32_t bw = (int32_t)hdr[18] | ((int32_t)hdr[19] << 8) | ((int32_t)hdr[20] << 16) | ((int32_t)hdr[21] << 24); + int32_t bh = (int32_t)hdr[22] | ((int32_t)hdr[23] << 8) | ((int32_t)hdr[24] << 16) | ((int32_t)hdr[25] << 24); + if (bw <= 0 || bh == 0) return false; + w = (int)bw; + h = (int)((bh < 0) ? -bh : bh); + return true; +} + +// Read JPEG image dimensions directly from SD card +static bool readJpegSize_SdFat(const char* path, int &w, int &h) { + w = h = 0; + SdFile f; + if (!f.open(path, O_RDONLY)) return false; + + uint8_t b[2]; + if (f.read(b, 2) != 2 || b[0] != 0xFF || b[1] != 0xD8) { f.close(); return false; } + + const size_t SKIP_BUF = 64; + uint8_t skipBuf[SKIP_BUF]; + + auto readU8 = [&](uint8_t &out)->bool { return f.read(&out, 1) == 1; }; + auto readU16 = [&](uint16_t &out)->bool { + uint8_t hi, lo; + if (f.read(&hi,1) != 1 || f.read(&lo,1) != 1) return false; + out = ((uint16_t)hi << 8) | lo; + return true; + }; + auto skipN = [&](uint32_t n)->bool { + while (n > 0) { + size_t chunk = (n > SKIP_BUF) ? SKIP_BUF : n; + int r = f.read(skipBuf, chunk); + if (r != (int)chunk) return false; + n -= chunk; + } + return true; + }; + + // Parse JPEG markers until SOF segment found + while (true) { + uint8_t markerPrefix; + do { + if (!readU8(markerPrefix)) { f.close(); return false; } + } while (markerPrefix != 0xFF); + + uint8_t marker; + do { + if (!readU8(marker)) { f.close(); return false; } + } while (marker == 0xFF); + + if (marker == 0xD9) break; + if (marker == 0xD8 || marker == 0x01) continue; + + uint16_t segLen; + if (!readU16(segLen)) { f.close(); return false; } + if (segLen < 2) { f.close(); return false; } + + bool isSOF = + (marker >= 0xC0 && marker <= 0xC3) || + (marker >= 0xC5 && marker <= 0xC7) || + (marker >= 0xC9 && marker <= 0xCB) || + (marker >= 0xCD && marker <= 0xCF); + + if (isSOF) { + uint8_t P, Hh, Hl, Wh, Wl; + if (!readU8(P) || !readU8(Hh) || !readU8(Hl) || !readU8(Wh) || !readU8(Wl)) { f.close(); return false; } + h = ((int)Hh << 8) | Hl; + w = ((int)Wh << 8) | Wl; + f.close(); + return (w > 0 && h > 0); + } else { + uint32_t toSkip = (uint32_t)segLen - 2; + if (!skipN(toSkip)) { f.close(); return false; } + } + } + + f.close(); + return false; +} + +// Detect image type and get its width and height +static bool getImageWH_SdFat(const char* path, int &w, int &h) { + const char *ext = strrchr(path, '.'); + if (ext) { + char e1 = tolower(*(ext+1)); + char e2 = tolower(*(ext+2)); + char e3 = tolower(*(ext+3)); + if ((e1=='b' && e2=='m' && e3=='p')) { + if (readBmpSize_SdFat(path, w, h)) return true; + } else if ((e1=='j' && e2=='p' && e3=='g') || + (e1=='j' && e2=='p' && e3=='e')) { + if (readJpegSize_SdFat(path, w, h)) return true; + } + } + // Fallback default size if detection fails + w = 800; + h = 600; + return false; +} + +// Display selected image file on the e-ink screen +void showImage(const char* path) { + Serial.printf("Displaying: %s\n", path); + display.clearDisplay(); + if(!display.sdCardInit()){ + display.clearDisplay(); + display.print("SD Card Init() failed!"); + display.display(); + } + + int imgW = 0, imgH = 0; + bool okSize = getImageWH_SdFat(path, imgW, imgH); + Serial.printf("Image size detected: %dx%d (ok=%s)\n", imgW, imgH, okSize ? "yes" : "no"); + + const int dispW = display.width(); + const int dispH = display.height(); + + int drawW = imgW; + int drawH = imgH; + + int x = (dispW - drawW) / 2; + int y = (dispH - drawH) / 2; + + Serial.printf("Draw at x=%d, y=%d (disp=%dx%d)\n", x, y, dispW, dispH); + + // Draw image fron SD card + if (!display.drawImage(path, x, y, 3)) { + display.setTextSize(2); + display.setCursor(100, 300); + display.println("Image load failed!"); + } + + // Overlay footer text (white on black background) + const char* overlayText = "Inkplate LAN Gallery on langallery.local"; + display.setTextSize(1); + + int16_t textW = strlen(overlayText) * 6; + int16_t textH = 10; + int16_t padding = 6; + + int16_t boxX = display.width() - textW - padding * 2; + int16_t boxY = display.height() - textH - padding * 2; + int16_t boxW = textW + padding * 2; + int16_t boxH = textH + padding * 2; + + // Black rectangle behind text + display.fillRect(boxX, boxY, boxW, boxH, 0); + + // White text on top + display.setTextColor(7); + display.setCursor(boxX + padding, boxY + textH - 2); + display.print(overlayText); + + display.display(); +} + +// Start receiving file data for upload +void startFileUpload(const char* filename) { + if (xSemaphoreTake(sdMutex, portMAX_DELAY)) { + display.sdCardInit(); + if (currentUploadFile) { + currentUploadFile->close(); + delete currentUploadFile; + } + currentUploadFile = new SdFile(); + bool opened = currentUploadFile->open(filename, O_WRITE | O_CREAT | O_TRUNC); + Serial.printf("Opening %s: %s\n", filename, opened ? "SUCCESS" : "FAILED"); + xSemaphoreGive(sdMutex); + } +} + +// Write incoming file data chunks to SD card +void writeFileData(uint8_t* data, size_t len) { + if (xSemaphoreTake(sdMutex, portMAX_DELAY)) { + if (currentUploadFile && currentUploadFile->isOpen()) { + size_t written = currentUploadFile->write(data, len); + Serial.printf("Wrote %d/%d bytes\n", written, len); + } else { + Serial.println("ERROR: File not open!"); + } + xSemaphoreGive(sdMutex); + } +} + +// Finish file upload and close the file +void finishFileUpload() { + if (xSemaphoreTake(sdMutex, portMAX_DELAY)) { + if (currentUploadFile) { + if (currentUploadFile->isOpen()) { + currentUploadFile->sync(); + currentUploadFile->close(); + Serial.println("File closed and synced"); + } + delete currentUploadFile; + currentUploadFile = nullptr; + } + uploadComplete = true; + xSemaphoreGive(sdMutex); + } +} + +void setup() { + Serial.begin(115200); + display.begin(); + display.setTextColor(BLACK); + randomSeed(analogRead(0)); + sdMutex = xSemaphoreCreateMutex(); + + display.clearDisplay(); + display.setTextSize(3); + display.setCursor(0, 0); + display.println("Connecting Wi-Fi..."); + display.display(); + + // Connect to existing WiFi network + WiFi.begin(ssid, password); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.printf("\nConnected! IP: %s\n", WiFi.localIP().toString().c_str()); + + // Start local web server fro uploads + setupWebServer(); + + // Build image list and show a random one at startup + if (buildImageList()) { + Node* n = pickRandomNode(); + if (n) showImage(n->path); + } else { + display.clearDisplay(); + display.setTextSize(3); + display.setCursor(100, 300); + display.println("No images found on SD!"); + display.display(); + } +} + +unsigned long lastImageChange = 0; // track last displayed image time + +void loop() { + if (uploadComplete) { + uploadComplete = false; + Serial.println("Upload complete, rebuilding list..."); + delay(100); + if (xSemaphoreTake(sdMutex, portMAX_DELAY)) { + if (buildImageList()) { + Serial.printf("Found %d images\n", nodeCount); + Node* n = pickRandomNode(); + if (n) { + Serial.printf("Picked image: %s\n", n->path); + showImage(n->path); + } + } + xSemaphoreGive(sdMutex); + } + lastImageChange = millis(); + } + + // Automatically change image after the set interval + if (millis() - lastImageChange >= IMAGE_CHANGE_INTERVAL) { + if (xSemaphoreTake(sdMutex, portMAX_DELAY)) { + if (buildImageList()) { + Node* n = pickRandomNode(); + if (n) showImage(n->path); + } + xSemaphoreGive(sdMutex); + } + lastImageChange = millis(); + } + + delay(10); // small delay for task scheduling +} diff --git a/examples/Inkplate10/Projects/Inkplate10_Lan_Gallery/webserver.cpp b/examples/Inkplate10/Projects/Inkplate10_Lan_Gallery/webserver.cpp new file mode 100644 index 000000000..e35e929ed --- /dev/null +++ b/examples/Inkplate10/Projects/Inkplate10_Lan_Gallery/webserver.cpp @@ -0,0 +1,76 @@ +#include +#include +#include +#include + +AsyncWebServer server(80); + +// Functions from main .ino file +void startFileUpload(const char* filename); +void writeFileData(uint8_t* data, size_t len); +void finishFileUpload(); + +const char INDEX_HTML[] PROGMEM = R"rawliteral( + +Inkplate LAN Gallery + +
+

Inkplate LAN Gallery

+

Upload an image to the shared gallery.

+
+
+ +
+

+
+
Connected to langallery.local
+ +)rawliteral"; + +void setupWebServer(){ + if(MDNS.begin("langallery"))Serial.println("mDNS: http://langallery.local/"); + + server.on("/",HTTP_GET,[](AsyncWebServerRequest*r){r->send_P(200,"text/html",INDEX_HTML);}); + + server.on( + "/upload",HTTP_POST, + [](AsyncWebServerRequest *r){r->send(200,"text/plain","OK");}, + [](AsyncWebServerRequest *r,String fn,size_t index,uint8_t*data,size_t len,bool final){ + if(!index){ + String path="/"+fn; + Serial.printf("Starting upload: %s\n",fn.c_str()); + startFileUpload(path.c_str()); + } + writeFileData(data, len); + if(final){ + finishFileUpload(); + } + } + ); + + server.begin(); +} \ No newline at end of file diff --git a/examples/Inkplate10/Projects/Inkplate10_OpenAI_Image_Slideshow/Inkplate10_OpenAI_Image_Slideshow.ino b/examples/Inkplate10/Projects/Inkplate10_OpenAI_Image_Slideshow/Inkplate10_OpenAI_Image_Slideshow.ino index 3d361239e..81d078346 100644 --- a/examples/Inkplate10/Projects/Inkplate10_OpenAI_Image_Slideshow/Inkplate10_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate10/Projects/Inkplate10_OpenAI_Image_Slideshow/Inkplate10_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate10 OpenAI Image slideshow - Compatible with Soldered Inkplate 10 + Compatible with Soldered Inkplate 10 -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 10. Select "Soldered Inkplate10" from Tools -> Board menu. diff --git a/examples/Inkplate10/Projects/Inkplate10_OpenAI_Text_Prompt/Inkplate10_OpenAI_Text_Prompt.ino b/examples/Inkplate10/Projects/Inkplate10_OpenAI_Text_Prompt/Inkplate10_OpenAI_Text_Prompt.ino index f6d4fdb34..031c6540b 100644 --- a/examples/Inkplate10/Projects/Inkplate10_OpenAI_Text_Prompt/Inkplate10_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate10/Projects/Inkplate10_OpenAI_Text_Prompt/Inkplate10_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate10 OpenAI text prompt generator - Compatible with Soldered Inkplate 10 + Compatible with Soldered Inkplate 10 -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 10. Select "e-radionica Inkplate10" or "Soldered Inkplate10" from Tools -> Board menu. diff --git a/examples/Inkplate10/Projects/Inkplate10_OpenMeteo_Weather_Station/Inkplate10_OpenMeteo_Weather_Station.ino b/examples/Inkplate10/Projects/Inkplate10_OpenMeteo_Weather_Station/Inkplate10_OpenMeteo_Weather_Station.ino index b8ec78a70..5524a287d 100644 --- a/examples/Inkplate10/Projects/Inkplate10_OpenMeteo_Weather_Station/Inkplate10_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate10/Projects/Inkplate10_OpenMeteo_Weather_Station/Inkplate10_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate10 OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 10 + Compatible with Soldered Inkplate 10 -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate2/Advanced/DeepSleep/Inkplate2_Simple_Deep_Sleep/Inkplate2_Simple_Deep_Sleep.ino b/examples/Inkplate2/Advanced/DeepSleep/Inkplate2_Simple_Deep_Sleep/Inkplate2_Simple_Deep_Sleep.ino index 72bed30aa..cdf636826 100644 --- a/examples/Inkplate2/Advanced/DeepSleep/Inkplate2_Simple_Deep_Sleep/Inkplate2_Simple_Deep_Sleep.ino +++ b/examples/Inkplate2/Advanced/DeepSleep/Inkplate2_Simple_Deep_Sleep/Inkplate2_Simple_Deep_Sleep.ino @@ -17,7 +17,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them @@ -27,7 +27,7 @@ #include "Inkplate.h" //Include Inkplate library to the sketch #include "driver/rtc_io.h" //ESP32 library used for deep sleep and RTC wake up pins -#include "picture1.h" //Include .h files of 3 pictures. All three pictures were converted using Inkplate Image Converter (https://solderedelectronics.github.io/Inkplate-image-converter/) +#include "picture1.h" //Include .h files of 3 pictures. All three pictures were converted using Inkplate Image Converter (http://soldered.com/image-converter) #include "picture2.h" #include "picture3.h" diff --git a/examples/Inkplate2/Advanced/Other/Inkplate2_Picture_From_RAM/Inkplate2_Picture_From_RAM.ino b/examples/Inkplate2/Advanced/Other/Inkplate2_Picture_From_RAM/Inkplate2_Picture_From_RAM.ino index a2d787a35..a1ae6886c 100644 --- a/examples/Inkplate2/Advanced/Other/Inkplate2_Picture_From_RAM/Inkplate2_Picture_From_RAM.ino +++ b/examples/Inkplate2/Advanced/Other/Inkplate2_Picture_From_RAM/Inkplate2_Picture_From_RAM.ino @@ -11,7 +11,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter Want to learn more about Inkplate? Visit www.inkplate.io Looking to get support? Write on our forums: https://forum.soldered.com/ @@ -31,7 +31,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ diff --git a/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/Inkplate2_Peripheral_Mode.ino b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/Inkplate2_Peripheral_Mode.ino index a5317eb93..ecae7892a 100644 --- a/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/Inkplate2_Peripheral_Mode.ino +++ b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/Inkplate2_Peripheral_Mode.ino @@ -1,250 +1,69 @@ /* - Inkplate2_Peripheral_Mode example for Soldered Inkplate 2 - Select "Soldered Inkplate2" from Tools -> Board menu. - Don't have "Soldered Inkplate2" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - Using this sketch, you don't have to program and control e-paper using Arduino code. - Instead, you can send UART command. This gives you flexibility that you can use this Inkplate 2 on any platform! - - Because it uses UART, it's little bit slower and it's not recommended to send bunch of - drawPixel command to draw some image. Instead, load bitmaps and pictures on SD card and load image from SD. - If we missed some function, you can modify this and make your own. - Also, every Inkplate comes with this peripheral mode right from the factory. - - The size of Inkplate 2 is limited, just as its functionality. It doesn't have display temperature nor battery - voltage monitoring.I/O expander is also missing on this board, just as RTC and SD card support. So using this - example is similar to other Inkplates, just there are less functions for this Inkplate. In documentation found - here https://inkplate.readthedocs.io/en/latest/peripheral-mode.html is explained what functions Inkplate 2 supports. + Inkplate2_Peripheral_Mode sketch for Soldered Inkplate 2 (IP2). + For this example you will need only a USB-C cable and Inkplate 2. + Select "Soldered Inkplate 2" from Tools -> Board menu. + Don’t have "Soldered Inkplate 2" option? Follow our tutorial and add it: + https://soldered.com/learn/add-inkplate-2-board-definition-to-arduino-ide/ + + Using this sketch, you don’t have to program and control the e-paper display using Arduino code. + Instead, you can send UART commands. This gives you the flexibility to use Inkplate 2 on any platform! + + Because it uses UART, it’s a bit slower and not recommended to send a large number of + drawPixel commands to render images. Instead, store bitmaps or pictures on an SD card + and load them directly from there. + If any functionality is missing, you can modify this code and make your own version. + Every Inkplate 2 comes with this Peripheral Mode preloaded from the factory. Learn more about Peripheral Mode: https://inkplate.readthedocs.io/en/latest/peripheral-mode.html - UART settings are: 115200 baud, standard parity, ending with "\n\r" (both) (Choose "BOTH NL and CR" in Serial monitor settings) - You can send commands via USB port or by directly connecting to ESP32 TX and RX pins. - Don't forget you need to send #L(1)* after each command to show it on the display - (equal to display.display()). + UART settings are: 115200 baud, standard parity, ending with "\n\r" (Both NL & CR) + You can send commands via the USB port or by directly connecting to the ESP32 TX and RX pins. - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 14 April 2022 by soldered.com + Want to learn more about Inkplate? Visit: + https://soldered.com/documentation/inkplate/ + + 23 October 2025 by Soldered */ -#include // Include Inkplate library -Inkplate display; // Init Inkplate object +// Include Inkplate library +#include "Inkplate.h" + +// Include Peripheral Mode library +#include "InkplatePeripheralMode.h" -#define BUFFER_SIZE 1000 -char commandBuffer[BUFFER_SIZE + 1]; -char strTemp[2001]; +// Include the header file with sketch settings (buffer size, serial timeout, argument termination char, etc.) +#include "settings.h" + +// Pointer to the singleton Peripheral Mode instance +PeripheralMode *peripheral; + +// Create Inkplate 2 display object +Inkplate display; void setup() { - display.begin(); // Init Inkplate library - Serial.begin(115200); // Init serial communication - memset(commandBuffer, 0, BUFFER_SIZE); // Clear the command buffer -} + // Initialize Inkplate library + display.begin(); -void loop() -{ - if (Serial.available()) // Check for the incoming data - { - while (Serial.available()) - { - for (int i = 0; i < (BUFFER_SIZE - 1); i++) - { - commandBuffer[i] = commandBuffer[i + 1]; - } - commandBuffer[BUFFER_SIZE - 1] = Serial.read(); - } - } - char *s = NULL; - char *e = NULL; - for (int i = 0; i < BUFFER_SIZE; i++) - { - if (commandBuffer[i] == '#' && s == NULL) - s = &commandBuffer[i]; - if (commandBuffer[i] == '*' && e == NULL) - e = &commandBuffer[i]; - } + // Create instance of Peripheral Mode object + peripheral = PeripheralMode::getInstance(); - if (s != NULL && e != NULL) + // Initialize Peripheral Mode (UART, display, buffer, etc.) + if (!peripheral->begin(&Serial, &display, 115200ULL, SERIAL_UART_RX_PIN, SERIAL_UART_TX_PIN, SERIAL_BUFFER_SIZE)) { - if ((e - s) > 0) - { - int x, x1, x2, y, y1, y2, x3, y3, l, c, w, h, r, n, rx, ry, xc, yc; - char b; - char temp[150]; - switch (*(s + 1)) - { - case '?': - Serial.print("OK"); - break; - - case '0': - // Draw pixel - sscanf(s + 3, "%d,%d,%d", &x, &y, &c); - display.drawPixel(x, y, c); - break; - - case '1': - // Draw line - sscanf(s + 3, "%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c); - display.drawLine(x1, y1, x2, y2, c); - break; - - case '2': - // Draw fast vertical line - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - display.drawFastVLine(x, y, l, c); - break; - - case '3': - // Draw fast horizontal line - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - display.drawFastHLine(x, y, l, c); - break; - - case '4': - // Draw rect. - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - display.drawRect(x, y, w, h, c); - break; - - case '5': - // Draw circle - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - display.drawCircle(x, y, r, c); - break; - - case '6': - // Draw triangle - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - display.drawTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case '7': - // Draw round rect. - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - display.drawRoundRect(x, y, w, h, r, c); - break; - - case '8': - // Draw filled rect. - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - display.fillRect(x, y, w, h, c); - break; - - case '9': - // Draw filled circle - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - display.fillCircle(x, y, r, c); - break; - - case 'A': - // Draw filled triangle - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - display.fillTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case 'B': - // Draw filled round triangle - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - display.fillRoundRect(x, y, w, h, r, c); - break; - - case 'C': - // Draw string - sscanf(s + 3, "\"%2000[^\"]\"", strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - display.print(strTemp); - break; - - case 'D': - // Set text size - sscanf(s + 3, "%d", &c); - display.setTextSize(c); - break; - - case 'E': - // Set print cursor position - sscanf(s + 3, "%d,%d", &x, &y); - display.setCursor(x, y); - break; - - case 'F': - // Enable or disable text wrapping. - sscanf(s + 3, "%c", &b); - if (b == 'T') - display.setTextWrap(true); - if (b == 'F') - display.setTextWrap(false); - break; - - case 'G': - // Set screen rotation - sscanf(s + 3, "%d", &c); - c &= 3; - display.setRotation(c); - break; - - - case 'K': - // Clear the display (frame buffer only) - sscanf(s + 3, "%c", &b); - if (b == '1') - { - display.clearDisplay(); - } - break; - - case 'L': - // Display image from the frame buffer - sscanf(s + 3, "%c", &b); - if (b == '1') - { - display.display(); - } - break; - - case 'T': - // Draw thick line. - int t; - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c, &t); - display.drawThickLine(x1, y1, x2, y2, c, t); - break; - case 'U': - // Draw elipse. - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - display.drawElipse(rx, ry, xc, yc, c); - break; - case 'V': - // Draw filled elipse - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - display.fillElipse(rx, ry, xc, yc, c); - break; - } - *s = 0; - *e = 0; - } + // Send an error message to serial + Serial.println("Peripheral Mode init failed!\nProgram halted!"); + + // Stop program execution + while (1); } + + Serial.println("READY"); } -int hexToChar(char c) +void loop() { - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - return -1; + // Check if there is incoming data on serial and process commands + peripheral->getDataFromSerial(SERIAL_TIMEOUT_MS); } diff --git a/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/InkplatePeripheralMode.cpp b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/InkplatePeripheralMode.cpp new file mode 100644 index 000000000..983cfe566 --- /dev/null +++ b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/InkplatePeripheralMode.cpp @@ -0,0 +1,1239 @@ +// Add header of the library to the source files. +#include "InkplatePeripheralMode.h" + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +// Include the list with all available commands. +#include "commandList.h" + +// Define the static member. +PeripheralMode* PeripheralMode::_instancePtr = nullptr; + +bool PeripheralMode::begin(HardwareSerial *_serialPtr, Inkplate *_inkplatePtr, uint32_t _baud, uint8_t _rxPin, uint8_t _txPin, uint32_t _size) +{ + // Store every parameter locally and check them. + if ((_serialPtr == nullptr) || (_inkplatePtr == nullptr) || (_size == 0)) return false; + _serial = _serialPtr; + _display = _inkplatePtr; + _bufferSize = _size; + + // Init the serial communication @ desired communication speed. Also set the pins. + _serial->begin(_baud, SERIAL_8N1, _rxPin, _txPin); + + // Allocate memory for the serial buffer in the PSRAM. + _serialBuffer = (char*)ps_malloc(_bufferSize * sizeof(char)); + + // Check if allocation is successful. + if (_serialBuffer == NULL) + { + return false; + } + + // If everything is ok, return true. + return true; +} + +bool PeripheralMode::getDataFromSerial(unsigned long _timeout) +{ + // Variable used for timeouting incoming serial data. + unsigned long _timestamp; + + // Variables for parsing. + char *_commandEndPosition = NULL; + + if (_serial->available()) + { + // You got something on the serial? Cool! + // First capture the current time (needed for timeouting!). + _timestamp = millis(); + + // Capture the timestamp for automatic buffer cleaning. + _bufferAutoCleanTimestamp = millis(); + + // Try to capture incoming serial data until the timeout or until the buffer is full! + while (((unsigned long)(millis() - _timestamp) < _timeout) && (_serialBufferIndex < (_bufferSize - 2))) + { + if (_serial->available()) + { + _serialBuffer[_serialBufferIndex++] = _serial->read(); + _timestamp = millis(); + } + } + + // Add a nul-terminating char. + _serialBuffer[_serialBufferIndex] = '\0'; + + // Go though all commands that are received. + _commandEndPosition = _serialBuffer; + while (_commandEndPosition != NULL) + { + // Variables for parsing. + int _command = 0; + int _repeatable = 0; + int _payloadSize = 0; + char *_payload = NULL; + + // Check received for validity. If everything went ok, parse the command. + if (checkPacket(_commandEndPosition, _bufferSize - (uint32_t)(_commandEndPosition - _serialBuffer), &_command, &_repeatable, &_payloadSize, &_payload, &_commandEndPosition)) + { + // If is a valid command, try to parse it. + parseCommand(_command, _repeatable, _payloadSize, _payload); + + // Reset the counter. + _serialBufferIndex = 0; + + // Go to the next command by advancing to the next index. + _commandEndPosition++; + } + } + } + + // Periodically clear the buffer from the remained invalid data. + if (((unsigned long)(millis() - _bufferAutoCleanTimestamp) >= SERIAL_BUFFER_CLEAN_TIME_MS) && _serialBufferIndex) + { + // Clear the buffer. + memset(_serialBuffer, 0, _bufferSize); + + // Reset the index variable. + _serialBufferIndex = 0; + + Serial.println("Cleaned"); + } + + // If data is not valid, return false; + return false; +} + +bool PeripheralMode::checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandLastPosition) +{ + // Prepare the command end position pointer - set it to null. Later in the code it will be set to some address that corresponds end position of the command. + // If not found, it will stay on null. + *_commandLastPosition = NULL; + + // -------------------PARSING START AND STOP FLAGS------------------- + // First check if there is start and stop flags. + char *_startFlag = strstr(_buffer, "TS"); + + // Check start flag. If the start flag is wrong, return error. + if (_startFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _startFlag; + + Serial.printf("Passed 1st check!\n"); + Serial.flush(); + + // -------------------PARSING COMMAND------------------- + // Check the command and payload size. + // First find the first semicolon. + char *_cmd = strchr(_startFlag + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_cmd == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _cmd; + + Serial.printf("Passed 2nd check!\n"); + Serial.flush(); + + // Check if there is a command. Move pointer by one place to the right (skip the semicolon). + int _cmdDataInt = strtol(_cmd + 1, NULL, 16); + + // If command if equal to zero, something is wrong. + if (_cmdDataInt == 0) return false; + + Serial.printf("Passed 3rd check!\n"); + Serial.flush(); + + // -------------------PARSING REPEATABLE FLAG------------------- + // Get the repeatable flag. + char *_repeatable = strchr(_cmd + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_repeatable == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _repeatable; + + Serial.printf("Passed 4th check!\n"); + Serial.flush(); + + // Get the repeatable flag data from HEX. Move one place to the right (skip the semicolon). + int _repeatableFlagInt = strtol(_repeatable + 1, NULL, 16); + + // Repeatable flag can only be one or zero. Discard otherwise. + if (_repeatableFlagInt > 1 || _repeatableFlagInt < 0) return false; + + Serial.printf("Passed 5th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD SIZE------------------- + // Go to the next semicolon (payload size). + char *_payload = strchr(_repeatable + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_payload == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payload; + + Serial.printf("Passed 6th check!\n"); + Serial.flush(); + + // Get the number! + int _payloadSizeInt = strtol(_payload + 1, NULL, 16); + + // Go to the start of the payload by finding next semicolon. + char *_payloadDataInt = strchr(_payload + 1, TEMR_CHAR); + + if (_payloadDataInt == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payloadDataInt; + + // -------------------CHECKING THE STOP FLAG------------------- + // Go to the next semicolon, which is for the stop flag. + // For the stop flag is a little bit more complicated. Since this can be found in the payload, we need to find the last one 0xaa in the buffer. + // For that we are gonna try to go though the whole command and check if the stop flag is at the end. If not, command is considered invalid. + char *_stopFlag = strchr(_payloadDataInt + 1 + _payloadSizeInt, TEMR_CHAR); + + if (_stopFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _stopFlag; + + // Check if the stop flag is really there. If not, return with fail. + if (strstr(_stopFlag, "TE") != (_stopFlag + 1)) return false; + + // Update the stop flag position by one (move after the semicolon). + _stopFlag++; + + Serial.printf("Passed 7th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD DATA------------------- + // Increment the pointer. Now we're at the first byte of the payload. + _payloadDataInt++; + + // Check for the size. If the size is ok, fill the command, payload size and payload data start pointers. + if ((_stopFlag - _payloadDataInt - 1) == _payloadSizeInt) + { + *_command = _cmdDataInt; + *_repeatableFlag = _repeatableFlagInt; + *_payloadSize = _payloadSizeInt; + *_payloadDataStart = _payloadDataInt; + return true; + } + + Serial.printf("ERROR: stopFlag: %d payloadDataInt: %d payloadSizeInt %d\n", _stopFlag, _payloadDataInt, _payloadSizeInt); + Serial.flush(); + + // Otherwise, return null, indicating an error. + return false; +} + +void PeripheralMode::sendResponse(int _command, int _payloadSize, char *_payload) +{ + _serial->printf("TS;%04X;%04X;%s;TE\r\n", _command, _payloadSize, _payload); +} + +char* PeripheralMode::getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size) +{ + // Count already found arguments. + int _currentArgument = 0; + + // If is selected argument that does not exist, return NULL pointer as error; + if (_n >= _noOfArgs || _n < 0) return NULL; + + // Try get the wanted arguments. + // First declare two pinters; one represents start of the argument, second end. + // In initial state, start of the first argument is, well, start of the payload buffer. + // End of the first argument is start of the second argument -> semicolon. + char *_start = _inBuffer; + char *_stop = (char*)memchr((char*)(_inBuffer + 1), TEMR_CHAR, _payloadSize); + + // Run trough the loop until you hit the right argument. + while ((_currentArgument != _n) && (_start != NULL)) + { + // Copy end of the last argument and move the pointer by one place (to skip the semicolon). + _start = _stop + 1; + + // Try to find, next semicolon (or start of the next argument) + _stop = (char*)memchr((char*)(_stop + 1), TEMR_CHAR, _payloadSize - (_stop - _inBuffer) + 1); + + // Increment argument counter. + _currentArgument++; + } + + // Return what has been found and also return the size of the argument. + if (_size != NULL) *_size = _stop - _start; + return _start; +} + +int PeripheralMode::getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize) +{ + // Find the total number of arguments. + int _noOfArgs = 0; + + // Count every semicolon (add also one at the end of the payload). + for (int i = 0; i < _payloadSize + 1; i++) + { + if (_inBuffer[i] == TEMR_CHAR) _noOfArgs++; + } + + // Return the number. + return _noOfArgs; +} + +void PeripheralMode::parseCommand(int _command, int _repeat, int _payloadSize, char* _payload) +{ + // Parse the command. You can add command if needed. + // First find the number of sent arguments. + int _numberOfArgs = getNumberOfArgs(_payload, _payloadSize); + + switch(_command) + { + case CMD_PING: + { + // Payload doesn't matter here, just send the response. + sendResponse(CMD_PING, strlen((char*)_okResponseString), (char*)_okResponseString); + break; + } + case CMD_DRAW_PIXEL: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 3, _repeat); + + // Arguments can be repeated for faster transfer, so multiple pixels can be written at once. + for (int i = 0; i < _numberOfArgs; i+=3) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argColor == NULL) return; + + // Write the pixels. + _display->drawPixel(atol(_argX), atol(_argY), atol(_argColor)); + } + break; + } + case CMD_DRAW_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTVLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastVLine(atol(_argX), atol(_argY), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTHLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastHLine(atol(_argX), atol(_argY), atol(_argW), atol(_argColor)); + } + break; + } + case CMD_DRAW_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_DRAW_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_THICK_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + char *_argThick; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argThick = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL || _argThick == NULL) return; + + // Write the lines. + _display->drawThickLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor), atol(_argThick)); + } + break; + } + case CMD_DRAW_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_FILL_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_FILL_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_FILL_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_PRINT: + { + // Check the number of arguments, it can only be one and do not allow repeated payload. + if (_numberOfArgs != 1 || _repeat) return; + + // Get the arguments ant it's size. + char *_arg; + uint32_t _argSize; + _arg = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &_argSize); + + // Convert them from HEX ASCII to ASCII of the fly. + hexAsciiToAscii(_arg, _argSize); + + // Add nul-terminating char at the end of the argument (text) + _arg[_argSize / 2] = '\0'; + + // Print it on display. + _display->print(_arg); + break; + } + case CMD_SET_TEXT_SIZE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textSize; + + // Get the arguments ant it's size. + _textSize = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textSize == NULL) return; + + // Set new text size. + _display->setTextSize(atol(_textSize)); + break; + } + case CMD_SET_TEXT_COLOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_textColor; + char *_bgColor; + + // Get the arguments ant it's size. + _textColor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _bgColor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_textColor == NULL || _bgColor == NULL) return; + + // Set new text and background color. + _display->setTextColor(atol(_textColor), atol(_bgColor)); + break; + } + case CMD_SET_CURSOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_xCursor; + char *_yCursor; + + // Get the arguments ant it's size. + _xCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_xCursor == NULL || _yCursor == NULL) return; + + // Set new text cursor position. + _display->setCursor(atol(_xCursor), atol(_yCursor)); + break; + } + case CMD_SET_TEXT_WRAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textWrap; + + // Get the arguments ant it's size. + _textWrap = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textWrap == NULL) return; + + // Set text wrapping.. + _display->setTextWrap(atol(_textWrap)); + break; + } + case CMD_SET_ROTATION: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_rotation; + + // Get the arguments ant it's size. + _rotation = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_rotation == NULL) return; + + // Set text wrapping.. + _display->setRotation(atol(_rotation)); + break; + } + case CMD_DRAW_BITMAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_color; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _color = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _color == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + hexAsciiToAscii(_hexData, _argSize); + + // Display the bitmap. + _display->drawBitmap(atol(_xPos), atol(_yPos), (uint8_t*)_hexData, atol(_w), atol(_h), atol(_color)); + + break; + } + case CMD_DRAW_IMAGE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_dither; + char *_invert; + char *_path; + char *_pathType; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _dither = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _invert = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _pathType = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _path = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _dither == NULL || _invert == NULL || _pathType==NULL ||_path == NULL) return; + + if(_pathType == 0) + { + // Convert it on the fly from HEX ASCII to standard ASCII. This can be done directly in the buffer since ASCII will take up half the size of the original _path size. + hexAsciiToAscii(_path, _argSize); + + // Add null-termination at the end of the argument. + _path[_argSize / 2] = '\0'; + + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_path, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + } + else + { + char _pathNew[_argSize+1]; + strncpy(_pathNew, _path, _argSize); + _pathNew[_argSize]='\0'; + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_pathNew, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + } + + + break; + + } + case CMD_DRAW_IMAGE_BUFFER: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 4, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. + hexAsciiToAscii(_hexData, _argSize); + + // Display the image from the buffer. + _display->drawImage((const uint8_t*)_hexData, atol(_xPos), atol(_yPos), atol(_w), atol(_h)); + break; + } + case CMD_CLEAR_DISPLAY: + { + // No payload check needed, just clear the display + _display->clearDisplay(); + + break; + } + case CMD_DISPLAY: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + // Execute the command! + _display->display(); + break; + } + case CMD_ESP32_DEEPSLEEP: + { + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + esp_deep_sleep_start(); + break; + } + case CMD_ESP32_LIGHTSLEEP: + { + + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + delay(10); + esp_light_sleep_start(); + break; + } + case CMD_CONNECT_WIFI: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_ssid; + char *_password; + + uint32_t ssidSize, passwordSize; + + _ssid = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &ssidSize); + _password = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &passwordSize); + + // Check if they are valid. + if (_ssid == NULL || _password == NULL) return; + + char ssid[ssidSize + 1]; + char password[passwordSize + 1]; + + strncpy(ssid, _ssid, ssidSize); + ssid[ssidSize] = '\0'; + + strncpy(password, _password, passwordSize); + password[passwordSize] = '\0'; + + + Serial.println(ssid); + Serial.println(password); + + + if(_display->connectWiFi(ssid, password)) + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + case CMD_DISCONNECT_WIFI: + { + _display->disconnect(); + break; + } + case CMD_GET_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + + // Get the arguments. + char *_server; + + uint32_t serverSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + + strncpy(server,_server, serverSize); + + server[serverSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + + // Your Domain name with URL path or IP address with path + http.begin(server); + + // Send HTTP GET request + int httpResponseCode = http.GET(); + + if (httpResponseCode>0) { + String payload = http.getString(); + sendResponse(CMD_GET_REQUEST, strlen(payload.c_str()), (char*)payload.c_str()); + } + else { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + } + else + { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + + case CMD_POST_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_server; + char *_postMessage; + + uint32_t serverSize; + uint32_t postSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + _postMessage = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &postSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + char postMessage[postSize+1]; + + strncpy(server,_server, serverSize); + strncpy(postMessage, _postMessage, postSize); + + server[serverSize]='\0'; + postMessage[postSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + // Your Domain name with URL path or IP address with path + http.begin(server); + + http.addHeader("Content-Type", "text/plain"); + + int httpResponseCode = http.POST(postMessage); + + if (httpResponseCode>0) { + sendResponse(CMD_POST_REQUEST, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else { + sendResponse(CMD_POST_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + + } + break; + } + } +} + +int PeripheralMode::hexToChar(int a, int b) +{ + return ((16 * charToInt(a)) + charToInt(b)); +} + +int PeripheralMode::charToInt(char a) +{ + // Convert to uppercase + a = toupper(a); + + if (a >= '0' && a <= '9') + return a - '0'; + if (a >= 'A' && a <= 'F') + return ((a - 'A') + 10); +} + +void PeripheralMode::checkArguments(int *_noOfArgs, int _maxArg, int _repeat) +{ + // Check the number of the arguments. + if ((*_noOfArgs) < _maxArg) return; + + // If the repeatable payload option is not enabled, restrict to only first argument. + if (!_repeat) (*_noOfArgs) = _maxArg; +} + +void PeripheralMode::hexAsciiToAscii(char *_buffer, uint32_t _size) +{ + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + for (uint32_t i = 0; i < _size; i+=2) + { + _buffer[i / 2] = hexToChar(_buffer[i], _buffer[i + 1]); + } +} diff --git a/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/InkplatePeripheralMode.h b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/InkplatePeripheralMode.h new file mode 100644 index 000000000..be5ad3c17 --- /dev/null +++ b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/InkplatePeripheralMode.h @@ -0,0 +1,77 @@ +// Add header guards. +#ifndef __INKPLATEPERIPHERALMODE_H__ +#define __INKPLATEPERIPHERALMODE_H__ + +// Add an main Arduino header file. +#include + +// Add an Inkplate library. +#include + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +//#include + +// Make a class for the peripheral mode. +class PeripheralMode +{ + private: + // Use singleton class to not being able to use multiple instances of this class (since only makes sense to make only one Peripheral mode). + // Private constructor to prevent direct instantiation. + PeripheralMode() {} + + // Static pointer to the single instance. + static PeripheralMode* _instancePtr; + + // Pointer to the Arduino Serial object, + HardwareSerial *_serial = nullptr; + + // Pointer to the Inkplate library object, + Inkplate *_display = nullptr; + + // Variable for counting incoming serial data. + uint32_t _serialBufferIndex = 0; + + // Pointer to the allocated serial buffer in the PSRAM. + char *_serialBuffer = nullptr; + + // Size of the buffer for parsing the commands. + uint32_t _bufferSize = 0; + + // Commonly used responeses + const char *_okResponseString = "OK"; + const char *_failResponseString = "FAIL"; + + // Variable for timestamping last received data for the automatic buffer clear. + unsigned long _bufferAutoCleanTimestamp = 0; + + bool checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandEndPosition); + void sendResponse(int _command, int _payloadSize, char *_payload); + char* getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size); + int getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize); + void parseCommand(int _command, int _repeat, int _payloadSize, char* _payload); + int hexToChar(int a, int b); + int charToInt(char a); + void checkArguments(int *_noOfArgs, int _maxArg, int _repeat); + void hexAsciiToAscii(char *_buffer, uint32_t _size); + + public: + static PeripheralMode* getInstance() + { + // Check if the instance is already been made. If not, make it. + if (PeripheralMode::_instancePtr == nullptr) + { + // Make a new instance and save the address to the pointer. + PeripheralMode::_instancePtr = new PeripheralMode(); + } + + // Return the instance pointer. This way only one object is created. + return PeripheralMode::_instancePtr; + } + + bool begin(HardwareSerial *_serial, Inkplate *_inkplate, uint32_t _baud = 115200ULL, uint8_t _rxPin = -1, uint8_t _txPin = -1, uint32_t _size = SERIAL_BUFFER_SIZE); + bool getDataFromSerial(unsigned long _timeout); +}; + +#endif \ No newline at end of file diff --git a/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/commandList.h b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/commandList.h new file mode 100644 index 000000000..000ab758c --- /dev/null +++ b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/commandList.h @@ -0,0 +1,67 @@ +#ifndef __COMMAND_LIST_H__ +#define __COMMAND_LIST_H__ + +#define CMD_PING 0x0001 +// Commands from 0x01 to 0x0A are reserved for future use. Command 0x00 is invalid! + +#define CMD_DRAW_PIXEL 0x000A +#define CMD_DRAW_LINE 0x000B +#define CMD_DRAW_FASTVLINE 0x000C +#define CMD_DRAW_FASTHLINE 0x000D +#define CMD_DRAW_RECT 0x000E +#define CMD_DRAW_CIRCLE 0x000F +#define CMD_DRAW_TRIANGLE 0x0010 +#define CMD_DRAW_ROUND_RECT 0x0011 +#define CMD_DRAW_THICK_LINE 0x0012 +#define CMD_DRAW_ELIPSE 0x0013 +#define CMD_FILL_RECT 0x0014 +#define CMD_FILL_CIRCLE 0x0015 +#define CMD_FILL_TRIANGLE 0x0016 +#define CMD_FILL_ROUND_RECT 0x0017 +#define CMD_FILL_ELIPSE 0x0018 +#define CMD_PRINT 0x0019 +#define CMD_SET_TEXT_SIZE 0x001A +#define CMD_SET_TEXT_COLOR 0x001B +#define CMD_SET_CURSOR 0x001C +#define CMD_SET_TEXT_WRAP 0x001D +#define CMD_SET_ROTATION 0x001E +#define CMD_SD_CARD_INIT 0x001F +#define CMD_SD_CARD_SLEEP 0x0020 +#define CMD_DRAW_BITMAP 0x0021 +#define CMD_DRAW_IMAGE 0x0022 +#define CMD_SET_MODE 0x0023 +#define CMD_GET_MODE 0x0024 +#define CMD_CLEAR_DISPLAY 0x0025 +#define CMD_DISPLAY 0x0026 +#define CMD_PARTIAL_UPDATE 0x0027 +// #define CMD_READ_TEMP 0x0028 // Not available on IP2 +// #define CMD_READ_TOUCHPAD 0x0029 // No touchscreen on IP2 +// #define CMD_READ_BATTERY 0x002A // No battery monitor on IP2 +// #define CMD_EINK_PMIC 0x002B // No PMIC on IP2 +// #define CMD_RTC_SET_TIME 0x002C // No RTC on IP2 +// #define CMD_RTC_SET_DATE 0x002D +// #define CMD_RTC_SET_EPOCH 0x002E +// #define CMD_RTC_UPDATE 0x002F +// #define CMD_RTC_GET_DATA_ALL 0x0030 +// #define CMD_RTC_SET_ALARM 0x0031 +// #define CMD_RTC_SET_ALARM_EPOCH 0x0032 +// #define CMD_RTC_CLEAR_AL_FLAG 0x0033 +// #define CMD_RTC_GET_ALARM_ALL 0x0034 +// #define CMD_RTC_SET_TIMER 0x0035 +// #define CMD_RTC_GET_TIMER_FLAG 0x0036 +// #define CMD_RTC_CLEAR_TIMER_FLAG 0x0037 +// #define CMD_RTC_DISABLE_TIMER 0x0038 +// #define CMD_RTC_IS_SET 0x0039 +// #define CMD_RTC_RESET 0x003A +#define CMD_ESP32_DEEPSLEEP 0x003B +#define CMD_ESP32_LIGHTSLEEP 0x003C +// #define CMD_TOUCH_INIT 0x003D // No touchscreen +// #define CMD_TOUCH_AVAILABLE 0x003E +// #define CMD_TOUCH_GET_DATA 0x003F +#define CMD_DRAW_IMAGE_BUFFER 0x0040 +#define CMD_CONNECT_WIFI 0x0041 +#define CMD_DISCONNECT_WIFI 0x0042 +#define CMD_GET_REQUEST 0x0043 +#define CMD_POST_REQUEST 0x0044 + +#endif diff --git a/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/settings.h b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/settings.h new file mode 100644 index 000000000..53e1874f4 --- /dev/null +++ b/examples/Inkplate2/Diagnostics/Inkplate2_Peripheral_Mode/settings.h @@ -0,0 +1,20 @@ +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +// Size of the Serial buffer (in bytes). Change if needed. It's stored in the PSRAM of the ESP32. +#define SERIAL_BUFFER_SIZE 65535 + +// Timeout for the incomming data. It's is counted from the last received char from te serial. +#define SERIAL_TIMEOUT_MS 100 + +// Define default ESP32 UART RX and TX pins +#define SERIAL_UART_RX_PIN 3 +#define SERIAL_UART_TX_PIN 1 + +// Termination char for the arguments (see documentation!) +#define TEMR_CHAR ';' + +// How long it takes to clear the buffer from unprocessed or invalid commands. +#define SERIAL_BUFFER_CLEAN_TIME_MS 60000ULL + +#endif diff --git a/examples/Inkplate2/Projects/Inkplate2_Clock/Inkplate2_Clock.ino b/examples/Inkplate2/Projects/Inkplate2_Clock/Inkplate2_Clock.ino index 35210021f..1bd895a93 100644 --- a/examples/Inkplate2/Projects/Inkplate2_Clock/Inkplate2_Clock.ino +++ b/examples/Inkplate2/Projects/Inkplate2_Clock/Inkplate2_Clock.ino @@ -45,7 +45,7 @@ char pass[] = ""; #define DELAY_WIFI_RETRY_SECONDS 10 //---------------------------------- -// Bitmaps for 7 segment display. Converted using Inkplate Image Converter https://inkplate.io/home/image-converter/ +// Bitmaps for 7 segment display. Converted using Inkplate Image Converter http://soldered.com/image-converter #include "includes/eight.h" #include "includes/five.h" #include "includes/four.h" diff --git a/examples/Inkplate2/Projects/Inkplate2_Google_Calendar/Inkplate2_Google_Calendar.ino b/examples/Inkplate2/Projects/Inkplate2_Google_Calendar/Inkplate2_Google_Calendar.ino index 2685a33e8..ec9a50a22 100644 --- a/examples/Inkplate2/Projects/Inkplate2_Google_Calendar/Inkplate2_Google_Calendar.ino +++ b/examples/Inkplate2/Projects/Inkplate2_Google_Calendar/Inkplate2_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate2_Google_Calendar for Soldered Inkplate 2 +Inkplate2_Google_Calendar for Soldered Inkplate 2 -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate2/Projects/Inkplate2_Hourly_Weather_Station/Inkplate2_Hourly_Weather_Station.ino b/examples/Inkplate2/Projects/Inkplate2_Hourly_Weather_Station/Inkplate2_Hourly_Weather_Station.ino index b58680a05..950c22253 100644 --- a/examples/Inkplate2/Projects/Inkplate2_Hourly_Weather_Station/Inkplate2_Hourly_Weather_Station.ino +++ b/examples/Inkplate2/Projects/Inkplate2_Hourly_Weather_Station/Inkplate2_Hourly_Weather_Station.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate2/Projects/Inkplate2_Image_Uploader/Inkplate2_Image_Uploader.ino b/examples/Inkplate2/Projects/Inkplate2_Image_Uploader/Inkplate2_Image_Uploader.ino index 353c552bf..438839f83 100644 --- a/examples/Inkplate2/Projects/Inkplate2_Image_Uploader/Inkplate2_Image_Uploader.ino +++ b/examples/Inkplate2/Projects/Inkplate2_Image_Uploader/Inkplate2_Image_Uploader.ino @@ -2,8 +2,8 @@ Inkplate10 Image Uploader Example Compatible with Soldered Inkplate 10 - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 2 diff --git a/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Inkplate2_Kickstarter_Campaign_Tracker.ino b/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Inkplate2_Kickstarter_Campaign_Tracker.ino deleted file mode 100644 index 1561a96b1..000000000 --- a/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Inkplate2_Kickstarter_Campaign_Tracker.ino +++ /dev/null @@ -1,148 +0,0 @@ -/* - Inkplate2_Kickstarter_Campaign_Tracker example for Soldered Inkplate 2 - For this example you will need only USB cable, Inkplate 2 and a WiFi with stable Internet connection. - Select "Soldered Inkplate2" from Tools -> Board menu. - Don't have "Soldered Inkplate2" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 2 to track a campaign on Kickstarter. - We find this API for our Kickstarter campaign using Google Chrome and inspecting network data. - The page periodically receives stats.json?v=1 file and inside are the data we display. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 21 December 2022 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATE2 -#error "Wrong board selection for this example, please select Soldered Inkplate2 in the boards menu." -#endif - -#include "Network.h" - -Inkplate display; - -Network network; - -#define DELAY_MS 300000 // Delay in milliseconds between deep sleep and the next wake up -> 5 minutes -#define DELAY_WIFI_RETRY_SECONDS 10 - -char *ssid = ""; // your network SSID (name of wifi network) -char *password = ""; // your network password - -int goal = 10000; // Set the goal manually to calculate how many are reached - -int timeZone = 1; // Time zone for adding hours - -int backers, pledged; // Variables to store fetched data - -struct tm timeinfo; // Variable to store human-readable time - -void setup() -{ - // Initialize serial and wait for port to open: - Serial.begin(115200); - delay(100); - - // Initialize Inkplate - display.begin(); - - // Connect Inkplate to the WiFi network - // Try connecting to a WiFi network. - // Parameters are network SSID, password, timeout in seconds and whether to print to serial. - // If the Inkplate isn't able to connect to a network stop further code execution and print an error message. - if (!display.connectWiFi(ssid, password, WIFI_TIMEOUT, true)) - { - //Can't connect to netowrk - // Clear display for the error message - display.clearDisplay(); - // Set the font size; - display.setTextSize(3); - // Set the cursor positions and print the text. - display.setCursor((display.width() / 2) - 200, display.height() / 2); - display.print(F("Unable to connect to ")); - display.println(F(ssid)); - display.setCursor((display.width() / 2) - 200, (display.height() / 2) + 30); - display.println(F("Please check SSID and PASS!")); - // Display the error message on the Inkplate and go to deep sleep - display.display(); - esp_sleep_enable_timer_wakeup(1000L * DELAY_WIFI_RETRY_SECONDS); - (void)esp_deep_sleep_start(); - } - - setTime(); - - - // Get data from the API - Serial.println("Getting data from API"); - network.getData(&backers, &pledged); - - // Draw data on the display - Serial.println("Drawing"); - drawData(backers, pledged, &timeinfo); - - // Go to sleep before checking again - Serial.print("Going to deep sleep, bye."); - esp_sleep_enable_timer_wakeup(1000L * DELAY_MS); // Activate wake-up timer - - esp_deep_sleep_start(); // Put ESP32 into deep sleep. Program stops here -} - -void loop() -{ - // Never here! If you are using deep sleep, the whole program should be in setup() because the board restarts each - // time. loop() must be empty! -} - -// Function for getting time from NTP server -void setTime() -{ - // Structure used to hold time information - struct tm timeInfo; - // Fetch current time from an NTP server and store it - time_t nowSec; - // Fetch current time in epoch format and store it - display.getNTPEpoch(&nowSec); - // This loop ensures that the NTP time fetched is valid and beyond a certain threshold - while(nowSec < 8 * 3600 * 2) - { - delay(500); - yield(); - display.getNTPEpoch(&nowSec); - } - gmtime_r(&nowSec, &timeInfo); - Serial.print(F("Current time: ")); - Serial.print(asctime(&timeInfo)); -} - -void drawData(int backers, int pledged, struct tm *timeinfo) -{ - // Print data in the frame buffer the Inkplate - display.clearDisplay(); - display.setTextSize(2); - display.drawTextWithShadow(0, 0, "Inkplate 2", INKPLATE2_RED, INKPLATE2_BLACK); - - display.setTextColor(INKPLATE2_BLACK); - display.setCursor(0, 25); - display.print("Pledged: "); - display.print(pledged); - display.println("$"); - - // Calculate the percentage of the reached value - float reached = ((float)pledged / goal) * 100; - - display.print("Reached: "); - display.print(reached, 2); - display.println("%"); - - display.print("Backers: "); - display.println(backers); - - display.setCursor(0, 95); - display.setTextSize(1); - display.print("Updated: "); - display.print(asctime(timeinfo)); - - display.display(); // Display data to the Inkplate -} diff --git a/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Network.cpp b/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Network.cpp deleted file mode 100644 index 8795d909c..000000000 --- a/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Network.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Network.cpp - * Inkplate Arduino Library - * December 21, 2022 - * https://github.com/e-radionicacom/Inkplate-6-Arduino-library - * For support, please reach over forums: forum.e-radionica.com/en - * For more info about the product, please check: www.inkplate.io - * This code is released under the GNU Lesser General Public License v3.0: https://www.gnu.org/licenses/lgpl-3.0.en.html - * Please review the LICENSE file included with this example. - * If you have any questions about licensing, please contact techsupport@e-radionica.com - * Distributed as-is; no warranty is given. - */ - -#include "Network.h" - -void Network::begin(char *ssid, char *pass) -{ - Serial.print("Attempting to connect to "); - Serial.println(ssid); - WiFi.begin(ssid, pass); - - while (WiFi.status() != WL_CONNECTED) - { - Serial.print("."); - // wait 1 second for re-trying - delay(1000); - } - - Serial.println(); - Serial.print("Connected to "); - Serial.println(ssid); -} - -void Network::getData(int *backers, int *pledged) -{ - WiFiClientSecure client; - client.setInsecure(); // Use HTTPS but don't compare certificate - client.flush(); - client.setTimeout(10); - - // Http object used to make get request - HTTPClient http; - http.getStream().setNoDelay(true); - http.getStream().setTimeout(1); - - // Initiate http - http.begin(client, "https://www.kickstarter.com/projects/solderedelectronics/" - "inkplate-2-a-easy-to-use-arduino-compatible-e-paper/stats.json?v=1"); - - // Actually do request - int httpCode = http.GET(); - if (httpCode == 200) - { - while (http.getStream().available() && http.getStream().peek() != '{') - (void)http.getStream().read(); - - // Try parsing JSON object - StaticJsonDocument<256> doc; - DeserializationError error = deserializeJson(doc, http.getStream()); - - if (error) - { - Serial.print(F("deserializeJson() failed: ")); - Serial.println(error.c_str()); - } - else - { - Serial.println("Data received and deserialized successfully!"); - *pledged = doc["project"]["pledged"]; - *backers = doc["project"]["backers_count"]; - - - doc.clear(); - } - } - - // End http - http.end(); - client.stop(); -} - -// The function used to set the current time -void Network::setTime(struct tm *timeinfo, int timeZone) -{ - // Used for setting correct time - configTime(0, 0, "pool.ntp.org", "time.nist.gov"); - - time_t nowSecs; - - Serial.print(F("Waiting for NTP time sync: ")); - nowSecs = time(nullptr); - while (nowSecs < 8 * 3600 * 2) - { - // Print a dot every half a second while time is not set - delay(500); - Serial.print(F(".")); - yield(); - nowSecs = time(nullptr) + timeZone * 3600; - } - - Serial.println(); - - // Used to store time info - gmtime_r(&nowSecs, timeinfo); - - Serial.print(F("Current time: ")); - Serial.print(asctime(timeinfo)); -} diff --git a/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Network.h b/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Network.h deleted file mode 100644 index 3e60837c2..000000000 --- a/examples/Inkplate2/Projects/Inkplate2_Kickstarter_Campaign_Tracker/Network.h +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Network.h - * Inkplate Arduino Library - * December 21, 2022 - * https://github.com/e-radionicacom/Inkplate-6-Arduino-library - * For support, please reach over forums: forum.e-radionica.com/en - * For more info about the product, please check: www.inkplate.io - * This code is released under the GNU Lesser General Public License v3.0: https://www.gnu.org/licenses/lgpl-3.0.en.html - * Please review the LICENSE file included with this example. - * If you have any questions about licensing, please contact techsupport@e-radionica.com - * Distributed as-is; no warranty is given. - */ - -#include "ArduinoJson.h" -#include "Inkplate.h" -#include - -#ifndef NETWORK_H -#define NETWORK_H - -class Network -{ - public: - // Functions we can access in main file - void begin(char *ssid, char *pass); - void getData(int *backers, int *pledged); - void setTime(struct tm *timeinfo, int timeZone); - - private: -}; - -#endif diff --git a/examples/Inkplate2/Projects/Inkplate2_OpenAI_Text_Prompt/Inkplate2_OpenAI_Text_Prompt.ino b/examples/Inkplate2/Projects/Inkplate2_OpenAI_Text_Prompt/Inkplate2_OpenAI_Text_Prompt.ino index 6b9391950..04aa6e624 100644 --- a/examples/Inkplate2/Projects/Inkplate2_OpenAI_Text_Prompt/Inkplate2_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate2/Projects/Inkplate2_OpenAI_Text_Prompt/Inkplate2_OpenAI_Text_Prompt.ino @@ -1,10 +1,10 @@ /* Inkplate2 OpenAI text prompt generator - Compatible with Soldered Inkplate 2 + Compatible with Soldered Inkplate 2 -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 2. Select "Soldered Inkplate2" from Tools -> Board menu. - Don't have "Soldered Inkplate2" option? Follow our tutorial and add it:https://soldered.com/documentation/inkplate/2/quick-start-guide/ + Don't have "Soldered Inkplate2" option? Follow our tutorial and add it: https://soldered.com/documentation/inkplate/2/quick-start-guide/ Overview: This example demonstrates how to fetch the temperature and weather, then with that information it creates a snarky prompt which is displayed diff --git a/examples/Inkplate2/Projects/Inkplate2_OpenMeteo_Weather_Station/Inkplate2_OpenMeteo_Weather_Station.ino b/examples/Inkplate2/Projects/Inkplate2_OpenMeteo_Weather_Station/Inkplate2_OpenMeteo_Weather_Station.ino index 6e99dc952..3a94c8e34 100644 --- a/examples/Inkplate2/Projects/Inkplate2_OpenMeteo_Weather_Station/Inkplate2_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate2/Projects/Inkplate2_OpenMeteo_Weather_Station/Inkplate2_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate2 OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 2 + Compatible with Soldered Inkplate 2 -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate4/Advanced/Communication/Inkplate4_EasyC/icons.h b/examples/Inkplate4/Advanced/Communication/Inkplate4_EasyC/icons.h index 79998218c..9b06d4b66 100644 --- a/examples/Inkplate4/Advanced/Communication/Inkplate4_EasyC/icons.h +++ b/examples/Inkplate4/Advanced/Communication/Inkplate4_EasyC/icons.h @@ -1,5 +1,5 @@ // These icons are converted using Inkplate image converter: -// https://solderedelectronics.github.io/Inkplate-image-converter/ +// http://soldered.com/image-converter const uint8_t temperature_icon[] PROGMEM = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, diff --git a/examples/Inkplate4/Advanced/DeepSleep/Inkplate4_Simple_Deep_Sleep/Inkplate4_Simple_Deep_Sleep.ino b/examples/Inkplate4/Advanced/DeepSleep/Inkplate4_Simple_Deep_Sleep/Inkplate4_Simple_Deep_Sleep.ino index b1925f2ca..106857091 100644 --- a/examples/Inkplate4/Advanced/DeepSleep/Inkplate4_Simple_Deep_Sleep/Inkplate4_Simple_Deep_Sleep.ino +++ b/examples/Inkplate4/Advanced/DeepSleep/Inkplate4_Simple_Deep_Sleep/Inkplate4_Simple_Deep_Sleep.ino @@ -19,7 +19,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4/Advanced/Other/Inkplate4_Read_Battery_Voltage/Inkplate4_Read_Battery_Voltage.ino b/examples/Inkplate4/Advanced/Other/Inkplate4_Read_Battery_Voltage/Inkplate4_Read_Battery_Voltage.ino index d0f7a426f..963e63f34 100644 --- a/examples/Inkplate4/Advanced/Other/Inkplate4_Read_Battery_Voltage/Inkplate4_Read_Battery_Voltage.ino +++ b/examples/Inkplate4/Advanced/Other/Inkplate4_Read_Battery_Voltage/Inkplate4_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4/Projects/Inkplate4_Daily_Weather_Station/Inkplate4_Daily_Weather_Station.ino b/examples/Inkplate4/Projects/Inkplate4_Daily_Weather_Station/Inkplate4_Daily_Weather_Station.ino index 55c8dbeef..1a3adc8d0 100644 --- a/examples/Inkplate4/Projects/Inkplate4_Daily_Weather_Station/Inkplate4_Daily_Weather_Station.ino +++ b/examples/Inkplate4/Projects/Inkplate4_Daily_Weather_Station/Inkplate4_Daily_Weather_Station.ino @@ -23,7 +23,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4/Projects/Inkplate4_Google_Calendar/Inkplate4_Google_Calendar.ino b/examples/Inkplate4/Projects/Inkplate4_Google_Calendar/Inkplate4_Google_Calendar.ino index b48dab719..6f66a5442 100644 --- a/examples/Inkplate4/Projects/Inkplate4_Google_Calendar/Inkplate4_Google_Calendar.ino +++ b/examples/Inkplate4/Projects/Inkplate4_Google_Calendar/Inkplate4_Google_Calendar.ino @@ -8,6 +8,8 @@ This project shows you how Inkplate 4 can be used to display events in your Google Calendar using their provided API + Documentation link: https://soldered.com/documentation/inkplate/projects/GoogleCalendar + For this to work you need to change your timezone, wifi credentials and your private calendar url which you can find following these steps: diff --git a/examples/Inkplate4/Projects/Inkplate4_Hourly_Weather_Station/Inkplate4_Hourly_Weather_Station.ino b/examples/Inkplate4/Projects/Inkplate4_Hourly_Weather_Station/Inkplate4_Hourly_Weather_Station.ino index 62c0a021f..82b0df68e 100644 --- a/examples/Inkplate4/Projects/Inkplate4_Hourly_Weather_Station/Inkplate4_Hourly_Weather_Station.ino +++ b/examples/Inkplate4/Projects/Inkplate4_Hourly_Weather_Station/Inkplate4_Hourly_Weather_Station.ino @@ -25,7 +25,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4/Projects/Inkplate4_OpenWeather_Station/Inkplate4_OpenWeather_Station.ino b/examples/Inkplate4/Projects/Inkplate4_OpenWeather_Station/Inkplate4_OpenWeather_Station.ino index dc900310a..3463a302f 100644 --- a/examples/Inkplate4/Projects/Inkplate4_OpenWeather_Station/Inkplate4_OpenWeather_Station.ino +++ b/examples/Inkplate4/Projects/Inkplate4_OpenWeather_Station/Inkplate4_OpenWeather_Station.ino @@ -26,7 +26,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4TEMPERA/Advanced/Communication/Inkplate4TEMPERA_EasyC/icons.h b/examples/Inkplate4TEMPERA/Advanced/Communication/Inkplate4TEMPERA_EasyC/icons.h index 79998218c..9b06d4b66 100644 --- a/examples/Inkplate4TEMPERA/Advanced/Communication/Inkplate4TEMPERA_EasyC/icons.h +++ b/examples/Inkplate4TEMPERA/Advanced/Communication/Inkplate4TEMPERA_EasyC/icons.h @@ -1,5 +1,5 @@ // These icons are converted using Inkplate image converter: -// https://solderedelectronics.github.io/Inkplate-image-converter/ +// http://soldered.com/image-converter const uint8_t temperature_icon[] PROGMEM = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, diff --git a/examples/Inkplate4TEMPERA/Advanced/DeepSleep/Inkplate4TEMPERA_Simple_Deep_Sleep/Inkplate4TEMPERA_Simple_Deep_Sleep.ino b/examples/Inkplate4TEMPERA/Advanced/DeepSleep/Inkplate4TEMPERA_Simple_Deep_Sleep/Inkplate4TEMPERA_Simple_Deep_Sleep.ino index ecfa37429..f7180ddcf 100644 --- a/examples/Inkplate4TEMPERA/Advanced/DeepSleep/Inkplate4TEMPERA_Simple_Deep_Sleep/Inkplate4TEMPERA_Simple_Deep_Sleep.ino +++ b/examples/Inkplate4TEMPERA/Advanced/DeepSleep/Inkplate4TEMPERA_Simple_Deep_Sleep/Inkplate4TEMPERA_Simple_Deep_Sleep.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Black_And_White/logo.h b/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Black_And_White/logo.h index 6d1456a20..4594c3dc8 100644 --- a/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Black_And_White/logo.h +++ b/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Black_And_White/logo.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t logo[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Grayscale/image.h b/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Grayscale/image.h index 171c166d7..2d0485366 100644 --- a/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Grayscale/image.h +++ b/examples/Inkplate4TEMPERA/Basic/Inkplate4TEMPERA_Grayscale/image.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t picture1[] = { 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0xaa, 0xaa, 0x99, 0x99, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xa9, 0x99, 0x99, 0xaa, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0x9a, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x99, 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x9a, 0xaa, 0xaa, 0xba, 0xaa, 0xba, 0x9a, 0xba, 0xaa, 0xa9, 0x98, 0x88, 0x87, 0x77, 0x88, 0x88, 0x77, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x78, 0x88, 0x87, 0x77, 0x77, diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h deleted file mode 100644 index 7f2ed9e6b..000000000 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h +++ /dev/null @@ -1,203 +0,0 @@ -// 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 Open_Sans_SemiBold_16Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xDB, 0x6D, 0xB6, 0x03, 0x60, // '!' - 0xDB, 0x6D, 0xB6, // '"' - 0x09, 0x03, 0x20, 0x6C, 0x3F, 0xE1, 0x20, 0x24, 0x04, 0x87, 0xFC, 0x36, 0x04, 0xC0, 0x90, 0x12, 0x00, // '#' - 0x10, 0x10, 0x7C, 0xFE, 0xD0, 0xD0, 0x78, 0x3C, 0x16, 0x96, 0xFE, 0xFC, 0x10, 0x10, // '$' - 0x70, 0xC6, 0x84, 0x26, 0x61, 0x32, 0x09, 0xB0, 0x69, 0x71, 0xD2, 0xC1, 0xB2, 0x09, 0x90, 0xCC, 0x84, 0x2C, - 0x61, 0xC0, // '%' - 0x3C, 0x07, 0xE0, 0x66, 0x06, 0x60, 0x6C, 0x03, 0x80, 0x78, 0xCC, 0xCC, 0xC7, 0x8C, 0x38, 0xFF, 0x87, 0xCC, // '&' - 0xDB, 0x60, // ''' - 0x23, 0x11, 0x8C, 0x42, 0x10, 0x84, 0x31, 0x84, 0x30, 0x80, // '(' - 0x43, 0x08, 0x63, 0x08, 0x42, 0x10, 0x8C, 0x62, 0x31, 0x00, // ')' - 0x10, 0x10, 0xD6, 0xFE, 0x38, 0x6C, 0x44, // '*' - 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, // '+' - 0x66, 0x44, // ',' - 0xEE, // '-' - 0xD8, // '.' - 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x00, // '/' - 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, // '0' - 0x18, 0xEF, 0x96, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, // '1' - 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x08, 0x10, 0x20, 0xC0, 0xFE, 0xFE, // '2' - 0x7C, 0xFE, 0x86, 0x06, 0x04, 0x78, 0x7C, 0x06, 0x06, 0x06, 0xFE, 0xF8, // '3' - 0x06, 0x03, 0x80, 0xE0, 0x78, 0x16, 0x0D, 0x86, 0x61, 0x18, 0xFF, 0xBF, 0xE0, 0x60, 0x18, // '4' - 0x7C, 0xFC, 0xC0, 0xC0, 0xFC, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFC, 0xF8, // '5' - 0x1E, 0x7E, 0x60, 0xC0, 0xFC, 0xFE, 0xC6, 0xC2, 0xC2, 0xC6, 0x7E, 0x3C, // '6' - 0xFE, 0xFE, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, // '7' - 0x7C, 0xFE, 0xC6, 0xC6, 0x64, 0x38, 0x7C, 0xC6, 0x82, 0xC6, 0xFE, 0x7C, // '8' - 0x78, 0xFC, 0xC6, 0xC6, 0x86, 0xC6, 0xFE, 0x7E, 0x06, 0x0C, 0xFC, 0xF0, // '9' - 0xD8, 0x00, 0x06, 0xC0, // ':' - 0x66, 0x00, 0x00, 0x06, 0x64, 0x40, // ';' - 0x02, 0x0E, 0x38, 0xE0, 0xC0, 0x38, 0x0E, 0x02, // '<' - 0xFE, 0x00, 0x00, 0x00, 0xFE, // '=' - 0x80, 0xE0, 0x38, 0x0E, 0x06, 0x38, 0xE0, 0x80, // '>' - 0x78, 0xFC, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, // '?' - 0x0F, 0x81, 0xC6, 0x18, 0x08, 0x9F, 0x6D, 0x99, 0x4C, 0xCA, 0x46, 0x52, 0x32, 0x99, 0xB6, 0x77, 0x10, 0x00, - 0x61, 0x01, 0xF8, 0x00, // '@' - 0x0E, 0x00, 0xE0, 0x0A, 0x01, 0xB0, 0x1B, 0x03, 0x18, 0x31, 0x83, 0xF8, 0x7F, 0xC6, 0x0C, 0x60, 0xCC, 0x06, // 'A' - 0xFC, 0x7F, 0x21, 0xD0, 0x68, 0x67, 0xF3, 0xF9, 0x06, 0x83, 0x41, 0xBF, 0xDF, 0x80, // 'B' - 0x1F, 0x3F, 0x98, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x1F, 0xC3, 0xE0, // 'C' - 0xFC, 0x3F, 0x88, 0x72, 0x0E, 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x83, 0xA1, 0xCF, 0xE3, 0xF0, // 'D' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x03, 0xF7, 0xE0, // 'E' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x02, 0x04, 0x00, // 'F' - 0x1F, 0x87, 0xF1, 0xC0, 0x70, 0x0C, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE0, 0xCE, 0x19, 0xFF, 0x0F, 0xC0, // 'G' - 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x81, 0xBF, 0xEF, 0xFA, 0x06, 0x81, 0xA0, 0x68, 0x1A, 0x06, // 'H' - 0xAA, 0xAA, 0xAA, // 'I' - 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x63, 0x7B, 0x80, // 'J' - 0xC3, 0x30, 0xCC, 0x63, 0x30, 0xD8, 0x36, 0x0F, 0x83, 0x30, 0xC6, 0x31, 0x8C, 0x33, 0x06, // 'K' - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xFE, // 'L' - 0xC0, 0x6E, 0x0E, 0xE0, 0xEA, 0x0A, 0xB1, 0xAB, 0x12, 0x91, 0x29, 0xB2, 0x9A, 0x28, 0xE2, 0x8E, 0x28, 0xC2, // 'M' - 0xC0, 0xB8, 0x2E, 0x0A, 0xC2, 0xB8, 0xA6, 0x28, 0xCA, 0x3A, 0x86, 0xA0, 0xE8, 0x3A, 0x06, // 'N' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0xC1, 0xF0, // 'O' - 0xF8, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x80, 0x80, 0x80, 0x80, // 'P' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0x81, 0xF0, - 0x03, 0x80, 0x18, 0x00, 0xC0, // 'Q' - 0xFC, 0x3F, 0x8C, 0x73, 0x0C, 0xC3, 0x31, 0xCF, 0xE3, 0xF0, 0xCC, 0x31, 0x8C, 0x33, 0x0E, // 'R' - 0x7C, 0xFE, 0xC2, 0xC0, 0xE0, 0x78, 0x1C, 0x06, 0x06, 0x86, 0xFE, 0xFC, // 'S' - 0xFF, 0xBF, 0xE0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'T' - 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xCC, 0x31, 0xFE, 0x0F, 0x00, // 'U' - 0xC0, 0xD8, 0x11, 0x86, 0x30, 0xC6, 0x10, 0x66, 0x0C, 0xC1, 0x90, 0x1E, 0x03, 0xC0, 0x70, 0x06, 0x00, // 'V' - 0xC3, 0x86, 0xC3, 0x86, 0x63, 0x8C, 0x62, 0x8C, 0x66, 0xCC, 0x66, 0xCC, 0x24, 0xC8, 0x34, 0x58, 0x3C, 0x78, - 0x3C, 0x78, 0x18, 0x30, 0x18, 0x30, // 'W' - 0x61, 0x8C, 0x30, 0xCC, 0x19, 0x81, 0xE0, 0x18, 0x07, 0x80, 0xF0, 0x33, 0x06, 0x61, 0x86, 0x60, 0x60, // 'X' - 0xC1, 0x98, 0xC6, 0x30, 0xD8, 0x36, 0x07, 0x01, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'Y' - 0xFE, 0x7F, 0x01, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x3F, 0xDF, 0xE0, // 'Z' - 0xF6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xC0, // '[' - 0xC0, 0x81, 0x83, 0x02, 0x06, 0x0C, 0x08, 0x18, 0x30, 0x20, 0x60, // '\' - 0xF1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1B, 0xC0, // ']' - 0x08, 0x07, 0x01, 0x40, 0x98, 0x22, 0x10, 0xCC, 0x10, // '^' - 0xFE, // '_' - 0xC4, 0x20, // '`' - 0x7C, 0x7E, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xFE, 0x76, // 'a' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB8, 0xDF, 0xCD, 0xE0, // 'b' - 0x3C, 0xFB, 0x06, 0x0C, 0x18, 0x30, 0x3E, 0x3C, // 'c' - 0x03, 0x01, 0x80, 0xC0, 0x67, 0xB3, 0xFB, 0x1D, 0x86, 0xC3, 0x61, 0xB1, 0xDF, 0xE7, 0xB0, // 'd' - 0x3C, 0x7E, 0xC6, 0xFE, 0xFE, 0xC0, 0xC0, 0x7E, 0x3C, // 'e' - 0x1E, 0x3C, 0x30, 0x30, 0x7C, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // 'f' - 0x3F, 0x99, 0x86, 0x31, 0x8C, 0x62, 0x0F, 0x06, 0x01, 0xFC, 0x7F, 0x30, 0x6C, 0x1B, 0x0C, 0x7E, 0x00, // 'g' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x30, // 'h' - 0xD8, 0x0D, 0xB6, 0xDB, 0x6C, // 'i' - 0x31, 0x80, 0x03, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDE, 0xE0, // 'j' - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x66, 0x63, 0x61, 0xB0, 0xF8, 0x7C, 0x33, 0x18, 0xCC, 0x70, // 'k' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6C, // 'l' - 0xDC, 0xF3, 0xFF, 0xEE, 0x71, 0xB0, 0xC6, 0xC2, 0x1B, 0x08, 0x6C, 0x21, 0xB0, 0x86, 0xC2, 0x18, // 'm' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x00, // 'n' - 0x3C, 0x3F, 0x30, 0xD8, 0x6C, 0x36, 0x1B, 0x0C, 0xFC, 0x3C, 0x00, // 'o' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x8D, 0xFC, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x00, // 'p' - 0x7B, 0x3F, 0xB1, 0xD8, 0x6C, 0x36, 0x1B, 0x1D, 0xFE, 0x7B, 0x01, 0x80, 0xC0, 0x60, 0x30, // 'q' - 0xDD, 0xFB, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 'r' - 0x79, 0xFB, 0x17, 0x07, 0x81, 0x83, 0x7E, 0xF8, // 's' - 0x20, 0x41, 0xF7, 0xE6, 0x0C, 0x18, 0x30, 0x60, 0x78, 0xF0, // 't' - 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x1C, 0xFE, 0x7B, 0x00, // 'u' - 0xC1, 0x90, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x40, 0x70, 0x1C, 0x00, // 'v' - 0xC7, 0x19, 0x1C, 0x46, 0x53, 0x19, 0x4C, 0x6D, 0xB0, 0xB6, 0x83, 0x8E, 0x0E, 0x38, 0x38, 0xE0, // 'w' - 0x63, 0x18, 0xC3, 0x60, 0x70, 0x1C, 0x07, 0x03, 0x61, 0x8C, 0x63, 0x00, // 'x' - 0xC1, 0x98, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x60, 0x70, 0x1C, 0x06, 0x01, 0x83, 0xC0, 0xE0, 0x00, // 'y' - 0xFD, 0xF8, 0x30, 0xC3, 0x0C, 0x30, 0x7E, 0xFC, // 'z' - 0x1C, 0x70, 0xC1, 0x83, 0x06, 0x38, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x03, 0x07, 0x00, // '{' - 0xAA, 0xAA, 0xAA, 0xAA, 0x80, // '|' - 0xE0, 0xE0, 0xC1, 0x83, 0x06, 0x07, 0x1C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_16Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 5, 0, 0}, // ' ' - {1, 3, 12, 5, 1, -12}, // '!' - {6, 6, 4, 8, 1, -12}, // '"' - {9, 11, 12, 11, 0, -12}, // '#' - {26, 8, 14, 10, 1, -13}, // '$' - {40, 13, 12, 15, 1, -12}, // '%' - {60, 12, 12, 13, 1, -12}, // '&' - {78, 3, 4, 5, 1, -12}, // ''' - {80, 5, 15, 6, 1, -12}, // '(' - {90, 5, 15, 6, 0, -12}, // ')' - {100, 8, 7, 10, 1, -13}, // '*' - {107, 8, 7, 10, 1, -9}, // '+' - {114, 4, 4, 5, 0, -2}, // ',' - {116, 4, 2, 6, 1, -5}, // '-' - {117, 3, 2, 5, 1, -2}, // '.' - {118, 7, 12, 7, 0, -12}, // '/' - {129, 8, 12, 10, 1, -12}, // '0' - {141, 6, 12, 10, 1, -12}, // '1' - {150, 8, 12, 10, 1, -12}, // '2' - {162, 8, 12, 10, 1, -12}, // '3' - {174, 10, 12, 10, 0, -12}, // '4' - {189, 8, 12, 10, 1, -12}, // '5' - {201, 8, 12, 10, 1, -12}, // '6' - {213, 8, 12, 10, 1, -12}, // '7' - {225, 8, 12, 10, 1, -12}, // '8' - {237, 8, 12, 10, 1, -12}, // '9' - {249, 3, 9, 5, 1, -9}, // ':' - {253, 4, 11, 5, 0, -9}, // ';' - {259, 8, 8, 10, 1, -10}, // '<' - {267, 8, 5, 10, 1, -8}, // '=' - {272, 8, 8, 10, 1, -10}, // '>' - {280, 8, 12, 8, 0, -12}, // '?' - {292, 13, 13, 15, 1, -12}, // '@' - {314, 12, 12, 12, 0, -12}, // 'A' - {332, 9, 12, 12, 2, -12}, // 'B' - {346, 9, 12, 11, 1, -12}, // 'C' - {360, 10, 12, 13, 2, -12}, // 'D' - {375, 7, 12, 10, 2, -12}, // 'E' - {386, 7, 12, 10, 2, -12}, // 'F' - {397, 11, 12, 13, 1, -12}, // 'G' - {414, 10, 12, 13, 2, -12}, // 'H' - {429, 2, 12, 6, 2, -12}, // 'I' - {432, 5, 15, 6, -1, -12}, // 'J' - {442, 10, 12, 11, 1, -12}, // 'K' - {457, 8, 12, 10, 2, -12}, // 'L' - {469, 12, 12, 16, 2, -12}, // 'M' - {487, 10, 12, 14, 2, -12}, // 'N' - {502, 12, 12, 14, 1, -12}, // 'O' - {520, 8, 12, 11, 2, -12}, // 'P' - {532, 12, 15, 14, 1, -12}, // 'Q' - {555, 10, 12, 11, 1, -12}, // 'R' - {570, 8, 12, 10, 1, -12}, // 'S' - {582, 10, 12, 10, 0, -12}, // 'T' - {597, 11, 12, 13, 1, -12}, // 'U' - {614, 11, 12, 11, 0, -12}, // 'V' - {631, 16, 12, 16, 0, -12}, // 'W' - {655, 11, 12, 11, 0, -12}, // 'X' - {672, 10, 12, 10, 0, -12}, // 'Y' - {687, 9, 12, 10, 1, -12}, // 'Z' - {701, 5, 15, 6, 1, -12}, // '[' - {711, 7, 12, 7, 0, -12}, // '\' - {722, 5, 15, 6, 0, -12}, // ']' - {732, 10, 7, 10, 0, -12}, // '^' - {741, 8, 1, 8, 0, 1}, // '_' - {742, 4, 3, 10, 3, -13}, // '`' - {744, 8, 9, 10, 1, -9}, // 'a' - {753, 9, 13, 11, 1, -13}, // 'b' - {768, 7, 9, 9, 1, -9}, // 'c' - {776, 9, 13, 11, 1, -13}, // 'd' - {791, 8, 9, 10, 1, -9}, // 'e' - {800, 8, 13, 7, 0, -13}, // 'f' - {813, 10, 13, 10, 0, -9}, // 'g' - {830, 9, 13, 11, 1, -13}, // 'h' - {845, 3, 13, 5, 1, -13}, // 'i' - {850, 5, 17, 5, -1, -13}, // 'j' - {861, 9, 13, 10, 1, -13}, // 'k' - {876, 3, 13, 5, 1, -13}, // 'l' - {881, 14, 9, 16, 1, -9}, // 'm' - {897, 9, 9, 11, 1, -9}, // 'n' - {908, 9, 9, 11, 1, -9}, // 'o' - {919, 9, 13, 11, 1, -9}, // 'p' - {934, 9, 13, 11, 1, -9}, // 'q' - {949, 7, 9, 8, 1, -9}, // 'r' - {957, 7, 9, 9, 1, -9}, // 's' - {965, 7, 11, 7, 0, -11}, // 't' - {975, 9, 9, 11, 1, -9}, // 'u' - {986, 10, 9, 10, 0, -9}, // 'v' - {998, 14, 9, 14, 0, -9}, // 'w' - {1014, 10, 9, 10, 0, -9}, // 'x' - {1026, 10, 13, 10, 0, -9}, // 'y' - {1043, 7, 9, 9, 1, -9}, // 'z' - {1051, 7, 15, 7, 0, -12}, // '{' - {1065, 2, 17, 10, 4, -13}, // '|' - {1070, 7, 15, 7, 0, -12} // '}' -}; -const GFXfont Open_Sans_SemiBold_16 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_16Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_16Glyphs, 0x20, 0x7E, 23}; \ No newline at end of file diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h deleted file mode 100644 index 0fa23e60d..000000000 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h +++ /dev/null @@ -1,276 +0,0 @@ -// 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 Open_Sans_SemiBold_24Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x0E, 0xEE, 0xE0, // '!' - 0x66, 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x30, // '"' - 0x06, 0x30, 0x0C, 0x60, 0x18, 0xC0, 0x71, 0x80, 0xC6, 0x0F, 0xFF, 0x9F, 0xFF, 0x06, 0x30, 0x18, 0xE0, 0x31, - 0x83, 0xFF, 0xF7, 0xFF, 0xE3, 0x8C, 0x06, 0x38, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, // '#' - 0x06, 0x00, 0x30, 0x07, 0xF0, 0xFF, 0xC7, 0x66, 0x73, 0x03, 0x98, 0x0E, 0xC0, 0x7E, 0x00, 0xFC, 0x01, 0xF8, - 0x0D, 0xC0, 0x67, 0x03, 0x3B, 0x1B, 0x9F, 0xFC, 0x7F, 0x80, 0x30, 0x01, 0x80, // '$' - 0x3C, 0x06, 0x07, 0xE0, 0xE0, 0xE6, 0x0C, 0x0C, 0x71, 0x80, 0xC7, 0x18, 0x0C, 0x73, 0x00, 0xC7, 0x70, 0x0E, - 0x66, 0x78, 0x7E, 0xEF, 0xC3, 0xCC, 0xCE, 0x01, 0xDC, 0x60, 0x19, 0xC6, 0x03, 0x1C, 0x60, 0x71, 0xC6, 0x06, - 0x0C, 0xE0, 0xE0, 0xFC, 0x0C, 0x07, 0x80, // '%' - 0x0F, 0x80, 0x0F, 0xF0, 0x03, 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x0E, 0x70, 0x01, 0xFC, 0x00, 0x3C, 0x00, - 0x3F, 0x07, 0x1F, 0xE1, 0xCF, 0x3C, 0xE3, 0x83, 0xB8, 0xE0, 0x7C, 0x38, 0x0F, 0x07, 0x0F, 0xC1, 0xFF, 0xB8, - 0x1F, 0x87, 0x00, // '&' - 0xDB, 0x6D, 0x80, // ''' - 0x1C, 0x30, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xE0, 0xC1, - 0xC0, // '(' - 0xE0, 0xC1, 0xC1, 0x83, 0x83, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x71, 0xC3, 0x0E, - 0x00, // ')' - 0x0E, 0x00, 0xE0, 0x0E, 0x08, 0x42, 0xFF, 0xEF, 0xFE, 0x0E, 0x01, 0xB0, 0x3B, 0x83, 0x18, 0x11, 0x00, // '*' - 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x7F, 0xFB, 0xFF, 0xC0, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, // '+' - 0x73, 0x39, 0xCC, 0x60, // ',' - 0xFD, 0xF8, // '-' - 0xEE, 0xEE, // '.' - 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x07, - 0x01, 0x80, 0xE0, 0x00, // '/' - 0x1F, 0x01, 0xFE, 0x1C, 0x38, 0xE1, 0xCE, 0x06, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x71, 0xC3, 0x87, 0xF8, 0x0F, 0x80, // '0' - 0x0E, 0x1E, 0x3E, 0xF6, 0xE6, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // '1' - 0x1F, 0x83, 0xFE, 0x1C, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF0, // '2' - 0x3F, 0x87, 0xFE, 0x18, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0x00, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x7B, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '3' - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x1B, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0x38, 0x0E, 0x70, 0x38, 0xE0, 0x61, - 0xC1, 0x83, 0x87, 0xFF, 0xEF, 0xFF, 0xC0, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, // '4' - 0x7F, 0xE3, 0xFF, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x73, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '5' - 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x9E, 0x1F, 0xFC, 0xF0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x39, 0xE3, 0x87, 0xF8, 0x0F, 0x80, // '6' - 0xFF, 0xF7, 0xFF, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, - 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x38, 0x00, // '7' - 0x1F, 0x81, 0xFE, 0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x38, 0x71, 0xE7, 0x07, 0xF0, 0x1F, 0x83, 0xDE, 0x1C, 0x39, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0xC3, 0x8F, 0xFC, 0x1F, 0x80, // '8' - 0x1F, 0x01, 0xFE, 0x1C, 0x79, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0x70, 0xF3, 0xFF, 0x87, 0xDC, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x0F, 0x0F, 0xF0, 0x7E, 0x00, // '9' - 0xEE, 0xEE, 0x00, 0x00, 0x0E, 0xEE, 0xE0, // ':' - 0x73, 0x9C, 0xE0, 0x00, 0x00, 0x00, 0x1C, 0xE6, 0x73, 0x18, // ';' - 0x00, 0x10, 0x03, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3C, - 0x00, 0x20, // '<' - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, // '=' - 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, 0x3C, 0x01, - 0x00, 0x00, // '>' - 0x3F, 0x1F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x80, 0x70, 0x0E, 0x00, 0x00, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, // '?' - 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0x80, 0xE0, 0x30, 0x01, 0x83, 0x00, 0x0E, 0x38, 0x7E, 0x31, 0x8F, 0xF1, - 0x8C, 0x61, 0x86, 0xE7, 0x0C, 0x36, 0x30, 0x63, 0xB1, 0x83, 0x19, 0xCE, 0x38, 0xC6, 0x3F, 0xFC, 0x30, 0xF1, - 0xC1, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0x00, // '@' - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x66, 0x00, 0x73, 0x80, 0x39, 0xC0, 0x18, 0x60, 0x1C, - 0x38, 0x0E, 0x1C, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0x81, 0xC3, 0x80, 0x71, 0xC0, 0x38, 0xC0, 0x1C, 0xE0, 0x07, - 0x00, // 'A' - 0xFF, 0x83, 0xFF, 0x8E, 0x0F, 0x38, 0x1C, 0xE0, 0x73, 0x81, 0xCE, 0x0E, 0x3F, 0xF0, 0xFF, 0xE3, 0x83, 0xCE, - 0x07, 0x38, 0x0E, 0xE0, 0x3B, 0x81, 0xEE, 0x0F, 0x3F, 0xF8, 0xFF, 0xC0, // 'B' - 0x07, 0xF0, 0x7F, 0xE3, 0xC1, 0x8E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x87, 0xFE, 0x07, 0xF0, // 'C' - 0xFF, 0x80, 0xFF, 0xE0, 0xE0, 0xF0, 0xE0, 0x38, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x38, 0xE0, 0xF0, 0xFF, 0xE0, 0xFF, 0x80, // 'D' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0xFC, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'E' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'F' - 0x03, 0xF8, 0x1F, 0xF8, 0xF8, 0x21, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0xFD, 0xC1, - 0xF9, 0x80, 0x73, 0x80, 0xE7, 0x01, 0xCF, 0x03, 0x8F, 0x07, 0x0F, 0xFE, 0x07, 0xF8, // 'G' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1C, // 'H' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, // 'I' - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x1C, 0xFC, 0xF0, // 'J' - 0xE0, 0x73, 0x83, 0xCE, 0x0E, 0x38, 0x70, 0xE3, 0x83, 0x9C, 0x0E, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xDC, 0x0E, - 0x78, 0x38, 0xE0, 0xE1, 0xC3, 0x87, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x78, // 'K' - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'L' - 0xF0, 0x03, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7C, 0x03, 0xEF, 0xC0, 0xFD, 0xD8, 0x1B, 0xBB, 0x07, 0x77, 0x70, - 0xCE, 0xE6, 0x19, 0xDC, 0xC7, 0x3B, 0x9C, 0xC7, 0x71, 0x98, 0xEE, 0x3F, 0x1D, 0xC7, 0xC3, 0xB8, 0x78, 0x77, - 0x0F, 0x0E, 0xE1, 0xC1, 0xC0, // 'M' - 0xF0, 0x0E, 0xF8, 0x0E, 0xF8, 0x0E, 0xFC, 0x0E, 0xFE, 0x0E, 0xEE, 0x0E, 0xE7, 0x0E, 0xE7, 0x0E, 0xE3, 0x8E, - 0xE1, 0xCE, 0xE1, 0xCE, 0xE0, 0xEE, 0xE0, 0xFE, 0xE0, 0x7E, 0xE0, 0x3E, 0xE0, 0x3E, 0xE0, 0x1E, // 'N' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, // 'O' - 0xFF, 0x87, 0xFF, 0x38, 0x39, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x3C, 0xFF, 0xC7, 0xF8, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x00, // 'P' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, // 'Q' - 0xFF, 0x03, 0xFF, 0x0E, 0x1E, 0x38, 0x38, 0xE0, 0xE3, 0x83, 0x8E, 0x0E, 0x38, 0x78, 0xFF, 0xC3, 0xFC, 0x0E, - 0x38, 0x38, 0xE0, 0xE1, 0xC3, 0x83, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x70, // 'R' - 0x1F, 0x87, 0xFC, 0x70, 0x4E, 0x00, 0xE0, 0x0E, 0x00, 0x78, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0xC1, 0xCF, 0xFC, 0x7F, 0x00, // 'S' - 0xFF, 0xFD, 0xFF, 0xF8, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'T' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1D, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xCE, 0x07, 0x1E, 0x1E, 0x1F, 0xF8, 0x0F, 0xC0, // 'U' - 0xE0, 0x0E, 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x1C, 0x30, 0x18, 0x38, 0x38, 0x38, 0x38, 0x18, 0x30, 0x1C, 0x70, - 0x1C, 0x70, 0x0C, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x06, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, // 'V' - 0xE0, 0x38, 0x0E, 0x60, 0x38, 0x0C, 0x70, 0x7C, 0x1C, 0x70, 0x7C, 0x1C, 0x70, 0x6C, 0x1C, 0x30, 0xEC, 0x18, - 0x38, 0xEE, 0x38, 0x38, 0xCE, 0x38, 0x38, 0xC6, 0x38, 0x19, 0xC7, 0x30, 0x1D, 0xC7, 0x70, 0x1D, 0x83, 0x70, - 0x1D, 0x83, 0x70, 0x0F, 0x83, 0xE0, 0x0F, 0x01, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xC0, // 'W' - 0x70, 0x1C, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0xC0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x38, 0x38, 0x70, 0x1C, 0xE0, 0x1E, // 'X' - 0xE0, 0x1C, 0xE0, 0x71, 0xC0, 0xE1, 0xC3, 0x83, 0x87, 0x03, 0x9C, 0x07, 0x38, 0x07, 0xE0, 0x07, 0x80, 0x0F, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'Y' - 0xFF, 0xF7, 0xFF, 0x80, 0x38, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0x80, 0x1F, 0xFE, 0xFF, 0xF0, // 'Z' - 0xFB, 0xEC, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3E, 0xF8, // '[' - 0xE0, 0x18, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, // '\' - 0xFB, 0xE1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0xBE, 0xF8, // ']' - 0x06, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x60, 0x1D, 0x80, 0x63, 0x03, 0x8C, 0x0C, 0x18, 0x30, 0x61, 0x80, 0xC6, - 0x03, 0x00, // '^' - 0xFF, 0xDF, 0xF8, // '_' - 0xF0, 0xE0, 0xE0, 0xE0, // '`' - 0x1F, 0x83, 0xFC, 0x30, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x7F, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'a' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x77, 0xC3, 0xFF, 0x1E, 0x1C, 0xE0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x83, 0x9E, 0x1C, 0xDF, 0xC6, 0x7C, 0x00, // 'b' - 0x0F, 0xC7, 0xF9, 0xE0, 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE1, 0x1F, 0xE1, 0xF8, // 'c' - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x0F, 0xB8, 0xFF, 0xCE, 0x1E, 0x70, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x39, 0xC1, 0xCE, 0x1E, 0x3F, 0xF0, 0xF9, 0x80, // 'd' - 0x0F, 0x81, 0xFE, 0x1C, 0x38, 0xE0, 0xEE, 0x07, 0x7F, 0xFB, 0xFF, 0xDC, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x08, - 0x7F, 0xC0, 0xFC, 0x00, // 'e' - 0x07, 0xC3, 0xF0, 0x70, 0x0C, 0x01, 0x80, 0xFF, 0x3F, 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, - 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, // 'f' - 0x0F, 0xF8, 0xFF, 0xE3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x83, 0x8E, 0x0F, 0xF0, 0x1F, 0x80, 0xC0, 0x03, - 0x00, 0x0F, 0xF8, 0x3F, 0xF1, 0xC1, 0xCE, 0x03, 0x38, 0x0C, 0xE0, 0x71, 0xFF, 0x83, 0xF8, 0x00, // 'g' - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0xF8, 0xFF, 0xCF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, // 'h' - 0xEE, 0xE0, 0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'i' - 0x1C, 0x38, 0x70, 0x00, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, - 0xC3, 0xBE, 0x78, // 'j' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x73, 0x87, 0x1C, 0x70, 0xE7, 0x07, 0x70, 0x3F, 0x01, - 0xFC, 0x0F, 0xF0, 0x73, 0x83, 0x8E, 0x1C, 0x38, 0xE0, 0xE7, 0x07, 0x80, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xCF, 0x8F, 0x8D, 0xFD, 0xFC, 0xF1, 0xF0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, - 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xE0, // 'm' - 0xCF, 0x8D, 0xFC, 0xF0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xE0, // 'n' - 0x0F, 0x80, 0xFF, 0x87, 0x8F, 0x1C, 0x1C, 0xE0, 0x3B, 0x80, 0xEE, 0x03, 0xB8, 0x0E, 0xE0, 0x39, 0xC1, 0xC7, - 0x8F, 0x0F, 0xF8, 0x0F, 0x80, // 'o' - 0xCF, 0x86, 0xFE, 0x3C, 0x39, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x07, 0x3C, 0x39, - 0xFF, 0x8E, 0xF8, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, // 'p' - 0x1F, 0x31, 0xFF, 0x9C, 0x3C, 0xE0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x73, 0x83, 0x9C, 0x3C, - 0x7F, 0xE1, 0xF7, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, // 'q' - 0xCF, 0x6F, 0x3F, 0x9E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, // 'r' - 0x3F, 0x8F, 0xF3, 0x82, 0x70, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x3C, 0x01, 0xC0, 0x3B, 0x07, 0x7F, 0xC7, 0xF0, // 's' - 0x18, 0x0C, 0x0E, 0x0F, 0xEF, 0xF1, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0x7C, 0x1E, // 't' - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'u' - 0xE0, 0x39, 0x80, 0xC7, 0x07, 0x1C, 0x1C, 0x30, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xD8, 0x03, 0xE0, 0x07, 0x00, // 'v' - 0xE0, 0xF0, 0x73, 0x07, 0x83, 0x1C, 0x3C, 0x38, 0xE3, 0xF1, 0xC3, 0x1B, 0x8C, 0x1C, 0xCC, 0xE0, 0xE6, 0x67, - 0x07, 0x73, 0xB8, 0x1B, 0x0D, 0x80, 0xD8, 0x7C, 0x07, 0xC3, 0xE0, 0x1C, 0x1E, 0x00, 0xE0, 0x70, 0x00, // 'w' - 0x70, 0x70, 0xE3, 0x83, 0x8E, 0x07, 0x70, 0x0D, 0x80, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x1D, 0xC0, 0x77, 0x03, - 0x8E, 0x1C, 0x1C, 0x70, 0x70, // 'x' - 0xE0, 0x39, 0xC1, 0xC7, 0x07, 0x1C, 0x1C, 0x38, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xF8, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x00, // 'y' - 0xFF, 0xBF, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0xFE, 0xFF, 0x80, // 'z' - 0x0E, 0x1E, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0xF0, 0xE0, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x1C, 0x1E, 0x06, // '{' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // '|' - 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x1E, 0x0E, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x70, 0xF0, 0xE0 // '}' -}; -const GFXglyph Open_Sans_SemiBold_24Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 7, 0, 0}, // ' ' - {1, 4, 17, 8, 2, -17}, // '!' - {10, 9, 6, 11, 1, -17}, // '"' - {17, 15, 17, 17, 1, -17}, // '#' - {49, 13, 19, 15, 1, -18}, // '$' - {80, 20, 17, 22, 1, -17}, // '%' - {123, 18, 17, 19, 1, -17}, // '&' - {162, 3, 6, 7, 2, -17}, // ''' - {165, 7, 21, 9, 1, -17}, // '(' - {184, 7, 21, 9, 1, -17}, // ')' - {203, 12, 11, 14, 1, -18}, // '*' - {220, 13, 12, 15, 1, -15}, // '+' - {240, 5, 6, 7, 1, -3}, // ',' - {244, 7, 2, 9, 1, -8}, // '-' - {246, 4, 4, 8, 2, -4}, // '.' - {248, 10, 17, 10, 0, -17}, // '/' - {270, 13, 17, 15, 1, -17}, // '0' - {298, 8, 17, 15, 2, -17}, // '1' - {315, 13, 17, 15, 1, -17}, // '2' - {343, 13, 17, 15, 1, -17}, // '3' - {371, 15, 17, 15, 0, -17}, // '4' - {403, 13, 17, 15, 1, -17}, // '5' - {431, 13, 17, 15, 1, -17}, // '6' - {459, 13, 17, 15, 1, -17}, // '7' - {487, 13, 17, 15, 1, -17}, // '8' - {515, 13, 17, 15, 1, -17}, // '9' - {543, 4, 13, 8, 2, -13}, // ':' - {550, 5, 16, 8, 1, -13}, // ';' - {560, 13, 12, 15, 1, -15}, // '<' - {580, 13, 7, 15, 1, -12}, // '=' - {592, 13, 12, 15, 1, -15}, // '>' - {612, 11, 17, 12, 0, -17}, // '?' - {636, 21, 19, 23, 1, -17}, // '@' - {686, 17, 17, 17, 0, -17}, // 'A' - {723, 14, 17, 17, 2, -17}, // 'B' - {753, 14, 17, 16, 1, -17}, // 'C' - {783, 16, 17, 19, 2, -17}, // 'D' - {817, 11, 17, 14, 2, -17}, // 'E' - {841, 11, 17, 14, 2, -17}, // 'F' - {865, 15, 17, 18, 1, -17}, // 'G' - {897, 15, 17, 19, 2, -17}, // 'H' - {929, 4, 17, 8, 2, -17}, // 'I' - {938, 8, 22, 8, -2, -17}, // 'J' - {960, 14, 17, 16, 2, -17}, // 'K' - {990, 11, 17, 14, 2, -17}, // 'L' - {1014, 19, 17, 23, 2, -17}, // 'M' - {1055, 16, 17, 20, 2, -17}, // 'N' - {1089, 18, 17, 20, 1, -17}, // 'O' - {1128, 13, 17, 16, 2, -17}, // 'P' - {1156, 18, 21, 20, 1, -17}, // 'Q' - {1204, 14, 17, 16, 2, -17}, // 'R' - {1234, 12, 17, 14, 1, -17}, // 'S' - {1260, 15, 17, 15, 0, -17}, // 'T' - {1292, 15, 17, 19, 2, -17}, // 'U' - {1324, 16, 17, 16, 0, -17}, // 'V' - {1358, 24, 17, 24, 0, -17}, // 'W' - {1409, 16, 17, 16, 0, -17}, // 'X' - {1443, 15, 17, 15, 0, -17}, // 'Y' - {1475, 13, 17, 15, 1, -17}, // 'Z' - {1503, 6, 21, 9, 2, -17}, // '[' - {1519, 10, 17, 10, 0, -17}, // '\' - {1541, 6, 21, 9, 1, -17}, // ']' - {1557, 14, 11, 14, 0, -17}, // '^' - {1577, 11, 2, 11, 0, 2}, // '_' - {1580, 7, 4, 15, 4, -19}, // '`' - {1584, 12, 13, 15, 1, -13}, // 'a' - {1604, 13, 18, 16, 2, -18}, // 'b' - {1634, 11, 13, 13, 1, -13}, // 'c' - {1652, 13, 18, 16, 1, -18}, // 'd' - {1682, 13, 13, 15, 1, -13}, // 'e' - {1704, 11, 18, 10, 0, -18}, // 'f' - {1729, 14, 19, 14, 0, -13}, // 'g' - {1763, 12, 18, 16, 2, -18}, // 'h' - {1790, 4, 18, 8, 2, -18}, // 'i' - {1799, 7, 24, 8, -1, -18}, // 'j' - {1820, 13, 18, 15, 2, -18}, // 'k' - {1850, 4, 18, 8, 2, -18}, // 'l' - {1859, 20, 13, 24, 2, -13}, // 'm' - {1892, 12, 13, 16, 2, -13}, // 'n' - {1912, 14, 13, 16, 1, -13}, // 'o' - {1935, 13, 19, 16, 2, -13}, // 'p' - {1966, 13, 19, 16, 1, -13}, // 'q' - {1997, 9, 13, 11, 2, -13}, // 'r' - {2012, 11, 13, 13, 1, -13}, // 's' - {2030, 9, 16, 10, 0, -16}, // 't' - {2048, 12, 13, 16, 2, -13}, // 'u' - {2068, 14, 13, 14, 0, -13}, // 'v' - {2091, 21, 13, 21, 0, -13}, // 'w' - {2126, 14, 13, 14, 0, -13}, // 'x' - {2149, 14, 19, 14, 0, -13}, // 'y' - {2183, 10, 13, 12, 1, -13}, // 'z' - {2200, 8, 21, 10, 1, -17}, // '{' - {2221, 4, 24, 14, 5, -18}, // '|' - {2233, 8, 21, 10, 1, -17} // '}' -}; -const GFXfont Open_Sans_SemiBold_24 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_24Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_24Glyphs, 0x20, 0x7E, 33}; \ No newline at end of file diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h deleted file mode 100644 index 3da740530..000000000 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h +++ /dev/null @@ -1,363 +0,0 @@ -// 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 Open_Sans_SemiBold_32Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFB, 0xEF, 0xBC, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x00, 0x07, 0x3E, 0xFB, 0xE7, 0x00, // '!' - 0xF3, 0xDE, 0x7B, 0xCF, 0x70, 0xEE, 0x1C, 0xC3, 0x18, 0x63, 0x0C, // '"' - 0x01, 0xC3, 0x00, 0x18, 0x70, 0x03, 0x87, 0x00, 0x38, 0x70, 0x03, 0x87, 0x00, 0x38, 0x60, 0x03, 0x86, 0x07, - 0xFF, 0xFE, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x07, 0x0E, 0x00, 0x70, 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC7, - 0x00, 0x18, 0x70, 0x00, // '#' - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x7F, 0x03, 0xFF, 0xCF, 0xFF, 0x3E, 0xC6, 0x79, 0x80, 0xF3, 0x01, 0xE6, - 0x03, 0xEC, 0x03, 0xF8, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x03, 0x3C, 0x06, 0x38, 0x0C, 0x70, - 0x19, 0xEE, 0x37, 0xDF, 0xFF, 0x3F, 0xFC, 0x1F, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, // '$' - 0x1F, 0x00, 0x38, 0x07, 0xF0, 0x0E, 0x01, 0xFF, 0x01, 0xC0, 0x38, 0xE0, 0x70, 0x07, 0x1C, 0x1C, 0x01, 0xC3, - 0x83, 0x80, 0x38, 0x38, 0xE0, 0x07, 0x07, 0x1C, 0x00, 0xE1, 0xC7, 0x00, 0x0E, 0x38, 0xE7, 0xC1, 0xC7, 0x39, - 0xFC, 0x3F, 0xEF, 0x7F, 0xC3, 0xF9, 0xCE, 0x38, 0x3E, 0x71, 0xC7, 0x00, 0x0E, 0x78, 0x70, 0x03, 0x8E, 0x0E, - 0x00, 0x71, 0xC1, 0xC0, 0x1C, 0x1C, 0x38, 0x03, 0x83, 0x8E, 0x00, 0xE0, 0x71, 0xC0, 0x38, 0x0F, 0xF8, 0x07, - 0x00, 0xFE, 0x01, 0xC0, 0x0F, 0x80, // '%' - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xE0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xC0, 0x07, 0x07, 0x80, 0x0E, - 0x0F, 0x00, 0x1E, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x03, 0xC7, 0xFE, - 0x07, 0x1F, 0x3E, 0x1E, 0x3C, 0x3E, 0x3C, 0x78, 0x3E, 0xF0, 0xE0, 0x3F, 0xE1, 0xC0, 0x3F, 0x83, 0xC0, 0x3E, - 0x07, 0xC1, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0x9E, 0x03, 0xF8, 0x1E, 0x00, // '&' - 0xF7, 0xBD, 0xCE, 0x31, 0x8C, // ''' - 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x83, 0xC0, 0xE0, 0x78, 0x1C, 0x0E, 0x03, 0x81, 0xE0, // '(' - 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x00, // ')' - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x18, 0x03, 0xCC, 0xF3, 0xFF, 0xFD, 0xFF, 0xFE, 0x03, - 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xCE, 0x01, 0xE7, 0x80, 0xE1, 0xC0, 0x10, 0xC0, // '*' - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, - 0xFF, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, // '+' - 0x3C, 0xF1, 0xE3, 0xC7, 0x0E, 0x38, 0x70, // ',' - 0xFF, 0x7F, 0xBF, 0xC0, // '-' - 0x73, 0xEF, 0xBE, 0x70, // '.' - 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x03, - 0xC0, 0x00, // '/' - 0x07, 0xE0, 0x0F, 0xF8, 0x0F, 0xFE, 0x07, 0x87, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x1C, 0xF0, - 0x0E, 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x38, 0xE0, 0x1C, 0x70, 0x1E, - 0x3C, 0x0F, 0x1E, 0x07, 0x87, 0x87, 0x81, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '0' - 0x03, 0xC0, 0xF8, 0x3F, 0x0F, 0xE7, 0xFD, 0xF7, 0x9C, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, // '1' - 0x07, 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x0F, 0x07, 0x82, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // '2' - 0x0F, 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0x78, 0x3C, 0x20, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF8, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0xE0, 0x3E, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, // '3' - 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0E, - 0x38, 0x0F, 0x1C, 0x07, 0x0E, 0x07, 0x07, 0x07, 0x83, 0x83, 0x81, 0xC3, 0x80, 0xE1, 0xFF, 0xFE, 0xFF, 0xFF, - 0x7F, 0xFF, 0x80, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, // '4' - 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xFF, - 0x83, 0xFF, 0xC7, 0xFF, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xF6, - 0x07, 0xCF, 0xFF, 0x9F, 0xFE, 0x0F, 0xE0, 0x00, // '5' - 0x01, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x71, - 0xF0, 0x3B, 0xFE, 0x1F, 0xFF, 0x1F, 0x87, 0xCF, 0x81, 0xE7, 0x80, 0x7B, 0xC0, 0x3C, 0xE0, 0x1E, 0x70, 0x0F, - 0x3C, 0x07, 0x9E, 0x07, 0x87, 0x87, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '6' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, // '7' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xC7, 0x81, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x70, 0x38, 0x3E, - 0x7C, 0x0F, 0xF8, 0x01, 0xF8, 0x03, 0xFE, 0x03, 0xEF, 0xC3, 0xC1, 0xF1, 0xC0, 0x79, 0xE0, 0x1C, 0xF0, 0x0F, - 0x78, 0x07, 0x9C, 0x03, 0x8F, 0x07, 0xC7, 0xFF, 0xC0, 0xFF, 0xC0, 0x1F, 0x80, // '8' - 0x07, 0xC0, 0x0F, 0xF8, 0x0F, 0xFE, 0x0F, 0x87, 0x87, 0x81, 0xE3, 0x80, 0xF3, 0xC0, 0x39, 0xE0, 0x1C, 0xF0, - 0x0F, 0x78, 0x07, 0x9E, 0x07, 0xCF, 0x87, 0xE3, 0xFF, 0xE1, 0xFF, 0x70, 0x3E, 0x38, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x1F, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, 0x00, // '9' - 0x73, 0xEF, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, 0xBE, 0x70, // ':' - 0x38, 0xF9, 0xF3, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x3C, 0x70, 0xE1, 0xC7, 0x0E, - 0x00, // ';' - 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x06, // '<' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0xFF, 0xFC, // '=' - 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, // '>' - 0x1F, 0xC0, 0xFF, 0xE1, 0xFF, 0xE3, 0x83, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xC0, 0x00, // '?' - 0x00, 0x7F, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xBF, 0x80, 0x3C, 0x00, 0xF0, 0x1E, 0x00, 0x1E, 0x0F, 0x00, - 0x03, 0xC3, 0x83, 0xF8, 0x71, 0xC1, 0xFF, 0x0E, 0x70, 0xFB, 0xC3, 0xB8, 0x70, 0x70, 0xEE, 0x3C, 0x1C, 0x3B, - 0x8E, 0x07, 0x0E, 0xE3, 0x81, 0xC3, 0xB8, 0xE0, 0x70, 0xEE, 0x38, 0x1C, 0x3B, 0x8E, 0x07, 0x0E, 0xE3, 0xC3, - 0xC7, 0x38, 0x7B, 0xFB, 0xCE, 0x0F, 0xE7, 0xE1, 0xC1, 0xF0, 0xF0, 0x78, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, - 0xE0, 0x02, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, // '@' - 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x77, 0x00, 0x01, 0xDC, 0x00, 0x0F, 0x78, 0x00, 0x3D, - 0xE0, 0x00, 0xE3, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x1C, 0x00, 0x70, 0x70, 0x03, 0xC1, 0xE0, 0x0E, 0x03, 0x80, - 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0x80, 0x0E, 0x1E, 0x00, - 0x3C, 0x78, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x80, // 'A' - 0xFF, 0xE0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E, 0x07, 0xCF, 0x01, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, - 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xE7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, - 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x07, 0xEF, 0xFF, 0xE7, 0xFF, 0xE3, 0xFF, 0xC0, // 'B' - 0x01, 0xFC, 0x01, 0xFF, 0xE1, 0xFF, 0xF0, 0xFC, 0x1C, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x0C, 0x1F, 0xFF, 0x03, 0xFF, 0xC0, 0x3F, 0xE0, // 'C' - 0xFF, 0xE0, 0x1F, 0xFF, 0x03, 0xFF, 0xF8, 0x78, 0x1F, 0x8F, 0x00, 0xF1, 0xE0, 0x0F, 0x3C, 0x01, 0xE7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xC0, 0x7C, 0x78, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, // 'D' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0xCF, - 0xFF, 0x3F, 0xFC, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'E' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0xFF, 0x3F, 0xFC, 0xFF, 0xF3, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x00, // 'F' - 0x00, 0xFF, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xC1, 0xF8, 0x18, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, 0x3F, 0xEF, 0x03, 0xFE, 0xF0, - 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x3C, 0x01, 0xE3, 0xF0, 0x1E, 0x1F, 0xFF, 0xE0, 0xFF, - 0xFE, 0x01, 0xFF, 0x00, // 'G' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, - 0xF0, // 'H' - 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xC0, // 'I' - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, - 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x03, 0xCF, 0xF3, 0xF8, 0xF8, - 0x00, // 'J' - 0xF0, 0x0F, 0x3C, 0x07, 0xCF, 0x03, 0xE3, 0xC0, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x1E, 0x03, 0xCF, 0x80, - 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3E, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF8, // 'K' - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'L' - 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x0F, 0xDF, 0xC0, 0x0F, 0xEE, 0xE0, 0x07, 0x77, 0x70, 0x03, - 0xFB, 0xBC, 0x03, 0xBD, 0xCE, 0x01, 0xDE, 0xE7, 0x00, 0xEF, 0x73, 0xC0, 0xE7, 0xB8, 0xE0, 0x73, 0xDC, 0x70, - 0x79, 0xEE, 0x3C, 0x38, 0xF7, 0x0E, 0x1C, 0x7B, 0x87, 0x1E, 0x3D, 0xC3, 0xCE, 0x1E, 0xE0, 0xE7, 0x0F, 0x70, - 0x7F, 0x07, 0xB8, 0x1F, 0x83, 0xDC, 0x0F, 0xC1, 0xEE, 0x07, 0xC0, 0xF7, 0x01, 0xE0, 0x7B, 0x80, 0xF0, 0x3C, // 'M' - 0xF8, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xEF, 0xE0, 0x0E, 0xFE, 0x00, 0xEE, 0xF0, 0x0E, 0xEF, 0x80, 0xEE, - 0x78, 0x0E, 0xE3, 0xC0, 0xEE, 0x3C, 0x0E, 0xE1, 0xE0, 0xEE, 0x1F, 0x0E, 0xE0, 0xF0, 0xEE, 0x07, 0x8E, 0xE0, - 0x78, 0xEE, 0x03, 0xCE, 0xE0, 0x3E, 0xEE, 0x01, 0xEE, 0xE0, 0x0F, 0xEE, 0x00, 0xFE, 0xE0, 0x07, 0xEE, 0x00, - 0x7E, 0xE0, 0x03, 0xE0, // 'N' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, // 'O' - 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xF0, 0x7E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x7C, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, // 'P' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, // 'Q' - 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x3C, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0xC3, 0xFF, 0xE0, 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF0, // 'R' - 0x0F, 0xE0, 0x3F, 0xFC, 0x7F, 0xFC, 0xF8, 0x18, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x3C, 0xE0, 0x7C, 0xFF, 0xF8, 0xFF, 0xF0, 0x3F, 0xC0, // 'S' - 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, // 'T' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x79, 0xE0, 0x1E, 0x3E, 0x07, 0xC3, 0xFF, 0xF0, 0x3F, 0xFC, 0x01, 0xFE, - 0x00, // 'U' - 0xF0, 0x00, 0xF3, 0x80, 0x07, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC3, 0x80, 0x1C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, - 0x03, 0x80, 0x70, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x03, 0x81, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x03, 0x87, - 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x03, 0x9C, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, // 'V' - 0xF0, 0x07, 0x80, 0x3C, 0xE0, 0x0F, 0x00, 0x71, 0xE0, 0x3E, 0x01, 0xE3, 0xC0, 0x7E, 0x03, 0xC7, 0x80, 0xFC, - 0x07, 0x87, 0x01, 0xF8, 0x0E, 0x0F, 0x07, 0xF8, 0x3C, 0x1E, 0x0E, 0x70, 0x78, 0x3C, 0x1C, 0xE0, 0xF0, 0x38, - 0x79, 0xC1, 0xC0, 0x78, 0xF3, 0xC7, 0x80, 0xF1, 0xC3, 0x8F, 0x01, 0xE3, 0x87, 0x1E, 0x01, 0xCF, 0x0F, 0x38, - 0x03, 0x9C, 0x1E, 0x70, 0x07, 0xB8, 0x1D, 0xE0, 0x0F, 0x70, 0x3B, 0xC0, 0x0E, 0xE0, 0x77, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0xF0, 0x03, 0xC0, 0x00, // 'W' - 0x78, 0x01, 0xE1, 0xE0, 0x1E, 0x0F, 0x00, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x07, 0x87, 0x80, 0x1E, 0x78, - 0x00, 0xF3, 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, - 0x00, 0x1E, 0xF0, 0x00, 0xF3, 0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x81, 0xE0, 0x78, 0x0F, 0x83, 0xC0, - 0x3C, 0x3C, 0x00, 0xF3, 0xC0, 0x07, 0xC0, // 'X' - 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x03, 0xC3, 0xC0, 0x78, 0x3C, 0x07, 0x81, 0xE0, 0xF0, 0x1E, 0x0E, 0x00, - 0xF1, 0xE0, 0x07, 0x1C, 0x00, 0x7B, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, // 'Y' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // 'Z' - 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, // '[' - 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, - 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x70, - 0x03, 0xC0, // '\' - 0xFE, 0xFE, 0xFE, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xFE, 0xFE, 0xFE, // ']' - 0x01, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0x9C, 0x00, 0xE7, 0x00, 0x38, 0xE0, - 0x1C, 0x38, 0x07, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x38, 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x70, // '^' - 0xFF, 0xFD, 0xFF, 0xF8, // '_' - 0xF0, 0x78, 0x3C, 0x1C, 0x0E, // '`' - 0x07, 0xF0, 0x3F, 0xFC, 0x1F, 0xFE, 0x1C, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x07, 0xFE, 0x3F, 0xFE, - 0x7C, 0x0E, 0x78, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x1F, 0x86, // 'a' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, // 'b' - 0x07, 0xF0, 0x7F, 0xE7, 0xFF, 0x1F, 0x04, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xF0, 0x67, 0xFF, 0x8F, 0xFE, 0x0F, 0xE0, // 'c' - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x0F, 0x8E, 0x3F, 0xEE, - 0x7F, 0xFE, 0x7C, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'd' - 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xCF, 0x03, 0xDE, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, - 0xFB, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x81, 0x9F, 0xFF, 0x0F, 0xFE, 0x07, 0xF0, // 'e' - 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xFC, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, // 'f' - 0x07, 0xFF, 0x83, 0xFF, 0xE1, 0xE3, 0xF8, 0xF0, 0x78, 0x38, 0x0E, 0x0E, 0x03, 0x83, 0x80, 0xE0, 0xE0, 0x38, - 0x3C, 0x1E, 0x07, 0x8F, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, - 0x3F, 0xFF, 0x9E, 0x01, 0xE7, 0x00, 0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0x9E, 0x03, 0xE7, 0xFF, 0xF0, 0xFF, 0xF8, - 0x0F, 0xF0, 0x00, // 'g' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'h' - 0x73, 0xCF, 0x9C, 0x00, 0x00, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, // 'i' - 0x07, 0x03, 0xC0, 0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, - 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x3C, 0x0F, - 0x3F, 0xCF, 0xE3, 0xF0, // 'j' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, - 0xE0, 0xF0, 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xF3, 0xC0, - 0xE1, 0xE0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE0, 0x78, 0xE0, 0x7C, 0xE0, 0x3C, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xE3, 0xE0, 0x7C, 0x3B, 0xFE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFB, 0xE1, 0xFC, 0x1E, 0xF0, 0x3E, 0x07, 0xBC, 0x07, - 0x80, 0xEF, 0x01, 0xE0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, - 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, - 0x03, 0x80, // 'm' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'n' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xCF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xC0, 0x0E, 0xE0, - 0x07, 0x70, 0x03, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF3, 0xE1, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xE0, - 0x00, // 'o' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xE0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x7C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, // 'p' - 0x0F, 0x8E, 0x3F, 0xEE, 0x7F, 0xFE, 0x78, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, // 'q' - 0xE3, 0xDC, 0xFB, 0xBF, 0x7F, 0xAF, 0x81, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'r' - 0x1F, 0xC1, 0xFF, 0xCF, 0xFF, 0x3C, 0x18, 0xE0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x1F, 0xC0, - 0x1F, 0x00, 0x1E, 0x00, 0x7B, 0x03, 0xCF, 0xFF, 0x3F, 0xF8, 0x7F, 0x80, // 's' - 0x1C, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x7F, 0xEF, 0xFE, 0xFF, 0xE3, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1F, 0xE1, 0xFE, 0x07, 0xE0, // 't' - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'u' - 0xF0, 0x07, 0x9C, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x3D, 0xE0, 0x07, 0x70, 0x01, 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, // 'v' - 0xF0, 0x1E, 0x03, 0xCE, 0x03, 0xC0, 0x71, 0xE0, 0xFC, 0x1E, 0x3C, 0x1F, 0x83, 0xC3, 0x83, 0xF0, 0x70, 0x70, - 0xE7, 0x1E, 0x0F, 0x1C, 0xE3, 0xC1, 0xE3, 0x9C, 0x78, 0x1C, 0x73, 0x8E, 0x03, 0x9C, 0x3B, 0xC0, 0x7B, 0x87, - 0x78, 0x07, 0x70, 0xEE, 0x00, 0xEC, 0x1D, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0x3E, 0x07, 0xC0, - 0x07, 0x80, 0x78, 0x00, // 'w' - 0x78, 0x07, 0x87, 0x81, 0xE0, 0xF8, 0x7C, 0x0F, 0x0F, 0x00, 0xF3, 0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x3C, 0x3C, 0x0F, 0x03, 0xC3, - 0xE0, 0x7C, 0x78, 0x07, 0x80, // 'x' - 0xF0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x1D, 0xE0, 0x07, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, - 0x7C, 0x00, 0x00, // 'y' - 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // 'z' - 0x01, 0xC0, 0xF8, 0x3F, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x03, 0xE1, - 0xF8, 0x3C, 0x07, 0xE0, 0x3E, 0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF8, - 0x1F, 0x00, 0xE0, // '{' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, // '|' - 0xE0, 0x1F, 0x03, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF0, - 0x1F, 0x80, 0x70, 0x7E, 0x1F, 0x03, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x1F, 0x83, - 0xE0, 0x70, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_32Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 9, 0, 0}, // ' ' - {1, 6, 23, 10, 2, -23}, // '!' - {19, 11, 8, 15, 2, -23}, // '"' - {30, 20, 23, 22, 1, -23}, // '#' - {88, 15, 27, 19, 2, -25}, // '$' - {139, 27, 23, 29, 1, -23}, // '%' - {217, 23, 23, 25, 2, -23}, // '&' - {284, 5, 8, 9, 2, -23}, // ''' - {289, 9, 28, 11, 1, -23}, // '(' - {321, 9, 28, 11, 1, -23}, // ')' - {353, 17, 15, 19, 1, -24}, // '*' - {385, 17, 15, 19, 1, -19}, // '+' - {417, 7, 8, 10, 1, -4}, // ',' - {424, 9, 3, 11, 1, -10}, // '-' - {428, 6, 5, 10, 2, -5}, // '.' - {432, 13, 23, 13, 0, -23}, // '/' - {470, 17, 23, 19, 1, -23}, // '0' - {519, 11, 23, 19, 2, -23}, // '1' - {551, 17, 23, 19, 1, -23}, // '2' - {600, 16, 23, 19, 1, -23}, // '3' - {646, 17, 23, 19, 1, -23}, // '4' - {695, 15, 23, 19, 2, -23}, // '5' - {739, 17, 23, 19, 1, -23}, // '6' - {788, 17, 23, 19, 1, -23}, // '7' - {837, 17, 23, 19, 1, -23}, // '8' - {886, 17, 23, 19, 1, -23}, // '9' - {935, 6, 17, 10, 2, -17}, // ':' - {948, 7, 21, 10, 1, -17}, // ';' - {967, 17, 16, 19, 1, -20}, // '<' - {1001, 15, 9, 19, 2, -16}, // '=' - {1018, 17, 16, 19, 1, -20}, // '>' - {1052, 15, 23, 16, 0, -23}, // '?' - {1096, 26, 26, 30, 2, -23}, // '@' - {1181, 22, 23, 22, 0, -23}, // 'A' - {1245, 17, 23, 22, 3, -23}, // 'B' - {1294, 18, 23, 21, 2, -23}, // 'C' - {1346, 19, 23, 24, 3, -23}, // 'D' - {1401, 14, 23, 19, 3, -23}, // 'E' - {1442, 14, 23, 18, 3, -23}, // 'F' - {1483, 20, 23, 24, 2, -23}, // 'G' - {1541, 19, 23, 25, 3, -23}, // 'H' - {1596, 5, 23, 11, 3, -23}, // 'I' - {1611, 10, 29, 11, -2, -23}, // 'J' - {1648, 18, 23, 21, 3, -23}, // 'K' - {1700, 14, 23, 18, 3, -23}, // 'L' - {1741, 25, 23, 31, 3, -23}, // 'M' - {1813, 20, 23, 26, 3, -23}, // 'N' - {1871, 22, 23, 26, 2, -23}, // 'O' - {1935, 16, 23, 21, 3, -23}, // 'P' - {1981, 22, 28, 26, 2, -23}, // 'Q' - {2058, 18, 23, 21, 3, -23}, // 'R' - {2110, 16, 23, 19, 2, -23}, // 'S' - {2156, 19, 23, 19, 0, -23}, // 'T' - {2211, 19, 23, 25, 3, -23}, // 'U' - {2266, 21, 23, 21, 0, -23}, // 'V' - {2327, 31, 23, 31, 0, -23}, // 'W' - {2417, 21, 23, 21, 0, -23}, // 'X' - {2478, 20, 23, 20, 0, -23}, // 'Y' - {2536, 17, 23, 19, 1, -23}, // 'Z' - {2585, 8, 28, 12, 3, -23}, // '[' - {2613, 13, 23, 13, 0, -23}, // '\' - {2651, 8, 28, 12, 1, -23}, // ']' - {2679, 18, 15, 18, 0, -23}, // '^' - {2713, 15, 2, 15, 0, 3}, // '_' - {2717, 8, 5, 20, 6, -24}, // '`' - {2722, 16, 17, 20, 1, -17}, // 'a' - {2756, 16, 24, 21, 3, -24}, // 'b' - {2804, 14, 17, 17, 2, -17}, // 'c' - {2834, 16, 24, 21, 2, -24}, // 'd' - {2882, 15, 17, 19, 2, -17}, // 'e' - {2914, 13, 24, 13, 1, -24}, // 'f' - {2953, 18, 25, 19, 0, -17}, // 'g' - {3010, 16, 24, 21, 3, -24}, // 'h' - {3058, 6, 24, 10, 2, -24}, // 'i' - {3076, 10, 32, 10, -2, -24}, // 'j' - {3116, 16, 24, 19, 3, -24}, // 'k' - {3164, 4, 24, 10, 3, -24}, // 'l' - {3176, 26, 17, 32, 3, -17}, // 'm' - {3232, 16, 17, 21, 3, -17}, // 'n' - {3266, 17, 17, 21, 2, -17}, // 'o' - {3303, 16, 25, 21, 3, -17}, // 'p' - {3353, 16, 25, 21, 2, -17}, // 'q' - {3403, 11, 17, 15, 3, -17}, // 'r' - {3427, 14, 17, 17, 2, -17}, // 's' - {3457, 12, 21, 14, 1, -21}, // 't' - {3489, 16, 17, 21, 2, -17}, // 'u' - {3523, 18, 17, 18, 0, -17}, // 'v' - {3562, 27, 17, 27, 0, -17}, // 'w' - {3620, 19, 17, 19, 0, -17}, // 'x' - {3661, 18, 25, 18, 0, -17}, // 'y' - {3718, 14, 17, 16, 1, -17}, // 'z' - {3748, 11, 28, 13, 1, -23}, // '{' - {3787, 3, 32, 19, 8, -24}, // '|' - {3799, 11, 28, 13, 1, -23} // '}' -}; -const GFXfont Open_Sans_SemiBold_32 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_32Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_32Glyphs, 0x20, 0x7E, 45}; \ No newline at end of file diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h deleted file mode 100644 index 93d1d062a..000000000 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h +++ /dev/null @@ -1,798 +0,0 @@ -// 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 Open_Sans_SemiBold_56Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x3F, 0x9F, 0xCF, 0xF7, 0xFB, 0xF9, 0xFC, 0x7C, 0x00, // '!' - 0xFC, 0x3F, 0x7E, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0xF8, - 0x1F, 0x7C, 0x0F, 0xBE, 0x07, 0xDF, 0x03, 0xE7, 0x81, 0xE3, 0xC0, 0xF0, // '"' - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x1F, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x3E, 0x00, - 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0xF0, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xC0, 0x00, // '#' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0x78, - 0xFC, 0x3F, 0x8F, 0x01, 0x8F, 0xE1, 0xE0, 0x01, 0xFC, 0x3C, 0x00, 0x3F, 0x87, 0x80, 0x07, 0xF0, 0xF0, 0x00, - 0x7F, 0x1E, 0x00, 0x0F, 0xF3, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x1F, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0x3C, 0x3F, 0x80, 0x07, 0x83, 0xF0, 0x00, 0xF0, 0x7E, - 0x80, 0x1E, 0x1F, 0xDC, 0x03, 0xC7, 0xFB, 0xF8, 0x7B, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, // '$' - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x0F, 0xC0, 0x07, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0x7E, 0x00, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x7E, 0x01, - 0xF0, 0x00, 0x3F, 0x03, 0xF0, 0x1F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0xF8, 0x00, 0x0F, 0xC0, 0xFC, 0x0F, 0x80, - 0x00, 0x7E, 0x07, 0xE0, 0xFC, 0x00, 0x03, 0xF0, 0x3F, 0x07, 0xC0, 0x00, 0x1F, 0x81, 0xF8, 0x7E, 0x00, 0x00, - 0xFC, 0x0F, 0xC3, 0xE0, 0xFC, 0x03, 0xE0, 0x7C, 0x3F, 0x1F, 0xF8, 0x1F, 0x03, 0xE1, 0xF1, 0xFF, 0xE0, 0xF8, - 0x1F, 0x1F, 0x1F, 0xFF, 0x07, 0xE1, 0xF8, 0xF8, 0xFF, 0xFC, 0x1F, 0xFF, 0x8F, 0x8F, 0xC3, 0xE0, 0xFF, 0xFC, - 0xFC, 0x7C, 0x1F, 0x83, 0xFF, 0xC7, 0xC3, 0xE0, 0x7C, 0x0F, 0xFC, 0x7E, 0x3F, 0x03, 0xE0, 0x1F, 0x83, 0xE1, - 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0xFC, 0x00, 0x01, 0xF0, 0x7E, 0x07, 0xE0, 0x00, 0x1F, 0x83, 0xF0, - 0x3F, 0x00, 0x00, 0xF8, 0x1F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x0F, 0xC0, 0x00, 0x7C, 0x07, 0xE0, 0x7E, - 0x00, 0x07, 0xC0, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, - 0x3F, 0x00, 0x3E, 0x0F, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, // '%' - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x7F, 0x00, - 0x00, 0x03, 0xFB, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x01, 0xFF, 0xF8, 0x00, 0xFC, 0x07, - 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xE7, 0xF8, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x0F, 0xE0, 0xFE, 0x07, 0xF8, 0x3F, - 0x83, 0xF8, 0x07, 0xF8, 0x7F, 0x07, 0xF0, 0x07, 0xF9, 0xFC, 0x0F, 0xE0, 0x07, 0xFB, 0xF8, 0x1F, 0x80, 0x07, - 0xFF, 0xE0, 0x3F, 0x00, 0x07, 0xFF, 0xC0, 0x7F, 0x00, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x01, 0xFE, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xF7, 0xF8, 0x07, 0xFF, 0xFF, 0xC7, 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xF8, 0x07, 0xFF, 0xF0, - 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, // '&' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xF1, 0xE3, 0xC7, 0x8F, 0x00, // ''' - 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xFC, - 0x00, 0xFC, // '(' - 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, - 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, - 0xFC, 0x00, // ')' - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x70, 0x1F, 0x01, 0xC7, 0xF1, 0xF1, 0xFC, 0x7F, - 0xFE, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x07, 0xF1, - 0xFC, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, 0x03, 0xC0, 0x78, 0x00, 0x08, 0x02, - 0x00, // '*' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, // '+' - 0x3F, 0x8F, 0xE3, 0xF8, 0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x3E, 0x00, // ',' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0xC0, // '-' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // '.' - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, // '/' - 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0x00, 0xFE, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0x7E, - 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0x7E, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x3F, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x3F, 0x87, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x07, - 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x0F, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, // '0' - 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0x7E, - 0x7F, 0x9F, 0xBF, 0xC7, 0xE7, 0xE1, 0xF8, 0xF0, 0x7E, 0x10, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, // '1' - 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, - 0x3F, 0xE0, 0x7F, 0xC0, 0xFC, 0x00, 0xFE, 0x03, 0x80, 0x03, 0xF8, 0x08, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, // '2' - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x03, - 0xF8, 0x0F, 0xF8, 0x3E, 0x00, 0x3F, 0x81, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x80, 0x00, 0x1F, 0xCE, 0x00, 0x03, 0xFC, - 0xFE, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, // '3' - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x1F, 0x7F, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x03, 0xE3, 0xF8, 0x00, 0x0F, 0xC7, 0xF0, - 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x01, 0xF8, 0x3F, 0x80, 0x07, 0xE0, 0x7F, 0x00, 0x0F, 0x80, - 0xFE, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0xF8, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, // '4' - 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF7, 0xFC, 0x00, - 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xC0, 0x3F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x03, 0xFC, 0x7E, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, // '5' - 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, - 0x7F, 0xE0, 0x10, 0x0F, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0xFC, 0x7F, 0xF8, 0x0F, 0xCF, 0xFF, 0xE0, 0xFD, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x8F, 0xF8, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xF8, 0x03, 0xF8, - 0x1F, 0xE0, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, // '6' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, // '7' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0x7E, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0xC0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x03, 0xFC, 0x0F, 0xE0, 0x0F, 0xF9, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x81, 0xFC, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0xFC, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0xC0, 0x03, - 0xF8, 0xFF, 0x00, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, // '8' - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF0, 0x7F, 0x80, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7E, - 0x1F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0xFC, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x9F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x3F, - 0xE7, 0xF8, 0x03, 0xFE, 0x1F, 0xF0, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0xFC, 0x0F, 0xFF, 0xE7, - 0xE0, 0x1F, 0xFE, 0x3F, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x01, 0x00, 0x7F, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, // '9' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // ':' - 0x1F, 0x07, 0xF0, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF0, 0x7E, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x00, // ';' - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, // '<' - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, // '=' - 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, // '>' - 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF8, 0x0F, - 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, // '?' - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x3F, 0xE0, 0x0F, 0x81, 0xF0, 0x07, 0xFF, 0xF0, - 0x3E, 0x1F, 0x00, 0xFF, 0xFF, 0x81, 0xF0, 0xF8, 0x0F, 0xFF, 0xFC, 0x0F, 0x8F, 0x80, 0xFF, 0x07, 0xE0, 0x3E, - 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xF3, 0xE0, 0x7E, 0x00, 0xF8, 0x0F, 0x9F, 0x03, 0xE0, 0x07, 0xC0, 0x7D, 0xF0, - 0x3F, 0x00, 0x3E, 0x03, 0xEF, 0x81, 0xF0, 0x01, 0xF0, 0x1F, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xFB, 0xE0, 0x7C, - 0x00, 0x7C, 0x07, 0xDF, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0xF8, 0x1F, 0x00, 0x3F, 0x01, 0xE7, 0xC0, 0xF8, 0x01, - 0xF8, 0x1F, 0x3E, 0x07, 0xC0, 0x0F, 0xC0, 0xF9, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xCF, 0x80, 0xF8, 0x0F, 0xF0, - 0x7C, 0x7C, 0x07, 0xF0, 0xFF, 0xC7, 0xE1, 0xF0, 0x1F, 0xFF, 0x9F, 0xFE, 0x0F, 0x80, 0x7F, 0xFC, 0xFF, 0xE0, - 0x7E, 0x01, 0xFF, 0x83, 0xFE, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xE0, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, // '@' - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, - 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, // 'A' - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x7F, 0x3F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, - 0x00, 0xFE, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x03, 0xFC, - 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, // 'B' - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFC, 0x0F, 0xF8, 0x00, 0x18, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x04, 0x0F, 0xFF, 0x00, 0x7C, - 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0x80, // 'C' - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x3F, 0xE0, 0xFE, 0x00, - 0x07, 0xFC, 0x3F, 0x80, 0x00, 0xFF, 0x8F, 0xE0, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, - 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x1F, 0xF8, 0x3F, 0x80, 0x3F, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, // 'D' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'E' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, // 'F' - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, 0xC0, 0x7F, 0xE0, 0x00, 0x30, 0x0F, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xFF, 0xEF, 0xE0, 0x01, - 0xFF, 0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0xBF, 0x80, 0x07, 0xFF, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x7E, 0x00, 0x1F, - 0xFF, 0xCF, 0xE0, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x01, - 0xFC, 0xFF, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x00, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0x80, 0x1F, 0xE0, 0x7F, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFC, 0x00, // 'G' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, - 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0xFE, // 'H' - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, // 'I' - 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x3F, 0xE7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xC0, - 0x00, // 'J' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xF0, 0xFE, 0x00, - 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xDF, - 0xE0, 0x00, 0xFF, 0x8F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x03, 0xFC, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xF0, - 0xFE, 0x00, 0x07, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x01, 0xFE, // 'K' - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'L' - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x7F, 0xF0, - 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xBF, 0xFC, 0x00, 0x00, - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x1F, 0x7E, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xDF, 0xBF, 0x00, 0x00, 0xFD, 0xFB, - 0xF7, 0xE0, 0x00, 0x1F, 0x3F, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xEF, 0xCF, 0xC0, 0x00, 0xF8, 0xFD, 0xF9, 0xF8, - 0x00, 0x1F, 0x1F, 0xBF, 0x1F, 0x80, 0x07, 0xE7, 0xF7, 0xE3, 0xF0, 0x00, 0xF8, 0xFE, 0xFC, 0x7E, 0x00, 0x3F, - 0x1F, 0xDF, 0x87, 0xE0, 0x07, 0xE3, 0xFB, 0xF0, 0xFC, 0x00, 0xF8, 0x7F, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0xEF, - 0xC1, 0xF8, 0x07, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0xBF, 0x03, 0xE0, 0x3F, 0x07, 0xF7, 0xE0, 0x7E, - 0x07, 0xC0, 0xFE, 0xFC, 0x0F, 0xC0, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0x3F, 0x03, 0xFB, 0xF0, 0x1F, 0x87, 0xC0, - 0x7F, 0x7E, 0x03, 0xF1, 0xF8, 0x0F, 0xEF, 0xC0, 0x3F, 0x3F, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xC0, 0x3F, 0xBF, - 0x00, 0xFD, 0xF8, 0x07, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0xFE, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, - 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x7E, 0x00, 0x7F, 0xC0, 0x0F, 0xEF, 0xC0, 0x0F, 0xF8, 0x01, - 0xFD, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xBF, 0x00, 0x1F, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0xFE, // 'M' - 0xFF, 0x80, 0x00, 0x0F, 0xDF, 0xF0, 0x00, 0x01, 0xFB, 0xFF, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0x00, 0x07, 0xEF, - 0xFE, 0x00, 0x00, 0xFD, 0xFF, 0xE0, 0x00, 0x1F, 0xBF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xC0, 0x00, 0x7E, 0xFF, - 0xFC, 0x00, 0x0F, 0xDF, 0xBF, 0x80, 0x01, 0xFB, 0xF7, 0xF8, 0x00, 0x3F, 0x7E, 0x7F, 0x00, 0x07, 0xEF, 0xC7, - 0xF0, 0x00, 0xFD, 0xF8, 0xFF, 0x00, 0x1F, 0xBF, 0x0F, 0xE0, 0x03, 0xF7, 0xE1, 0xFE, 0x00, 0x7E, 0xFC, 0x1F, - 0xC0, 0x0F, 0xDF, 0x81, 0xFC, 0x01, 0xFB, 0xF0, 0x3F, 0xC0, 0x3F, 0x7E, 0x03, 0xF8, 0x07, 0xEF, 0xC0, 0x3F, - 0x80, 0xFD, 0xF8, 0x07, 0xF8, 0x1F, 0xBF, 0x00, 0x7F, 0x03, 0xF7, 0xE0, 0x0F, 0xF0, 0x7E, 0xFC, 0x00, 0xFE, - 0x0F, 0xDF, 0x80, 0x0F, 0xE1, 0xFB, 0xF0, 0x01, 0xFE, 0x3F, 0x7E, 0x00, 0x1F, 0xC7, 0xEF, 0xC0, 0x01, 0xFC, - 0xFD, 0xF8, 0x00, 0x3F, 0xDF, 0xBF, 0x00, 0x03, 0xFB, 0xF7, 0xE0, 0x00, 0x7F, 0xFE, 0xFC, 0x00, 0x07, 0xFF, - 0xDF, 0x80, 0x00, 0x7F, 0xFB, 0xF0, 0x00, 0x0F, 0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xEF, 0xC0, 0x00, 0x0F, 0xFD, - 0xF8, 0x00, 0x01, 0xFF, 0xBF, 0x00, 0x00, 0x1F, 0xF7, 0xE0, 0x00, 0x03, 0xFE, // 'N' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, // 'O' - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0x80, 0x7F, 0xE7, 0xF0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x7F, 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x00, 0xFE, - 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x07, 0xFB, 0xF8, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, // 'P' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, // 'Q' - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x3F, 0xF0, 0x7F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x1F, 0xE1, 0xFC, - 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x7F, 0x03, 0xF8, 0x03, - 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x1F, 0xC0, 0xFE, 0x00, - 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, // 'R' - 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFE, 0x1F, 0xF0, 0x1F, 0x83, 0xF8, 0x00, 0x30, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, // 'S' - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, // 'T' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0F, 0xFC, 0x03, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, // 'U' - 0xFE, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x01, 0xFC, - 0x3F, 0x00, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x03, 0xF0, - 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, - 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, // 'V' - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0xF8, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x1F, 0x80, 0x07, 0xDF, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFD, 0xF8, - 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF7, 0xE0, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x3E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xF8, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xE0, - 0x07, 0xE0, 0x1F, 0x0F, 0xC0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x00, 0x7F, 0x03, 0xF0, 0x7E, - 0x07, 0xF0, 0x01, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0xC0, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x7E, 0x00, 0x0F, 0xC1, - 0xF8, 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x87, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x3F, 0x80, - 0x01, 0xF8, 0xFC, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xC0, 0x1F, - 0x9F, 0xC0, 0x00, 0x3F, 0x3E, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0xF9, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, // 'W' - 0x7F, 0x80, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x03, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x3F, 0x80, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x01, 0xFE, // 'X' - 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, // 'Y' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, // 'Z' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // '[' - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, // '\' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, - 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, - 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // ']' - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x0F, 0x8F, 0x80, - 0x00, 0x7C, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x03, - 0xE7, 0xC0, 0x00, 0x0F, 0x80, // '^' - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, // '_' - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, // '`' - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0xFF, 0x01, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0x03, 0xF9, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x0F, 0xE7, 0xF0, 0x01, 0xFD, 0xFC, - 0x00, 0x3F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x01, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF9, 0xFE, 0x07, - 0xFF, 0x3F, 0xFF, 0xF7, 0xE3, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0x0F, 0x83, 0xFF, 0xC1, 0xF0, 0x1F, 0xE0, 0x00, // 'a' - 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, 0x0F, 0xE0, 0x0F, 0xC7, 0xFF, 0x80, 0xFC, 0xFF, 0xFC, 0x0F, 0xDF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFF, 0x00, 0x1F, 0xCF, 0xF8, 0x03, 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xF9, 0xFF, 0xFE, 0x0F, - 0x8F, 0xFF, 0xC0, 0xF8, 0x7F, 0xF8, 0x00, 0x01, 0xFE, 0x00, // 'b' - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x1F, 0xE0, 0x3C, - 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x3F, 0xE0, 0x3C, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xE0, // 'c' - 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, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7E, 0x07, 0xFF, 0xE7, 0xE0, 0xFF, - 0xFF, 0x7E, 0x1F, 0xFF, 0xFF, 0xE3, 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x07, - 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF3, 0xE0, - 0x7F, 0xFE, 0x3E, 0x03, 0xFF, 0xC3, 0xE0, 0x0F, 0xE0, 0x00, // 'd' - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, - 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x3F, 0x7F, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x30, 0x7F, 0xC0, - 0x3E, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, // 'e' - 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0x02, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x80, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, // 'f' - 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, - 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFE, 0x00, 0x7E, 0x01, 0xFC, - 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC3, 0xF8, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x07, 0xEF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0xFE, 0x1F, 0xE0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, // 'g' - 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, 0x0F, 0xF0, 0x0F, 0xC7, 0xFF, 0xC0, 0xFC, 0xFF, 0xFE, 0x0F, 0xDF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, - 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xE0, // 'h' - 0x3C, 0x3F, 0x3F, 0x9F, 0xEF, 0xE3, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x00, // 'i' - 0x00, 0x78, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x00, // 'j' - 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, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, - 0x0F, 0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x07, 0xF8, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x1F, - 0xE0, 0x0F, 0xC1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x0F, 0xC7, 0xF0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xBF, 0x80, - 0x0F, 0xE1, 0xFC, 0x00, 0xFC, 0x1F, 0xE0, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F, 0x80, - 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFC, 0x00, 0x7F, 0x8F, - 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x1F, 0xC0, // 'k' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, - 0xFB, 0xF0, // 'l' - 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x03, 0xE1, 0xFF, 0xE0, 0x3F, 0xFE, 0x0F, 0x8F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xCF, 0xF8, - 0x07, 0xFF, 0x00, 0x7F, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, 0xC0, 0x03, 0xF3, 0xF8, 0x00, - 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, - 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, - 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, - 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, // 'm' - 0x00, 0x0F, 0xF0, 0x0F, 0x87, 0xFF, 0xC0, 0xF8, 0xFF, 0xFE, 0x0F, 0x9F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE0, // 'n' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xF8, 0x7F, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x3F, - 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, - 0xE1, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, // 'o' - 0x00, 0x0F, 0xE0, 0x0F, 0x87, 0xFF, 0x80, 0xF8, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFC, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x3F, 0xCF, 0xF8, 0x03, - 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFD, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xC0, 0xFC, 0x7F, 0xF8, - 0x0F, 0xC1, 0xFE, 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, // 'p' - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x07, 0xFF, 0xE3, 0xE0, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, - 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF7, 0xE0, 0x7F, 0xFE, 0x7E, 0x03, 0xFF, 0xC7, - 0xE0, 0x0F, 0xF0, 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, // 'q' - 0x00, 0x0F, 0xDF, 0x07, 0xFB, 0xE3, 0xFF, 0x7C, 0xFF, 0xEF, 0x9F, 0xFD, 0xF7, 0xFF, 0x3F, 0xF8, 0x07, 0xFC, - 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x00, // 'r' - 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xE0, 0x3E, 0x3F, - 0x00, 0x08, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFD, - 0x80, 0x03, 0xF3, 0xE0, 0x1F, 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x07, - 0xFE, 0x00, // 's' - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x10, 0x3F, 0xFF, 0x80, - 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x1F, 0xE0, // 't' - 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, - 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x80, 0x3F, 0xE7, 0xFC, 0x0F, - 0xFE, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xE3, 0xE0, 0x7F, 0xFC, 0x3E, 0x01, 0xFE, 0x00, - 0x00, // 'u' - 0xFE, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF0, 0x00, - 0x3F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0x7E, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, // 'v' - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xBF, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0xFC, - 0x00, 0xFF, 0xC0, 0x0F, 0xC7, 0xE0, 0x07, 0xFE, 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0xF0, 0x07, 0xF1, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0x87, 0xE0, 0x1F, 0x7E, 0x01, 0xF8, 0x3F, 0x00, 0xF9, 0xF0, 0x0F, 0xC1, 0xFC, 0x07, 0xCF, - 0x80, 0xFE, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xE3, 0xF0, 0x3F, 0x01, 0xF8, 0x1F, 0x0F, 0x81, - 0xF8, 0x0F, 0xE0, 0xF8, 0x7C, 0x1F, 0xC0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x01, 0xF8, 0x7C, 0x1F, 0x87, 0xE0, - 0x0F, 0xC3, 0xE0, 0x7C, 0x3F, 0x00, 0x3F, 0x3F, 0x03, 0xF3, 0xF0, 0x01, 0xF9, 0xF8, 0x1F, 0x9F, 0x80, 0x0F, - 0xCF, 0x80, 0x7C, 0xFC, 0x00, 0x7E, 0x7C, 0x03, 0xE7, 0xE0, 0x01, 0xF7, 0xE0, 0x1F, 0x7E, 0x00, 0x0F, 0xFE, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, // 'w' - 0x7F, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, - 0xC0, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0xC0, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x7F, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xE0, - 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0xFE, 0x1F, 0xE0, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x0F, 0xE0, // 'x' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x7F, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xF1, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, // 'y' - 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'z' - 0x00, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x07, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x01, 0xF0, // '{' - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, // '|' - 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0xFF, 0xE0, 0x1F, 0xF0, 0x03, 0xF8, - 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_56Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 16, 0, 0}, // ' ' - {1, 9, 41, 16, 4, -40}, // '!' - {48, 17, 14, 25, 4, -40}, // '"' - {78, 35, 40, 37, 1, -40}, // '#' - {253, 27, 46, 33, 3, -43}, // '$' - {409, 45, 42, 49, 2, -41}, // '%' - {646, 39, 42, 42, 3, -41}, // '&' - {851, 7, 14, 15, 4, -40}, // ''' - {864, 15, 49, 19, 2, -40}, // '(' - {956, 15, 49, 19, 2, -40}, // ')' - {1048, 28, 26, 32, 2, -43}, // '*' - {1139, 27, 27, 33, 3, -33}, // '+' - {1231, 10, 14, 16, 2, -7}, // ',' - {1249, 15, 5, 19, 2, -18}, // '-' - {1259, 9, 8, 16, 4, -7}, // '.' - {1268, 23, 40, 23, 0, -40}, // '/' - {1383, 29, 42, 33, 2, -41}, // '0' - {1536, 18, 40, 33, 4, -40}, // '1' - {1626, 29, 41, 33, 2, -41}, // '2' - {1775, 28, 42, 33, 2, -41}, // '3' - {1922, 31, 40, 33, 1, -40}, // '4' - {2077, 27, 41, 33, 3, -40}, // '5' - {2216, 28, 42, 33, 3, -41}, // '6' - {2363, 29, 40, 33, 2, -40}, // '7' - {2508, 29, 42, 33, 2, -41}, // '8' - {2661, 29, 42, 33, 2, -41}, // '9' - {2814, 9, 32, 16, 4, -31}, // ':' - {2850, 11, 38, 17, 2, -31}, // ';' - {2903, 27, 28, 33, 3, -34}, // '<' - {2998, 27, 16, 33, 3, -28}, // '=' - {3052, 27, 28, 33, 3, -34}, // '>' - {3147, 25, 42, 26, 0, -41}, // '?' - {3279, 45, 45, 51, 3, -40}, // '@' - {3533, 38, 40, 38, 0, -40}, // 'A' - {3723, 30, 40, 38, 5, -40}, // 'B' - {3873, 32, 42, 37, 3, -41}, // 'C' - {4041, 34, 40, 42, 5, -40}, // 'D' - {4211, 24, 40, 32, 5, -40}, // 'E' - {4331, 24, 40, 31, 5, -40}, // 'F' - {4451, 35, 42, 42, 3, -41}, // 'G' - {4635, 33, 40, 43, 5, -40}, // 'H' - {4800, 8, 40, 18, 5, -40}, // 'I' - {4840, 17, 51, 18, -4, -40}, // 'J' - {4949, 32, 40, 37, 5, -40}, // 'K' - {5109, 24, 40, 31, 5, -40}, // 'L' - {5229, 43, 40, 53, 5, -40}, // 'M' - {5444, 35, 40, 45, 5, -40}, // 'N' - {5619, 39, 42, 45, 3, -41}, // 'O' - {5824, 27, 40, 35, 5, -40}, // 'P' - {5959, 39, 51, 45, 3, -41}, // 'Q' - {6208, 31, 40, 37, 5, -40}, // 'R' - {6363, 27, 42, 32, 3, -41}, // 'S' - {6505, 31, 40, 33, 1, -40}, // 'T' - {6660, 33, 41, 43, 5, -40}, // 'U' - {6830, 36, 40, 36, 0, -40}, // 'V' - {7010, 54, 40, 54, 0, -40}, // 'W' - {7280, 36, 40, 36, 0, -40}, // 'X' - {7460, 34, 40, 34, 0, -40}, // 'Y' - {7630, 29, 40, 33, 2, -40}, // 'Z' - {7775, 14, 49, 19, 4, -40}, // '[' - {7861, 23, 40, 23, 0, -40}, // '\' - {7976, 14, 49, 19, 1, -40}, // ']' - {8062, 29, 26, 31, 1, -40}, // '^' - {8157, 25, 4, 25, 0, 5}, // '_' - {8170, 14, 9, 34, 10, -43}, // '`' - {8186, 27, 32, 33, 2, -31}, // 'a' - {8294, 28, 44, 36, 5, -43}, // 'b' - {8448, 24, 32, 29, 3, -31}, // 'c' - {8544, 28, 44, 36, 3, -43}, // 'd' - {8698, 27, 32, 33, 3, -31}, // 'e' - {8806, 23, 43, 21, 1, -43}, // 'f' - {8930, 30, 44, 32, 1, -31}, // 'g' - {9095, 28, 43, 37, 5, -43}, // 'h' - {9246, 9, 42, 17, 4, -42}, // 'i' - {9294, 16, 55, 17, -3, -42}, // 'j' - {9404, 28, 43, 33, 5, -43}, // 'k' - {9555, 7, 43, 17, 5, -43}, // 'l' - {9593, 46, 31, 55, 5, -31}, // 'm' - {9772, 28, 31, 37, 5, -31}, // 'n' - {9881, 29, 32, 35, 3, -31}, // 'o' - {9997, 28, 44, 36, 5, -31}, // 'p' - {10151, 28, 44, 36, 3, -31}, // 'q' - {10305, 19, 31, 25, 5, -31}, // 'r' - {10379, 23, 32, 28, 3, -31}, // 's' - {10471, 21, 38, 23, 1, -37}, // 't' - {10571, 28, 31, 37, 4, -30}, // 'u' - {10680, 31, 30, 31, 0, -30}, // 'v' - {10797, 45, 30, 47, 1, -30}, // 'w' - {10966, 30, 30, 32, 1, -30}, // 'x' - {11079, 31, 43, 31, 0, -30}, // 'y' - {11246, 24, 30, 28, 2, -30}, // 'z' - {11336, 21, 49, 23, 1, -40}, // '{' - {11465, 6, 56, 32, 13, -43}, // '|' - {11507, 20, 49, 22, 1, -40} // '}' -}; -const GFXfont Open_Sans_SemiBold_56 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_56Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_56Glyphs, 0x20, 0x7E, 77}; \ No newline at end of file diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker.ino b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker.ino deleted file mode 100644 index 8a4fc38d6..000000000 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker.ino +++ /dev/null @@ -1,204 +0,0 @@ -/* - Inkplate7_Crowdsupply_Campaing_Tracker example for Soldered Inkplate 7 - For this example you will need only USB cable and Inkplate 7. - Select "Soldered Inkplate7" from Tools -> Board menu. - Don't have "Soldered Inkplate7" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 7 to display html data. - This example gets html data from crowdsource campaing and displays them on Inkplate screen. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 7 July 2023 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATE4TEMPERA -#error "Wrong board selection for this example, please select Inkplate 4 TEMPERA in the boards menu." -#endif - -#include "Inkplate.h" // Include Inkplate library to the sketch -#include "generatedUI.h" // include generated UI - -#define DELAY_MS 60000 * 60 // Delay between fetching data -#define URL "https://www.crowdsupply.com/soldered/inkplate-5" // Link to the Inkplate 7 crowdsupply campaign - -// Enter your WiFi credentials -char ssid[] = ""; -char pass[] = ""; - -// Create an object on Inkplate library and also set library into 1Bit (BW) mode -Inkplate display(INKPLATE_3BIT); - -uint32_t n; // Variable for counting position in the buffer -char *buf; // Pointer to the buffer - -// Declaration of the function used later -String textInTag(const char *tag, const char *tagEnd, int dt = 1); - -void setup() -{ - Serial.begin(115200); // Init serial communication - display.begin(); // Init Inkplate library (you should call this function ONLY ONCE) - - // Connect to WiFi - while (!display.connectWiFi(ssid, pass)) - { - Serial.print('.'); - delay(1000); - } - - // Allocate memory for the buffer - buf = (char *)ps_malloc(100000); - - // Create an HTTPclient object and do the GET request - HTTPClient http; - if (http.begin(URL) && http.GET() > 0) - { - // Create an HTTPclient object and do the GET request - while (http.getStreamPtr()->available()) - { - char c = http.getStreamPtr()->read(); - buf[n++] = c; - delayMicroseconds(100); - } - - // Add the end of the string - buf[n] = 0; - } - - Serial.println("Buffer load complete!"); - - // Get the values for each field. - // When we did a get request, we got HTML as a response because there is no API on this web page. - // If you open the source of the page, you will see the HTML code. Here in the function we pass tags we are - // interested in and get the value between the tags as a string. - text1_content = textInTag("

", "

"); // Separate the product name - text3_content = textInTag("

", "

"); // Separate the project teaser - text4_content = textInTag("

", "

"); // Separate the amount of pledged - text7_content = textInTag("

", "

"); // Separate the goal - text11_content = textInTag("
", ""); // Separate the percentage - - int percent; - text11_content.replace(",", ""); - sscanf(text11_content.c_str(), "%d%%", &percent); - - // Draw parcent slider - if (percent < 100 && percent > 0) - { - float per = (float)(percent / 100.00); - int diff = line0_end_x - line0_start_x; - Serial.println(per); - Serial.println(diff); - line0_end_x = line0_start_x + (diff * per); - } - else if (percent >= 100) - { - } - else - { - line0_end_x = line0_start_x; - } - - text13_content = textInTag("", ""); // Separate the number of updates - text14_content = - textInTag("", ""); // Separate the date when founded - text17_content = textInTag("", ""); // Separate the number of backers - text19_content += textInTag("", - ""); // Separate the last update date - - // Display the content on the screen - mainDraw(); - display.display(); - - // Free the buffer - free(buf); - - // Go to sleep - esp_sleep_enable_timer_wakeup(1000LL * DELAY_MS); - (void)esp_deep_sleep_start(); -} - -void loop() -{ - // Never here -} - -/** - * @brief The function that returns content between HTML tags as a string. - * - * @param const char *tag - * The starting tag from which we want to get the value - * - * @param const char *tagEnd - * The ending tag from which we want to get the value - * - * @param int dt - * How many end tags (*tagEnd) want to skip. Default is 1 - * - * @return String value between passed tags - */ -String textInTag(const char *tag, const char *tagEnd, int dt) -{ - String r; // String for result - char *start = strstr(buf, tag) + strlen(tag); // Pointer to the beginning of the text after the tag - char *end = start - 1; // Set tag end one address before start pointer - while (dt--) - { - // Search where is the "tagEnd" starting from the last "end" which is the beginning for the first time - // (*end = start - 1) and repeat it "dt" times - end = strstr(end + 1, tagEnd); - } - - // Remove "<" and ">" from the result string - int d = 0; - for (char *t = start; t < end; ++t) - { - if (*t == '<') - ++d; - if (d == 0 && *t != '\n') - { - r += *t; - } - if (*t == '>') - --d; - } - - // Remove certain words to get only the data we want - // Hacky solution: - r.replace(""", "\""); - r.replace(" ", " "); - - r.replace("raised", ""); - r.replace("goal", ""); - r.replace("Funded!", ""); - r.replace("funded", ""); - r.replace(" on", ""); - r.replace("updates", ""); - - // Remove the following from the result string if it exists and put it in the separate string that displays on - // the screen - if (r.indexOf("hours left") != -1) - { - r.replace("hours left", ""); - text17_content = "hours left"; - } - if (r.indexOf("days left") != -1) - { - r.replace("days left", ""); - text17_content = "days left"; - } - - r.replace("backers", ""); - r.replace("Subscribe to Updates", ""); - - // Remove extraneous whitespace characters at the beginning or the end of the string - r.trim(); - - // If there is a dollar sign, the result is the string after that - if (r.indexOf("$") != -1) - r = r.substring(r.indexOf("$") + 1); - - return r; -} diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/generatedUI.h b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/generatedUI.h deleted file mode 100644 index 45a746d5b..000000000 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crowdsupply_Campaing_Tracker/generatedUI.h +++ /dev/null @@ -1,352 +0,0 @@ -#include "Arduino.h" -#include "Fonts/Open_Sans_SemiBold_16.h" -#include "Fonts/Open_Sans_SemiBold_24.h" -#include "Fonts/Open_Sans_SemiBold_32.h" -#include "Fonts/Open_Sans_SemiBold_56.h" -#include "Inkplate.h" - -extern Inkplate display; - -int rect0_a_x = 0; -int rect0_a_y = 0; -int rect0_b_x = 600; -int rect0_b_y = 600; -int rect0_fill = -1; -int rect0_radius = -1; -int rect0_color = BLACK; - -String text1_content; -int text1_cursor_x = 40 * 0.75; -int text1_cursor_y = 50; -const GFXfont *text1_font = &Open_Sans_SemiBold_32; - -String text2_content = "Soldered"; -int text2_cursor_x = 490; -int text2_cursor_y = 45; -const GFXfont *text2_font = &Open_Sans_SemiBold_16; - -String text3_content; -int text3_cursor_x = 40 * 0.75; -int text3_cursor_y = 150; -const GFXfont *text3_font = &Open_Sans_SemiBold_16; - -String text4_content; -int text4_cursor_x = 70 * 0.75; -int text4_cursor_y = 240; -const GFXfont *text4_font = &Open_Sans_SemiBold_32; - -String text5_content = "$"; -int text5_cursor_x = 37; -int text5_cursor_y = 240; -const GFXfont *text5_font = &Open_Sans_SemiBold_24; - -String text6_content = "raised"; -int text6_cursor_x = 195; -int text6_cursor_y = 240; -const GFXfont *text6_font = &Open_Sans_SemiBold_24; - -String text7_content; -int text7_cursor_x = 70 * 0.75; -int text7_cursor_y = 330+35; -const GFXfont *text7_font = &Open_Sans_SemiBold_32; - -String text8_content = "$"; -int text8_cursor_x = 50 * 0.75; -int text8_cursor_y = 325+35; -const GFXfont *text8_font = &Open_Sans_SemiBold_24; - -String text9_content = "goal"; -int text9_cursor_x = 220 * 0.75; -int text9_cursor_y = 330+35; -const GFXfont *text9_font = &Open_Sans_SemiBold_24; - -int rect1_a_x = 40 * 0.75; -int rect1_a_y = 200; -int rect1_b_x = 400 * 0.75; -int rect1_b_y = 525; -int rect1_fill = -1; -int rect1_radius = -1; -int rect1_color = BLACK; - -int rect2_a_x = 450 * 0.75; -int rect2_a_y = 200; -int rect2_b_x = 570; -int rect2_b_y = 525; -int rect2_fill = -1; -int rect2_radius = -1; -int rect2_color = BLACK; - -int rect3_a_x = 50 * 0.75; -int rect3_a_y = 456; -int rect3_b_x = 390 * 0.75; -int rect3_b_y = 456; -int rect3_fill = -1; -int rect3_radius = -1; -int rect3_color = BLACK; - -int line0_start_x = 50 * 0.75; -int line0_start_y = 456; -int line0_end_x = 390 * 0.75; -int line0_end_y = 456; -int line0_color = BLACK; -int line0_thickness = 26 * 0.75; -int line0_gradient = 0; - -String text11_content = "100%"; -int text11_cursor_x = 185 * 0.75; -int text11_cursor_y = 440; -const GFXfont *text11_font = &Open_Sans_SemiBold_16; - -String text12_content = "Funded!"; -int text12_cursor_x = 180 * 0.75; -int text12_cursor_y = 500; -const GFXfont *text12_font = &Open_Sans_SemiBold_16; - -String text13_content; -int text13_cursor_x = 460 * 0.75; -int text13_cursor_y = 240; -const GFXfont *text13_font = &Open_Sans_SemiBold_32; - -String text14_content; -int text14_cursor_x = 460 * 0.75; -int text14_cursor_y = 330 +35; -const GFXfont *text14_font = &Open_Sans_SemiBold_32; - -String text15_content; -int text15_cursor_x = 600 * 0.75; -int text15_cursor_y = 345; -const GFXfont *text15_font = &Open_Sans_SemiBold_32; - -String text16_content = "updates"; -int text16_cursor_x = 410; -int text16_cursor_y = 240; -const GFXfont *text16_font = &Open_Sans_SemiBold_24; - -String text17_content; -int text17_cursor_x = 473 * 0.75; -int text17_cursor_y = 470; -const GFXfont *text17_font = &Open_Sans_SemiBold_24; - -String text18_content = "backers"; -int text18_cursor_x = 600 * 0.75; -int text18_cursor_y = 470; -const GFXfont *text18_font = &Open_Sans_SemiBold_24; - -String text19_content = "Last update posted "; -int text19_cursor_x = 230 * 0.75; -int text19_cursor_y = 560; -const GFXfont *text19_font = &Open_Sans_SemiBold_16; - -void mainDraw() -{ - if (rect0_radius != -1 && rect0_fill != -1) - display.fillRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius != -1 && rect0_fill == -1) - display.drawRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius == -1 && rect0_fill != -1) - display.fillRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - else if (rect0_radius == -1 && rect0_fill == -1) - display.drawRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - - display.setFont(text1_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text1_cursor_x, text1_cursor_y); - display.print(text1_content); - //Serial.print("Text 1: "); - //Serial.println(text1_content); - - display.setFont(text2_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text2_cursor_x, text2_cursor_y); - display.print(text2_content); - //Serial.print("Text 2: "); - //Serial.println(text2_content); - - // Manual edit: - GFXcanvas1 canvas(500, 100); - canvas.setFont(text3_font); - canvas.setTextColor(BLACK, WHITE); - canvas.setTextSize(1); - canvas.setCursor(0, 20); - canvas.print(text3_content); - // canvas.drawRect(0, 0, 100, 100, BLACK); - //Serial.print("Text 3: "); - //Serial.println(text3_content); - - display.drawBitmap(50, 75, canvas.getBuffer(), 500, 100, WHITE); - - display.setFont(text4_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text4_cursor_x, text4_cursor_y); - display.print(text4_content); - //Serial.print("Text 4: ");// - //Serial.println(text4_content)//; - - display.setFont(text5_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text5_cursor_x, text5_cursor_y); - display.print(text5_content); - //Serial.print("Text 5: "); - //Serial.println(text5_content); - - display.setFont(text6_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text6_cursor_x, text6_cursor_y); - display.print(text6_content); - //Serial.print("Text 6: "); - //Serial.println(text6_content); - - display.setFont(text7_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text7_cursor_x, text7_cursor_y); - display.print(text7_content); - //Serial.print("Text 7: "); - //Serial.println(text7_content); - - display.setFont(text8_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text8_cursor_x, text8_cursor_y); - display.print(text8_content); - //Serial.print("Text 8: "); - //Serial.println(text8_content); - - display.setFont(text9_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text9_cursor_x, text9_cursor_y); - display.print(text9_content); - //Serial.print("Text 9: "); - //Serial.println(text9_content); - - if (rect1_radius != -1 && rect1_fill != -1) - display.fillRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius != -1 && rect1_fill == -1) - display.drawRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius == -1 && rect1_fill != -1) - display.fillRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - else if (rect1_radius == -1 && rect1_fill == -1) - display.drawRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - - if (rect2_radius != -1 && rect2_fill != -1) - display.fillRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius != -1 && rect2_fill == -1) - display.drawRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius == -1 && rect2_fill != -1) - display.fillRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - else if (rect2_radius == -1 && rect2_fill == -1) - display.drawRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - - if (rect3_radius != -1 && rect3_fill != -1) - display.fillRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius != -1 && rect3_fill == -1) - display.drawRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius == -1 && rect3_fill != -1) - display.fillRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - else if (rect3_radius == -1 && rect3_fill == -1) - display.drawRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - - if (line0_gradient <= line0_color && line0_thickness == 1) - { - display.drawLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color); - } - else if (line0_gradient <= line0_color && line0_thickness != 1) - { - display.drawThickLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_thickness); - } - else if (line0_gradient > line0_color && line0_thickness == 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - 1); - } - else if (line0_gradient > line0_color && line0_thickness != 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - line0_thickness); - } - display.setFont(text11_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text11_cursor_x, text11_cursor_y); - display.print(text11_content); - //Serial.print("Text 11: "); - //Serial.println(text11_content); - - display.setFont(text12_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text12_cursor_x, text12_cursor_y); - display.print(text12_content); - //Serial.print("Text 12: "); - //Serial.println(text12_content); - - display.setFont(text13_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text13_cursor_x, text13_cursor_y); - display.print(text13_content); - //Serial.print("Text 13: "); - //Serial.println(text13_content); - - display.setFont(text14_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text14_cursor_x, text14_cursor_y); - display.print(text14_content); - //Serial.print("Text 14: "); - //Serial.println(text14_content); - - display.setFont(text15_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text15_cursor_x, text15_cursor_y); - display.print(text15_content); - //Serial.print("Text 15: "); - //Serial.println(text15_content); - - display.setFont(text16_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text16_cursor_x, text16_cursor_y); - display.print(text16_content); - //Serial.print("Text 16: "); - //Serial.println(text16_content); - - display.setFont(text17_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text17_cursor_x, text17_cursor_y); - display.print(text17_content); - //Serial.print("Text 17: "); - //Serial.println(text17_content); - - display.setFont(text18_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text18_cursor_x, text18_cursor_y); - display.print(text18_content); - //Serial.print("Text 18: "); - //Serial.println(text18_content); - - display.setFont(text19_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text19_cursor_x, text19_cursor_y); - display.print(text19_content); - //Serial.print("Text 19: "); - //Serial.println(text19_content); -} diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crypto_Currency_Checker/Inkplate4TEMPERA_Crypto_Currency_Checker.ino b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crypto_Currency_Checker/Inkplate4TEMPERA_Crypto_Currency_Checker.ino index 9f3ea3d72..235a7448f 100644 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crypto_Currency_Checker/Inkplate4TEMPERA_Crypto_Currency_Checker.ino +++ b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Crypto_Currency_Checker/Inkplate4TEMPERA_Crypto_Currency_Checker.ino @@ -19,7 +19,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Google_Calendar/Inkplate4TEMPERA_Google_Calendar.ino b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Google_Calendar/Inkplate4TEMPERA_Google_Calendar.ino index 6790a3b79..067c3be0d 100644 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Google_Calendar/Inkplate4TEMPERA_Google_Calendar.ino +++ b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Google_Calendar/Inkplate4TEMPERA_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate4TEMPERA_Google_Calendar for Soldered Inkplate 4 Tempera +Inkplate4TEMPERA_Google_Calendar for Soldered Inkplate 4 Tempera -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Image_Uploader/Inkplate4TEMPERA_Image_Uploader.ino b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Image_Uploader/Inkplate4TEMPERA_Image_Uploader.ino index ef0cdeb87..1e94eda3e 100644 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Image_Uploader/Inkplate4TEMPERA_Image_Uploader.ino +++ b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_Image_Uploader/Inkplate4TEMPERA_Image_Uploader.ino @@ -1,9 +1,9 @@ /* - Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 10 + Inkplate4TEMPERA Image Uploader Example + Compatible with Soldered Inkplate 4TEMPERA -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 4TEMPERA diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Image_Slideshow/Inkplate4TEMPERA_OpenAI_Image_Slideshow.ino b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Image_Slideshow/Inkplate4TEMPERA_OpenAI_Image_Slideshow.ino index ba942d978..515e6ec0e 100644 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Image_Slideshow/Inkplate4TEMPERA_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Image_Slideshow/Inkplate4TEMPERA_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate4TEMPERA OpenAI Image slideshow - Compatible with Soldered Inkplate 4 TEMPERA + Compatible with Soldered Inkplate 4 TEMPERA -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 4 TEMPERA. Select "Soldered Inkplate4TEMPERA" from Tools -> Board menu. diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Text_Prompt/Inkplate4TEMPERA_OpenAI_Text_Prompt.ino b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Text_Prompt/Inkplate4TEMPERA_OpenAI_Text_Prompt.ino index c5fbeb8d3..a57b90926 100644 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Text_Prompt/Inkplate4TEMPERA_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenAI_Text_Prompt/Inkplate4TEMPERA_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate4TEMPERA OpenAI text prompt generator - Compatible with Soldered Inkplate 4TEMPERA + Compatible with Soldered Inkplate 4TEMPERA -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 4TEMPERA. Select "Soldered Inkplate4TEMPERA" from Tools -> Board menu. diff --git a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenMeteo_Weather_Station/Inkplate4TEMPERA_OpenMeteo_Weather_Station.ino b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenMeteo_Weather_Station/Inkplate4TEMPERA_OpenMeteo_Weather_Station.ino index 6a4afb8dc..6eacf9d96 100644 --- a/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenMeteo_Weather_Station/Inkplate4TEMPERA_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate4TEMPERA/Projects/Inkplate4TEMPERA_OpenMeteo_Weather_Station/Inkplate4TEMPERA_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate4TEMPERA OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 4 Tempera + Compatible with Soldered Inkplate 4 Tempera -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate5/Advanced/DeepSleep/Inkplate5_Simple_Deep_Sleep/Inkplate5_Simple_Deep_Sleep.ino b/examples/Inkplate5/Advanced/DeepSleep/Inkplate5_Simple_Deep_Sleep/Inkplate5_Simple_Deep_Sleep.ino index 278b875fa..2935108e7 100644 --- a/examples/Inkplate5/Advanced/DeepSleep/Inkplate5_Simple_Deep_Sleep/Inkplate5_Simple_Deep_Sleep.ino +++ b/examples/Inkplate5/Advanced/DeepSleep/Inkplate5_Simple_Deep_Sleep/Inkplate5_Simple_Deep_Sleep.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Battery_Voltage/Inkplate5_Read_Battery_Voltage.ino b/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Battery_Voltage/Inkplate5_Read_Battery_Voltage.ino index 0adbf6ace..cccaf357e 100644 --- a/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Battery_Voltage/Inkplate5_Read_Battery_Voltage.ino +++ b/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Battery_Voltage/Inkplate5_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Temperature/Inkplate5_Read_Temperature.ino b/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Temperature/Inkplate5_Read_Temperature.ino index f23bc2c0a..e4260ff87 100644 --- a/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Temperature/Inkplate5_Read_Temperature.ino +++ b/examples/Inkplate5/Advanced/Other/Inkplate5_Read_Temperature/Inkplate5_Read_Temperature.ino @@ -14,7 +14,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5/Basic/Inkplate5_Black_And_White/logo.h b/examples/Inkplate5/Basic/Inkplate5_Black_And_White/logo.h index 9bb7f50a5..2ee928604 100644 --- a/examples/Inkplate5/Basic/Inkplate5_Black_And_White/logo.h +++ b/examples/Inkplate5/Basic/Inkplate5_Black_And_White/logo.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t logo[] PROGMEM = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, diff --git a/examples/Inkplate5/Basic/Inkplate5_Grayscale/image.h b/examples/Inkplate5/Basic/Inkplate5_Grayscale/image.h index 171c166d7..2d0485366 100644 --- a/examples/Inkplate5/Basic/Inkplate5_Grayscale/image.h +++ b/examples/Inkplate5/Basic/Inkplate5_Grayscale/image.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t picture1[] = { 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0xaa, 0xaa, 0x99, 0x99, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xa9, 0x99, 0x99, 0xaa, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0x9a, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x99, 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x9a, 0xaa, 0xaa, 0xba, 0xaa, 0xba, 0x9a, 0xba, 0xaa, 0xa9, 0x98, 0x88, 0x87, 0x77, 0x88, 0x88, 0x77, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x78, 0x88, 0x87, 0x77, 0x77, diff --git a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h b/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h deleted file mode 100644 index 7f2ed9e6b..000000000 --- a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h +++ /dev/null @@ -1,203 +0,0 @@ -// 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 Open_Sans_SemiBold_16Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xDB, 0x6D, 0xB6, 0x03, 0x60, // '!' - 0xDB, 0x6D, 0xB6, // '"' - 0x09, 0x03, 0x20, 0x6C, 0x3F, 0xE1, 0x20, 0x24, 0x04, 0x87, 0xFC, 0x36, 0x04, 0xC0, 0x90, 0x12, 0x00, // '#' - 0x10, 0x10, 0x7C, 0xFE, 0xD0, 0xD0, 0x78, 0x3C, 0x16, 0x96, 0xFE, 0xFC, 0x10, 0x10, // '$' - 0x70, 0xC6, 0x84, 0x26, 0x61, 0x32, 0x09, 0xB0, 0x69, 0x71, 0xD2, 0xC1, 0xB2, 0x09, 0x90, 0xCC, 0x84, 0x2C, - 0x61, 0xC0, // '%' - 0x3C, 0x07, 0xE0, 0x66, 0x06, 0x60, 0x6C, 0x03, 0x80, 0x78, 0xCC, 0xCC, 0xC7, 0x8C, 0x38, 0xFF, 0x87, 0xCC, // '&' - 0xDB, 0x60, // ''' - 0x23, 0x11, 0x8C, 0x42, 0x10, 0x84, 0x31, 0x84, 0x30, 0x80, // '(' - 0x43, 0x08, 0x63, 0x08, 0x42, 0x10, 0x8C, 0x62, 0x31, 0x00, // ')' - 0x10, 0x10, 0xD6, 0xFE, 0x38, 0x6C, 0x44, // '*' - 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, // '+' - 0x66, 0x44, // ',' - 0xEE, // '-' - 0xD8, // '.' - 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x00, // '/' - 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, // '0' - 0x18, 0xEF, 0x96, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, // '1' - 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x08, 0x10, 0x20, 0xC0, 0xFE, 0xFE, // '2' - 0x7C, 0xFE, 0x86, 0x06, 0x04, 0x78, 0x7C, 0x06, 0x06, 0x06, 0xFE, 0xF8, // '3' - 0x06, 0x03, 0x80, 0xE0, 0x78, 0x16, 0x0D, 0x86, 0x61, 0x18, 0xFF, 0xBF, 0xE0, 0x60, 0x18, // '4' - 0x7C, 0xFC, 0xC0, 0xC0, 0xFC, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFC, 0xF8, // '5' - 0x1E, 0x7E, 0x60, 0xC0, 0xFC, 0xFE, 0xC6, 0xC2, 0xC2, 0xC6, 0x7E, 0x3C, // '6' - 0xFE, 0xFE, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, // '7' - 0x7C, 0xFE, 0xC6, 0xC6, 0x64, 0x38, 0x7C, 0xC6, 0x82, 0xC6, 0xFE, 0x7C, // '8' - 0x78, 0xFC, 0xC6, 0xC6, 0x86, 0xC6, 0xFE, 0x7E, 0x06, 0x0C, 0xFC, 0xF0, // '9' - 0xD8, 0x00, 0x06, 0xC0, // ':' - 0x66, 0x00, 0x00, 0x06, 0x64, 0x40, // ';' - 0x02, 0x0E, 0x38, 0xE0, 0xC0, 0x38, 0x0E, 0x02, // '<' - 0xFE, 0x00, 0x00, 0x00, 0xFE, // '=' - 0x80, 0xE0, 0x38, 0x0E, 0x06, 0x38, 0xE0, 0x80, // '>' - 0x78, 0xFC, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, // '?' - 0x0F, 0x81, 0xC6, 0x18, 0x08, 0x9F, 0x6D, 0x99, 0x4C, 0xCA, 0x46, 0x52, 0x32, 0x99, 0xB6, 0x77, 0x10, 0x00, - 0x61, 0x01, 0xF8, 0x00, // '@' - 0x0E, 0x00, 0xE0, 0x0A, 0x01, 0xB0, 0x1B, 0x03, 0x18, 0x31, 0x83, 0xF8, 0x7F, 0xC6, 0x0C, 0x60, 0xCC, 0x06, // 'A' - 0xFC, 0x7F, 0x21, 0xD0, 0x68, 0x67, 0xF3, 0xF9, 0x06, 0x83, 0x41, 0xBF, 0xDF, 0x80, // 'B' - 0x1F, 0x3F, 0x98, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x1F, 0xC3, 0xE0, // 'C' - 0xFC, 0x3F, 0x88, 0x72, 0x0E, 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x83, 0xA1, 0xCF, 0xE3, 0xF0, // 'D' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x03, 0xF7, 0xE0, // 'E' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x02, 0x04, 0x00, // 'F' - 0x1F, 0x87, 0xF1, 0xC0, 0x70, 0x0C, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE0, 0xCE, 0x19, 0xFF, 0x0F, 0xC0, // 'G' - 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x81, 0xBF, 0xEF, 0xFA, 0x06, 0x81, 0xA0, 0x68, 0x1A, 0x06, // 'H' - 0xAA, 0xAA, 0xAA, // 'I' - 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x63, 0x7B, 0x80, // 'J' - 0xC3, 0x30, 0xCC, 0x63, 0x30, 0xD8, 0x36, 0x0F, 0x83, 0x30, 0xC6, 0x31, 0x8C, 0x33, 0x06, // 'K' - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xFE, // 'L' - 0xC0, 0x6E, 0x0E, 0xE0, 0xEA, 0x0A, 0xB1, 0xAB, 0x12, 0x91, 0x29, 0xB2, 0x9A, 0x28, 0xE2, 0x8E, 0x28, 0xC2, // 'M' - 0xC0, 0xB8, 0x2E, 0x0A, 0xC2, 0xB8, 0xA6, 0x28, 0xCA, 0x3A, 0x86, 0xA0, 0xE8, 0x3A, 0x06, // 'N' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0xC1, 0xF0, // 'O' - 0xF8, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x80, 0x80, 0x80, 0x80, // 'P' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0x81, 0xF0, - 0x03, 0x80, 0x18, 0x00, 0xC0, // 'Q' - 0xFC, 0x3F, 0x8C, 0x73, 0x0C, 0xC3, 0x31, 0xCF, 0xE3, 0xF0, 0xCC, 0x31, 0x8C, 0x33, 0x0E, // 'R' - 0x7C, 0xFE, 0xC2, 0xC0, 0xE0, 0x78, 0x1C, 0x06, 0x06, 0x86, 0xFE, 0xFC, // 'S' - 0xFF, 0xBF, 0xE0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'T' - 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xCC, 0x31, 0xFE, 0x0F, 0x00, // 'U' - 0xC0, 0xD8, 0x11, 0x86, 0x30, 0xC6, 0x10, 0x66, 0x0C, 0xC1, 0x90, 0x1E, 0x03, 0xC0, 0x70, 0x06, 0x00, // 'V' - 0xC3, 0x86, 0xC3, 0x86, 0x63, 0x8C, 0x62, 0x8C, 0x66, 0xCC, 0x66, 0xCC, 0x24, 0xC8, 0x34, 0x58, 0x3C, 0x78, - 0x3C, 0x78, 0x18, 0x30, 0x18, 0x30, // 'W' - 0x61, 0x8C, 0x30, 0xCC, 0x19, 0x81, 0xE0, 0x18, 0x07, 0x80, 0xF0, 0x33, 0x06, 0x61, 0x86, 0x60, 0x60, // 'X' - 0xC1, 0x98, 0xC6, 0x30, 0xD8, 0x36, 0x07, 0x01, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'Y' - 0xFE, 0x7F, 0x01, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x3F, 0xDF, 0xE0, // 'Z' - 0xF6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xC0, // '[' - 0xC0, 0x81, 0x83, 0x02, 0x06, 0x0C, 0x08, 0x18, 0x30, 0x20, 0x60, // '\' - 0xF1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1B, 0xC0, // ']' - 0x08, 0x07, 0x01, 0x40, 0x98, 0x22, 0x10, 0xCC, 0x10, // '^' - 0xFE, // '_' - 0xC4, 0x20, // '`' - 0x7C, 0x7E, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xFE, 0x76, // 'a' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB8, 0xDF, 0xCD, 0xE0, // 'b' - 0x3C, 0xFB, 0x06, 0x0C, 0x18, 0x30, 0x3E, 0x3C, // 'c' - 0x03, 0x01, 0x80, 0xC0, 0x67, 0xB3, 0xFB, 0x1D, 0x86, 0xC3, 0x61, 0xB1, 0xDF, 0xE7, 0xB0, // 'd' - 0x3C, 0x7E, 0xC6, 0xFE, 0xFE, 0xC0, 0xC0, 0x7E, 0x3C, // 'e' - 0x1E, 0x3C, 0x30, 0x30, 0x7C, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // 'f' - 0x3F, 0x99, 0x86, 0x31, 0x8C, 0x62, 0x0F, 0x06, 0x01, 0xFC, 0x7F, 0x30, 0x6C, 0x1B, 0x0C, 0x7E, 0x00, // 'g' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x30, // 'h' - 0xD8, 0x0D, 0xB6, 0xDB, 0x6C, // 'i' - 0x31, 0x80, 0x03, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDE, 0xE0, // 'j' - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x66, 0x63, 0x61, 0xB0, 0xF8, 0x7C, 0x33, 0x18, 0xCC, 0x70, // 'k' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6C, // 'l' - 0xDC, 0xF3, 0xFF, 0xEE, 0x71, 0xB0, 0xC6, 0xC2, 0x1B, 0x08, 0x6C, 0x21, 0xB0, 0x86, 0xC2, 0x18, // 'm' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x00, // 'n' - 0x3C, 0x3F, 0x30, 0xD8, 0x6C, 0x36, 0x1B, 0x0C, 0xFC, 0x3C, 0x00, // 'o' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x8D, 0xFC, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x00, // 'p' - 0x7B, 0x3F, 0xB1, 0xD8, 0x6C, 0x36, 0x1B, 0x1D, 0xFE, 0x7B, 0x01, 0x80, 0xC0, 0x60, 0x30, // 'q' - 0xDD, 0xFB, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 'r' - 0x79, 0xFB, 0x17, 0x07, 0x81, 0x83, 0x7E, 0xF8, // 's' - 0x20, 0x41, 0xF7, 0xE6, 0x0C, 0x18, 0x30, 0x60, 0x78, 0xF0, // 't' - 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x1C, 0xFE, 0x7B, 0x00, // 'u' - 0xC1, 0x90, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x40, 0x70, 0x1C, 0x00, // 'v' - 0xC7, 0x19, 0x1C, 0x46, 0x53, 0x19, 0x4C, 0x6D, 0xB0, 0xB6, 0x83, 0x8E, 0x0E, 0x38, 0x38, 0xE0, // 'w' - 0x63, 0x18, 0xC3, 0x60, 0x70, 0x1C, 0x07, 0x03, 0x61, 0x8C, 0x63, 0x00, // 'x' - 0xC1, 0x98, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x60, 0x70, 0x1C, 0x06, 0x01, 0x83, 0xC0, 0xE0, 0x00, // 'y' - 0xFD, 0xF8, 0x30, 0xC3, 0x0C, 0x30, 0x7E, 0xFC, // 'z' - 0x1C, 0x70, 0xC1, 0x83, 0x06, 0x38, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x03, 0x07, 0x00, // '{' - 0xAA, 0xAA, 0xAA, 0xAA, 0x80, // '|' - 0xE0, 0xE0, 0xC1, 0x83, 0x06, 0x07, 0x1C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_16Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 5, 0, 0}, // ' ' - {1, 3, 12, 5, 1, -12}, // '!' - {6, 6, 4, 8, 1, -12}, // '"' - {9, 11, 12, 11, 0, -12}, // '#' - {26, 8, 14, 10, 1, -13}, // '$' - {40, 13, 12, 15, 1, -12}, // '%' - {60, 12, 12, 13, 1, -12}, // '&' - {78, 3, 4, 5, 1, -12}, // ''' - {80, 5, 15, 6, 1, -12}, // '(' - {90, 5, 15, 6, 0, -12}, // ')' - {100, 8, 7, 10, 1, -13}, // '*' - {107, 8, 7, 10, 1, -9}, // '+' - {114, 4, 4, 5, 0, -2}, // ',' - {116, 4, 2, 6, 1, -5}, // '-' - {117, 3, 2, 5, 1, -2}, // '.' - {118, 7, 12, 7, 0, -12}, // '/' - {129, 8, 12, 10, 1, -12}, // '0' - {141, 6, 12, 10, 1, -12}, // '1' - {150, 8, 12, 10, 1, -12}, // '2' - {162, 8, 12, 10, 1, -12}, // '3' - {174, 10, 12, 10, 0, -12}, // '4' - {189, 8, 12, 10, 1, -12}, // '5' - {201, 8, 12, 10, 1, -12}, // '6' - {213, 8, 12, 10, 1, -12}, // '7' - {225, 8, 12, 10, 1, -12}, // '8' - {237, 8, 12, 10, 1, -12}, // '9' - {249, 3, 9, 5, 1, -9}, // ':' - {253, 4, 11, 5, 0, -9}, // ';' - {259, 8, 8, 10, 1, -10}, // '<' - {267, 8, 5, 10, 1, -8}, // '=' - {272, 8, 8, 10, 1, -10}, // '>' - {280, 8, 12, 8, 0, -12}, // '?' - {292, 13, 13, 15, 1, -12}, // '@' - {314, 12, 12, 12, 0, -12}, // 'A' - {332, 9, 12, 12, 2, -12}, // 'B' - {346, 9, 12, 11, 1, -12}, // 'C' - {360, 10, 12, 13, 2, -12}, // 'D' - {375, 7, 12, 10, 2, -12}, // 'E' - {386, 7, 12, 10, 2, -12}, // 'F' - {397, 11, 12, 13, 1, -12}, // 'G' - {414, 10, 12, 13, 2, -12}, // 'H' - {429, 2, 12, 6, 2, -12}, // 'I' - {432, 5, 15, 6, -1, -12}, // 'J' - {442, 10, 12, 11, 1, -12}, // 'K' - {457, 8, 12, 10, 2, -12}, // 'L' - {469, 12, 12, 16, 2, -12}, // 'M' - {487, 10, 12, 14, 2, -12}, // 'N' - {502, 12, 12, 14, 1, -12}, // 'O' - {520, 8, 12, 11, 2, -12}, // 'P' - {532, 12, 15, 14, 1, -12}, // 'Q' - {555, 10, 12, 11, 1, -12}, // 'R' - {570, 8, 12, 10, 1, -12}, // 'S' - {582, 10, 12, 10, 0, -12}, // 'T' - {597, 11, 12, 13, 1, -12}, // 'U' - {614, 11, 12, 11, 0, -12}, // 'V' - {631, 16, 12, 16, 0, -12}, // 'W' - {655, 11, 12, 11, 0, -12}, // 'X' - {672, 10, 12, 10, 0, -12}, // 'Y' - {687, 9, 12, 10, 1, -12}, // 'Z' - {701, 5, 15, 6, 1, -12}, // '[' - {711, 7, 12, 7, 0, -12}, // '\' - {722, 5, 15, 6, 0, -12}, // ']' - {732, 10, 7, 10, 0, -12}, // '^' - {741, 8, 1, 8, 0, 1}, // '_' - {742, 4, 3, 10, 3, -13}, // '`' - {744, 8, 9, 10, 1, -9}, // 'a' - {753, 9, 13, 11, 1, -13}, // 'b' - {768, 7, 9, 9, 1, -9}, // 'c' - {776, 9, 13, 11, 1, -13}, // 'd' - {791, 8, 9, 10, 1, -9}, // 'e' - {800, 8, 13, 7, 0, -13}, // 'f' - {813, 10, 13, 10, 0, -9}, // 'g' - {830, 9, 13, 11, 1, -13}, // 'h' - {845, 3, 13, 5, 1, -13}, // 'i' - {850, 5, 17, 5, -1, -13}, // 'j' - {861, 9, 13, 10, 1, -13}, // 'k' - {876, 3, 13, 5, 1, -13}, // 'l' - {881, 14, 9, 16, 1, -9}, // 'm' - {897, 9, 9, 11, 1, -9}, // 'n' - {908, 9, 9, 11, 1, -9}, // 'o' - {919, 9, 13, 11, 1, -9}, // 'p' - {934, 9, 13, 11, 1, -9}, // 'q' - {949, 7, 9, 8, 1, -9}, // 'r' - {957, 7, 9, 9, 1, -9}, // 's' - {965, 7, 11, 7, 0, -11}, // 't' - {975, 9, 9, 11, 1, -9}, // 'u' - {986, 10, 9, 10, 0, -9}, // 'v' - {998, 14, 9, 14, 0, -9}, // 'w' - {1014, 10, 9, 10, 0, -9}, // 'x' - {1026, 10, 13, 10, 0, -9}, // 'y' - {1043, 7, 9, 9, 1, -9}, // 'z' - {1051, 7, 15, 7, 0, -12}, // '{' - {1065, 2, 17, 10, 4, -13}, // '|' - {1070, 7, 15, 7, 0, -12} // '}' -}; -const GFXfont Open_Sans_SemiBold_16 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_16Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_16Glyphs, 0x20, 0x7E, 23}; \ No newline at end of file diff --git a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h b/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h deleted file mode 100644 index 0fa23e60d..000000000 --- a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h +++ /dev/null @@ -1,276 +0,0 @@ -// 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 Open_Sans_SemiBold_24Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x0E, 0xEE, 0xE0, // '!' - 0x66, 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x30, // '"' - 0x06, 0x30, 0x0C, 0x60, 0x18, 0xC0, 0x71, 0x80, 0xC6, 0x0F, 0xFF, 0x9F, 0xFF, 0x06, 0x30, 0x18, 0xE0, 0x31, - 0x83, 0xFF, 0xF7, 0xFF, 0xE3, 0x8C, 0x06, 0x38, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, // '#' - 0x06, 0x00, 0x30, 0x07, 0xF0, 0xFF, 0xC7, 0x66, 0x73, 0x03, 0x98, 0x0E, 0xC0, 0x7E, 0x00, 0xFC, 0x01, 0xF8, - 0x0D, 0xC0, 0x67, 0x03, 0x3B, 0x1B, 0x9F, 0xFC, 0x7F, 0x80, 0x30, 0x01, 0x80, // '$' - 0x3C, 0x06, 0x07, 0xE0, 0xE0, 0xE6, 0x0C, 0x0C, 0x71, 0x80, 0xC7, 0x18, 0x0C, 0x73, 0x00, 0xC7, 0x70, 0x0E, - 0x66, 0x78, 0x7E, 0xEF, 0xC3, 0xCC, 0xCE, 0x01, 0xDC, 0x60, 0x19, 0xC6, 0x03, 0x1C, 0x60, 0x71, 0xC6, 0x06, - 0x0C, 0xE0, 0xE0, 0xFC, 0x0C, 0x07, 0x80, // '%' - 0x0F, 0x80, 0x0F, 0xF0, 0x03, 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x0E, 0x70, 0x01, 0xFC, 0x00, 0x3C, 0x00, - 0x3F, 0x07, 0x1F, 0xE1, 0xCF, 0x3C, 0xE3, 0x83, 0xB8, 0xE0, 0x7C, 0x38, 0x0F, 0x07, 0x0F, 0xC1, 0xFF, 0xB8, - 0x1F, 0x87, 0x00, // '&' - 0xDB, 0x6D, 0x80, // ''' - 0x1C, 0x30, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xE0, 0xC1, - 0xC0, // '(' - 0xE0, 0xC1, 0xC1, 0x83, 0x83, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x71, 0xC3, 0x0E, - 0x00, // ')' - 0x0E, 0x00, 0xE0, 0x0E, 0x08, 0x42, 0xFF, 0xEF, 0xFE, 0x0E, 0x01, 0xB0, 0x3B, 0x83, 0x18, 0x11, 0x00, // '*' - 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x7F, 0xFB, 0xFF, 0xC0, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, // '+' - 0x73, 0x39, 0xCC, 0x60, // ',' - 0xFD, 0xF8, // '-' - 0xEE, 0xEE, // '.' - 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x07, - 0x01, 0x80, 0xE0, 0x00, // '/' - 0x1F, 0x01, 0xFE, 0x1C, 0x38, 0xE1, 0xCE, 0x06, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x71, 0xC3, 0x87, 0xF8, 0x0F, 0x80, // '0' - 0x0E, 0x1E, 0x3E, 0xF6, 0xE6, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // '1' - 0x1F, 0x83, 0xFE, 0x1C, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF0, // '2' - 0x3F, 0x87, 0xFE, 0x18, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0x00, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x7B, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '3' - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x1B, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0x38, 0x0E, 0x70, 0x38, 0xE0, 0x61, - 0xC1, 0x83, 0x87, 0xFF, 0xEF, 0xFF, 0xC0, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, // '4' - 0x7F, 0xE3, 0xFF, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x73, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '5' - 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x9E, 0x1F, 0xFC, 0xF0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x39, 0xE3, 0x87, 0xF8, 0x0F, 0x80, // '6' - 0xFF, 0xF7, 0xFF, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, - 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x38, 0x00, // '7' - 0x1F, 0x81, 0xFE, 0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x38, 0x71, 0xE7, 0x07, 0xF0, 0x1F, 0x83, 0xDE, 0x1C, 0x39, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0xC3, 0x8F, 0xFC, 0x1F, 0x80, // '8' - 0x1F, 0x01, 0xFE, 0x1C, 0x79, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0x70, 0xF3, 0xFF, 0x87, 0xDC, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x0F, 0x0F, 0xF0, 0x7E, 0x00, // '9' - 0xEE, 0xEE, 0x00, 0x00, 0x0E, 0xEE, 0xE0, // ':' - 0x73, 0x9C, 0xE0, 0x00, 0x00, 0x00, 0x1C, 0xE6, 0x73, 0x18, // ';' - 0x00, 0x10, 0x03, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3C, - 0x00, 0x20, // '<' - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, // '=' - 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, 0x3C, 0x01, - 0x00, 0x00, // '>' - 0x3F, 0x1F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x80, 0x70, 0x0E, 0x00, 0x00, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, // '?' - 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0x80, 0xE0, 0x30, 0x01, 0x83, 0x00, 0x0E, 0x38, 0x7E, 0x31, 0x8F, 0xF1, - 0x8C, 0x61, 0x86, 0xE7, 0x0C, 0x36, 0x30, 0x63, 0xB1, 0x83, 0x19, 0xCE, 0x38, 0xC6, 0x3F, 0xFC, 0x30, 0xF1, - 0xC1, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0x00, // '@' - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x66, 0x00, 0x73, 0x80, 0x39, 0xC0, 0x18, 0x60, 0x1C, - 0x38, 0x0E, 0x1C, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0x81, 0xC3, 0x80, 0x71, 0xC0, 0x38, 0xC0, 0x1C, 0xE0, 0x07, - 0x00, // 'A' - 0xFF, 0x83, 0xFF, 0x8E, 0x0F, 0x38, 0x1C, 0xE0, 0x73, 0x81, 0xCE, 0x0E, 0x3F, 0xF0, 0xFF, 0xE3, 0x83, 0xCE, - 0x07, 0x38, 0x0E, 0xE0, 0x3B, 0x81, 0xEE, 0x0F, 0x3F, 0xF8, 0xFF, 0xC0, // 'B' - 0x07, 0xF0, 0x7F, 0xE3, 0xC1, 0x8E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x87, 0xFE, 0x07, 0xF0, // 'C' - 0xFF, 0x80, 0xFF, 0xE0, 0xE0, 0xF0, 0xE0, 0x38, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x38, 0xE0, 0xF0, 0xFF, 0xE0, 0xFF, 0x80, // 'D' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0xFC, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'E' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'F' - 0x03, 0xF8, 0x1F, 0xF8, 0xF8, 0x21, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0xFD, 0xC1, - 0xF9, 0x80, 0x73, 0x80, 0xE7, 0x01, 0xCF, 0x03, 0x8F, 0x07, 0x0F, 0xFE, 0x07, 0xF8, // 'G' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1C, // 'H' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, // 'I' - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x1C, 0xFC, 0xF0, // 'J' - 0xE0, 0x73, 0x83, 0xCE, 0x0E, 0x38, 0x70, 0xE3, 0x83, 0x9C, 0x0E, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xDC, 0x0E, - 0x78, 0x38, 0xE0, 0xE1, 0xC3, 0x87, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x78, // 'K' - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'L' - 0xF0, 0x03, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7C, 0x03, 0xEF, 0xC0, 0xFD, 0xD8, 0x1B, 0xBB, 0x07, 0x77, 0x70, - 0xCE, 0xE6, 0x19, 0xDC, 0xC7, 0x3B, 0x9C, 0xC7, 0x71, 0x98, 0xEE, 0x3F, 0x1D, 0xC7, 0xC3, 0xB8, 0x78, 0x77, - 0x0F, 0x0E, 0xE1, 0xC1, 0xC0, // 'M' - 0xF0, 0x0E, 0xF8, 0x0E, 0xF8, 0x0E, 0xFC, 0x0E, 0xFE, 0x0E, 0xEE, 0x0E, 0xE7, 0x0E, 0xE7, 0x0E, 0xE3, 0x8E, - 0xE1, 0xCE, 0xE1, 0xCE, 0xE0, 0xEE, 0xE0, 0xFE, 0xE0, 0x7E, 0xE0, 0x3E, 0xE0, 0x3E, 0xE0, 0x1E, // 'N' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, // 'O' - 0xFF, 0x87, 0xFF, 0x38, 0x39, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x3C, 0xFF, 0xC7, 0xF8, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x00, // 'P' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, // 'Q' - 0xFF, 0x03, 0xFF, 0x0E, 0x1E, 0x38, 0x38, 0xE0, 0xE3, 0x83, 0x8E, 0x0E, 0x38, 0x78, 0xFF, 0xC3, 0xFC, 0x0E, - 0x38, 0x38, 0xE0, 0xE1, 0xC3, 0x83, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x70, // 'R' - 0x1F, 0x87, 0xFC, 0x70, 0x4E, 0x00, 0xE0, 0x0E, 0x00, 0x78, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0xC1, 0xCF, 0xFC, 0x7F, 0x00, // 'S' - 0xFF, 0xFD, 0xFF, 0xF8, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'T' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1D, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xCE, 0x07, 0x1E, 0x1E, 0x1F, 0xF8, 0x0F, 0xC0, // 'U' - 0xE0, 0x0E, 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x1C, 0x30, 0x18, 0x38, 0x38, 0x38, 0x38, 0x18, 0x30, 0x1C, 0x70, - 0x1C, 0x70, 0x0C, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x06, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, // 'V' - 0xE0, 0x38, 0x0E, 0x60, 0x38, 0x0C, 0x70, 0x7C, 0x1C, 0x70, 0x7C, 0x1C, 0x70, 0x6C, 0x1C, 0x30, 0xEC, 0x18, - 0x38, 0xEE, 0x38, 0x38, 0xCE, 0x38, 0x38, 0xC6, 0x38, 0x19, 0xC7, 0x30, 0x1D, 0xC7, 0x70, 0x1D, 0x83, 0x70, - 0x1D, 0x83, 0x70, 0x0F, 0x83, 0xE0, 0x0F, 0x01, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xC0, // 'W' - 0x70, 0x1C, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0xC0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x38, 0x38, 0x70, 0x1C, 0xE0, 0x1E, // 'X' - 0xE0, 0x1C, 0xE0, 0x71, 0xC0, 0xE1, 0xC3, 0x83, 0x87, 0x03, 0x9C, 0x07, 0x38, 0x07, 0xE0, 0x07, 0x80, 0x0F, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'Y' - 0xFF, 0xF7, 0xFF, 0x80, 0x38, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0x80, 0x1F, 0xFE, 0xFF, 0xF0, // 'Z' - 0xFB, 0xEC, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3E, 0xF8, // '[' - 0xE0, 0x18, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, // '\' - 0xFB, 0xE1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0xBE, 0xF8, // ']' - 0x06, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x60, 0x1D, 0x80, 0x63, 0x03, 0x8C, 0x0C, 0x18, 0x30, 0x61, 0x80, 0xC6, - 0x03, 0x00, // '^' - 0xFF, 0xDF, 0xF8, // '_' - 0xF0, 0xE0, 0xE0, 0xE0, // '`' - 0x1F, 0x83, 0xFC, 0x30, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x7F, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'a' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x77, 0xC3, 0xFF, 0x1E, 0x1C, 0xE0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x83, 0x9E, 0x1C, 0xDF, 0xC6, 0x7C, 0x00, // 'b' - 0x0F, 0xC7, 0xF9, 0xE0, 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE1, 0x1F, 0xE1, 0xF8, // 'c' - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x0F, 0xB8, 0xFF, 0xCE, 0x1E, 0x70, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x39, 0xC1, 0xCE, 0x1E, 0x3F, 0xF0, 0xF9, 0x80, // 'd' - 0x0F, 0x81, 0xFE, 0x1C, 0x38, 0xE0, 0xEE, 0x07, 0x7F, 0xFB, 0xFF, 0xDC, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x08, - 0x7F, 0xC0, 0xFC, 0x00, // 'e' - 0x07, 0xC3, 0xF0, 0x70, 0x0C, 0x01, 0x80, 0xFF, 0x3F, 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, - 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, // 'f' - 0x0F, 0xF8, 0xFF, 0xE3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x83, 0x8E, 0x0F, 0xF0, 0x1F, 0x80, 0xC0, 0x03, - 0x00, 0x0F, 0xF8, 0x3F, 0xF1, 0xC1, 0xCE, 0x03, 0x38, 0x0C, 0xE0, 0x71, 0xFF, 0x83, 0xF8, 0x00, // 'g' - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0xF8, 0xFF, 0xCF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, // 'h' - 0xEE, 0xE0, 0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'i' - 0x1C, 0x38, 0x70, 0x00, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, - 0xC3, 0xBE, 0x78, // 'j' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x73, 0x87, 0x1C, 0x70, 0xE7, 0x07, 0x70, 0x3F, 0x01, - 0xFC, 0x0F, 0xF0, 0x73, 0x83, 0x8E, 0x1C, 0x38, 0xE0, 0xE7, 0x07, 0x80, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xCF, 0x8F, 0x8D, 0xFD, 0xFC, 0xF1, 0xF0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, - 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xE0, // 'm' - 0xCF, 0x8D, 0xFC, 0xF0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xE0, // 'n' - 0x0F, 0x80, 0xFF, 0x87, 0x8F, 0x1C, 0x1C, 0xE0, 0x3B, 0x80, 0xEE, 0x03, 0xB8, 0x0E, 0xE0, 0x39, 0xC1, 0xC7, - 0x8F, 0x0F, 0xF8, 0x0F, 0x80, // 'o' - 0xCF, 0x86, 0xFE, 0x3C, 0x39, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x07, 0x3C, 0x39, - 0xFF, 0x8E, 0xF8, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, // 'p' - 0x1F, 0x31, 0xFF, 0x9C, 0x3C, 0xE0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x73, 0x83, 0x9C, 0x3C, - 0x7F, 0xE1, 0xF7, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, // 'q' - 0xCF, 0x6F, 0x3F, 0x9E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, // 'r' - 0x3F, 0x8F, 0xF3, 0x82, 0x70, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x3C, 0x01, 0xC0, 0x3B, 0x07, 0x7F, 0xC7, 0xF0, // 's' - 0x18, 0x0C, 0x0E, 0x0F, 0xEF, 0xF1, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0x7C, 0x1E, // 't' - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'u' - 0xE0, 0x39, 0x80, 0xC7, 0x07, 0x1C, 0x1C, 0x30, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xD8, 0x03, 0xE0, 0x07, 0x00, // 'v' - 0xE0, 0xF0, 0x73, 0x07, 0x83, 0x1C, 0x3C, 0x38, 0xE3, 0xF1, 0xC3, 0x1B, 0x8C, 0x1C, 0xCC, 0xE0, 0xE6, 0x67, - 0x07, 0x73, 0xB8, 0x1B, 0x0D, 0x80, 0xD8, 0x7C, 0x07, 0xC3, 0xE0, 0x1C, 0x1E, 0x00, 0xE0, 0x70, 0x00, // 'w' - 0x70, 0x70, 0xE3, 0x83, 0x8E, 0x07, 0x70, 0x0D, 0x80, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x1D, 0xC0, 0x77, 0x03, - 0x8E, 0x1C, 0x1C, 0x70, 0x70, // 'x' - 0xE0, 0x39, 0xC1, 0xC7, 0x07, 0x1C, 0x1C, 0x38, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xF8, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x00, // 'y' - 0xFF, 0xBF, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0xFE, 0xFF, 0x80, // 'z' - 0x0E, 0x1E, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0xF0, 0xE0, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x1C, 0x1E, 0x06, // '{' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // '|' - 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x1E, 0x0E, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x70, 0xF0, 0xE0 // '}' -}; -const GFXglyph Open_Sans_SemiBold_24Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 7, 0, 0}, // ' ' - {1, 4, 17, 8, 2, -17}, // '!' - {10, 9, 6, 11, 1, -17}, // '"' - {17, 15, 17, 17, 1, -17}, // '#' - {49, 13, 19, 15, 1, -18}, // '$' - {80, 20, 17, 22, 1, -17}, // '%' - {123, 18, 17, 19, 1, -17}, // '&' - {162, 3, 6, 7, 2, -17}, // ''' - {165, 7, 21, 9, 1, -17}, // '(' - {184, 7, 21, 9, 1, -17}, // ')' - {203, 12, 11, 14, 1, -18}, // '*' - {220, 13, 12, 15, 1, -15}, // '+' - {240, 5, 6, 7, 1, -3}, // ',' - {244, 7, 2, 9, 1, -8}, // '-' - {246, 4, 4, 8, 2, -4}, // '.' - {248, 10, 17, 10, 0, -17}, // '/' - {270, 13, 17, 15, 1, -17}, // '0' - {298, 8, 17, 15, 2, -17}, // '1' - {315, 13, 17, 15, 1, -17}, // '2' - {343, 13, 17, 15, 1, -17}, // '3' - {371, 15, 17, 15, 0, -17}, // '4' - {403, 13, 17, 15, 1, -17}, // '5' - {431, 13, 17, 15, 1, -17}, // '6' - {459, 13, 17, 15, 1, -17}, // '7' - {487, 13, 17, 15, 1, -17}, // '8' - {515, 13, 17, 15, 1, -17}, // '9' - {543, 4, 13, 8, 2, -13}, // ':' - {550, 5, 16, 8, 1, -13}, // ';' - {560, 13, 12, 15, 1, -15}, // '<' - {580, 13, 7, 15, 1, -12}, // '=' - {592, 13, 12, 15, 1, -15}, // '>' - {612, 11, 17, 12, 0, -17}, // '?' - {636, 21, 19, 23, 1, -17}, // '@' - {686, 17, 17, 17, 0, -17}, // 'A' - {723, 14, 17, 17, 2, -17}, // 'B' - {753, 14, 17, 16, 1, -17}, // 'C' - {783, 16, 17, 19, 2, -17}, // 'D' - {817, 11, 17, 14, 2, -17}, // 'E' - {841, 11, 17, 14, 2, -17}, // 'F' - {865, 15, 17, 18, 1, -17}, // 'G' - {897, 15, 17, 19, 2, -17}, // 'H' - {929, 4, 17, 8, 2, -17}, // 'I' - {938, 8, 22, 8, -2, -17}, // 'J' - {960, 14, 17, 16, 2, -17}, // 'K' - {990, 11, 17, 14, 2, -17}, // 'L' - {1014, 19, 17, 23, 2, -17}, // 'M' - {1055, 16, 17, 20, 2, -17}, // 'N' - {1089, 18, 17, 20, 1, -17}, // 'O' - {1128, 13, 17, 16, 2, -17}, // 'P' - {1156, 18, 21, 20, 1, -17}, // 'Q' - {1204, 14, 17, 16, 2, -17}, // 'R' - {1234, 12, 17, 14, 1, -17}, // 'S' - {1260, 15, 17, 15, 0, -17}, // 'T' - {1292, 15, 17, 19, 2, -17}, // 'U' - {1324, 16, 17, 16, 0, -17}, // 'V' - {1358, 24, 17, 24, 0, -17}, // 'W' - {1409, 16, 17, 16, 0, -17}, // 'X' - {1443, 15, 17, 15, 0, -17}, // 'Y' - {1475, 13, 17, 15, 1, -17}, // 'Z' - {1503, 6, 21, 9, 2, -17}, // '[' - {1519, 10, 17, 10, 0, -17}, // '\' - {1541, 6, 21, 9, 1, -17}, // ']' - {1557, 14, 11, 14, 0, -17}, // '^' - {1577, 11, 2, 11, 0, 2}, // '_' - {1580, 7, 4, 15, 4, -19}, // '`' - {1584, 12, 13, 15, 1, -13}, // 'a' - {1604, 13, 18, 16, 2, -18}, // 'b' - {1634, 11, 13, 13, 1, -13}, // 'c' - {1652, 13, 18, 16, 1, -18}, // 'd' - {1682, 13, 13, 15, 1, -13}, // 'e' - {1704, 11, 18, 10, 0, -18}, // 'f' - {1729, 14, 19, 14, 0, -13}, // 'g' - {1763, 12, 18, 16, 2, -18}, // 'h' - {1790, 4, 18, 8, 2, -18}, // 'i' - {1799, 7, 24, 8, -1, -18}, // 'j' - {1820, 13, 18, 15, 2, -18}, // 'k' - {1850, 4, 18, 8, 2, -18}, // 'l' - {1859, 20, 13, 24, 2, -13}, // 'm' - {1892, 12, 13, 16, 2, -13}, // 'n' - {1912, 14, 13, 16, 1, -13}, // 'o' - {1935, 13, 19, 16, 2, -13}, // 'p' - {1966, 13, 19, 16, 1, -13}, // 'q' - {1997, 9, 13, 11, 2, -13}, // 'r' - {2012, 11, 13, 13, 1, -13}, // 's' - {2030, 9, 16, 10, 0, -16}, // 't' - {2048, 12, 13, 16, 2, -13}, // 'u' - {2068, 14, 13, 14, 0, -13}, // 'v' - {2091, 21, 13, 21, 0, -13}, // 'w' - {2126, 14, 13, 14, 0, -13}, // 'x' - {2149, 14, 19, 14, 0, -13}, // 'y' - {2183, 10, 13, 12, 1, -13}, // 'z' - {2200, 8, 21, 10, 1, -17}, // '{' - {2221, 4, 24, 14, 5, -18}, // '|' - {2233, 8, 21, 10, 1, -17} // '}' -}; -const GFXfont Open_Sans_SemiBold_24 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_24Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_24Glyphs, 0x20, 0x7E, 33}; \ No newline at end of file diff --git a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h b/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h deleted file mode 100644 index 3da740530..000000000 --- a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h +++ /dev/null @@ -1,363 +0,0 @@ -// 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 Open_Sans_SemiBold_32Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFB, 0xEF, 0xBC, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x00, 0x07, 0x3E, 0xFB, 0xE7, 0x00, // '!' - 0xF3, 0xDE, 0x7B, 0xCF, 0x70, 0xEE, 0x1C, 0xC3, 0x18, 0x63, 0x0C, // '"' - 0x01, 0xC3, 0x00, 0x18, 0x70, 0x03, 0x87, 0x00, 0x38, 0x70, 0x03, 0x87, 0x00, 0x38, 0x60, 0x03, 0x86, 0x07, - 0xFF, 0xFE, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x07, 0x0E, 0x00, 0x70, 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC7, - 0x00, 0x18, 0x70, 0x00, // '#' - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x7F, 0x03, 0xFF, 0xCF, 0xFF, 0x3E, 0xC6, 0x79, 0x80, 0xF3, 0x01, 0xE6, - 0x03, 0xEC, 0x03, 0xF8, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x03, 0x3C, 0x06, 0x38, 0x0C, 0x70, - 0x19, 0xEE, 0x37, 0xDF, 0xFF, 0x3F, 0xFC, 0x1F, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, // '$' - 0x1F, 0x00, 0x38, 0x07, 0xF0, 0x0E, 0x01, 0xFF, 0x01, 0xC0, 0x38, 0xE0, 0x70, 0x07, 0x1C, 0x1C, 0x01, 0xC3, - 0x83, 0x80, 0x38, 0x38, 0xE0, 0x07, 0x07, 0x1C, 0x00, 0xE1, 0xC7, 0x00, 0x0E, 0x38, 0xE7, 0xC1, 0xC7, 0x39, - 0xFC, 0x3F, 0xEF, 0x7F, 0xC3, 0xF9, 0xCE, 0x38, 0x3E, 0x71, 0xC7, 0x00, 0x0E, 0x78, 0x70, 0x03, 0x8E, 0x0E, - 0x00, 0x71, 0xC1, 0xC0, 0x1C, 0x1C, 0x38, 0x03, 0x83, 0x8E, 0x00, 0xE0, 0x71, 0xC0, 0x38, 0x0F, 0xF8, 0x07, - 0x00, 0xFE, 0x01, 0xC0, 0x0F, 0x80, // '%' - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xE0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xC0, 0x07, 0x07, 0x80, 0x0E, - 0x0F, 0x00, 0x1E, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x03, 0xC7, 0xFE, - 0x07, 0x1F, 0x3E, 0x1E, 0x3C, 0x3E, 0x3C, 0x78, 0x3E, 0xF0, 0xE0, 0x3F, 0xE1, 0xC0, 0x3F, 0x83, 0xC0, 0x3E, - 0x07, 0xC1, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0x9E, 0x03, 0xF8, 0x1E, 0x00, // '&' - 0xF7, 0xBD, 0xCE, 0x31, 0x8C, // ''' - 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x83, 0xC0, 0xE0, 0x78, 0x1C, 0x0E, 0x03, 0x81, 0xE0, // '(' - 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x00, // ')' - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x18, 0x03, 0xCC, 0xF3, 0xFF, 0xFD, 0xFF, 0xFE, 0x03, - 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xCE, 0x01, 0xE7, 0x80, 0xE1, 0xC0, 0x10, 0xC0, // '*' - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, - 0xFF, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, // '+' - 0x3C, 0xF1, 0xE3, 0xC7, 0x0E, 0x38, 0x70, // ',' - 0xFF, 0x7F, 0xBF, 0xC0, // '-' - 0x73, 0xEF, 0xBE, 0x70, // '.' - 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x03, - 0xC0, 0x00, // '/' - 0x07, 0xE0, 0x0F, 0xF8, 0x0F, 0xFE, 0x07, 0x87, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x1C, 0xF0, - 0x0E, 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x38, 0xE0, 0x1C, 0x70, 0x1E, - 0x3C, 0x0F, 0x1E, 0x07, 0x87, 0x87, 0x81, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '0' - 0x03, 0xC0, 0xF8, 0x3F, 0x0F, 0xE7, 0xFD, 0xF7, 0x9C, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, // '1' - 0x07, 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x0F, 0x07, 0x82, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // '2' - 0x0F, 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0x78, 0x3C, 0x20, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF8, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0xE0, 0x3E, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, // '3' - 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0E, - 0x38, 0x0F, 0x1C, 0x07, 0x0E, 0x07, 0x07, 0x07, 0x83, 0x83, 0x81, 0xC3, 0x80, 0xE1, 0xFF, 0xFE, 0xFF, 0xFF, - 0x7F, 0xFF, 0x80, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, // '4' - 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xFF, - 0x83, 0xFF, 0xC7, 0xFF, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xF6, - 0x07, 0xCF, 0xFF, 0x9F, 0xFE, 0x0F, 0xE0, 0x00, // '5' - 0x01, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x71, - 0xF0, 0x3B, 0xFE, 0x1F, 0xFF, 0x1F, 0x87, 0xCF, 0x81, 0xE7, 0x80, 0x7B, 0xC0, 0x3C, 0xE0, 0x1E, 0x70, 0x0F, - 0x3C, 0x07, 0x9E, 0x07, 0x87, 0x87, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '6' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, // '7' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xC7, 0x81, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x70, 0x38, 0x3E, - 0x7C, 0x0F, 0xF8, 0x01, 0xF8, 0x03, 0xFE, 0x03, 0xEF, 0xC3, 0xC1, 0xF1, 0xC0, 0x79, 0xE0, 0x1C, 0xF0, 0x0F, - 0x78, 0x07, 0x9C, 0x03, 0x8F, 0x07, 0xC7, 0xFF, 0xC0, 0xFF, 0xC0, 0x1F, 0x80, // '8' - 0x07, 0xC0, 0x0F, 0xF8, 0x0F, 0xFE, 0x0F, 0x87, 0x87, 0x81, 0xE3, 0x80, 0xF3, 0xC0, 0x39, 0xE0, 0x1C, 0xF0, - 0x0F, 0x78, 0x07, 0x9E, 0x07, 0xCF, 0x87, 0xE3, 0xFF, 0xE1, 0xFF, 0x70, 0x3E, 0x38, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x1F, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, 0x00, // '9' - 0x73, 0xEF, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, 0xBE, 0x70, // ':' - 0x38, 0xF9, 0xF3, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x3C, 0x70, 0xE1, 0xC7, 0x0E, - 0x00, // ';' - 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x06, // '<' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0xFF, 0xFC, // '=' - 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, // '>' - 0x1F, 0xC0, 0xFF, 0xE1, 0xFF, 0xE3, 0x83, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xC0, 0x00, // '?' - 0x00, 0x7F, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xBF, 0x80, 0x3C, 0x00, 0xF0, 0x1E, 0x00, 0x1E, 0x0F, 0x00, - 0x03, 0xC3, 0x83, 0xF8, 0x71, 0xC1, 0xFF, 0x0E, 0x70, 0xFB, 0xC3, 0xB8, 0x70, 0x70, 0xEE, 0x3C, 0x1C, 0x3B, - 0x8E, 0x07, 0x0E, 0xE3, 0x81, 0xC3, 0xB8, 0xE0, 0x70, 0xEE, 0x38, 0x1C, 0x3B, 0x8E, 0x07, 0x0E, 0xE3, 0xC3, - 0xC7, 0x38, 0x7B, 0xFB, 0xCE, 0x0F, 0xE7, 0xE1, 0xC1, 0xF0, 0xF0, 0x78, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, - 0xE0, 0x02, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, // '@' - 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x77, 0x00, 0x01, 0xDC, 0x00, 0x0F, 0x78, 0x00, 0x3D, - 0xE0, 0x00, 0xE3, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x1C, 0x00, 0x70, 0x70, 0x03, 0xC1, 0xE0, 0x0E, 0x03, 0x80, - 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0x80, 0x0E, 0x1E, 0x00, - 0x3C, 0x78, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x80, // 'A' - 0xFF, 0xE0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E, 0x07, 0xCF, 0x01, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, - 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xE7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, - 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x07, 0xEF, 0xFF, 0xE7, 0xFF, 0xE3, 0xFF, 0xC0, // 'B' - 0x01, 0xFC, 0x01, 0xFF, 0xE1, 0xFF, 0xF0, 0xFC, 0x1C, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x0C, 0x1F, 0xFF, 0x03, 0xFF, 0xC0, 0x3F, 0xE0, // 'C' - 0xFF, 0xE0, 0x1F, 0xFF, 0x03, 0xFF, 0xF8, 0x78, 0x1F, 0x8F, 0x00, 0xF1, 0xE0, 0x0F, 0x3C, 0x01, 0xE7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xC0, 0x7C, 0x78, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, // 'D' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0xCF, - 0xFF, 0x3F, 0xFC, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'E' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0xFF, 0x3F, 0xFC, 0xFF, 0xF3, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x00, // 'F' - 0x00, 0xFF, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xC1, 0xF8, 0x18, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, 0x3F, 0xEF, 0x03, 0xFE, 0xF0, - 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x3C, 0x01, 0xE3, 0xF0, 0x1E, 0x1F, 0xFF, 0xE0, 0xFF, - 0xFE, 0x01, 0xFF, 0x00, // 'G' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, - 0xF0, // 'H' - 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xC0, // 'I' - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, - 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x03, 0xCF, 0xF3, 0xF8, 0xF8, - 0x00, // 'J' - 0xF0, 0x0F, 0x3C, 0x07, 0xCF, 0x03, 0xE3, 0xC0, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x1E, 0x03, 0xCF, 0x80, - 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3E, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF8, // 'K' - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'L' - 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x0F, 0xDF, 0xC0, 0x0F, 0xEE, 0xE0, 0x07, 0x77, 0x70, 0x03, - 0xFB, 0xBC, 0x03, 0xBD, 0xCE, 0x01, 0xDE, 0xE7, 0x00, 0xEF, 0x73, 0xC0, 0xE7, 0xB8, 0xE0, 0x73, 0xDC, 0x70, - 0x79, 0xEE, 0x3C, 0x38, 0xF7, 0x0E, 0x1C, 0x7B, 0x87, 0x1E, 0x3D, 0xC3, 0xCE, 0x1E, 0xE0, 0xE7, 0x0F, 0x70, - 0x7F, 0x07, 0xB8, 0x1F, 0x83, 0xDC, 0x0F, 0xC1, 0xEE, 0x07, 0xC0, 0xF7, 0x01, 0xE0, 0x7B, 0x80, 0xF0, 0x3C, // 'M' - 0xF8, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xEF, 0xE0, 0x0E, 0xFE, 0x00, 0xEE, 0xF0, 0x0E, 0xEF, 0x80, 0xEE, - 0x78, 0x0E, 0xE3, 0xC0, 0xEE, 0x3C, 0x0E, 0xE1, 0xE0, 0xEE, 0x1F, 0x0E, 0xE0, 0xF0, 0xEE, 0x07, 0x8E, 0xE0, - 0x78, 0xEE, 0x03, 0xCE, 0xE0, 0x3E, 0xEE, 0x01, 0xEE, 0xE0, 0x0F, 0xEE, 0x00, 0xFE, 0xE0, 0x07, 0xEE, 0x00, - 0x7E, 0xE0, 0x03, 0xE0, // 'N' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, // 'O' - 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xF0, 0x7E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x7C, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, // 'P' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, // 'Q' - 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x3C, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0xC3, 0xFF, 0xE0, 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF0, // 'R' - 0x0F, 0xE0, 0x3F, 0xFC, 0x7F, 0xFC, 0xF8, 0x18, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x3C, 0xE0, 0x7C, 0xFF, 0xF8, 0xFF, 0xF0, 0x3F, 0xC0, // 'S' - 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, // 'T' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x79, 0xE0, 0x1E, 0x3E, 0x07, 0xC3, 0xFF, 0xF0, 0x3F, 0xFC, 0x01, 0xFE, - 0x00, // 'U' - 0xF0, 0x00, 0xF3, 0x80, 0x07, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC3, 0x80, 0x1C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, - 0x03, 0x80, 0x70, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x03, 0x81, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x03, 0x87, - 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x03, 0x9C, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, // 'V' - 0xF0, 0x07, 0x80, 0x3C, 0xE0, 0x0F, 0x00, 0x71, 0xE0, 0x3E, 0x01, 0xE3, 0xC0, 0x7E, 0x03, 0xC7, 0x80, 0xFC, - 0x07, 0x87, 0x01, 0xF8, 0x0E, 0x0F, 0x07, 0xF8, 0x3C, 0x1E, 0x0E, 0x70, 0x78, 0x3C, 0x1C, 0xE0, 0xF0, 0x38, - 0x79, 0xC1, 0xC0, 0x78, 0xF3, 0xC7, 0x80, 0xF1, 0xC3, 0x8F, 0x01, 0xE3, 0x87, 0x1E, 0x01, 0xCF, 0x0F, 0x38, - 0x03, 0x9C, 0x1E, 0x70, 0x07, 0xB8, 0x1D, 0xE0, 0x0F, 0x70, 0x3B, 0xC0, 0x0E, 0xE0, 0x77, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0xF0, 0x03, 0xC0, 0x00, // 'W' - 0x78, 0x01, 0xE1, 0xE0, 0x1E, 0x0F, 0x00, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x07, 0x87, 0x80, 0x1E, 0x78, - 0x00, 0xF3, 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, - 0x00, 0x1E, 0xF0, 0x00, 0xF3, 0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x81, 0xE0, 0x78, 0x0F, 0x83, 0xC0, - 0x3C, 0x3C, 0x00, 0xF3, 0xC0, 0x07, 0xC0, // 'X' - 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x03, 0xC3, 0xC0, 0x78, 0x3C, 0x07, 0x81, 0xE0, 0xF0, 0x1E, 0x0E, 0x00, - 0xF1, 0xE0, 0x07, 0x1C, 0x00, 0x7B, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, // 'Y' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // 'Z' - 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, // '[' - 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, - 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x70, - 0x03, 0xC0, // '\' - 0xFE, 0xFE, 0xFE, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xFE, 0xFE, 0xFE, // ']' - 0x01, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0x9C, 0x00, 0xE7, 0x00, 0x38, 0xE0, - 0x1C, 0x38, 0x07, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x38, 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x70, // '^' - 0xFF, 0xFD, 0xFF, 0xF8, // '_' - 0xF0, 0x78, 0x3C, 0x1C, 0x0E, // '`' - 0x07, 0xF0, 0x3F, 0xFC, 0x1F, 0xFE, 0x1C, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x07, 0xFE, 0x3F, 0xFE, - 0x7C, 0x0E, 0x78, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x1F, 0x86, // 'a' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, // 'b' - 0x07, 0xF0, 0x7F, 0xE7, 0xFF, 0x1F, 0x04, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xF0, 0x67, 0xFF, 0x8F, 0xFE, 0x0F, 0xE0, // 'c' - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x0F, 0x8E, 0x3F, 0xEE, - 0x7F, 0xFE, 0x7C, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'd' - 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xCF, 0x03, 0xDE, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, - 0xFB, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x81, 0x9F, 0xFF, 0x0F, 0xFE, 0x07, 0xF0, // 'e' - 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xFC, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, // 'f' - 0x07, 0xFF, 0x83, 0xFF, 0xE1, 0xE3, 0xF8, 0xF0, 0x78, 0x38, 0x0E, 0x0E, 0x03, 0x83, 0x80, 0xE0, 0xE0, 0x38, - 0x3C, 0x1E, 0x07, 0x8F, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, - 0x3F, 0xFF, 0x9E, 0x01, 0xE7, 0x00, 0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0x9E, 0x03, 0xE7, 0xFF, 0xF0, 0xFF, 0xF8, - 0x0F, 0xF0, 0x00, // 'g' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'h' - 0x73, 0xCF, 0x9C, 0x00, 0x00, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, // 'i' - 0x07, 0x03, 0xC0, 0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, - 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x3C, 0x0F, - 0x3F, 0xCF, 0xE3, 0xF0, // 'j' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, - 0xE0, 0xF0, 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xF3, 0xC0, - 0xE1, 0xE0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE0, 0x78, 0xE0, 0x7C, 0xE0, 0x3C, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xE3, 0xE0, 0x7C, 0x3B, 0xFE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFB, 0xE1, 0xFC, 0x1E, 0xF0, 0x3E, 0x07, 0xBC, 0x07, - 0x80, 0xEF, 0x01, 0xE0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, - 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, - 0x03, 0x80, // 'm' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'n' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xCF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xC0, 0x0E, 0xE0, - 0x07, 0x70, 0x03, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF3, 0xE1, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xE0, - 0x00, // 'o' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xE0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x7C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, // 'p' - 0x0F, 0x8E, 0x3F, 0xEE, 0x7F, 0xFE, 0x78, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, // 'q' - 0xE3, 0xDC, 0xFB, 0xBF, 0x7F, 0xAF, 0x81, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'r' - 0x1F, 0xC1, 0xFF, 0xCF, 0xFF, 0x3C, 0x18, 0xE0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x1F, 0xC0, - 0x1F, 0x00, 0x1E, 0x00, 0x7B, 0x03, 0xCF, 0xFF, 0x3F, 0xF8, 0x7F, 0x80, // 's' - 0x1C, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x7F, 0xEF, 0xFE, 0xFF, 0xE3, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1F, 0xE1, 0xFE, 0x07, 0xE0, // 't' - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'u' - 0xF0, 0x07, 0x9C, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x3D, 0xE0, 0x07, 0x70, 0x01, 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, // 'v' - 0xF0, 0x1E, 0x03, 0xCE, 0x03, 0xC0, 0x71, 0xE0, 0xFC, 0x1E, 0x3C, 0x1F, 0x83, 0xC3, 0x83, 0xF0, 0x70, 0x70, - 0xE7, 0x1E, 0x0F, 0x1C, 0xE3, 0xC1, 0xE3, 0x9C, 0x78, 0x1C, 0x73, 0x8E, 0x03, 0x9C, 0x3B, 0xC0, 0x7B, 0x87, - 0x78, 0x07, 0x70, 0xEE, 0x00, 0xEC, 0x1D, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0x3E, 0x07, 0xC0, - 0x07, 0x80, 0x78, 0x00, // 'w' - 0x78, 0x07, 0x87, 0x81, 0xE0, 0xF8, 0x7C, 0x0F, 0x0F, 0x00, 0xF3, 0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x3C, 0x3C, 0x0F, 0x03, 0xC3, - 0xE0, 0x7C, 0x78, 0x07, 0x80, // 'x' - 0xF0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x1D, 0xE0, 0x07, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, - 0x7C, 0x00, 0x00, // 'y' - 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // 'z' - 0x01, 0xC0, 0xF8, 0x3F, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x03, 0xE1, - 0xF8, 0x3C, 0x07, 0xE0, 0x3E, 0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF8, - 0x1F, 0x00, 0xE0, // '{' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, // '|' - 0xE0, 0x1F, 0x03, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF0, - 0x1F, 0x80, 0x70, 0x7E, 0x1F, 0x03, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x1F, 0x83, - 0xE0, 0x70, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_32Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 9, 0, 0}, // ' ' - {1, 6, 23, 10, 2, -23}, // '!' - {19, 11, 8, 15, 2, -23}, // '"' - {30, 20, 23, 22, 1, -23}, // '#' - {88, 15, 27, 19, 2, -25}, // '$' - {139, 27, 23, 29, 1, -23}, // '%' - {217, 23, 23, 25, 2, -23}, // '&' - {284, 5, 8, 9, 2, -23}, // ''' - {289, 9, 28, 11, 1, -23}, // '(' - {321, 9, 28, 11, 1, -23}, // ')' - {353, 17, 15, 19, 1, -24}, // '*' - {385, 17, 15, 19, 1, -19}, // '+' - {417, 7, 8, 10, 1, -4}, // ',' - {424, 9, 3, 11, 1, -10}, // '-' - {428, 6, 5, 10, 2, -5}, // '.' - {432, 13, 23, 13, 0, -23}, // '/' - {470, 17, 23, 19, 1, -23}, // '0' - {519, 11, 23, 19, 2, -23}, // '1' - {551, 17, 23, 19, 1, -23}, // '2' - {600, 16, 23, 19, 1, -23}, // '3' - {646, 17, 23, 19, 1, -23}, // '4' - {695, 15, 23, 19, 2, -23}, // '5' - {739, 17, 23, 19, 1, -23}, // '6' - {788, 17, 23, 19, 1, -23}, // '7' - {837, 17, 23, 19, 1, -23}, // '8' - {886, 17, 23, 19, 1, -23}, // '9' - {935, 6, 17, 10, 2, -17}, // ':' - {948, 7, 21, 10, 1, -17}, // ';' - {967, 17, 16, 19, 1, -20}, // '<' - {1001, 15, 9, 19, 2, -16}, // '=' - {1018, 17, 16, 19, 1, -20}, // '>' - {1052, 15, 23, 16, 0, -23}, // '?' - {1096, 26, 26, 30, 2, -23}, // '@' - {1181, 22, 23, 22, 0, -23}, // 'A' - {1245, 17, 23, 22, 3, -23}, // 'B' - {1294, 18, 23, 21, 2, -23}, // 'C' - {1346, 19, 23, 24, 3, -23}, // 'D' - {1401, 14, 23, 19, 3, -23}, // 'E' - {1442, 14, 23, 18, 3, -23}, // 'F' - {1483, 20, 23, 24, 2, -23}, // 'G' - {1541, 19, 23, 25, 3, -23}, // 'H' - {1596, 5, 23, 11, 3, -23}, // 'I' - {1611, 10, 29, 11, -2, -23}, // 'J' - {1648, 18, 23, 21, 3, -23}, // 'K' - {1700, 14, 23, 18, 3, -23}, // 'L' - {1741, 25, 23, 31, 3, -23}, // 'M' - {1813, 20, 23, 26, 3, -23}, // 'N' - {1871, 22, 23, 26, 2, -23}, // 'O' - {1935, 16, 23, 21, 3, -23}, // 'P' - {1981, 22, 28, 26, 2, -23}, // 'Q' - {2058, 18, 23, 21, 3, -23}, // 'R' - {2110, 16, 23, 19, 2, -23}, // 'S' - {2156, 19, 23, 19, 0, -23}, // 'T' - {2211, 19, 23, 25, 3, -23}, // 'U' - {2266, 21, 23, 21, 0, -23}, // 'V' - {2327, 31, 23, 31, 0, -23}, // 'W' - {2417, 21, 23, 21, 0, -23}, // 'X' - {2478, 20, 23, 20, 0, -23}, // 'Y' - {2536, 17, 23, 19, 1, -23}, // 'Z' - {2585, 8, 28, 12, 3, -23}, // '[' - {2613, 13, 23, 13, 0, -23}, // '\' - {2651, 8, 28, 12, 1, -23}, // ']' - {2679, 18, 15, 18, 0, -23}, // '^' - {2713, 15, 2, 15, 0, 3}, // '_' - {2717, 8, 5, 20, 6, -24}, // '`' - {2722, 16, 17, 20, 1, -17}, // 'a' - {2756, 16, 24, 21, 3, -24}, // 'b' - {2804, 14, 17, 17, 2, -17}, // 'c' - {2834, 16, 24, 21, 2, -24}, // 'd' - {2882, 15, 17, 19, 2, -17}, // 'e' - {2914, 13, 24, 13, 1, -24}, // 'f' - {2953, 18, 25, 19, 0, -17}, // 'g' - {3010, 16, 24, 21, 3, -24}, // 'h' - {3058, 6, 24, 10, 2, -24}, // 'i' - {3076, 10, 32, 10, -2, -24}, // 'j' - {3116, 16, 24, 19, 3, -24}, // 'k' - {3164, 4, 24, 10, 3, -24}, // 'l' - {3176, 26, 17, 32, 3, -17}, // 'm' - {3232, 16, 17, 21, 3, -17}, // 'n' - {3266, 17, 17, 21, 2, -17}, // 'o' - {3303, 16, 25, 21, 3, -17}, // 'p' - {3353, 16, 25, 21, 2, -17}, // 'q' - {3403, 11, 17, 15, 3, -17}, // 'r' - {3427, 14, 17, 17, 2, -17}, // 's' - {3457, 12, 21, 14, 1, -21}, // 't' - {3489, 16, 17, 21, 2, -17}, // 'u' - {3523, 18, 17, 18, 0, -17}, // 'v' - {3562, 27, 17, 27, 0, -17}, // 'w' - {3620, 19, 17, 19, 0, -17}, // 'x' - {3661, 18, 25, 18, 0, -17}, // 'y' - {3718, 14, 17, 16, 1, -17}, // 'z' - {3748, 11, 28, 13, 1, -23}, // '{' - {3787, 3, 32, 19, 8, -24}, // '|' - {3799, 11, 28, 13, 1, -23} // '}' -}; -const GFXfont Open_Sans_SemiBold_32 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_32Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_32Glyphs, 0x20, 0x7E, 45}; \ No newline at end of file diff --git a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h b/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h deleted file mode 100644 index 93d1d062a..000000000 --- a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h +++ /dev/null @@ -1,798 +0,0 @@ -// 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 Open_Sans_SemiBold_56Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x3F, 0x9F, 0xCF, 0xF7, 0xFB, 0xF9, 0xFC, 0x7C, 0x00, // '!' - 0xFC, 0x3F, 0x7E, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0xF8, - 0x1F, 0x7C, 0x0F, 0xBE, 0x07, 0xDF, 0x03, 0xE7, 0x81, 0xE3, 0xC0, 0xF0, // '"' - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x1F, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x3E, 0x00, - 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0xF0, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xC0, 0x00, // '#' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0x78, - 0xFC, 0x3F, 0x8F, 0x01, 0x8F, 0xE1, 0xE0, 0x01, 0xFC, 0x3C, 0x00, 0x3F, 0x87, 0x80, 0x07, 0xF0, 0xF0, 0x00, - 0x7F, 0x1E, 0x00, 0x0F, 0xF3, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x1F, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0x3C, 0x3F, 0x80, 0x07, 0x83, 0xF0, 0x00, 0xF0, 0x7E, - 0x80, 0x1E, 0x1F, 0xDC, 0x03, 0xC7, 0xFB, 0xF8, 0x7B, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, // '$' - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x0F, 0xC0, 0x07, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0x7E, 0x00, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x7E, 0x01, - 0xF0, 0x00, 0x3F, 0x03, 0xF0, 0x1F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0xF8, 0x00, 0x0F, 0xC0, 0xFC, 0x0F, 0x80, - 0x00, 0x7E, 0x07, 0xE0, 0xFC, 0x00, 0x03, 0xF0, 0x3F, 0x07, 0xC0, 0x00, 0x1F, 0x81, 0xF8, 0x7E, 0x00, 0x00, - 0xFC, 0x0F, 0xC3, 0xE0, 0xFC, 0x03, 0xE0, 0x7C, 0x3F, 0x1F, 0xF8, 0x1F, 0x03, 0xE1, 0xF1, 0xFF, 0xE0, 0xF8, - 0x1F, 0x1F, 0x1F, 0xFF, 0x07, 0xE1, 0xF8, 0xF8, 0xFF, 0xFC, 0x1F, 0xFF, 0x8F, 0x8F, 0xC3, 0xE0, 0xFF, 0xFC, - 0xFC, 0x7C, 0x1F, 0x83, 0xFF, 0xC7, 0xC3, 0xE0, 0x7C, 0x0F, 0xFC, 0x7E, 0x3F, 0x03, 0xE0, 0x1F, 0x83, 0xE1, - 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0xFC, 0x00, 0x01, 0xF0, 0x7E, 0x07, 0xE0, 0x00, 0x1F, 0x83, 0xF0, - 0x3F, 0x00, 0x00, 0xF8, 0x1F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x0F, 0xC0, 0x00, 0x7C, 0x07, 0xE0, 0x7E, - 0x00, 0x07, 0xC0, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, - 0x3F, 0x00, 0x3E, 0x0F, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, // '%' - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x7F, 0x00, - 0x00, 0x03, 0xFB, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x01, 0xFF, 0xF8, 0x00, 0xFC, 0x07, - 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xE7, 0xF8, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x0F, 0xE0, 0xFE, 0x07, 0xF8, 0x3F, - 0x83, 0xF8, 0x07, 0xF8, 0x7F, 0x07, 0xF0, 0x07, 0xF9, 0xFC, 0x0F, 0xE0, 0x07, 0xFB, 0xF8, 0x1F, 0x80, 0x07, - 0xFF, 0xE0, 0x3F, 0x00, 0x07, 0xFF, 0xC0, 0x7F, 0x00, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x01, 0xFE, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xF7, 0xF8, 0x07, 0xFF, 0xFF, 0xC7, 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xF8, 0x07, 0xFF, 0xF0, - 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, // '&' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xF1, 0xE3, 0xC7, 0x8F, 0x00, // ''' - 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xFC, - 0x00, 0xFC, // '(' - 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, - 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, - 0xFC, 0x00, // ')' - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x70, 0x1F, 0x01, 0xC7, 0xF1, 0xF1, 0xFC, 0x7F, - 0xFE, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x07, 0xF1, - 0xFC, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, 0x03, 0xC0, 0x78, 0x00, 0x08, 0x02, - 0x00, // '*' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, // '+' - 0x3F, 0x8F, 0xE3, 0xF8, 0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x3E, 0x00, // ',' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0xC0, // '-' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // '.' - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, // '/' - 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0x00, 0xFE, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0x7E, - 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0x7E, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x3F, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x3F, 0x87, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x07, - 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x0F, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, // '0' - 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0x7E, - 0x7F, 0x9F, 0xBF, 0xC7, 0xE7, 0xE1, 0xF8, 0xF0, 0x7E, 0x10, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, // '1' - 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, - 0x3F, 0xE0, 0x7F, 0xC0, 0xFC, 0x00, 0xFE, 0x03, 0x80, 0x03, 0xF8, 0x08, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, // '2' - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x03, - 0xF8, 0x0F, 0xF8, 0x3E, 0x00, 0x3F, 0x81, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x80, 0x00, 0x1F, 0xCE, 0x00, 0x03, 0xFC, - 0xFE, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, // '3' - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x1F, 0x7F, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x03, 0xE3, 0xF8, 0x00, 0x0F, 0xC7, 0xF0, - 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x01, 0xF8, 0x3F, 0x80, 0x07, 0xE0, 0x7F, 0x00, 0x0F, 0x80, - 0xFE, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0xF8, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, // '4' - 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF7, 0xFC, 0x00, - 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xC0, 0x3F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x03, 0xFC, 0x7E, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, // '5' - 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, - 0x7F, 0xE0, 0x10, 0x0F, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0xFC, 0x7F, 0xF8, 0x0F, 0xCF, 0xFF, 0xE0, 0xFD, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x8F, 0xF8, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xF8, 0x03, 0xF8, - 0x1F, 0xE0, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, // '6' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, // '7' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0x7E, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0xC0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x03, 0xFC, 0x0F, 0xE0, 0x0F, 0xF9, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x81, 0xFC, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0xFC, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0xC0, 0x03, - 0xF8, 0xFF, 0x00, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, // '8' - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF0, 0x7F, 0x80, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7E, - 0x1F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0xFC, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x9F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x3F, - 0xE7, 0xF8, 0x03, 0xFE, 0x1F, 0xF0, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0xFC, 0x0F, 0xFF, 0xE7, - 0xE0, 0x1F, 0xFE, 0x3F, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x01, 0x00, 0x7F, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, // '9' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // ':' - 0x1F, 0x07, 0xF0, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF0, 0x7E, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x00, // ';' - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, // '<' - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, // '=' - 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, // '>' - 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF8, 0x0F, - 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, // '?' - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x3F, 0xE0, 0x0F, 0x81, 0xF0, 0x07, 0xFF, 0xF0, - 0x3E, 0x1F, 0x00, 0xFF, 0xFF, 0x81, 0xF0, 0xF8, 0x0F, 0xFF, 0xFC, 0x0F, 0x8F, 0x80, 0xFF, 0x07, 0xE0, 0x3E, - 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xF3, 0xE0, 0x7E, 0x00, 0xF8, 0x0F, 0x9F, 0x03, 0xE0, 0x07, 0xC0, 0x7D, 0xF0, - 0x3F, 0x00, 0x3E, 0x03, 0xEF, 0x81, 0xF0, 0x01, 0xF0, 0x1F, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xFB, 0xE0, 0x7C, - 0x00, 0x7C, 0x07, 0xDF, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0xF8, 0x1F, 0x00, 0x3F, 0x01, 0xE7, 0xC0, 0xF8, 0x01, - 0xF8, 0x1F, 0x3E, 0x07, 0xC0, 0x0F, 0xC0, 0xF9, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xCF, 0x80, 0xF8, 0x0F, 0xF0, - 0x7C, 0x7C, 0x07, 0xF0, 0xFF, 0xC7, 0xE1, 0xF0, 0x1F, 0xFF, 0x9F, 0xFE, 0x0F, 0x80, 0x7F, 0xFC, 0xFF, 0xE0, - 0x7E, 0x01, 0xFF, 0x83, 0xFE, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xE0, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, // '@' - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, - 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, // 'A' - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x7F, 0x3F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, - 0x00, 0xFE, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x03, 0xFC, - 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, // 'B' - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFC, 0x0F, 0xF8, 0x00, 0x18, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x04, 0x0F, 0xFF, 0x00, 0x7C, - 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0x80, // 'C' - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x3F, 0xE0, 0xFE, 0x00, - 0x07, 0xFC, 0x3F, 0x80, 0x00, 0xFF, 0x8F, 0xE0, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, - 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x1F, 0xF8, 0x3F, 0x80, 0x3F, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, // 'D' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'E' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, // 'F' - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, 0xC0, 0x7F, 0xE0, 0x00, 0x30, 0x0F, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xFF, 0xEF, 0xE0, 0x01, - 0xFF, 0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0xBF, 0x80, 0x07, 0xFF, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x7E, 0x00, 0x1F, - 0xFF, 0xCF, 0xE0, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x01, - 0xFC, 0xFF, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x00, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0x80, 0x1F, 0xE0, 0x7F, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFC, 0x00, // 'G' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, - 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0xFE, // 'H' - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, // 'I' - 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x3F, 0xE7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xC0, - 0x00, // 'J' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xF0, 0xFE, 0x00, - 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xDF, - 0xE0, 0x00, 0xFF, 0x8F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x03, 0xFC, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xF0, - 0xFE, 0x00, 0x07, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x01, 0xFE, // 'K' - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'L' - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x7F, 0xF0, - 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xBF, 0xFC, 0x00, 0x00, - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x1F, 0x7E, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xDF, 0xBF, 0x00, 0x00, 0xFD, 0xFB, - 0xF7, 0xE0, 0x00, 0x1F, 0x3F, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xEF, 0xCF, 0xC0, 0x00, 0xF8, 0xFD, 0xF9, 0xF8, - 0x00, 0x1F, 0x1F, 0xBF, 0x1F, 0x80, 0x07, 0xE7, 0xF7, 0xE3, 0xF0, 0x00, 0xF8, 0xFE, 0xFC, 0x7E, 0x00, 0x3F, - 0x1F, 0xDF, 0x87, 0xE0, 0x07, 0xE3, 0xFB, 0xF0, 0xFC, 0x00, 0xF8, 0x7F, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0xEF, - 0xC1, 0xF8, 0x07, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0xBF, 0x03, 0xE0, 0x3F, 0x07, 0xF7, 0xE0, 0x7E, - 0x07, 0xC0, 0xFE, 0xFC, 0x0F, 0xC0, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0x3F, 0x03, 0xFB, 0xF0, 0x1F, 0x87, 0xC0, - 0x7F, 0x7E, 0x03, 0xF1, 0xF8, 0x0F, 0xEF, 0xC0, 0x3F, 0x3F, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xC0, 0x3F, 0xBF, - 0x00, 0xFD, 0xF8, 0x07, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0xFE, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, - 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x7E, 0x00, 0x7F, 0xC0, 0x0F, 0xEF, 0xC0, 0x0F, 0xF8, 0x01, - 0xFD, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xBF, 0x00, 0x1F, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0xFE, // 'M' - 0xFF, 0x80, 0x00, 0x0F, 0xDF, 0xF0, 0x00, 0x01, 0xFB, 0xFF, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0x00, 0x07, 0xEF, - 0xFE, 0x00, 0x00, 0xFD, 0xFF, 0xE0, 0x00, 0x1F, 0xBF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xC0, 0x00, 0x7E, 0xFF, - 0xFC, 0x00, 0x0F, 0xDF, 0xBF, 0x80, 0x01, 0xFB, 0xF7, 0xF8, 0x00, 0x3F, 0x7E, 0x7F, 0x00, 0x07, 0xEF, 0xC7, - 0xF0, 0x00, 0xFD, 0xF8, 0xFF, 0x00, 0x1F, 0xBF, 0x0F, 0xE0, 0x03, 0xF7, 0xE1, 0xFE, 0x00, 0x7E, 0xFC, 0x1F, - 0xC0, 0x0F, 0xDF, 0x81, 0xFC, 0x01, 0xFB, 0xF0, 0x3F, 0xC0, 0x3F, 0x7E, 0x03, 0xF8, 0x07, 0xEF, 0xC0, 0x3F, - 0x80, 0xFD, 0xF8, 0x07, 0xF8, 0x1F, 0xBF, 0x00, 0x7F, 0x03, 0xF7, 0xE0, 0x0F, 0xF0, 0x7E, 0xFC, 0x00, 0xFE, - 0x0F, 0xDF, 0x80, 0x0F, 0xE1, 0xFB, 0xF0, 0x01, 0xFE, 0x3F, 0x7E, 0x00, 0x1F, 0xC7, 0xEF, 0xC0, 0x01, 0xFC, - 0xFD, 0xF8, 0x00, 0x3F, 0xDF, 0xBF, 0x00, 0x03, 0xFB, 0xF7, 0xE0, 0x00, 0x7F, 0xFE, 0xFC, 0x00, 0x07, 0xFF, - 0xDF, 0x80, 0x00, 0x7F, 0xFB, 0xF0, 0x00, 0x0F, 0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xEF, 0xC0, 0x00, 0x0F, 0xFD, - 0xF8, 0x00, 0x01, 0xFF, 0xBF, 0x00, 0x00, 0x1F, 0xF7, 0xE0, 0x00, 0x03, 0xFE, // 'N' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, // 'O' - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0x80, 0x7F, 0xE7, 0xF0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x7F, 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x00, 0xFE, - 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x07, 0xFB, 0xF8, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, // 'P' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, // 'Q' - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x3F, 0xF0, 0x7F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x1F, 0xE1, 0xFC, - 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x7F, 0x03, 0xF8, 0x03, - 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x1F, 0xC0, 0xFE, 0x00, - 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, // 'R' - 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFE, 0x1F, 0xF0, 0x1F, 0x83, 0xF8, 0x00, 0x30, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, // 'S' - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, // 'T' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0F, 0xFC, 0x03, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, // 'U' - 0xFE, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x01, 0xFC, - 0x3F, 0x00, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x03, 0xF0, - 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, - 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, // 'V' - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0xF8, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x1F, 0x80, 0x07, 0xDF, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFD, 0xF8, - 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF7, 0xE0, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x3E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xF8, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xE0, - 0x07, 0xE0, 0x1F, 0x0F, 0xC0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x00, 0x7F, 0x03, 0xF0, 0x7E, - 0x07, 0xF0, 0x01, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0xC0, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x7E, 0x00, 0x0F, 0xC1, - 0xF8, 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x87, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x3F, 0x80, - 0x01, 0xF8, 0xFC, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xC0, 0x1F, - 0x9F, 0xC0, 0x00, 0x3F, 0x3E, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0xF9, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, // 'W' - 0x7F, 0x80, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x03, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x3F, 0x80, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x01, 0xFE, // 'X' - 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, // 'Y' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, // 'Z' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // '[' - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, // '\' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, - 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, - 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // ']' - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x0F, 0x8F, 0x80, - 0x00, 0x7C, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x03, - 0xE7, 0xC0, 0x00, 0x0F, 0x80, // '^' - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, // '_' - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, // '`' - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0xFF, 0x01, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0x03, 0xF9, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x0F, 0xE7, 0xF0, 0x01, 0xFD, 0xFC, - 0x00, 0x3F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x01, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF9, 0xFE, 0x07, - 0xFF, 0x3F, 0xFF, 0xF7, 0xE3, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0x0F, 0x83, 0xFF, 0xC1, 0xF0, 0x1F, 0xE0, 0x00, // 'a' - 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, 0x0F, 0xE0, 0x0F, 0xC7, 0xFF, 0x80, 0xFC, 0xFF, 0xFC, 0x0F, 0xDF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFF, 0x00, 0x1F, 0xCF, 0xF8, 0x03, 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xF9, 0xFF, 0xFE, 0x0F, - 0x8F, 0xFF, 0xC0, 0xF8, 0x7F, 0xF8, 0x00, 0x01, 0xFE, 0x00, // 'b' - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x1F, 0xE0, 0x3C, - 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x3F, 0xE0, 0x3C, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xE0, // 'c' - 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, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7E, 0x07, 0xFF, 0xE7, 0xE0, 0xFF, - 0xFF, 0x7E, 0x1F, 0xFF, 0xFF, 0xE3, 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x07, - 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF3, 0xE0, - 0x7F, 0xFE, 0x3E, 0x03, 0xFF, 0xC3, 0xE0, 0x0F, 0xE0, 0x00, // 'd' - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, - 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x3F, 0x7F, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x30, 0x7F, 0xC0, - 0x3E, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, // 'e' - 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0x02, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x80, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, // 'f' - 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, - 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFE, 0x00, 0x7E, 0x01, 0xFC, - 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC3, 0xF8, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x07, 0xEF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0xFE, 0x1F, 0xE0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, // 'g' - 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, 0x0F, 0xF0, 0x0F, 0xC7, 0xFF, 0xC0, 0xFC, 0xFF, 0xFE, 0x0F, 0xDF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, - 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xE0, // 'h' - 0x3C, 0x3F, 0x3F, 0x9F, 0xEF, 0xE3, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x00, // 'i' - 0x00, 0x78, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x00, // 'j' - 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, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, - 0x0F, 0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x07, 0xF8, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x1F, - 0xE0, 0x0F, 0xC1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x0F, 0xC7, 0xF0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xBF, 0x80, - 0x0F, 0xE1, 0xFC, 0x00, 0xFC, 0x1F, 0xE0, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F, 0x80, - 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFC, 0x00, 0x7F, 0x8F, - 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x1F, 0xC0, // 'k' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, - 0xFB, 0xF0, // 'l' - 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x03, 0xE1, 0xFF, 0xE0, 0x3F, 0xFE, 0x0F, 0x8F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xCF, 0xF8, - 0x07, 0xFF, 0x00, 0x7F, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, 0xC0, 0x03, 0xF3, 0xF8, 0x00, - 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, - 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, - 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, - 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, // 'm' - 0x00, 0x0F, 0xF0, 0x0F, 0x87, 0xFF, 0xC0, 0xF8, 0xFF, 0xFE, 0x0F, 0x9F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE0, // 'n' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xF8, 0x7F, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x3F, - 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, - 0xE1, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, // 'o' - 0x00, 0x0F, 0xE0, 0x0F, 0x87, 0xFF, 0x80, 0xF8, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFC, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x3F, 0xCF, 0xF8, 0x03, - 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFD, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xC0, 0xFC, 0x7F, 0xF8, - 0x0F, 0xC1, 0xFE, 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, // 'p' - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x07, 0xFF, 0xE3, 0xE0, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, - 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF7, 0xE0, 0x7F, 0xFE, 0x7E, 0x03, 0xFF, 0xC7, - 0xE0, 0x0F, 0xF0, 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, // 'q' - 0x00, 0x0F, 0xDF, 0x07, 0xFB, 0xE3, 0xFF, 0x7C, 0xFF, 0xEF, 0x9F, 0xFD, 0xF7, 0xFF, 0x3F, 0xF8, 0x07, 0xFC, - 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x00, // 'r' - 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xE0, 0x3E, 0x3F, - 0x00, 0x08, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFD, - 0x80, 0x03, 0xF3, 0xE0, 0x1F, 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x07, - 0xFE, 0x00, // 's' - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x10, 0x3F, 0xFF, 0x80, - 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x1F, 0xE0, // 't' - 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, - 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x80, 0x3F, 0xE7, 0xFC, 0x0F, - 0xFE, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xE3, 0xE0, 0x7F, 0xFC, 0x3E, 0x01, 0xFE, 0x00, - 0x00, // 'u' - 0xFE, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF0, 0x00, - 0x3F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0x7E, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, // 'v' - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xBF, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0xFC, - 0x00, 0xFF, 0xC0, 0x0F, 0xC7, 0xE0, 0x07, 0xFE, 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0xF0, 0x07, 0xF1, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0x87, 0xE0, 0x1F, 0x7E, 0x01, 0xF8, 0x3F, 0x00, 0xF9, 0xF0, 0x0F, 0xC1, 0xFC, 0x07, 0xCF, - 0x80, 0xFE, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xE3, 0xF0, 0x3F, 0x01, 0xF8, 0x1F, 0x0F, 0x81, - 0xF8, 0x0F, 0xE0, 0xF8, 0x7C, 0x1F, 0xC0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x01, 0xF8, 0x7C, 0x1F, 0x87, 0xE0, - 0x0F, 0xC3, 0xE0, 0x7C, 0x3F, 0x00, 0x3F, 0x3F, 0x03, 0xF3, 0xF0, 0x01, 0xF9, 0xF8, 0x1F, 0x9F, 0x80, 0x0F, - 0xCF, 0x80, 0x7C, 0xFC, 0x00, 0x7E, 0x7C, 0x03, 0xE7, 0xE0, 0x01, 0xF7, 0xE0, 0x1F, 0x7E, 0x00, 0x0F, 0xFE, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, // 'w' - 0x7F, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, - 0xC0, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0xC0, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x7F, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xE0, - 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0xFE, 0x1F, 0xE0, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x0F, 0xE0, // 'x' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x7F, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xF1, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, // 'y' - 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'z' - 0x00, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x07, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x01, 0xF0, // '{' - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, // '|' - 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0xFF, 0xE0, 0x1F, 0xF0, 0x03, 0xF8, - 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_56Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 16, 0, 0}, // ' ' - {1, 9, 41, 16, 4, -40}, // '!' - {48, 17, 14, 25, 4, -40}, // '"' - {78, 35, 40, 37, 1, -40}, // '#' - {253, 27, 46, 33, 3, -43}, // '$' - {409, 45, 42, 49, 2, -41}, // '%' - {646, 39, 42, 42, 3, -41}, // '&' - {851, 7, 14, 15, 4, -40}, // ''' - {864, 15, 49, 19, 2, -40}, // '(' - {956, 15, 49, 19, 2, -40}, // ')' - {1048, 28, 26, 32, 2, -43}, // '*' - {1139, 27, 27, 33, 3, -33}, // '+' - {1231, 10, 14, 16, 2, -7}, // ',' - {1249, 15, 5, 19, 2, -18}, // '-' - {1259, 9, 8, 16, 4, -7}, // '.' - {1268, 23, 40, 23, 0, -40}, // '/' - {1383, 29, 42, 33, 2, -41}, // '0' - {1536, 18, 40, 33, 4, -40}, // '1' - {1626, 29, 41, 33, 2, -41}, // '2' - {1775, 28, 42, 33, 2, -41}, // '3' - {1922, 31, 40, 33, 1, -40}, // '4' - {2077, 27, 41, 33, 3, -40}, // '5' - {2216, 28, 42, 33, 3, -41}, // '6' - {2363, 29, 40, 33, 2, -40}, // '7' - {2508, 29, 42, 33, 2, -41}, // '8' - {2661, 29, 42, 33, 2, -41}, // '9' - {2814, 9, 32, 16, 4, -31}, // ':' - {2850, 11, 38, 17, 2, -31}, // ';' - {2903, 27, 28, 33, 3, -34}, // '<' - {2998, 27, 16, 33, 3, -28}, // '=' - {3052, 27, 28, 33, 3, -34}, // '>' - {3147, 25, 42, 26, 0, -41}, // '?' - {3279, 45, 45, 51, 3, -40}, // '@' - {3533, 38, 40, 38, 0, -40}, // 'A' - {3723, 30, 40, 38, 5, -40}, // 'B' - {3873, 32, 42, 37, 3, -41}, // 'C' - {4041, 34, 40, 42, 5, -40}, // 'D' - {4211, 24, 40, 32, 5, -40}, // 'E' - {4331, 24, 40, 31, 5, -40}, // 'F' - {4451, 35, 42, 42, 3, -41}, // 'G' - {4635, 33, 40, 43, 5, -40}, // 'H' - {4800, 8, 40, 18, 5, -40}, // 'I' - {4840, 17, 51, 18, -4, -40}, // 'J' - {4949, 32, 40, 37, 5, -40}, // 'K' - {5109, 24, 40, 31, 5, -40}, // 'L' - {5229, 43, 40, 53, 5, -40}, // 'M' - {5444, 35, 40, 45, 5, -40}, // 'N' - {5619, 39, 42, 45, 3, -41}, // 'O' - {5824, 27, 40, 35, 5, -40}, // 'P' - {5959, 39, 51, 45, 3, -41}, // 'Q' - {6208, 31, 40, 37, 5, -40}, // 'R' - {6363, 27, 42, 32, 3, -41}, // 'S' - {6505, 31, 40, 33, 1, -40}, // 'T' - {6660, 33, 41, 43, 5, -40}, // 'U' - {6830, 36, 40, 36, 0, -40}, // 'V' - {7010, 54, 40, 54, 0, -40}, // 'W' - {7280, 36, 40, 36, 0, -40}, // 'X' - {7460, 34, 40, 34, 0, -40}, // 'Y' - {7630, 29, 40, 33, 2, -40}, // 'Z' - {7775, 14, 49, 19, 4, -40}, // '[' - {7861, 23, 40, 23, 0, -40}, // '\' - {7976, 14, 49, 19, 1, -40}, // ']' - {8062, 29, 26, 31, 1, -40}, // '^' - {8157, 25, 4, 25, 0, 5}, // '_' - {8170, 14, 9, 34, 10, -43}, // '`' - {8186, 27, 32, 33, 2, -31}, // 'a' - {8294, 28, 44, 36, 5, -43}, // 'b' - {8448, 24, 32, 29, 3, -31}, // 'c' - {8544, 28, 44, 36, 3, -43}, // 'd' - {8698, 27, 32, 33, 3, -31}, // 'e' - {8806, 23, 43, 21, 1, -43}, // 'f' - {8930, 30, 44, 32, 1, -31}, // 'g' - {9095, 28, 43, 37, 5, -43}, // 'h' - {9246, 9, 42, 17, 4, -42}, // 'i' - {9294, 16, 55, 17, -3, -42}, // 'j' - {9404, 28, 43, 33, 5, -43}, // 'k' - {9555, 7, 43, 17, 5, -43}, // 'l' - {9593, 46, 31, 55, 5, -31}, // 'm' - {9772, 28, 31, 37, 5, -31}, // 'n' - {9881, 29, 32, 35, 3, -31}, // 'o' - {9997, 28, 44, 36, 5, -31}, // 'p' - {10151, 28, 44, 36, 3, -31}, // 'q' - {10305, 19, 31, 25, 5, -31}, // 'r' - {10379, 23, 32, 28, 3, -31}, // 's' - {10471, 21, 38, 23, 1, -37}, // 't' - {10571, 28, 31, 37, 4, -30}, // 'u' - {10680, 31, 30, 31, 0, -30}, // 'v' - {10797, 45, 30, 47, 1, -30}, // 'w' - {10966, 30, 30, 32, 1, -30}, // 'x' - {11079, 31, 43, 31, 0, -30}, // 'y' - {11246, 24, 30, 28, 2, -30}, // 'z' - {11336, 21, 49, 23, 1, -40}, // '{' - {11465, 6, 56, 32, 13, -43}, // '|' - {11507, 20, 49, 22, 1, -40} // '}' -}; -const GFXfont Open_Sans_SemiBold_56 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_56Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_56Glyphs, 0x20, 0x7E, 77}; \ No newline at end of file diff --git a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Inkplate5_Crowdsupply_Campaing_Tracker.ino b/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Inkplate5_Crowdsupply_Campaing_Tracker.ino deleted file mode 100644 index 56be01441..000000000 --- a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/Inkplate5_Crowdsupply_Campaing_Tracker.ino +++ /dev/null @@ -1,204 +0,0 @@ -/* - Inkplate5_Crowdsupply_Campaing_Tracker example for Soldered Inkplate 5 - For this example you will need only USB cable and Inkplate 5. - Select "Soldered Inkplate5" from Tools -> Board menu. - Don't have "Soldered Inkplate5" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-5-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 5 to display html data. - This example gets html data from crowdsource campaing and displays them on Inkplate screen. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 8 Jul 2023 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATE5 -#error "Wrong board selection for this example, please select Soldered Inkplate5 in the boards menu." -#endif - -#include "Inkplate.h" // Include Inkplate library to the sketch -#include "generatedUI.h" // include generated UI - -#define DELAY_MS 60000 * 60 // Delay between fetching data -#define URL "https://www.crowdsupply.com/soldered/inkplate-5" // Link to the Inkplate 5 crowdsupply campaign - -// Enter your WiFi credentials -char ssid[] = ""; -char pass[] = ""; - -// Create an object on Inkplate library and also set library into 1Bit (BW) mode -Inkplate display(INKPLATE_1BIT); - -uint32_t n; // Variable for counting position in the buffer -char *buf; // Pointer to the buffer - -// Declaration of the function used later -String textInTag(const char *tag, const char *tagEnd, int dt = 1); - -void setup() -{ - Serial.begin(115200); // Init serial communication - display.begin(); // Init Inkplate library (you should call this function ONLY ONCE) - - // Connect to WiFi - while (!display.connectWiFi(ssid, pass)) - { - Serial.print('.'); - delay(1000); - } - - // Allocate memory for the buffer - buf = (char *)ps_malloc(100000); - - // Create an HTTPclient object and do the GET request - HTTPClient http; - if (http.begin(URL) && http.GET() > 0) - { - // Create an HTTPclient object and do the GET request - while (http.getStreamPtr()->available()) - { - char c = http.getStreamPtr()->read(); - buf[n++] = c; - delayMicroseconds(100); - } - - // Add the end of the string - buf[n] = 0; - } - - Serial.println("Buffer load complete!"); - - // Get the values for each field. - // When we did a get request, we got HTML as a response because there is no API on this web page. - // If you open the source of the page, you will see the HTML code. Here in the function we pass tags we are - // interested in and get the value between the tags as a string. - text1_content = textInTag("

", "

"); // Separate the product name - text3_content = textInTag("

", "

"); // Separate the project teaser - text4_content = textInTag("

", "

"); // Separate the amount of pledged - text7_content = textInTag("

", "

"); // Separate the goal - text11_content = textInTag("
", ""); // Separate the percentage - - int percent; - text11_content.replace(",", ""); - sscanf(text11_content.c_str(), "%d%%", &percent); - - // Draw parcent slider - if (percent < 100 && percent > 0) - { - float per = (float)(percent / 100.00); - int diff = line0_end_x - line0_start_x; - Serial.println(per); - Serial.println(diff); - line0_end_x = line0_start_x + (diff * per); - } - else if (percent >= 100) - { - } - else - { - line0_end_x = line0_start_x; - } - - text13_content = textInTag("", ""); // Separate the number of updates - text14_content = - textInTag("", ""); // Separate the date when founded - text17_content = textInTag("", ""); // Separate the number of backers - text19_content += textInTag("", - ""); // Separate the last update date - - // Display the content on the screen - mainDraw(); - display.display(); - - // Free the buffer - free(buf); - - // Go to sleep - esp_sleep_enable_timer_wakeup(1000LL * DELAY_MS); - (void)esp_deep_sleep_start(); -} - -void loop() -{ - // Never here -} - -/** - * @brief The function that returns content between HTML tags as a string. - * - * @param const char *tag - * The starting tag from which we want to get the value - * - * @param const char *tagEnd - * The ending tag from which we want to get the value - * - * @param int dt - * How many end tags (*tagEnd) want to skip. Default is 1 - * - * @return String value between passed tags - */ -String textInTag(const char *tag, const char *tagEnd, int dt) -{ - String r; // String for result - char *start = strstr(buf, tag) + strlen(tag); // Pointer to the beginning of the text after the tag - char *end = start - 1; // Set tag end one address before start pointer - while (dt--) - { - // Search where is the "tagEnd" starting from the last "end" which is the beginning for the first time - // (*end = start - 1) and repeat it "dt" times - end = strstr(end + 1, tagEnd); - } - - // Remove "<" and ">" from the result string - int d = 0; - for (char *t = start; t < end; ++t) - { - if (*t == '<') - ++d; - if (d == 0 && *t != '\n') - { - r += *t; - } - if (*t == '>') - --d; - } - - // Remove certain words to get only the data we want - // Hacky solution: - r.replace(""", "\""); - r.replace(" ", " "); - - r.replace("raised", ""); - r.replace("goal", ""); - r.replace("Funded!", ""); - r.replace("funded", ""); - r.replace(" on", ""); - r.replace("updates", ""); - - // Remove the following from the result string if it exists and put it in the separate string that displays on - // the screen - if (r.indexOf("hours left") != -1) - { - r.replace("hours left", ""); - text17_content = "hours left"; - } - if (r.indexOf("days left") != -1) - { - r.replace("days left", ""); - text17_content = "days left"; - } - - r.replace("backers", ""); - r.replace("Subscribe to Updates", ""); - - // Remove extraneous whitespace characters at the beginning or the end of the string - r.trim(); - - // If there is a dollar sign, the result is the string after that - if (r.indexOf("$") != -1) - r = r.substring(r.indexOf("$") + 1); - - return r; -} diff --git a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/generatedUI.h b/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/generatedUI.h deleted file mode 100644 index ce0831674..000000000 --- a/examples/Inkplate5/Projects/Inkplate5_Crowdsupply_Campaing_Tracker/generatedUI.h +++ /dev/null @@ -1,352 +0,0 @@ -#include "Arduino.h" -#include "Fonts/Open_Sans_SemiBold_16.h" -#include "Fonts/Open_Sans_SemiBold_24.h" -#include "Fonts/Open_Sans_SemiBold_32.h" -#include "Fonts/Open_Sans_SemiBold_56.h" -#include "Inkplate.h" - -extern Inkplate display; - -int rect0_a_x = 12; -int rect0_a_y = 9; -int rect0_b_x = 948; -int rect0_b_y = 532; -int rect0_fill = -1; -int rect0_radius = -1; -int rect0_color = BLACK; - -String text1_content; -int text1_cursor_x = 28; -int text1_cursor_y = 50; -const GFXfont *text1_font = &Open_Sans_SemiBold_56; - -String text2_content = "Soldered"; -int text2_cursor_x = 790; -int text2_cursor_y = 38; -const GFXfont *text2_font = &Open_Sans_SemiBold_32; - -String text3_content; -int text3_cursor_x = 120; -int text3_cursor_y = 90; -const GFXfont *text3_font = &Open_Sans_SemiBold_24; - -String text4_content; -int text4_cursor_x = 84; -int text4_cursor_y = 274; -const GFXfont *text4_font = &Open_Sans_SemiBold_56; - -String text5_content = "$"; -int text5_cursor_x = 60; -int text5_cursor_y = 270; -const GFXfont *text5_font = &Open_Sans_SemiBold_32; - -String text6_content = "raised"; -int text6_cursor_x = 305; -int text6_cursor_y = 265; -const GFXfont *text6_font = &Open_Sans_SemiBold_32; - -String text7_content; -int text7_cursor_x = 84; -int text7_cursor_y = 345; -const GFXfont *text7_font = &Open_Sans_SemiBold_56; - -String text8_content = "$"; -int text8_cursor_x = 60; -int text8_cursor_y = 345; -const GFXfont *text8_font = &Open_Sans_SemiBold_32; - -String text9_content = "goal"; -int text9_cursor_x = 305; -int text9_cursor_y = 336; -const GFXfont *text9_font = &Open_Sans_SemiBold_32; - -int rect1_a_x = 48; -int rect1_a_y = 225; -int rect1_b_x = 420; -int rect1_b_y = 472; -int rect1_fill = -1; -int rect1_radius = -1; -int rect1_color = BLACK; - -int rect2_a_x = 540; -int rect2_a_y = 225; -int rect2_b_x = 912; -int rect2_b_y = 472; -int rect2_fill = -1; -int rect2_radius = -1; -int rect2_color = BLACK; - -int rect3_a_x = 60; -int rect3_a_y = 405; -int rect3_b_x = 408; -int rect3_b_y = 429; -int rect3_fill = -1; -int rect3_radius = -1; -int rect3_color = BLACK; - -int line0_start_x = 60; -int line0_start_y = 416; -int line0_end_x = 408; -int line0_end_y = 416; -int line0_color = BLACK; -int line0_thickness = 26; -int line0_gradient = 0; - -String text11_content = "100%"; -int text11_cursor_x = 210; -int text11_cursor_y = 395; -const GFXfont *text11_font = &Open_Sans_SemiBold_24; - -String text12_content = "Funded!"; -int text12_cursor_x = 180; -int text12_cursor_y = 455; -const GFXfont *text12_font = &Open_Sans_SemiBold_24; - -String text13_content; -int text13_cursor_x = 552; -int text13_cursor_y = 274; -const GFXfont *text13_font = &Open_Sans_SemiBold_56; - -String text14_content; -int text14_cursor_x = 552; -int text14_cursor_y = 351; -const GFXfont *text14_font = &Open_Sans_SemiBold_32; - -String text15_content; -int text15_cursor_x = 720; -int text15_cursor_y = 365; -const GFXfont *text15_font = &Open_Sans_SemiBold_56; - -String text16_content = "updates"; -int text16_cursor_x = 720; -int text16_cursor_y = 265; -const GFXfont *text16_font = &Open_Sans_SemiBold_32; - -String text17_content; -int text17_cursor_x = 552; -int text17_cursor_y = 453; -const GFXfont *text17_font = &Open_Sans_SemiBold_56; - -String text18_content = "backers"; -int text18_cursor_x = 720; -int text18_cursor_y = 450; -const GFXfont *text18_font = &Open_Sans_SemiBold_32; - -String text19_content = "Last update posted "; -int text19_cursor_x = 290; -int text19_cursor_y = 513; -const GFXfont *text19_font = &Open_Sans_SemiBold_24; - -void mainDraw() -{ - if (rect0_radius != -1 && rect0_fill != -1) - display.fillRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius != -1 && rect0_fill == -1) - display.drawRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius == -1 && rect0_fill != -1) - display.fillRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - else if (rect0_radius == -1 && rect0_fill == -1) - display.drawRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - - display.setFont(text1_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text1_cursor_x, text1_cursor_y); - display.print(text1_content); - //Serial.print("Text 1: "); - //Serial.println(text1_content); - - display.setFont(text2_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text2_cursor_x, text2_cursor_y); - display.print(text2_content); - //Serial.print("Text 2: "); - //Serial.println(text2_content); - - // Manual edit: - GFXcanvas1 canvas(750, 150); - canvas.setFont(text3_font); - canvas.setTextColor(BLACK, WHITE); - canvas.setTextSize(1); - canvas.setCursor(0, 20); - canvas.print(text3_content); - // canvas.drawRect(0, 0, 100, 100, BLACK); - //Serial.print("Text 3: "); - //Serial.println(text3_content); - - display.drawBitmap(text3_cursor_x, text3_cursor_y, canvas.getBuffer(), 750, 150, BLACK, WHITE); - - display.setFont(text4_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text4_cursor_x, text4_cursor_y); - display.print(text4_content); - //Serial.print("Text 4: ");// - //Serial.println(text4_content)//; - - display.setFont(text5_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text5_cursor_x, text5_cursor_y); - display.print(text5_content); - //Serial.print("Text 5: "); - //Serial.println(text5_content); - - display.setFont(text6_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text6_cursor_x, text6_cursor_y); - display.print(text6_content); - //Serial.print("Text 6: "); - //Serial.println(text6_content); - - display.setFont(text7_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text7_cursor_x, text7_cursor_y); - display.print(text7_content); - //Serial.print("Text 7: "); - //Serial.println(text7_content); - - display.setFont(text8_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text8_cursor_x, text8_cursor_y); - display.print(text8_content); - //Serial.print("Text 8: "); - //Serial.println(text8_content); - - display.setFont(text9_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text9_cursor_x, text9_cursor_y); - display.print(text9_content); - //Serial.print("Text 9: "); - //Serial.println(text9_content); - - if (rect1_radius != -1 && rect1_fill != -1) - display.fillRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius != -1 && rect1_fill == -1) - display.drawRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius == -1 && rect1_fill != -1) - display.fillRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - else if (rect1_radius == -1 && rect1_fill == -1) - display.drawRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - - if (rect2_radius != -1 && rect2_fill != -1) - display.fillRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius != -1 && rect2_fill == -1) - display.drawRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius == -1 && rect2_fill != -1) - display.fillRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - else if (rect2_radius == -1 && rect2_fill == -1) - display.drawRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - - if (rect3_radius != -1 && rect3_fill != -1) - display.fillRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius != -1 && rect3_fill == -1) - display.drawRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius == -1 && rect3_fill != -1) - display.fillRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - else if (rect3_radius == -1 && rect3_fill == -1) - display.drawRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - - if (line0_gradient <= line0_color && line0_thickness == 1) - { - display.drawLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color); - } - else if (line0_gradient <= line0_color && line0_thickness != 1) - { - display.drawThickLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_thickness); - } - else if (line0_gradient > line0_color && line0_thickness == 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - 1); - } - else if (line0_gradient > line0_color && line0_thickness != 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - line0_thickness); - } - display.setFont(text11_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text11_cursor_x, text11_cursor_y); - display.print(text11_content); - //Serial.print("Text 11: "); - //Serial.println(text11_content); - - display.setFont(text12_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text12_cursor_x, text12_cursor_y); - display.print(text12_content); - //Serial.print("Text 12: "); - //Serial.println(text12_content); - - display.setFont(text13_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text13_cursor_x, text13_cursor_y); - display.print(text13_content); - //Serial.print("Text 13: "); - //Serial.println(text13_content); - - display.setFont(text14_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text14_cursor_x, text14_cursor_y); - display.print(text14_content); - //Serial.print("Text 14: "); - //Serial.println(text14_content); - - display.setFont(text15_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text15_cursor_x, text15_cursor_y); - display.print(text15_content); - //Serial.print("Text 15: "); - //Serial.println(text15_content); - - display.setFont(text16_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text16_cursor_x, text16_cursor_y); - display.print(text16_content); - //Serial.print("Text 16: "); - //Serial.println(text16_content); - - display.setFont(text17_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text17_cursor_x, text17_cursor_y); - display.print(text17_content); - //Serial.print("Text 17: "); - //Serial.println(text17_content); - - display.setFont(text18_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text18_cursor_x, text18_cursor_y); - display.print(text18_content); - //Serial.print("Text 18: "); - //Serial.println(text18_content); - - display.setFont(text19_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text19_cursor_x, text19_cursor_y); - display.print(text19_content); - //Serial.print("Text 19: "); - //Serial.println(text19_content); -} diff --git a/examples/Inkplate5/Projects/Inkplate5_Daily_Weather_Station/Inkplate5_Daily_Weather_Station.ino b/examples/Inkplate5/Projects/Inkplate5_Daily_Weather_Station/Inkplate5_Daily_Weather_Station.ino index 319855f13..dd6ada07d 100644 --- a/examples/Inkplate5/Projects/Inkplate5_Daily_Weather_Station/Inkplate5_Daily_Weather_Station.ino +++ b/examples/Inkplate5/Projects/Inkplate5_Daily_Weather_Station/Inkplate5_Daily_Weather_Station.ino @@ -26,7 +26,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5/Projects/Inkplate5_Google_Calendar/Inkplate5_Google_Calendar.ino b/examples/Inkplate5/Projects/Inkplate5_Google_Calendar/Inkplate5_Google_Calendar.ino index 1e1c3fc65..71f131e23 100644 --- a/examples/Inkplate5/Projects/Inkplate5_Google_Calendar/Inkplate5_Google_Calendar.ino +++ b/examples/Inkplate5/Projects/Inkplate5_Google_Calendar/Inkplate5_Google_Calendar.ino @@ -8,6 +8,8 @@ This project shows you how Inkplate 5 can be used to display events in your Google Calendar using their provided API + Documentation link: https://soldered.com/documentation/inkplate/projects/GoogleCalendar + For this to work you need to change your timezone, wifi credentials and your private calendar url which you can find following these steps: diff --git a/examples/Inkplate5/Projects/Inkplate5_Hourly_Weather_Station/Inkplate5_Hourly_Weather_Station.ino b/examples/Inkplate5/Projects/Inkplate5_Hourly_Weather_Station/Inkplate5_Hourly_Weather_Station.ino index db55c02e0..747cae99c 100644 --- a/examples/Inkplate5/Projects/Inkplate5_Hourly_Weather_Station/Inkplate5_Hourly_Weather_Station.ino +++ b/examples/Inkplate5/Projects/Inkplate5_Hourly_Weather_Station/Inkplate5_Hourly_Weather_Station.ino @@ -25,7 +25,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5/Projects/Inkplate5_Image_Uploader/Inkplate5_Image_Uploader.ino b/examples/Inkplate5/Projects/Inkplate5_Image_Uploader/Inkplate5_Image_Uploader.ino index 4542c35a2..1829fe642 100644 --- a/examples/Inkplate5/Projects/Inkplate5_Image_Uploader/Inkplate5_Image_Uploader.ino +++ b/examples/Inkplate5/Projects/Inkplate5_Image_Uploader/Inkplate5_Image_Uploader.ino @@ -1,9 +1,9 @@ /* - Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 10 + Inkplate5 Image Uploader Example + Compatible with Soldered Inkplate 5 -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 5 diff --git a/examples/Inkplate5/Projects/Inkplate5_OpenAI_Image_Slideshow/Inkplate5_OpenAI_Image_Slideshow.ino b/examples/Inkplate5/Projects/Inkplate5_OpenAI_Image_Slideshow/Inkplate5_OpenAI_Image_Slideshow.ino index bca61b690..af031bace 100644 --- a/examples/Inkplate5/Projects/Inkplate5_OpenAI_Image_Slideshow/Inkplate5_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate5/Projects/Inkplate5_OpenAI_Image_Slideshow/Inkplate5_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate5 OpenAI Image slideshow - Compatible with Soldered Inkplate 5 + Compatible with Soldered Inkplate 5 -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 5. Select "e-radionica Inkplate5" or "Soldered Inkplate5" from Tools -> Board menu. diff --git a/examples/Inkplate5/Projects/Inkplate5_OpenAI_Text_Prompt/Inkplate5_OpenAI_Text_Prompt.ino b/examples/Inkplate5/Projects/Inkplate5_OpenAI_Text_Prompt/Inkplate5_OpenAI_Text_Prompt.ino index f5c3ec452..13227a103 100644 --- a/examples/Inkplate5/Projects/Inkplate5_OpenAI_Text_Prompt/Inkplate5_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate5/Projects/Inkplate5_OpenAI_Text_Prompt/Inkplate5_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate5 OpenAI text prompt generator - Compatible with Soldered Inkplate 5 + Compatible with Soldered Inkplate 5 -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 5. Select "Soldered Inkplate5" from Tools -> Board menu. diff --git a/examples/Inkplate5/Projects/Inkplate5_OpenWeather_Station/Inkplate5_OpenWeather_Station.ino b/examples/Inkplate5/Projects/Inkplate5_OpenWeather_Station/Inkplate5_OpenWeather_Station.ino index 208cb8fed..3dd0618be 100644 --- a/examples/Inkplate5/Projects/Inkplate5_OpenWeather_Station/Inkplate5_OpenWeather_Station.ino +++ b/examples/Inkplate5/Projects/Inkplate5_OpenWeather_Station/Inkplate5_OpenWeather_Station.ino @@ -26,7 +26,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5V2/Advanced/DeepSleep/Inkplate5V2_Simple_Deep_Sleep/Inkplate5V2_Simple_Deep_Sleep.ino b/examples/Inkplate5V2/Advanced/DeepSleep/Inkplate5V2_Simple_Deep_Sleep/Inkplate5V2_Simple_Deep_Sleep.ino index df047ae34..34ee64fa6 100644 --- a/examples/Inkplate5V2/Advanced/DeepSleep/Inkplate5V2_Simple_Deep_Sleep/Inkplate5V2_Simple_Deep_Sleep.ino +++ b/examples/Inkplate5V2/Advanced/DeepSleep/Inkplate5V2_Simple_Deep_Sleep/Inkplate5V2_Simple_Deep_Sleep.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Battery_Voltage/Inkplate5V2_Read_Battery_Voltage.ino b/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Battery_Voltage/Inkplate5V2_Read_Battery_Voltage.ino index 94809c1cb..5dabd2ea2 100644 --- a/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Battery_Voltage/Inkplate5V2_Read_Battery_Voltage.ino +++ b/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Battery_Voltage/Inkplate5V2_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Temperature/Inkplate5V2_Read_Temperature.ino b/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Temperature/Inkplate5V2_Read_Temperature.ino index 95341b921..8ba3e8631 100644 --- a/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Temperature/Inkplate5V2_Read_Temperature.ino +++ b/examples/Inkplate5V2/Advanced/Other/Inkplate5V2_Read_Temperature/Inkplate5V2_Read_Temperature.ino @@ -14,7 +14,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate5V2/Basic/Inkplate5V2_Black_And_White/logo.h b/examples/Inkplate5V2/Basic/Inkplate5V2_Black_And_White/logo.h index c06f56d8f..4053d9b3b 100644 --- a/examples/Inkplate5V2/Basic/Inkplate5V2_Black_And_White/logo.h +++ b/examples/Inkplate5V2/Basic/Inkplate5V2_Black_And_White/logo.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Array that holds data for bitmap image of 800x160 pixels. You can convert your own image using Inkplate Image Converter. const uint8_t logo[] PROGMEM = { diff --git a/examples/Inkplate5V2/Basic/Inkplate5V2_Grayscale/image.h b/examples/Inkplate5V2/Basic/Inkplate5V2_Grayscale/image.h index 171c166d7..2d0485366 100644 --- a/examples/Inkplate5V2/Basic/Inkplate5V2_Grayscale/image.h +++ b/examples/Inkplate5V2/Basic/Inkplate5V2_Grayscale/image.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t picture1[] = { 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0xaa, 0xaa, 0x99, 0x99, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xa9, 0x99, 0x99, 0xaa, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0x9a, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x99, 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x9a, 0xaa, 0xaa, 0xba, 0xaa, 0xba, 0x9a, 0xba, 0xaa, 0xa9, 0x98, 0x88, 0x87, 0x77, 0x88, 0x88, 0x77, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x78, 0x88, 0x87, 0x77, 0x77, diff --git a/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/Inkplate5V2_Peripheral_Mode.ino b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/Inkplate5V2_Peripheral_Mode.ino index 32f7602ee..f2da3f846 100644 --- a/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/Inkplate5V2_Peripheral_Mode.ino +++ b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/Inkplate5V2_Peripheral_Mode.ino @@ -18,597 +18,47 @@ UART settings are: 115200 baud, standard parity, ending with "\n\r" (Both NL & CR) You can send commands via USB port or by directly connecting to ESP32 TX and RX pins. - Don't forget you need to send #L(1)* after each command to show it on the display - (equal to display.display()). - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ + Want to learn more about Inkplate? Visit https://soldered.com/documentation/inkplate/ 15 April 2024 by Soldered */ +// Include Inkplate library. +#include "Inkplate.h" -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATE5V2 -#error "Wrong board selection for this example, please select Soldered Inkplate5 V2 in the boards menu." -#endif +// Include peripheral mode library. +#include "InkplatePeripheralMode.h" -// Include Inkplate library to the sketch -#include "Inkplate.h" +// Include the header files with sketch settngs (buffer size, serial timeput, argument termination char etc). +#include "settings.h" -// Create object on Inkplate library and set library to work in monochorme mode -Inkplate display(INKPLATE_1BIT); +// Pointer to the singleton class instance. +PeripheralMode *peripheral; -#define BUFFER_SIZE 1000 -char commandBuffer[BUFFER_SIZE + 1]; -char strTemp[2001]; +// Inkplate object. +Inkplate display(INKPLATE_3BIT); void setup() { + // Init Inkplate library. display.begin(); - Serial.begin(115200); - memset(commandBuffer, 0, BUFFER_SIZE); -} - -void loop() -{ - if (Serial.available()) - { - while (Serial.available()) - { - for (int i = 0; i < (BUFFER_SIZE - 1); i++) - { - commandBuffer[i] = commandBuffer[i + 1]; - } - commandBuffer[BUFFER_SIZE - 1] = Serial.read(); - } - } - char *s = NULL; - char *e = NULL; - for (int i = 0; i < BUFFER_SIZE; i++) - { - if (commandBuffer[i] == '#' && s == NULL) - s = &commandBuffer[i]; - if (commandBuffer[i] == '*' && e == NULL) - e = &commandBuffer[i]; - } - if (s != NULL && e != NULL) - { - if ((e - s) > 0) - { - int x, x1, x2, y, y1, y2, x3, y3, l, c, w, h, r, n, rx, ry, xc, yc, yr; - uint8_t hr, min, sec, wday, day, mon, k, as, am, ah, ad, aw, amc, v; - bool ie, ip; - System::rtcCountdownSrcClock sc; - uint32_t ep, ae; - char b; - char temp[150]; - switch (*(s + 1)) - { - case '?': - Serial.print("OK"); - break; - - case '0': - sscanf(s + 3, "%d,%d,%d", &x, &y, &c); - // sprintf(temp, "display.drawPixel(%d, %d, %d)\n\r", x, y, c); - // Serial.print(temp); - display.drawPixel(x, y, c); - break; - - case '1': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawLine(x1, y1, x2, y2, c); - break; - - case '2': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastVLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastVLine(x, y, l, c); - break; - - case '3': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastHLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastHLine(x, y, l, c); - break; - - case '4': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.drawRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.drawRect(x, y, w, h, c); - break; - - case '5': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.drawCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.drawCircle(x, y, r, c); - break; - - case '6': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.drawTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.drawTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case '7': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.drawRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.drawRoundRect(x, y, w, h, r, c); - break; - - case '8': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.fillRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.fillRect(x, y, w, h, c); - break; - - case '9': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.fillCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.fillCircle(x, y, r, c); - break; - case 'A': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.fillTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.fillTriangle(x1, y1, x2, y2, x3, y3, c); - break; + // Create one instance of the object. + peripheral = PeripheralMode::getInstance(); - case 'B': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.fillRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.fillRoundRect(x, y, w, h, r, c); - break; - - case 'C': - sscanf(s + 3, "\"%2000[^\"]\"", strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - // Serial.print("display.print(\""); - // Serial.print(strTemp); - // Serial.println("\");"); - display.print(strTemp); - break; - - case 'D': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setTextSize(%d)\n", c); - // Serial.print(temp); - display.setTextSize(c); - break; - - case 'E': - sscanf(s + 3, "%d,%d", &x, &y); - // sprintf(temp, "display.setCursor(%d, %d)\n", x, y); - // Serial.print(temp); - display.setCursor(x, y); - break; - - case 'F': - sscanf(s + 3, "%c", &b); - // sprintf(temp, "display.setTextWrap(%s)\n", b == 'T' ? "True" : "False"); - // Serial.print(temp); - if (b == 'T') - display.setTextWrap(true); - if (b == 'F') - display.setTextWrap(false); - break; - - case 'G': - sscanf(s + 3, "%d", &c); - c &= 3; - // sprintf(temp, "display.setRotation(%d)\n", c); - // Serial.print(temp); - display.setRotation(c); - break; - - case 'H': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawBitmapFromSd(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - - case 'I': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setDisplayMode(%s)\n", c == 0 ? "INKPLATE_1BIT" : "INKPLATE_3BIT"); - // Serial.print(temp); - if (c == 1) - display.selectDisplayMode(INKPLATE_1BIT); - if (c == 3) - display.selectDisplayMode(INKPLATE_3BIT); - break; - - case 'J': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - // if (0 == 0) { - // Serial.println("#J(0)*"); - //} else { - // Serial.println("#J(1)*"); - //} - if (display.getDisplayMode() == INKPLATE_1BIT) - { - Serial.println("#J(0)*"); - Serial.flush(); - } - if (display.getDisplayMode() == INKPLATE_3BIT) - { - Serial.println("#J(1)*"); - Serial.flush(); - } - } - break; - - case 'K': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.clearDisplay();\n"); - display.clearDisplay(); - } - break; - - case 'L': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.display();\n"); - display.display(); - } - break; - - case 'M': - sscanf(s + 3, "%d,%d,%d", &y1, &x2, &y2); - // sprintf(temp, "display.partialUpdate(%d, %d, %d);\n", y1, x2, y2); - // Serial.print(temp); - display.partialUpdate(); - break; - - case 'N': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#N("); - Serial.print(display.readTemperature(), DEC); - // Serial.print(23, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'O': - sscanf(s + 3, "%d", &c); - if (c >= 0 && c <= 2) - { - Serial.print("#O("); - Serial.print(display.readTouchpad(c), DEC); - // Serial.print(0, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'P': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#P("); - Serial.print(display.readBattery(), 2); - // Serial.print(3.54, 2); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'Q': - sscanf(s + 3, "%d", &c); - c &= 1; - // if (c == 0) Serial.print("display.einkOff();\n"); - // if (c == 1) Serial.print("display.einkOn();\n"); - if (c == 0) - display.einkOff(); - if (c == 1) - display.einkOn(); - break; - - case 'R': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#R("); - Serial.print(display.getPanelState(), DEC); - // Serial.print(1, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'S': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawImage(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - case 'T': - int t; - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c, &t); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawThickLine(x1, y1, x2, y2, c, t); - break; - case 'U': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawElipse(rx, ry, xc, yc, c); - break; - case 'V': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.fillElipse(rx, ry, xc, yc, c); - break; - case 'W': - sscanf(s + 3, "%d,%d,%d", &hr, &min, &sec); - // sprintf(temp, "display.rtcSetTime(%d, %d, %d);\n\r", hr, min, sec); - // Serial.println(temp); - display.rtcSetTime(hr, min, sec); - break; - case 'X': - sscanf(s + 3, "%d,%d,%d,%d", &wday, &day, &mon, &yr); - // sprintf(temp, "display.rtcSetDate(%d, %d, %d, %d);\n\r", wday, day, mon, yr); - // Serial.println(temp); - display.rtcSetDate(wday, day, mon, yr); - break; - case 'Y': - sscanf(s + 3, "%d", &ep); - // sprintf(temp, "display.rtcSetEpoch(%d);\n\r", ep); - // Serial.println(temp); - display.rtcSetEpoch(ep); - break; - case 'Z': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#Z("); - Serial.print(display.rtcGetEpoch()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'a': - sscanf(s + 3, "%d", &k); - if (k > 6) - { - Serial.println("INVALID"); - break; - } - display.rtcGetRtcData(); - Serial.print("#a("); - switch (k) - { - case 0: - Serial.print(display.rtcGetSecond()); - break; - case 1: - Serial.print(display.rtcGetMinute()); - break; - case 2: - Serial.print(display.rtcGetHour()); - break; - case 3: - Serial.print(display.rtcGetDay()); - break; - case 4: - Serial.print(display.rtcGetWeekday()); - break; - case 5: - Serial.print(display.rtcGetMonth()); - break; - case 6: - Serial.print(display.rtcGetYear()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'b': - sscanf(s + 3, "%d,%d,%d,%d,%d", &as, &am, &ah, &ad, &aw); - // sprintf(temp, "display.rtcSetAlarm(%d, %d, %d, %d, %d);\n\r", as, am, ah, ad, aw); - // Serial.println(temp); - display.rtcSetAlarm(as, am, ah, ad, aw); - break; - case 'c': - sscanf(s + 3, "%d,%d", &ae, &amc); - // sprintf(temp, "display.rtcSetAlarmEpoch(%d, %d);\n\r", ae, amc); - // Serial.println(temp); - display.rtcSetAlarmEpoch(ae, amc); - break; - case 'd': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#d("); - Serial.print(display.rtcCheckAlarmFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'e': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearAlarmFlag()"); - display.rtcClearAlarmFlag(); - Serial.flush(); - } - break; - case 'f': - sscanf(s + 3, "%d", &k); - if (k > 4) - { - Serial.println("INVALID"); - break; - } - Serial.print("#f("); - switch (k) - { - case 0: - Serial.print(display.rtcGetAlarmSecond()); - break; - case 1: - Serial.print(display.rtcGetAlarmMinute()); - break; - case 2: - Serial.print(display.rtcGetAlarmHour()); - break; - case 3: - Serial.print(display.rtcGetAlarmDay()); - break; - case 4: - Serial.print(display.rtcGetAlarmWeekday()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'g': - sscanf(s + 3, "%d,%d,%d,%d", &sc, &v, &ie, &ip); - - if (sc > 3) - { - Serial.println("ERROR"); - break; - } + // Set the baud rate (in this case 115200 bauds), set the serial buffer and it's size. + if (!peripheral->begin(&Serial, &display, 115200ULL, SERIAL_UART_RX_PIN, SERIAL_UART_TX_PIN, SERIAL_BUFFER_SIZE)) + { + // Send an error message on serial. + Serial.println("Peripheral mode init failed!\nProgram halted!"); - // sprintf(temp, "display.rtcTimerSet(%d, %d, %d, %d);\n\r", sc, v, ie, ip); - // Serial.println(temp); - display.rtcTimerSet(sc, v, ie, ip); - break; - case 'h': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#h("); - Serial.print(display.rtcCheckTimerFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'i': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearTimerFlag()"); - display.rtcClearTimerFlag(); - } - break; - case 'j': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcDisableTimer()"); - display.rtcDisableTimer(); - } - break; - case 'k': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#k("); - Serial.print(display.rtcIsSet()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'l': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcReset()"); - display.rtcReset(); - } - break; - } - *s = 0; - *e = 0; - } + // Stop the program from executing! + while(1); } + Serial.println("READY"); } -int hexToChar(char c) +void loop() { - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - return -1; -} + // Check if there is something in the serial. + peripheral->getDataFromSerial(SERIAL_TIMEOUT_MS); +} \ No newline at end of file diff --git a/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/InkplatePeripheralMode.cpp b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/InkplatePeripheralMode.cpp new file mode 100644 index 000000000..5b30be486 --- /dev/null +++ b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/InkplatePeripheralMode.cpp @@ -0,0 +1,1605 @@ +// Add header of the library to the source files. +#include "InkplatePeripheralMode.h" + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +// Include the list with all available commands. +#include "commandList.h" + +// Define the static member. +PeripheralMode* PeripheralMode::_instancePtr = nullptr; + +bool PeripheralMode::begin(HardwareSerial *_serialPtr, Inkplate *_inkplatePtr, uint32_t _baud, uint8_t _rxPin, uint8_t _txPin, uint32_t _size) +{ + // Store every parameter locally and check them. + if ((_serialPtr == nullptr) || (_inkplatePtr == nullptr) || (_size == 0)) return false; + _serial = _serialPtr; + _display = _inkplatePtr; + _bufferSize = _size; + + // Init the serial communication @ desired communication speed. Also set the pins. + _serial->begin(_baud, SERIAL_8N1, _rxPin, _txPin); + + // Allocate memory for the serial buffer in the PSRAM. + _serialBuffer = (char*)ps_malloc(_bufferSize * sizeof(char)); + + // Check if allocation is successful. + if (_serialBuffer == NULL) + { + return false; + } + + // If everything is ok, return true. + return true; +} + +bool PeripheralMode::getDataFromSerial(unsigned long _timeout) +{ + // Variable used for timeouting incoming serial data. + unsigned long _timestamp; + + // Variables for parsing. + char *_commandEndPosition = NULL; + + if (_serial->available()) + { + // You got something on the serial? Cool! + // First capture the current time (needed for timeouting!). + _timestamp = millis(); + + // Capture the timestamp for automatic buffer cleaning. + _bufferAutoCleanTimestamp = millis(); + + // Try to capture incoming serial data until the timeout or until the buffer is full! + while (((unsigned long)(millis() - _timestamp) < _timeout) && (_serialBufferIndex < (_bufferSize - 2))) + { + if (_serial->available()) + { + _serialBuffer[_serialBufferIndex++] = _serial->read(); + _timestamp = millis(); + } + } + + // Add a nul-terminating char. + _serialBuffer[_serialBufferIndex] = '\0'; + + // Go though all commands that are received. + _commandEndPosition = _serialBuffer; + while (_commandEndPosition != NULL) + { + // Variables for parsing. + int _command = 0; + int _repeatable = 0; + int _payloadSize = 0; + char *_payload = NULL; + + // Check received for validity. If everything went ok, parse the command. + if (checkPacket(_commandEndPosition, _bufferSize - (uint32_t)(_commandEndPosition - _serialBuffer), &_command, &_repeatable, &_payloadSize, &_payload, &_commandEndPosition)) + { + // If is a valid command, try to parse it. + parseCommand(_command, _repeatable, _payloadSize, _payload); + + // Reset the counter. + _serialBufferIndex = 0; + + // Go to the next command by advancing to the next index. + _commandEndPosition++; + } + } + } + + // Periodically clear the buffer from the remained invalid data. + if (((unsigned long)(millis() - _bufferAutoCleanTimestamp) >= SERIAL_BUFFER_CLEAN_TIME_MS) && _serialBufferIndex) + { + // Clear the buffer. + memset(_serialBuffer, 0, _bufferSize); + + // Reset the index variable. + _serialBufferIndex = 0; + + Serial.println("Cleaned"); + } + + // If data is not valid, return false; + return false; +} + +bool PeripheralMode::checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandLastPosition) +{ + // Prepare the command end position pointer - set it to null. Later in the code it will be set to some address that corresponds end position of the command. + // If not found, it will stay on null. + *_commandLastPosition = NULL; + + // -------------------PARSING START AND STOP FLAGS------------------- + // First check if there is start and stop flags. + char *_startFlag = strstr(_buffer, "TS"); + + // Check start flag. If the start flag is wrong, return error. + if (_startFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _startFlag; + + Serial.printf("Passed 1st check!\n"); + Serial.flush(); + + // -------------------PARSING COMMAND------------------- + // Check the command and payload size. + // First find the first semicolon. + char *_cmd = strchr(_startFlag + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_cmd == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _cmd; + + Serial.printf("Passed 2nd check!\n"); + Serial.flush(); + + // Check if there is a command. Move pointer by one place to the right (skip the semicolon). + int _cmdDataInt = strtol(_cmd + 1, NULL, 16); + + // If command if equal to zero, something is wrong. + if (_cmdDataInt == 0) return false; + + Serial.printf("Passed 3rd check!\n"); + Serial.flush(); + + // -------------------PARSING REPEATABLE FLAG------------------- + // Get the repeatable flag. + char *_repeatable = strchr(_cmd + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_repeatable == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _repeatable; + + Serial.printf("Passed 4th check!\n"); + Serial.flush(); + + // Get the repeatable flag data from HEX. Move one place to the right (skip the semicolon). + int _repeatableFlagInt = strtol(_repeatable + 1, NULL, 16); + + // Repeatable flag can only be one or zero. Discard otherwise. + if (_repeatableFlagInt > 1 || _repeatableFlagInt < 0) return false; + + Serial.printf("Passed 5th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD SIZE------------------- + // Go to the next semicolon (payload size). + char *_payload = strchr(_repeatable + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_payload == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payload; + + Serial.printf("Passed 6th check!\n"); + Serial.flush(); + + // Get the number! + int _payloadSizeInt = strtol(_payload + 1, NULL, 16); + + // Go to the start of the payload by finding next semicolon. + char *_payloadDataInt = strchr(_payload + 1, TEMR_CHAR); + + if (_payloadDataInt == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payloadDataInt; + + // -------------------CHECKING THE STOP FLAG------------------- + // Go to the next semicolon, which is for the stop flag. + // For the stop flag is a little bit more complicated. Since this can be found in the payload, we need to find the last one 0xaa in the buffer. + // For that we are gonna try to go though the whole command and check if the stop flag is at the end. If not, command is considered invalid. + char *_stopFlag = strchr(_payloadDataInt + 1 + _payloadSizeInt, TEMR_CHAR); + + if (_stopFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _stopFlag; + + // Check if the stop flag is really there. If not, return with fail. + if (strstr(_stopFlag, "TE") != (_stopFlag + 1)) return false; + + // Update the stop flag position by one (move after the semicolon). + _stopFlag++; + + Serial.printf("Passed 7th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD DATA------------------- + // Increment the pointer. Now we're at the first byte of the payload. + _payloadDataInt++; + + // Check for the size. If the size is ok, fill the command, payload size and payload data start pointers. + if ((_stopFlag - _payloadDataInt - 1) == _payloadSizeInt) + { + *_command = _cmdDataInt; + *_repeatableFlag = _repeatableFlagInt; + *_payloadSize = _payloadSizeInt; + *_payloadDataStart = _payloadDataInt; + return true; + } + + Serial.printf("ERROR: stopFlag: %d payloadDataInt: %d payloadSizeInt %d\n", _stopFlag, _payloadDataInt, _payloadSizeInt); + Serial.flush(); + + // Otherwise, return null, indicating an error. + return false; +} + +void PeripheralMode::sendResponse(int _command, int _payloadSize, char *_payload) +{ + _serial->printf("TS;%04X;%04X;%s;TE\r\n", _command, _payloadSize, _payload); +} + +char* PeripheralMode::getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size) +{ + // Count already found arguments. + int _currentArgument = 0; + + // If is selected argument that does not exist, return NULL pointer as error; + if (_n >= _noOfArgs || _n < 0) return NULL; + + // Try get the wanted arguments. + // First declare two pinters; one represents start of the argument, second end. + // In initial state, start of the first argument is, well, start of the payload buffer. + // End of the first argument is start of the second argument -> semicolon. + char *_start = _inBuffer; + char *_stop = (char*)memchr((char*)(_inBuffer + 1), TEMR_CHAR, _payloadSize); + + // Run trough the loop until you hit the right argument. + while ((_currentArgument != _n) && (_start != NULL)) + { + // Copy end of the last argument and move the pointer by one place (to skip the semicolon). + _start = _stop + 1; + + // Try to find, next semicolon (or start of the next argument) + _stop = (char*)memchr((char*)(_stop + 1), TEMR_CHAR, _payloadSize - (_stop - _inBuffer) + 1); + + // Increment argument counter. + _currentArgument++; + } + + // Return what has been found and also return the size of the argument. + if (_size != NULL) *_size = _stop - _start; + return _start; +} + +int PeripheralMode::getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize) +{ + // Find the total number of arguments. + int _noOfArgs = 0; + + // Count every semicolon (add also one at the end of the payload). + for (int i = 0; i < _payloadSize + 1; i++) + { + if (_inBuffer[i] == TEMR_CHAR) _noOfArgs++; + } + + // Return the number. + return _noOfArgs; +} + +void PeripheralMode::parseCommand(int _command, int _repeat, int _payloadSize, char* _payload) +{ + // Parse the command. You can add command if needed. + // First find the number of sent arguments. + int _numberOfArgs = getNumberOfArgs(_payload, _payloadSize); + + switch(_command) + { + case CMD_PING: + { + // Payload doesn't matter here, just send the response. + sendResponse(CMD_PING, strlen((char*)_okResponseString), (char*)_okResponseString); + break; + } + case CMD_DRAW_PIXEL: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 3, _repeat); + + // Arguments can be repeated for faster transfer, so multiple pixels can be written at once. + for (int i = 0; i < _numberOfArgs; i+=3) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argColor == NULL) return; + + // Write the pixels. + _display->drawPixel(atol(_argX), atol(_argY), atol(_argColor)); + } + break; + } + case CMD_DRAW_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTVLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastVLine(atol(_argX), atol(_argY), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTHLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastHLine(atol(_argX), atol(_argY), atol(_argW), atol(_argColor)); + } + break; + } + case CMD_DRAW_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_DRAW_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_THICK_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + char *_argThick; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argThick = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL || _argThick == NULL) return; + + // Write the lines. + _display->drawThickLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor), atol(_argThick)); + } + break; + } + case CMD_DRAW_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_FILL_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_FILL_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_FILL_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_PRINT: + { + // Check the number of arguments, it can only be one and do not allow repeated payload. + if (_numberOfArgs != 1 || _repeat) return; + + // Get the arguments ant it's size. + char *_arg; + uint32_t _argSize; + _arg = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &_argSize); + + // Convert them from HEX ASCII to ASCII of the fly. + hexAsciiToAscii(_arg, _argSize); + + // Add nul-terminating char at the end of the argument (text) + _arg[_argSize / 2] = '\0'; + + // Print it on display. + _display->print(_arg); + break; + } + case CMD_SET_TEXT_SIZE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textSize; + + // Get the arguments ant it's size. + _textSize = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textSize == NULL) return; + + // Set new text size. + _display->setTextSize(atol(_textSize)); + break; + } + case CMD_SET_TEXT_COLOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_textColor; + char *_bgColor; + + // Get the arguments ant it's size. + _textColor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _bgColor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_textColor == NULL || _bgColor == NULL) return; + + // Set new text and background color. + _display->setTextColor(atol(_textColor), atol(_bgColor)); + break; + } + case CMD_SET_CURSOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_xCursor; + char *_yCursor; + + // Get the arguments ant it's size. + _xCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_xCursor == NULL || _yCursor == NULL) return; + + // Set new text cursor position. + _display->setCursor(atol(_xCursor), atol(_yCursor)); + break; + } + case CMD_SET_TEXT_WRAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textWrap; + + // Get the arguments ant it's size. + _textWrap = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textWrap == NULL) return; + + // Set text wrapping.. + _display->setTextWrap(atol(_textWrap)); + break; + } + case CMD_SET_ROTATION: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_rotation; + + // Get the arguments ant it's size. + _rotation = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_rotation == NULL) return; + + // Set text wrapping.. + _display->setRotation(atol(_rotation)); + break; + } + case CMD_SD_CARD_INIT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_init; + + // Get the arguments ant it's size. + _init = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_init == NULL && atol(_init) != 1) return; + + // Try to init microSD card + if (_display->sdCardInit()) + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_failResponseString), (char*)_failResponseString); + } + break; + } + case CMD_SD_CARD_SLEEP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_uSDSleep; + + // Get the arguments ant it's size. + _uSDSleep = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_uSDSleep == NULL && atol(_uSDSleep) != 1) return; + + // Set microSD card to sleep. + _display->sdCardSleep(); + break; + } + case CMD_DRAW_BITMAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_color; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _color = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _color == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + hexAsciiToAscii(_hexData, _argSize); + + // Display the bitmap. + _display->drawBitmap(atol(_xPos), atol(_yPos), (uint8_t*)_hexData, atol(_w), atol(_h), atol(_color)); + + break; + } + case CMD_DRAW_IMAGE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_dither; + char *_invert; + char *_path; + char *_pathType; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _dither = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _invert = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _pathType = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _path = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _dither == NULL || _invert == NULL || _pathType==NULL ||_path == NULL) return; + + if(_pathType == 0) + { + // Convert it on the fly from HEX ASCII to standard ASCII. This can be done directly in the buffer since ASCII will take up half the size of the original _path size. + hexAsciiToAscii(_path, _argSize); + + // Add null-termination at the end of the argument. + _path[_argSize / 2] = '\0'; + + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_path, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + } + else + { + char _pathNew[_argSize+1]; + strncpy(_pathNew, _path, _argSize); + _pathNew[_argSize]='\0'; + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_pathNew, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + } + + + break; + + } + case CMD_DRAW_IMAGE_BUFFER: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 4, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. + hexAsciiToAscii(_hexData, _argSize); + + // Display the image from the buffer. + _display->drawImage((const uint8_t*)_hexData, atol(_xPos), atol(_yPos), atol(_w), atol(_h)); + break; + } + case CMD_SET_MODE: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + _display->setDisplayMode(atol(_arg1)); + break; + } + case CMD_GET_MODE: + { + char response[1]; + itoa(_display->getDisplayMode(), response, 10); + sendResponse(CMD_GET_MODE, strlen(response), response); + break; + } + case CMD_CLEAR_DISPLAY: + { + // No payload check needed, just clear the display + _display->clearDisplay(); + + break; + } + case CMD_DISPLAY: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + // Execute the command! + _display->display(atol(_arg1)); + break; + } + case CMD_PARTIAL_UPDATE: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + // Execute the command! + _display->partialUpdate(atol(_arg1), atol(_arg2)); + break; + } + case CMD_READ_TEMP: + { + char response[4]; + itoa(_display->readTemperature(), response, 10); + sendResponse(CMD_READ_TEMP, strlen(response), response); + break; + } + case CMD_READ_TOUCHPAD: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + char response[1]; + itoa(_display->readTouchpad(atoi(_arg1)), response, 10); + sendResponse(CMD_READ_TOUCHPAD, strlen(response), response); + + break; + } + case CMD_READ_BATTERY: + { + Serial.println(_display->readBattery()); + char response[50]; + sprintf(response,"%lf", _display->readBattery()); + sendResponse(CMD_READ_BATTERY, strlen(response), response); + break; + } + case CMD_EINK_PMIC: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + if(atoi(_arg1) == 0) + { + _display->einkOff(); + } + else + { + _display->einkOn(); + } + + break; + } + case CMD_RTC_SET_TIME: + { + // Check the number of arguments. + if (_numberOfArgs != 3) return; + + // Get the argument. + char *_arg1; // H + char *_arg2; // M + char *_arg3; // S + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL) return; + + + + _display->rtcSetTime(atoi(_arg1), atoi(_arg2), atoi(_arg3)); + + break; + } + case CMD_RTC_SET_DATE: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Weekday + char *_arg2; // Day + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + + _display->rtcSetDate(atoi(_arg1), atoi(_arg2), atoi(_arg3), atoi(_arg4)); + break; + } + case CMD_RTC_SET_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // Epoch + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + _display->rtcSetEpoch(atoll(_arg1)); + break; + } + case CMD_RTC_UPDATE: + { + _display->rtcGetRtcData(); + break; + } + case CMD_RTC_GET_DATA_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d %d/%d/%d", _display->rtcGetHour(),_display->rtcGetMinute(), _display->rtcGetSecond(), + _display->rtcGetWeekday(), _display->rtcGetDay(), _display->rtcGetMonth(), _display->rtcGetYear()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_ALARM: + { + // Check the number of arguments. + if (_numberOfArgs != 5) return; + + // Get the argument. + char *_arg1; // sec + char *_arg2; // min + char *_arg3; // hour + char *_arg4; // day + char *_arg5; // weekday + + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _arg5 = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL || _arg5== NULL) return; + + _display->rtcEnableAlarm(); + + _display->rtcSetAlarm(atoi(_arg1),atoi(_arg2),atoi(_arg3),atoi(_arg4),atoi(_arg5)); + + break; + } + case CMD_RTC_SET_ALARM_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; // epoch + char *_arg2; // match + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + _display->rtcSetAlarmEpoch(atoll(_arg1),atoi(_arg2)); + + break; + } + case CMD_RTC_CLEAR_AL_FLAG: + { + _display->rtcClearAlarmFlag(); + break; + } + case CMD_RTC_GET_ALARM_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d-%d", _display->rtcGetAlarmHour(),_display->rtcGetAlarmMinute(), _display->rtcGetAlarmSecond(), _display->rtcGetAlarmDay(), _display->rtcGetAlarmWeekday()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_TIMER: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Source clock + char *_arg2; // + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + Inkplate::rtcCountdownSrcClock clock; + + switch(atoi(_arg1)) + { + case 0: + clock=Inkplate::TIMER_CLOCK_4096HZ; + break; + case 1: + clock=Inkplate::TIMER_CLOCK_64HZ; + break; + case 2: + clock=Inkplate::TIMER_CLOCK_1HZ; + break; + case 3: + clock=Inkplate::TIMER_CLOCK_1PER60HZ; + break; + default: + return; + + } + + _display->rtcTimerSet(clock, atoi(_arg2), atoi(_arg3), atoi(_arg4)); + + break; + } + case CMD_RTC_GET_TIMER_FLAG: + { + char response[1]; + itoa(_display->rtcCheckTimerFlag(), response, 10); + sendResponse(CMD_RTC_GET_TIMER_FLAG, strlen(response), response); + + break; + } + case CMD_RTC_CLEAR_TIMER_FLAG: + { + _display->rtcClearTimerFlag(); + break; + } + case CMD_RTC_DISABLE_TIMER: + { + _display->rtcDisableTimer(); + break; + } + case CMD_RTC_IS_SET: + { + char response[1]; + itoa(_display->rtcIsSet(), response, 10); + sendResponse(CMD_RTC_IS_SET, strlen(response), response); + break; + } + case CMD_RTC_RESET: + { + _display->rtcReset(); + break; + } + case CMD_ESP32_DEEPSLEEP: + { + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + esp_deep_sleep_start(); + break; + } + case CMD_ESP32_LIGHTSLEEP: + { + + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + delay(10); + esp_light_sleep_start(); + break; + } + case CMD_TOUCH_INIT: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_AVAILABLE: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_GET_DATA: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_CONNECT_WIFI: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_ssid; + char *_password; + + uint32_t ssidSize, passwordSize; + + _ssid = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &ssidSize); + _password = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &passwordSize); + + // Check if they are valid. + if (_ssid == NULL || _password == NULL) return; + + char ssid[ssidSize + 1]; + char password[passwordSize + 1]; + + strncpy(ssid, _ssid, ssidSize); + ssid[ssidSize] = '\0'; + + strncpy(password, _password, passwordSize); + password[passwordSize] = '\0'; + + + Serial.println(ssid); + Serial.println(password); + + + if(_display->connectWiFi(ssid, password)) + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + case CMD_DISCONNECT_WIFI: + { + _display->disconnect(); + break; + } + case CMD_GET_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + + // Get the arguments. + char *_server; + + uint32_t serverSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + + strncpy(server,_server, serverSize); + + server[serverSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + + // Your Domain name with URL path or IP address with path + http.begin(server); + + // Send HTTP GET request + int httpResponseCode = http.GET(); + + if (httpResponseCode>0) { + String payload = http.getString(); + sendResponse(CMD_GET_REQUEST, strlen(payload.c_str()), (char*)payload.c_str()); + } + else { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + } + else + { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + + case CMD_POST_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_server; + char *_postMessage; + + uint32_t serverSize; + uint32_t postSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + _postMessage = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &postSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + char postMessage[postSize+1]; + + strncpy(server,_server, serverSize); + strncpy(postMessage, _postMessage, postSize); + + server[serverSize]='\0'; + postMessage[postSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + // Your Domain name with URL path or IP address with path + http.begin(server); + + http.addHeader("Content-Type", "text/plain"); + + int httpResponseCode = http.POST(postMessage); + + if (httpResponseCode>0) { + sendResponse(CMD_POST_REQUEST, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else { + sendResponse(CMD_POST_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + + } + break; + } + } +} + +int PeripheralMode::hexToChar(int a, int b) +{ + return ((16 * charToInt(a)) + charToInt(b)); +} + +int PeripheralMode::charToInt(char a) +{ + // Convert to uppercase + a = toupper(a); + + if (a >= '0' && a <= '9') + return a - '0'; + if (a >= 'A' && a <= 'F') + return ((a - 'A') + 10); +} + +void PeripheralMode::checkArguments(int *_noOfArgs, int _maxArg, int _repeat) +{ + // Check the number of the arguments. + if ((*_noOfArgs) < _maxArg) return; + + // If the repeatable payload option is not enabled, restrict to only first argument. + if (!_repeat) (*_noOfArgs) = _maxArg; +} + +void PeripheralMode::hexAsciiToAscii(char *_buffer, uint32_t _size) +{ + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + for (uint32_t i = 0; i < _size; i+=2) + { + _buffer[i / 2] = hexToChar(_buffer[i], _buffer[i + 1]); + } +} \ No newline at end of file diff --git a/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/InkplatePeripheralMode.h b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/InkplatePeripheralMode.h new file mode 100644 index 000000000..be5ad3c17 --- /dev/null +++ b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/InkplatePeripheralMode.h @@ -0,0 +1,77 @@ +// Add header guards. +#ifndef __INKPLATEPERIPHERALMODE_H__ +#define __INKPLATEPERIPHERALMODE_H__ + +// Add an main Arduino header file. +#include + +// Add an Inkplate library. +#include + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +//#include + +// Make a class for the peripheral mode. +class PeripheralMode +{ + private: + // Use singleton class to not being able to use multiple instances of this class (since only makes sense to make only one Peripheral mode). + // Private constructor to prevent direct instantiation. + PeripheralMode() {} + + // Static pointer to the single instance. + static PeripheralMode* _instancePtr; + + // Pointer to the Arduino Serial object, + HardwareSerial *_serial = nullptr; + + // Pointer to the Inkplate library object, + Inkplate *_display = nullptr; + + // Variable for counting incoming serial data. + uint32_t _serialBufferIndex = 0; + + // Pointer to the allocated serial buffer in the PSRAM. + char *_serialBuffer = nullptr; + + // Size of the buffer for parsing the commands. + uint32_t _bufferSize = 0; + + // Commonly used responeses + const char *_okResponseString = "OK"; + const char *_failResponseString = "FAIL"; + + // Variable for timestamping last received data for the automatic buffer clear. + unsigned long _bufferAutoCleanTimestamp = 0; + + bool checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandEndPosition); + void sendResponse(int _command, int _payloadSize, char *_payload); + char* getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size); + int getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize); + void parseCommand(int _command, int _repeat, int _payloadSize, char* _payload); + int hexToChar(int a, int b); + int charToInt(char a); + void checkArguments(int *_noOfArgs, int _maxArg, int _repeat); + void hexAsciiToAscii(char *_buffer, uint32_t _size); + + public: + static PeripheralMode* getInstance() + { + // Check if the instance is already been made. If not, make it. + if (PeripheralMode::_instancePtr == nullptr) + { + // Make a new instance and save the address to the pointer. + PeripheralMode::_instancePtr = new PeripheralMode(); + } + + // Return the instance pointer. This way only one object is created. + return PeripheralMode::_instancePtr; + } + + bool begin(HardwareSerial *_serial, Inkplate *_inkplate, uint32_t _baud = 115200ULL, uint8_t _rxPin = -1, uint8_t _txPin = -1, uint32_t _size = SERIAL_BUFFER_SIZE); + bool getDataFromSerial(unsigned long _timeout); +}; + +#endif \ No newline at end of file diff --git a/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/commandList.h b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/commandList.h new file mode 100644 index 000000000..efc956871 --- /dev/null +++ b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/commandList.h @@ -0,0 +1,73 @@ +#ifndef __COMMAND_LIST_H__ +#define __COMMAND_LIST_H__ + +#define CMD_PING 0x0001 +// Commands from 0x01 to 0x0A are reserved for future use. Command 0x00 is invalid! + +#define CMD_DRAW_PIXEL 0x000A +#define CMD_DRAW_LINE 0x000B +#define CMD_DRAW_FASTVLINE 0x000C +#define CMD_DRAW_FASTHLINE 0x000D +#define CMD_DRAW_RECT 0x000E +#define CMD_DRAW_CIRCLE 0x000F +#define CMD_DRAW_TRIANGLE 0x0010 +#define CMD_DRAW_ROUND_RECT 0x0011 +#define CMD_DRAW_THICK_LINE 0x0012 +#define CMD_DRAW_ELIPSE 0x0013 +#define CMD_FILL_RECT 0x0014 +#define CMD_FILL_CIRCLE 0x0015 +#define CMD_FILL_TRIANGLE 0x0016 +#define CMD_FILL_ROUND_RECT 0x0017 +#define CMD_FILL_ELIPSE 0x0018 +#define CMD_PRINT 0x0019 +#define CMD_SET_TEXT_SIZE 0x001A +#define CMD_SET_TEXT_COLOR 0x001B +#define CMD_SET_CURSOR 0x001C +#define CMD_SET_TEXT_WRAP 0x001D +#define CMD_SET_ROTATION 0x001E +#define CMD_SD_CARD_INIT 0x001F +#define CMD_SD_CARD_SLEEP 0x0020 +#define CMD_DRAW_BITMAP 0x0021 +#define CMD_DRAW_IMAGE 0x0022 +#define CMD_SET_MODE 0x0023 +#define CMD_GET_MODE 0x0024 +#define CMD_CLEAR_DISPLAY 0x0025 +#define CMD_DISPLAY 0x0026 +#define CMD_PARTIAL_UPDATE 0x0027 +#define CMD_READ_TEMP 0x0028 +#define CMD_READ_TOUCHPAD 0x0029 +#define CMD_READ_BATTERY 0x002A +#define CMD_EINK_PMIC 0x002B +#define CMD_RTC_SET_TIME 0x002C +#define CMD_RTC_SET_DATE 0x002D +#define CMD_RTC_SET_EPOCH 0x002E +#define CMD_RTC_UPDATE 0x002F +#define CMD_RTC_GET_DATA_ALL 0x0030 +#define CMD_RTC_SET_ALARM 0x0031 +#define CMD_RTC_SET_ALARM_EPOCH 0x0032 +#define CMD_RTC_CLEAR_AL_FLAG 0x0033 +#define CMD_RTC_GET_ALARM_ALL 0x0034 +#define CMD_RTC_SET_TIMER 0x0035 +#define CMD_RTC_GET_TIMER_FLAG 0x0036 +#define CMD_RTC_CLEAR_TIMER_FLAG 0x0037 +#define CMD_RTC_DISABLE_TIMER 0x0038 +#define CMD_RTC_IS_SET 0x0039 +#define CMD_RTC_RESET 0x003A +#define CMD_ESP32_DEEPSLEEP 0x003B +#define CMD_ESP32_LIGHTSLEEP 0x003C +#define CMD_TOUCH_INIT 0x003D +#define CMD_TOUCH_AVAILABLE 0x003E +#define CMD_TOUCH_GET_DATA 0x003F +#define CMD_DRAW_IMAGE_BUFFER 0x0040 +#define CMD_CONNECT_WIFI 0x0041 +#define CMD_DISCONNECT_WIFI 0x0042 +#define CMD_GET_REQUEST 0x0043 +#define CMD_POST_REQUEST 0x0044 +// #define CMD_ 0x0042 +// #define CMD_ 0x0043 +// #define CMD_ 0x0044 +// #define CMD_ 0x0045 +// #define CMD_ 0x0046 +// #define CMD_ 0x0047 + +#endif diff --git a/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/settings.h b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/settings.h new file mode 100644 index 000000000..53e1874f4 --- /dev/null +++ b/examples/Inkplate5V2/Diagnostics/Inkplate5V2_Peripheral_Mode/settings.h @@ -0,0 +1,20 @@ +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +// Size of the Serial buffer (in bytes). Change if needed. It's stored in the PSRAM of the ESP32. +#define SERIAL_BUFFER_SIZE 65535 + +// Timeout for the incomming data. It's is counted from the last received char from te serial. +#define SERIAL_TIMEOUT_MS 100 + +// Define default ESP32 UART RX and TX pins +#define SERIAL_UART_RX_PIN 3 +#define SERIAL_UART_TX_PIN 1 + +// Termination char for the arguments (see documentation!) +#define TEMR_CHAR ';' + +// How long it takes to clear the buffer from unprocessed or invalid commands. +#define SERIAL_BUFFER_CLEAN_TIME_MS 60000ULL + +#endif diff --git a/examples/Inkplate5V2/Projects/Inkplate5V2_Google_Calendar/Inkplate5V2_Google_Calendar.ino b/examples/Inkplate5V2/Projects/Inkplate5V2_Google_Calendar/Inkplate5V2_Google_Calendar.ino index f5d114ed2..006180697 100644 --- a/examples/Inkplate5V2/Projects/Inkplate5V2_Google_Calendar/Inkplate5V2_Google_Calendar.ino +++ b/examples/Inkplate5V2/Projects/Inkplate5V2_Google_Calendar/Inkplate5V2_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate5v2_Google_Calendar for Soldered Inkplate 5v2 +Inkplate5v2_Google_Calendar for Soldered Inkplate 5v2 -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ #include "src/includes.h" // Include necessary libraries and dependencies for Inkplate and networking diff --git a/examples/Inkplate5V2/Projects/Inkplate5V2_Image_Uploader/Inkplate5V2_Image_Uploader.ino b/examples/Inkplate5V2/Projects/Inkplate5V2_Image_Uploader/Inkplate5V2_Image_Uploader.ino index 09d9dc1ae..b8657af3e 100644 --- a/examples/Inkplate5V2/Projects/Inkplate5V2_Image_Uploader/Inkplate5V2_Image_Uploader.ino +++ b/examples/Inkplate5V2/Projects/Inkplate5V2_Image_Uploader/Inkplate5V2_Image_Uploader.ino @@ -1,9 +1,9 @@ /* - Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 10 + Inkplate5V2 Image Uploader Example + Compatible with Soldered Inkplate 5V2 -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 5V2 diff --git a/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Image_Slideshow/Inkplate5V2_OpenAI_Image_Slideshow.ino b/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Image_Slideshow/Inkplate5V2_OpenAI_Image_Slideshow.ino index 11068378e..bc141a2e3 100644 --- a/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Image_Slideshow/Inkplate5V2_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Image_Slideshow/Inkplate5V2_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate5V2 OpenAI Image slideshow - Compatible with Soldered Inkplate 5V2 + Compatible with Soldered Inkplate 5V2 -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 5V2. Select "e-radionica Inkplate5V2" or "Soldered Inkplate5V2" from Tools -> Board menu. diff --git a/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Text_Prompt/Inkplate5V2_OpenAI_Text_Prompt.ino b/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Text_Prompt/Inkplate5V2_OpenAI_Text_Prompt.ino index 5cbe25906..4d5032b7f 100644 --- a/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Text_Prompt/Inkplate5V2_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate5V2/Projects/Inkplate5V2_OpenAI_Text_Prompt/Inkplate5V2_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate5V2 OpenAI text prompt generator - Compatible with Soldered Inkplate 5V2 + Compatible with Soldered Inkplate 5V2 -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 5V2. Select "e-radionica Inkplate5V2" or "Soldered Inkplate5V2" from Tools -> Board menu. diff --git a/examples/Inkplate5V2/Projects/Inkplate5V2_OpenMeteo_Weather_Station/Inkplate5V2_OpenMeteo_Weather_Station.ino b/examples/Inkplate5V2/Projects/Inkplate5V2_OpenMeteo_Weather_Station/Inkplate5V2_OpenMeteo_Weather_Station.ino index 41977f84e..80bd273c1 100644 --- a/examples/Inkplate5V2/Projects/Inkplate5V2_OpenMeteo_Weather_Station/Inkplate5V2_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate5V2/Projects/Inkplate5V2_OpenMeteo_Weather_Station/Inkplate5V2_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate5V2 OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 5V2 + Compatible with Soldered Inkplate 5V2 -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate6/Advanced/DeepSleep/Inkplate6_Simple_Deep_Sleep/Inkplate6_Simple_Deep_Sleep.ino b/examples/Inkplate6/Advanced/DeepSleep/Inkplate6_Simple_Deep_Sleep/Inkplate6_Simple_Deep_Sleep.ino index 0c12c7daf..3294e1c6b 100644 --- a/examples/Inkplate6/Advanced/DeepSleep/Inkplate6_Simple_Deep_Sleep/Inkplate6_Simple_Deep_Sleep.ino +++ b/examples/Inkplate6/Advanced/DeepSleep/Inkplate6_Simple_Deep_Sleep/Inkplate6_Simple_Deep_Sleep.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Battery_Voltage/Inkplate6_Read_Battery_Voltage.ino b/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Battery_Voltage/Inkplate6_Read_Battery_Voltage.ino index d9f3c5bf3..bd3208159 100644 --- a/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Battery_Voltage/Inkplate6_Read_Battery_Voltage.ino +++ b/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Battery_Voltage/Inkplate6_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Temperature/Inkplate6_Read_Temperature.ino b/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Temperature/Inkplate6_Read_Temperature.ino index 06fbaea03..ffac07295 100644 --- a/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Temperature/Inkplate6_Read_Temperature.ino +++ b/examples/Inkplate6/Advanced/Other/Inkplate6_Read_Temperature/Inkplate6_Read_Temperature.ino @@ -14,7 +14,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6/Basic/Inkplate6_Black_And_White/logo.h b/examples/Inkplate6/Basic/Inkplate6_Black_And_White/logo.h index f70c81165..56c6e69b6 100644 --- a/examples/Inkplate6/Basic/Inkplate6_Black_And_White/logo.h +++ b/examples/Inkplate6/Basic/Inkplate6_Black_And_White/logo.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t logo[] PROGMEM = { 0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, diff --git a/examples/Inkplate6/Basic/Inkplate6_Grayscale/image.h b/examples/Inkplate6/Basic/Inkplate6_Grayscale/image.h index 171c166d7..2d0485366 100644 --- a/examples/Inkplate6/Basic/Inkplate6_Grayscale/image.h +++ b/examples/Inkplate6/Basic/Inkplate6_Grayscale/image.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t picture1[] = { 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0xaa, 0xaa, 0x99, 0x99, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xa9, 0x99, 0x99, 0xaa, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0x9a, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x99, 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x9a, 0xaa, 0xaa, 0xba, 0xaa, 0xba, 0x9a, 0xba, 0xaa, 0xa9, 0x98, 0x88, 0x87, 0x77, 0x88, 0x88, 0x77, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x78, 0x88, 0x87, 0x77, 0x77, diff --git a/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/Inkplate6_Peripheral_Mode.ino b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/Inkplate6_Peripheral_Mode.ino index 5d0fac479..ac9f514e9 100644 --- a/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/Inkplate6_Peripheral_Mode.ino +++ b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/Inkplate6_Peripheral_Mode.ino @@ -1,11 +1,12 @@ /* - Inkplate6_Peripheral_Mode sketch for Soldered Inkplate 6 - Select "e-radionica Inkplate6" or "Soldered Inkplate6" from Tools -> Board menu. - Don't have "e-radionica Inkplate6" or "Soldered Inkplate6" option? Follow our tutorial and add it: + Inkplate6_Peripheral_Mode sketch for Soldered Inkplate 6. + For this example you will need only a USB-C cable and Inkplate 6 + Select "Soldered Inkplate6" from Tools -> Board menu. + Don't have "Soldered Inkplate6" option? Follow our tutorial and add it: https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ Using this sketch, you don't have to program and control e-paper using Arduino code. - Instead, you can send UART command. This give you flexibility that you can use this Inkplate 6 on any platform! + Instead, you can send UART command. This give you flexibility that you can use this Inkplate 5 on any platform! Because it uses UART, it's little bit slower and it's not recommended to send bunch of drawPixel command to draw some image. Instead, load bitmaps and pictures on SD card and load image from SD. @@ -15,597 +16,49 @@ Learn more about Peripheral Mode: https://inkplate.readthedocs.io/en/latest/peripheral-mode.html - UART settings are: 115200 baud, standard parity, ending with "\n\r" (both) + UART settings are: 115200 baud, standard parity, ending with "\n\r" (Both NL & CR) You can send commands via USB port or by directly connecting to ESP32 TX and RX pins. - Don't forget you need to send #L(1)* after each command to show it on the display - (equal to display.display()). - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 15 July 2020 by Soldered + Want to learn more about Inkplate? Visit https://soldered.com/documentation/inkplate/ + 15 April 2024 by Soldered */ +// Include Inkplate library. +#include "Inkplate.h" -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#if !defined(ARDUINO_ESP32_DEV) && !defined(ARDUINO_INKPLATE6V2) -#error "Wrong board selection for this example, please select e-radionica Inkplate6 or Soldered Inkplate6 in the boards menu." -#endif +// Include peripheral mode library. +#include "InkplatePeripheralMode.h" -#include -Inkplate display(INKPLATE_1BIT); +// Include the header files with sketch settngs (buffer size, serial timeput, argument termination char etc). +#include "settings.h" -#define BUFFER_SIZE 1000 -char commandBuffer[BUFFER_SIZE + 1]; -char strTemp[2001]; +// Pointer to the singleton class instance. +PeripheralMode *peripheral; + +// Inkplate object. +Inkplate display(INKPLATE_3BIT); void setup() { + // Init Inkplate library. display.begin(); - Serial.begin(115200); - memset(commandBuffer, 0, BUFFER_SIZE); -} - -void loop() -{ - // put your main code here, to run repeatedly: - if (Serial.available()) - { - while (Serial.available()) - { - for (int i = 0; i < (BUFFER_SIZE - 1); i++) - { - commandBuffer[i] = commandBuffer[i + 1]; - } - commandBuffer[BUFFER_SIZE - 1] = Serial.read(); - } - } - char *s = NULL; - char *e = NULL; - for (int i = 0; i < BUFFER_SIZE; i++) - { - if (commandBuffer[i] == '#' && s == NULL) - s = &commandBuffer[i]; - if (commandBuffer[i] == '*' && e == NULL) - e = &commandBuffer[i]; - } - if (s != NULL && e != NULL) - { - if ((e - s) > 0) - { - int x, x1, x2, y, y1, y2, x3, y3, l, c, w, h, r, n, rx, ry, xc, yc, yr; - uint8_t hr, min, sec, wday, day, mon, k, as, am, ah, ad, aw, amc, v; - bool ie, ip; - System::rtcCountdownSrcClock sc; - uint32_t ep, ae; - char b; - char temp[150]; - switch (*(s + 1)) - { - case '?': - Serial.print("OK"); - break; - - case '0': - sscanf(s + 3, "%d,%d,%d", &x, &y, &c); - // sprintf(temp, "display.drawPixel(%d, %d, %d)\n\r", x, y, c); - // Serial.print(temp); - display.drawPixel(x, y, c); - break; - - case '1': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawLine(x1, y1, x2, y2, c); - break; - - case '2': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastVLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastVLine(x, y, l, c); - break; - - case '3': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastHLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastHLine(x, y, l, c); - break; - - case '4': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.drawRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.drawRect(x, y, w, h, c); - break; - - case '5': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.drawCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.drawCircle(x, y, r, c); - break; - - case '6': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.drawTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.drawTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case '7': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.drawRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.drawRoundRect(x, y, w, h, r, c); - break; - - case '8': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.fillRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.fillRect(x, y, w, h, c); - break; - - case '9': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.fillCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.fillCircle(x, y, r, c); - break; - case 'A': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.fillTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.fillTriangle(x1, y1, x2, y2, x3, y3, c); - break; + // Create one instance of the object. + peripheral = PeripheralMode::getInstance(); - case 'B': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.fillRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.fillRoundRect(x, y, w, h, r, c); - break; - - case 'C': - sscanf(s + 3, "\"%2000[^\"]\"", strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - // Serial.print("display.print(\""); - // Serial.print(strTemp); - // Serial.println("\");"); - display.print(strTemp); - break; - - case 'D': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setTextSize(%d)\n", c); - // Serial.print(temp); - display.setTextSize(c); - break; - - case 'E': - sscanf(s + 3, "%d,%d", &x, &y); - // sprintf(temp, "display.setCursor(%d, %d)\n", x, y); - // Serial.print(temp); - display.setCursor(x, y); - break; - - case 'F': - sscanf(s + 3, "%c", &b); - // sprintf(temp, "display.setTextWrap(%s)\n", b == 'T' ? "True" : "False"); - // Serial.print(temp); - if (b == 'T') - display.setTextWrap(true); - if (b == 'F') - display.setTextWrap(false); - break; - - case 'G': - sscanf(s + 3, "%d", &c); - c &= 3; - // sprintf(temp, "display.setRotation(%d)\n", c); - // Serial.print(temp); - display.setRotation(c); - break; - - case 'H': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawBitmapFromSd(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - - case 'I': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setDisplayMode(%s)\n", c == 0 ? "INKPLATE_1BIT" : "INKPLATE_3BIT"); - // Serial.print(temp); - if (c == 1) - display.selectDisplayMode(INKPLATE_1BIT); - if (c == 3) - display.selectDisplayMode(INKPLATE_3BIT); - break; - - case 'J': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - // if (0 == 0) { - // Serial.println("#J(0)*"); - //} else { - // Serial.println("#J(1)*"); - //} - if (display.getDisplayMode() == INKPLATE_1BIT) - { - Serial.println("#J(0)*"); - Serial.flush(); - } - if (display.getDisplayMode() == INKPLATE_3BIT) - { - Serial.println("#J(1)*"); - Serial.flush(); - } - } - break; - - case 'K': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.clearDisplay();\n"); - display.clearDisplay(); - } - break; - - case 'L': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.display();\n"); - display.display(); - } - break; - - case 'M': - sscanf(s + 3, "%d,%d,%d", &y1, &x2, &y2); - // sprintf(temp, "display.partialUpdate(%d, %d, %d);\n", y1, x2, y2); - // Serial.print(temp); - display.partialUpdate(); - break; - - case 'N': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#N("); - Serial.print(display.readTemperature(), DEC); - // Serial.print(23, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'O': - sscanf(s + 3, "%d", &c); - if (c >= 0 && c <= 2) - { - Serial.print("#O("); - Serial.print(display.readTouchpad(c), DEC); - // Serial.print(0, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'P': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#P("); - Serial.print(display.readBattery(), 2); - // Serial.print(3.54, 2); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'Q': - sscanf(s + 3, "%d", &c); - c &= 1; - // if (c == 0) Serial.print("display.einkOff();\n"); - // if (c == 1) Serial.print("display.einkOn();\n"); - if (c == 0) - display.einkOff(); - if (c == 1) - display.einkOn(); - break; - - case 'R': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#R("); - Serial.print(display.getPanelState(), DEC); - // Serial.print(1, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'S': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawImage(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - case 'T': - int t; - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c, &t); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawThickLine(x1, y1, x2, y2, c, t); - break; - case 'U': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawElipse(rx, ry, xc, yc, c); - break; - case 'V': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.fillElipse(rx, ry, xc, yc, c); - break; - case 'W': - sscanf(s + 3, "%d,%d,%d", &hr, &min, &sec); - // sprintf(temp, "display.rtcSetTime(%d, %d, %d);\n\r", hr, min, sec); - // Serial.println(temp); - display.rtcSetTime(hr, min, sec); - break; - case 'X': - sscanf(s + 3, "%d,%d,%d,%d", &wday, &day, &mon, &yr); - // sprintf(temp, "display.rtcSetDate(%d, %d, %d, %d);\n\r", wday, day, mon, yr); - // Serial.println(temp); - display.rtcSetDate(wday, day, mon, yr); - break; - case 'Y': - sscanf(s + 3, "%d", &ep); - // sprintf(temp, "display.rtcSetEpoch(%d);\n\r", ep); - // Serial.println(temp); - display.rtcSetEpoch(ep); - break; - case 'Z': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#Z("); - Serial.print(display.rtcGetEpoch()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'a': - sscanf(s + 3, "%d", &k); - if (k > 6) - { - Serial.println("INVALID"); - break; - } - display.rtcGetRtcData(); - Serial.print("#a("); - switch (k) - { - case 0: - Serial.print(display.rtcGetSecond()); - break; - case 1: - Serial.print(display.rtcGetMinute()); - break; - case 2: - Serial.print(display.rtcGetHour()); - break; - case 3: - Serial.print(display.rtcGetDay()); - break; - case 4: - Serial.print(display.rtcGetWeekday()); - break; - case 5: - Serial.print(display.rtcGetMonth()); - break; - case 6: - Serial.print(display.rtcGetYear()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'b': - sscanf(s + 3, "%d,%d,%d,%d,%d", &as, &am, &ah, &ad, &aw); - // sprintf(temp, "display.rtcSetAlarm(%d, %d, %d, %d, %d);\n\r", as, am, ah, ad, aw); - // Serial.println(temp); - display.rtcSetAlarm(as, am, ah, ad, aw); - break; - case 'c': - sscanf(s + 3, "%d,%d", &ae, &amc); - // sprintf(temp, "display.rtcSetAlarmEpoch(%d, %d);\n\r", ae, amc); - // Serial.println(temp); - display.rtcSetAlarmEpoch(ae, amc); - break; - case 'd': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#d("); - Serial.print(display.rtcCheckAlarmFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'e': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearAlarmFlag()"); - display.rtcClearAlarmFlag(); - Serial.flush(); - } - break; - case 'f': - sscanf(s + 3, "%d", &k); - if (k > 4) - { - Serial.println("INVALID"); - break; - } - Serial.print("#f("); - switch (k) - { - case 0: - Serial.print(display.rtcGetAlarmSecond()); - break; - case 1: - Serial.print(display.rtcGetAlarmMinute()); - break; - case 2: - Serial.print(display.rtcGetAlarmHour()); - break; - case 3: - Serial.print(display.rtcGetAlarmDay()); - break; - case 4: - Serial.print(display.rtcGetAlarmWeekday()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'g': - sscanf(s + 3, "%d,%d,%d,%d", &sc, &v, &ie, &ip); - - if (sc > 3) - { - Serial.println("ERROR"); - break; - } + // Set the baud rate (in this case 115200 bauds), set the serial buffer and it's size. + if (!peripheral->begin(&Serial, &display, 115200ULL, SERIAL_UART_RX_PIN, SERIAL_UART_TX_PIN, SERIAL_BUFFER_SIZE)) + { + // Send an error message on serial. + Serial.println("Peripheral mode init failed!\nProgram halted!"); - // sprintf(temp, "display.rtcTimerSet(%d, %d, %d, %d);\n\r", sc, v, ie, ip); - // Serial.println(temp); - display.rtcTimerSet(sc, v, ie, ip); - break; - case 'h': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#h("); - Serial.print(display.rtcCheckTimerFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'i': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearTimerFlag()"); - display.rtcClearTimerFlag(); - } - break; - case 'j': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcDisableTimer()"); - display.rtcDisableTimer(); - } - break; - case 'k': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#k("); - Serial.print(display.rtcIsSet()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'l': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcReset()"); - display.rtcReset(); - } - break; - } - *s = 0; - *e = 0; - } + // Stop the program from executing! + while(1); } + Serial.println("READY"); } -int hexToChar(char c) +void loop() { - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - return -1; -} + // Check if there is something in the serial. + peripheral->getDataFromSerial(SERIAL_TIMEOUT_MS); +} \ No newline at end of file diff --git a/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/InkplatePeripheralMode.cpp b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/InkplatePeripheralMode.cpp new file mode 100644 index 000000000..5b30be486 --- /dev/null +++ b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/InkplatePeripheralMode.cpp @@ -0,0 +1,1605 @@ +// Add header of the library to the source files. +#include "InkplatePeripheralMode.h" + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +// Include the list with all available commands. +#include "commandList.h" + +// Define the static member. +PeripheralMode* PeripheralMode::_instancePtr = nullptr; + +bool PeripheralMode::begin(HardwareSerial *_serialPtr, Inkplate *_inkplatePtr, uint32_t _baud, uint8_t _rxPin, uint8_t _txPin, uint32_t _size) +{ + // Store every parameter locally and check them. + if ((_serialPtr == nullptr) || (_inkplatePtr == nullptr) || (_size == 0)) return false; + _serial = _serialPtr; + _display = _inkplatePtr; + _bufferSize = _size; + + // Init the serial communication @ desired communication speed. Also set the pins. + _serial->begin(_baud, SERIAL_8N1, _rxPin, _txPin); + + // Allocate memory for the serial buffer in the PSRAM. + _serialBuffer = (char*)ps_malloc(_bufferSize * sizeof(char)); + + // Check if allocation is successful. + if (_serialBuffer == NULL) + { + return false; + } + + // If everything is ok, return true. + return true; +} + +bool PeripheralMode::getDataFromSerial(unsigned long _timeout) +{ + // Variable used for timeouting incoming serial data. + unsigned long _timestamp; + + // Variables for parsing. + char *_commandEndPosition = NULL; + + if (_serial->available()) + { + // You got something on the serial? Cool! + // First capture the current time (needed for timeouting!). + _timestamp = millis(); + + // Capture the timestamp for automatic buffer cleaning. + _bufferAutoCleanTimestamp = millis(); + + // Try to capture incoming serial data until the timeout or until the buffer is full! + while (((unsigned long)(millis() - _timestamp) < _timeout) && (_serialBufferIndex < (_bufferSize - 2))) + { + if (_serial->available()) + { + _serialBuffer[_serialBufferIndex++] = _serial->read(); + _timestamp = millis(); + } + } + + // Add a nul-terminating char. + _serialBuffer[_serialBufferIndex] = '\0'; + + // Go though all commands that are received. + _commandEndPosition = _serialBuffer; + while (_commandEndPosition != NULL) + { + // Variables for parsing. + int _command = 0; + int _repeatable = 0; + int _payloadSize = 0; + char *_payload = NULL; + + // Check received for validity. If everything went ok, parse the command. + if (checkPacket(_commandEndPosition, _bufferSize - (uint32_t)(_commandEndPosition - _serialBuffer), &_command, &_repeatable, &_payloadSize, &_payload, &_commandEndPosition)) + { + // If is a valid command, try to parse it. + parseCommand(_command, _repeatable, _payloadSize, _payload); + + // Reset the counter. + _serialBufferIndex = 0; + + // Go to the next command by advancing to the next index. + _commandEndPosition++; + } + } + } + + // Periodically clear the buffer from the remained invalid data. + if (((unsigned long)(millis() - _bufferAutoCleanTimestamp) >= SERIAL_BUFFER_CLEAN_TIME_MS) && _serialBufferIndex) + { + // Clear the buffer. + memset(_serialBuffer, 0, _bufferSize); + + // Reset the index variable. + _serialBufferIndex = 0; + + Serial.println("Cleaned"); + } + + // If data is not valid, return false; + return false; +} + +bool PeripheralMode::checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandLastPosition) +{ + // Prepare the command end position pointer - set it to null. Later in the code it will be set to some address that corresponds end position of the command. + // If not found, it will stay on null. + *_commandLastPosition = NULL; + + // -------------------PARSING START AND STOP FLAGS------------------- + // First check if there is start and stop flags. + char *_startFlag = strstr(_buffer, "TS"); + + // Check start flag. If the start flag is wrong, return error. + if (_startFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _startFlag; + + Serial.printf("Passed 1st check!\n"); + Serial.flush(); + + // -------------------PARSING COMMAND------------------- + // Check the command and payload size. + // First find the first semicolon. + char *_cmd = strchr(_startFlag + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_cmd == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _cmd; + + Serial.printf("Passed 2nd check!\n"); + Serial.flush(); + + // Check if there is a command. Move pointer by one place to the right (skip the semicolon). + int _cmdDataInt = strtol(_cmd + 1, NULL, 16); + + // If command if equal to zero, something is wrong. + if (_cmdDataInt == 0) return false; + + Serial.printf("Passed 3rd check!\n"); + Serial.flush(); + + // -------------------PARSING REPEATABLE FLAG------------------- + // Get the repeatable flag. + char *_repeatable = strchr(_cmd + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_repeatable == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _repeatable; + + Serial.printf("Passed 4th check!\n"); + Serial.flush(); + + // Get the repeatable flag data from HEX. Move one place to the right (skip the semicolon). + int _repeatableFlagInt = strtol(_repeatable + 1, NULL, 16); + + // Repeatable flag can only be one or zero. Discard otherwise. + if (_repeatableFlagInt > 1 || _repeatableFlagInt < 0) return false; + + Serial.printf("Passed 5th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD SIZE------------------- + // Go to the next semicolon (payload size). + char *_payload = strchr(_repeatable + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_payload == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payload; + + Serial.printf("Passed 6th check!\n"); + Serial.flush(); + + // Get the number! + int _payloadSizeInt = strtol(_payload + 1, NULL, 16); + + // Go to the start of the payload by finding next semicolon. + char *_payloadDataInt = strchr(_payload + 1, TEMR_CHAR); + + if (_payloadDataInt == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payloadDataInt; + + // -------------------CHECKING THE STOP FLAG------------------- + // Go to the next semicolon, which is for the stop flag. + // For the stop flag is a little bit more complicated. Since this can be found in the payload, we need to find the last one 0xaa in the buffer. + // For that we are gonna try to go though the whole command and check if the stop flag is at the end. If not, command is considered invalid. + char *_stopFlag = strchr(_payloadDataInt + 1 + _payloadSizeInt, TEMR_CHAR); + + if (_stopFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _stopFlag; + + // Check if the stop flag is really there. If not, return with fail. + if (strstr(_stopFlag, "TE") != (_stopFlag + 1)) return false; + + // Update the stop flag position by one (move after the semicolon). + _stopFlag++; + + Serial.printf("Passed 7th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD DATA------------------- + // Increment the pointer. Now we're at the first byte of the payload. + _payloadDataInt++; + + // Check for the size. If the size is ok, fill the command, payload size and payload data start pointers. + if ((_stopFlag - _payloadDataInt - 1) == _payloadSizeInt) + { + *_command = _cmdDataInt; + *_repeatableFlag = _repeatableFlagInt; + *_payloadSize = _payloadSizeInt; + *_payloadDataStart = _payloadDataInt; + return true; + } + + Serial.printf("ERROR: stopFlag: %d payloadDataInt: %d payloadSizeInt %d\n", _stopFlag, _payloadDataInt, _payloadSizeInt); + Serial.flush(); + + // Otherwise, return null, indicating an error. + return false; +} + +void PeripheralMode::sendResponse(int _command, int _payloadSize, char *_payload) +{ + _serial->printf("TS;%04X;%04X;%s;TE\r\n", _command, _payloadSize, _payload); +} + +char* PeripheralMode::getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size) +{ + // Count already found arguments. + int _currentArgument = 0; + + // If is selected argument that does not exist, return NULL pointer as error; + if (_n >= _noOfArgs || _n < 0) return NULL; + + // Try get the wanted arguments. + // First declare two pinters; one represents start of the argument, second end. + // In initial state, start of the first argument is, well, start of the payload buffer. + // End of the first argument is start of the second argument -> semicolon. + char *_start = _inBuffer; + char *_stop = (char*)memchr((char*)(_inBuffer + 1), TEMR_CHAR, _payloadSize); + + // Run trough the loop until you hit the right argument. + while ((_currentArgument != _n) && (_start != NULL)) + { + // Copy end of the last argument and move the pointer by one place (to skip the semicolon). + _start = _stop + 1; + + // Try to find, next semicolon (or start of the next argument) + _stop = (char*)memchr((char*)(_stop + 1), TEMR_CHAR, _payloadSize - (_stop - _inBuffer) + 1); + + // Increment argument counter. + _currentArgument++; + } + + // Return what has been found and also return the size of the argument. + if (_size != NULL) *_size = _stop - _start; + return _start; +} + +int PeripheralMode::getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize) +{ + // Find the total number of arguments. + int _noOfArgs = 0; + + // Count every semicolon (add also one at the end of the payload). + for (int i = 0; i < _payloadSize + 1; i++) + { + if (_inBuffer[i] == TEMR_CHAR) _noOfArgs++; + } + + // Return the number. + return _noOfArgs; +} + +void PeripheralMode::parseCommand(int _command, int _repeat, int _payloadSize, char* _payload) +{ + // Parse the command. You can add command if needed. + // First find the number of sent arguments. + int _numberOfArgs = getNumberOfArgs(_payload, _payloadSize); + + switch(_command) + { + case CMD_PING: + { + // Payload doesn't matter here, just send the response. + sendResponse(CMD_PING, strlen((char*)_okResponseString), (char*)_okResponseString); + break; + } + case CMD_DRAW_PIXEL: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 3, _repeat); + + // Arguments can be repeated for faster transfer, so multiple pixels can be written at once. + for (int i = 0; i < _numberOfArgs; i+=3) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argColor == NULL) return; + + // Write the pixels. + _display->drawPixel(atol(_argX), atol(_argY), atol(_argColor)); + } + break; + } + case CMD_DRAW_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTVLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastVLine(atol(_argX), atol(_argY), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTHLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastHLine(atol(_argX), atol(_argY), atol(_argW), atol(_argColor)); + } + break; + } + case CMD_DRAW_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_DRAW_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_THICK_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + char *_argThick; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argThick = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL || _argThick == NULL) return; + + // Write the lines. + _display->drawThickLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor), atol(_argThick)); + } + break; + } + case CMD_DRAW_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_FILL_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_FILL_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_FILL_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_PRINT: + { + // Check the number of arguments, it can only be one and do not allow repeated payload. + if (_numberOfArgs != 1 || _repeat) return; + + // Get the arguments ant it's size. + char *_arg; + uint32_t _argSize; + _arg = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &_argSize); + + // Convert them from HEX ASCII to ASCII of the fly. + hexAsciiToAscii(_arg, _argSize); + + // Add nul-terminating char at the end of the argument (text) + _arg[_argSize / 2] = '\0'; + + // Print it on display. + _display->print(_arg); + break; + } + case CMD_SET_TEXT_SIZE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textSize; + + // Get the arguments ant it's size. + _textSize = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textSize == NULL) return; + + // Set new text size. + _display->setTextSize(atol(_textSize)); + break; + } + case CMD_SET_TEXT_COLOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_textColor; + char *_bgColor; + + // Get the arguments ant it's size. + _textColor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _bgColor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_textColor == NULL || _bgColor == NULL) return; + + // Set new text and background color. + _display->setTextColor(atol(_textColor), atol(_bgColor)); + break; + } + case CMD_SET_CURSOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_xCursor; + char *_yCursor; + + // Get the arguments ant it's size. + _xCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_xCursor == NULL || _yCursor == NULL) return; + + // Set new text cursor position. + _display->setCursor(atol(_xCursor), atol(_yCursor)); + break; + } + case CMD_SET_TEXT_WRAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textWrap; + + // Get the arguments ant it's size. + _textWrap = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textWrap == NULL) return; + + // Set text wrapping.. + _display->setTextWrap(atol(_textWrap)); + break; + } + case CMD_SET_ROTATION: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_rotation; + + // Get the arguments ant it's size. + _rotation = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_rotation == NULL) return; + + // Set text wrapping.. + _display->setRotation(atol(_rotation)); + break; + } + case CMD_SD_CARD_INIT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_init; + + // Get the arguments ant it's size. + _init = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_init == NULL && atol(_init) != 1) return; + + // Try to init microSD card + if (_display->sdCardInit()) + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_failResponseString), (char*)_failResponseString); + } + break; + } + case CMD_SD_CARD_SLEEP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_uSDSleep; + + // Get the arguments ant it's size. + _uSDSleep = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_uSDSleep == NULL && atol(_uSDSleep) != 1) return; + + // Set microSD card to sleep. + _display->sdCardSleep(); + break; + } + case CMD_DRAW_BITMAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_color; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _color = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _color == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + hexAsciiToAscii(_hexData, _argSize); + + // Display the bitmap. + _display->drawBitmap(atol(_xPos), atol(_yPos), (uint8_t*)_hexData, atol(_w), atol(_h), atol(_color)); + + break; + } + case CMD_DRAW_IMAGE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_dither; + char *_invert; + char *_path; + char *_pathType; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _dither = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _invert = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _pathType = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _path = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _dither == NULL || _invert == NULL || _pathType==NULL ||_path == NULL) return; + + if(_pathType == 0) + { + // Convert it on the fly from HEX ASCII to standard ASCII. This can be done directly in the buffer since ASCII will take up half the size of the original _path size. + hexAsciiToAscii(_path, _argSize); + + // Add null-termination at the end of the argument. + _path[_argSize / 2] = '\0'; + + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_path, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + } + else + { + char _pathNew[_argSize+1]; + strncpy(_pathNew, _path, _argSize); + _pathNew[_argSize]='\0'; + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_pathNew, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + } + + + break; + + } + case CMD_DRAW_IMAGE_BUFFER: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 4, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. + hexAsciiToAscii(_hexData, _argSize); + + // Display the image from the buffer. + _display->drawImage((const uint8_t*)_hexData, atol(_xPos), atol(_yPos), atol(_w), atol(_h)); + break; + } + case CMD_SET_MODE: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + _display->setDisplayMode(atol(_arg1)); + break; + } + case CMD_GET_MODE: + { + char response[1]; + itoa(_display->getDisplayMode(), response, 10); + sendResponse(CMD_GET_MODE, strlen(response), response); + break; + } + case CMD_CLEAR_DISPLAY: + { + // No payload check needed, just clear the display + _display->clearDisplay(); + + break; + } + case CMD_DISPLAY: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + // Execute the command! + _display->display(atol(_arg1)); + break; + } + case CMD_PARTIAL_UPDATE: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + // Execute the command! + _display->partialUpdate(atol(_arg1), atol(_arg2)); + break; + } + case CMD_READ_TEMP: + { + char response[4]; + itoa(_display->readTemperature(), response, 10); + sendResponse(CMD_READ_TEMP, strlen(response), response); + break; + } + case CMD_READ_TOUCHPAD: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + char response[1]; + itoa(_display->readTouchpad(atoi(_arg1)), response, 10); + sendResponse(CMD_READ_TOUCHPAD, strlen(response), response); + + break; + } + case CMD_READ_BATTERY: + { + Serial.println(_display->readBattery()); + char response[50]; + sprintf(response,"%lf", _display->readBattery()); + sendResponse(CMD_READ_BATTERY, strlen(response), response); + break; + } + case CMD_EINK_PMIC: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + if(atoi(_arg1) == 0) + { + _display->einkOff(); + } + else + { + _display->einkOn(); + } + + break; + } + case CMD_RTC_SET_TIME: + { + // Check the number of arguments. + if (_numberOfArgs != 3) return; + + // Get the argument. + char *_arg1; // H + char *_arg2; // M + char *_arg3; // S + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL) return; + + + + _display->rtcSetTime(atoi(_arg1), atoi(_arg2), atoi(_arg3)); + + break; + } + case CMD_RTC_SET_DATE: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Weekday + char *_arg2; // Day + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + + _display->rtcSetDate(atoi(_arg1), atoi(_arg2), atoi(_arg3), atoi(_arg4)); + break; + } + case CMD_RTC_SET_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // Epoch + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + _display->rtcSetEpoch(atoll(_arg1)); + break; + } + case CMD_RTC_UPDATE: + { + _display->rtcGetRtcData(); + break; + } + case CMD_RTC_GET_DATA_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d %d/%d/%d", _display->rtcGetHour(),_display->rtcGetMinute(), _display->rtcGetSecond(), + _display->rtcGetWeekday(), _display->rtcGetDay(), _display->rtcGetMonth(), _display->rtcGetYear()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_ALARM: + { + // Check the number of arguments. + if (_numberOfArgs != 5) return; + + // Get the argument. + char *_arg1; // sec + char *_arg2; // min + char *_arg3; // hour + char *_arg4; // day + char *_arg5; // weekday + + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _arg5 = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL || _arg5== NULL) return; + + _display->rtcEnableAlarm(); + + _display->rtcSetAlarm(atoi(_arg1),atoi(_arg2),atoi(_arg3),atoi(_arg4),atoi(_arg5)); + + break; + } + case CMD_RTC_SET_ALARM_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; // epoch + char *_arg2; // match + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + _display->rtcSetAlarmEpoch(atoll(_arg1),atoi(_arg2)); + + break; + } + case CMD_RTC_CLEAR_AL_FLAG: + { + _display->rtcClearAlarmFlag(); + break; + } + case CMD_RTC_GET_ALARM_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d-%d", _display->rtcGetAlarmHour(),_display->rtcGetAlarmMinute(), _display->rtcGetAlarmSecond(), _display->rtcGetAlarmDay(), _display->rtcGetAlarmWeekday()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_TIMER: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Source clock + char *_arg2; // + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + Inkplate::rtcCountdownSrcClock clock; + + switch(atoi(_arg1)) + { + case 0: + clock=Inkplate::TIMER_CLOCK_4096HZ; + break; + case 1: + clock=Inkplate::TIMER_CLOCK_64HZ; + break; + case 2: + clock=Inkplate::TIMER_CLOCK_1HZ; + break; + case 3: + clock=Inkplate::TIMER_CLOCK_1PER60HZ; + break; + default: + return; + + } + + _display->rtcTimerSet(clock, atoi(_arg2), atoi(_arg3), atoi(_arg4)); + + break; + } + case CMD_RTC_GET_TIMER_FLAG: + { + char response[1]; + itoa(_display->rtcCheckTimerFlag(), response, 10); + sendResponse(CMD_RTC_GET_TIMER_FLAG, strlen(response), response); + + break; + } + case CMD_RTC_CLEAR_TIMER_FLAG: + { + _display->rtcClearTimerFlag(); + break; + } + case CMD_RTC_DISABLE_TIMER: + { + _display->rtcDisableTimer(); + break; + } + case CMD_RTC_IS_SET: + { + char response[1]; + itoa(_display->rtcIsSet(), response, 10); + sendResponse(CMD_RTC_IS_SET, strlen(response), response); + break; + } + case CMD_RTC_RESET: + { + _display->rtcReset(); + break; + } + case CMD_ESP32_DEEPSLEEP: + { + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + esp_deep_sleep_start(); + break; + } + case CMD_ESP32_LIGHTSLEEP: + { + + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + delay(10); + esp_light_sleep_start(); + break; + } + case CMD_TOUCH_INIT: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_AVAILABLE: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_GET_DATA: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_CONNECT_WIFI: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_ssid; + char *_password; + + uint32_t ssidSize, passwordSize; + + _ssid = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &ssidSize); + _password = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &passwordSize); + + // Check if they are valid. + if (_ssid == NULL || _password == NULL) return; + + char ssid[ssidSize + 1]; + char password[passwordSize + 1]; + + strncpy(ssid, _ssid, ssidSize); + ssid[ssidSize] = '\0'; + + strncpy(password, _password, passwordSize); + password[passwordSize] = '\0'; + + + Serial.println(ssid); + Serial.println(password); + + + if(_display->connectWiFi(ssid, password)) + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + case CMD_DISCONNECT_WIFI: + { + _display->disconnect(); + break; + } + case CMD_GET_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + + // Get the arguments. + char *_server; + + uint32_t serverSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + + strncpy(server,_server, serverSize); + + server[serverSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + + // Your Domain name with URL path or IP address with path + http.begin(server); + + // Send HTTP GET request + int httpResponseCode = http.GET(); + + if (httpResponseCode>0) { + String payload = http.getString(); + sendResponse(CMD_GET_REQUEST, strlen(payload.c_str()), (char*)payload.c_str()); + } + else { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + } + else + { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + + case CMD_POST_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_server; + char *_postMessage; + + uint32_t serverSize; + uint32_t postSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + _postMessage = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &postSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + char postMessage[postSize+1]; + + strncpy(server,_server, serverSize); + strncpy(postMessage, _postMessage, postSize); + + server[serverSize]='\0'; + postMessage[postSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + // Your Domain name with URL path or IP address with path + http.begin(server); + + http.addHeader("Content-Type", "text/plain"); + + int httpResponseCode = http.POST(postMessage); + + if (httpResponseCode>0) { + sendResponse(CMD_POST_REQUEST, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else { + sendResponse(CMD_POST_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + + } + break; + } + } +} + +int PeripheralMode::hexToChar(int a, int b) +{ + return ((16 * charToInt(a)) + charToInt(b)); +} + +int PeripheralMode::charToInt(char a) +{ + // Convert to uppercase + a = toupper(a); + + if (a >= '0' && a <= '9') + return a - '0'; + if (a >= 'A' && a <= 'F') + return ((a - 'A') + 10); +} + +void PeripheralMode::checkArguments(int *_noOfArgs, int _maxArg, int _repeat) +{ + // Check the number of the arguments. + if ((*_noOfArgs) < _maxArg) return; + + // If the repeatable payload option is not enabled, restrict to only first argument. + if (!_repeat) (*_noOfArgs) = _maxArg; +} + +void PeripheralMode::hexAsciiToAscii(char *_buffer, uint32_t _size) +{ + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + for (uint32_t i = 0; i < _size; i+=2) + { + _buffer[i / 2] = hexToChar(_buffer[i], _buffer[i + 1]); + } +} \ No newline at end of file diff --git a/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/InkplatePeripheralMode.h b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/InkplatePeripheralMode.h new file mode 100644 index 000000000..be5ad3c17 --- /dev/null +++ b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/InkplatePeripheralMode.h @@ -0,0 +1,77 @@ +// Add header guards. +#ifndef __INKPLATEPERIPHERALMODE_H__ +#define __INKPLATEPERIPHERALMODE_H__ + +// Add an main Arduino header file. +#include + +// Add an Inkplate library. +#include + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +//#include + +// Make a class for the peripheral mode. +class PeripheralMode +{ + private: + // Use singleton class to not being able to use multiple instances of this class (since only makes sense to make only one Peripheral mode). + // Private constructor to prevent direct instantiation. + PeripheralMode() {} + + // Static pointer to the single instance. + static PeripheralMode* _instancePtr; + + // Pointer to the Arduino Serial object, + HardwareSerial *_serial = nullptr; + + // Pointer to the Inkplate library object, + Inkplate *_display = nullptr; + + // Variable for counting incoming serial data. + uint32_t _serialBufferIndex = 0; + + // Pointer to the allocated serial buffer in the PSRAM. + char *_serialBuffer = nullptr; + + // Size of the buffer for parsing the commands. + uint32_t _bufferSize = 0; + + // Commonly used responeses + const char *_okResponseString = "OK"; + const char *_failResponseString = "FAIL"; + + // Variable for timestamping last received data for the automatic buffer clear. + unsigned long _bufferAutoCleanTimestamp = 0; + + bool checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandEndPosition); + void sendResponse(int _command, int _payloadSize, char *_payload); + char* getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size); + int getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize); + void parseCommand(int _command, int _repeat, int _payloadSize, char* _payload); + int hexToChar(int a, int b); + int charToInt(char a); + void checkArguments(int *_noOfArgs, int _maxArg, int _repeat); + void hexAsciiToAscii(char *_buffer, uint32_t _size); + + public: + static PeripheralMode* getInstance() + { + // Check if the instance is already been made. If not, make it. + if (PeripheralMode::_instancePtr == nullptr) + { + // Make a new instance and save the address to the pointer. + PeripheralMode::_instancePtr = new PeripheralMode(); + } + + // Return the instance pointer. This way only one object is created. + return PeripheralMode::_instancePtr; + } + + bool begin(HardwareSerial *_serial, Inkplate *_inkplate, uint32_t _baud = 115200ULL, uint8_t _rxPin = -1, uint8_t _txPin = -1, uint32_t _size = SERIAL_BUFFER_SIZE); + bool getDataFromSerial(unsigned long _timeout); +}; + +#endif \ No newline at end of file diff --git a/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/commandList.h b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/commandList.h new file mode 100644 index 000000000..efc956871 --- /dev/null +++ b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/commandList.h @@ -0,0 +1,73 @@ +#ifndef __COMMAND_LIST_H__ +#define __COMMAND_LIST_H__ + +#define CMD_PING 0x0001 +// Commands from 0x01 to 0x0A are reserved for future use. Command 0x00 is invalid! + +#define CMD_DRAW_PIXEL 0x000A +#define CMD_DRAW_LINE 0x000B +#define CMD_DRAW_FASTVLINE 0x000C +#define CMD_DRAW_FASTHLINE 0x000D +#define CMD_DRAW_RECT 0x000E +#define CMD_DRAW_CIRCLE 0x000F +#define CMD_DRAW_TRIANGLE 0x0010 +#define CMD_DRAW_ROUND_RECT 0x0011 +#define CMD_DRAW_THICK_LINE 0x0012 +#define CMD_DRAW_ELIPSE 0x0013 +#define CMD_FILL_RECT 0x0014 +#define CMD_FILL_CIRCLE 0x0015 +#define CMD_FILL_TRIANGLE 0x0016 +#define CMD_FILL_ROUND_RECT 0x0017 +#define CMD_FILL_ELIPSE 0x0018 +#define CMD_PRINT 0x0019 +#define CMD_SET_TEXT_SIZE 0x001A +#define CMD_SET_TEXT_COLOR 0x001B +#define CMD_SET_CURSOR 0x001C +#define CMD_SET_TEXT_WRAP 0x001D +#define CMD_SET_ROTATION 0x001E +#define CMD_SD_CARD_INIT 0x001F +#define CMD_SD_CARD_SLEEP 0x0020 +#define CMD_DRAW_BITMAP 0x0021 +#define CMD_DRAW_IMAGE 0x0022 +#define CMD_SET_MODE 0x0023 +#define CMD_GET_MODE 0x0024 +#define CMD_CLEAR_DISPLAY 0x0025 +#define CMD_DISPLAY 0x0026 +#define CMD_PARTIAL_UPDATE 0x0027 +#define CMD_READ_TEMP 0x0028 +#define CMD_READ_TOUCHPAD 0x0029 +#define CMD_READ_BATTERY 0x002A +#define CMD_EINK_PMIC 0x002B +#define CMD_RTC_SET_TIME 0x002C +#define CMD_RTC_SET_DATE 0x002D +#define CMD_RTC_SET_EPOCH 0x002E +#define CMD_RTC_UPDATE 0x002F +#define CMD_RTC_GET_DATA_ALL 0x0030 +#define CMD_RTC_SET_ALARM 0x0031 +#define CMD_RTC_SET_ALARM_EPOCH 0x0032 +#define CMD_RTC_CLEAR_AL_FLAG 0x0033 +#define CMD_RTC_GET_ALARM_ALL 0x0034 +#define CMD_RTC_SET_TIMER 0x0035 +#define CMD_RTC_GET_TIMER_FLAG 0x0036 +#define CMD_RTC_CLEAR_TIMER_FLAG 0x0037 +#define CMD_RTC_DISABLE_TIMER 0x0038 +#define CMD_RTC_IS_SET 0x0039 +#define CMD_RTC_RESET 0x003A +#define CMD_ESP32_DEEPSLEEP 0x003B +#define CMD_ESP32_LIGHTSLEEP 0x003C +#define CMD_TOUCH_INIT 0x003D +#define CMD_TOUCH_AVAILABLE 0x003E +#define CMD_TOUCH_GET_DATA 0x003F +#define CMD_DRAW_IMAGE_BUFFER 0x0040 +#define CMD_CONNECT_WIFI 0x0041 +#define CMD_DISCONNECT_WIFI 0x0042 +#define CMD_GET_REQUEST 0x0043 +#define CMD_POST_REQUEST 0x0044 +// #define CMD_ 0x0042 +// #define CMD_ 0x0043 +// #define CMD_ 0x0044 +// #define CMD_ 0x0045 +// #define CMD_ 0x0046 +// #define CMD_ 0x0047 + +#endif diff --git a/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/settings.h b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/settings.h new file mode 100644 index 000000000..53e1874f4 --- /dev/null +++ b/examples/Inkplate6/Diagnostics/Inkplate6_Peripheral_Mode/settings.h @@ -0,0 +1,20 @@ +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +// Size of the Serial buffer (in bytes). Change if needed. It's stored in the PSRAM of the ESP32. +#define SERIAL_BUFFER_SIZE 65535 + +// Timeout for the incomming data. It's is counted from the last received char from te serial. +#define SERIAL_TIMEOUT_MS 100 + +// Define default ESP32 UART RX and TX pins +#define SERIAL_UART_RX_PIN 3 +#define SERIAL_UART_TX_PIN 1 + +// Termination char for the arguments (see documentation!) +#define TEMR_CHAR ';' + +// How long it takes to clear the buffer from unprocessed or invalid commands. +#define SERIAL_BUFFER_CLEAN_TIME_MS 60000ULL + +#endif diff --git a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h b/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h deleted file mode 100644 index 7f2ed9e6b..000000000 --- a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h +++ /dev/null @@ -1,203 +0,0 @@ -// 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 Open_Sans_SemiBold_16Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xDB, 0x6D, 0xB6, 0x03, 0x60, // '!' - 0xDB, 0x6D, 0xB6, // '"' - 0x09, 0x03, 0x20, 0x6C, 0x3F, 0xE1, 0x20, 0x24, 0x04, 0x87, 0xFC, 0x36, 0x04, 0xC0, 0x90, 0x12, 0x00, // '#' - 0x10, 0x10, 0x7C, 0xFE, 0xD0, 0xD0, 0x78, 0x3C, 0x16, 0x96, 0xFE, 0xFC, 0x10, 0x10, // '$' - 0x70, 0xC6, 0x84, 0x26, 0x61, 0x32, 0x09, 0xB0, 0x69, 0x71, 0xD2, 0xC1, 0xB2, 0x09, 0x90, 0xCC, 0x84, 0x2C, - 0x61, 0xC0, // '%' - 0x3C, 0x07, 0xE0, 0x66, 0x06, 0x60, 0x6C, 0x03, 0x80, 0x78, 0xCC, 0xCC, 0xC7, 0x8C, 0x38, 0xFF, 0x87, 0xCC, // '&' - 0xDB, 0x60, // ''' - 0x23, 0x11, 0x8C, 0x42, 0x10, 0x84, 0x31, 0x84, 0x30, 0x80, // '(' - 0x43, 0x08, 0x63, 0x08, 0x42, 0x10, 0x8C, 0x62, 0x31, 0x00, // ')' - 0x10, 0x10, 0xD6, 0xFE, 0x38, 0x6C, 0x44, // '*' - 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, // '+' - 0x66, 0x44, // ',' - 0xEE, // '-' - 0xD8, // '.' - 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x00, // '/' - 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, // '0' - 0x18, 0xEF, 0x96, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, // '1' - 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x08, 0x10, 0x20, 0xC0, 0xFE, 0xFE, // '2' - 0x7C, 0xFE, 0x86, 0x06, 0x04, 0x78, 0x7C, 0x06, 0x06, 0x06, 0xFE, 0xF8, // '3' - 0x06, 0x03, 0x80, 0xE0, 0x78, 0x16, 0x0D, 0x86, 0x61, 0x18, 0xFF, 0xBF, 0xE0, 0x60, 0x18, // '4' - 0x7C, 0xFC, 0xC0, 0xC0, 0xFC, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFC, 0xF8, // '5' - 0x1E, 0x7E, 0x60, 0xC0, 0xFC, 0xFE, 0xC6, 0xC2, 0xC2, 0xC6, 0x7E, 0x3C, // '6' - 0xFE, 0xFE, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, // '7' - 0x7C, 0xFE, 0xC6, 0xC6, 0x64, 0x38, 0x7C, 0xC6, 0x82, 0xC6, 0xFE, 0x7C, // '8' - 0x78, 0xFC, 0xC6, 0xC6, 0x86, 0xC6, 0xFE, 0x7E, 0x06, 0x0C, 0xFC, 0xF0, // '9' - 0xD8, 0x00, 0x06, 0xC0, // ':' - 0x66, 0x00, 0x00, 0x06, 0x64, 0x40, // ';' - 0x02, 0x0E, 0x38, 0xE0, 0xC0, 0x38, 0x0E, 0x02, // '<' - 0xFE, 0x00, 0x00, 0x00, 0xFE, // '=' - 0x80, 0xE0, 0x38, 0x0E, 0x06, 0x38, 0xE0, 0x80, // '>' - 0x78, 0xFC, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, // '?' - 0x0F, 0x81, 0xC6, 0x18, 0x08, 0x9F, 0x6D, 0x99, 0x4C, 0xCA, 0x46, 0x52, 0x32, 0x99, 0xB6, 0x77, 0x10, 0x00, - 0x61, 0x01, 0xF8, 0x00, // '@' - 0x0E, 0x00, 0xE0, 0x0A, 0x01, 0xB0, 0x1B, 0x03, 0x18, 0x31, 0x83, 0xF8, 0x7F, 0xC6, 0x0C, 0x60, 0xCC, 0x06, // 'A' - 0xFC, 0x7F, 0x21, 0xD0, 0x68, 0x67, 0xF3, 0xF9, 0x06, 0x83, 0x41, 0xBF, 0xDF, 0x80, // 'B' - 0x1F, 0x3F, 0x98, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x1F, 0xC3, 0xE0, // 'C' - 0xFC, 0x3F, 0x88, 0x72, 0x0E, 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x83, 0xA1, 0xCF, 0xE3, 0xF0, // 'D' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x03, 0xF7, 0xE0, // 'E' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x02, 0x04, 0x00, // 'F' - 0x1F, 0x87, 0xF1, 0xC0, 0x70, 0x0C, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE0, 0xCE, 0x19, 0xFF, 0x0F, 0xC0, // 'G' - 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x81, 0xBF, 0xEF, 0xFA, 0x06, 0x81, 0xA0, 0x68, 0x1A, 0x06, // 'H' - 0xAA, 0xAA, 0xAA, // 'I' - 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x63, 0x7B, 0x80, // 'J' - 0xC3, 0x30, 0xCC, 0x63, 0x30, 0xD8, 0x36, 0x0F, 0x83, 0x30, 0xC6, 0x31, 0x8C, 0x33, 0x06, // 'K' - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xFE, // 'L' - 0xC0, 0x6E, 0x0E, 0xE0, 0xEA, 0x0A, 0xB1, 0xAB, 0x12, 0x91, 0x29, 0xB2, 0x9A, 0x28, 0xE2, 0x8E, 0x28, 0xC2, // 'M' - 0xC0, 0xB8, 0x2E, 0x0A, 0xC2, 0xB8, 0xA6, 0x28, 0xCA, 0x3A, 0x86, 0xA0, 0xE8, 0x3A, 0x06, // 'N' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0xC1, 0xF0, // 'O' - 0xF8, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x80, 0x80, 0x80, 0x80, // 'P' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0x81, 0xF0, - 0x03, 0x80, 0x18, 0x00, 0xC0, // 'Q' - 0xFC, 0x3F, 0x8C, 0x73, 0x0C, 0xC3, 0x31, 0xCF, 0xE3, 0xF0, 0xCC, 0x31, 0x8C, 0x33, 0x0E, // 'R' - 0x7C, 0xFE, 0xC2, 0xC0, 0xE0, 0x78, 0x1C, 0x06, 0x06, 0x86, 0xFE, 0xFC, // 'S' - 0xFF, 0xBF, 0xE0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'T' - 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xCC, 0x31, 0xFE, 0x0F, 0x00, // 'U' - 0xC0, 0xD8, 0x11, 0x86, 0x30, 0xC6, 0x10, 0x66, 0x0C, 0xC1, 0x90, 0x1E, 0x03, 0xC0, 0x70, 0x06, 0x00, // 'V' - 0xC3, 0x86, 0xC3, 0x86, 0x63, 0x8C, 0x62, 0x8C, 0x66, 0xCC, 0x66, 0xCC, 0x24, 0xC8, 0x34, 0x58, 0x3C, 0x78, - 0x3C, 0x78, 0x18, 0x30, 0x18, 0x30, // 'W' - 0x61, 0x8C, 0x30, 0xCC, 0x19, 0x81, 0xE0, 0x18, 0x07, 0x80, 0xF0, 0x33, 0x06, 0x61, 0x86, 0x60, 0x60, // 'X' - 0xC1, 0x98, 0xC6, 0x30, 0xD8, 0x36, 0x07, 0x01, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'Y' - 0xFE, 0x7F, 0x01, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x3F, 0xDF, 0xE0, // 'Z' - 0xF6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xC0, // '[' - 0xC0, 0x81, 0x83, 0x02, 0x06, 0x0C, 0x08, 0x18, 0x30, 0x20, 0x60, // '\' - 0xF1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1B, 0xC0, // ']' - 0x08, 0x07, 0x01, 0x40, 0x98, 0x22, 0x10, 0xCC, 0x10, // '^' - 0xFE, // '_' - 0xC4, 0x20, // '`' - 0x7C, 0x7E, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xFE, 0x76, // 'a' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB8, 0xDF, 0xCD, 0xE0, // 'b' - 0x3C, 0xFB, 0x06, 0x0C, 0x18, 0x30, 0x3E, 0x3C, // 'c' - 0x03, 0x01, 0x80, 0xC0, 0x67, 0xB3, 0xFB, 0x1D, 0x86, 0xC3, 0x61, 0xB1, 0xDF, 0xE7, 0xB0, // 'd' - 0x3C, 0x7E, 0xC6, 0xFE, 0xFE, 0xC0, 0xC0, 0x7E, 0x3C, // 'e' - 0x1E, 0x3C, 0x30, 0x30, 0x7C, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // 'f' - 0x3F, 0x99, 0x86, 0x31, 0x8C, 0x62, 0x0F, 0x06, 0x01, 0xFC, 0x7F, 0x30, 0x6C, 0x1B, 0x0C, 0x7E, 0x00, // 'g' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x30, // 'h' - 0xD8, 0x0D, 0xB6, 0xDB, 0x6C, // 'i' - 0x31, 0x80, 0x03, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDE, 0xE0, // 'j' - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x66, 0x63, 0x61, 0xB0, 0xF8, 0x7C, 0x33, 0x18, 0xCC, 0x70, // 'k' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6C, // 'l' - 0xDC, 0xF3, 0xFF, 0xEE, 0x71, 0xB0, 0xC6, 0xC2, 0x1B, 0x08, 0x6C, 0x21, 0xB0, 0x86, 0xC2, 0x18, // 'm' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x00, // 'n' - 0x3C, 0x3F, 0x30, 0xD8, 0x6C, 0x36, 0x1B, 0x0C, 0xFC, 0x3C, 0x00, // 'o' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x8D, 0xFC, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x00, // 'p' - 0x7B, 0x3F, 0xB1, 0xD8, 0x6C, 0x36, 0x1B, 0x1D, 0xFE, 0x7B, 0x01, 0x80, 0xC0, 0x60, 0x30, // 'q' - 0xDD, 0xFB, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 'r' - 0x79, 0xFB, 0x17, 0x07, 0x81, 0x83, 0x7E, 0xF8, // 's' - 0x20, 0x41, 0xF7, 0xE6, 0x0C, 0x18, 0x30, 0x60, 0x78, 0xF0, // 't' - 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x1C, 0xFE, 0x7B, 0x00, // 'u' - 0xC1, 0x90, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x40, 0x70, 0x1C, 0x00, // 'v' - 0xC7, 0x19, 0x1C, 0x46, 0x53, 0x19, 0x4C, 0x6D, 0xB0, 0xB6, 0x83, 0x8E, 0x0E, 0x38, 0x38, 0xE0, // 'w' - 0x63, 0x18, 0xC3, 0x60, 0x70, 0x1C, 0x07, 0x03, 0x61, 0x8C, 0x63, 0x00, // 'x' - 0xC1, 0x98, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x60, 0x70, 0x1C, 0x06, 0x01, 0x83, 0xC0, 0xE0, 0x00, // 'y' - 0xFD, 0xF8, 0x30, 0xC3, 0x0C, 0x30, 0x7E, 0xFC, // 'z' - 0x1C, 0x70, 0xC1, 0x83, 0x06, 0x38, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x03, 0x07, 0x00, // '{' - 0xAA, 0xAA, 0xAA, 0xAA, 0x80, // '|' - 0xE0, 0xE0, 0xC1, 0x83, 0x06, 0x07, 0x1C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_16Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 5, 0, 0}, // ' ' - {1, 3, 12, 5, 1, -12}, // '!' - {6, 6, 4, 8, 1, -12}, // '"' - {9, 11, 12, 11, 0, -12}, // '#' - {26, 8, 14, 10, 1, -13}, // '$' - {40, 13, 12, 15, 1, -12}, // '%' - {60, 12, 12, 13, 1, -12}, // '&' - {78, 3, 4, 5, 1, -12}, // ''' - {80, 5, 15, 6, 1, -12}, // '(' - {90, 5, 15, 6, 0, -12}, // ')' - {100, 8, 7, 10, 1, -13}, // '*' - {107, 8, 7, 10, 1, -9}, // '+' - {114, 4, 4, 5, 0, -2}, // ',' - {116, 4, 2, 6, 1, -5}, // '-' - {117, 3, 2, 5, 1, -2}, // '.' - {118, 7, 12, 7, 0, -12}, // '/' - {129, 8, 12, 10, 1, -12}, // '0' - {141, 6, 12, 10, 1, -12}, // '1' - {150, 8, 12, 10, 1, -12}, // '2' - {162, 8, 12, 10, 1, -12}, // '3' - {174, 10, 12, 10, 0, -12}, // '4' - {189, 8, 12, 10, 1, -12}, // '5' - {201, 8, 12, 10, 1, -12}, // '6' - {213, 8, 12, 10, 1, -12}, // '7' - {225, 8, 12, 10, 1, -12}, // '8' - {237, 8, 12, 10, 1, -12}, // '9' - {249, 3, 9, 5, 1, -9}, // ':' - {253, 4, 11, 5, 0, -9}, // ';' - {259, 8, 8, 10, 1, -10}, // '<' - {267, 8, 5, 10, 1, -8}, // '=' - {272, 8, 8, 10, 1, -10}, // '>' - {280, 8, 12, 8, 0, -12}, // '?' - {292, 13, 13, 15, 1, -12}, // '@' - {314, 12, 12, 12, 0, -12}, // 'A' - {332, 9, 12, 12, 2, -12}, // 'B' - {346, 9, 12, 11, 1, -12}, // 'C' - {360, 10, 12, 13, 2, -12}, // 'D' - {375, 7, 12, 10, 2, -12}, // 'E' - {386, 7, 12, 10, 2, -12}, // 'F' - {397, 11, 12, 13, 1, -12}, // 'G' - {414, 10, 12, 13, 2, -12}, // 'H' - {429, 2, 12, 6, 2, -12}, // 'I' - {432, 5, 15, 6, -1, -12}, // 'J' - {442, 10, 12, 11, 1, -12}, // 'K' - {457, 8, 12, 10, 2, -12}, // 'L' - {469, 12, 12, 16, 2, -12}, // 'M' - {487, 10, 12, 14, 2, -12}, // 'N' - {502, 12, 12, 14, 1, -12}, // 'O' - {520, 8, 12, 11, 2, -12}, // 'P' - {532, 12, 15, 14, 1, -12}, // 'Q' - {555, 10, 12, 11, 1, -12}, // 'R' - {570, 8, 12, 10, 1, -12}, // 'S' - {582, 10, 12, 10, 0, -12}, // 'T' - {597, 11, 12, 13, 1, -12}, // 'U' - {614, 11, 12, 11, 0, -12}, // 'V' - {631, 16, 12, 16, 0, -12}, // 'W' - {655, 11, 12, 11, 0, -12}, // 'X' - {672, 10, 12, 10, 0, -12}, // 'Y' - {687, 9, 12, 10, 1, -12}, // 'Z' - {701, 5, 15, 6, 1, -12}, // '[' - {711, 7, 12, 7, 0, -12}, // '\' - {722, 5, 15, 6, 0, -12}, // ']' - {732, 10, 7, 10, 0, -12}, // '^' - {741, 8, 1, 8, 0, 1}, // '_' - {742, 4, 3, 10, 3, -13}, // '`' - {744, 8, 9, 10, 1, -9}, // 'a' - {753, 9, 13, 11, 1, -13}, // 'b' - {768, 7, 9, 9, 1, -9}, // 'c' - {776, 9, 13, 11, 1, -13}, // 'd' - {791, 8, 9, 10, 1, -9}, // 'e' - {800, 8, 13, 7, 0, -13}, // 'f' - {813, 10, 13, 10, 0, -9}, // 'g' - {830, 9, 13, 11, 1, -13}, // 'h' - {845, 3, 13, 5, 1, -13}, // 'i' - {850, 5, 17, 5, -1, -13}, // 'j' - {861, 9, 13, 10, 1, -13}, // 'k' - {876, 3, 13, 5, 1, -13}, // 'l' - {881, 14, 9, 16, 1, -9}, // 'm' - {897, 9, 9, 11, 1, -9}, // 'n' - {908, 9, 9, 11, 1, -9}, // 'o' - {919, 9, 13, 11, 1, -9}, // 'p' - {934, 9, 13, 11, 1, -9}, // 'q' - {949, 7, 9, 8, 1, -9}, // 'r' - {957, 7, 9, 9, 1, -9}, // 's' - {965, 7, 11, 7, 0, -11}, // 't' - {975, 9, 9, 11, 1, -9}, // 'u' - {986, 10, 9, 10, 0, -9}, // 'v' - {998, 14, 9, 14, 0, -9}, // 'w' - {1014, 10, 9, 10, 0, -9}, // 'x' - {1026, 10, 13, 10, 0, -9}, // 'y' - {1043, 7, 9, 9, 1, -9}, // 'z' - {1051, 7, 15, 7, 0, -12}, // '{' - {1065, 2, 17, 10, 4, -13}, // '|' - {1070, 7, 15, 7, 0, -12} // '}' -}; -const GFXfont Open_Sans_SemiBold_16 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_16Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_16Glyphs, 0x20, 0x7E, 23}; \ No newline at end of file diff --git a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h b/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h deleted file mode 100644 index 0fa23e60d..000000000 --- a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h +++ /dev/null @@ -1,276 +0,0 @@ -// 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 Open_Sans_SemiBold_24Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x0E, 0xEE, 0xE0, // '!' - 0x66, 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x30, // '"' - 0x06, 0x30, 0x0C, 0x60, 0x18, 0xC0, 0x71, 0x80, 0xC6, 0x0F, 0xFF, 0x9F, 0xFF, 0x06, 0x30, 0x18, 0xE0, 0x31, - 0x83, 0xFF, 0xF7, 0xFF, 0xE3, 0x8C, 0x06, 0x38, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, // '#' - 0x06, 0x00, 0x30, 0x07, 0xF0, 0xFF, 0xC7, 0x66, 0x73, 0x03, 0x98, 0x0E, 0xC0, 0x7E, 0x00, 0xFC, 0x01, 0xF8, - 0x0D, 0xC0, 0x67, 0x03, 0x3B, 0x1B, 0x9F, 0xFC, 0x7F, 0x80, 0x30, 0x01, 0x80, // '$' - 0x3C, 0x06, 0x07, 0xE0, 0xE0, 0xE6, 0x0C, 0x0C, 0x71, 0x80, 0xC7, 0x18, 0x0C, 0x73, 0x00, 0xC7, 0x70, 0x0E, - 0x66, 0x78, 0x7E, 0xEF, 0xC3, 0xCC, 0xCE, 0x01, 0xDC, 0x60, 0x19, 0xC6, 0x03, 0x1C, 0x60, 0x71, 0xC6, 0x06, - 0x0C, 0xE0, 0xE0, 0xFC, 0x0C, 0x07, 0x80, // '%' - 0x0F, 0x80, 0x0F, 0xF0, 0x03, 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x0E, 0x70, 0x01, 0xFC, 0x00, 0x3C, 0x00, - 0x3F, 0x07, 0x1F, 0xE1, 0xCF, 0x3C, 0xE3, 0x83, 0xB8, 0xE0, 0x7C, 0x38, 0x0F, 0x07, 0x0F, 0xC1, 0xFF, 0xB8, - 0x1F, 0x87, 0x00, // '&' - 0xDB, 0x6D, 0x80, // ''' - 0x1C, 0x30, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xE0, 0xC1, - 0xC0, // '(' - 0xE0, 0xC1, 0xC1, 0x83, 0x83, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x71, 0xC3, 0x0E, - 0x00, // ')' - 0x0E, 0x00, 0xE0, 0x0E, 0x08, 0x42, 0xFF, 0xEF, 0xFE, 0x0E, 0x01, 0xB0, 0x3B, 0x83, 0x18, 0x11, 0x00, // '*' - 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x7F, 0xFB, 0xFF, 0xC0, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, // '+' - 0x73, 0x39, 0xCC, 0x60, // ',' - 0xFD, 0xF8, // '-' - 0xEE, 0xEE, // '.' - 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x07, - 0x01, 0x80, 0xE0, 0x00, // '/' - 0x1F, 0x01, 0xFE, 0x1C, 0x38, 0xE1, 0xCE, 0x06, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x71, 0xC3, 0x87, 0xF8, 0x0F, 0x80, // '0' - 0x0E, 0x1E, 0x3E, 0xF6, 0xE6, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // '1' - 0x1F, 0x83, 0xFE, 0x1C, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF0, // '2' - 0x3F, 0x87, 0xFE, 0x18, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0x00, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x7B, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '3' - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x1B, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0x38, 0x0E, 0x70, 0x38, 0xE0, 0x61, - 0xC1, 0x83, 0x87, 0xFF, 0xEF, 0xFF, 0xC0, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, // '4' - 0x7F, 0xE3, 0xFF, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x73, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '5' - 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x9E, 0x1F, 0xFC, 0xF0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x39, 0xE3, 0x87, 0xF8, 0x0F, 0x80, // '6' - 0xFF, 0xF7, 0xFF, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, - 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x38, 0x00, // '7' - 0x1F, 0x81, 0xFE, 0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x38, 0x71, 0xE7, 0x07, 0xF0, 0x1F, 0x83, 0xDE, 0x1C, 0x39, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0xC3, 0x8F, 0xFC, 0x1F, 0x80, // '8' - 0x1F, 0x01, 0xFE, 0x1C, 0x79, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0x70, 0xF3, 0xFF, 0x87, 0xDC, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x0F, 0x0F, 0xF0, 0x7E, 0x00, // '9' - 0xEE, 0xEE, 0x00, 0x00, 0x0E, 0xEE, 0xE0, // ':' - 0x73, 0x9C, 0xE0, 0x00, 0x00, 0x00, 0x1C, 0xE6, 0x73, 0x18, // ';' - 0x00, 0x10, 0x03, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3C, - 0x00, 0x20, // '<' - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, // '=' - 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, 0x3C, 0x01, - 0x00, 0x00, // '>' - 0x3F, 0x1F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x80, 0x70, 0x0E, 0x00, 0x00, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, // '?' - 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0x80, 0xE0, 0x30, 0x01, 0x83, 0x00, 0x0E, 0x38, 0x7E, 0x31, 0x8F, 0xF1, - 0x8C, 0x61, 0x86, 0xE7, 0x0C, 0x36, 0x30, 0x63, 0xB1, 0x83, 0x19, 0xCE, 0x38, 0xC6, 0x3F, 0xFC, 0x30, 0xF1, - 0xC1, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0x00, // '@' - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x66, 0x00, 0x73, 0x80, 0x39, 0xC0, 0x18, 0x60, 0x1C, - 0x38, 0x0E, 0x1C, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0x81, 0xC3, 0x80, 0x71, 0xC0, 0x38, 0xC0, 0x1C, 0xE0, 0x07, - 0x00, // 'A' - 0xFF, 0x83, 0xFF, 0x8E, 0x0F, 0x38, 0x1C, 0xE0, 0x73, 0x81, 0xCE, 0x0E, 0x3F, 0xF0, 0xFF, 0xE3, 0x83, 0xCE, - 0x07, 0x38, 0x0E, 0xE0, 0x3B, 0x81, 0xEE, 0x0F, 0x3F, 0xF8, 0xFF, 0xC0, // 'B' - 0x07, 0xF0, 0x7F, 0xE3, 0xC1, 0x8E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x87, 0xFE, 0x07, 0xF0, // 'C' - 0xFF, 0x80, 0xFF, 0xE0, 0xE0, 0xF0, 0xE0, 0x38, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x38, 0xE0, 0xF0, 0xFF, 0xE0, 0xFF, 0x80, // 'D' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0xFC, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'E' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'F' - 0x03, 0xF8, 0x1F, 0xF8, 0xF8, 0x21, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0xFD, 0xC1, - 0xF9, 0x80, 0x73, 0x80, 0xE7, 0x01, 0xCF, 0x03, 0x8F, 0x07, 0x0F, 0xFE, 0x07, 0xF8, // 'G' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1C, // 'H' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, // 'I' - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x1C, 0xFC, 0xF0, // 'J' - 0xE0, 0x73, 0x83, 0xCE, 0x0E, 0x38, 0x70, 0xE3, 0x83, 0x9C, 0x0E, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xDC, 0x0E, - 0x78, 0x38, 0xE0, 0xE1, 0xC3, 0x87, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x78, // 'K' - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'L' - 0xF0, 0x03, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7C, 0x03, 0xEF, 0xC0, 0xFD, 0xD8, 0x1B, 0xBB, 0x07, 0x77, 0x70, - 0xCE, 0xE6, 0x19, 0xDC, 0xC7, 0x3B, 0x9C, 0xC7, 0x71, 0x98, 0xEE, 0x3F, 0x1D, 0xC7, 0xC3, 0xB8, 0x78, 0x77, - 0x0F, 0x0E, 0xE1, 0xC1, 0xC0, // 'M' - 0xF0, 0x0E, 0xF8, 0x0E, 0xF8, 0x0E, 0xFC, 0x0E, 0xFE, 0x0E, 0xEE, 0x0E, 0xE7, 0x0E, 0xE7, 0x0E, 0xE3, 0x8E, - 0xE1, 0xCE, 0xE1, 0xCE, 0xE0, 0xEE, 0xE0, 0xFE, 0xE0, 0x7E, 0xE0, 0x3E, 0xE0, 0x3E, 0xE0, 0x1E, // 'N' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, // 'O' - 0xFF, 0x87, 0xFF, 0x38, 0x39, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x3C, 0xFF, 0xC7, 0xF8, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x00, // 'P' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, // 'Q' - 0xFF, 0x03, 0xFF, 0x0E, 0x1E, 0x38, 0x38, 0xE0, 0xE3, 0x83, 0x8E, 0x0E, 0x38, 0x78, 0xFF, 0xC3, 0xFC, 0x0E, - 0x38, 0x38, 0xE0, 0xE1, 0xC3, 0x83, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x70, // 'R' - 0x1F, 0x87, 0xFC, 0x70, 0x4E, 0x00, 0xE0, 0x0E, 0x00, 0x78, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0xC1, 0xCF, 0xFC, 0x7F, 0x00, // 'S' - 0xFF, 0xFD, 0xFF, 0xF8, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'T' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1D, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xCE, 0x07, 0x1E, 0x1E, 0x1F, 0xF8, 0x0F, 0xC0, // 'U' - 0xE0, 0x0E, 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x1C, 0x30, 0x18, 0x38, 0x38, 0x38, 0x38, 0x18, 0x30, 0x1C, 0x70, - 0x1C, 0x70, 0x0C, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x06, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, // 'V' - 0xE0, 0x38, 0x0E, 0x60, 0x38, 0x0C, 0x70, 0x7C, 0x1C, 0x70, 0x7C, 0x1C, 0x70, 0x6C, 0x1C, 0x30, 0xEC, 0x18, - 0x38, 0xEE, 0x38, 0x38, 0xCE, 0x38, 0x38, 0xC6, 0x38, 0x19, 0xC7, 0x30, 0x1D, 0xC7, 0x70, 0x1D, 0x83, 0x70, - 0x1D, 0x83, 0x70, 0x0F, 0x83, 0xE0, 0x0F, 0x01, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xC0, // 'W' - 0x70, 0x1C, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0xC0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x38, 0x38, 0x70, 0x1C, 0xE0, 0x1E, // 'X' - 0xE0, 0x1C, 0xE0, 0x71, 0xC0, 0xE1, 0xC3, 0x83, 0x87, 0x03, 0x9C, 0x07, 0x38, 0x07, 0xE0, 0x07, 0x80, 0x0F, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'Y' - 0xFF, 0xF7, 0xFF, 0x80, 0x38, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0x80, 0x1F, 0xFE, 0xFF, 0xF0, // 'Z' - 0xFB, 0xEC, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3E, 0xF8, // '[' - 0xE0, 0x18, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, // '\' - 0xFB, 0xE1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0xBE, 0xF8, // ']' - 0x06, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x60, 0x1D, 0x80, 0x63, 0x03, 0x8C, 0x0C, 0x18, 0x30, 0x61, 0x80, 0xC6, - 0x03, 0x00, // '^' - 0xFF, 0xDF, 0xF8, // '_' - 0xF0, 0xE0, 0xE0, 0xE0, // '`' - 0x1F, 0x83, 0xFC, 0x30, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x7F, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'a' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x77, 0xC3, 0xFF, 0x1E, 0x1C, 0xE0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x83, 0x9E, 0x1C, 0xDF, 0xC6, 0x7C, 0x00, // 'b' - 0x0F, 0xC7, 0xF9, 0xE0, 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE1, 0x1F, 0xE1, 0xF8, // 'c' - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x0F, 0xB8, 0xFF, 0xCE, 0x1E, 0x70, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x39, 0xC1, 0xCE, 0x1E, 0x3F, 0xF0, 0xF9, 0x80, // 'd' - 0x0F, 0x81, 0xFE, 0x1C, 0x38, 0xE0, 0xEE, 0x07, 0x7F, 0xFB, 0xFF, 0xDC, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x08, - 0x7F, 0xC0, 0xFC, 0x00, // 'e' - 0x07, 0xC3, 0xF0, 0x70, 0x0C, 0x01, 0x80, 0xFF, 0x3F, 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, - 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, // 'f' - 0x0F, 0xF8, 0xFF, 0xE3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x83, 0x8E, 0x0F, 0xF0, 0x1F, 0x80, 0xC0, 0x03, - 0x00, 0x0F, 0xF8, 0x3F, 0xF1, 0xC1, 0xCE, 0x03, 0x38, 0x0C, 0xE0, 0x71, 0xFF, 0x83, 0xF8, 0x00, // 'g' - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0xF8, 0xFF, 0xCF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, // 'h' - 0xEE, 0xE0, 0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'i' - 0x1C, 0x38, 0x70, 0x00, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, - 0xC3, 0xBE, 0x78, // 'j' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x73, 0x87, 0x1C, 0x70, 0xE7, 0x07, 0x70, 0x3F, 0x01, - 0xFC, 0x0F, 0xF0, 0x73, 0x83, 0x8E, 0x1C, 0x38, 0xE0, 0xE7, 0x07, 0x80, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xCF, 0x8F, 0x8D, 0xFD, 0xFC, 0xF1, 0xF0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, - 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xE0, // 'm' - 0xCF, 0x8D, 0xFC, 0xF0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xE0, // 'n' - 0x0F, 0x80, 0xFF, 0x87, 0x8F, 0x1C, 0x1C, 0xE0, 0x3B, 0x80, 0xEE, 0x03, 0xB8, 0x0E, 0xE0, 0x39, 0xC1, 0xC7, - 0x8F, 0x0F, 0xF8, 0x0F, 0x80, // 'o' - 0xCF, 0x86, 0xFE, 0x3C, 0x39, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x07, 0x3C, 0x39, - 0xFF, 0x8E, 0xF8, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, // 'p' - 0x1F, 0x31, 0xFF, 0x9C, 0x3C, 0xE0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x73, 0x83, 0x9C, 0x3C, - 0x7F, 0xE1, 0xF7, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, // 'q' - 0xCF, 0x6F, 0x3F, 0x9E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, // 'r' - 0x3F, 0x8F, 0xF3, 0x82, 0x70, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x3C, 0x01, 0xC0, 0x3B, 0x07, 0x7F, 0xC7, 0xF0, // 's' - 0x18, 0x0C, 0x0E, 0x0F, 0xEF, 0xF1, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0x7C, 0x1E, // 't' - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'u' - 0xE0, 0x39, 0x80, 0xC7, 0x07, 0x1C, 0x1C, 0x30, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xD8, 0x03, 0xE0, 0x07, 0x00, // 'v' - 0xE0, 0xF0, 0x73, 0x07, 0x83, 0x1C, 0x3C, 0x38, 0xE3, 0xF1, 0xC3, 0x1B, 0x8C, 0x1C, 0xCC, 0xE0, 0xE6, 0x67, - 0x07, 0x73, 0xB8, 0x1B, 0x0D, 0x80, 0xD8, 0x7C, 0x07, 0xC3, 0xE0, 0x1C, 0x1E, 0x00, 0xE0, 0x70, 0x00, // 'w' - 0x70, 0x70, 0xE3, 0x83, 0x8E, 0x07, 0x70, 0x0D, 0x80, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x1D, 0xC0, 0x77, 0x03, - 0x8E, 0x1C, 0x1C, 0x70, 0x70, // 'x' - 0xE0, 0x39, 0xC1, 0xC7, 0x07, 0x1C, 0x1C, 0x38, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xF8, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x00, // 'y' - 0xFF, 0xBF, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0xFE, 0xFF, 0x80, // 'z' - 0x0E, 0x1E, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0xF0, 0xE0, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x1C, 0x1E, 0x06, // '{' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // '|' - 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x1E, 0x0E, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x70, 0xF0, 0xE0 // '}' -}; -const GFXglyph Open_Sans_SemiBold_24Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 7, 0, 0}, // ' ' - {1, 4, 17, 8, 2, -17}, // '!' - {10, 9, 6, 11, 1, -17}, // '"' - {17, 15, 17, 17, 1, -17}, // '#' - {49, 13, 19, 15, 1, -18}, // '$' - {80, 20, 17, 22, 1, -17}, // '%' - {123, 18, 17, 19, 1, -17}, // '&' - {162, 3, 6, 7, 2, -17}, // ''' - {165, 7, 21, 9, 1, -17}, // '(' - {184, 7, 21, 9, 1, -17}, // ')' - {203, 12, 11, 14, 1, -18}, // '*' - {220, 13, 12, 15, 1, -15}, // '+' - {240, 5, 6, 7, 1, -3}, // ',' - {244, 7, 2, 9, 1, -8}, // '-' - {246, 4, 4, 8, 2, -4}, // '.' - {248, 10, 17, 10, 0, -17}, // '/' - {270, 13, 17, 15, 1, -17}, // '0' - {298, 8, 17, 15, 2, -17}, // '1' - {315, 13, 17, 15, 1, -17}, // '2' - {343, 13, 17, 15, 1, -17}, // '3' - {371, 15, 17, 15, 0, -17}, // '4' - {403, 13, 17, 15, 1, -17}, // '5' - {431, 13, 17, 15, 1, -17}, // '6' - {459, 13, 17, 15, 1, -17}, // '7' - {487, 13, 17, 15, 1, -17}, // '8' - {515, 13, 17, 15, 1, -17}, // '9' - {543, 4, 13, 8, 2, -13}, // ':' - {550, 5, 16, 8, 1, -13}, // ';' - {560, 13, 12, 15, 1, -15}, // '<' - {580, 13, 7, 15, 1, -12}, // '=' - {592, 13, 12, 15, 1, -15}, // '>' - {612, 11, 17, 12, 0, -17}, // '?' - {636, 21, 19, 23, 1, -17}, // '@' - {686, 17, 17, 17, 0, -17}, // 'A' - {723, 14, 17, 17, 2, -17}, // 'B' - {753, 14, 17, 16, 1, -17}, // 'C' - {783, 16, 17, 19, 2, -17}, // 'D' - {817, 11, 17, 14, 2, -17}, // 'E' - {841, 11, 17, 14, 2, -17}, // 'F' - {865, 15, 17, 18, 1, -17}, // 'G' - {897, 15, 17, 19, 2, -17}, // 'H' - {929, 4, 17, 8, 2, -17}, // 'I' - {938, 8, 22, 8, -2, -17}, // 'J' - {960, 14, 17, 16, 2, -17}, // 'K' - {990, 11, 17, 14, 2, -17}, // 'L' - {1014, 19, 17, 23, 2, -17}, // 'M' - {1055, 16, 17, 20, 2, -17}, // 'N' - {1089, 18, 17, 20, 1, -17}, // 'O' - {1128, 13, 17, 16, 2, -17}, // 'P' - {1156, 18, 21, 20, 1, -17}, // 'Q' - {1204, 14, 17, 16, 2, -17}, // 'R' - {1234, 12, 17, 14, 1, -17}, // 'S' - {1260, 15, 17, 15, 0, -17}, // 'T' - {1292, 15, 17, 19, 2, -17}, // 'U' - {1324, 16, 17, 16, 0, -17}, // 'V' - {1358, 24, 17, 24, 0, -17}, // 'W' - {1409, 16, 17, 16, 0, -17}, // 'X' - {1443, 15, 17, 15, 0, -17}, // 'Y' - {1475, 13, 17, 15, 1, -17}, // 'Z' - {1503, 6, 21, 9, 2, -17}, // '[' - {1519, 10, 17, 10, 0, -17}, // '\' - {1541, 6, 21, 9, 1, -17}, // ']' - {1557, 14, 11, 14, 0, -17}, // '^' - {1577, 11, 2, 11, 0, 2}, // '_' - {1580, 7, 4, 15, 4, -19}, // '`' - {1584, 12, 13, 15, 1, -13}, // 'a' - {1604, 13, 18, 16, 2, -18}, // 'b' - {1634, 11, 13, 13, 1, -13}, // 'c' - {1652, 13, 18, 16, 1, -18}, // 'd' - {1682, 13, 13, 15, 1, -13}, // 'e' - {1704, 11, 18, 10, 0, -18}, // 'f' - {1729, 14, 19, 14, 0, -13}, // 'g' - {1763, 12, 18, 16, 2, -18}, // 'h' - {1790, 4, 18, 8, 2, -18}, // 'i' - {1799, 7, 24, 8, -1, -18}, // 'j' - {1820, 13, 18, 15, 2, -18}, // 'k' - {1850, 4, 18, 8, 2, -18}, // 'l' - {1859, 20, 13, 24, 2, -13}, // 'm' - {1892, 12, 13, 16, 2, -13}, // 'n' - {1912, 14, 13, 16, 1, -13}, // 'o' - {1935, 13, 19, 16, 2, -13}, // 'p' - {1966, 13, 19, 16, 1, -13}, // 'q' - {1997, 9, 13, 11, 2, -13}, // 'r' - {2012, 11, 13, 13, 1, -13}, // 's' - {2030, 9, 16, 10, 0, -16}, // 't' - {2048, 12, 13, 16, 2, -13}, // 'u' - {2068, 14, 13, 14, 0, -13}, // 'v' - {2091, 21, 13, 21, 0, -13}, // 'w' - {2126, 14, 13, 14, 0, -13}, // 'x' - {2149, 14, 19, 14, 0, -13}, // 'y' - {2183, 10, 13, 12, 1, -13}, // 'z' - {2200, 8, 21, 10, 1, -17}, // '{' - {2221, 4, 24, 14, 5, -18}, // '|' - {2233, 8, 21, 10, 1, -17} // '}' -}; -const GFXfont Open_Sans_SemiBold_24 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_24Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_24Glyphs, 0x20, 0x7E, 33}; \ No newline at end of file diff --git a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h b/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h deleted file mode 100644 index 3da740530..000000000 --- a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h +++ /dev/null @@ -1,363 +0,0 @@ -// 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 Open_Sans_SemiBold_32Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFB, 0xEF, 0xBC, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x00, 0x07, 0x3E, 0xFB, 0xE7, 0x00, // '!' - 0xF3, 0xDE, 0x7B, 0xCF, 0x70, 0xEE, 0x1C, 0xC3, 0x18, 0x63, 0x0C, // '"' - 0x01, 0xC3, 0x00, 0x18, 0x70, 0x03, 0x87, 0x00, 0x38, 0x70, 0x03, 0x87, 0x00, 0x38, 0x60, 0x03, 0x86, 0x07, - 0xFF, 0xFE, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x07, 0x0E, 0x00, 0x70, 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC7, - 0x00, 0x18, 0x70, 0x00, // '#' - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x7F, 0x03, 0xFF, 0xCF, 0xFF, 0x3E, 0xC6, 0x79, 0x80, 0xF3, 0x01, 0xE6, - 0x03, 0xEC, 0x03, 0xF8, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x03, 0x3C, 0x06, 0x38, 0x0C, 0x70, - 0x19, 0xEE, 0x37, 0xDF, 0xFF, 0x3F, 0xFC, 0x1F, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, // '$' - 0x1F, 0x00, 0x38, 0x07, 0xF0, 0x0E, 0x01, 0xFF, 0x01, 0xC0, 0x38, 0xE0, 0x70, 0x07, 0x1C, 0x1C, 0x01, 0xC3, - 0x83, 0x80, 0x38, 0x38, 0xE0, 0x07, 0x07, 0x1C, 0x00, 0xE1, 0xC7, 0x00, 0x0E, 0x38, 0xE7, 0xC1, 0xC7, 0x39, - 0xFC, 0x3F, 0xEF, 0x7F, 0xC3, 0xF9, 0xCE, 0x38, 0x3E, 0x71, 0xC7, 0x00, 0x0E, 0x78, 0x70, 0x03, 0x8E, 0x0E, - 0x00, 0x71, 0xC1, 0xC0, 0x1C, 0x1C, 0x38, 0x03, 0x83, 0x8E, 0x00, 0xE0, 0x71, 0xC0, 0x38, 0x0F, 0xF8, 0x07, - 0x00, 0xFE, 0x01, 0xC0, 0x0F, 0x80, // '%' - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xE0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xC0, 0x07, 0x07, 0x80, 0x0E, - 0x0F, 0x00, 0x1E, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x03, 0xC7, 0xFE, - 0x07, 0x1F, 0x3E, 0x1E, 0x3C, 0x3E, 0x3C, 0x78, 0x3E, 0xF0, 0xE0, 0x3F, 0xE1, 0xC0, 0x3F, 0x83, 0xC0, 0x3E, - 0x07, 0xC1, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0x9E, 0x03, 0xF8, 0x1E, 0x00, // '&' - 0xF7, 0xBD, 0xCE, 0x31, 0x8C, // ''' - 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x83, 0xC0, 0xE0, 0x78, 0x1C, 0x0E, 0x03, 0x81, 0xE0, // '(' - 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x00, // ')' - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x18, 0x03, 0xCC, 0xF3, 0xFF, 0xFD, 0xFF, 0xFE, 0x03, - 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xCE, 0x01, 0xE7, 0x80, 0xE1, 0xC0, 0x10, 0xC0, // '*' - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, - 0xFF, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, // '+' - 0x3C, 0xF1, 0xE3, 0xC7, 0x0E, 0x38, 0x70, // ',' - 0xFF, 0x7F, 0xBF, 0xC0, // '-' - 0x73, 0xEF, 0xBE, 0x70, // '.' - 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x03, - 0xC0, 0x00, // '/' - 0x07, 0xE0, 0x0F, 0xF8, 0x0F, 0xFE, 0x07, 0x87, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x1C, 0xF0, - 0x0E, 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x38, 0xE0, 0x1C, 0x70, 0x1E, - 0x3C, 0x0F, 0x1E, 0x07, 0x87, 0x87, 0x81, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '0' - 0x03, 0xC0, 0xF8, 0x3F, 0x0F, 0xE7, 0xFD, 0xF7, 0x9C, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, // '1' - 0x07, 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x0F, 0x07, 0x82, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // '2' - 0x0F, 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0x78, 0x3C, 0x20, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF8, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0xE0, 0x3E, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, // '3' - 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0E, - 0x38, 0x0F, 0x1C, 0x07, 0x0E, 0x07, 0x07, 0x07, 0x83, 0x83, 0x81, 0xC3, 0x80, 0xE1, 0xFF, 0xFE, 0xFF, 0xFF, - 0x7F, 0xFF, 0x80, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, // '4' - 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xFF, - 0x83, 0xFF, 0xC7, 0xFF, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xF6, - 0x07, 0xCF, 0xFF, 0x9F, 0xFE, 0x0F, 0xE0, 0x00, // '5' - 0x01, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x71, - 0xF0, 0x3B, 0xFE, 0x1F, 0xFF, 0x1F, 0x87, 0xCF, 0x81, 0xE7, 0x80, 0x7B, 0xC0, 0x3C, 0xE0, 0x1E, 0x70, 0x0F, - 0x3C, 0x07, 0x9E, 0x07, 0x87, 0x87, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '6' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, // '7' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xC7, 0x81, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x70, 0x38, 0x3E, - 0x7C, 0x0F, 0xF8, 0x01, 0xF8, 0x03, 0xFE, 0x03, 0xEF, 0xC3, 0xC1, 0xF1, 0xC0, 0x79, 0xE0, 0x1C, 0xF0, 0x0F, - 0x78, 0x07, 0x9C, 0x03, 0x8F, 0x07, 0xC7, 0xFF, 0xC0, 0xFF, 0xC0, 0x1F, 0x80, // '8' - 0x07, 0xC0, 0x0F, 0xF8, 0x0F, 0xFE, 0x0F, 0x87, 0x87, 0x81, 0xE3, 0x80, 0xF3, 0xC0, 0x39, 0xE0, 0x1C, 0xF0, - 0x0F, 0x78, 0x07, 0x9E, 0x07, 0xCF, 0x87, 0xE3, 0xFF, 0xE1, 0xFF, 0x70, 0x3E, 0x38, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x1F, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, 0x00, // '9' - 0x73, 0xEF, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, 0xBE, 0x70, // ':' - 0x38, 0xF9, 0xF3, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x3C, 0x70, 0xE1, 0xC7, 0x0E, - 0x00, // ';' - 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x06, // '<' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0xFF, 0xFC, // '=' - 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, // '>' - 0x1F, 0xC0, 0xFF, 0xE1, 0xFF, 0xE3, 0x83, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xC0, 0x00, // '?' - 0x00, 0x7F, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xBF, 0x80, 0x3C, 0x00, 0xF0, 0x1E, 0x00, 0x1E, 0x0F, 0x00, - 0x03, 0xC3, 0x83, 0xF8, 0x71, 0xC1, 0xFF, 0x0E, 0x70, 0xFB, 0xC3, 0xB8, 0x70, 0x70, 0xEE, 0x3C, 0x1C, 0x3B, - 0x8E, 0x07, 0x0E, 0xE3, 0x81, 0xC3, 0xB8, 0xE0, 0x70, 0xEE, 0x38, 0x1C, 0x3B, 0x8E, 0x07, 0x0E, 0xE3, 0xC3, - 0xC7, 0x38, 0x7B, 0xFB, 0xCE, 0x0F, 0xE7, 0xE1, 0xC1, 0xF0, 0xF0, 0x78, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, - 0xE0, 0x02, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, // '@' - 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x77, 0x00, 0x01, 0xDC, 0x00, 0x0F, 0x78, 0x00, 0x3D, - 0xE0, 0x00, 0xE3, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x1C, 0x00, 0x70, 0x70, 0x03, 0xC1, 0xE0, 0x0E, 0x03, 0x80, - 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0x80, 0x0E, 0x1E, 0x00, - 0x3C, 0x78, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x80, // 'A' - 0xFF, 0xE0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E, 0x07, 0xCF, 0x01, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, - 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xE7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, - 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x07, 0xEF, 0xFF, 0xE7, 0xFF, 0xE3, 0xFF, 0xC0, // 'B' - 0x01, 0xFC, 0x01, 0xFF, 0xE1, 0xFF, 0xF0, 0xFC, 0x1C, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x0C, 0x1F, 0xFF, 0x03, 0xFF, 0xC0, 0x3F, 0xE0, // 'C' - 0xFF, 0xE0, 0x1F, 0xFF, 0x03, 0xFF, 0xF8, 0x78, 0x1F, 0x8F, 0x00, 0xF1, 0xE0, 0x0F, 0x3C, 0x01, 0xE7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xC0, 0x7C, 0x78, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, // 'D' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0xCF, - 0xFF, 0x3F, 0xFC, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'E' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0xFF, 0x3F, 0xFC, 0xFF, 0xF3, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x00, // 'F' - 0x00, 0xFF, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xC1, 0xF8, 0x18, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, 0x3F, 0xEF, 0x03, 0xFE, 0xF0, - 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x3C, 0x01, 0xE3, 0xF0, 0x1E, 0x1F, 0xFF, 0xE0, 0xFF, - 0xFE, 0x01, 0xFF, 0x00, // 'G' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, - 0xF0, // 'H' - 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xC0, // 'I' - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, - 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x03, 0xCF, 0xF3, 0xF8, 0xF8, - 0x00, // 'J' - 0xF0, 0x0F, 0x3C, 0x07, 0xCF, 0x03, 0xE3, 0xC0, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x1E, 0x03, 0xCF, 0x80, - 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3E, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF8, // 'K' - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'L' - 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x0F, 0xDF, 0xC0, 0x0F, 0xEE, 0xE0, 0x07, 0x77, 0x70, 0x03, - 0xFB, 0xBC, 0x03, 0xBD, 0xCE, 0x01, 0xDE, 0xE7, 0x00, 0xEF, 0x73, 0xC0, 0xE7, 0xB8, 0xE0, 0x73, 0xDC, 0x70, - 0x79, 0xEE, 0x3C, 0x38, 0xF7, 0x0E, 0x1C, 0x7B, 0x87, 0x1E, 0x3D, 0xC3, 0xCE, 0x1E, 0xE0, 0xE7, 0x0F, 0x70, - 0x7F, 0x07, 0xB8, 0x1F, 0x83, 0xDC, 0x0F, 0xC1, 0xEE, 0x07, 0xC0, 0xF7, 0x01, 0xE0, 0x7B, 0x80, 0xF0, 0x3C, // 'M' - 0xF8, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xEF, 0xE0, 0x0E, 0xFE, 0x00, 0xEE, 0xF0, 0x0E, 0xEF, 0x80, 0xEE, - 0x78, 0x0E, 0xE3, 0xC0, 0xEE, 0x3C, 0x0E, 0xE1, 0xE0, 0xEE, 0x1F, 0x0E, 0xE0, 0xF0, 0xEE, 0x07, 0x8E, 0xE0, - 0x78, 0xEE, 0x03, 0xCE, 0xE0, 0x3E, 0xEE, 0x01, 0xEE, 0xE0, 0x0F, 0xEE, 0x00, 0xFE, 0xE0, 0x07, 0xEE, 0x00, - 0x7E, 0xE0, 0x03, 0xE0, // 'N' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, // 'O' - 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xF0, 0x7E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x7C, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, // 'P' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, // 'Q' - 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x3C, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0xC3, 0xFF, 0xE0, 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF0, // 'R' - 0x0F, 0xE0, 0x3F, 0xFC, 0x7F, 0xFC, 0xF8, 0x18, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x3C, 0xE0, 0x7C, 0xFF, 0xF8, 0xFF, 0xF0, 0x3F, 0xC0, // 'S' - 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, // 'T' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x79, 0xE0, 0x1E, 0x3E, 0x07, 0xC3, 0xFF, 0xF0, 0x3F, 0xFC, 0x01, 0xFE, - 0x00, // 'U' - 0xF0, 0x00, 0xF3, 0x80, 0x07, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC3, 0x80, 0x1C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, - 0x03, 0x80, 0x70, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x03, 0x81, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x03, 0x87, - 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x03, 0x9C, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, // 'V' - 0xF0, 0x07, 0x80, 0x3C, 0xE0, 0x0F, 0x00, 0x71, 0xE0, 0x3E, 0x01, 0xE3, 0xC0, 0x7E, 0x03, 0xC7, 0x80, 0xFC, - 0x07, 0x87, 0x01, 0xF8, 0x0E, 0x0F, 0x07, 0xF8, 0x3C, 0x1E, 0x0E, 0x70, 0x78, 0x3C, 0x1C, 0xE0, 0xF0, 0x38, - 0x79, 0xC1, 0xC0, 0x78, 0xF3, 0xC7, 0x80, 0xF1, 0xC3, 0x8F, 0x01, 0xE3, 0x87, 0x1E, 0x01, 0xCF, 0x0F, 0x38, - 0x03, 0x9C, 0x1E, 0x70, 0x07, 0xB8, 0x1D, 0xE0, 0x0F, 0x70, 0x3B, 0xC0, 0x0E, 0xE0, 0x77, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0xF0, 0x03, 0xC0, 0x00, // 'W' - 0x78, 0x01, 0xE1, 0xE0, 0x1E, 0x0F, 0x00, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x07, 0x87, 0x80, 0x1E, 0x78, - 0x00, 0xF3, 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, - 0x00, 0x1E, 0xF0, 0x00, 0xF3, 0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x81, 0xE0, 0x78, 0x0F, 0x83, 0xC0, - 0x3C, 0x3C, 0x00, 0xF3, 0xC0, 0x07, 0xC0, // 'X' - 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x03, 0xC3, 0xC0, 0x78, 0x3C, 0x07, 0x81, 0xE0, 0xF0, 0x1E, 0x0E, 0x00, - 0xF1, 0xE0, 0x07, 0x1C, 0x00, 0x7B, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, // 'Y' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // 'Z' - 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, // '[' - 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, - 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x70, - 0x03, 0xC0, // '\' - 0xFE, 0xFE, 0xFE, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xFE, 0xFE, 0xFE, // ']' - 0x01, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0x9C, 0x00, 0xE7, 0x00, 0x38, 0xE0, - 0x1C, 0x38, 0x07, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x38, 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x70, // '^' - 0xFF, 0xFD, 0xFF, 0xF8, // '_' - 0xF0, 0x78, 0x3C, 0x1C, 0x0E, // '`' - 0x07, 0xF0, 0x3F, 0xFC, 0x1F, 0xFE, 0x1C, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x07, 0xFE, 0x3F, 0xFE, - 0x7C, 0x0E, 0x78, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x1F, 0x86, // 'a' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, // 'b' - 0x07, 0xF0, 0x7F, 0xE7, 0xFF, 0x1F, 0x04, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xF0, 0x67, 0xFF, 0x8F, 0xFE, 0x0F, 0xE0, // 'c' - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x0F, 0x8E, 0x3F, 0xEE, - 0x7F, 0xFE, 0x7C, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'd' - 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xCF, 0x03, 0xDE, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, - 0xFB, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x81, 0x9F, 0xFF, 0x0F, 0xFE, 0x07, 0xF0, // 'e' - 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xFC, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, // 'f' - 0x07, 0xFF, 0x83, 0xFF, 0xE1, 0xE3, 0xF8, 0xF0, 0x78, 0x38, 0x0E, 0x0E, 0x03, 0x83, 0x80, 0xE0, 0xE0, 0x38, - 0x3C, 0x1E, 0x07, 0x8F, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, - 0x3F, 0xFF, 0x9E, 0x01, 0xE7, 0x00, 0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0x9E, 0x03, 0xE7, 0xFF, 0xF0, 0xFF, 0xF8, - 0x0F, 0xF0, 0x00, // 'g' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'h' - 0x73, 0xCF, 0x9C, 0x00, 0x00, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, // 'i' - 0x07, 0x03, 0xC0, 0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, - 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x3C, 0x0F, - 0x3F, 0xCF, 0xE3, 0xF0, // 'j' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, - 0xE0, 0xF0, 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xF3, 0xC0, - 0xE1, 0xE0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE0, 0x78, 0xE0, 0x7C, 0xE0, 0x3C, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xE3, 0xE0, 0x7C, 0x3B, 0xFE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFB, 0xE1, 0xFC, 0x1E, 0xF0, 0x3E, 0x07, 0xBC, 0x07, - 0x80, 0xEF, 0x01, 0xE0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, - 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, - 0x03, 0x80, // 'm' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'n' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xCF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xC0, 0x0E, 0xE0, - 0x07, 0x70, 0x03, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF3, 0xE1, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xE0, - 0x00, // 'o' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xE0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x7C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, // 'p' - 0x0F, 0x8E, 0x3F, 0xEE, 0x7F, 0xFE, 0x78, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, // 'q' - 0xE3, 0xDC, 0xFB, 0xBF, 0x7F, 0xAF, 0x81, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'r' - 0x1F, 0xC1, 0xFF, 0xCF, 0xFF, 0x3C, 0x18, 0xE0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x1F, 0xC0, - 0x1F, 0x00, 0x1E, 0x00, 0x7B, 0x03, 0xCF, 0xFF, 0x3F, 0xF8, 0x7F, 0x80, // 's' - 0x1C, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x7F, 0xEF, 0xFE, 0xFF, 0xE3, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1F, 0xE1, 0xFE, 0x07, 0xE0, // 't' - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'u' - 0xF0, 0x07, 0x9C, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x3D, 0xE0, 0x07, 0x70, 0x01, 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, // 'v' - 0xF0, 0x1E, 0x03, 0xCE, 0x03, 0xC0, 0x71, 0xE0, 0xFC, 0x1E, 0x3C, 0x1F, 0x83, 0xC3, 0x83, 0xF0, 0x70, 0x70, - 0xE7, 0x1E, 0x0F, 0x1C, 0xE3, 0xC1, 0xE3, 0x9C, 0x78, 0x1C, 0x73, 0x8E, 0x03, 0x9C, 0x3B, 0xC0, 0x7B, 0x87, - 0x78, 0x07, 0x70, 0xEE, 0x00, 0xEC, 0x1D, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0x3E, 0x07, 0xC0, - 0x07, 0x80, 0x78, 0x00, // 'w' - 0x78, 0x07, 0x87, 0x81, 0xE0, 0xF8, 0x7C, 0x0F, 0x0F, 0x00, 0xF3, 0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x3C, 0x3C, 0x0F, 0x03, 0xC3, - 0xE0, 0x7C, 0x78, 0x07, 0x80, // 'x' - 0xF0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x1D, 0xE0, 0x07, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, - 0x7C, 0x00, 0x00, // 'y' - 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // 'z' - 0x01, 0xC0, 0xF8, 0x3F, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x03, 0xE1, - 0xF8, 0x3C, 0x07, 0xE0, 0x3E, 0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF8, - 0x1F, 0x00, 0xE0, // '{' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, // '|' - 0xE0, 0x1F, 0x03, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF0, - 0x1F, 0x80, 0x70, 0x7E, 0x1F, 0x03, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x1F, 0x83, - 0xE0, 0x70, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_32Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 9, 0, 0}, // ' ' - {1, 6, 23, 10, 2, -23}, // '!' - {19, 11, 8, 15, 2, -23}, // '"' - {30, 20, 23, 22, 1, -23}, // '#' - {88, 15, 27, 19, 2, -25}, // '$' - {139, 27, 23, 29, 1, -23}, // '%' - {217, 23, 23, 25, 2, -23}, // '&' - {284, 5, 8, 9, 2, -23}, // ''' - {289, 9, 28, 11, 1, -23}, // '(' - {321, 9, 28, 11, 1, -23}, // ')' - {353, 17, 15, 19, 1, -24}, // '*' - {385, 17, 15, 19, 1, -19}, // '+' - {417, 7, 8, 10, 1, -4}, // ',' - {424, 9, 3, 11, 1, -10}, // '-' - {428, 6, 5, 10, 2, -5}, // '.' - {432, 13, 23, 13, 0, -23}, // '/' - {470, 17, 23, 19, 1, -23}, // '0' - {519, 11, 23, 19, 2, -23}, // '1' - {551, 17, 23, 19, 1, -23}, // '2' - {600, 16, 23, 19, 1, -23}, // '3' - {646, 17, 23, 19, 1, -23}, // '4' - {695, 15, 23, 19, 2, -23}, // '5' - {739, 17, 23, 19, 1, -23}, // '6' - {788, 17, 23, 19, 1, -23}, // '7' - {837, 17, 23, 19, 1, -23}, // '8' - {886, 17, 23, 19, 1, -23}, // '9' - {935, 6, 17, 10, 2, -17}, // ':' - {948, 7, 21, 10, 1, -17}, // ';' - {967, 17, 16, 19, 1, -20}, // '<' - {1001, 15, 9, 19, 2, -16}, // '=' - {1018, 17, 16, 19, 1, -20}, // '>' - {1052, 15, 23, 16, 0, -23}, // '?' - {1096, 26, 26, 30, 2, -23}, // '@' - {1181, 22, 23, 22, 0, -23}, // 'A' - {1245, 17, 23, 22, 3, -23}, // 'B' - {1294, 18, 23, 21, 2, -23}, // 'C' - {1346, 19, 23, 24, 3, -23}, // 'D' - {1401, 14, 23, 19, 3, -23}, // 'E' - {1442, 14, 23, 18, 3, -23}, // 'F' - {1483, 20, 23, 24, 2, -23}, // 'G' - {1541, 19, 23, 25, 3, -23}, // 'H' - {1596, 5, 23, 11, 3, -23}, // 'I' - {1611, 10, 29, 11, -2, -23}, // 'J' - {1648, 18, 23, 21, 3, -23}, // 'K' - {1700, 14, 23, 18, 3, -23}, // 'L' - {1741, 25, 23, 31, 3, -23}, // 'M' - {1813, 20, 23, 26, 3, -23}, // 'N' - {1871, 22, 23, 26, 2, -23}, // 'O' - {1935, 16, 23, 21, 3, -23}, // 'P' - {1981, 22, 28, 26, 2, -23}, // 'Q' - {2058, 18, 23, 21, 3, -23}, // 'R' - {2110, 16, 23, 19, 2, -23}, // 'S' - {2156, 19, 23, 19, 0, -23}, // 'T' - {2211, 19, 23, 25, 3, -23}, // 'U' - {2266, 21, 23, 21, 0, -23}, // 'V' - {2327, 31, 23, 31, 0, -23}, // 'W' - {2417, 21, 23, 21, 0, -23}, // 'X' - {2478, 20, 23, 20, 0, -23}, // 'Y' - {2536, 17, 23, 19, 1, -23}, // 'Z' - {2585, 8, 28, 12, 3, -23}, // '[' - {2613, 13, 23, 13, 0, -23}, // '\' - {2651, 8, 28, 12, 1, -23}, // ']' - {2679, 18, 15, 18, 0, -23}, // '^' - {2713, 15, 2, 15, 0, 3}, // '_' - {2717, 8, 5, 20, 6, -24}, // '`' - {2722, 16, 17, 20, 1, -17}, // 'a' - {2756, 16, 24, 21, 3, -24}, // 'b' - {2804, 14, 17, 17, 2, -17}, // 'c' - {2834, 16, 24, 21, 2, -24}, // 'd' - {2882, 15, 17, 19, 2, -17}, // 'e' - {2914, 13, 24, 13, 1, -24}, // 'f' - {2953, 18, 25, 19, 0, -17}, // 'g' - {3010, 16, 24, 21, 3, -24}, // 'h' - {3058, 6, 24, 10, 2, -24}, // 'i' - {3076, 10, 32, 10, -2, -24}, // 'j' - {3116, 16, 24, 19, 3, -24}, // 'k' - {3164, 4, 24, 10, 3, -24}, // 'l' - {3176, 26, 17, 32, 3, -17}, // 'm' - {3232, 16, 17, 21, 3, -17}, // 'n' - {3266, 17, 17, 21, 2, -17}, // 'o' - {3303, 16, 25, 21, 3, -17}, // 'p' - {3353, 16, 25, 21, 2, -17}, // 'q' - {3403, 11, 17, 15, 3, -17}, // 'r' - {3427, 14, 17, 17, 2, -17}, // 's' - {3457, 12, 21, 14, 1, -21}, // 't' - {3489, 16, 17, 21, 2, -17}, // 'u' - {3523, 18, 17, 18, 0, -17}, // 'v' - {3562, 27, 17, 27, 0, -17}, // 'w' - {3620, 19, 17, 19, 0, -17}, // 'x' - {3661, 18, 25, 18, 0, -17}, // 'y' - {3718, 14, 17, 16, 1, -17}, // 'z' - {3748, 11, 28, 13, 1, -23}, // '{' - {3787, 3, 32, 19, 8, -24}, // '|' - {3799, 11, 28, 13, 1, -23} // '}' -}; -const GFXfont Open_Sans_SemiBold_32 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_32Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_32Glyphs, 0x20, 0x7E, 45}; \ No newline at end of file diff --git a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h b/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h deleted file mode 100644 index 93d1d062a..000000000 --- a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h +++ /dev/null @@ -1,798 +0,0 @@ -// 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 Open_Sans_SemiBold_56Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x3F, 0x9F, 0xCF, 0xF7, 0xFB, 0xF9, 0xFC, 0x7C, 0x00, // '!' - 0xFC, 0x3F, 0x7E, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0xF8, - 0x1F, 0x7C, 0x0F, 0xBE, 0x07, 0xDF, 0x03, 0xE7, 0x81, 0xE3, 0xC0, 0xF0, // '"' - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x1F, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x3E, 0x00, - 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0xF0, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xC0, 0x00, // '#' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0x78, - 0xFC, 0x3F, 0x8F, 0x01, 0x8F, 0xE1, 0xE0, 0x01, 0xFC, 0x3C, 0x00, 0x3F, 0x87, 0x80, 0x07, 0xF0, 0xF0, 0x00, - 0x7F, 0x1E, 0x00, 0x0F, 0xF3, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x1F, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0x3C, 0x3F, 0x80, 0x07, 0x83, 0xF0, 0x00, 0xF0, 0x7E, - 0x80, 0x1E, 0x1F, 0xDC, 0x03, 0xC7, 0xFB, 0xF8, 0x7B, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, // '$' - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x0F, 0xC0, 0x07, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0x7E, 0x00, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x7E, 0x01, - 0xF0, 0x00, 0x3F, 0x03, 0xF0, 0x1F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0xF8, 0x00, 0x0F, 0xC0, 0xFC, 0x0F, 0x80, - 0x00, 0x7E, 0x07, 0xE0, 0xFC, 0x00, 0x03, 0xF0, 0x3F, 0x07, 0xC0, 0x00, 0x1F, 0x81, 0xF8, 0x7E, 0x00, 0x00, - 0xFC, 0x0F, 0xC3, 0xE0, 0xFC, 0x03, 0xE0, 0x7C, 0x3F, 0x1F, 0xF8, 0x1F, 0x03, 0xE1, 0xF1, 0xFF, 0xE0, 0xF8, - 0x1F, 0x1F, 0x1F, 0xFF, 0x07, 0xE1, 0xF8, 0xF8, 0xFF, 0xFC, 0x1F, 0xFF, 0x8F, 0x8F, 0xC3, 0xE0, 0xFF, 0xFC, - 0xFC, 0x7C, 0x1F, 0x83, 0xFF, 0xC7, 0xC3, 0xE0, 0x7C, 0x0F, 0xFC, 0x7E, 0x3F, 0x03, 0xE0, 0x1F, 0x83, 0xE1, - 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0xFC, 0x00, 0x01, 0xF0, 0x7E, 0x07, 0xE0, 0x00, 0x1F, 0x83, 0xF0, - 0x3F, 0x00, 0x00, 0xF8, 0x1F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x0F, 0xC0, 0x00, 0x7C, 0x07, 0xE0, 0x7E, - 0x00, 0x07, 0xC0, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, - 0x3F, 0x00, 0x3E, 0x0F, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, // '%' - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x7F, 0x00, - 0x00, 0x03, 0xFB, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x01, 0xFF, 0xF8, 0x00, 0xFC, 0x07, - 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xE7, 0xF8, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x0F, 0xE0, 0xFE, 0x07, 0xF8, 0x3F, - 0x83, 0xF8, 0x07, 0xF8, 0x7F, 0x07, 0xF0, 0x07, 0xF9, 0xFC, 0x0F, 0xE0, 0x07, 0xFB, 0xF8, 0x1F, 0x80, 0x07, - 0xFF, 0xE0, 0x3F, 0x00, 0x07, 0xFF, 0xC0, 0x7F, 0x00, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x01, 0xFE, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xF7, 0xF8, 0x07, 0xFF, 0xFF, 0xC7, 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xF8, 0x07, 0xFF, 0xF0, - 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, // '&' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xF1, 0xE3, 0xC7, 0x8F, 0x00, // ''' - 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xFC, - 0x00, 0xFC, // '(' - 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, - 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, - 0xFC, 0x00, // ')' - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x70, 0x1F, 0x01, 0xC7, 0xF1, 0xF1, 0xFC, 0x7F, - 0xFE, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x07, 0xF1, - 0xFC, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, 0x03, 0xC0, 0x78, 0x00, 0x08, 0x02, - 0x00, // '*' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, // '+' - 0x3F, 0x8F, 0xE3, 0xF8, 0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x3E, 0x00, // ',' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0xC0, // '-' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // '.' - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, // '/' - 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0x00, 0xFE, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0x7E, - 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0x7E, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x3F, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x3F, 0x87, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x07, - 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x0F, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, // '0' - 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0x7E, - 0x7F, 0x9F, 0xBF, 0xC7, 0xE7, 0xE1, 0xF8, 0xF0, 0x7E, 0x10, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, // '1' - 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, - 0x3F, 0xE0, 0x7F, 0xC0, 0xFC, 0x00, 0xFE, 0x03, 0x80, 0x03, 0xF8, 0x08, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, // '2' - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x03, - 0xF8, 0x0F, 0xF8, 0x3E, 0x00, 0x3F, 0x81, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x80, 0x00, 0x1F, 0xCE, 0x00, 0x03, 0xFC, - 0xFE, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, // '3' - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x1F, 0x7F, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x03, 0xE3, 0xF8, 0x00, 0x0F, 0xC7, 0xF0, - 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x01, 0xF8, 0x3F, 0x80, 0x07, 0xE0, 0x7F, 0x00, 0x0F, 0x80, - 0xFE, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0xF8, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, // '4' - 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF7, 0xFC, 0x00, - 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xC0, 0x3F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x03, 0xFC, 0x7E, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, // '5' - 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, - 0x7F, 0xE0, 0x10, 0x0F, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0xFC, 0x7F, 0xF8, 0x0F, 0xCF, 0xFF, 0xE0, 0xFD, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x8F, 0xF8, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xF8, 0x03, 0xF8, - 0x1F, 0xE0, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, // '6' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, // '7' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0x7E, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0xC0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x03, 0xFC, 0x0F, 0xE0, 0x0F, 0xF9, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x81, 0xFC, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0xFC, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0xC0, 0x03, - 0xF8, 0xFF, 0x00, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, // '8' - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF0, 0x7F, 0x80, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7E, - 0x1F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0xFC, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x9F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x3F, - 0xE7, 0xF8, 0x03, 0xFE, 0x1F, 0xF0, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0xFC, 0x0F, 0xFF, 0xE7, - 0xE0, 0x1F, 0xFE, 0x3F, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x01, 0x00, 0x7F, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, // '9' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // ':' - 0x1F, 0x07, 0xF0, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF0, 0x7E, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x00, // ';' - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, // '<' - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, // '=' - 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, // '>' - 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF8, 0x0F, - 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, // '?' - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x3F, 0xE0, 0x0F, 0x81, 0xF0, 0x07, 0xFF, 0xF0, - 0x3E, 0x1F, 0x00, 0xFF, 0xFF, 0x81, 0xF0, 0xF8, 0x0F, 0xFF, 0xFC, 0x0F, 0x8F, 0x80, 0xFF, 0x07, 0xE0, 0x3E, - 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xF3, 0xE0, 0x7E, 0x00, 0xF8, 0x0F, 0x9F, 0x03, 0xE0, 0x07, 0xC0, 0x7D, 0xF0, - 0x3F, 0x00, 0x3E, 0x03, 0xEF, 0x81, 0xF0, 0x01, 0xF0, 0x1F, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xFB, 0xE0, 0x7C, - 0x00, 0x7C, 0x07, 0xDF, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0xF8, 0x1F, 0x00, 0x3F, 0x01, 0xE7, 0xC0, 0xF8, 0x01, - 0xF8, 0x1F, 0x3E, 0x07, 0xC0, 0x0F, 0xC0, 0xF9, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xCF, 0x80, 0xF8, 0x0F, 0xF0, - 0x7C, 0x7C, 0x07, 0xF0, 0xFF, 0xC7, 0xE1, 0xF0, 0x1F, 0xFF, 0x9F, 0xFE, 0x0F, 0x80, 0x7F, 0xFC, 0xFF, 0xE0, - 0x7E, 0x01, 0xFF, 0x83, 0xFE, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xE0, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, // '@' - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, - 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, // 'A' - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x7F, 0x3F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, - 0x00, 0xFE, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x03, 0xFC, - 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, // 'B' - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFC, 0x0F, 0xF8, 0x00, 0x18, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x04, 0x0F, 0xFF, 0x00, 0x7C, - 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0x80, // 'C' - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x3F, 0xE0, 0xFE, 0x00, - 0x07, 0xFC, 0x3F, 0x80, 0x00, 0xFF, 0x8F, 0xE0, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, - 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x1F, 0xF8, 0x3F, 0x80, 0x3F, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, // 'D' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'E' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, // 'F' - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, 0xC0, 0x7F, 0xE0, 0x00, 0x30, 0x0F, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xFF, 0xEF, 0xE0, 0x01, - 0xFF, 0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0xBF, 0x80, 0x07, 0xFF, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x7E, 0x00, 0x1F, - 0xFF, 0xCF, 0xE0, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x01, - 0xFC, 0xFF, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x00, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0x80, 0x1F, 0xE0, 0x7F, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFC, 0x00, // 'G' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, - 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0xFE, // 'H' - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, // 'I' - 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x3F, 0xE7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xC0, - 0x00, // 'J' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xF0, 0xFE, 0x00, - 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xDF, - 0xE0, 0x00, 0xFF, 0x8F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x03, 0xFC, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xF0, - 0xFE, 0x00, 0x07, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x01, 0xFE, // 'K' - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'L' - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x7F, 0xF0, - 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xBF, 0xFC, 0x00, 0x00, - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x1F, 0x7E, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xDF, 0xBF, 0x00, 0x00, 0xFD, 0xFB, - 0xF7, 0xE0, 0x00, 0x1F, 0x3F, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xEF, 0xCF, 0xC0, 0x00, 0xF8, 0xFD, 0xF9, 0xF8, - 0x00, 0x1F, 0x1F, 0xBF, 0x1F, 0x80, 0x07, 0xE7, 0xF7, 0xE3, 0xF0, 0x00, 0xF8, 0xFE, 0xFC, 0x7E, 0x00, 0x3F, - 0x1F, 0xDF, 0x87, 0xE0, 0x07, 0xE3, 0xFB, 0xF0, 0xFC, 0x00, 0xF8, 0x7F, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0xEF, - 0xC1, 0xF8, 0x07, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0xBF, 0x03, 0xE0, 0x3F, 0x07, 0xF7, 0xE0, 0x7E, - 0x07, 0xC0, 0xFE, 0xFC, 0x0F, 0xC0, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0x3F, 0x03, 0xFB, 0xF0, 0x1F, 0x87, 0xC0, - 0x7F, 0x7E, 0x03, 0xF1, 0xF8, 0x0F, 0xEF, 0xC0, 0x3F, 0x3F, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xC0, 0x3F, 0xBF, - 0x00, 0xFD, 0xF8, 0x07, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0xFE, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, - 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x7E, 0x00, 0x7F, 0xC0, 0x0F, 0xEF, 0xC0, 0x0F, 0xF8, 0x01, - 0xFD, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xBF, 0x00, 0x1F, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0xFE, // 'M' - 0xFF, 0x80, 0x00, 0x0F, 0xDF, 0xF0, 0x00, 0x01, 0xFB, 0xFF, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0x00, 0x07, 0xEF, - 0xFE, 0x00, 0x00, 0xFD, 0xFF, 0xE0, 0x00, 0x1F, 0xBF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xC0, 0x00, 0x7E, 0xFF, - 0xFC, 0x00, 0x0F, 0xDF, 0xBF, 0x80, 0x01, 0xFB, 0xF7, 0xF8, 0x00, 0x3F, 0x7E, 0x7F, 0x00, 0x07, 0xEF, 0xC7, - 0xF0, 0x00, 0xFD, 0xF8, 0xFF, 0x00, 0x1F, 0xBF, 0x0F, 0xE0, 0x03, 0xF7, 0xE1, 0xFE, 0x00, 0x7E, 0xFC, 0x1F, - 0xC0, 0x0F, 0xDF, 0x81, 0xFC, 0x01, 0xFB, 0xF0, 0x3F, 0xC0, 0x3F, 0x7E, 0x03, 0xF8, 0x07, 0xEF, 0xC0, 0x3F, - 0x80, 0xFD, 0xF8, 0x07, 0xF8, 0x1F, 0xBF, 0x00, 0x7F, 0x03, 0xF7, 0xE0, 0x0F, 0xF0, 0x7E, 0xFC, 0x00, 0xFE, - 0x0F, 0xDF, 0x80, 0x0F, 0xE1, 0xFB, 0xF0, 0x01, 0xFE, 0x3F, 0x7E, 0x00, 0x1F, 0xC7, 0xEF, 0xC0, 0x01, 0xFC, - 0xFD, 0xF8, 0x00, 0x3F, 0xDF, 0xBF, 0x00, 0x03, 0xFB, 0xF7, 0xE0, 0x00, 0x7F, 0xFE, 0xFC, 0x00, 0x07, 0xFF, - 0xDF, 0x80, 0x00, 0x7F, 0xFB, 0xF0, 0x00, 0x0F, 0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xEF, 0xC0, 0x00, 0x0F, 0xFD, - 0xF8, 0x00, 0x01, 0xFF, 0xBF, 0x00, 0x00, 0x1F, 0xF7, 0xE0, 0x00, 0x03, 0xFE, // 'N' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, // 'O' - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0x80, 0x7F, 0xE7, 0xF0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x7F, 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x00, 0xFE, - 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x07, 0xFB, 0xF8, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, // 'P' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, // 'Q' - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x3F, 0xF0, 0x7F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x1F, 0xE1, 0xFC, - 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x7F, 0x03, 0xF8, 0x03, - 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x1F, 0xC0, 0xFE, 0x00, - 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, // 'R' - 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFE, 0x1F, 0xF0, 0x1F, 0x83, 0xF8, 0x00, 0x30, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, // 'S' - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, // 'T' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0F, 0xFC, 0x03, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, // 'U' - 0xFE, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x01, 0xFC, - 0x3F, 0x00, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x03, 0xF0, - 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, - 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, // 'V' - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0xF8, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x1F, 0x80, 0x07, 0xDF, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFD, 0xF8, - 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF7, 0xE0, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x3E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xF8, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xE0, - 0x07, 0xE0, 0x1F, 0x0F, 0xC0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x00, 0x7F, 0x03, 0xF0, 0x7E, - 0x07, 0xF0, 0x01, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0xC0, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x7E, 0x00, 0x0F, 0xC1, - 0xF8, 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x87, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x3F, 0x80, - 0x01, 0xF8, 0xFC, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xC0, 0x1F, - 0x9F, 0xC0, 0x00, 0x3F, 0x3E, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0xF9, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, // 'W' - 0x7F, 0x80, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x03, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x3F, 0x80, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x01, 0xFE, // 'X' - 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, // 'Y' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, // 'Z' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // '[' - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, // '\' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, - 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, - 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // ']' - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x0F, 0x8F, 0x80, - 0x00, 0x7C, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x03, - 0xE7, 0xC0, 0x00, 0x0F, 0x80, // '^' - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, // '_' - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, // '`' - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0xFF, 0x01, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0x03, 0xF9, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x0F, 0xE7, 0xF0, 0x01, 0xFD, 0xFC, - 0x00, 0x3F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x01, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF9, 0xFE, 0x07, - 0xFF, 0x3F, 0xFF, 0xF7, 0xE3, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0x0F, 0x83, 0xFF, 0xC1, 0xF0, 0x1F, 0xE0, 0x00, // 'a' - 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, 0x0F, 0xE0, 0x0F, 0xC7, 0xFF, 0x80, 0xFC, 0xFF, 0xFC, 0x0F, 0xDF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFF, 0x00, 0x1F, 0xCF, 0xF8, 0x03, 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xF9, 0xFF, 0xFE, 0x0F, - 0x8F, 0xFF, 0xC0, 0xF8, 0x7F, 0xF8, 0x00, 0x01, 0xFE, 0x00, // 'b' - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x1F, 0xE0, 0x3C, - 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x3F, 0xE0, 0x3C, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xE0, // 'c' - 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, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7E, 0x07, 0xFF, 0xE7, 0xE0, 0xFF, - 0xFF, 0x7E, 0x1F, 0xFF, 0xFF, 0xE3, 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x07, - 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF3, 0xE0, - 0x7F, 0xFE, 0x3E, 0x03, 0xFF, 0xC3, 0xE0, 0x0F, 0xE0, 0x00, // 'd' - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, - 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x3F, 0x7F, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x30, 0x7F, 0xC0, - 0x3E, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, // 'e' - 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0x02, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x80, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, // 'f' - 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, - 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFE, 0x00, 0x7E, 0x01, 0xFC, - 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC3, 0xF8, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x07, 0xEF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0xFE, 0x1F, 0xE0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, // 'g' - 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, 0x0F, 0xF0, 0x0F, 0xC7, 0xFF, 0xC0, 0xFC, 0xFF, 0xFE, 0x0F, 0xDF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, - 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xE0, // 'h' - 0x3C, 0x3F, 0x3F, 0x9F, 0xEF, 0xE3, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x00, // 'i' - 0x00, 0x78, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x00, // 'j' - 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, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, - 0x0F, 0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x07, 0xF8, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x1F, - 0xE0, 0x0F, 0xC1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x0F, 0xC7, 0xF0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xBF, 0x80, - 0x0F, 0xE1, 0xFC, 0x00, 0xFC, 0x1F, 0xE0, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F, 0x80, - 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFC, 0x00, 0x7F, 0x8F, - 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x1F, 0xC0, // 'k' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, - 0xFB, 0xF0, // 'l' - 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x03, 0xE1, 0xFF, 0xE0, 0x3F, 0xFE, 0x0F, 0x8F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xCF, 0xF8, - 0x07, 0xFF, 0x00, 0x7F, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, 0xC0, 0x03, 0xF3, 0xF8, 0x00, - 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, - 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, - 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, - 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, // 'm' - 0x00, 0x0F, 0xF0, 0x0F, 0x87, 0xFF, 0xC0, 0xF8, 0xFF, 0xFE, 0x0F, 0x9F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE0, // 'n' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xF8, 0x7F, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x3F, - 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, - 0xE1, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, // 'o' - 0x00, 0x0F, 0xE0, 0x0F, 0x87, 0xFF, 0x80, 0xF8, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFC, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x3F, 0xCF, 0xF8, 0x03, - 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFD, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xC0, 0xFC, 0x7F, 0xF8, - 0x0F, 0xC1, 0xFE, 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, // 'p' - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x07, 0xFF, 0xE3, 0xE0, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, - 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF7, 0xE0, 0x7F, 0xFE, 0x7E, 0x03, 0xFF, 0xC7, - 0xE0, 0x0F, 0xF0, 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, // 'q' - 0x00, 0x0F, 0xDF, 0x07, 0xFB, 0xE3, 0xFF, 0x7C, 0xFF, 0xEF, 0x9F, 0xFD, 0xF7, 0xFF, 0x3F, 0xF8, 0x07, 0xFC, - 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x00, // 'r' - 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xE0, 0x3E, 0x3F, - 0x00, 0x08, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFD, - 0x80, 0x03, 0xF3, 0xE0, 0x1F, 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x07, - 0xFE, 0x00, // 's' - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x10, 0x3F, 0xFF, 0x80, - 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x1F, 0xE0, // 't' - 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, - 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x80, 0x3F, 0xE7, 0xFC, 0x0F, - 0xFE, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xE3, 0xE0, 0x7F, 0xFC, 0x3E, 0x01, 0xFE, 0x00, - 0x00, // 'u' - 0xFE, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF0, 0x00, - 0x3F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0x7E, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, // 'v' - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xBF, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0xFC, - 0x00, 0xFF, 0xC0, 0x0F, 0xC7, 0xE0, 0x07, 0xFE, 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0xF0, 0x07, 0xF1, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0x87, 0xE0, 0x1F, 0x7E, 0x01, 0xF8, 0x3F, 0x00, 0xF9, 0xF0, 0x0F, 0xC1, 0xFC, 0x07, 0xCF, - 0x80, 0xFE, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xE3, 0xF0, 0x3F, 0x01, 0xF8, 0x1F, 0x0F, 0x81, - 0xF8, 0x0F, 0xE0, 0xF8, 0x7C, 0x1F, 0xC0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x01, 0xF8, 0x7C, 0x1F, 0x87, 0xE0, - 0x0F, 0xC3, 0xE0, 0x7C, 0x3F, 0x00, 0x3F, 0x3F, 0x03, 0xF3, 0xF0, 0x01, 0xF9, 0xF8, 0x1F, 0x9F, 0x80, 0x0F, - 0xCF, 0x80, 0x7C, 0xFC, 0x00, 0x7E, 0x7C, 0x03, 0xE7, 0xE0, 0x01, 0xF7, 0xE0, 0x1F, 0x7E, 0x00, 0x0F, 0xFE, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, // 'w' - 0x7F, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, - 0xC0, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0xC0, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x7F, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xE0, - 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0xFE, 0x1F, 0xE0, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x0F, 0xE0, // 'x' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x7F, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xF1, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, // 'y' - 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'z' - 0x00, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x07, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x01, 0xF0, // '{' - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, // '|' - 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0xFF, 0xE0, 0x1F, 0xF0, 0x03, 0xF8, - 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_56Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 16, 0, 0}, // ' ' - {1, 9, 41, 16, 4, -40}, // '!' - {48, 17, 14, 25, 4, -40}, // '"' - {78, 35, 40, 37, 1, -40}, // '#' - {253, 27, 46, 33, 3, -43}, // '$' - {409, 45, 42, 49, 2, -41}, // '%' - {646, 39, 42, 42, 3, -41}, // '&' - {851, 7, 14, 15, 4, -40}, // ''' - {864, 15, 49, 19, 2, -40}, // '(' - {956, 15, 49, 19, 2, -40}, // ')' - {1048, 28, 26, 32, 2, -43}, // '*' - {1139, 27, 27, 33, 3, -33}, // '+' - {1231, 10, 14, 16, 2, -7}, // ',' - {1249, 15, 5, 19, 2, -18}, // '-' - {1259, 9, 8, 16, 4, -7}, // '.' - {1268, 23, 40, 23, 0, -40}, // '/' - {1383, 29, 42, 33, 2, -41}, // '0' - {1536, 18, 40, 33, 4, -40}, // '1' - {1626, 29, 41, 33, 2, -41}, // '2' - {1775, 28, 42, 33, 2, -41}, // '3' - {1922, 31, 40, 33, 1, -40}, // '4' - {2077, 27, 41, 33, 3, -40}, // '5' - {2216, 28, 42, 33, 3, -41}, // '6' - {2363, 29, 40, 33, 2, -40}, // '7' - {2508, 29, 42, 33, 2, -41}, // '8' - {2661, 29, 42, 33, 2, -41}, // '9' - {2814, 9, 32, 16, 4, -31}, // ':' - {2850, 11, 38, 17, 2, -31}, // ';' - {2903, 27, 28, 33, 3, -34}, // '<' - {2998, 27, 16, 33, 3, -28}, // '=' - {3052, 27, 28, 33, 3, -34}, // '>' - {3147, 25, 42, 26, 0, -41}, // '?' - {3279, 45, 45, 51, 3, -40}, // '@' - {3533, 38, 40, 38, 0, -40}, // 'A' - {3723, 30, 40, 38, 5, -40}, // 'B' - {3873, 32, 42, 37, 3, -41}, // 'C' - {4041, 34, 40, 42, 5, -40}, // 'D' - {4211, 24, 40, 32, 5, -40}, // 'E' - {4331, 24, 40, 31, 5, -40}, // 'F' - {4451, 35, 42, 42, 3, -41}, // 'G' - {4635, 33, 40, 43, 5, -40}, // 'H' - {4800, 8, 40, 18, 5, -40}, // 'I' - {4840, 17, 51, 18, -4, -40}, // 'J' - {4949, 32, 40, 37, 5, -40}, // 'K' - {5109, 24, 40, 31, 5, -40}, // 'L' - {5229, 43, 40, 53, 5, -40}, // 'M' - {5444, 35, 40, 45, 5, -40}, // 'N' - {5619, 39, 42, 45, 3, -41}, // 'O' - {5824, 27, 40, 35, 5, -40}, // 'P' - {5959, 39, 51, 45, 3, -41}, // 'Q' - {6208, 31, 40, 37, 5, -40}, // 'R' - {6363, 27, 42, 32, 3, -41}, // 'S' - {6505, 31, 40, 33, 1, -40}, // 'T' - {6660, 33, 41, 43, 5, -40}, // 'U' - {6830, 36, 40, 36, 0, -40}, // 'V' - {7010, 54, 40, 54, 0, -40}, // 'W' - {7280, 36, 40, 36, 0, -40}, // 'X' - {7460, 34, 40, 34, 0, -40}, // 'Y' - {7630, 29, 40, 33, 2, -40}, // 'Z' - {7775, 14, 49, 19, 4, -40}, // '[' - {7861, 23, 40, 23, 0, -40}, // '\' - {7976, 14, 49, 19, 1, -40}, // ']' - {8062, 29, 26, 31, 1, -40}, // '^' - {8157, 25, 4, 25, 0, 5}, // '_' - {8170, 14, 9, 34, 10, -43}, // '`' - {8186, 27, 32, 33, 2, -31}, // 'a' - {8294, 28, 44, 36, 5, -43}, // 'b' - {8448, 24, 32, 29, 3, -31}, // 'c' - {8544, 28, 44, 36, 3, -43}, // 'd' - {8698, 27, 32, 33, 3, -31}, // 'e' - {8806, 23, 43, 21, 1, -43}, // 'f' - {8930, 30, 44, 32, 1, -31}, // 'g' - {9095, 28, 43, 37, 5, -43}, // 'h' - {9246, 9, 42, 17, 4, -42}, // 'i' - {9294, 16, 55, 17, -3, -42}, // 'j' - {9404, 28, 43, 33, 5, -43}, // 'k' - {9555, 7, 43, 17, 5, -43}, // 'l' - {9593, 46, 31, 55, 5, -31}, // 'm' - {9772, 28, 31, 37, 5, -31}, // 'n' - {9881, 29, 32, 35, 3, -31}, // 'o' - {9997, 28, 44, 36, 5, -31}, // 'p' - {10151, 28, 44, 36, 3, -31}, // 'q' - {10305, 19, 31, 25, 5, -31}, // 'r' - {10379, 23, 32, 28, 3, -31}, // 's' - {10471, 21, 38, 23, 1, -37}, // 't' - {10571, 28, 31, 37, 4, -30}, // 'u' - {10680, 31, 30, 31, 0, -30}, // 'v' - {10797, 45, 30, 47, 1, -30}, // 'w' - {10966, 30, 30, 32, 1, -30}, // 'x' - {11079, 31, 43, 31, 0, -30}, // 'y' - {11246, 24, 30, 28, 2, -30}, // 'z' - {11336, 21, 49, 23, 1, -40}, // '{' - {11465, 6, 56, 32, 13, -43}, // '|' - {11507, 20, 49, 22, 1, -40} // '}' -}; -const GFXfont Open_Sans_SemiBold_56 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_56Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_56Glyphs, 0x20, 0x7E, 77}; \ No newline at end of file diff --git a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Inkplate6_Crowdsupply_Campaing_Tracker.ino b/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Inkplate6_Crowdsupply_Campaing_Tracker.ino deleted file mode 100644 index 0979dede6..000000000 --- a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/Inkplate6_Crowdsupply_Campaing_Tracker.ino +++ /dev/null @@ -1,205 +0,0 @@ -/* - Inkplate6_Crowdsupply_Campaing_Tracker example for Soldered Inkplate 6 - For this example you will need only USB cable and Inkplate 6. - Select "e-radionica Inkplate6" or "Soldered Inkplate6" from Tools -> Board menu. - Don't have "e-radionica Inkplate6" or "Soldered Inkplate6" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 6 to display html data. - This example gets html data from crowdsource campaing and displays them on Inkplate screen. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 8 December 2022 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#if !defined(ARDUINO_ESP32_DEV) && !defined(ARDUINO_INKPLATE6V2) -#error \ - "Wrong board selection for this example, please select e-radionica Inkplate6 or Soldered Inkplate6 in the boards menu." -#endif - -#include "Inkplate.h" // Include Inkplate library to the sketch -#include "generatedUI.h" // include generated UI - -#define DELAY_MS 60000 * 60 // Delay between fetching data -#define URL "https://www.crowdsupply.com/soldered/inkplate-6" // Link to the inkplate 6 crowdsupply campaign - -// Enter your WiFi credentials -char ssid[] = ""; -char pass[] = ""; - -// Create an object on Inkplate library and also set library into 1Bit (BW) mode -Inkplate display(INKPLATE_1BIT); - -uint32_t n; // Variable for counting position in the buffer -char *buf; // Pointer to the buffer - -// Declaration of the function used later -String textInTag(const char *tag, const char *tagEnd, int dt = 1); - -void setup() -{ - Serial.begin(115200); // Init serial communication - display.begin(); // Init Inkplate library (you should call this function ONLY ONCE) - - // Connect to WiFi - while (!display.connectWiFi(ssid, pass)) - { - Serial.print('.'); - delay(1000); - } - - // Allocate memory for the buffer - buf = (char *)ps_malloc(100000); - - // Create an HTTPclient object and do the GET request - HTTPClient http; - if (http.begin(URL) && http.GET() > 0) - { - // Create an HTTPclient object and do the GET request - while (http.getStreamPtr()->available()) - { - char c = http.getStreamPtr()->read(); - buf[n++] = c; - delayMicroseconds(100); - } - - // Add the end of the string - buf[n] = 0; - } - - Serial.println("Buffer load complete!"); - - // Get the values for each field. - // When we did a get request, we got HTML as a response because there is no API on this web page. - // If you open the source of the page, you will see the HTML code. Here in the function we pass tags we are - // interested in and get the value between the tags as a string. - text1_content = textInTag("

", "

"); // Separate the product name - text3_content = textInTag("

", "

"); // Separate the project teaser - text4_content = textInTag("

", "

"); // Separate the amount of pledged - text7_content = textInTag("

", "

"); // Separate the goal - text11_content = textInTag("
", ""); // Separate the percentage - - int percent; - text11_content.replace(",", ""); - sscanf(text11_content.c_str(), "%d%%", &percent); - - // Draw parcent slider - if (percent < 100 && percent > 0) - { - float per = (float)(percent / 100.00); - int diff = line0_end_x - line0_start_x; - Serial.println(per); - Serial.println(diff); - line0_end_x = line0_start_x + (diff * per); - } - else if (percent >= 100) - { - } - else - { - line0_end_x = line0_start_x; - } - - text13_content = textInTag("", ""); // Separate the number of updates - text14_content = - textInTag("", ""); // Separate the date when founded - text17_content = textInTag("", ""); // Separate the number of backers - text19_content += textInTag("", - ""); // Separate the last update date - - // Display the content on the screen - mainDraw(); - display.display(); - - // Free the buffer - free(buf); - - // Go to sleep - esp_sleep_enable_timer_wakeup(1000LL * DELAY_MS); - (void)esp_deep_sleep_start(); -} - -void loop() -{ - // Never here -} - -/** - * @brief The function that returns content between HTML tags as a string. - * - * @param const char *tag - * The starting tag from which we want to get the value - * - * @param const char *tagEnd - * The ending tag from which we want to get the value - * - * @param int dt - * How many end tags (*tagEnd) want to skip. Default is 1 - * - * @return String value between passed tags - */ -String textInTag(const char *tag, const char *tagEnd, int dt) -{ - String r; // String for result - char *start = strstr(buf, tag) + strlen(tag); // Pointer to the beginning of the text after the tag - char *end = start - 1; // Set tag end one address before start pointer - while (dt--) - { - // Search where is the "tagEnd" starting from the last "end" which is the beginning for the first time - // (*end = start - 1) and repeat it "dt" times - end = strstr(end + 1, tagEnd); - } - - // Remove "<" and ">" from the result string - int d = 0; - for (char *t = start; t < end; ++t) - { - if (*t == '<') - ++d; - if (d == 0 && *t != '\n') - { - r += *t; - } - if (*t == '>') - --d; - } - - // Remove certain words to get only the data we want - // Hacky solution: - r.replace(""", "\""); - r.replace(" ", " "); - - r.replace("raised", ""); - r.replace("goal", ""); - r.replace("Funded!", ""); - r.replace("funded", ""); - r.replace(" on", ""); - r.replace("updates", ""); - - // Remove the following from the result string if it exists and put it in the separate string that displays on - // the screen - if (r.indexOf("hours left") != -1) - { - r.replace("hours left", ""); - text17_content = "hours left"; - } - if (r.indexOf("days left") != -1) - { - r.replace("days left", ""); - text17_content = "days left"; - } - - r.replace("backers", ""); - r.replace("Subscribe to Updates", ""); - - // Remove extraneous whitespace characters at the beginning or the end of the string - r.trim(); - - // If there is a dollar sign, the result is the string after that - if (r.indexOf("$") != -1) - r = r.substring(r.indexOf("$") + 1); - - return r; -} diff --git a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/generatedUI.h b/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/generatedUI.h deleted file mode 100644 index 21a19d46b..000000000 --- a/examples/Inkplate6/Projects/Inkplate6_Crowdsupply_Campaing_Tracker/generatedUI.h +++ /dev/null @@ -1,353 +0,0 @@ -#include "Arduino.h" -#include "Fonts/Open_Sans_SemiBold_16.h" -#include "Fonts/Open_Sans_SemiBold_24.h" -#include "Fonts/Open_Sans_SemiBold_32.h" -#include "Fonts/Open_Sans_SemiBold_56.h" -#include "Inkplate.h" - -extern Inkplate display; - -int rect0_a_x = 10; -int rect0_a_y = 10; -int rect0_b_x = 790; -int rect0_b_y = 790; -int rect0_fill = -1; -int rect0_radius = -1; -int rect0_color = BLACK; - -String text1_content; -int text1_cursor_x = 40; -int text1_cursor_y = 40; -const GFXfont *text1_font = &Open_Sans_SemiBold_32; - -String text2_content = "Soldered"; -int text2_cursor_x = 40; -int text2_cursor_y = 80; -const GFXfont *text2_font = &Open_Sans_SemiBold_16; - -String text3_content; -int text3_cursor_x = 40; -int text3_cursor_y = 150; -const GFXfont *text3_font = &Open_Sans_SemiBold_16; -// - -String text4_content; -int text4_cursor_x = 70; -int text4_cursor_y = 305; -const GFXfont *text4_font = &Open_Sans_SemiBold_32; - -String text5_content = "$"; -int text5_cursor_x = 50; -int text5_cursor_y = 300; -const GFXfont *text5_font = &Open_Sans_SemiBold_24; - -String text6_content = "raised"; -int text6_cursor_x = 220; -int text6_cursor_y = 305; -const GFXfont *text6_font = &Open_Sans_SemiBold_24; - -String text7_content; -int text7_cursor_x = 70; -int text7_cursor_y = 405; -const GFXfont *text7_font = &Open_Sans_SemiBold_32; - -String text8_content = "$"; -int text8_cursor_x = 50; -int text8_cursor_y = 395; -const GFXfont *text8_font = &Open_Sans_SemiBold_24; - -String text9_content = "goal"; -int text9_cursor_x = 220; -int text9_cursor_y = 405; -const GFXfont *text9_font = &Open_Sans_SemiBold_24; - -int rect1_a_x = 40; -int rect1_a_y = 250; -int rect1_b_x = 350; -int rect1_b_y = 525; -int rect1_fill = -1; -int rect1_radius = -1; -int rect1_color = BLACK; - -int rect2_a_x = 450; -int rect2_a_y = 250; -int rect2_b_x = 760; -int rect2_b_y = 525; -int rect2_fill = -1; -int rect2_radius = -1; -int rect2_color = BLACK; - -int rect3_a_x = 50; -int rect3_a_y = 450; -int rect3_b_x = 340; -int rect3_b_y = 477; -int rect3_fill = -1; -int rect3_radius = -1; -int rect3_color = BLACK; - -int line0_start_x = 50; -int line0_start_y = 463; -int line0_end_x = 340; -int line0_end_y = 463; -int line0_color = BLACK; -int line0_thickness = 26; -int line0_gradient = 0; - -String text11_content = "100%"; -int text11_cursor_x = 175; -int text11_cursor_y = 445; -const GFXfont *text11_font = &Open_Sans_SemiBold_16; - -String text12_content = "Funded!"; -int text12_cursor_x = 150; -int text12_cursor_y = 500; -const GFXfont *text12_font = &Open_Sans_SemiBold_16; - -String text13_content; -int text13_cursor_x = 460; -int text13_cursor_y = 305; -const GFXfont *text13_font = &Open_Sans_SemiBold_32; - -String text14_content; -int text14_cursor_x = 460; -int text14_cursor_y = 390; -const GFXfont *text14_font = &Open_Sans_SemiBold_32; - -String text15_content; -int text15_cursor_x = 600; -int text15_cursor_y = 406; -const GFXfont *text15_font = &Open_Sans_SemiBold_32; - -String text16_content = "updates"; -int text16_cursor_x = 600; -int text16_cursor_y = 305; -const GFXfont *text16_font = &Open_Sans_SemiBold_24; - -String text17_content; -int text17_cursor_x = 460; -int text17_cursor_y = 470; -const GFXfont *text17_font = &Open_Sans_SemiBold_24; - -String text18_content = "backers"; -int text18_cursor_x = 600; -int text18_cursor_y = 470; -const GFXfont *text18_font = &Open_Sans_SemiBold_24; - -String text19_content = "Last update posted "; -int text19_cursor_x = 275; -int text19_cursor_y = 570; -const GFXfont *text19_font = &Open_Sans_SemiBold_16; - -void mainDraw() -{ - if (rect0_radius != -1 && rect0_fill != -1) - display.fillRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius != -1 && rect0_fill == -1) - display.drawRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius == -1 && rect0_fill != -1) - display.fillRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - else if (rect0_radius == -1 && rect0_fill == -1) - display.drawRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - - display.setFont(text1_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text1_cursor_x, text1_cursor_y); - display.print(text1_content); - //Serial.print("Text 1: "); - //Serial.println(text1_content); - - display.setFont(text2_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text2_cursor_x, text2_cursor_y); - display.print(text2_content); - //Serial.print("Text 2: "); - //Serial.println(text2_content); - - // Manual edit: - GFXcanvas1 canvas(750, 150); - canvas.setFont(text3_font); - canvas.setTextColor(BLACK, WHITE); - canvas.setTextSize(1); - canvas.setCursor(0, 20); - canvas.print(text3_content); - // canvas.drawRect(0, 0, 100, 100, BLACK); - //Serial.print("Text 3: "); - //Serial.println(text3_content); - - display.drawBitmap(text3_cursor_x, text3_cursor_y, canvas.getBuffer(), 750, 150, BLACK, WHITE); - - display.setFont(text4_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text4_cursor_x, text4_cursor_y); - display.print(text4_content); - //Serial.print("Text 4: ");// - //Serial.println(text4_content)//; - - display.setFont(text5_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text5_cursor_x, text5_cursor_y); - display.print(text5_content); - //Serial.print("Text 5: "); - //Serial.println(text5_content); - - display.setFont(text6_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text6_cursor_x, text6_cursor_y); - display.print(text6_content); - //Serial.print("Text 6: "); - //Serial.println(text6_content); - - display.setFont(text7_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text7_cursor_x, text7_cursor_y); - display.print(text7_content); - //Serial.print("Text 7: "); - //Serial.println(text7_content); - - display.setFont(text8_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text8_cursor_x, text8_cursor_y); - display.print(text8_content); - //Serial.print("Text 8: "); - //Serial.println(text8_content); - - display.setFont(text9_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text9_cursor_x, text9_cursor_y); - display.print(text9_content); - //Serial.print("Text 9: "); - //Serial.println(text9_content); - - if (rect1_radius != -1 && rect1_fill != -1) - display.fillRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius != -1 && rect1_fill == -1) - display.drawRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius == -1 && rect1_fill != -1) - display.fillRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - else if (rect1_radius == -1 && rect1_fill == -1) - display.drawRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - - if (rect2_radius != -1 && rect2_fill != -1) - display.fillRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius != -1 && rect2_fill == -1) - display.drawRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius == -1 && rect2_fill != -1) - display.fillRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - else if (rect2_radius == -1 && rect2_fill == -1) - display.drawRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - - if (rect3_radius != -1 && rect3_fill != -1) - display.fillRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius != -1 && rect3_fill == -1) - display.drawRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius == -1 && rect3_fill != -1) - display.fillRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - else if (rect3_radius == -1 && rect3_fill == -1) - display.drawRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - - if (line0_gradient <= line0_color && line0_thickness == 1) - { - display.drawLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color); - } - else if (line0_gradient <= line0_color && line0_thickness != 1) - { - display.drawThickLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_thickness); - } - else if (line0_gradient > line0_color && line0_thickness == 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - 1); - } - else if (line0_gradient > line0_color && line0_thickness != 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - line0_thickness); - } - display.setFont(text11_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text11_cursor_x, text11_cursor_y); - display.print(text11_content); - //Serial.print("Text 11: "); - //Serial.println(text11_content); - - display.setFont(text12_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text12_cursor_x, text12_cursor_y); - display.print(text12_content); - //Serial.print("Text 12: "); - //Serial.println(text12_content); - - display.setFont(text13_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text13_cursor_x, text13_cursor_y); - display.print(text13_content); - //Serial.print("Text 13: "); - //Serial.println(text13_content); - - display.setFont(text14_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text14_cursor_x, text14_cursor_y); - display.print(text14_content); - //Serial.print("Text 14: "); - //Serial.println(text14_content); - - display.setFont(text15_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text15_cursor_x, text15_cursor_y); - display.print(text15_content); - //Serial.print("Text 15: "); - //Serial.println(text15_content); - - display.setFont(text16_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text16_cursor_x, text16_cursor_y); - display.print(text16_content); - //Serial.print("Text 16: "); - //Serial.println(text16_content); - - display.setFont(text17_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text17_cursor_x, text17_cursor_y); - display.print(text17_content); - //Serial.print("Text 17: "); - //Serial.println(text17_content); - - display.setFont(text18_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text18_cursor_x, text18_cursor_y); - display.print(text18_content); - //Serial.print("Text 18: "); - //Serial.println(text18_content); - - display.setFont(text19_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text19_cursor_x, text19_cursor_y); - display.print(text19_content); - //Serial.print("Text 19: "); - //Serial.println(text19_content); -} diff --git a/examples/Inkplate6/Projects/Inkplate6_Google_Calendar/Inkplate6_Google_Calendar.ino b/examples/Inkplate6/Projects/Inkplate6_Google_Calendar/Inkplate6_Google_Calendar.ino index 40c9490e4..6dc3e514c 100644 --- a/examples/Inkplate6/Projects/Inkplate6_Google_Calendar/Inkplate6_Google_Calendar.ino +++ b/examples/Inkplate6/Projects/Inkplate6_Google_Calendar/Inkplate6_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate6_Google_Calendar for Soldered Inkplate 6 +Inkplate6_Google_Calendar for Soldered Inkplate 6 -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6/Projects/Inkplate6_Image_Uploader/Inkplate6_Image_Uploader.ino b/examples/Inkplate6/Projects/Inkplate6_Image_Uploader/Inkplate6_Image_Uploader.ino index 6bc807d25..919c99c2e 100644 --- a/examples/Inkplate6/Projects/Inkplate6_Image_Uploader/Inkplate6_Image_Uploader.ino +++ b/examples/Inkplate6/Projects/Inkplate6_Image_Uploader/Inkplate6_Image_Uploader.ino @@ -1,9 +1,9 @@ /* - Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 10 + Inkplate6 Image Uploader Example + Compatible with Soldered Inkplate 6 -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 6 diff --git a/examples/Inkplate6/Projects/Inkplate6_OpenAI_Image_Slideshow/Inkplate6_OpenAI_Image_Slideshow.ino b/examples/Inkplate6/Projects/Inkplate6_OpenAI_Image_Slideshow/Inkplate6_OpenAI_Image_Slideshow.ino index 4c4b05cba..75b21c4a1 100644 --- a/examples/Inkplate6/Projects/Inkplate6_OpenAI_Image_Slideshow/Inkplate6_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate6/Projects/Inkplate6_OpenAI_Image_Slideshow/Inkplate6_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate6 OpenAI Image slideshow - Compatible with Soldered Inkplate 6 + Compatible with Soldered Inkplate 6 -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 6. Select "Soldered Inkplate6" from Tools -> Board menu. diff --git a/examples/Inkplate6/Projects/Inkplate6_OpenAI_Text_Prompt/Inkplate6_OpenAI_Text_Prompt.ino b/examples/Inkplate6/Projects/Inkplate6_OpenAI_Text_Prompt/Inkplate6_OpenAI_Text_Prompt.ino index 7a383ffae..f3996f9cf 100644 --- a/examples/Inkplate6/Projects/Inkplate6_OpenAI_Text_Prompt/Inkplate6_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate6/Projects/Inkplate6_OpenAI_Text_Prompt/Inkplate6_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate6 OpenAI text prompt generator - Compatible with Soldered Inkplate 6 + Compatible with Soldered Inkplate 6 -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 6. Select "e-radionica Inkplate6" or "Soldered Inkplate6" from Tools -> Board menu. diff --git a/examples/Inkplate6/Projects/Inkplate6_OpenMeteo_Weather_Station/Inkplate6_OpenMeteo_Weather_Station.ino b/examples/Inkplate6/Projects/Inkplate6_OpenMeteo_Weather_Station/Inkplate6_OpenMeteo_Weather_Station.ino index 6f68ea9a1..83ae75416 100644 --- a/examples/Inkplate6/Projects/Inkplate6_OpenMeteo_Weather_Station/Inkplate6_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate6/Projects/Inkplate6_OpenMeteo_Weather_Station/Inkplate6_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate6 OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 6 + Compatible with Soldered Inkplate 6 -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate6COLOR/Advanced/DeepSleep/Inkplate6COLOR_Simple_Deep_Sleep/Inkplate6COLOR_Simple_Deep_Sleep.ino b/examples/Inkplate6COLOR/Advanced/DeepSleep/Inkplate6COLOR_Simple_Deep_Sleep/Inkplate6COLOR_Simple_Deep_Sleep.ino index 2f7c7b981..055286fa1 100644 --- a/examples/Inkplate6COLOR/Advanced/DeepSleep/Inkplate6COLOR_Simple_Deep_Sleep/Inkplate6COLOR_Simple_Deep_Sleep.ino +++ b/examples/Inkplate6COLOR/Advanced/DeepSleep/Inkplate6COLOR_Simple_Deep_Sleep/Inkplate6COLOR_Simple_Deep_Sleep.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6COLOR/Advanced/Other/Inkplate6COLOR_Read_Battery_Voltage/Inkplate6COLOR_Read_Battery_Voltage.ino b/examples/Inkplate6COLOR/Advanced/Other/Inkplate6COLOR_Read_Battery_Voltage/Inkplate6COLOR_Read_Battery_Voltage.ino index 983ae628f..4138bd080 100644 --- a/examples/Inkplate6COLOR/Advanced/Other/Inkplate6COLOR_Read_Battery_Voltage/Inkplate6COLOR_Read_Battery_Voltage.ino +++ b/examples/Inkplate6COLOR/Advanced/Other/Inkplate6COLOR_Read_Battery_Voltage/Inkplate6COLOR_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6COLOR/Basic/Inkplate6COLOR_Simple/logoImg.h b/examples/Inkplate6COLOR/Basic/Inkplate6COLOR_Simple/logoImg.h index 6c9283de6..5a7d8d581 100644 --- a/examples/Inkplate6COLOR/Basic/Inkplate6COLOR_Simple/logoImg.h +++ b/examples/Inkplate6COLOR/Basic/Inkplate6COLOR_Simple/logoImg.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t logo[] PROGMEM = { 0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0, diff --git a/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/Inkplate6COLOR_Peripheral_Mode.ino b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/Inkplate6COLOR_Peripheral_Mode.ino index 2eff333e9..35aa4aab7 100644 --- a/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/Inkplate6COLOR_Peripheral_Mode.ino +++ b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/Inkplate6COLOR_Peripheral_Mode.ino @@ -1,298 +1,69 @@ /* - Inkplate6COLOR_Peripheral_Mode example for Soldered Inkplate 6COLOR + Inkplate6COLOR_Peripheral_Mode sketch for Soldered Inkplate 6COLOR. + For this example you will need only a USB-C cable and Inkplate 6COLOR. Select "Soldered Inkplate 6COLOR" from Tools -> Board menu. - Don't have "Soldered Inkplate 6COLOR" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ + Don’t have "Soldered Inkplate 6COLOR" option? Follow our tutorial and add it: + https://soldered.com/learn/add-inkplate-6color-board-definition-to-arduino-ide/ - Using this sketch, you don't have to program and control e-paper using Arduino code. - Instead, you can send UART command. This give you flexibility that you can use this Inkplate 6COLOR on any platform! + Using this sketch, you don’t have to program and control the e-paper display using Arduino code. + Instead, you can send UART commands. This gives you the flexibility to use Inkplate 6COLOR on any platform! - Because it uses UART, it's little bit slower and it's not recommended to send bunch of - drawPixel command to draw some image. Instead, load bitmaps and pictures on SD card and load image from SD. - If we missed some function, you can modify this and make yor own. - Also, every Inkplate comes with this peripheral mode right from the factory. + Because it uses UART, it’s a bit slower and not recommended to send a large number of + drawPixel commands to render images. Instead, store bitmaps or pictures on an SD card + and load them directly from there. + If any functionality is missing, you can modify this code and make your own version. + Every Inkplate 6COLOR comes with this Peripheral Mode preloaded from the factory. Learn more about Peripheral Mode: https://inkplate.readthedocs.io/en/latest/peripheral-mode.html - UART settings are: 115200 baud, standard parity, ending with "\n\r" (both) - You can send commands via USB port or by directly connecting to ESP32 TX and RX pins. - Don't forget you need to send #L(1)* after each command to show it on the display - (equal to display.display()). + UART settings are: 115200 baud, standard parity, ending with "\n\r" (Both NL & CR) + You can send commands via the USB port or by directly connecting to the ESP32 TX and RX pins. - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 15 July 2020 by Soldered + Want to learn more about Inkplate? Visit: + https://soldered.com/documentation/inkplate/ + + 23 October 2025 by Soldered */ -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATECOLOR -#error "Wrong board selection for this example, please select Soldered Inkplate 6COLOR in the boards menu." -#endif +// Include Inkplate library +#include "Inkplate.h" -#include -Inkplate display; +// Include Peripheral Mode library +#include "InkplatePeripheralMode.h" + +// Include the header file with sketch settings (buffer size, serial timeout, argument termination char, etc.) +#include "settings.h" -#define BUFFER_SIZE 1000 -char commandBuffer[BUFFER_SIZE + 1]; -char strTemp[2001]; +// Pointer to the singleton Peripheral Mode instance +PeripheralMode *peripheral; + +// Create Inkplate 6COLOR display object +Inkplate display; void setup() { + // Initialize Inkplate library display.begin(); - Serial.begin(115200); - memset(commandBuffer, 0, BUFFER_SIZE); -} - -void loop() -{ - // put your main code here, to run repeatedly: - if (Serial.available()) - { - while (Serial.available()) - { - for (int i = 0; i < (BUFFER_SIZE - 1); i++) - { - commandBuffer[i] = commandBuffer[i + 1]; - } - commandBuffer[BUFFER_SIZE - 1] = Serial.read(); - } - } - char *s = NULL; - char *e = NULL; - for (int i = 0; i < BUFFER_SIZE; i++) - { - if (commandBuffer[i] == '#' && s == NULL) - s = &commandBuffer[i]; - if (commandBuffer[i] == '*' && e == NULL) - e = &commandBuffer[i]; - } - if (s != NULL && e != NULL) - { - if ((e - s) > 0) - { - int x, x1, x2, y, y1, y2, x3, y3, l, c, w, h, r, n, rx, ry, xc, yc; - char b; - char temp[150]; - switch (*(s + 1)) - { - case '?': - Serial.print("OK"); - break; - - case '0': - sscanf(s + 3, "%d,%d,%d", &x, &y, &c); - display.drawPixel(x, y, c); - break; - - case '1': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c); - display.drawLine(x1, y1, x2, y2, c); - break; - - case '2': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - display.drawFastVLine(x, y, l, c); - break; - - case '3': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - display.drawFastHLine(x, y, l, c); - break; - - case '4': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - display.drawRect(x, y, w, h, c); - break; - case '5': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - display.drawCircle(x, y, r, c); - break; + // Create instance of Peripheral Mode object + peripheral = PeripheralMode::getInstance(); - case '6': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - display.drawTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case '7': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - display.drawRoundRect(x, y, w, h, r, c); - break; - - case '8': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - display.fillRect(x, y, w, h, c); - break; - - case '9': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - display.fillCircle(x, y, r, c); - break; - - case 'A': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - display.fillTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case 'B': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - display.fillRoundRect(x, y, w, h, r, c); - break; - - case 'C': - sscanf(s + 3, "\"%2000[^\"]\"", strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - display.print(strTemp); - break; - - case 'D': - sscanf(s + 3, "%d", &c); - display.setTextSize(c); - break; - - case 'E': - sscanf(s + 3, "%d,%d", &x, &y); - display.setCursor(x, y); - break; - - case 'F': - sscanf(s + 3, "%c", &b); - if (b == 'T') - display.setTextWrap(true); - if (b == 'F') - display.setTextWrap(false); - break; - - case 'G': - sscanf(s + 3, "%d", &c); - c &= 3; - display.setRotation(c); - break; - - case 'H': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawBitmapFromSd(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - - case 'K': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - display.clearDisplay(); - } - break; - - case 'L': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - display.display(); - } - break; - - case 'M': - sscanf(s + 3, "%d,%d,%d", &y1, &x2, &y2); - display.display(); - break; - - case 'P': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#P("); - Serial.print(display.readBattery(), 2); - Serial.println(")*"); - Serial.flush(); - } - break; + // Initialize Peripheral Mode (UART, display, buffer, etc.) + if (!peripheral->begin(&Serial, &display, 115200ULL, SERIAL_UART_RX_PIN, SERIAL_UART_TX_PIN, SERIAL_BUFFER_SIZE)) + { + // Send an error message to serial + Serial.println("Peripheral Mode init failed!\nProgram halted!"); - case 'S': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawImage(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - case 'T': - int t; - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c, &t); - display.drawThickLine(x1, y1, x2, y2, c, t); - break; - case 'U': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - display.drawElipse(rx, ry, xc, yc, c); - break; - case 'V': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - display.fillElipse(rx, ry, xc, yc, c); - break; - } - *s = 0; - *e = 0; - } + // Stop program execution + while (1); } + + Serial.println("READY"); } -int hexToChar(char c) +void loop() { - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - return -1; + // Check if there is incoming data on serial and process commands + peripheral->getDataFromSerial(SERIAL_TIMEOUT_MS); } diff --git a/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/InkplatePeripheralMode.cpp b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/InkplatePeripheralMode.cpp new file mode 100644 index 000000000..bb83756ed --- /dev/null +++ b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/InkplatePeripheralMode.cpp @@ -0,0 +1,1544 @@ +// Add header of the library to the source files. +#include "InkplatePeripheralMode.h" + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +// Include the list with all available commands. +#include "commandList.h" + +// Define the static member. +PeripheralMode* PeripheralMode::_instancePtr = nullptr; + +bool PeripheralMode::begin(HardwareSerial *_serialPtr, Inkplate *_inkplatePtr, uint32_t _baud, uint8_t _rxPin, uint8_t _txPin, uint32_t _size) +{ + // Store every parameter locally and check them. + if ((_serialPtr == nullptr) || (_inkplatePtr == nullptr) || (_size == 0)) return false; + _serial = _serialPtr; + _display = _inkplatePtr; + _bufferSize = _size; + + // Init the serial communication @ desired communication speed. Also set the pins. + _serial->begin(_baud, SERIAL_8N1, _rxPin, _txPin); + + // Allocate memory for the serial buffer in the PSRAM. + _serialBuffer = (char*)ps_malloc(_bufferSize * sizeof(char)); + + // Check if allocation is successful. + if (_serialBuffer == NULL) + { + return false; + } + + // If everything is ok, return true. + return true; +} + +bool PeripheralMode::getDataFromSerial(unsigned long _timeout) +{ + // Variable used for timeouting incoming serial data. + unsigned long _timestamp; + + // Variables for parsing. + char *_commandEndPosition = NULL; + + if (_serial->available()) + { + // You got something on the serial? Cool! + // First capture the current time (needed for timeouting!). + _timestamp = millis(); + + // Capture the timestamp for automatic buffer cleaning. + _bufferAutoCleanTimestamp = millis(); + + // Try to capture incoming serial data until the timeout or until the buffer is full! + while (((unsigned long)(millis() - _timestamp) < _timeout) && (_serialBufferIndex < (_bufferSize - 2))) + { + if (_serial->available()) + { + _serialBuffer[_serialBufferIndex++] = _serial->read(); + _timestamp = millis(); + } + } + + // Add a nul-terminating char. + _serialBuffer[_serialBufferIndex] = '\0'; + + // Go though all commands that are received. + _commandEndPosition = _serialBuffer; + while (_commandEndPosition != NULL) + { + // Variables for parsing. + int _command = 0; + int _repeatable = 0; + int _payloadSize = 0; + char *_payload = NULL; + + // Check received for validity. If everything went ok, parse the command. + if (checkPacket(_commandEndPosition, _bufferSize - (uint32_t)(_commandEndPosition - _serialBuffer), &_command, &_repeatable, &_payloadSize, &_payload, &_commandEndPosition)) + { + // If is a valid command, try to parse it. + parseCommand(_command, _repeatable, _payloadSize, _payload); + + // Reset the counter. + _serialBufferIndex = 0; + + // Go to the next command by advancing to the next index. + _commandEndPosition++; + } + } + } + + // Periodically clear the buffer from the remained invalid data. + if (((unsigned long)(millis() - _bufferAutoCleanTimestamp) >= SERIAL_BUFFER_CLEAN_TIME_MS) && _serialBufferIndex) + { + // Clear the buffer. + memset(_serialBuffer, 0, _bufferSize); + + // Reset the index variable. + _serialBufferIndex = 0; + + Serial.println("Cleaned"); + } + + // If data is not valid, return false; + return false; +} + +bool PeripheralMode::checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandLastPosition) +{ + // Prepare the command end position pointer - set it to null. Later in the code it will be set to some address that corresponds end position of the command. + // If not found, it will stay on null. + *_commandLastPosition = NULL; + + // -------------------PARSING START AND STOP FLAGS------------------- + // First check if there is start and stop flags. + char *_startFlag = strstr(_buffer, "TS"); + + // Check start flag. If the start flag is wrong, return error. + if (_startFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _startFlag; + + Serial.printf("Passed 1st check!\n"); + Serial.flush(); + + // -------------------PARSING COMMAND------------------- + // Check the command and payload size. + // First find the first semicolon. + char *_cmd = strchr(_startFlag + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_cmd == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _cmd; + + Serial.printf("Passed 2nd check!\n"); + Serial.flush(); + + // Check if there is a command. Move pointer by one place to the right (skip the semicolon). + int _cmdDataInt = strtol(_cmd + 1, NULL, 16); + + // If command if equal to zero, something is wrong. + if (_cmdDataInt == 0) return false; + + Serial.printf("Passed 3rd check!\n"); + Serial.flush(); + + // -------------------PARSING REPEATABLE FLAG------------------- + // Get the repeatable flag. + char *_repeatable = strchr(_cmd + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_repeatable == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _repeatable; + + Serial.printf("Passed 4th check!\n"); + Serial.flush(); + + // Get the repeatable flag data from HEX. Move one place to the right (skip the semicolon). + int _repeatableFlagInt = strtol(_repeatable + 1, NULL, 16); + + // Repeatable flag can only be one or zero. Discard otherwise. + if (_repeatableFlagInt > 1 || _repeatableFlagInt < 0) return false; + + Serial.printf("Passed 5th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD SIZE------------------- + // Go to the next semicolon (payload size). + char *_payload = strchr(_repeatable + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_payload == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payload; + + Serial.printf("Passed 6th check!\n"); + Serial.flush(); + + // Get the number! + int _payloadSizeInt = strtol(_payload + 1, NULL, 16); + + // Go to the start of the payload by finding next semicolon. + char *_payloadDataInt = strchr(_payload + 1, TEMR_CHAR); + + if (_payloadDataInt == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payloadDataInt; + + // -------------------CHECKING THE STOP FLAG------------------- + // Go to the next semicolon, which is for the stop flag. + // For the stop flag is a little bit more complicated. Since this can be found in the payload, we need to find the last one 0xaa in the buffer. + // For that we are gonna try to go though the whole command and check if the stop flag is at the end. If not, command is considered invalid. + char *_stopFlag = strchr(_payloadDataInt + 1 + _payloadSizeInt, TEMR_CHAR); + + if (_stopFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _stopFlag; + + // Check if the stop flag is really there. If not, return with fail. + if (strstr(_stopFlag, "TE") != (_stopFlag + 1)) return false; + + // Update the stop flag position by one (move after the semicolon). + _stopFlag++; + + Serial.printf("Passed 7th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD DATA------------------- + // Increment the pointer. Now we're at the first byte of the payload. + _payloadDataInt++; + + // Check for the size. If the size is ok, fill the command, payload size and payload data start pointers. + if ((_stopFlag - _payloadDataInt - 1) == _payloadSizeInt) + { + *_command = _cmdDataInt; + *_repeatableFlag = _repeatableFlagInt; + *_payloadSize = _payloadSizeInt; + *_payloadDataStart = _payloadDataInt; + return true; + } + + Serial.printf("ERROR: stopFlag: %d payloadDataInt: %d payloadSizeInt %d\n", _stopFlag, _payloadDataInt, _payloadSizeInt); + Serial.flush(); + + // Otherwise, return null, indicating an error. + return false; +} + +void PeripheralMode::sendResponse(int _command, int _payloadSize, char *_payload) +{ + _serial->printf("TS;%04X;%04X;%s;TE\r\n", _command, _payloadSize, _payload); +} + +char* PeripheralMode::getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size) +{ + // Count already found arguments. + int _currentArgument = 0; + + // If is selected argument that does not exist, return NULL pointer as error; + if (_n >= _noOfArgs || _n < 0) return NULL; + + // Try get the wanted arguments. + // First declare two pinters; one represents start of the argument, second end. + // In initial state, start of the first argument is, well, start of the payload buffer. + // End of the first argument is start of the second argument -> semicolon. + char *_start = _inBuffer; + char *_stop = (char*)memchr((char*)(_inBuffer + 1), TEMR_CHAR, _payloadSize); + + // Run trough the loop until you hit the right argument. + while ((_currentArgument != _n) && (_start != NULL)) + { + // Copy end of the last argument and move the pointer by one place (to skip the semicolon). + _start = _stop + 1; + + // Try to find, next semicolon (or start of the next argument) + _stop = (char*)memchr((char*)(_stop + 1), TEMR_CHAR, _payloadSize - (_stop - _inBuffer) + 1); + + // Increment argument counter. + _currentArgument++; + } + + // Return what has been found and also return the size of the argument. + if (_size != NULL) *_size = _stop - _start; + return _start; +} + +int PeripheralMode::getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize) +{ + // Find the total number of arguments. + int _noOfArgs = 0; + + // Count every semicolon (add also one at the end of the payload). + for (int i = 0; i < _payloadSize + 1; i++) + { + if (_inBuffer[i] == TEMR_CHAR) _noOfArgs++; + } + + // Return the number. + return _noOfArgs; +} + +void PeripheralMode::parseCommand(int _command, int _repeat, int _payloadSize, char* _payload) +{ + // Parse the command. You can add command if needed. + // First find the number of sent arguments. + int _numberOfArgs = getNumberOfArgs(_payload, _payloadSize); + + switch(_command) + { + case CMD_PING: + { + // Payload doesn't matter here, just send the response. + sendResponse(CMD_PING, strlen((char*)_okResponseString), (char*)_okResponseString); + break; + } + case CMD_DRAW_PIXEL: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 3, _repeat); + + // Arguments can be repeated for faster transfer, so multiple pixels can be written at once. + for (int i = 0; i < _numberOfArgs; i+=3) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argColor == NULL) return; + + // Write the pixels. + _display->drawPixel(atol(_argX), atol(_argY), atol(_argColor)); + } + break; + } + case CMD_DRAW_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTVLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastVLine(atol(_argX), atol(_argY), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTHLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastHLine(atol(_argX), atol(_argY), atol(_argW), atol(_argColor)); + } + break; + } + case CMD_DRAW_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_DRAW_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_THICK_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + char *_argThick; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argThick = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL || _argThick == NULL) return; + + // Write the lines. + _display->drawThickLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor), atol(_argThick)); + } + break; + } + case CMD_DRAW_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_FILL_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_FILL_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_FILL_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_PRINT: + { + // Check the number of arguments, it can only be one and do not allow repeated payload. + if (_numberOfArgs != 1 || _repeat) return; + + // Get the arguments ant it's size. + char *_arg; + uint32_t _argSize; + _arg = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &_argSize); + + // Convert them from HEX ASCII to ASCII of the fly. + hexAsciiToAscii(_arg, _argSize); + + // Add nul-terminating char at the end of the argument (text) + _arg[_argSize / 2] = '\0'; + + // Print it on display. + _display->print(_arg); + break; + } + case CMD_SET_TEXT_SIZE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textSize; + + // Get the arguments ant it's size. + _textSize = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textSize == NULL) return; + + // Set new text size. + _display->setTextSize(atol(_textSize)); + break; + } + case CMD_SET_TEXT_COLOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_textColor; + char *_bgColor; + + // Get the arguments ant it's size. + _textColor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _bgColor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_textColor == NULL || _bgColor == NULL) return; + + // Set new text and background color. + _display->setTextColor(atol(_textColor), atol(_bgColor)); + break; + } + case CMD_SET_CURSOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_xCursor; + char *_yCursor; + + // Get the arguments ant it's size. + _xCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_xCursor == NULL || _yCursor == NULL) return; + + // Set new text cursor position. + _display->setCursor(atol(_xCursor), atol(_yCursor)); + break; + } + case CMD_SET_TEXT_WRAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textWrap; + + // Get the arguments ant it's size. + _textWrap = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textWrap == NULL) return; + + // Set text wrapping.. + _display->setTextWrap(atol(_textWrap)); + break; + } + case CMD_SET_ROTATION: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_rotation; + + // Get the arguments ant it's size. + _rotation = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_rotation == NULL) return; + + // Set text wrapping.. + _display->setRotation(atol(_rotation)); + break; + } + case CMD_SD_CARD_INIT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_init; + + // Get the arguments ant it's size. + _init = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_init == NULL && atol(_init) != 1) return; + + // Try to init microSD card + if (_display->sdCardInit()) + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_failResponseString), (char*)_failResponseString); + } + break; + } + case CMD_SD_CARD_SLEEP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_uSDSleep; + + // Get the arguments ant it's size. + _uSDSleep = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_uSDSleep == NULL && atol(_uSDSleep) != 1) return; + + // Set microSD card to sleep. + _display->sdCardSleep(); + break; + } + case CMD_DRAW_BITMAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_color; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _color = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _color == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + hexAsciiToAscii(_hexData, _argSize); + + // Display the bitmap. + _display->drawBitmap(atol(_xPos), atol(_yPos), (uint8_t*)_hexData, atol(_w), atol(_h), atol(_color)); + + break; + } + case CMD_DRAW_IMAGE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_dither; + char *_invert; + char *_path; + char *_pathType; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _dither = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _invert = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _pathType = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _path = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _dither == NULL || _invert == NULL || _pathType==NULL ||_path == NULL) return; + + if(_pathType == 0) + { + // Convert it on the fly from HEX ASCII to standard ASCII. This can be done directly in the buffer since ASCII will take up half the size of the original _path size. + hexAsciiToAscii(_path, _argSize); + + // Add null-termination at the end of the argument. + _path[_argSize / 2] = '\0'; + + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_path, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + } + else + { + char _pathNew[_argSize+1]; + strncpy(_pathNew, _path, _argSize); + _pathNew[_argSize]='\0'; + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_pathNew, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + } + + + break; + + } + case CMD_DRAW_IMAGE_BUFFER: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 4, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. + hexAsciiToAscii(_hexData, _argSize); + + // Display the image from the buffer. + _display->drawImage((const uint8_t*)_hexData, atol(_xPos), atol(_yPos), atol(_w), atol(_h)); + break; + } + case CMD_CLEAR_DISPLAY: + { + // No payload check needed, just clear the display + _display->clearDisplay(); + + break; + } + case CMD_DISPLAY: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + // Execute the command! + _display->display(); + break; + } + case CMD_READ_TEMP: + { + char response[4]; + itoa(_display->readTemperature(), response, 10); + sendResponse(CMD_READ_TEMP, strlen(response), response); + break; + } + case CMD_READ_TOUCHPAD: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + char response[1]; + itoa(_display->readTouchpad(atoi(_arg1)), response, 10); + sendResponse(CMD_READ_TOUCHPAD, strlen(response), response); + + break; + } + case CMD_READ_BATTERY: + { + Serial.println(_display->readBattery()); + char response[50]; + sprintf(response,"%lf", _display->readBattery()); + sendResponse(CMD_READ_BATTERY, strlen(response), response); + break; + } + case CMD_RTC_SET_TIME: + { + // Check the number of arguments. + if (_numberOfArgs != 3) return; + + // Get the argument. + char *_arg1; // H + char *_arg2; // M + char *_arg3; // S + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL) return; + + + + _display->rtcSetTime(atoi(_arg1), atoi(_arg2), atoi(_arg3)); + + break; + } + case CMD_RTC_SET_DATE: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Weekday + char *_arg2; // Day + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + + _display->rtcSetDate(atoi(_arg1), atoi(_arg2), atoi(_arg3), atoi(_arg4)); + break; + } + case CMD_RTC_SET_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // Epoch + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + _display->rtcSetEpoch(atoll(_arg1)); + break; + } + case CMD_RTC_UPDATE: + { + _display->rtcGetRtcData(); + break; + } + case CMD_RTC_GET_DATA_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d %d/%d/%d", _display->rtcGetHour(),_display->rtcGetMinute(), _display->rtcGetSecond(), + _display->rtcGetWeekday(), _display->rtcGetDay(), _display->rtcGetMonth(), _display->rtcGetYear()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_ALARM: + { + // Check the number of arguments. + if (_numberOfArgs != 5) return; + + // Get the argument. + char *_arg1; // sec + char *_arg2; // min + char *_arg3; // hour + char *_arg4; // day + char *_arg5; // weekday + + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _arg5 = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL || _arg5== NULL) return; + + _display->rtcEnableAlarm(); + + _display->rtcSetAlarm(atoi(_arg1),atoi(_arg2),atoi(_arg3),atoi(_arg4),atoi(_arg5)); + + break; + } + case CMD_RTC_SET_ALARM_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; // epoch + char *_arg2; // match + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + _display->rtcSetAlarmEpoch(atoll(_arg1),atoi(_arg2)); + + break; + } + case CMD_RTC_CLEAR_AL_FLAG: + { + _display->rtcClearAlarmFlag(); + break; + } + case CMD_RTC_GET_ALARM_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d-%d", _display->rtcGetAlarmHour(),_display->rtcGetAlarmMinute(), _display->rtcGetAlarmSecond(), _display->rtcGetAlarmDay(), _display->rtcGetAlarmWeekday()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_TIMER: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Source clock + char *_arg2; // + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + Inkplate::rtcCountdownSrcClock clock; + + switch(atoi(_arg1)) + { + case 0: + clock=Inkplate::TIMER_CLOCK_4096HZ; + break; + case 1: + clock=Inkplate::TIMER_CLOCK_64HZ; + break; + case 2: + clock=Inkplate::TIMER_CLOCK_1HZ; + break; + case 3: + clock=Inkplate::TIMER_CLOCK_1PER60HZ; + break; + default: + return; + + } + + _display->rtcTimerSet(clock, atoi(_arg2), atoi(_arg3), atoi(_arg4)); + + break; + } + case CMD_RTC_GET_TIMER_FLAG: + { + char response[1]; + itoa(_display->rtcCheckTimerFlag(), response, 10); + sendResponse(CMD_RTC_GET_TIMER_FLAG, strlen(response), response); + + break; + } + case CMD_RTC_CLEAR_TIMER_FLAG: + { + _display->rtcClearTimerFlag(); + break; + } + case CMD_RTC_DISABLE_TIMER: + { + _display->rtcDisableTimer(); + break; + } + case CMD_RTC_IS_SET: + { + char response[1]; + itoa(_display->rtcIsSet(), response, 10); + sendResponse(CMD_RTC_IS_SET, strlen(response), response); + break; + } + case CMD_RTC_RESET: + { + _display->rtcReset(); + break; + } + case CMD_ESP32_DEEPSLEEP: + { + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + esp_deep_sleep_start(); + break; + } + case CMD_ESP32_LIGHTSLEEP: + { + + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + delay(10); + esp_light_sleep_start(); + break; + } + case CMD_TOUCH_INIT: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_AVAILABLE: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_TOUCH_GET_DATA: + { + // Not initialized as Inkplate 5V2 doesnt have a touchscreen + break; + } + case CMD_CONNECT_WIFI: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_ssid; + char *_password; + + uint32_t ssidSize, passwordSize; + + _ssid = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &ssidSize); + _password = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &passwordSize); + + // Check if they are valid. + if (_ssid == NULL || _password == NULL) return; + + char ssid[ssidSize + 1]; + char password[passwordSize + 1]; + + strncpy(ssid, _ssid, ssidSize); + ssid[ssidSize] = '\0'; + + strncpy(password, _password, passwordSize); + password[passwordSize] = '\0'; + + + Serial.println(ssid); + Serial.println(password); + + + if(_display->connectWiFi(ssid, password)) + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + case CMD_DISCONNECT_WIFI: + { + _display->disconnect(); + break; + } + case CMD_GET_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + + // Get the arguments. + char *_server; + + uint32_t serverSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + + strncpy(server,_server, serverSize); + + server[serverSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + + // Your Domain name with URL path or IP address with path + http.begin(server); + + // Send HTTP GET request + int httpResponseCode = http.GET(); + + if (httpResponseCode>0) { + String payload = http.getString(); + sendResponse(CMD_GET_REQUEST, strlen(payload.c_str()), (char*)payload.c_str()); + } + else { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + } + else + { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + + case CMD_POST_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_server; + char *_postMessage; + + uint32_t serverSize; + uint32_t postSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + _postMessage = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &postSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + char postMessage[postSize+1]; + + strncpy(server,_server, serverSize); + strncpy(postMessage, _postMessage, postSize); + + server[serverSize]='\0'; + postMessage[postSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + // Your Domain name with URL path or IP address with path + http.begin(server); + + http.addHeader("Content-Type", "text/plain"); + + int httpResponseCode = http.POST(postMessage); + + if (httpResponseCode>0) { + sendResponse(CMD_POST_REQUEST, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else { + sendResponse(CMD_POST_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + + } + break; + } + } +} + +int PeripheralMode::hexToChar(int a, int b) +{ + return ((16 * charToInt(a)) + charToInt(b)); +} + +int PeripheralMode::charToInt(char a) +{ + // Convert to uppercase + a = toupper(a); + + if (a >= '0' && a <= '9') + return a - '0'; + if (a >= 'A' && a <= 'F') + return ((a - 'A') + 10); +} + +void PeripheralMode::checkArguments(int *_noOfArgs, int _maxArg, int _repeat) +{ + // Check the number of the arguments. + if ((*_noOfArgs) < _maxArg) return; + + // If the repeatable payload option is not enabled, restrict to only first argument. + if (!_repeat) (*_noOfArgs) = _maxArg; +} + +void PeripheralMode::hexAsciiToAscii(char *_buffer, uint32_t _size) +{ + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + for (uint32_t i = 0; i < _size; i+=2) + { + _buffer[i / 2] = hexToChar(_buffer[i], _buffer[i + 1]); + } +} \ No newline at end of file diff --git a/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/InkplatePeripheralMode.h b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/InkplatePeripheralMode.h new file mode 100644 index 000000000..be5ad3c17 --- /dev/null +++ b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/InkplatePeripheralMode.h @@ -0,0 +1,77 @@ +// Add header guards. +#ifndef __INKPLATEPERIPHERALMODE_H__ +#define __INKPLATEPERIPHERALMODE_H__ + +// Add an main Arduino header file. +#include + +// Add an Inkplate library. +#include + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +//#include + +// Make a class for the peripheral mode. +class PeripheralMode +{ + private: + // Use singleton class to not being able to use multiple instances of this class (since only makes sense to make only one Peripheral mode). + // Private constructor to prevent direct instantiation. + PeripheralMode() {} + + // Static pointer to the single instance. + static PeripheralMode* _instancePtr; + + // Pointer to the Arduino Serial object, + HardwareSerial *_serial = nullptr; + + // Pointer to the Inkplate library object, + Inkplate *_display = nullptr; + + // Variable for counting incoming serial data. + uint32_t _serialBufferIndex = 0; + + // Pointer to the allocated serial buffer in the PSRAM. + char *_serialBuffer = nullptr; + + // Size of the buffer for parsing the commands. + uint32_t _bufferSize = 0; + + // Commonly used responeses + const char *_okResponseString = "OK"; + const char *_failResponseString = "FAIL"; + + // Variable for timestamping last received data for the automatic buffer clear. + unsigned long _bufferAutoCleanTimestamp = 0; + + bool checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandEndPosition); + void sendResponse(int _command, int _payloadSize, char *_payload); + char* getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size); + int getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize); + void parseCommand(int _command, int _repeat, int _payloadSize, char* _payload); + int hexToChar(int a, int b); + int charToInt(char a); + void checkArguments(int *_noOfArgs, int _maxArg, int _repeat); + void hexAsciiToAscii(char *_buffer, uint32_t _size); + + public: + static PeripheralMode* getInstance() + { + // Check if the instance is already been made. If not, make it. + if (PeripheralMode::_instancePtr == nullptr) + { + // Make a new instance and save the address to the pointer. + PeripheralMode::_instancePtr = new PeripheralMode(); + } + + // Return the instance pointer. This way only one object is created. + return PeripheralMode::_instancePtr; + } + + bool begin(HardwareSerial *_serial, Inkplate *_inkplate, uint32_t _baud = 115200ULL, uint8_t _rxPin = -1, uint8_t _txPin = -1, uint32_t _size = SERIAL_BUFFER_SIZE); + bool getDataFromSerial(unsigned long _timeout); +}; + +#endif \ No newline at end of file diff --git a/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/commandList.h b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/commandList.h new file mode 100644 index 000000000..efc956871 --- /dev/null +++ b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/commandList.h @@ -0,0 +1,73 @@ +#ifndef __COMMAND_LIST_H__ +#define __COMMAND_LIST_H__ + +#define CMD_PING 0x0001 +// Commands from 0x01 to 0x0A are reserved for future use. Command 0x00 is invalid! + +#define CMD_DRAW_PIXEL 0x000A +#define CMD_DRAW_LINE 0x000B +#define CMD_DRAW_FASTVLINE 0x000C +#define CMD_DRAW_FASTHLINE 0x000D +#define CMD_DRAW_RECT 0x000E +#define CMD_DRAW_CIRCLE 0x000F +#define CMD_DRAW_TRIANGLE 0x0010 +#define CMD_DRAW_ROUND_RECT 0x0011 +#define CMD_DRAW_THICK_LINE 0x0012 +#define CMD_DRAW_ELIPSE 0x0013 +#define CMD_FILL_RECT 0x0014 +#define CMD_FILL_CIRCLE 0x0015 +#define CMD_FILL_TRIANGLE 0x0016 +#define CMD_FILL_ROUND_RECT 0x0017 +#define CMD_FILL_ELIPSE 0x0018 +#define CMD_PRINT 0x0019 +#define CMD_SET_TEXT_SIZE 0x001A +#define CMD_SET_TEXT_COLOR 0x001B +#define CMD_SET_CURSOR 0x001C +#define CMD_SET_TEXT_WRAP 0x001D +#define CMD_SET_ROTATION 0x001E +#define CMD_SD_CARD_INIT 0x001F +#define CMD_SD_CARD_SLEEP 0x0020 +#define CMD_DRAW_BITMAP 0x0021 +#define CMD_DRAW_IMAGE 0x0022 +#define CMD_SET_MODE 0x0023 +#define CMD_GET_MODE 0x0024 +#define CMD_CLEAR_DISPLAY 0x0025 +#define CMD_DISPLAY 0x0026 +#define CMD_PARTIAL_UPDATE 0x0027 +#define CMD_READ_TEMP 0x0028 +#define CMD_READ_TOUCHPAD 0x0029 +#define CMD_READ_BATTERY 0x002A +#define CMD_EINK_PMIC 0x002B +#define CMD_RTC_SET_TIME 0x002C +#define CMD_RTC_SET_DATE 0x002D +#define CMD_RTC_SET_EPOCH 0x002E +#define CMD_RTC_UPDATE 0x002F +#define CMD_RTC_GET_DATA_ALL 0x0030 +#define CMD_RTC_SET_ALARM 0x0031 +#define CMD_RTC_SET_ALARM_EPOCH 0x0032 +#define CMD_RTC_CLEAR_AL_FLAG 0x0033 +#define CMD_RTC_GET_ALARM_ALL 0x0034 +#define CMD_RTC_SET_TIMER 0x0035 +#define CMD_RTC_GET_TIMER_FLAG 0x0036 +#define CMD_RTC_CLEAR_TIMER_FLAG 0x0037 +#define CMD_RTC_DISABLE_TIMER 0x0038 +#define CMD_RTC_IS_SET 0x0039 +#define CMD_RTC_RESET 0x003A +#define CMD_ESP32_DEEPSLEEP 0x003B +#define CMD_ESP32_LIGHTSLEEP 0x003C +#define CMD_TOUCH_INIT 0x003D +#define CMD_TOUCH_AVAILABLE 0x003E +#define CMD_TOUCH_GET_DATA 0x003F +#define CMD_DRAW_IMAGE_BUFFER 0x0040 +#define CMD_CONNECT_WIFI 0x0041 +#define CMD_DISCONNECT_WIFI 0x0042 +#define CMD_GET_REQUEST 0x0043 +#define CMD_POST_REQUEST 0x0044 +// #define CMD_ 0x0042 +// #define CMD_ 0x0043 +// #define CMD_ 0x0044 +// #define CMD_ 0x0045 +// #define CMD_ 0x0046 +// #define CMD_ 0x0047 + +#endif diff --git a/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/settings.h b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/settings.h new file mode 100644 index 000000000..53e1874f4 --- /dev/null +++ b/examples/Inkplate6COLOR/Diagnostics/Inkplate6COLOR_Peripheral_Mode/settings.h @@ -0,0 +1,20 @@ +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +// Size of the Serial buffer (in bytes). Change if needed. It's stored in the PSRAM of the ESP32. +#define SERIAL_BUFFER_SIZE 65535 + +// Timeout for the incomming data. It's is counted from the last received char from te serial. +#define SERIAL_TIMEOUT_MS 100 + +// Define default ESP32 UART RX and TX pins +#define SERIAL_UART_RX_PIN 3 +#define SERIAL_UART_TX_PIN 1 + +// Termination char for the arguments (see documentation!) +#define TEMR_CHAR ';' + +// How long it takes to clear the buffer from unprocessed or invalid commands. +#define SERIAL_BUFFER_CLEAN_TIME_MS 60000ULL + +#endif diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h deleted file mode 100644 index 7f2ed9e6b..000000000 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h +++ /dev/null @@ -1,203 +0,0 @@ -// 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 Open_Sans_SemiBold_16Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xDB, 0x6D, 0xB6, 0x03, 0x60, // '!' - 0xDB, 0x6D, 0xB6, // '"' - 0x09, 0x03, 0x20, 0x6C, 0x3F, 0xE1, 0x20, 0x24, 0x04, 0x87, 0xFC, 0x36, 0x04, 0xC0, 0x90, 0x12, 0x00, // '#' - 0x10, 0x10, 0x7C, 0xFE, 0xD0, 0xD0, 0x78, 0x3C, 0x16, 0x96, 0xFE, 0xFC, 0x10, 0x10, // '$' - 0x70, 0xC6, 0x84, 0x26, 0x61, 0x32, 0x09, 0xB0, 0x69, 0x71, 0xD2, 0xC1, 0xB2, 0x09, 0x90, 0xCC, 0x84, 0x2C, - 0x61, 0xC0, // '%' - 0x3C, 0x07, 0xE0, 0x66, 0x06, 0x60, 0x6C, 0x03, 0x80, 0x78, 0xCC, 0xCC, 0xC7, 0x8C, 0x38, 0xFF, 0x87, 0xCC, // '&' - 0xDB, 0x60, // ''' - 0x23, 0x11, 0x8C, 0x42, 0x10, 0x84, 0x31, 0x84, 0x30, 0x80, // '(' - 0x43, 0x08, 0x63, 0x08, 0x42, 0x10, 0x8C, 0x62, 0x31, 0x00, // ')' - 0x10, 0x10, 0xD6, 0xFE, 0x38, 0x6C, 0x44, // '*' - 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, // '+' - 0x66, 0x44, // ',' - 0xEE, // '-' - 0xD8, // '.' - 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x00, // '/' - 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, // '0' - 0x18, 0xEF, 0x96, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, // '1' - 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x08, 0x10, 0x20, 0xC0, 0xFE, 0xFE, // '2' - 0x7C, 0xFE, 0x86, 0x06, 0x04, 0x78, 0x7C, 0x06, 0x06, 0x06, 0xFE, 0xF8, // '3' - 0x06, 0x03, 0x80, 0xE0, 0x78, 0x16, 0x0D, 0x86, 0x61, 0x18, 0xFF, 0xBF, 0xE0, 0x60, 0x18, // '4' - 0x7C, 0xFC, 0xC0, 0xC0, 0xFC, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFC, 0xF8, // '5' - 0x1E, 0x7E, 0x60, 0xC0, 0xFC, 0xFE, 0xC6, 0xC2, 0xC2, 0xC6, 0x7E, 0x3C, // '6' - 0xFE, 0xFE, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, // '7' - 0x7C, 0xFE, 0xC6, 0xC6, 0x64, 0x38, 0x7C, 0xC6, 0x82, 0xC6, 0xFE, 0x7C, // '8' - 0x78, 0xFC, 0xC6, 0xC6, 0x86, 0xC6, 0xFE, 0x7E, 0x06, 0x0C, 0xFC, 0xF0, // '9' - 0xD8, 0x00, 0x06, 0xC0, // ':' - 0x66, 0x00, 0x00, 0x06, 0x64, 0x40, // ';' - 0x02, 0x0E, 0x38, 0xE0, 0xC0, 0x38, 0x0E, 0x02, // '<' - 0xFE, 0x00, 0x00, 0x00, 0xFE, // '=' - 0x80, 0xE0, 0x38, 0x0E, 0x06, 0x38, 0xE0, 0x80, // '>' - 0x78, 0xFC, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, // '?' - 0x0F, 0x81, 0xC6, 0x18, 0x08, 0x9F, 0x6D, 0x99, 0x4C, 0xCA, 0x46, 0x52, 0x32, 0x99, 0xB6, 0x77, 0x10, 0x00, - 0x61, 0x01, 0xF8, 0x00, // '@' - 0x0E, 0x00, 0xE0, 0x0A, 0x01, 0xB0, 0x1B, 0x03, 0x18, 0x31, 0x83, 0xF8, 0x7F, 0xC6, 0x0C, 0x60, 0xCC, 0x06, // 'A' - 0xFC, 0x7F, 0x21, 0xD0, 0x68, 0x67, 0xF3, 0xF9, 0x06, 0x83, 0x41, 0xBF, 0xDF, 0x80, // 'B' - 0x1F, 0x3F, 0x98, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x1F, 0xC3, 0xE0, // 'C' - 0xFC, 0x3F, 0x88, 0x72, 0x0E, 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x83, 0xA1, 0xCF, 0xE3, 0xF0, // 'D' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x03, 0xF7, 0xE0, // 'E' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x02, 0x04, 0x00, // 'F' - 0x1F, 0x87, 0xF1, 0xC0, 0x70, 0x0C, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE0, 0xCE, 0x19, 0xFF, 0x0F, 0xC0, // 'G' - 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x81, 0xBF, 0xEF, 0xFA, 0x06, 0x81, 0xA0, 0x68, 0x1A, 0x06, // 'H' - 0xAA, 0xAA, 0xAA, // 'I' - 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x63, 0x7B, 0x80, // 'J' - 0xC3, 0x30, 0xCC, 0x63, 0x30, 0xD8, 0x36, 0x0F, 0x83, 0x30, 0xC6, 0x31, 0x8C, 0x33, 0x06, // 'K' - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xFE, // 'L' - 0xC0, 0x6E, 0x0E, 0xE0, 0xEA, 0x0A, 0xB1, 0xAB, 0x12, 0x91, 0x29, 0xB2, 0x9A, 0x28, 0xE2, 0x8E, 0x28, 0xC2, // 'M' - 0xC0, 0xB8, 0x2E, 0x0A, 0xC2, 0xB8, 0xA6, 0x28, 0xCA, 0x3A, 0x86, 0xA0, 0xE8, 0x3A, 0x06, // 'N' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0xC1, 0xF0, // 'O' - 0xF8, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x80, 0x80, 0x80, 0x80, // 'P' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0x81, 0xF0, - 0x03, 0x80, 0x18, 0x00, 0xC0, // 'Q' - 0xFC, 0x3F, 0x8C, 0x73, 0x0C, 0xC3, 0x31, 0xCF, 0xE3, 0xF0, 0xCC, 0x31, 0x8C, 0x33, 0x0E, // 'R' - 0x7C, 0xFE, 0xC2, 0xC0, 0xE0, 0x78, 0x1C, 0x06, 0x06, 0x86, 0xFE, 0xFC, // 'S' - 0xFF, 0xBF, 0xE0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'T' - 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xCC, 0x31, 0xFE, 0x0F, 0x00, // 'U' - 0xC0, 0xD8, 0x11, 0x86, 0x30, 0xC6, 0x10, 0x66, 0x0C, 0xC1, 0x90, 0x1E, 0x03, 0xC0, 0x70, 0x06, 0x00, // 'V' - 0xC3, 0x86, 0xC3, 0x86, 0x63, 0x8C, 0x62, 0x8C, 0x66, 0xCC, 0x66, 0xCC, 0x24, 0xC8, 0x34, 0x58, 0x3C, 0x78, - 0x3C, 0x78, 0x18, 0x30, 0x18, 0x30, // 'W' - 0x61, 0x8C, 0x30, 0xCC, 0x19, 0x81, 0xE0, 0x18, 0x07, 0x80, 0xF0, 0x33, 0x06, 0x61, 0x86, 0x60, 0x60, // 'X' - 0xC1, 0x98, 0xC6, 0x30, 0xD8, 0x36, 0x07, 0x01, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'Y' - 0xFE, 0x7F, 0x01, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x3F, 0xDF, 0xE0, // 'Z' - 0xF6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xC0, // '[' - 0xC0, 0x81, 0x83, 0x02, 0x06, 0x0C, 0x08, 0x18, 0x30, 0x20, 0x60, // '\' - 0xF1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1B, 0xC0, // ']' - 0x08, 0x07, 0x01, 0x40, 0x98, 0x22, 0x10, 0xCC, 0x10, // '^' - 0xFE, // '_' - 0xC4, 0x20, // '`' - 0x7C, 0x7E, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xFE, 0x76, // 'a' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB8, 0xDF, 0xCD, 0xE0, // 'b' - 0x3C, 0xFB, 0x06, 0x0C, 0x18, 0x30, 0x3E, 0x3C, // 'c' - 0x03, 0x01, 0x80, 0xC0, 0x67, 0xB3, 0xFB, 0x1D, 0x86, 0xC3, 0x61, 0xB1, 0xDF, 0xE7, 0xB0, // 'd' - 0x3C, 0x7E, 0xC6, 0xFE, 0xFE, 0xC0, 0xC0, 0x7E, 0x3C, // 'e' - 0x1E, 0x3C, 0x30, 0x30, 0x7C, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // 'f' - 0x3F, 0x99, 0x86, 0x31, 0x8C, 0x62, 0x0F, 0x06, 0x01, 0xFC, 0x7F, 0x30, 0x6C, 0x1B, 0x0C, 0x7E, 0x00, // 'g' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x30, // 'h' - 0xD8, 0x0D, 0xB6, 0xDB, 0x6C, // 'i' - 0x31, 0x80, 0x03, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDE, 0xE0, // 'j' - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x66, 0x63, 0x61, 0xB0, 0xF8, 0x7C, 0x33, 0x18, 0xCC, 0x70, // 'k' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6C, // 'l' - 0xDC, 0xF3, 0xFF, 0xEE, 0x71, 0xB0, 0xC6, 0xC2, 0x1B, 0x08, 0x6C, 0x21, 0xB0, 0x86, 0xC2, 0x18, // 'm' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x00, // 'n' - 0x3C, 0x3F, 0x30, 0xD8, 0x6C, 0x36, 0x1B, 0x0C, 0xFC, 0x3C, 0x00, // 'o' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x8D, 0xFC, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x00, // 'p' - 0x7B, 0x3F, 0xB1, 0xD8, 0x6C, 0x36, 0x1B, 0x1D, 0xFE, 0x7B, 0x01, 0x80, 0xC0, 0x60, 0x30, // 'q' - 0xDD, 0xFB, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 'r' - 0x79, 0xFB, 0x17, 0x07, 0x81, 0x83, 0x7E, 0xF8, // 's' - 0x20, 0x41, 0xF7, 0xE6, 0x0C, 0x18, 0x30, 0x60, 0x78, 0xF0, // 't' - 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x1C, 0xFE, 0x7B, 0x00, // 'u' - 0xC1, 0x90, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x40, 0x70, 0x1C, 0x00, // 'v' - 0xC7, 0x19, 0x1C, 0x46, 0x53, 0x19, 0x4C, 0x6D, 0xB0, 0xB6, 0x83, 0x8E, 0x0E, 0x38, 0x38, 0xE0, // 'w' - 0x63, 0x18, 0xC3, 0x60, 0x70, 0x1C, 0x07, 0x03, 0x61, 0x8C, 0x63, 0x00, // 'x' - 0xC1, 0x98, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x60, 0x70, 0x1C, 0x06, 0x01, 0x83, 0xC0, 0xE0, 0x00, // 'y' - 0xFD, 0xF8, 0x30, 0xC3, 0x0C, 0x30, 0x7E, 0xFC, // 'z' - 0x1C, 0x70, 0xC1, 0x83, 0x06, 0x38, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x03, 0x07, 0x00, // '{' - 0xAA, 0xAA, 0xAA, 0xAA, 0x80, // '|' - 0xE0, 0xE0, 0xC1, 0x83, 0x06, 0x07, 0x1C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_16Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 5, 0, 0}, // ' ' - {1, 3, 12, 5, 1, -12}, // '!' - {6, 6, 4, 8, 1, -12}, // '"' - {9, 11, 12, 11, 0, -12}, // '#' - {26, 8, 14, 10, 1, -13}, // '$' - {40, 13, 12, 15, 1, -12}, // '%' - {60, 12, 12, 13, 1, -12}, // '&' - {78, 3, 4, 5, 1, -12}, // ''' - {80, 5, 15, 6, 1, -12}, // '(' - {90, 5, 15, 6, 0, -12}, // ')' - {100, 8, 7, 10, 1, -13}, // '*' - {107, 8, 7, 10, 1, -9}, // '+' - {114, 4, 4, 5, 0, -2}, // ',' - {116, 4, 2, 6, 1, -5}, // '-' - {117, 3, 2, 5, 1, -2}, // '.' - {118, 7, 12, 7, 0, -12}, // '/' - {129, 8, 12, 10, 1, -12}, // '0' - {141, 6, 12, 10, 1, -12}, // '1' - {150, 8, 12, 10, 1, -12}, // '2' - {162, 8, 12, 10, 1, -12}, // '3' - {174, 10, 12, 10, 0, -12}, // '4' - {189, 8, 12, 10, 1, -12}, // '5' - {201, 8, 12, 10, 1, -12}, // '6' - {213, 8, 12, 10, 1, -12}, // '7' - {225, 8, 12, 10, 1, -12}, // '8' - {237, 8, 12, 10, 1, -12}, // '9' - {249, 3, 9, 5, 1, -9}, // ':' - {253, 4, 11, 5, 0, -9}, // ';' - {259, 8, 8, 10, 1, -10}, // '<' - {267, 8, 5, 10, 1, -8}, // '=' - {272, 8, 8, 10, 1, -10}, // '>' - {280, 8, 12, 8, 0, -12}, // '?' - {292, 13, 13, 15, 1, -12}, // '@' - {314, 12, 12, 12, 0, -12}, // 'A' - {332, 9, 12, 12, 2, -12}, // 'B' - {346, 9, 12, 11, 1, -12}, // 'C' - {360, 10, 12, 13, 2, -12}, // 'D' - {375, 7, 12, 10, 2, -12}, // 'E' - {386, 7, 12, 10, 2, -12}, // 'F' - {397, 11, 12, 13, 1, -12}, // 'G' - {414, 10, 12, 13, 2, -12}, // 'H' - {429, 2, 12, 6, 2, -12}, // 'I' - {432, 5, 15, 6, -1, -12}, // 'J' - {442, 10, 12, 11, 1, -12}, // 'K' - {457, 8, 12, 10, 2, -12}, // 'L' - {469, 12, 12, 16, 2, -12}, // 'M' - {487, 10, 12, 14, 2, -12}, // 'N' - {502, 12, 12, 14, 1, -12}, // 'O' - {520, 8, 12, 11, 2, -12}, // 'P' - {532, 12, 15, 14, 1, -12}, // 'Q' - {555, 10, 12, 11, 1, -12}, // 'R' - {570, 8, 12, 10, 1, -12}, // 'S' - {582, 10, 12, 10, 0, -12}, // 'T' - {597, 11, 12, 13, 1, -12}, // 'U' - {614, 11, 12, 11, 0, -12}, // 'V' - {631, 16, 12, 16, 0, -12}, // 'W' - {655, 11, 12, 11, 0, -12}, // 'X' - {672, 10, 12, 10, 0, -12}, // 'Y' - {687, 9, 12, 10, 1, -12}, // 'Z' - {701, 5, 15, 6, 1, -12}, // '[' - {711, 7, 12, 7, 0, -12}, // '\' - {722, 5, 15, 6, 0, -12}, // ']' - {732, 10, 7, 10, 0, -12}, // '^' - {741, 8, 1, 8, 0, 1}, // '_' - {742, 4, 3, 10, 3, -13}, // '`' - {744, 8, 9, 10, 1, -9}, // 'a' - {753, 9, 13, 11, 1, -13}, // 'b' - {768, 7, 9, 9, 1, -9}, // 'c' - {776, 9, 13, 11, 1, -13}, // 'd' - {791, 8, 9, 10, 1, -9}, // 'e' - {800, 8, 13, 7, 0, -13}, // 'f' - {813, 10, 13, 10, 0, -9}, // 'g' - {830, 9, 13, 11, 1, -13}, // 'h' - {845, 3, 13, 5, 1, -13}, // 'i' - {850, 5, 17, 5, -1, -13}, // 'j' - {861, 9, 13, 10, 1, -13}, // 'k' - {876, 3, 13, 5, 1, -13}, // 'l' - {881, 14, 9, 16, 1, -9}, // 'm' - {897, 9, 9, 11, 1, -9}, // 'n' - {908, 9, 9, 11, 1, -9}, // 'o' - {919, 9, 13, 11, 1, -9}, // 'p' - {934, 9, 13, 11, 1, -9}, // 'q' - {949, 7, 9, 8, 1, -9}, // 'r' - {957, 7, 9, 9, 1, -9}, // 's' - {965, 7, 11, 7, 0, -11}, // 't' - {975, 9, 9, 11, 1, -9}, // 'u' - {986, 10, 9, 10, 0, -9}, // 'v' - {998, 14, 9, 14, 0, -9}, // 'w' - {1014, 10, 9, 10, 0, -9}, // 'x' - {1026, 10, 13, 10, 0, -9}, // 'y' - {1043, 7, 9, 9, 1, -9}, // 'z' - {1051, 7, 15, 7, 0, -12}, // '{' - {1065, 2, 17, 10, 4, -13}, // '|' - {1070, 7, 15, 7, 0, -12} // '}' -}; -const GFXfont Open_Sans_SemiBold_16 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_16Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_16Glyphs, 0x20, 0x7E, 23}; \ No newline at end of file diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h deleted file mode 100644 index 0fa23e60d..000000000 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h +++ /dev/null @@ -1,276 +0,0 @@ -// 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 Open_Sans_SemiBold_24Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x0E, 0xEE, 0xE0, // '!' - 0x66, 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x30, // '"' - 0x06, 0x30, 0x0C, 0x60, 0x18, 0xC0, 0x71, 0x80, 0xC6, 0x0F, 0xFF, 0x9F, 0xFF, 0x06, 0x30, 0x18, 0xE0, 0x31, - 0x83, 0xFF, 0xF7, 0xFF, 0xE3, 0x8C, 0x06, 0x38, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, // '#' - 0x06, 0x00, 0x30, 0x07, 0xF0, 0xFF, 0xC7, 0x66, 0x73, 0x03, 0x98, 0x0E, 0xC0, 0x7E, 0x00, 0xFC, 0x01, 0xF8, - 0x0D, 0xC0, 0x67, 0x03, 0x3B, 0x1B, 0x9F, 0xFC, 0x7F, 0x80, 0x30, 0x01, 0x80, // '$' - 0x3C, 0x06, 0x07, 0xE0, 0xE0, 0xE6, 0x0C, 0x0C, 0x71, 0x80, 0xC7, 0x18, 0x0C, 0x73, 0x00, 0xC7, 0x70, 0x0E, - 0x66, 0x78, 0x7E, 0xEF, 0xC3, 0xCC, 0xCE, 0x01, 0xDC, 0x60, 0x19, 0xC6, 0x03, 0x1C, 0x60, 0x71, 0xC6, 0x06, - 0x0C, 0xE0, 0xE0, 0xFC, 0x0C, 0x07, 0x80, // '%' - 0x0F, 0x80, 0x0F, 0xF0, 0x03, 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x0E, 0x70, 0x01, 0xFC, 0x00, 0x3C, 0x00, - 0x3F, 0x07, 0x1F, 0xE1, 0xCF, 0x3C, 0xE3, 0x83, 0xB8, 0xE0, 0x7C, 0x38, 0x0F, 0x07, 0x0F, 0xC1, 0xFF, 0xB8, - 0x1F, 0x87, 0x00, // '&' - 0xDB, 0x6D, 0x80, // ''' - 0x1C, 0x30, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xE0, 0xC1, - 0xC0, // '(' - 0xE0, 0xC1, 0xC1, 0x83, 0x83, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x71, 0xC3, 0x0E, - 0x00, // ')' - 0x0E, 0x00, 0xE0, 0x0E, 0x08, 0x42, 0xFF, 0xEF, 0xFE, 0x0E, 0x01, 0xB0, 0x3B, 0x83, 0x18, 0x11, 0x00, // '*' - 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x7F, 0xFB, 0xFF, 0xC0, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, // '+' - 0x73, 0x39, 0xCC, 0x60, // ',' - 0xFD, 0xF8, // '-' - 0xEE, 0xEE, // '.' - 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x07, - 0x01, 0x80, 0xE0, 0x00, // '/' - 0x1F, 0x01, 0xFE, 0x1C, 0x38, 0xE1, 0xCE, 0x06, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x71, 0xC3, 0x87, 0xF8, 0x0F, 0x80, // '0' - 0x0E, 0x1E, 0x3E, 0xF6, 0xE6, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // '1' - 0x1F, 0x83, 0xFE, 0x1C, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF0, // '2' - 0x3F, 0x87, 0xFE, 0x18, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0x00, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x7B, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '3' - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x1B, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0x38, 0x0E, 0x70, 0x38, 0xE0, 0x61, - 0xC1, 0x83, 0x87, 0xFF, 0xEF, 0xFF, 0xC0, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, // '4' - 0x7F, 0xE3, 0xFF, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x73, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '5' - 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x9E, 0x1F, 0xFC, 0xF0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x39, 0xE3, 0x87, 0xF8, 0x0F, 0x80, // '6' - 0xFF, 0xF7, 0xFF, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, - 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x38, 0x00, // '7' - 0x1F, 0x81, 0xFE, 0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x38, 0x71, 0xE7, 0x07, 0xF0, 0x1F, 0x83, 0xDE, 0x1C, 0x39, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0xC3, 0x8F, 0xFC, 0x1F, 0x80, // '8' - 0x1F, 0x01, 0xFE, 0x1C, 0x79, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0x70, 0xF3, 0xFF, 0x87, 0xDC, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x0F, 0x0F, 0xF0, 0x7E, 0x00, // '9' - 0xEE, 0xEE, 0x00, 0x00, 0x0E, 0xEE, 0xE0, // ':' - 0x73, 0x9C, 0xE0, 0x00, 0x00, 0x00, 0x1C, 0xE6, 0x73, 0x18, // ';' - 0x00, 0x10, 0x03, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3C, - 0x00, 0x20, // '<' - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, // '=' - 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, 0x3C, 0x01, - 0x00, 0x00, // '>' - 0x3F, 0x1F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x80, 0x70, 0x0E, 0x00, 0x00, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, // '?' - 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0x80, 0xE0, 0x30, 0x01, 0x83, 0x00, 0x0E, 0x38, 0x7E, 0x31, 0x8F, 0xF1, - 0x8C, 0x61, 0x86, 0xE7, 0x0C, 0x36, 0x30, 0x63, 0xB1, 0x83, 0x19, 0xCE, 0x38, 0xC6, 0x3F, 0xFC, 0x30, 0xF1, - 0xC1, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0x00, // '@' - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x66, 0x00, 0x73, 0x80, 0x39, 0xC0, 0x18, 0x60, 0x1C, - 0x38, 0x0E, 0x1C, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0x81, 0xC3, 0x80, 0x71, 0xC0, 0x38, 0xC0, 0x1C, 0xE0, 0x07, - 0x00, // 'A' - 0xFF, 0x83, 0xFF, 0x8E, 0x0F, 0x38, 0x1C, 0xE0, 0x73, 0x81, 0xCE, 0x0E, 0x3F, 0xF0, 0xFF, 0xE3, 0x83, 0xCE, - 0x07, 0x38, 0x0E, 0xE0, 0x3B, 0x81, 0xEE, 0x0F, 0x3F, 0xF8, 0xFF, 0xC0, // 'B' - 0x07, 0xF0, 0x7F, 0xE3, 0xC1, 0x8E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x87, 0xFE, 0x07, 0xF0, // 'C' - 0xFF, 0x80, 0xFF, 0xE0, 0xE0, 0xF0, 0xE0, 0x38, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x38, 0xE0, 0xF0, 0xFF, 0xE0, 0xFF, 0x80, // 'D' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0xFC, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'E' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'F' - 0x03, 0xF8, 0x1F, 0xF8, 0xF8, 0x21, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0xFD, 0xC1, - 0xF9, 0x80, 0x73, 0x80, 0xE7, 0x01, 0xCF, 0x03, 0x8F, 0x07, 0x0F, 0xFE, 0x07, 0xF8, // 'G' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1C, // 'H' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, // 'I' - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x1C, 0xFC, 0xF0, // 'J' - 0xE0, 0x73, 0x83, 0xCE, 0x0E, 0x38, 0x70, 0xE3, 0x83, 0x9C, 0x0E, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xDC, 0x0E, - 0x78, 0x38, 0xE0, 0xE1, 0xC3, 0x87, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x78, // 'K' - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'L' - 0xF0, 0x03, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7C, 0x03, 0xEF, 0xC0, 0xFD, 0xD8, 0x1B, 0xBB, 0x07, 0x77, 0x70, - 0xCE, 0xE6, 0x19, 0xDC, 0xC7, 0x3B, 0x9C, 0xC7, 0x71, 0x98, 0xEE, 0x3F, 0x1D, 0xC7, 0xC3, 0xB8, 0x78, 0x77, - 0x0F, 0x0E, 0xE1, 0xC1, 0xC0, // 'M' - 0xF0, 0x0E, 0xF8, 0x0E, 0xF8, 0x0E, 0xFC, 0x0E, 0xFE, 0x0E, 0xEE, 0x0E, 0xE7, 0x0E, 0xE7, 0x0E, 0xE3, 0x8E, - 0xE1, 0xCE, 0xE1, 0xCE, 0xE0, 0xEE, 0xE0, 0xFE, 0xE0, 0x7E, 0xE0, 0x3E, 0xE0, 0x3E, 0xE0, 0x1E, // 'N' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, // 'O' - 0xFF, 0x87, 0xFF, 0x38, 0x39, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x3C, 0xFF, 0xC7, 0xF8, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x00, // 'P' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, // 'Q' - 0xFF, 0x03, 0xFF, 0x0E, 0x1E, 0x38, 0x38, 0xE0, 0xE3, 0x83, 0x8E, 0x0E, 0x38, 0x78, 0xFF, 0xC3, 0xFC, 0x0E, - 0x38, 0x38, 0xE0, 0xE1, 0xC3, 0x83, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x70, // 'R' - 0x1F, 0x87, 0xFC, 0x70, 0x4E, 0x00, 0xE0, 0x0E, 0x00, 0x78, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0xC1, 0xCF, 0xFC, 0x7F, 0x00, // 'S' - 0xFF, 0xFD, 0xFF, 0xF8, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'T' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1D, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xCE, 0x07, 0x1E, 0x1E, 0x1F, 0xF8, 0x0F, 0xC0, // 'U' - 0xE0, 0x0E, 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x1C, 0x30, 0x18, 0x38, 0x38, 0x38, 0x38, 0x18, 0x30, 0x1C, 0x70, - 0x1C, 0x70, 0x0C, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x06, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, // 'V' - 0xE0, 0x38, 0x0E, 0x60, 0x38, 0x0C, 0x70, 0x7C, 0x1C, 0x70, 0x7C, 0x1C, 0x70, 0x6C, 0x1C, 0x30, 0xEC, 0x18, - 0x38, 0xEE, 0x38, 0x38, 0xCE, 0x38, 0x38, 0xC6, 0x38, 0x19, 0xC7, 0x30, 0x1D, 0xC7, 0x70, 0x1D, 0x83, 0x70, - 0x1D, 0x83, 0x70, 0x0F, 0x83, 0xE0, 0x0F, 0x01, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xC0, // 'W' - 0x70, 0x1C, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0xC0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x38, 0x38, 0x70, 0x1C, 0xE0, 0x1E, // 'X' - 0xE0, 0x1C, 0xE0, 0x71, 0xC0, 0xE1, 0xC3, 0x83, 0x87, 0x03, 0x9C, 0x07, 0x38, 0x07, 0xE0, 0x07, 0x80, 0x0F, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'Y' - 0xFF, 0xF7, 0xFF, 0x80, 0x38, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0x80, 0x1F, 0xFE, 0xFF, 0xF0, // 'Z' - 0xFB, 0xEC, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3E, 0xF8, // '[' - 0xE0, 0x18, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, // '\' - 0xFB, 0xE1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0xBE, 0xF8, // ']' - 0x06, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x60, 0x1D, 0x80, 0x63, 0x03, 0x8C, 0x0C, 0x18, 0x30, 0x61, 0x80, 0xC6, - 0x03, 0x00, // '^' - 0xFF, 0xDF, 0xF8, // '_' - 0xF0, 0xE0, 0xE0, 0xE0, // '`' - 0x1F, 0x83, 0xFC, 0x30, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x7F, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'a' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x77, 0xC3, 0xFF, 0x1E, 0x1C, 0xE0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x83, 0x9E, 0x1C, 0xDF, 0xC6, 0x7C, 0x00, // 'b' - 0x0F, 0xC7, 0xF9, 0xE0, 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE1, 0x1F, 0xE1, 0xF8, // 'c' - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x0F, 0xB8, 0xFF, 0xCE, 0x1E, 0x70, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x39, 0xC1, 0xCE, 0x1E, 0x3F, 0xF0, 0xF9, 0x80, // 'd' - 0x0F, 0x81, 0xFE, 0x1C, 0x38, 0xE0, 0xEE, 0x07, 0x7F, 0xFB, 0xFF, 0xDC, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x08, - 0x7F, 0xC0, 0xFC, 0x00, // 'e' - 0x07, 0xC3, 0xF0, 0x70, 0x0C, 0x01, 0x80, 0xFF, 0x3F, 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, - 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, // 'f' - 0x0F, 0xF8, 0xFF, 0xE3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x83, 0x8E, 0x0F, 0xF0, 0x1F, 0x80, 0xC0, 0x03, - 0x00, 0x0F, 0xF8, 0x3F, 0xF1, 0xC1, 0xCE, 0x03, 0x38, 0x0C, 0xE0, 0x71, 0xFF, 0x83, 0xF8, 0x00, // 'g' - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0xF8, 0xFF, 0xCF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, // 'h' - 0xEE, 0xE0, 0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'i' - 0x1C, 0x38, 0x70, 0x00, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, - 0xC3, 0xBE, 0x78, // 'j' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x73, 0x87, 0x1C, 0x70, 0xE7, 0x07, 0x70, 0x3F, 0x01, - 0xFC, 0x0F, 0xF0, 0x73, 0x83, 0x8E, 0x1C, 0x38, 0xE0, 0xE7, 0x07, 0x80, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xCF, 0x8F, 0x8D, 0xFD, 0xFC, 0xF1, 0xF0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, - 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xE0, // 'm' - 0xCF, 0x8D, 0xFC, 0xF0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xE0, // 'n' - 0x0F, 0x80, 0xFF, 0x87, 0x8F, 0x1C, 0x1C, 0xE0, 0x3B, 0x80, 0xEE, 0x03, 0xB8, 0x0E, 0xE0, 0x39, 0xC1, 0xC7, - 0x8F, 0x0F, 0xF8, 0x0F, 0x80, // 'o' - 0xCF, 0x86, 0xFE, 0x3C, 0x39, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x07, 0x3C, 0x39, - 0xFF, 0x8E, 0xF8, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, // 'p' - 0x1F, 0x31, 0xFF, 0x9C, 0x3C, 0xE0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x73, 0x83, 0x9C, 0x3C, - 0x7F, 0xE1, 0xF7, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, // 'q' - 0xCF, 0x6F, 0x3F, 0x9E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, // 'r' - 0x3F, 0x8F, 0xF3, 0x82, 0x70, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x3C, 0x01, 0xC0, 0x3B, 0x07, 0x7F, 0xC7, 0xF0, // 's' - 0x18, 0x0C, 0x0E, 0x0F, 0xEF, 0xF1, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0x7C, 0x1E, // 't' - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'u' - 0xE0, 0x39, 0x80, 0xC7, 0x07, 0x1C, 0x1C, 0x30, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xD8, 0x03, 0xE0, 0x07, 0x00, // 'v' - 0xE0, 0xF0, 0x73, 0x07, 0x83, 0x1C, 0x3C, 0x38, 0xE3, 0xF1, 0xC3, 0x1B, 0x8C, 0x1C, 0xCC, 0xE0, 0xE6, 0x67, - 0x07, 0x73, 0xB8, 0x1B, 0x0D, 0x80, 0xD8, 0x7C, 0x07, 0xC3, 0xE0, 0x1C, 0x1E, 0x00, 0xE0, 0x70, 0x00, // 'w' - 0x70, 0x70, 0xE3, 0x83, 0x8E, 0x07, 0x70, 0x0D, 0x80, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x1D, 0xC0, 0x77, 0x03, - 0x8E, 0x1C, 0x1C, 0x70, 0x70, // 'x' - 0xE0, 0x39, 0xC1, 0xC7, 0x07, 0x1C, 0x1C, 0x38, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xF8, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x00, // 'y' - 0xFF, 0xBF, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0xFE, 0xFF, 0x80, // 'z' - 0x0E, 0x1E, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0xF0, 0xE0, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x1C, 0x1E, 0x06, // '{' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // '|' - 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x1E, 0x0E, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x70, 0xF0, 0xE0 // '}' -}; -const GFXglyph Open_Sans_SemiBold_24Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 7, 0, 0}, // ' ' - {1, 4, 17, 8, 2, -17}, // '!' - {10, 9, 6, 11, 1, -17}, // '"' - {17, 15, 17, 17, 1, -17}, // '#' - {49, 13, 19, 15, 1, -18}, // '$' - {80, 20, 17, 22, 1, -17}, // '%' - {123, 18, 17, 19, 1, -17}, // '&' - {162, 3, 6, 7, 2, -17}, // ''' - {165, 7, 21, 9, 1, -17}, // '(' - {184, 7, 21, 9, 1, -17}, // ')' - {203, 12, 11, 14, 1, -18}, // '*' - {220, 13, 12, 15, 1, -15}, // '+' - {240, 5, 6, 7, 1, -3}, // ',' - {244, 7, 2, 9, 1, -8}, // '-' - {246, 4, 4, 8, 2, -4}, // '.' - {248, 10, 17, 10, 0, -17}, // '/' - {270, 13, 17, 15, 1, -17}, // '0' - {298, 8, 17, 15, 2, -17}, // '1' - {315, 13, 17, 15, 1, -17}, // '2' - {343, 13, 17, 15, 1, -17}, // '3' - {371, 15, 17, 15, 0, -17}, // '4' - {403, 13, 17, 15, 1, -17}, // '5' - {431, 13, 17, 15, 1, -17}, // '6' - {459, 13, 17, 15, 1, -17}, // '7' - {487, 13, 17, 15, 1, -17}, // '8' - {515, 13, 17, 15, 1, -17}, // '9' - {543, 4, 13, 8, 2, -13}, // ':' - {550, 5, 16, 8, 1, -13}, // ';' - {560, 13, 12, 15, 1, -15}, // '<' - {580, 13, 7, 15, 1, -12}, // '=' - {592, 13, 12, 15, 1, -15}, // '>' - {612, 11, 17, 12, 0, -17}, // '?' - {636, 21, 19, 23, 1, -17}, // '@' - {686, 17, 17, 17, 0, -17}, // 'A' - {723, 14, 17, 17, 2, -17}, // 'B' - {753, 14, 17, 16, 1, -17}, // 'C' - {783, 16, 17, 19, 2, -17}, // 'D' - {817, 11, 17, 14, 2, -17}, // 'E' - {841, 11, 17, 14, 2, -17}, // 'F' - {865, 15, 17, 18, 1, -17}, // 'G' - {897, 15, 17, 19, 2, -17}, // 'H' - {929, 4, 17, 8, 2, -17}, // 'I' - {938, 8, 22, 8, -2, -17}, // 'J' - {960, 14, 17, 16, 2, -17}, // 'K' - {990, 11, 17, 14, 2, -17}, // 'L' - {1014, 19, 17, 23, 2, -17}, // 'M' - {1055, 16, 17, 20, 2, -17}, // 'N' - {1089, 18, 17, 20, 1, -17}, // 'O' - {1128, 13, 17, 16, 2, -17}, // 'P' - {1156, 18, 21, 20, 1, -17}, // 'Q' - {1204, 14, 17, 16, 2, -17}, // 'R' - {1234, 12, 17, 14, 1, -17}, // 'S' - {1260, 15, 17, 15, 0, -17}, // 'T' - {1292, 15, 17, 19, 2, -17}, // 'U' - {1324, 16, 17, 16, 0, -17}, // 'V' - {1358, 24, 17, 24, 0, -17}, // 'W' - {1409, 16, 17, 16, 0, -17}, // 'X' - {1443, 15, 17, 15, 0, -17}, // 'Y' - {1475, 13, 17, 15, 1, -17}, // 'Z' - {1503, 6, 21, 9, 2, -17}, // '[' - {1519, 10, 17, 10, 0, -17}, // '\' - {1541, 6, 21, 9, 1, -17}, // ']' - {1557, 14, 11, 14, 0, -17}, // '^' - {1577, 11, 2, 11, 0, 2}, // '_' - {1580, 7, 4, 15, 4, -19}, // '`' - {1584, 12, 13, 15, 1, -13}, // 'a' - {1604, 13, 18, 16, 2, -18}, // 'b' - {1634, 11, 13, 13, 1, -13}, // 'c' - {1652, 13, 18, 16, 1, -18}, // 'd' - {1682, 13, 13, 15, 1, -13}, // 'e' - {1704, 11, 18, 10, 0, -18}, // 'f' - {1729, 14, 19, 14, 0, -13}, // 'g' - {1763, 12, 18, 16, 2, -18}, // 'h' - {1790, 4, 18, 8, 2, -18}, // 'i' - {1799, 7, 24, 8, -1, -18}, // 'j' - {1820, 13, 18, 15, 2, -18}, // 'k' - {1850, 4, 18, 8, 2, -18}, // 'l' - {1859, 20, 13, 24, 2, -13}, // 'm' - {1892, 12, 13, 16, 2, -13}, // 'n' - {1912, 14, 13, 16, 1, -13}, // 'o' - {1935, 13, 19, 16, 2, -13}, // 'p' - {1966, 13, 19, 16, 1, -13}, // 'q' - {1997, 9, 13, 11, 2, -13}, // 'r' - {2012, 11, 13, 13, 1, -13}, // 's' - {2030, 9, 16, 10, 0, -16}, // 't' - {2048, 12, 13, 16, 2, -13}, // 'u' - {2068, 14, 13, 14, 0, -13}, // 'v' - {2091, 21, 13, 21, 0, -13}, // 'w' - {2126, 14, 13, 14, 0, -13}, // 'x' - {2149, 14, 19, 14, 0, -13}, // 'y' - {2183, 10, 13, 12, 1, -13}, // 'z' - {2200, 8, 21, 10, 1, -17}, // '{' - {2221, 4, 24, 14, 5, -18}, // '|' - {2233, 8, 21, 10, 1, -17} // '}' -}; -const GFXfont Open_Sans_SemiBold_24 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_24Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_24Glyphs, 0x20, 0x7E, 33}; \ No newline at end of file diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h deleted file mode 100644 index 3da740530..000000000 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h +++ /dev/null @@ -1,363 +0,0 @@ -// 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 Open_Sans_SemiBold_32Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFB, 0xEF, 0xBC, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x00, 0x07, 0x3E, 0xFB, 0xE7, 0x00, // '!' - 0xF3, 0xDE, 0x7B, 0xCF, 0x70, 0xEE, 0x1C, 0xC3, 0x18, 0x63, 0x0C, // '"' - 0x01, 0xC3, 0x00, 0x18, 0x70, 0x03, 0x87, 0x00, 0x38, 0x70, 0x03, 0x87, 0x00, 0x38, 0x60, 0x03, 0x86, 0x07, - 0xFF, 0xFE, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x07, 0x0E, 0x00, 0x70, 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC7, - 0x00, 0x18, 0x70, 0x00, // '#' - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x7F, 0x03, 0xFF, 0xCF, 0xFF, 0x3E, 0xC6, 0x79, 0x80, 0xF3, 0x01, 0xE6, - 0x03, 0xEC, 0x03, 0xF8, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x03, 0x3C, 0x06, 0x38, 0x0C, 0x70, - 0x19, 0xEE, 0x37, 0xDF, 0xFF, 0x3F, 0xFC, 0x1F, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, // '$' - 0x1F, 0x00, 0x38, 0x07, 0xF0, 0x0E, 0x01, 0xFF, 0x01, 0xC0, 0x38, 0xE0, 0x70, 0x07, 0x1C, 0x1C, 0x01, 0xC3, - 0x83, 0x80, 0x38, 0x38, 0xE0, 0x07, 0x07, 0x1C, 0x00, 0xE1, 0xC7, 0x00, 0x0E, 0x38, 0xE7, 0xC1, 0xC7, 0x39, - 0xFC, 0x3F, 0xEF, 0x7F, 0xC3, 0xF9, 0xCE, 0x38, 0x3E, 0x71, 0xC7, 0x00, 0x0E, 0x78, 0x70, 0x03, 0x8E, 0x0E, - 0x00, 0x71, 0xC1, 0xC0, 0x1C, 0x1C, 0x38, 0x03, 0x83, 0x8E, 0x00, 0xE0, 0x71, 0xC0, 0x38, 0x0F, 0xF8, 0x07, - 0x00, 0xFE, 0x01, 0xC0, 0x0F, 0x80, // '%' - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xE0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xC0, 0x07, 0x07, 0x80, 0x0E, - 0x0F, 0x00, 0x1E, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x03, 0xC7, 0xFE, - 0x07, 0x1F, 0x3E, 0x1E, 0x3C, 0x3E, 0x3C, 0x78, 0x3E, 0xF0, 0xE0, 0x3F, 0xE1, 0xC0, 0x3F, 0x83, 0xC0, 0x3E, - 0x07, 0xC1, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0x9E, 0x03, 0xF8, 0x1E, 0x00, // '&' - 0xF7, 0xBD, 0xCE, 0x31, 0x8C, // ''' - 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x83, 0xC0, 0xE0, 0x78, 0x1C, 0x0E, 0x03, 0x81, 0xE0, // '(' - 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x00, // ')' - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x18, 0x03, 0xCC, 0xF3, 0xFF, 0xFD, 0xFF, 0xFE, 0x03, - 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xCE, 0x01, 0xE7, 0x80, 0xE1, 0xC0, 0x10, 0xC0, // '*' - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, - 0xFF, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, // '+' - 0x3C, 0xF1, 0xE3, 0xC7, 0x0E, 0x38, 0x70, // ',' - 0xFF, 0x7F, 0xBF, 0xC0, // '-' - 0x73, 0xEF, 0xBE, 0x70, // '.' - 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x03, - 0xC0, 0x00, // '/' - 0x07, 0xE0, 0x0F, 0xF8, 0x0F, 0xFE, 0x07, 0x87, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x1C, 0xF0, - 0x0E, 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x38, 0xE0, 0x1C, 0x70, 0x1E, - 0x3C, 0x0F, 0x1E, 0x07, 0x87, 0x87, 0x81, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '0' - 0x03, 0xC0, 0xF8, 0x3F, 0x0F, 0xE7, 0xFD, 0xF7, 0x9C, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, // '1' - 0x07, 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x0F, 0x07, 0x82, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // '2' - 0x0F, 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0x78, 0x3C, 0x20, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF8, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0xE0, 0x3E, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, // '3' - 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0E, - 0x38, 0x0F, 0x1C, 0x07, 0x0E, 0x07, 0x07, 0x07, 0x83, 0x83, 0x81, 0xC3, 0x80, 0xE1, 0xFF, 0xFE, 0xFF, 0xFF, - 0x7F, 0xFF, 0x80, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, // '4' - 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xFF, - 0x83, 0xFF, 0xC7, 0xFF, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xF6, - 0x07, 0xCF, 0xFF, 0x9F, 0xFE, 0x0F, 0xE0, 0x00, // '5' - 0x01, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x71, - 0xF0, 0x3B, 0xFE, 0x1F, 0xFF, 0x1F, 0x87, 0xCF, 0x81, 0xE7, 0x80, 0x7B, 0xC0, 0x3C, 0xE0, 0x1E, 0x70, 0x0F, - 0x3C, 0x07, 0x9E, 0x07, 0x87, 0x87, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '6' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, // '7' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xC7, 0x81, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x70, 0x38, 0x3E, - 0x7C, 0x0F, 0xF8, 0x01, 0xF8, 0x03, 0xFE, 0x03, 0xEF, 0xC3, 0xC1, 0xF1, 0xC0, 0x79, 0xE0, 0x1C, 0xF0, 0x0F, - 0x78, 0x07, 0x9C, 0x03, 0x8F, 0x07, 0xC7, 0xFF, 0xC0, 0xFF, 0xC0, 0x1F, 0x80, // '8' - 0x07, 0xC0, 0x0F, 0xF8, 0x0F, 0xFE, 0x0F, 0x87, 0x87, 0x81, 0xE3, 0x80, 0xF3, 0xC0, 0x39, 0xE0, 0x1C, 0xF0, - 0x0F, 0x78, 0x07, 0x9E, 0x07, 0xCF, 0x87, 0xE3, 0xFF, 0xE1, 0xFF, 0x70, 0x3E, 0x38, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x1F, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, 0x00, // '9' - 0x73, 0xEF, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, 0xBE, 0x70, // ':' - 0x38, 0xF9, 0xF3, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x3C, 0x70, 0xE1, 0xC7, 0x0E, - 0x00, // ';' - 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x06, // '<' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0xFF, 0xFC, // '=' - 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, // '>' - 0x1F, 0xC0, 0xFF, 0xE1, 0xFF, 0xE3, 0x83, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xC0, 0x00, // '?' - 0x00, 0x7F, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xBF, 0x80, 0x3C, 0x00, 0xF0, 0x1E, 0x00, 0x1E, 0x0F, 0x00, - 0x03, 0xC3, 0x83, 0xF8, 0x71, 0xC1, 0xFF, 0x0E, 0x70, 0xFB, 0xC3, 0xB8, 0x70, 0x70, 0xEE, 0x3C, 0x1C, 0x3B, - 0x8E, 0x07, 0x0E, 0xE3, 0x81, 0xC3, 0xB8, 0xE0, 0x70, 0xEE, 0x38, 0x1C, 0x3B, 0x8E, 0x07, 0x0E, 0xE3, 0xC3, - 0xC7, 0x38, 0x7B, 0xFB, 0xCE, 0x0F, 0xE7, 0xE1, 0xC1, 0xF0, 0xF0, 0x78, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, - 0xE0, 0x02, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, // '@' - 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x77, 0x00, 0x01, 0xDC, 0x00, 0x0F, 0x78, 0x00, 0x3D, - 0xE0, 0x00, 0xE3, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x1C, 0x00, 0x70, 0x70, 0x03, 0xC1, 0xE0, 0x0E, 0x03, 0x80, - 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0x80, 0x0E, 0x1E, 0x00, - 0x3C, 0x78, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x80, // 'A' - 0xFF, 0xE0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E, 0x07, 0xCF, 0x01, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, - 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xE7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, - 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x07, 0xEF, 0xFF, 0xE7, 0xFF, 0xE3, 0xFF, 0xC0, // 'B' - 0x01, 0xFC, 0x01, 0xFF, 0xE1, 0xFF, 0xF0, 0xFC, 0x1C, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x0C, 0x1F, 0xFF, 0x03, 0xFF, 0xC0, 0x3F, 0xE0, // 'C' - 0xFF, 0xE0, 0x1F, 0xFF, 0x03, 0xFF, 0xF8, 0x78, 0x1F, 0x8F, 0x00, 0xF1, 0xE0, 0x0F, 0x3C, 0x01, 0xE7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xC0, 0x7C, 0x78, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, // 'D' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0xCF, - 0xFF, 0x3F, 0xFC, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'E' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0xFF, 0x3F, 0xFC, 0xFF, 0xF3, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x00, // 'F' - 0x00, 0xFF, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xC1, 0xF8, 0x18, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, 0x3F, 0xEF, 0x03, 0xFE, 0xF0, - 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x3C, 0x01, 0xE3, 0xF0, 0x1E, 0x1F, 0xFF, 0xE0, 0xFF, - 0xFE, 0x01, 0xFF, 0x00, // 'G' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, - 0xF0, // 'H' - 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xC0, // 'I' - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, - 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x03, 0xCF, 0xF3, 0xF8, 0xF8, - 0x00, // 'J' - 0xF0, 0x0F, 0x3C, 0x07, 0xCF, 0x03, 0xE3, 0xC0, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x1E, 0x03, 0xCF, 0x80, - 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3E, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF8, // 'K' - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'L' - 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x0F, 0xDF, 0xC0, 0x0F, 0xEE, 0xE0, 0x07, 0x77, 0x70, 0x03, - 0xFB, 0xBC, 0x03, 0xBD, 0xCE, 0x01, 0xDE, 0xE7, 0x00, 0xEF, 0x73, 0xC0, 0xE7, 0xB8, 0xE0, 0x73, 0xDC, 0x70, - 0x79, 0xEE, 0x3C, 0x38, 0xF7, 0x0E, 0x1C, 0x7B, 0x87, 0x1E, 0x3D, 0xC3, 0xCE, 0x1E, 0xE0, 0xE7, 0x0F, 0x70, - 0x7F, 0x07, 0xB8, 0x1F, 0x83, 0xDC, 0x0F, 0xC1, 0xEE, 0x07, 0xC0, 0xF7, 0x01, 0xE0, 0x7B, 0x80, 0xF0, 0x3C, // 'M' - 0xF8, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xEF, 0xE0, 0x0E, 0xFE, 0x00, 0xEE, 0xF0, 0x0E, 0xEF, 0x80, 0xEE, - 0x78, 0x0E, 0xE3, 0xC0, 0xEE, 0x3C, 0x0E, 0xE1, 0xE0, 0xEE, 0x1F, 0x0E, 0xE0, 0xF0, 0xEE, 0x07, 0x8E, 0xE0, - 0x78, 0xEE, 0x03, 0xCE, 0xE0, 0x3E, 0xEE, 0x01, 0xEE, 0xE0, 0x0F, 0xEE, 0x00, 0xFE, 0xE0, 0x07, 0xEE, 0x00, - 0x7E, 0xE0, 0x03, 0xE0, // 'N' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, // 'O' - 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xF0, 0x7E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x7C, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, // 'P' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, // 'Q' - 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x3C, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0xC3, 0xFF, 0xE0, 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF0, // 'R' - 0x0F, 0xE0, 0x3F, 0xFC, 0x7F, 0xFC, 0xF8, 0x18, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x3C, 0xE0, 0x7C, 0xFF, 0xF8, 0xFF, 0xF0, 0x3F, 0xC0, // 'S' - 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, // 'T' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x79, 0xE0, 0x1E, 0x3E, 0x07, 0xC3, 0xFF, 0xF0, 0x3F, 0xFC, 0x01, 0xFE, - 0x00, // 'U' - 0xF0, 0x00, 0xF3, 0x80, 0x07, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC3, 0x80, 0x1C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, - 0x03, 0x80, 0x70, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x03, 0x81, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x03, 0x87, - 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x03, 0x9C, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, // 'V' - 0xF0, 0x07, 0x80, 0x3C, 0xE0, 0x0F, 0x00, 0x71, 0xE0, 0x3E, 0x01, 0xE3, 0xC0, 0x7E, 0x03, 0xC7, 0x80, 0xFC, - 0x07, 0x87, 0x01, 0xF8, 0x0E, 0x0F, 0x07, 0xF8, 0x3C, 0x1E, 0x0E, 0x70, 0x78, 0x3C, 0x1C, 0xE0, 0xF0, 0x38, - 0x79, 0xC1, 0xC0, 0x78, 0xF3, 0xC7, 0x80, 0xF1, 0xC3, 0x8F, 0x01, 0xE3, 0x87, 0x1E, 0x01, 0xCF, 0x0F, 0x38, - 0x03, 0x9C, 0x1E, 0x70, 0x07, 0xB8, 0x1D, 0xE0, 0x0F, 0x70, 0x3B, 0xC0, 0x0E, 0xE0, 0x77, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0xF0, 0x03, 0xC0, 0x00, // 'W' - 0x78, 0x01, 0xE1, 0xE0, 0x1E, 0x0F, 0x00, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x07, 0x87, 0x80, 0x1E, 0x78, - 0x00, 0xF3, 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, - 0x00, 0x1E, 0xF0, 0x00, 0xF3, 0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x81, 0xE0, 0x78, 0x0F, 0x83, 0xC0, - 0x3C, 0x3C, 0x00, 0xF3, 0xC0, 0x07, 0xC0, // 'X' - 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x03, 0xC3, 0xC0, 0x78, 0x3C, 0x07, 0x81, 0xE0, 0xF0, 0x1E, 0x0E, 0x00, - 0xF1, 0xE0, 0x07, 0x1C, 0x00, 0x7B, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, // 'Y' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // 'Z' - 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, // '[' - 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, - 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x70, - 0x03, 0xC0, // '\' - 0xFE, 0xFE, 0xFE, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xFE, 0xFE, 0xFE, // ']' - 0x01, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0x9C, 0x00, 0xE7, 0x00, 0x38, 0xE0, - 0x1C, 0x38, 0x07, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x38, 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x70, // '^' - 0xFF, 0xFD, 0xFF, 0xF8, // '_' - 0xF0, 0x78, 0x3C, 0x1C, 0x0E, // '`' - 0x07, 0xF0, 0x3F, 0xFC, 0x1F, 0xFE, 0x1C, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x07, 0xFE, 0x3F, 0xFE, - 0x7C, 0x0E, 0x78, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x1F, 0x86, // 'a' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, // 'b' - 0x07, 0xF0, 0x7F, 0xE7, 0xFF, 0x1F, 0x04, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xF0, 0x67, 0xFF, 0x8F, 0xFE, 0x0F, 0xE0, // 'c' - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x0F, 0x8E, 0x3F, 0xEE, - 0x7F, 0xFE, 0x7C, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'd' - 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xCF, 0x03, 0xDE, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, - 0xFB, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x81, 0x9F, 0xFF, 0x0F, 0xFE, 0x07, 0xF0, // 'e' - 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xFC, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, // 'f' - 0x07, 0xFF, 0x83, 0xFF, 0xE1, 0xE3, 0xF8, 0xF0, 0x78, 0x38, 0x0E, 0x0E, 0x03, 0x83, 0x80, 0xE0, 0xE0, 0x38, - 0x3C, 0x1E, 0x07, 0x8F, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, - 0x3F, 0xFF, 0x9E, 0x01, 0xE7, 0x00, 0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0x9E, 0x03, 0xE7, 0xFF, 0xF0, 0xFF, 0xF8, - 0x0F, 0xF0, 0x00, // 'g' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'h' - 0x73, 0xCF, 0x9C, 0x00, 0x00, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, // 'i' - 0x07, 0x03, 0xC0, 0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, - 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x3C, 0x0F, - 0x3F, 0xCF, 0xE3, 0xF0, // 'j' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, - 0xE0, 0xF0, 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xF3, 0xC0, - 0xE1, 0xE0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE0, 0x78, 0xE0, 0x7C, 0xE0, 0x3C, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xE3, 0xE0, 0x7C, 0x3B, 0xFE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFB, 0xE1, 0xFC, 0x1E, 0xF0, 0x3E, 0x07, 0xBC, 0x07, - 0x80, 0xEF, 0x01, 0xE0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, - 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, - 0x03, 0x80, // 'm' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'n' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xCF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xC0, 0x0E, 0xE0, - 0x07, 0x70, 0x03, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF3, 0xE1, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xE0, - 0x00, // 'o' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xE0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x7C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, // 'p' - 0x0F, 0x8E, 0x3F, 0xEE, 0x7F, 0xFE, 0x78, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, // 'q' - 0xE3, 0xDC, 0xFB, 0xBF, 0x7F, 0xAF, 0x81, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'r' - 0x1F, 0xC1, 0xFF, 0xCF, 0xFF, 0x3C, 0x18, 0xE0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x1F, 0xC0, - 0x1F, 0x00, 0x1E, 0x00, 0x7B, 0x03, 0xCF, 0xFF, 0x3F, 0xF8, 0x7F, 0x80, // 's' - 0x1C, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x7F, 0xEF, 0xFE, 0xFF, 0xE3, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1F, 0xE1, 0xFE, 0x07, 0xE0, // 't' - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'u' - 0xF0, 0x07, 0x9C, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x3D, 0xE0, 0x07, 0x70, 0x01, 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, // 'v' - 0xF0, 0x1E, 0x03, 0xCE, 0x03, 0xC0, 0x71, 0xE0, 0xFC, 0x1E, 0x3C, 0x1F, 0x83, 0xC3, 0x83, 0xF0, 0x70, 0x70, - 0xE7, 0x1E, 0x0F, 0x1C, 0xE3, 0xC1, 0xE3, 0x9C, 0x78, 0x1C, 0x73, 0x8E, 0x03, 0x9C, 0x3B, 0xC0, 0x7B, 0x87, - 0x78, 0x07, 0x70, 0xEE, 0x00, 0xEC, 0x1D, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0x3E, 0x07, 0xC0, - 0x07, 0x80, 0x78, 0x00, // 'w' - 0x78, 0x07, 0x87, 0x81, 0xE0, 0xF8, 0x7C, 0x0F, 0x0F, 0x00, 0xF3, 0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x3C, 0x3C, 0x0F, 0x03, 0xC3, - 0xE0, 0x7C, 0x78, 0x07, 0x80, // 'x' - 0xF0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x1D, 0xE0, 0x07, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, - 0x7C, 0x00, 0x00, // 'y' - 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // 'z' - 0x01, 0xC0, 0xF8, 0x3F, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x03, 0xE1, - 0xF8, 0x3C, 0x07, 0xE0, 0x3E, 0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF8, - 0x1F, 0x00, 0xE0, // '{' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, // '|' - 0xE0, 0x1F, 0x03, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF0, - 0x1F, 0x80, 0x70, 0x7E, 0x1F, 0x03, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x1F, 0x83, - 0xE0, 0x70, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_32Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 9, 0, 0}, // ' ' - {1, 6, 23, 10, 2, -23}, // '!' - {19, 11, 8, 15, 2, -23}, // '"' - {30, 20, 23, 22, 1, -23}, // '#' - {88, 15, 27, 19, 2, -25}, // '$' - {139, 27, 23, 29, 1, -23}, // '%' - {217, 23, 23, 25, 2, -23}, // '&' - {284, 5, 8, 9, 2, -23}, // ''' - {289, 9, 28, 11, 1, -23}, // '(' - {321, 9, 28, 11, 1, -23}, // ')' - {353, 17, 15, 19, 1, -24}, // '*' - {385, 17, 15, 19, 1, -19}, // '+' - {417, 7, 8, 10, 1, -4}, // ',' - {424, 9, 3, 11, 1, -10}, // '-' - {428, 6, 5, 10, 2, -5}, // '.' - {432, 13, 23, 13, 0, -23}, // '/' - {470, 17, 23, 19, 1, -23}, // '0' - {519, 11, 23, 19, 2, -23}, // '1' - {551, 17, 23, 19, 1, -23}, // '2' - {600, 16, 23, 19, 1, -23}, // '3' - {646, 17, 23, 19, 1, -23}, // '4' - {695, 15, 23, 19, 2, -23}, // '5' - {739, 17, 23, 19, 1, -23}, // '6' - {788, 17, 23, 19, 1, -23}, // '7' - {837, 17, 23, 19, 1, -23}, // '8' - {886, 17, 23, 19, 1, -23}, // '9' - {935, 6, 17, 10, 2, -17}, // ':' - {948, 7, 21, 10, 1, -17}, // ';' - {967, 17, 16, 19, 1, -20}, // '<' - {1001, 15, 9, 19, 2, -16}, // '=' - {1018, 17, 16, 19, 1, -20}, // '>' - {1052, 15, 23, 16, 0, -23}, // '?' - {1096, 26, 26, 30, 2, -23}, // '@' - {1181, 22, 23, 22, 0, -23}, // 'A' - {1245, 17, 23, 22, 3, -23}, // 'B' - {1294, 18, 23, 21, 2, -23}, // 'C' - {1346, 19, 23, 24, 3, -23}, // 'D' - {1401, 14, 23, 19, 3, -23}, // 'E' - {1442, 14, 23, 18, 3, -23}, // 'F' - {1483, 20, 23, 24, 2, -23}, // 'G' - {1541, 19, 23, 25, 3, -23}, // 'H' - {1596, 5, 23, 11, 3, -23}, // 'I' - {1611, 10, 29, 11, -2, -23}, // 'J' - {1648, 18, 23, 21, 3, -23}, // 'K' - {1700, 14, 23, 18, 3, -23}, // 'L' - {1741, 25, 23, 31, 3, -23}, // 'M' - {1813, 20, 23, 26, 3, -23}, // 'N' - {1871, 22, 23, 26, 2, -23}, // 'O' - {1935, 16, 23, 21, 3, -23}, // 'P' - {1981, 22, 28, 26, 2, -23}, // 'Q' - {2058, 18, 23, 21, 3, -23}, // 'R' - {2110, 16, 23, 19, 2, -23}, // 'S' - {2156, 19, 23, 19, 0, -23}, // 'T' - {2211, 19, 23, 25, 3, -23}, // 'U' - {2266, 21, 23, 21, 0, -23}, // 'V' - {2327, 31, 23, 31, 0, -23}, // 'W' - {2417, 21, 23, 21, 0, -23}, // 'X' - {2478, 20, 23, 20, 0, -23}, // 'Y' - {2536, 17, 23, 19, 1, -23}, // 'Z' - {2585, 8, 28, 12, 3, -23}, // '[' - {2613, 13, 23, 13, 0, -23}, // '\' - {2651, 8, 28, 12, 1, -23}, // ']' - {2679, 18, 15, 18, 0, -23}, // '^' - {2713, 15, 2, 15, 0, 3}, // '_' - {2717, 8, 5, 20, 6, -24}, // '`' - {2722, 16, 17, 20, 1, -17}, // 'a' - {2756, 16, 24, 21, 3, -24}, // 'b' - {2804, 14, 17, 17, 2, -17}, // 'c' - {2834, 16, 24, 21, 2, -24}, // 'd' - {2882, 15, 17, 19, 2, -17}, // 'e' - {2914, 13, 24, 13, 1, -24}, // 'f' - {2953, 18, 25, 19, 0, -17}, // 'g' - {3010, 16, 24, 21, 3, -24}, // 'h' - {3058, 6, 24, 10, 2, -24}, // 'i' - {3076, 10, 32, 10, -2, -24}, // 'j' - {3116, 16, 24, 19, 3, -24}, // 'k' - {3164, 4, 24, 10, 3, -24}, // 'l' - {3176, 26, 17, 32, 3, -17}, // 'm' - {3232, 16, 17, 21, 3, -17}, // 'n' - {3266, 17, 17, 21, 2, -17}, // 'o' - {3303, 16, 25, 21, 3, -17}, // 'p' - {3353, 16, 25, 21, 2, -17}, // 'q' - {3403, 11, 17, 15, 3, -17}, // 'r' - {3427, 14, 17, 17, 2, -17}, // 's' - {3457, 12, 21, 14, 1, -21}, // 't' - {3489, 16, 17, 21, 2, -17}, // 'u' - {3523, 18, 17, 18, 0, -17}, // 'v' - {3562, 27, 17, 27, 0, -17}, // 'w' - {3620, 19, 17, 19, 0, -17}, // 'x' - {3661, 18, 25, 18, 0, -17}, // 'y' - {3718, 14, 17, 16, 1, -17}, // 'z' - {3748, 11, 28, 13, 1, -23}, // '{' - {3787, 3, 32, 19, 8, -24}, // '|' - {3799, 11, 28, 13, 1, -23} // '}' -}; -const GFXfont Open_Sans_SemiBold_32 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_32Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_32Glyphs, 0x20, 0x7E, 45}; \ No newline at end of file diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h deleted file mode 100644 index 93d1d062a..000000000 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h +++ /dev/null @@ -1,798 +0,0 @@ -// 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 Open_Sans_SemiBold_56Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x3F, 0x9F, 0xCF, 0xF7, 0xFB, 0xF9, 0xFC, 0x7C, 0x00, // '!' - 0xFC, 0x3F, 0x7E, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0xF8, - 0x1F, 0x7C, 0x0F, 0xBE, 0x07, 0xDF, 0x03, 0xE7, 0x81, 0xE3, 0xC0, 0xF0, // '"' - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x1F, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x3E, 0x00, - 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0xF0, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xC0, 0x00, // '#' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0x78, - 0xFC, 0x3F, 0x8F, 0x01, 0x8F, 0xE1, 0xE0, 0x01, 0xFC, 0x3C, 0x00, 0x3F, 0x87, 0x80, 0x07, 0xF0, 0xF0, 0x00, - 0x7F, 0x1E, 0x00, 0x0F, 0xF3, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x1F, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0x3C, 0x3F, 0x80, 0x07, 0x83, 0xF0, 0x00, 0xF0, 0x7E, - 0x80, 0x1E, 0x1F, 0xDC, 0x03, 0xC7, 0xFB, 0xF8, 0x7B, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, // '$' - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x0F, 0xC0, 0x07, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0x7E, 0x00, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x7E, 0x01, - 0xF0, 0x00, 0x3F, 0x03, 0xF0, 0x1F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0xF8, 0x00, 0x0F, 0xC0, 0xFC, 0x0F, 0x80, - 0x00, 0x7E, 0x07, 0xE0, 0xFC, 0x00, 0x03, 0xF0, 0x3F, 0x07, 0xC0, 0x00, 0x1F, 0x81, 0xF8, 0x7E, 0x00, 0x00, - 0xFC, 0x0F, 0xC3, 0xE0, 0xFC, 0x03, 0xE0, 0x7C, 0x3F, 0x1F, 0xF8, 0x1F, 0x03, 0xE1, 0xF1, 0xFF, 0xE0, 0xF8, - 0x1F, 0x1F, 0x1F, 0xFF, 0x07, 0xE1, 0xF8, 0xF8, 0xFF, 0xFC, 0x1F, 0xFF, 0x8F, 0x8F, 0xC3, 0xE0, 0xFF, 0xFC, - 0xFC, 0x7C, 0x1F, 0x83, 0xFF, 0xC7, 0xC3, 0xE0, 0x7C, 0x0F, 0xFC, 0x7E, 0x3F, 0x03, 0xE0, 0x1F, 0x83, 0xE1, - 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0xFC, 0x00, 0x01, 0xF0, 0x7E, 0x07, 0xE0, 0x00, 0x1F, 0x83, 0xF0, - 0x3F, 0x00, 0x00, 0xF8, 0x1F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x0F, 0xC0, 0x00, 0x7C, 0x07, 0xE0, 0x7E, - 0x00, 0x07, 0xC0, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, - 0x3F, 0x00, 0x3E, 0x0F, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, // '%' - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x7F, 0x00, - 0x00, 0x03, 0xFB, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x01, 0xFF, 0xF8, 0x00, 0xFC, 0x07, - 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xE7, 0xF8, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x0F, 0xE0, 0xFE, 0x07, 0xF8, 0x3F, - 0x83, 0xF8, 0x07, 0xF8, 0x7F, 0x07, 0xF0, 0x07, 0xF9, 0xFC, 0x0F, 0xE0, 0x07, 0xFB, 0xF8, 0x1F, 0x80, 0x07, - 0xFF, 0xE0, 0x3F, 0x00, 0x07, 0xFF, 0xC0, 0x7F, 0x00, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x01, 0xFE, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xF7, 0xF8, 0x07, 0xFF, 0xFF, 0xC7, 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xF8, 0x07, 0xFF, 0xF0, - 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, // '&' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xF1, 0xE3, 0xC7, 0x8F, 0x00, // ''' - 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xFC, - 0x00, 0xFC, // '(' - 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, - 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, - 0xFC, 0x00, // ')' - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x70, 0x1F, 0x01, 0xC7, 0xF1, 0xF1, 0xFC, 0x7F, - 0xFE, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x07, 0xF1, - 0xFC, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, 0x03, 0xC0, 0x78, 0x00, 0x08, 0x02, - 0x00, // '*' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, // '+' - 0x3F, 0x8F, 0xE3, 0xF8, 0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x3E, 0x00, // ',' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0xC0, // '-' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // '.' - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, // '/' - 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0x00, 0xFE, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0x7E, - 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0x7E, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x3F, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x3F, 0x87, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x07, - 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x0F, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, // '0' - 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0x7E, - 0x7F, 0x9F, 0xBF, 0xC7, 0xE7, 0xE1, 0xF8, 0xF0, 0x7E, 0x10, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, // '1' - 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, - 0x3F, 0xE0, 0x7F, 0xC0, 0xFC, 0x00, 0xFE, 0x03, 0x80, 0x03, 0xF8, 0x08, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, // '2' - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x03, - 0xF8, 0x0F, 0xF8, 0x3E, 0x00, 0x3F, 0x81, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x80, 0x00, 0x1F, 0xCE, 0x00, 0x03, 0xFC, - 0xFE, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, // '3' - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x1F, 0x7F, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x03, 0xE3, 0xF8, 0x00, 0x0F, 0xC7, 0xF0, - 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x01, 0xF8, 0x3F, 0x80, 0x07, 0xE0, 0x7F, 0x00, 0x0F, 0x80, - 0xFE, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0xF8, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, // '4' - 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF7, 0xFC, 0x00, - 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xC0, 0x3F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x03, 0xFC, 0x7E, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, // '5' - 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, - 0x7F, 0xE0, 0x10, 0x0F, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0xFC, 0x7F, 0xF8, 0x0F, 0xCF, 0xFF, 0xE0, 0xFD, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x8F, 0xF8, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xF8, 0x03, 0xF8, - 0x1F, 0xE0, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, // '6' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, // '7' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0x7E, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0xC0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x03, 0xFC, 0x0F, 0xE0, 0x0F, 0xF9, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x81, 0xFC, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0xFC, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0xC0, 0x03, - 0xF8, 0xFF, 0x00, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, // '8' - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF0, 0x7F, 0x80, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7E, - 0x1F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0xFC, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x9F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x3F, - 0xE7, 0xF8, 0x03, 0xFE, 0x1F, 0xF0, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0xFC, 0x0F, 0xFF, 0xE7, - 0xE0, 0x1F, 0xFE, 0x3F, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x01, 0x00, 0x7F, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, // '9' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // ':' - 0x1F, 0x07, 0xF0, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF0, 0x7E, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x00, // ';' - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, // '<' - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, // '=' - 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, // '>' - 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF8, 0x0F, - 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, // '?' - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x3F, 0xE0, 0x0F, 0x81, 0xF0, 0x07, 0xFF, 0xF0, - 0x3E, 0x1F, 0x00, 0xFF, 0xFF, 0x81, 0xF0, 0xF8, 0x0F, 0xFF, 0xFC, 0x0F, 0x8F, 0x80, 0xFF, 0x07, 0xE0, 0x3E, - 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xF3, 0xE0, 0x7E, 0x00, 0xF8, 0x0F, 0x9F, 0x03, 0xE0, 0x07, 0xC0, 0x7D, 0xF0, - 0x3F, 0x00, 0x3E, 0x03, 0xEF, 0x81, 0xF0, 0x01, 0xF0, 0x1F, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xFB, 0xE0, 0x7C, - 0x00, 0x7C, 0x07, 0xDF, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0xF8, 0x1F, 0x00, 0x3F, 0x01, 0xE7, 0xC0, 0xF8, 0x01, - 0xF8, 0x1F, 0x3E, 0x07, 0xC0, 0x0F, 0xC0, 0xF9, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xCF, 0x80, 0xF8, 0x0F, 0xF0, - 0x7C, 0x7C, 0x07, 0xF0, 0xFF, 0xC7, 0xE1, 0xF0, 0x1F, 0xFF, 0x9F, 0xFE, 0x0F, 0x80, 0x7F, 0xFC, 0xFF, 0xE0, - 0x7E, 0x01, 0xFF, 0x83, 0xFE, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xE0, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, // '@' - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, - 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, // 'A' - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x7F, 0x3F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, - 0x00, 0xFE, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x03, 0xFC, - 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, // 'B' - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFC, 0x0F, 0xF8, 0x00, 0x18, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x04, 0x0F, 0xFF, 0x00, 0x7C, - 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0x80, // 'C' - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x3F, 0xE0, 0xFE, 0x00, - 0x07, 0xFC, 0x3F, 0x80, 0x00, 0xFF, 0x8F, 0xE0, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, - 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x1F, 0xF8, 0x3F, 0x80, 0x3F, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, // 'D' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'E' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, // 'F' - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, 0xC0, 0x7F, 0xE0, 0x00, 0x30, 0x0F, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xFF, 0xEF, 0xE0, 0x01, - 0xFF, 0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0xBF, 0x80, 0x07, 0xFF, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x7E, 0x00, 0x1F, - 0xFF, 0xCF, 0xE0, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x01, - 0xFC, 0xFF, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x00, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0x80, 0x1F, 0xE0, 0x7F, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFC, 0x00, // 'G' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, - 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0xFE, // 'H' - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, // 'I' - 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x3F, 0xE7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xC0, - 0x00, // 'J' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xF0, 0xFE, 0x00, - 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xDF, - 0xE0, 0x00, 0xFF, 0x8F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x03, 0xFC, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xF0, - 0xFE, 0x00, 0x07, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x01, 0xFE, // 'K' - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'L' - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x7F, 0xF0, - 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xBF, 0xFC, 0x00, 0x00, - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x1F, 0x7E, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xDF, 0xBF, 0x00, 0x00, 0xFD, 0xFB, - 0xF7, 0xE0, 0x00, 0x1F, 0x3F, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xEF, 0xCF, 0xC0, 0x00, 0xF8, 0xFD, 0xF9, 0xF8, - 0x00, 0x1F, 0x1F, 0xBF, 0x1F, 0x80, 0x07, 0xE7, 0xF7, 0xE3, 0xF0, 0x00, 0xF8, 0xFE, 0xFC, 0x7E, 0x00, 0x3F, - 0x1F, 0xDF, 0x87, 0xE0, 0x07, 0xE3, 0xFB, 0xF0, 0xFC, 0x00, 0xF8, 0x7F, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0xEF, - 0xC1, 0xF8, 0x07, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0xBF, 0x03, 0xE0, 0x3F, 0x07, 0xF7, 0xE0, 0x7E, - 0x07, 0xC0, 0xFE, 0xFC, 0x0F, 0xC0, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0x3F, 0x03, 0xFB, 0xF0, 0x1F, 0x87, 0xC0, - 0x7F, 0x7E, 0x03, 0xF1, 0xF8, 0x0F, 0xEF, 0xC0, 0x3F, 0x3F, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xC0, 0x3F, 0xBF, - 0x00, 0xFD, 0xF8, 0x07, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0xFE, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, - 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x7E, 0x00, 0x7F, 0xC0, 0x0F, 0xEF, 0xC0, 0x0F, 0xF8, 0x01, - 0xFD, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xBF, 0x00, 0x1F, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0xFE, // 'M' - 0xFF, 0x80, 0x00, 0x0F, 0xDF, 0xF0, 0x00, 0x01, 0xFB, 0xFF, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0x00, 0x07, 0xEF, - 0xFE, 0x00, 0x00, 0xFD, 0xFF, 0xE0, 0x00, 0x1F, 0xBF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xC0, 0x00, 0x7E, 0xFF, - 0xFC, 0x00, 0x0F, 0xDF, 0xBF, 0x80, 0x01, 0xFB, 0xF7, 0xF8, 0x00, 0x3F, 0x7E, 0x7F, 0x00, 0x07, 0xEF, 0xC7, - 0xF0, 0x00, 0xFD, 0xF8, 0xFF, 0x00, 0x1F, 0xBF, 0x0F, 0xE0, 0x03, 0xF7, 0xE1, 0xFE, 0x00, 0x7E, 0xFC, 0x1F, - 0xC0, 0x0F, 0xDF, 0x81, 0xFC, 0x01, 0xFB, 0xF0, 0x3F, 0xC0, 0x3F, 0x7E, 0x03, 0xF8, 0x07, 0xEF, 0xC0, 0x3F, - 0x80, 0xFD, 0xF8, 0x07, 0xF8, 0x1F, 0xBF, 0x00, 0x7F, 0x03, 0xF7, 0xE0, 0x0F, 0xF0, 0x7E, 0xFC, 0x00, 0xFE, - 0x0F, 0xDF, 0x80, 0x0F, 0xE1, 0xFB, 0xF0, 0x01, 0xFE, 0x3F, 0x7E, 0x00, 0x1F, 0xC7, 0xEF, 0xC0, 0x01, 0xFC, - 0xFD, 0xF8, 0x00, 0x3F, 0xDF, 0xBF, 0x00, 0x03, 0xFB, 0xF7, 0xE0, 0x00, 0x7F, 0xFE, 0xFC, 0x00, 0x07, 0xFF, - 0xDF, 0x80, 0x00, 0x7F, 0xFB, 0xF0, 0x00, 0x0F, 0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xEF, 0xC0, 0x00, 0x0F, 0xFD, - 0xF8, 0x00, 0x01, 0xFF, 0xBF, 0x00, 0x00, 0x1F, 0xF7, 0xE0, 0x00, 0x03, 0xFE, // 'N' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, // 'O' - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0x80, 0x7F, 0xE7, 0xF0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x7F, 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x00, 0xFE, - 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x07, 0xFB, 0xF8, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, // 'P' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, // 'Q' - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x3F, 0xF0, 0x7F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x1F, 0xE1, 0xFC, - 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x7F, 0x03, 0xF8, 0x03, - 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x1F, 0xC0, 0xFE, 0x00, - 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, // 'R' - 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFE, 0x1F, 0xF0, 0x1F, 0x83, 0xF8, 0x00, 0x30, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, // 'S' - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, // 'T' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0F, 0xFC, 0x03, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, // 'U' - 0xFE, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x01, 0xFC, - 0x3F, 0x00, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x03, 0xF0, - 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, - 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, // 'V' - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0xF8, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x1F, 0x80, 0x07, 0xDF, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFD, 0xF8, - 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF7, 0xE0, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x3E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xF8, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xE0, - 0x07, 0xE0, 0x1F, 0x0F, 0xC0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x00, 0x7F, 0x03, 0xF0, 0x7E, - 0x07, 0xF0, 0x01, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0xC0, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x7E, 0x00, 0x0F, 0xC1, - 0xF8, 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x87, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x3F, 0x80, - 0x01, 0xF8, 0xFC, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xC0, 0x1F, - 0x9F, 0xC0, 0x00, 0x3F, 0x3E, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0xF9, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, // 'W' - 0x7F, 0x80, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x03, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x3F, 0x80, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x01, 0xFE, // 'X' - 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, // 'Y' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, // 'Z' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // '[' - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, // '\' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, - 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, - 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // ']' - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x0F, 0x8F, 0x80, - 0x00, 0x7C, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x03, - 0xE7, 0xC0, 0x00, 0x0F, 0x80, // '^' - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, // '_' - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, // '`' - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0xFF, 0x01, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0x03, 0xF9, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x0F, 0xE7, 0xF0, 0x01, 0xFD, 0xFC, - 0x00, 0x3F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x01, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF9, 0xFE, 0x07, - 0xFF, 0x3F, 0xFF, 0xF7, 0xE3, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0x0F, 0x83, 0xFF, 0xC1, 0xF0, 0x1F, 0xE0, 0x00, // 'a' - 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, 0x0F, 0xE0, 0x0F, 0xC7, 0xFF, 0x80, 0xFC, 0xFF, 0xFC, 0x0F, 0xDF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFF, 0x00, 0x1F, 0xCF, 0xF8, 0x03, 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xF9, 0xFF, 0xFE, 0x0F, - 0x8F, 0xFF, 0xC0, 0xF8, 0x7F, 0xF8, 0x00, 0x01, 0xFE, 0x00, // 'b' - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x1F, 0xE0, 0x3C, - 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x3F, 0xE0, 0x3C, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xE0, // 'c' - 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, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7E, 0x07, 0xFF, 0xE7, 0xE0, 0xFF, - 0xFF, 0x7E, 0x1F, 0xFF, 0xFF, 0xE3, 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x07, - 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF3, 0xE0, - 0x7F, 0xFE, 0x3E, 0x03, 0xFF, 0xC3, 0xE0, 0x0F, 0xE0, 0x00, // 'd' - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, - 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x3F, 0x7F, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x30, 0x7F, 0xC0, - 0x3E, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, // 'e' - 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0x02, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x80, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, // 'f' - 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, - 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFE, 0x00, 0x7E, 0x01, 0xFC, - 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC3, 0xF8, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x07, 0xEF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0xFE, 0x1F, 0xE0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, // 'g' - 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, 0x0F, 0xF0, 0x0F, 0xC7, 0xFF, 0xC0, 0xFC, 0xFF, 0xFE, 0x0F, 0xDF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, - 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xE0, // 'h' - 0x3C, 0x3F, 0x3F, 0x9F, 0xEF, 0xE3, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x00, // 'i' - 0x00, 0x78, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x00, // 'j' - 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, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, - 0x0F, 0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x07, 0xF8, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x1F, - 0xE0, 0x0F, 0xC1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x0F, 0xC7, 0xF0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xBF, 0x80, - 0x0F, 0xE1, 0xFC, 0x00, 0xFC, 0x1F, 0xE0, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F, 0x80, - 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFC, 0x00, 0x7F, 0x8F, - 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x1F, 0xC0, // 'k' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, - 0xFB, 0xF0, // 'l' - 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x03, 0xE1, 0xFF, 0xE0, 0x3F, 0xFE, 0x0F, 0x8F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xCF, 0xF8, - 0x07, 0xFF, 0x00, 0x7F, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, 0xC0, 0x03, 0xF3, 0xF8, 0x00, - 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, - 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, - 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, - 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, // 'm' - 0x00, 0x0F, 0xF0, 0x0F, 0x87, 0xFF, 0xC0, 0xF8, 0xFF, 0xFE, 0x0F, 0x9F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE0, // 'n' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xF8, 0x7F, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x3F, - 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, - 0xE1, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, // 'o' - 0x00, 0x0F, 0xE0, 0x0F, 0x87, 0xFF, 0x80, 0xF8, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFC, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x3F, 0xCF, 0xF8, 0x03, - 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFD, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xC0, 0xFC, 0x7F, 0xF8, - 0x0F, 0xC1, 0xFE, 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, // 'p' - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x07, 0xFF, 0xE3, 0xE0, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, - 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF7, 0xE0, 0x7F, 0xFE, 0x7E, 0x03, 0xFF, 0xC7, - 0xE0, 0x0F, 0xF0, 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, // 'q' - 0x00, 0x0F, 0xDF, 0x07, 0xFB, 0xE3, 0xFF, 0x7C, 0xFF, 0xEF, 0x9F, 0xFD, 0xF7, 0xFF, 0x3F, 0xF8, 0x07, 0xFC, - 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x00, // 'r' - 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xE0, 0x3E, 0x3F, - 0x00, 0x08, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFD, - 0x80, 0x03, 0xF3, 0xE0, 0x1F, 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x07, - 0xFE, 0x00, // 's' - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x10, 0x3F, 0xFF, 0x80, - 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x1F, 0xE0, // 't' - 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, - 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x80, 0x3F, 0xE7, 0xFC, 0x0F, - 0xFE, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xE3, 0xE0, 0x7F, 0xFC, 0x3E, 0x01, 0xFE, 0x00, - 0x00, // 'u' - 0xFE, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF0, 0x00, - 0x3F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0x7E, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, // 'v' - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xBF, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0xFC, - 0x00, 0xFF, 0xC0, 0x0F, 0xC7, 0xE0, 0x07, 0xFE, 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0xF0, 0x07, 0xF1, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0x87, 0xE0, 0x1F, 0x7E, 0x01, 0xF8, 0x3F, 0x00, 0xF9, 0xF0, 0x0F, 0xC1, 0xFC, 0x07, 0xCF, - 0x80, 0xFE, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xE3, 0xF0, 0x3F, 0x01, 0xF8, 0x1F, 0x0F, 0x81, - 0xF8, 0x0F, 0xE0, 0xF8, 0x7C, 0x1F, 0xC0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x01, 0xF8, 0x7C, 0x1F, 0x87, 0xE0, - 0x0F, 0xC3, 0xE0, 0x7C, 0x3F, 0x00, 0x3F, 0x3F, 0x03, 0xF3, 0xF0, 0x01, 0xF9, 0xF8, 0x1F, 0x9F, 0x80, 0x0F, - 0xCF, 0x80, 0x7C, 0xFC, 0x00, 0x7E, 0x7C, 0x03, 0xE7, 0xE0, 0x01, 0xF7, 0xE0, 0x1F, 0x7E, 0x00, 0x0F, 0xFE, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, // 'w' - 0x7F, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, - 0xC0, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0xC0, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x7F, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xE0, - 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0xFE, 0x1F, 0xE0, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x0F, 0xE0, // 'x' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x7F, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xF1, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, // 'y' - 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'z' - 0x00, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x07, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x01, 0xF0, // '{' - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, // '|' - 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0xFF, 0xE0, 0x1F, 0xF0, 0x03, 0xF8, - 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_56Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 16, 0, 0}, // ' ' - {1, 9, 41, 16, 4, -40}, // '!' - {48, 17, 14, 25, 4, -40}, // '"' - {78, 35, 40, 37, 1, -40}, // '#' - {253, 27, 46, 33, 3, -43}, // '$' - {409, 45, 42, 49, 2, -41}, // '%' - {646, 39, 42, 42, 3, -41}, // '&' - {851, 7, 14, 15, 4, -40}, // ''' - {864, 15, 49, 19, 2, -40}, // '(' - {956, 15, 49, 19, 2, -40}, // ')' - {1048, 28, 26, 32, 2, -43}, // '*' - {1139, 27, 27, 33, 3, -33}, // '+' - {1231, 10, 14, 16, 2, -7}, // ',' - {1249, 15, 5, 19, 2, -18}, // '-' - {1259, 9, 8, 16, 4, -7}, // '.' - {1268, 23, 40, 23, 0, -40}, // '/' - {1383, 29, 42, 33, 2, -41}, // '0' - {1536, 18, 40, 33, 4, -40}, // '1' - {1626, 29, 41, 33, 2, -41}, // '2' - {1775, 28, 42, 33, 2, -41}, // '3' - {1922, 31, 40, 33, 1, -40}, // '4' - {2077, 27, 41, 33, 3, -40}, // '5' - {2216, 28, 42, 33, 3, -41}, // '6' - {2363, 29, 40, 33, 2, -40}, // '7' - {2508, 29, 42, 33, 2, -41}, // '8' - {2661, 29, 42, 33, 2, -41}, // '9' - {2814, 9, 32, 16, 4, -31}, // ':' - {2850, 11, 38, 17, 2, -31}, // ';' - {2903, 27, 28, 33, 3, -34}, // '<' - {2998, 27, 16, 33, 3, -28}, // '=' - {3052, 27, 28, 33, 3, -34}, // '>' - {3147, 25, 42, 26, 0, -41}, // '?' - {3279, 45, 45, 51, 3, -40}, // '@' - {3533, 38, 40, 38, 0, -40}, // 'A' - {3723, 30, 40, 38, 5, -40}, // 'B' - {3873, 32, 42, 37, 3, -41}, // 'C' - {4041, 34, 40, 42, 5, -40}, // 'D' - {4211, 24, 40, 32, 5, -40}, // 'E' - {4331, 24, 40, 31, 5, -40}, // 'F' - {4451, 35, 42, 42, 3, -41}, // 'G' - {4635, 33, 40, 43, 5, -40}, // 'H' - {4800, 8, 40, 18, 5, -40}, // 'I' - {4840, 17, 51, 18, -4, -40}, // 'J' - {4949, 32, 40, 37, 5, -40}, // 'K' - {5109, 24, 40, 31, 5, -40}, // 'L' - {5229, 43, 40, 53, 5, -40}, // 'M' - {5444, 35, 40, 45, 5, -40}, // 'N' - {5619, 39, 42, 45, 3, -41}, // 'O' - {5824, 27, 40, 35, 5, -40}, // 'P' - {5959, 39, 51, 45, 3, -41}, // 'Q' - {6208, 31, 40, 37, 5, -40}, // 'R' - {6363, 27, 42, 32, 3, -41}, // 'S' - {6505, 31, 40, 33, 1, -40}, // 'T' - {6660, 33, 41, 43, 5, -40}, // 'U' - {6830, 36, 40, 36, 0, -40}, // 'V' - {7010, 54, 40, 54, 0, -40}, // 'W' - {7280, 36, 40, 36, 0, -40}, // 'X' - {7460, 34, 40, 34, 0, -40}, // 'Y' - {7630, 29, 40, 33, 2, -40}, // 'Z' - {7775, 14, 49, 19, 4, -40}, // '[' - {7861, 23, 40, 23, 0, -40}, // '\' - {7976, 14, 49, 19, 1, -40}, // ']' - {8062, 29, 26, 31, 1, -40}, // '^' - {8157, 25, 4, 25, 0, 5}, // '_' - {8170, 14, 9, 34, 10, -43}, // '`' - {8186, 27, 32, 33, 2, -31}, // 'a' - {8294, 28, 44, 36, 5, -43}, // 'b' - {8448, 24, 32, 29, 3, -31}, // 'c' - {8544, 28, 44, 36, 3, -43}, // 'd' - {8698, 27, 32, 33, 3, -31}, // 'e' - {8806, 23, 43, 21, 1, -43}, // 'f' - {8930, 30, 44, 32, 1, -31}, // 'g' - {9095, 28, 43, 37, 5, -43}, // 'h' - {9246, 9, 42, 17, 4, -42}, // 'i' - {9294, 16, 55, 17, -3, -42}, // 'j' - {9404, 28, 43, 33, 5, -43}, // 'k' - {9555, 7, 43, 17, 5, -43}, // 'l' - {9593, 46, 31, 55, 5, -31}, // 'm' - {9772, 28, 31, 37, 5, -31}, // 'n' - {9881, 29, 32, 35, 3, -31}, // 'o' - {9997, 28, 44, 36, 5, -31}, // 'p' - {10151, 28, 44, 36, 3, -31}, // 'q' - {10305, 19, 31, 25, 5, -31}, // 'r' - {10379, 23, 32, 28, 3, -31}, // 's' - {10471, 21, 38, 23, 1, -37}, // 't' - {10571, 28, 31, 37, 4, -30}, // 'u' - {10680, 31, 30, 31, 0, -30}, // 'v' - {10797, 45, 30, 47, 1, -30}, // 'w' - {10966, 30, 30, 32, 1, -30}, // 'x' - {11079, 31, 43, 31, 0, -30}, // 'y' - {11246, 24, 30, 28, 2, -30}, // 'z' - {11336, 21, 49, 23, 1, -40}, // '{' - {11465, 6, 56, 32, 13, -43}, // '|' - {11507, 20, 49, 22, 1, -40} // '}' -}; -const GFXfont Open_Sans_SemiBold_56 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_56Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_56Glyphs, 0x20, 0x7E, 77}; \ No newline at end of file diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Inkplate6COLOR_Crowdsupply_Campaing_Tracker.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Inkplate6COLOR_Crowdsupply_Campaing_Tracker.ino deleted file mode 100644 index 19bb5e85b..000000000 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/Inkplate6COLOR_Crowdsupply_Campaing_Tracker.ino +++ /dev/null @@ -1,210 +0,0 @@ -/* - Inkplate6COLOR_Crowdsupply_Campaing_Tracker example for Soldered Inkplate 6COLOR - For this example you will need only USB cable and Inkplate 6COLOR. - Select "Soldered Inkplate 6COLOR" from Tools -> Board menu. - Don't have "Soldered Inkplate 6COLOR" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 6COLOR to display html data. - This example gets html data from crowdsource campaing and displays them on Inkplate screen. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 8 December 2022 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATECOLOR -#error "Wrong board selection for this example, please select Soldered Inkplate 6COLOR in the boards menu." -#endif - -#include "Inkplate.h" // Include Inkplate library to the sketch -#include "generatedUI.h" // include generated UI - -// Change here to your wifi ssid and pass and the url to display info for -#define ssid "" // Name of the WiFi network (SSID) that you want to connect Inkplate to -#define pass "" // Password of that WiFi network - -#define DELAY_MS 60000 * 60 // Delay between fetching data -#define URL "https://www.crowdsupply.com/soldered/inkplate-6color" // Link to the Inkplate 6COLOR crowdsupply campaign - -// Create an object on Inkplate library -Inkplate display; - -uint32_t n; // Variable for counting position in the buffer -char *buf; // Pointer to the buffer - -// Declaration of the function used later -String textInTag(const char *tag, const char *tagEnd, int dt = 1); - -void setup() -{ - Serial.begin(115200); // Init serial communication - display.begin(); // Init Inkplate library (you should call this function ONLY ONCE) - - // Connect to WiFi - while (!display.connectWiFi(ssid, pass)) - { - Serial.print('.'); - delay(1000); - } - - // Allocate buffer to download Crowdsupply webpage - buf = (char *)ps_malloc(100000); - - // Create an HTTPclient object and do the GET request - HTTPClient http; - if (http.begin(URL) && http.GET() > 0) - { - // If we have available data, read it and save it to the buffer - while (http.getStreamPtr()->available()) - { - char c = http.getStreamPtr()->read(); - buf[n++] = c; - delayMicroseconds(100); - } - - // Add the end of the string - buf[n] = 0; - } - Serial.println("Buffer load complete!"); - - // Get the values for each field. - // When we did a get request, we got HTML as a response because there is no API on this web page. - // If you open the source of the page, you will see the HTML code. Here in the function we pass tags we are - // interested in and get the value between the tags as a string. - text1_content = textInTag("

", "

"); // Separate the product name - text3_content = textInTag("

", "

"); // Separate the project teaser - text4_content = textInTag("

", "

"); // Separate the amount of pledged - text7_content = textInTag("

", "

"); // Separate the goal - text11_content = textInTag("
", ""); // Separate the percentage - - int percent; - text11_content.replace(",", ""); - sscanf(text11_content.c_str(), "%d%%", &percent); - - // Draw parcent slider - if (percent < 100 && percent > 0) - { - float per = (float)(percent / 100.00); - int diff = line0_end_x - line0_start_x; - Serial.println(per); - Serial.println(diff); - line0_end_x = line0_start_x + (diff * per); - } - else if (percent >= 100) - { - } - else - { - line0_end_x = line0_start_x; - } - - text13_content = - textInTag("", ""); // Separate the number of updates - text14_content = - textInTag("", ""); // Separate the date when founded - text17_content = - textInTag("", ""); // Separate the number of backers - - text19_content += textInTag("", - ""); // Separate the last update date - - // Display the content on the screen - mainDraw(); - display.display(); - - // Free the buffer - free(buf); - - // Go to sleep - esp_sleep_enable_timer_wakeup(1000LL * DELAY_MS); - - // Start deep sleep (this function does not return). Program stops here. - esp_deep_sleep_start(); -} - -void loop() -{ - // Never here! If you are using deep sleep, the whole program should be in setup() because the board restarts each - // time. loop() must be empty! -} - -/** - * @brief The function that returns content between HTML tags as a string. - * - * @param const char *tag - * The starting tag from which we want to get the value - * - * @param const char *tagEnd - * The ending tag from which we want to get the value - * - * @param int dt - * How many end tags (*tagEnd) want to skip. Default is 1 - * - * @return String value between passed tags - */ -String textInTag(const char *tag, const char *tagEnd, int dt) -{ - String r; // String for result - char *start = strstr(buf, tag) + strlen(tag); // Pointer to the beginning of the text after the tag - char *end = start - 1; // Set tag end one address before start pointer - while (dt--) - { - // Search where is the "tagEnd" starting from the last "end" which is the beginning for the first time - // (*end = start - 1) and repeat it "dt" times - end = strstr(end + 1, tagEnd); - } - - // Remove "<" and ">" from the result string - int d = 0; - for (char *t = start; t < end; ++t) - { - if (*t == '<') - ++d; - if (d == 0 && *t != '\n') - { - r += *t; - } - if (*t == '>') - --d; - } - - // Remove certain words to get only the data we want - // Hacky solution: - r.replace(""", "\""); - r.replace(" ", " "); - - r.replace("raised", ""); - r.replace("goal", ""); - r.replace("Funded!", ""); - r.replace("funded", ""); - r.replace(" on", ""); - - r.replace("updates", ""); - - // Remove the following from the result string if it exists and put it in the separate string that displays on - // the screen - if (r.indexOf("hours left") != -1) - { - r.replace("hours left", ""); - text17_content = "hours left"; - } - if (r.indexOf("days left") != -1) - { - r.replace("days left", ""); - text17_content = "days left"; - } - - r.replace("backers", ""); - r.replace("Subscribe to Updates", ""); - - // Remove extraneous whitespace characters at the beginning or the end of the string - r.trim(); - - // If there is a dollar sign, the result is the string after that - if (r.indexOf("$") != -1) - r = r.substring(r.indexOf("$") + 1); - - return r; -} diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/generatedUI.h b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/generatedUI.h deleted file mode 100644 index 91b16e9b3..000000000 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Crowdsupply_Campaing_Tracker/generatedUI.h +++ /dev/null @@ -1,348 +0,0 @@ -#include "Arduino.h" -#include "Fonts/Open_Sans_SemiBold_16.h" -#include "Fonts/Open_Sans_SemiBold_24.h" -#include "Fonts/Open_Sans_SemiBold_32.h" -#include "Fonts/Open_Sans_SemiBold_56.h" -#include "Inkplate.h" - -extern Inkplate display; - -int rect0_a_x = 7; -int rect0_a_y = 7; -int rect0_b_x = 564; -int rect0_b_y = 438; -int rect0_fill = -1; -int rect0_radius = -1; -int rect0_color = BLACK; - -String text1_content; -int text1_cursor_x = 42; -int text1_cursor_y = 42; -const GFXfont *text1_font = &Open_Sans_SemiBold_32; - -String text2_content = "Soldered"; -int text2_cursor_x = 42; -int text2_cursor_y = 60; -const GFXfont *text2_font = &Open_Sans_SemiBold_16; - -String text3_content; -int text3_cursor_x = 15; -int text3_cursor_y = 107; -const GFXfont *text3_font = &Open_Sans_SemiBold_16; -// - -String text4_content; -int text4_cursor_x = 46; -int text4_cursor_y = 217; -const GFXfont *text4_font = &Open_Sans_SemiBold_32; - -String text5_content = "$"; -int text5_cursor_x = 32; -int text5_cursor_y = 214; -const GFXfont *text5_font = &Open_Sans_SemiBold_24; - -String text6_content = "raised"; -int text6_cursor_x = 171; -int text6_cursor_y = 217; -const GFXfont *text6_font = &Open_Sans_SemiBold_24; - -String text7_content; -int text7_cursor_x = 46; -int text7_cursor_y = 289; -const GFXfont *text7_font = &Open_Sans_SemiBold_32; - -String text8_content = "$"; -int text8_cursor_x = 32; -int text8_cursor_y = 282; -const GFXfont *text8_font = &Open_Sans_SemiBold_24; - -String text9_content = "goal"; -int text9_cursor_x = 171; -int text9_cursor_y = 289; -const GFXfont *text9_font = &Open_Sans_SemiBold_24; - -int rect1_a_x = 28; -int rect1_a_y = 178; -int rect1_b_x = 250; -int rect1_b_y = 375; -int rect1_fill = -1; -int rect1_radius = -1; -int rect1_color = BLACK; - -int rect2_a_x = 321; -int rect2_a_y = 178; -int rect2_b_x = 542; -int rect2_b_y = 375; -int rect2_fill = -1; -int rect2_radius = -1; -int rect2_color = BLACK; - -int rect3_a_x = 35; -int rect3_a_y = 321; -int rect3_b_x = 235; -int rect3_b_y = 340; -int rect3_fill = -1; -int rect3_radius = -1; -int rect3_color = BLACK; - -int line0_start_x = 35; -int line0_start_y = 330; -int line0_end_x = 235; -int line0_end_y = 330; -int line0_color = BLACK; -int line0_thickness = 18; -int line0_gradient = 0; - -String text11_content = "100%"; -int text11_cursor_x = 125; -int text11_cursor_y = 308; -const GFXfont *text11_font = &Open_Sans_SemiBold_16; - -String text12_content = "Funded!"; -int text12_cursor_x = 107; -int text12_cursor_y = 357; -const GFXfont *text12_font = &Open_Sans_SemiBold_16; - -String text13_content; -int text13_cursor_x = 335; -int text13_cursor_y = 217; -const GFXfont *text13_font = &Open_Sans_SemiBold_32; - -String text14_content; -int text14_cursor_x = 335; -int text14_cursor_y = 280; -const GFXfont *text14_font = &Open_Sans_SemiBold_32; - -String text15_content; -int text15_cursor_x = 442; -int text15_cursor_y = 290; -const GFXfont *text15_font = &Open_Sans_SemiBold_32; - -String text16_content = "updates"; -int text16_cursor_x = 442; -int text16_cursor_y = 217; -const GFXfont *text16_font = &Open_Sans_SemiBold_24; - -String text17_content; -int text17_cursor_x = 335; -int text17_cursor_y = 335; -const GFXfont *text17_font = &Open_Sans_SemiBold_24; - -String text18_content = "backers"; -int text18_cursor_x = 442; -int text18_cursor_y = 335; -const GFXfont *text18_font = &Open_Sans_SemiBold_24; - -String text19_content = "Last update posted "; -int text19_cursor_x = 170; -int text19_cursor_y = 407; -const GFXfont *text19_font = &Open_Sans_SemiBold_16; - -void mainDraw() -{ - if (rect0_radius != -1 && rect0_fill != -1) - display.fillRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius != -1 && rect0_fill == -1) - display.drawRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius == -1 && rect0_fill != -1) - display.fillRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - else if (rect0_radius == -1 && rect0_fill == -1) - display.drawRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - - display.setFont(text1_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text1_cursor_x, text1_cursor_y); - display.print(text1_content); - //Serial.print("Text 1: "); - //Serial.println(text1_content); - - display.setFont(text2_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text2_cursor_x, text2_cursor_y); - display.print(text2_content); - //Serial.print("Text 2: "); - //Serial.println(text2_content); - - display.setFont(text3_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text3_cursor_x, text3_cursor_y); - display.print(text3_content); - //Serial.print("Text 3: "); - //Serial.println(text3_content); - - display.setFont(text4_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text4_cursor_x, text4_cursor_y); - display.print(text4_content); - //Serial.print("Text 4: ");// - //Serial.println(text4_content)//; - - display.setFont(text5_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text5_cursor_x, text5_cursor_y); - display.print(text5_content); - //Serial.print("Text 5: "); - //Serial.println(text5_content); - - display.setFont(text6_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text6_cursor_x, text6_cursor_y); - display.print(text6_content); - //Serial.print("Text 6: "); - //Serial.println(text6_content); - - display.setFont(text7_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text7_cursor_x, text7_cursor_y); - display.print(text7_content); - //Serial.print("Text 7: "); - //Serial.println(text7_content); - - display.setFont(text8_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text8_cursor_x, text8_cursor_y); - display.print(text8_content); - //Serial.print("Text 8: "); - //Serial.println(text8_content); - - display.setFont(text9_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text9_cursor_x, text9_cursor_y); - display.print(text9_content); - //Serial.print("Text 9: "); - //Serial.println(text9_content); - - if (rect1_radius != -1 && rect1_fill != -1) - display.fillRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius != -1 && rect1_fill == -1) - display.drawRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius == -1 && rect1_fill != -1) - display.fillRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - else if (rect1_radius == -1 && rect1_fill == -1) - display.drawRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - - if (rect2_radius != -1 && rect2_fill != -1) - display.fillRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius != -1 && rect2_fill == -1) - display.drawRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius == -1 && rect2_fill != -1) - display.fillRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - else if (rect2_radius == -1 && rect2_fill == -1) - display.drawRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - - if (rect3_radius != -1 && rect3_fill != -1) - display.fillRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius != -1 && rect3_fill == -1) - display.drawRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius == -1 && rect3_fill != -1) - display.fillRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - else if (rect3_radius == -1 && rect3_fill == -1) - display.drawRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - - if (line0_gradient <= line0_color && line0_thickness == 1) - { - display.drawLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color); - } - else if (line0_gradient <= line0_color && line0_thickness != 1) - { - display.drawThickLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_thickness); - } - else if (line0_gradient > line0_color && line0_thickness == 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - 1); - } - else if (line0_gradient > line0_color && line0_thickness != 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - line0_thickness); - } - display.setFont(text11_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text11_cursor_x, text11_cursor_y); - display.print(text11_content); - //Serial.print("Text 11: "); - //Serial.println(text11_content); - - display.setFont(text12_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text12_cursor_x, text12_cursor_y); - display.print(text12_content); - //Serial.print("Text 12: "); - //Serial.println(text12_content); - - display.setFont(text13_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text13_cursor_x, text13_cursor_y); - display.print(text13_content); - //Serial.print("Text 13: "); - //Serial.println(text13_content); - - display.setFont(text14_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text14_cursor_x, text14_cursor_y); - display.print(text14_content); - //Serial.print("Text 14: "); - //Serial.println(text14_content); - - display.setFont(text15_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text15_cursor_x, text15_cursor_y); - display.print(text15_content); - //Serial.print("Text 15: "); - //Serial.println(text15_content); - - display.setFont(text16_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text16_cursor_x, text16_cursor_y); - display.print(text16_content); - //Serial.print("Text 16: "); - //Serial.println(text16_content); - - display.setFont(text17_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text17_cursor_x, text17_cursor_y); - display.print(text17_content); - //Serial.print("Text 17: "); - //Serial.println(text17_content); - - display.setFont(text18_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text18_cursor_x, text18_cursor_y); - display.print(text18_content); - //Serial.print("Text 18: "); - //Serial.println(text18_content); - - display.setFont(text19_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text19_cursor_x, text19_cursor_y); - display.print(text19_content); - //Serial.print("Text 19: "); - //Serial.println(text19_content); -} diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Daily_Weather_Station/Inkplate6COLOR_Daily_Weather_Station.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Daily_Weather_Station/Inkplate6COLOR_Daily_Weather_Station.ino index 54d566a59..6a69f23e1 100644 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Daily_Weather_Station/Inkplate6COLOR_Daily_Weather_Station.ino +++ b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Daily_Weather_Station/Inkplate6COLOR_Daily_Weather_Station.ino @@ -17,7 +17,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Google_Calendar/Inkplate6COLOR_Google_Calendar.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Google_Calendar/Inkplate6COLOR_Google_Calendar.ino index 8b280581a..a01173ee6 100644 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Google_Calendar/Inkplate6COLOR_Google_Calendar.ino +++ b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Google_Calendar/Inkplate6COLOR_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate6COLOR_Google_Calendar for Soldered Inkplate 6 Color +Inkplate6COLOR_Google_Calendar for Soldered Inkplate 6 Color -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Hourly_Weather_Station/Inkplate6COLOR_Hourly_Weather_Station.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Hourly_Weather_Station/Inkplate6COLOR_Hourly_Weather_Station.ino index d4b2a103e..a044e3f5f 100644 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Hourly_Weather_Station/Inkplate6COLOR_Hourly_Weather_Station.ino +++ b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Hourly_Weather_Station/Inkplate6COLOR_Hourly_Weather_Station.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Image_Uploader/Inkplate6COLOR_Image_Uploader.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Image_Uploader/Inkplate6COLOR_Image_Uploader.ino index ce9642420..dbef95ea3 100644 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Image_Uploader/Inkplate6COLOR_Image_Uploader.ino +++ b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_Image_Uploader/Inkplate6COLOR_Image_Uploader.ino @@ -1,9 +1,9 @@ /* - Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 6 Color + Inkplate6COLOR Image Uploader Example + Compatible with Soldered Inkplate 6COLOR -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 6COLOR diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Image_Slideshow/Inkplate6COLOR_OpenAI_Image_Slideshow.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Image_Slideshow/Inkplate6COLOR_OpenAI_Image_Slideshow.ino index 8ea4de90c..1fe54c365 100644 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Image_Slideshow/Inkplate6COLOR_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Image_Slideshow/Inkplate6COLOR_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate6COLOR OpenAI Image slideshow - Compatible with Soldered Inkplate 6COLOR + Compatible with Soldered Inkplate 6COLOR -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 6COLOR. Select "Soldered Inkplate6COLOR" from Tools -> Board menu. diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Text_Prompt/Inkplate6COLOR_OpenAI_Text_Prompt.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Text_Prompt/Inkplate6COLOR_OpenAI_Text_Prompt.ino index d4f0d1e8c..d8fe8d680 100644 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Text_Prompt/Inkplate6COLOR_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenAI_Text_Prompt/Inkplate6COLOR_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate6COLOR OpenAI text prompt generator - Compatible with Soldered Inkplate 6COLOR + Compatible with Soldered Inkplate 6COLOR -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 6COLOR. Select "Soldered Inkplate6COLOR" from Tools -> Board menu. diff --git a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenMeteo_Weather_Station/Inkplate6COLOR_OpenMeteo_Weather_Station.ino b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenMeteo_Weather_Station/Inkplate6COLOR_OpenMeteo_Weather_Station.ino index 7a3cec542..f09e42b27 100644 --- a/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenMeteo_Weather_Station/Inkplate6COLOR_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate6COLOR/Projects/Inkplate6COLOR_OpenMeteo_Weather_Station/Inkplate6COLOR_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate6COLOR OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 6 COLOR + Compatible with Soldered Inkplate 6 COLOR -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate6FLICK/Advanced/DeepSleep/Inkplate6FLICK_Simple_Deep_Sleep/Inkplate6FLICK_Simple_Deep_Sleep.ino b/examples/Inkplate6FLICK/Advanced/DeepSleep/Inkplate6FLICK_Simple_Deep_Sleep/Inkplate6FLICK_Simple_Deep_Sleep.ino index 347dc45ad..a6f9cdb3e 100644 --- a/examples/Inkplate6FLICK/Advanced/DeepSleep/Inkplate6FLICK_Simple_Deep_Sleep/Inkplate6FLICK_Simple_Deep_Sleep.ino +++ b/examples/Inkplate6FLICK/Advanced/DeepSleep/Inkplate6FLICK_Simple_Deep_Sleep/Inkplate6FLICK_Simple_Deep_Sleep.ino @@ -17,7 +17,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Battery_Voltage/Inkplate6FLICK_Read_Battery_Voltage.ino b/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Battery_Voltage/Inkplate6FLICK_Read_Battery_Voltage.ino index d3e0d6314..a46f68af0 100644 --- a/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Battery_Voltage/Inkplate6FLICK_Read_Battery_Voltage.ino +++ b/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Battery_Voltage/Inkplate6FLICK_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Temperature/Inkplate6FLICK_Read_Temperature.ino b/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Temperature/Inkplate6FLICK_Read_Temperature.ino index 451444324..ad78b2567 100644 --- a/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Temperature/Inkplate6FLICK_Read_Temperature.ino +++ b/examples/Inkplate6FLICK/Advanced/Other/Inkplate6FLICK_Read_Temperature/Inkplate6FLICK_Read_Temperature.ino @@ -14,7 +14,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Black_And_White/logo.h b/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Black_And_White/logo.h index 89f6b5c9b..7908bf438 100644 --- a/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Black_And_White/logo.h +++ b/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Black_And_White/logo.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t logo[] PROGMEM = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, diff --git a/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Grayscale/image.h b/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Grayscale/image.h index 0895394a7..b3768320c 100644 --- a/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Grayscale/image.h +++ b/examples/Inkplate6FLICK/Basic/Inkplate6FLICK_Grayscale/image.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t picture1[] = { 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0xaa, 0xaa, 0x99, 0x99, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xa9, 0x99, 0x99, 0xaa, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0x9a, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x99, 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x9a, 0xaa, 0xaa, 0xba, 0xaa, 0xba, 0x9a, 0xba, 0xaa, 0xa9, 0x98, 0x88, 0x87, 0x77, 0x88, 0x88, 0x77, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x78, 0x88, 0x87, 0x77, 0x77, diff --git a/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/Inkplate6FLICK_Peripheral_Mode.ino b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/Inkplate6FLICK_Peripheral_Mode.ino index 38bb74426..578f91636 100644 --- a/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/Inkplate6FLICK_Peripheral_Mode.ino +++ b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/Inkplate6FLICK_Peripheral_Mode.ino @@ -1,5 +1,6 @@ /* Inkplate6FLICK_Peripheral_Mode example for Soldered Inkplate 6FLICK + For this example you will need only a USB-C cable and Inkplate 6FLICK Select "Soldered Inkplate 6FLICK" from Tools -> Board menu. Don't have "Soldered Inkplate 6FLICK" option? Follow our tutorial and add it: https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ @@ -24,674 +25,43 @@ Looking to get support? Write on our forums: https://forum.soldered.com/ 15 March 2024 by Soldered */ +// Include Inkplate library. +#include "Inkplate.h" -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATE6FLICK -#error "Wrong board selection for this example, please select Soldered Inkplate 6FLICK" -#endif +// Include peripheral mode library. +#include "InkplatePeripheralMode.h" -#include -Inkplate display(INKPLATE_1BIT); +// Include the header files with sketch settngs (buffer size, serial timeput, argument termination char etc). +#include "settings.h" -#define BUFFER_SIZE 1000 -char commandBuffer[BUFFER_SIZE + 1]; -char strTemp[2001]; +// Pointer to the singleton class instance. +PeripheralMode *peripheral; + +// Inkplate object. +Inkplate display(INKPLATE_3BIT); void setup() { + // Init Inkplate library. display.begin(); - Serial.begin(115200); - memset(commandBuffer, 0, BUFFER_SIZE); -} - -void loop() -{ - // put your main code here, to run repeatedly: - if (Serial.available()) - { - while (Serial.available()) - { - for (int i = 0; i < (BUFFER_SIZE - 1); i++) - { - commandBuffer[i] = commandBuffer[i + 1]; - } - commandBuffer[BUFFER_SIZE - 1] = Serial.read(); - } - } - char *s = NULL; - char *e = NULL; - for (int i = 0; i < BUFFER_SIZE; i++) - { - if (commandBuffer[i] == '#' && s == NULL) - s = &commandBuffer[i]; - if (commandBuffer[i] == '*' && e == NULL) - e = &commandBuffer[i]; - } - if (s != NULL && e != NULL) - { - if ((e - s) > 0) - { - int x, x1, x2, y, y1, y2, x3, y3, l, c, w, h, r, n, rx, ry, xc, yc, yr; - uint8_t hr, min, sec, wday, day, mon, k, as, am, ah, ad, aw, amc, v, br, rt[8]; - uint16_t tx1[2], ty1[2], th, tw, tx2, ty2; - bool ie, ip; - System::rtcCountdownSrcClock sc; - uint32_t ep, ae, pwrs; - char b; - char temp[150]; - switch (*(s + 1)) - { - case '?': - Serial.print("OK"); - break; - - case '0': - sscanf(s + 3, "%d,%d,%d", &x, &y, &c); - // sprintf(temp, "display.drawPixel(%d, %d, %d)\n\r", x, y, c); - // Serial.print(temp); - display.drawPixel(x, y, c); - break; - - case '1': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawLine(x1, y1, x2, y2, c); - break; - - case '2': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastVLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastVLine(x, y, l, c); - break; - - case '3': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &l, &c); - // sprintf(temp, "display.drawFastHLine(%d, %d, %d, %d)\n\r", x, y, l, c); - // Serial.print(temp); - display.drawFastHLine(x, y, l, c); - break; - - case '4': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.drawRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.drawRect(x, y, w, h, c); - break; - - case '5': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.drawCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.drawCircle(x, y, r, c); - break; - - case '6': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.drawTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.drawTriangle(x1, y1, x2, y2, x3, y3, c); - break; - - case '7': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.drawRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.drawRoundRect(x, y, w, h, r, c); - break; - - case '8': - sscanf(s + 3, "%d,%d,%d,%d,%d", &x, &y, &w, &h, &c); - // sprintf(temp, "display.fillRect(%d, %d, %d, %d, %d)\n\r", x, y, w, h, c); - // Serial.print(temp); - display.fillRect(x, y, w, h, c); - break; - - case '9': - sscanf(s + 3, "%d,%d,%d,%d", &x, &y, &r, &c); - // sprintf(temp, "display.fillCircle(%d, %d, %d, %d)\n\r", x, y, r, c); - // Serial.print(temp); - display.fillCircle(x, y, r, c); - break; - - case 'A': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &x3, &y3, &c); - // sprintf(temp, "display.fillTriangle(%d, %d, %d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, x3, y3, c); - // Serial.print(temp); - display.fillTriangle(x1, y1, x2, y2, x3, y3, c); - break; - case 'B': - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x, &y, &w, &h, &r, &c); - // sprintf(temp, "display.fillRoundRect(%d, %d, %d, %d, %d, %d)\n\r", x, y, w, h, r, c); - // Serial.print(temp); - display.fillRoundRect(x, y, w, h, r, c); - break; + // Create one instance of the object. + peripheral = PeripheralMode::getInstance(); - case 'C': - sscanf(s + 3, "\"%2000[^\"]\"", strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - // Serial.print("display.print(\""); - // Serial.print(strTemp); - // Serial.println("\");"); - display.print(strTemp); - break; - - case 'D': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setTextSize(%d)\n", c); - // Serial.print(temp); - display.setTextSize(c); - break; - - case 'E': - sscanf(s + 3, "%d,%d", &x, &y); - // sprintf(temp, "display.setCursor(%d, %d)\n", x, y); - // Serial.print(temp); - display.setCursor(x, y); - break; - - case 'F': - sscanf(s + 3, "%c", &b); - // sprintf(temp, "display.setTextWrap(%s)\n", b == 'T' ? "True" : "False"); - // Serial.print(temp); - if (b == 'T') - display.setTextWrap(true); - if (b == 'F') - display.setTextWrap(false); - break; - - case 'G': - sscanf(s + 3, "%d", &c); - c &= 3; - // sprintf(temp, "display.setRotation(%d)\n", c); - // Serial.print(temp); - display.setRotation(c); - break; - - case 'H': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawBitmapFromSd(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - - case 'I': - sscanf(s + 3, "%d", &c); - // sprintf(temp, "display.setDisplayMode(%s)\n", c == 0 ? "INKPLATE_1BIT" : "INKPLATE_3BIT"); - // Serial.print(temp); - if (c == INKPLATE_1BIT) - display.selectDisplayMode(INKPLATE_1BIT); - if (c == INKPLATE_3BIT) - display.selectDisplayMode(INKPLATE_3BIT); - break; - - case 'J': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - // if (0 == 0) { - // Serial.println("#J(0)*"); - //} else { - // Serial.println("#J(1)*"); - //} - if (display.getDisplayMode() == INKPLATE_1BIT) - { - Serial.println("#J(0)*"); - Serial.flush(); - } - if (display.getDisplayMode() == INKPLATE_3BIT) - { - Serial.println("#J(1)*"); - Serial.flush(); - } - } - break; - - case 'K': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.clearDisplay();\n"); - display.clearDisplay(); - } - break; - - case 'L': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.print("display.display();\n"); - display.display(); - } - break; - - case 'M': - sscanf(s + 3, "%d,%d,%d", &y1, &x2, &y2); - // sprintf(temp, "display.partialUpdate(%d, %d, %d);\n", y1, x2, y2); - // Serial.print(temp); - display.partialUpdate(); - break; - - case 'N': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#N("); - Serial.print(display.readTemperature(), DEC); - // Serial.print(23, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'O': - sscanf(s + 3, "%d", &c); - if (c >= 0 && c <= 2) - { - Serial.print("#O("); - Serial.print(display.readTouchpad(c), DEC); - // Serial.print(0, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'P': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#P("); - Serial.print(display.readBattery(), 2); - // Serial.print(3.54, 2); - Serial.println(")*"); - Serial.flush(); - } - break; - - case 'Q': - sscanf(s + 3, "%d", &c); - c &= 1; - // if (c == 0) Serial.print("display.einkOff();\n"); - // if (c == 1) Serial.print("display.einkOn();\n"); - if (c == 0) - display.einkOff(); - if (c == 1) - display.einkOn(); - break; - - case 'R': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#R("); - Serial.print(display.getPanelState(), DEC); - // Serial.print(1, DEC); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'S': - sscanf(s + 3, "%d,%d,\"%149[^\"]\"", &x, &y, strTemp); - n = strlen(strTemp); - for (int i = 0; i < n; i++) - { - strTemp[i] = toupper(strTemp[i]); - } - for (int i = 0; i < n; i += 2) - { - strTemp[i / 2] = (hexToChar(strTemp[i]) << 4) | (hexToChar(strTemp[i + 1]) & 0x0F); - } - strTemp[n / 2] = 0; - r = display.sdCardInit(); - if (r) - { - r = display.drawImage(strTemp, x, y); - Serial.print("#H("); - Serial.print(r, DEC); - Serial.println(")*"); - Serial.flush(); - // sprintf(temp, "display.drawBitmap(%d, %d, %s)\n", x, y, strTemp); - // Serial.print(temp); - } - else - { - Serial.println("#H(-1)*"); - Serial.flush(); - } - break; - case 'T': - int t; - sscanf(s + 3, "%d,%d,%d,%d,%d,%d", &x1, &y1, &x2, &y2, &c, &t); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawThickLine(x1, y1, x2, y2, c, t); - break; - case 'U': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.drawElipse(rx, ry, xc, yc, c); - break; - case 'V': - sscanf(s + 3, "%d,%d,%d,%d,%d", &rx, &ry, &xc, &yc, &c); - // sprintf(temp, "display.drawLine(%d, %d, %d, %d, %d)\n\r", x1, y1, x2, y2, c); - // Serial.print(temp); - display.fillElipse(rx, ry, xc, yc, c); - break; - case 'W': - sscanf(s + 3, "%d,%d,%d", &hr, &min, &sec); - // sprintf(temp, "display.rtcSetTime(%d, %d, %d);\n\r", hr, min, sec); - // Serial.println(temp); - display.rtcSetTime(hr, min, sec); - break; - case 'X': - sscanf(s + 3, "%d,%d,%d,%d", &wday, &day, &mon, &yr); - // sprintf(temp, "display.rtcSetDate(%d, %d, %d, %d);\n\r", wday, day, mon, yr); - // Serial.println(temp); - display.rtcSetDate(wday, day, mon, yr); - break; - case 'Y': - sscanf(s + 3, "%d", &ep); - // sprintf(temp, "display.rtcSetEpoch(%d);\n\r", ep); - // Serial.println(temp); - display.rtcSetEpoch(ep); - break; - case 'Z': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#Z("); - Serial.print(display.rtcGetEpoch()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'a': - sscanf(s + 3, "%d", &k); - if (k > 6) - { - Serial.println("INVALID"); - break; - } - display.rtcGetRtcData(); - Serial.print("#a("); - switch (k) - { - case 0: - Serial.print(display.rtcGetSecond()); - break; - case 1: - Serial.print(display.rtcGetMinute()); - break; - case 2: - Serial.print(display.rtcGetHour()); - break; - case 3: - Serial.print(display.rtcGetDay()); - break; - case 4: - Serial.print(display.rtcGetWeekday()); - break; - case 5: - Serial.print(display.rtcGetMonth()); - break; - case 6: - Serial.print(display.rtcGetYear()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'b': - sscanf(s + 3, "%d,%d,%d,%d,%d", &as, &am, &ah, &ad, &aw); - // sprintf(temp, "display.rtcSetAlarm(%d, %d, %d, %d, %d);\n\r", as, am, ah, ad, aw); - // Serial.println(temp); - display.rtcSetAlarm(as, am, ah, ad, aw); - break; - case 'c': - sscanf(s + 3, "%d,%d", &ae, &amc); - // sprintf(temp, "display.rtcSetAlarmEpoch(%d, %d);\n\r", ae, amc); - // Serial.println(temp); - display.rtcSetAlarmEpoch(ae, amc); - break; - case 'd': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#d("); - Serial.print(display.rtcCheckAlarmFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'e': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearAlarmFlag()"); - display.rtcClearAlarmFlag(); - Serial.flush(); - } - break; - case 'f': - sscanf(s + 3, "%d", &k); - if (k > 4) - { - Serial.println("INVALID"); - break; - } - Serial.print("#f("); - switch (k) - { - case 0: - Serial.print(display.rtcGetAlarmSecond()); - break; - case 1: - Serial.print(display.rtcGetAlarmMinute()); - break; - case 2: - Serial.print(display.rtcGetAlarmHour()); - break; - case 3: - Serial.print(display.rtcGetAlarmDay()); - break; - case 4: - Serial.print(display.rtcGetAlarmWeekday()); - break; - } - Serial.println(")*"); - Serial.flush(); - break; - case 'g': - sscanf(s + 3, "%d,%d,%d,%d", &sc, &v, &ie, &ip); - - if (sc > 3) - { - Serial.println("ERROR"); - break; - } - - // sprintf(temp, "display.rtcTimerSet(%d, %d, %d, %d);\n\r", sc, v, ie, ip); - // Serial.println(temp); - display.rtcTimerSet(sc, v, ie, ip); - break; - case 'h': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#h("); - Serial.print(display.rtcCheckTimerFlag()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'i': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcClearTimerFlag()"); - display.rtcClearTimerFlag(); - } - break; - case 'j': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcDisableTimer()"); - display.rtcDisableTimer(); - } - break; - case 'k': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#k("); - Serial.print(display.rtcIsSet()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 'l': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // Serial.println("display.rtcReset()"); - display.rtcReset(); - } - break; - case 'm': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - display.frontlight(true); - // Serial.println("display.frontlight(true);"); - } - else - { - display.frontlight(false); - // Serial.println("display.frontlight(false);"); - } - break; - case 'n': - sscanf(s + 3, "%d", &br); - // sprintf(temp, "display.setFrontlight(%d);\n\r", br); - // Serial.println(temp); - display.setFrontlight(br); - break; - case 'o': - sscanf(s + 3, "%d", &pwrs); - // sprintf(temp, "display.tsInit(%d);\n\r", pwrs); - // Serial.println(temp); - if (pwrs == 1) - display.tsInit(1); + // Set the baud rate (in this case 115200 bauds), set the serial buffer and it's size. + if (!peripheral->begin(&Serial, &display, 115200ULL, SERIAL_UART_RX_PIN, SERIAL_UART_TX_PIN, SERIAL_BUFFER_SIZE)) + { + // Send an error message on serial. + Serial.println("Peripheral mode init failed!\nProgram halted!"); - if (pwrs == 0) - display.tsInit(0); - break; - case 'p': - sscanf(s + 3, "%c", &b); - if (b == '1') - { - // sprintf(temp, "display.tsShutdown();\n\r"); - // Serial.println(temp); - display.tsShutdown(); - } - break; - case 'r': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - Serial.print("#r("); - Serial.print(display.tsAvailable()); - Serial.println(")*"); - Serial.flush(); - } - break; - case 's': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - if (display.tsGetData(tx1, ty1) != 0) - { - Serial.print("#s("); - Serial.print(tx1[0]); - Serial.print(", "); - Serial.print(ty1[0]); - Serial.println(")*"); - Serial.flush(); - } - } - break; - case 't': - sscanf(s + 3, "%c", &b); - if (b == '?') - { - display.tsGetRawData(rt); - for (int i = 0; i < 8; ++i) - { - Serial.print("Reg "); - Serial.println(rt[i], BIN); - } - Serial.flush(); - } - break; - case 'u': - sscanf(s + 3, "%hu,%hu,%hu,%hu", &tx2, &ty2, &tw, &th); - // sprintf(temp, "display.touchInArea(%hu, %hu, %hu, %hu);\n\r", tx2, ty2, tw, th); - // Serial.println(temp); - Serial.print("#u("); - Serial.print(display.touchInArea(tx2, ty2, tw, th)); - Serial.println(")*"); - Serial.flush(); - break; - } - *s = 0; - *e = 0; - } + // Stop the program from executing! + while(1); } + Serial.println("READY"); } -int hexToChar(char c) +void loop() { - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'A' && c <= 'F') - return c - 'A' + 10; - if (c >= 'a' && c <= 'f') - return c - 'a' + 10; - return -1; -} + // Check if there is something in the serial. + peripheral->getDataFromSerial(SERIAL_TIMEOUT_MS); +} \ No newline at end of file diff --git a/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/InkplatePeripheralMode.cpp b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/InkplatePeripheralMode.cpp new file mode 100644 index 000000000..43a871266 --- /dev/null +++ b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/InkplatePeripheralMode.cpp @@ -0,0 +1,1719 @@ +// Add header of the library to the source files. +#include "InkplatePeripheralMode.h" + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +// Include the list with all available commands. +#include "commandList.h" + +// Define the static member. +PeripheralMode* PeripheralMode::_instancePtr = nullptr; + +bool PeripheralMode::begin(HardwareSerial *_serialPtr, Inkplate *_inkplatePtr, uint32_t _baud, uint8_t _rxPin, uint8_t _txPin, uint32_t _size) +{ + // Store every parameter locally and check them. + if ((_serialPtr == nullptr) || (_inkplatePtr == nullptr) || (_size == 0)) return false; + _serial = _serialPtr; + _display = _inkplatePtr; + _bufferSize = _size; + + // Init the serial communication @ desired communication speed. Also set the pins. + _serial->begin(_baud, SERIAL_8N1, _rxPin, _txPin); + + // Allocate memory for the serial buffer in the PSRAM. + _serialBuffer = (char*)ps_malloc(_bufferSize * sizeof(char)); + + // Check if allocation is successful. + if (_serialBuffer == NULL) + { + return false; + } + + // If everything is ok, return true. + return true; +} + +bool PeripheralMode::getDataFromSerial(unsigned long _timeout) +{ + // Variable used for timeouting incoming serial data. + unsigned long _timestamp; + + // Variables for parsing. + char *_commandEndPosition = NULL; + + if (_serial->available()) + { + // You got something on the serial? Cool! + // First capture the current time (needed for timeouting!). + _timestamp = millis(); + + // Capture the timestamp for automatic buffer cleaning. + _bufferAutoCleanTimestamp = millis(); + + // Try to capture incoming serial data until the timeout or until the buffer is full! + while (((unsigned long)(millis() - _timestamp) < _timeout) && (_serialBufferIndex < (_bufferSize - 2))) + { + if (_serial->available()) + { + _serialBuffer[_serialBufferIndex++] = _serial->read(); + _timestamp = millis(); + } + } + + // Add a nul-terminating char. + _serialBuffer[_serialBufferIndex] = '\0'; + + // Go though all commands that are received. + _commandEndPosition = _serialBuffer; + while (_commandEndPosition != NULL) + { + // Variables for parsing. + int _command = 0; + int _repeatable = 0; + int _payloadSize = 0; + char *_payload = NULL; + + // Check received for validity. If everything went ok, parse the command. + if (checkPacket(_commandEndPosition, _bufferSize - (uint32_t)(_commandEndPosition - _serialBuffer), &_command, &_repeatable, &_payloadSize, &_payload, &_commandEndPosition)) + { + // If is a valid command, try to parse it. + parseCommand(_command, _repeatable, _payloadSize, _payload); + + // Reset the counter. + _serialBufferIndex = 0; + + // Go to the next command by advancing to the next index. + _commandEndPosition++; + } + } + } + + // Periodically clear the buffer from the remained invalid data. + if (((unsigned long)(millis() - _bufferAutoCleanTimestamp) >= SERIAL_BUFFER_CLEAN_TIME_MS) && _serialBufferIndex) + { + // Clear the buffer. + memset(_serialBuffer, 0, _bufferSize); + + // Reset the index variable. + _serialBufferIndex = 0; + + Serial.println("Cleaned"); + } + + // If data is not valid, return false; + return false; +} + +bool PeripheralMode::checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandLastPosition) +{ + // Prepare the command end position pointer - set it to null. Later in the code it will be set to some address that corresponds end position of the command. + // If not found, it will stay on null. + *_commandLastPosition = NULL; + + // -------------------PARSING START AND STOP FLAGS------------------- + // First check if there is start and stop flags. + char *_startFlag = strstr(_buffer, "TS"); + + // Check start flag. If the start flag is wrong, return error. + if (_startFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _startFlag; + + Serial.printf("Passed 1st check!\n"); + Serial.flush(); + + // -------------------PARSING COMMAND------------------- + // Check the command and payload size. + // First find the first semicolon. + char *_cmd = strchr(_startFlag + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_cmd == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _cmd; + + Serial.printf("Passed 2nd check!\n"); + Serial.flush(); + + // Check if there is a command. Move pointer by one place to the right (skip the semicolon). + int _cmdDataInt = strtol(_cmd + 1, NULL, 16); + + // If command if equal to zero, something is wrong. + if (_cmdDataInt == 0) return false; + + Serial.printf("Passed 3rd check!\n"); + Serial.flush(); + + // -------------------PARSING REPEATABLE FLAG------------------- + // Get the repeatable flag. + char *_repeatable = strchr(_cmd + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_repeatable == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _repeatable; + + Serial.printf("Passed 4th check!\n"); + Serial.flush(); + + // Get the repeatable flag data from HEX. Move one place to the right (skip the semicolon). + int _repeatableFlagInt = strtol(_repeatable + 1, NULL, 16); + + // Repeatable flag can only be one or zero. Discard otherwise. + if (_repeatableFlagInt > 1 || _repeatableFlagInt < 0) return false; + + Serial.printf("Passed 5th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD SIZE------------------- + // Go to the next semicolon (payload size). + char *_payload = strchr(_repeatable + 1, TEMR_CHAR); + + // If it's NULL, something is wrong, return NULL. + if (_payload == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payload; + + Serial.printf("Passed 6th check!\n"); + Serial.flush(); + + // Get the number! + int _payloadSizeInt = strtol(_payload + 1, NULL, 16); + + // Go to the start of the payload by finding next semicolon. + char *_payloadDataInt = strchr(_payload + 1, TEMR_CHAR); + + if (_payloadDataInt == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _payloadDataInt; + + // -------------------CHECKING THE STOP FLAG------------------- + // Go to the next semicolon, which is for the stop flag. + // For the stop flag is a little bit more complicated. Since this can be found in the payload, we need to find the last one 0xaa in the buffer. + // For that we are gonna try to go though the whole command and check if the stop flag is at the end. If not, command is considered invalid. + char *_stopFlag = strchr(_payloadDataInt + 1 + _payloadSizeInt, TEMR_CHAR); + + if (_stopFlag == NULL) return false; + + // Update the end of processing flag; + *_commandLastPosition = _stopFlag; + + // Check if the stop flag is really there. If not, return with fail. + if (strstr(_stopFlag, "TE") != (_stopFlag + 1)) return false; + + // Update the stop flag position by one (move after the semicolon). + _stopFlag++; + + Serial.printf("Passed 7th check!\n"); + Serial.flush(); + + // -------------------PARSING PAYLOAD DATA------------------- + // Increment the pointer. Now we're at the first byte of the payload. + _payloadDataInt++; + + // Check for the size. If the size is ok, fill the command, payload size and payload data start pointers. + if ((_stopFlag - _payloadDataInt - 1) == _payloadSizeInt) + { + *_command = _cmdDataInt; + *_repeatableFlag = _repeatableFlagInt; + *_payloadSize = _payloadSizeInt; + *_payloadDataStart = _payloadDataInt; + return true; + } + + Serial.printf("ERROR: stopFlag: %d payloadDataInt: %d payloadSizeInt %d\n", _stopFlag, _payloadDataInt, _payloadSizeInt); + Serial.flush(); + + // Otherwise, return null, indicating an error. + return false; +} + +void PeripheralMode::sendResponse(int _command, int _payloadSize, char *_payload) +{ + _serial->printf("TS;%04X;%04X;%s;TE\r\n", _command, _payloadSize, _payload); +} + +char* PeripheralMode::getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size) +{ + // Count already found arguments. + int _currentArgument = 0; + + // If is selected argument that does not exist, return NULL pointer as error; + if (_n >= _noOfArgs || _n < 0) return NULL; + + // Try get the wanted arguments. + // First declare two pinters; one represents start of the argument, second end. + // In initial state, start of the first argument is, well, start of the payload buffer. + // End of the first argument is start of the second argument -> semicolon. + char *_start = _inBuffer; + char *_stop = (char*)memchr((char*)(_inBuffer + 1), TEMR_CHAR, _payloadSize); + + // Run trough the loop until you hit the right argument. + while ((_currentArgument != _n) && (_start != NULL)) + { + // Copy end of the last argument and move the pointer by one place (to skip the semicolon). + _start = _stop + 1; + + // Try to find, next semicolon (or start of the next argument) + _stop = (char*)memchr((char*)(_stop + 1), TEMR_CHAR, _payloadSize - (_stop - _inBuffer) + 1); + + // Increment argument counter. + _currentArgument++; + } + + // Return what has been found and also return the size of the argument. + if (_size != NULL) *_size = _stop - _start; + return _start; +} + +int PeripheralMode::getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize) +{ + // Find the total number of arguments. + int _noOfArgs = 0; + + // Count every semicolon (add also one at the end of the payload). + for (int i = 0; i < _payloadSize + 1; i++) + { + if (_inBuffer[i] == TEMR_CHAR) _noOfArgs++; + } + + // Return the number. + return _noOfArgs; +} + +void PeripheralMode::parseCommand(int _command, int _repeat, int _payloadSize, char* _payload) +{ + // Parse the command. You can add command if needed. + // First find the number of sent arguments. + int _numberOfArgs = getNumberOfArgs(_payload, _payloadSize); + + switch(_command) + { + case CMD_PING: + { + // Payload doesn't matter here, just send the response. + sendResponse(CMD_PING, strlen((char*)_okResponseString), (char*)_okResponseString); + break; + } + case CMD_DRAW_PIXEL: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 3, _repeat); + + // Arguments can be repeated for faster transfer, so multiple pixels can be written at once. + for (int i = 0; i < _numberOfArgs; i+=3) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argColor == NULL) return; + + // Write the pixels. + _display->drawPixel(atol(_argX), atol(_argY), atol(_argColor)); + } + break; + } + case CMD_DRAW_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTVLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastVLine(atol(_argX), atol(_argY), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_FASTHLINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple lines can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawFastHLine(atol(_argX), atol(_argY), atol(_argW), atol(_argColor)); + } + break; + } + case CMD_DRAW_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_DRAW_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_DRAW_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_DRAW_THICK_LINE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argColor; + char *_argThick; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argThick = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are vaild. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argColor == NULL || _argThick == NULL) return; + + // Write the lines. + _display->drawThickLine(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argColor), atol(_argThick)); + } + break; + } + case CMD_DRAW_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are vaild. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->drawElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_FILL_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argColor)); + } + break; + } + case CMD_FILL_CIRCLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 4, _repeat); + + // Arguments can be repeated for faster transfer, so multiple circles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=4) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillCircle(atol(_argX), atol(_argY), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_TRIANGLE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, _repeat); + + // Arguments can be repeated for faster transfer, so multiple triangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=7) + { + // Get the arguments and their values. + char *_argX1; + char *_argY1; + char *_argX2; + char *_argY2; + char *_argX3; + char *_argY3; + char *_argColor; + _argX1 = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY1 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argX2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argY2 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argX3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argY3 = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 6, NULL); + + // Check if they are valid. + if (_argX1 == NULL || _argY1 == NULL || _argX2 == NULL || _argY2 == NULL || _argX3 == NULL || _argY3 == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillTriangle(atol(_argX1), atol(_argY1), atol(_argX2), atol(_argY2), atol(_argX3), atol(_argY3), atol(_argColor)); + } + break; + } + case CMD_FILL_ROUND_RECT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=6) + { + // Get the arguments and their values. + char *_argX; + char *_argY; + char *_argW; + char *_argH; + char *_argR; + char *_argColor; + _argX = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argY = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argW = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argH = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argR = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 5, NULL); + + // Check if they are valid. + if (_argX == NULL || _argY == NULL || _argW == NULL || _argH == NULL || _argR == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillRoundRect(atol(_argX), atol(_argY), atol(_argW), atol(_argH), atol(_argR), atol(_argColor)); + } + break; + } + case CMD_FILL_ELIPSE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, _repeat); + + // Arguments can be repeated for faster transfer, so multiple rounded rectangles can be written at once. + for (int i = 0; i < _numberOfArgs; i+=5) + { + // Get the arguments and their values. + char *_argRx; + char *_argRy; + char *_argXc; + char *_argYc; + char *_argColor; + _argRx = getArgument(_payload, _payloadSize, _numberOfArgs, i, NULL); + _argRy = getArgument(_payload, _payloadSize, _numberOfArgs, i + 1, NULL); + _argXc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 2, NULL); + _argYc = getArgument(_payload, _payloadSize, _numberOfArgs, i + 3, NULL); + _argColor = getArgument(_payload, _payloadSize, _numberOfArgs, i + 4, NULL); + + // Check if they are valid. + if (_argRx == NULL || _argRy == NULL || _argXc == NULL || _argYc == NULL || _argColor == NULL) return; + + // Write the lines. + _display->fillElipse(atol(_argRx), atol(_argRy), atol(_argXc), atol(_argYc), atol(_argColor)); + } + break; + } + case CMD_PRINT: + { + // Check the number of arguments, it can only be one and do not allow repeated payload. + if (_numberOfArgs != 1 || _repeat) return; + + // Get the arguments ant it's size. + char *_arg; + uint32_t _argSize; + _arg = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &_argSize); + + // Convert them from HEX ASCII to ASCII of the fly. + hexAsciiToAscii(_arg, _argSize); + + // Add nul-terminating char at the end of the argument (text) + _arg[_argSize / 2] = '\0'; + + // Print it on display. + _display->print(_arg); + break; + } + case CMD_SET_TEXT_SIZE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textSize; + + // Get the arguments ant it's size. + _textSize = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textSize == NULL) return; + + // Set new text size. + _display->setTextSize(atol(_textSize)); + break; + } + case CMD_SET_TEXT_COLOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_textColor; + char *_bgColor; + + // Get the arguments ant it's size. + _textColor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _bgColor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_textColor == NULL || _bgColor == NULL) return; + + // Set new text and background color. + _display->setTextColor(atol(_textColor), atol(_bgColor)); + break; + } + case CMD_SET_CURSOR: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 2, 0); + + // Get the arguments and their values. + char *_xCursor; + char *_yCursor; + + // Get the arguments ant it's size. + _xCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yCursor = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_xCursor == NULL || _yCursor == NULL) return; + + // Set new text cursor position. + _display->setCursor(atol(_xCursor), atol(_yCursor)); + break; + } + case CMD_SET_TEXT_WRAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_textWrap; + + // Get the arguments ant it's size. + _textWrap = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_textWrap == NULL) return; + + // Set text wrapping.. + _display->setTextWrap(atol(_textWrap)); + break; + } + case CMD_SET_ROTATION: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_rotation; + + // Get the arguments ant it's size. + _rotation = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_rotation == NULL) return; + + // Set text wrapping.. + _display->setRotation(atol(_rotation)); + break; + } + case CMD_SD_CARD_INIT: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_init; + + // Get the arguments ant it's size. + _init = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_init == NULL && atol(_init) != 1) return; + + // Try to init microSD card + if (_display->sdCardInit()) + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_SD_CARD_INIT, strlen((char*)_failResponseString), (char*)_failResponseString); + } + break; + } + case CMD_SD_CARD_SLEEP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 1, 0); + + // Get the arguments and their values. + char *_uSDSleep; + + // Get the arguments ant it's size. + _uSDSleep = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_uSDSleep == NULL && atol(_uSDSleep) != 1) return; + + // Set microSD card to sleep. + _display->sdCardSleep(); + break; + } + case CMD_DRAW_BITMAP: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 6, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_color; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _color = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _color == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + hexAsciiToAscii(_hexData, _argSize); + + // Display the bitmap. + _display->drawBitmap(atol(_xPos), atol(_yPos), (uint8_t*)_hexData, atol(_w), atol(_h), atol(_color)); + + break; + } + case CMD_DRAW_IMAGE: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 7, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_dither; + char *_invert; + char *_path; + char *_pathType; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _dither = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _invert = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _pathType = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + _path = getArgument(_payload, _payloadSize, _numberOfArgs, 5, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _dither == NULL || _invert == NULL || _pathType==NULL ||_path == NULL) return; + + if(_pathType == 0) + { + // Convert it on the fly from HEX ASCII to standard ASCII. This can be done directly in the buffer since ASCII will take up half the size of the original _path size. + hexAsciiToAscii(_path, _argSize); + + // Add null-termination at the end of the argument. + _path[_argSize / 2] = '\0'; + + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_path, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + } + else + { + char _pathNew[_argSize+1]; + strncpy(_pathNew, _path, _argSize); + _pathNew[_argSize]='\0'; + // Try to open an image from microSD card. Send reponse back if the opening was successful or not. + if (_display->drawImage((const char*)_pathNew, atol(_xPos), atol(_yPos), atol(_dither) & 1, atol(_invert) &1)) + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_DRAW_IMAGE, strlen((char*)_failResponseString), (char*)_failResponseString); + } + } + + + break; + + } + case CMD_DRAW_IMAGE_BUFFER: + { + // Check the number of the arguments and check it's payload repeatable. + checkArguments(&_numberOfArgs, 5, 0); + + // Get the arguments and their values. + char *_xPos; + char *_yPos; + char *_w; + char *_h; + char *_hexData; + uint32_t _argSize; + + // Get the arguments ant it's size. + _xPos = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _yPos = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _w = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _h = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _hexData = getArgument(_payload, _payloadSize, _numberOfArgs, 4, &_argSize); + + // Check if they are valid. + if (_xPos == NULL || _yPos == NULL || _w == NULL || _h == NULL || _hexData == NULL) return; + + // Extract the data from the HEX on the fly. + hexAsciiToAscii(_hexData, _argSize); + + // Display the image from the buffer. + _display->drawImage((const uint8_t*)_hexData, atol(_xPos), atol(_yPos), atol(_w), atol(_h)); + break; + } + case CMD_SET_MODE: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + _display->setDisplayMode(atol(_arg1)); + break; + } + case CMD_GET_MODE: + { + char response[1]; + itoa(_display->getDisplayMode(), response, 10); + sendResponse(CMD_GET_MODE, strlen(response), response); + break; + } + case CMD_CLEAR_DISPLAY: + { + // No payload check needed, just clear the display + _display->clearDisplay(); + + break; + } + case CMD_DISPLAY: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + // Execute the command! + _display->display(atol(_arg1)); + break; + } + case CMD_PARTIAL_UPDATE: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + // Execute the command! + _display->partialUpdate(atol(_arg1), atol(_arg2)); + break; + } + case CMD_READ_TEMP: + { + char response[4]; + itoa(_display->readTemperature(), response, 10); + sendResponse(CMD_READ_TEMP, strlen(response), response); + break; + } + case CMD_READ_TOUCHPAD: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + char response[1]; + itoa(_display->readTouchpad(atoi(_arg1)), response, 10); + sendResponse(CMD_READ_TOUCHPAD, strlen(response), response); + + break; + } + case CMD_READ_BATTERY: + { + Serial.println(_display->readBattery()); + char response[50]; + sprintf(response,"%lf", _display->readBattery()); + sendResponse(CMD_READ_BATTERY, strlen(response), response); + break; + } + case CMD_EINK_PMIC: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // H + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + if(atoi(_arg1) == 0) + { + _display->einkOff(); + } + else + { + _display->einkOn(); + } + + break; + } + case CMD_RTC_SET_TIME: + { + // Check the number of arguments. + if (_numberOfArgs != 3) return; + + // Get the argument. + char *_arg1; // H + char *_arg2; // M + char *_arg3; // S + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL) return; + + + + _display->rtcSetTime(atoi(_arg1), atoi(_arg2), atoi(_arg3)); + + break; + } + case CMD_RTC_SET_DATE: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Weekday + char *_arg2; // Day + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + + _display->rtcSetDate(atoi(_arg1), atoi(_arg2), atoi(_arg3), atoi(_arg4)); + break; + } + case CMD_RTC_SET_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + // Get the argument. + char *_arg1; // Epoch + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + // Check if they are valid. + if (_arg1 == NULL) return; + + _display->rtcSetEpoch(atoll(_arg1)); + break; + } + case CMD_RTC_UPDATE: + { + _display->rtcGetRtcData(); + break; + } + case CMD_RTC_GET_DATA_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d %d/%d/%d", _display->rtcGetHour(),_display->rtcGetMinute(), _display->rtcGetSecond(), + _display->rtcGetWeekday(), _display->rtcGetDay(), _display->rtcGetMonth(), _display->rtcGetYear()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_ALARM: + { + // Check the number of arguments. + if (_numberOfArgs != 5) return; + + // Get the argument. + char *_arg1; // sec + char *_arg2; // min + char *_arg3; // hour + char *_arg4; // day + char *_arg5; // weekday + + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + _arg5 = getArgument(_payload, _payloadSize, _numberOfArgs, 4, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL || _arg5== NULL) return; + + _display->rtcEnableAlarm(); + + _display->rtcSetAlarm(atoi(_arg1),atoi(_arg2),atoi(_arg3),atoi(_arg4),atoi(_arg5)); + + break; + } + case CMD_RTC_SET_ALARM_EPOCH: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + // Get the argument. + char *_arg1; // epoch + char *_arg2; // match + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + _display->rtcSetAlarmEpoch(atoll(_arg1),atoi(_arg2)); + + break; + } + case CMD_RTC_CLEAR_AL_FLAG: + { + _display->rtcClearAlarmFlag(); + break; + } + case CMD_RTC_GET_ALARM_ALL: + { + char response[100]; + sprintf(response,"%d:%d:%d %d-%d", _display->rtcGetAlarmHour(),_display->rtcGetAlarmMinute(), _display->rtcGetAlarmSecond(), _display->rtcGetAlarmDay(), _display->rtcGetAlarmWeekday()); + sendResponse(CMD_RTC_GET_ALARM_ALL, strlen(response), response); + break; + } + case CMD_RTC_SET_TIMER: + { + // Check the number of arguments. + if (_numberOfArgs != 4) return; + + // Get the argument. + char *_arg1; // Source clock + char *_arg2; // + char *_arg3; // Month + char *_arg4; // Year + + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + _arg4 = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL || _arg3 == NULL || _arg4== NULL) return; + + Inkplate::rtcCountdownSrcClock clock; + + switch(atoi(_arg1)) + { + case 0: + clock=Inkplate::TIMER_CLOCK_4096HZ; + break; + case 1: + clock=Inkplate::TIMER_CLOCK_64HZ; + break; + case 2: + clock=Inkplate::TIMER_CLOCK_1HZ; + break; + case 3: + clock=Inkplate::TIMER_CLOCK_1PER60HZ; + break; + default: + return; + + } + + _display->rtcTimerSet(clock, atoi(_arg2), atoi(_arg3), atoi(_arg4)); + + break; + } + case CMD_RTC_GET_TIMER_FLAG: + { + char response[1]; + itoa(_display->rtcCheckTimerFlag(), response, 10); + sendResponse(CMD_RTC_GET_TIMER_FLAG, strlen(response), response); + + break; + } + case CMD_RTC_CLEAR_TIMER_FLAG: + { + _display->rtcClearTimerFlag(); + break; + } + case CMD_RTC_DISABLE_TIMER: + { + _display->rtcDisableTimer(); + break; + } + case CMD_RTC_IS_SET: + { + char response[1]; + itoa(_display->rtcIsSet(), response, 10); + sendResponse(CMD_RTC_IS_SET, strlen(response), response); + break; + } + case CMD_RTC_RESET: + { + _display->rtcReset(); + break; + } + case CMD_ESP32_DEEPSLEEP: + { + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + esp_deep_sleep_start(); + break; + } + case CMD_ESP32_LIGHTSLEEP: + { + + // Check the number of arguments. + if (_numberOfArgs < 2) return; + + // Get the argument. + char *_arg1; + char *_arg2; + + _arg1 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + _arg2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + + // Check if they are valid. + if (_arg1 == NULL || _arg2 == NULL) return; + + if(atoi(_arg1) == 0) + { + esp_sleep_enable_timer_wakeup(atoll(_arg2)); + } + else + { + char *_arg3; + _arg3 = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + if(_arg3 == NULL) return; + + esp_sleep_enable_ext0_wakeup((gpio_num_t)atoi(_arg2), atoi(_arg3)); + } + sendResponse(CMD_ESP32_DEEPSLEEP, strlen((char*)_okResponseString), (char*)_okResponseString); + delay(10); + esp_light_sleep_start(); + break; + } + case CMD_TOUCH_INIT: + { + if (_numberOfArgs != 1) return; + char* _isInitialized; + _isInitialized = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + if (_isInitialized == NULL) return; + + if (*_isInitialized == '1') + { + _display->tsInit(1); + } + else + { + _display->tsInit(0); + } + break; + } + case CMD_TOUCH_AVAILABLE: + { + if (_numberOfArgs != 1) return; + char* touchAvailable; + touchAvailable = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + if (touchAvailable == NULL) return; + + if (*touchAvailable == '?') + { + Serial.print("#touch_available("); + Serial.print(_display->tsAvailable()); + Serial.println(")*"); + Serial.flush(); + } + + break; + } + case CMD_TOUCH_GET_DATA: + { + if (_numberOfArgs != 1) return; + char* getData; + getData = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + if (getData == NULL) return; + + if (*getData == '?') + { + if (_display->tsGetData(tx1, ty1) != 0) + { + Serial.print("#touch("); + Serial.print(tx1[0]); + Serial.print(", "); + Serial.print(ty1[0]); + Serial.println(")*"); + Serial.flush(); + } + } + break; + } + case CMD_CONNECT_WIFI: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_ssid; + char *_password; + + uint32_t ssidSize, passwordSize; + + _ssid = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &ssidSize); + _password = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &passwordSize); + + // Check if they are valid. + if (_ssid == NULL || _password == NULL) return; + + char ssid[ssidSize + 1]; + char password[passwordSize + 1]; + + strncpy(ssid, _ssid, ssidSize); + ssid[ssidSize] = '\0'; + + strncpy(password, _password, passwordSize); + password[passwordSize] = '\0'; + + + Serial.println(ssid); + Serial.println(password); + + + if(_display->connectWiFi(ssid, password)) + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else + { + sendResponse(CMD_CONNECT_WIFI, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + case CMD_DISCONNECT_WIFI: + { + _display->disconnect(); + break; + } + case CMD_GET_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 1) return; + + + // Get the arguments. + char *_server; + + uint32_t serverSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + + strncpy(server,_server, serverSize); + + server[serverSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + + // Your Domain name with URL path or IP address with path + http.begin(server); + + // Send HTTP GET request + int httpResponseCode = http.GET(); + + if (httpResponseCode>0) { + String payload = http.getString(); + sendResponse(CMD_GET_REQUEST, strlen(payload.c_str()), (char*)payload.c_str()); + } + else { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + } + else + { + sendResponse(CMD_GET_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + + break; + } + + case CMD_POST_REQUEST: + { + // Check the number of arguments. + if (_numberOfArgs != 2) return; + + + // Get the arguments. + char *_server; + char *_postMessage; + + uint32_t serverSize; + uint32_t postSize; + + _server = getArgument(_payload, _payloadSize, _numberOfArgs, 0, &serverSize); + _postMessage = getArgument(_payload, _payloadSize, _numberOfArgs, 1, &postSize); + + // Check if they are valid. + if (_server == NULL ) return; + + char server[serverSize+1]; + char postMessage[postSize+1]; + + strncpy(server,_server, serverSize); + strncpy(postMessage, _postMessage, postSize); + + server[serverSize]='\0'; + postMessage[postSize]='\0'; + + if(_display->isConnected()) + { + HTTPClient http; + + // Your Domain name with URL path or IP address with path + http.begin(server); + + http.addHeader("Content-Type", "text/plain"); + + int httpResponseCode = http.POST(postMessage); + + if (httpResponseCode>0) { + sendResponse(CMD_POST_REQUEST, strlen((char*)_okResponseString), (char*)_okResponseString); + } + else { + sendResponse(CMD_POST_REQUEST, strlen((char*)_failResponseString), (char*)_failResponseString); + } + // Free resources + http.end(); + + } + break; + } + + case CMD_FRONTLIGHT: + { + if (_numberOfArgs != 1) return; + char* _isEnabled; + _isEnabled = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + if (_isEnabled == NULL) return; + + if (*_isEnabled == '1') + { + _display->frontlight(true); + } + else + { + _display->frontlight(false); + } + break; + } + + case CMD_FRONTLIGHT_SET: + { + if (_numberOfArgs != 1) return; + char* _value; + _value = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + if (_value == NULL) return; + + _display->setFrontlight(atol(_value)); + break; + } + + case CMD_TOUCH_RAW: + { + if (_numberOfArgs != 1) return; + char* _getRaw; + _getRaw = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + + if (_getRaw == NULL) return; + + if (*_getRaw == '?') + { + _display->tsGetRawData(rt); + for (int i = 0; i < 8; i++) + { + Serial.print("Reg "); + Serial.println(rt[i], BIN); + } + Serial.flush(); + } + break; + } + + case CMD_TOUCHIN_AREA: + { + checkArguments(&_numberOfArgs, 4, _repeat); + + char* tx2 = getArgument(_payload, _payloadSize, _numberOfArgs, 0, NULL); + char* ty2 = getArgument(_payload, _payloadSize, _numberOfArgs, 1, NULL); + char* tw = getArgument(_payload, _payloadSize, _numberOfArgs, 2, NULL); + char* th = getArgument(_payload, _payloadSize, _numberOfArgs, 3, NULL); + + if (tx2 == NULL || ty2 == NULL || tw == NULL || th == NULL) return; + + Serial.print("#touch_area("); + Serial.print(_display->touchInArea(atol(tx2), atol(tx2), atol(tw), atol(th))); + Serial.println(")*"); + Serial.flush(); + + break; + } + } +} + +int PeripheralMode::hexToChar(int a, int b) +{ + return ((16 * charToInt(a)) + charToInt(b)); +} + +int PeripheralMode::charToInt(char a) +{ + // Convert to uppercase + a = toupper(a); + + if (a >= '0' && a <= '9') + return a - '0'; + if (a >= 'A' && a <= 'F') + return ((a - 'A') + 10); +} + +void PeripheralMode::checkArguments(int *_noOfArgs, int _maxArg, int _repeat) +{ + // Check the number of the arguments. + if ((*_noOfArgs) < _maxArg) return; + + // If the repeatable payload option is not enabled, restrict to only first argument. + if (!_repeat) (*_noOfArgs) = _maxArg; +} + +void PeripheralMode::hexAsciiToAscii(char *_buffer, uint32_t _size) +{ + // Extract the data from the HEX on the fly. This can be done since the decoded data is two times smaller then original ASCII HEX data. + for (uint32_t i = 0; i < _size; i+=2) + { + _buffer[i / 2] = hexToChar(_buffer[i], _buffer[i + 1]); + } +} \ No newline at end of file diff --git a/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/InkplatePeripheralMode.h b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/InkplatePeripheralMode.h new file mode 100644 index 000000000..d6504211f --- /dev/null +++ b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/InkplatePeripheralMode.h @@ -0,0 +1,81 @@ +// Add header guards. +#ifndef __INKPLATEPERIPHERALMODE_H__ +#define __INKPLATEPERIPHERALMODE_H__ + +// Add an main Arduino header file. +#include + +// Add an Inkplate library. +#include + +// Include file describing the settings of the peripheral mode. +#include "settings.h" + +//#include + +// Make a class for the peripheral mode. +class PeripheralMode +{ + private: + // Use singleton class to not being able to use multiple instances of this class (since only makes sense to make only one Peripheral mode). + // Private constructor to prevent direct instantiation. + PeripheralMode() {} + + // Static pointer to the single instance. + static PeripheralMode* _instancePtr; + + // Pointer to the Arduino Serial object, + HardwareSerial *_serial = nullptr; + + // Pointer to the Inkplate library object, + Inkplate *_display = nullptr; + + // Variable for counting incoming serial data. + uint32_t _serialBufferIndex = 0; + + // Pointer to the allocated serial buffer in the PSRAM. + char *_serialBuffer = nullptr; + + // Size of the buffer for parsing the commands. + uint32_t _bufferSize = 0; + + // Commonly used responeses + const char *_okResponseString = "OK"; + const char *_failResponseString = "FAIL"; + + // Touchscreen parameters + uint16_t tx1[2], ty1[2]; + uint8_t rt[8]; + + // Variable for timestamping last received data for the automatic buffer clear. + unsigned long _bufferAutoCleanTimestamp = 0; + + bool checkPacket(char *_buffer, uint32_t _maxSize, int *_command, int *_repeatableFlag, int *_payloadSize, char **_payloadDataStart, char **_commandEndPosition); + void sendResponse(int _command, int _payloadSize, char *_payload); + char* getArgument(char *_inBuffer, uint32_t _payloadSize, int _noOfArgs, int _n, uint32_t *_size); + int getNumberOfArgs(char *_inBuffer, uint32_t _payloadSize); + void parseCommand(int _command, int _repeat, int _payloadSize, char* _payload); + int hexToChar(int a, int b); + int charToInt(char a); + void checkArguments(int *_noOfArgs, int _maxArg, int _repeat); + void hexAsciiToAscii(char *_buffer, uint32_t _size); + + public: + static PeripheralMode* getInstance() + { + // Check if the instance is already been made. If not, make it. + if (PeripheralMode::_instancePtr == nullptr) + { + // Make a new instance and save the address to the pointer. + PeripheralMode::_instancePtr = new PeripheralMode(); + } + + // Return the instance pointer. This way only one object is created. + return PeripheralMode::_instancePtr; + } + + bool begin(HardwareSerial *_serial, Inkplate *_inkplate, uint32_t _baud = 115200ULL, uint8_t _rxPin = -1, uint8_t _txPin = -1, uint32_t _size = SERIAL_BUFFER_SIZE); + bool getDataFromSerial(unsigned long _timeout); +}; + +#endif \ No newline at end of file diff --git a/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/commandList.h b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/commandList.h new file mode 100644 index 000000000..9f2c6977b --- /dev/null +++ b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/commandList.h @@ -0,0 +1,71 @@ +#ifndef __COMMAND_LIST_H__ +#define __COMMAND_LIST_H__ + +#define CMD_PING 0x0001 +// Commands from 0x01 to 0x0A are reserved for future use. Command 0x00 is invalid! + +#define CMD_DRAW_PIXEL 0x000A +#define CMD_DRAW_LINE 0x000B +#define CMD_DRAW_FASTVLINE 0x000C +#define CMD_DRAW_FASTHLINE 0x000D +#define CMD_DRAW_RECT 0x000E +#define CMD_DRAW_CIRCLE 0x000F +#define CMD_DRAW_TRIANGLE 0x0010 +#define CMD_DRAW_ROUND_RECT 0x0011 +#define CMD_DRAW_THICK_LINE 0x0012 +#define CMD_DRAW_ELIPSE 0x0013 +#define CMD_FILL_RECT 0x0014 +#define CMD_FILL_CIRCLE 0x0015 +#define CMD_FILL_TRIANGLE 0x0016 +#define CMD_FILL_ROUND_RECT 0x0017 +#define CMD_FILL_ELIPSE 0x0018 +#define CMD_PRINT 0x0019 +#define CMD_SET_TEXT_SIZE 0x001A +#define CMD_SET_TEXT_COLOR 0x001B +#define CMD_SET_CURSOR 0x001C +#define CMD_SET_TEXT_WRAP 0x001D +#define CMD_SET_ROTATION 0x001E +#define CMD_SD_CARD_INIT 0x001F +#define CMD_SD_CARD_SLEEP 0x0020 +#define CMD_DRAW_BITMAP 0x0021 +#define CMD_DRAW_IMAGE 0x0022 +#define CMD_SET_MODE 0x0023 +#define CMD_GET_MODE 0x0024 +#define CMD_CLEAR_DISPLAY 0x0025 +#define CMD_DISPLAY 0x0026 +#define CMD_PARTIAL_UPDATE 0x0027 +#define CMD_READ_TEMP 0x0028 +#define CMD_READ_TOUCHPAD 0x0029 +#define CMD_READ_BATTERY 0x002A +#define CMD_EINK_PMIC 0x002B +#define CMD_RTC_SET_TIME 0x002C +#define CMD_RTC_SET_DATE 0x002D +#define CMD_RTC_SET_EPOCH 0x002E +#define CMD_RTC_UPDATE 0x002F +#define CMD_RTC_GET_DATA_ALL 0x0030 +#define CMD_RTC_SET_ALARM 0x0031 +#define CMD_RTC_SET_ALARM_EPOCH 0x0032 +#define CMD_RTC_CLEAR_AL_FLAG 0x0033 +#define CMD_RTC_GET_ALARM_ALL 0x0034 +#define CMD_RTC_SET_TIMER 0x0035 +#define CMD_RTC_GET_TIMER_FLAG 0x0036 +#define CMD_RTC_CLEAR_TIMER_FLAG 0x0037 +#define CMD_RTC_DISABLE_TIMER 0x0038 +#define CMD_RTC_IS_SET 0x0039 +#define CMD_RTC_RESET 0x003A +#define CMD_ESP32_DEEPSLEEP 0x003B +#define CMD_ESP32_LIGHTSLEEP 0x003C +#define CMD_TOUCH_INIT 0x003D +#define CMD_TOUCH_AVAILABLE 0x003E +#define CMD_TOUCH_GET_DATA 0x003F +#define CMD_DRAW_IMAGE_BUFFER 0x0040 +#define CMD_CONNECT_WIFI 0x0041 +#define CMD_DISCONNECT_WIFI 0x0042 +#define CMD_GET_REQUEST 0x0043 +#define CMD_POST_REQUEST 0x0044 +#define CMD_FRONTLIGHT 0x0045 +#define CMD_FRONTLIGHT_SET 0x0046 +#define CMD_TOUCH_RAW 0x0047 +#define CMD_TOUCHIN_AREA 0x0048 + +#endif \ No newline at end of file diff --git a/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/settings.h b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/settings.h new file mode 100644 index 000000000..1ab3f0c68 --- /dev/null +++ b/examples/Inkplate6FLICK/Diagnostics/Inkplate6FLICK_Peripheral_Mode/settings.h @@ -0,0 +1,20 @@ +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +// Size of the Serial buffer (in bytes). Change if needed. It's stored in the PSRAM of the ESP32. +#define SERIAL_BUFFER_SIZE 65535 + +// Timeout for the incomming data. It's is counted from the last received char from te serial. +#define SERIAL_TIMEOUT_MS 100 + +// Define default ESP32 UART RX and TX pins +#define SERIAL_UART_RX_PIN 3 +#define SERIAL_UART_TX_PIN 1 + +// Termination char for the arguments (see documentation!) +#define TEMR_CHAR ';' + +// How long it takes to clear the buffer from unprocessed or invalid commands. +#define SERIAL_BUFFER_CLEAN_TIME_MS 60000ULL + +#endif \ No newline at end of file diff --git a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Crypto_Currency_Checker/Inkplate6FLICK_Crypto_Currency_Checker.ino b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Crypto_Currency_Checker/Inkplate6FLICK_Crypto_Currency_Checker.ino index c08944d63..8971bff50 100644 --- a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Crypto_Currency_Checker/Inkplate6FLICK_Crypto_Currency_Checker.ino +++ b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Crypto_Currency_Checker/Inkplate6FLICK_Crypto_Currency_Checker.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_E_Reader/Inkplate6FLICK_E_Reader.ino b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_E_Reader/Inkplate6FLICK_E_Reader.ino index e38f556f7..3620cec17 100644 --- a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_E_Reader/Inkplate6FLICK_E_Reader.ino +++ b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_E_Reader/Inkplate6FLICK_E_Reader.ino @@ -9,6 +9,8 @@ Required components: Inkplate 6FLICK, SD card, USB-C cable. + Link to project documentation: https://soldered.com/documentation/inkplate/projects/e-reader + **HOW TO USE THE PYTHON SCRIPT FOR PREPROCESSING** Open terminal inside script folder and install dependencies using: pip install -r requirements.txt In this example, a Python script named "epubToImg.py" is provided. diff --git a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Google_Calendar/Inkplate6FLICK_Google_Calendar.ino b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Google_Calendar/Inkplate6FLICK_Google_Calendar.ino index 4ee623997..52b7c9bf3 100644 --- a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Google_Calendar/Inkplate6FLICK_Google_Calendar.ino +++ b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Google_Calendar/Inkplate6FLICK_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate6FLICK_Google_Calendar for Soldered Inkplate 6FLICK +Inkplate6FLICK_Google_Calendar for Soldered Inkplate 6FLICK -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Image_Uploader/Inkplate6FLICK_Image_Uploader.ino b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Image_Uploader/Inkplate6FLICK_Image_Uploader.ino index 83ead3230..a7e2199e4 100644 --- a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Image_Uploader/Inkplate6FLICK_Image_Uploader.ino +++ b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_Image_Uploader/Inkplate6FLICK_Image_Uploader.ino @@ -1,9 +1,9 @@ /* - Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 10 + Inkplate 6FLICK Image Uploader Example + Compatible with Soldered Inkplate 6FLICK -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 6FLICK diff --git a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Image_Slideshow/Inkplate6FLICK_OpenAI_Image_Slideshow.ino b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Image_Slideshow/Inkplate6FLICK_OpenAI_Image_Slideshow.ino index c6601cbb6..def0f59ae 100644 --- a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Image_Slideshow/Inkplate6FLICK_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Image_Slideshow/Inkplate6FLICK_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate6FLICK OpenAI Image slideshow - Compatible with Soldered Inkplate 6FLICK + Compatible with Soldered Inkplate 6FLICK -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 6FLICK. Select "Soldered Inkplate6FLICK" from Tools -> Board menu. diff --git a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Text_Prompt/Inkplate6FLICK_OpenAI_Text_Prompt.ino b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Text_Prompt/Inkplate6FLICK_OpenAI_Text_Prompt.ino index 18b07a88e..d10cdc304 100644 --- a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Text_Prompt/Inkplate6FLICK_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenAI_Text_Prompt/Inkplate6FLICK_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate6FLICK OpenAI text prompt generator - Compatible with Soldered Inkplate 6FLICK + Compatible with Soldered Inkplate 6FLICK -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 6FLICK. Select "e-radionica Inkplate6FLICK" or "Soldered Inkplate6FLICK" from Tools -> Board menu. diff --git a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenMeteo_Weather_Station/Inkplate6FLICK_OpenMeteo_Weather_Station.ino b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenMeteo_Weather_Station/Inkplate6FLICK_OpenMeteo_Weather_Station.ino index 67eee0e47..29940c02a 100644 --- a/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenMeteo_Weather_Station/Inkplate6FLICK_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate6FLICK/Projects/Inkplate6FLICK_OpenMeteo_Weather_Station/Inkplate6FLICK_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate6FLICK OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 6 Flick + Compatible with Soldered Inkplate 6 Flick -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate6PLUS/Advanced/DeepSleep/Inkplate6PLUS_Simple_Deep_Sleep/Inkplate6PLUS_Simple_Deep_Sleep.ino b/examples/Inkplate6PLUS/Advanced/DeepSleep/Inkplate6PLUS_Simple_Deep_Sleep/Inkplate6PLUS_Simple_Deep_Sleep.ino index 713e315ee..f529785c1 100644 --- a/examples/Inkplate6PLUS/Advanced/DeepSleep/Inkplate6PLUS_Simple_Deep_Sleep/Inkplate6PLUS_Simple_Deep_Sleep.ino +++ b/examples/Inkplate6PLUS/Advanced/DeepSleep/Inkplate6PLUS_Simple_Deep_Sleep/Inkplate6PLUS_Simple_Deep_Sleep.ino @@ -18,7 +18,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Battery_Voltage/Inkplate6PLUS_Read_Battery_Voltage.ino b/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Battery_Voltage/Inkplate6PLUS_Read_Battery_Voltage.ino index 264bdce29..e3f880b23 100644 --- a/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Battery_Voltage/Inkplate6PLUS_Read_Battery_Voltage.ino +++ b/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Battery_Voltage/Inkplate6PLUS_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Temperature/Inkplate6PLUS_Read_Temperature.ino b/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Temperature/Inkplate6PLUS_Read_Temperature.ino index 422018b2a..c67eb2142 100644 --- a/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Temperature/Inkplate6PLUS_Read_Temperature.ino +++ b/examples/Inkplate6PLUS/Advanced/Other/Inkplate6PLUS_Read_Temperature/Inkplate6PLUS_Read_Temperature.ino @@ -14,7 +14,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6PLUS/Advanced/WEB_WiFi/Inkplate6PLUS_Show_Pictures_From_Web/Inkplate6PLUS_Show_Pictures_From_Web.ino b/examples/Inkplate6PLUS/Advanced/WEB_WiFi/Inkplate6PLUS_Show_Pictures_From_Web/Inkplate6PLUS_Show_Pictures_From_Web.ino index 545ada36f..a7b983a45 100644 --- a/examples/Inkplate6PLUS/Advanced/WEB_WiFi/Inkplate6PLUS_Show_Pictures_From_Web/Inkplate6PLUS_Show_Pictures_From_Web.ino +++ b/examples/Inkplate6PLUS/Advanced/WEB_WiFi/Inkplate6PLUS_Show_Pictures_From_Web/Inkplate6PLUS_Show_Pictures_From_Web.ino @@ -17,7 +17,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Black_And_White/logo.h b/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Black_And_White/logo.h index 89f6b5c9b..7908bf438 100644 --- a/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Black_And_White/logo.h +++ b/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Black_And_White/logo.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t logo[] PROGMEM = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, diff --git a/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Grayscale/image.h b/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Grayscale/image.h index 0895394a7..b3768320c 100644 --- a/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Grayscale/image.h +++ b/examples/Inkplate6PLUS/Basic/Inkplate6PLUS_Grayscale/image.h @@ -1,7 +1,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ const uint8_t picture1[] = { 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x98, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xbb, 0xba, 0xaa, 0xaa, 0x99, 0x99, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x88, 0x87, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xa9, 0x99, 0x99, 0xaa, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbc, 0xcc, 0xcc, 0xcb, 0xbb, 0xbb, 0xbb, 0xaa, 0xaa, 0x9a, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xaa, 0xaa, 0xaa, 0xaa, 0x99, 0x99, 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x88, 0x88, 0x88, 0x89, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x9a, 0xaa, 0xaa, 0xba, 0xaa, 0xba, 0x9a, 0xba, 0xaa, 0xa9, 0x98, 0x88, 0x87, 0x77, 0x88, 0x88, 0x77, 0x88, 0x88, 0x88, 0x87, 0x88, 0x88, 0x78, 0x88, 0x87, 0x77, 0x77, diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h deleted file mode 100644 index 7f2ed9e6b..000000000 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h +++ /dev/null @@ -1,203 +0,0 @@ -// 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 Open_Sans_SemiBold_16Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xDB, 0x6D, 0xB6, 0x03, 0x60, // '!' - 0xDB, 0x6D, 0xB6, // '"' - 0x09, 0x03, 0x20, 0x6C, 0x3F, 0xE1, 0x20, 0x24, 0x04, 0x87, 0xFC, 0x36, 0x04, 0xC0, 0x90, 0x12, 0x00, // '#' - 0x10, 0x10, 0x7C, 0xFE, 0xD0, 0xD0, 0x78, 0x3C, 0x16, 0x96, 0xFE, 0xFC, 0x10, 0x10, // '$' - 0x70, 0xC6, 0x84, 0x26, 0x61, 0x32, 0x09, 0xB0, 0x69, 0x71, 0xD2, 0xC1, 0xB2, 0x09, 0x90, 0xCC, 0x84, 0x2C, - 0x61, 0xC0, // '%' - 0x3C, 0x07, 0xE0, 0x66, 0x06, 0x60, 0x6C, 0x03, 0x80, 0x78, 0xCC, 0xCC, 0xC7, 0x8C, 0x38, 0xFF, 0x87, 0xCC, // '&' - 0xDB, 0x60, // ''' - 0x23, 0x11, 0x8C, 0x42, 0x10, 0x84, 0x31, 0x84, 0x30, 0x80, // '(' - 0x43, 0x08, 0x63, 0x08, 0x42, 0x10, 0x8C, 0x62, 0x31, 0x00, // ')' - 0x10, 0x10, 0xD6, 0xFE, 0x38, 0x6C, 0x44, // '*' - 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, // '+' - 0x66, 0x44, // ',' - 0xEE, // '-' - 0xD8, // '.' - 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x00, // '/' - 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, // '0' - 0x18, 0xEF, 0x96, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, // '1' - 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x08, 0x10, 0x20, 0xC0, 0xFE, 0xFE, // '2' - 0x7C, 0xFE, 0x86, 0x06, 0x04, 0x78, 0x7C, 0x06, 0x06, 0x06, 0xFE, 0xF8, // '3' - 0x06, 0x03, 0x80, 0xE0, 0x78, 0x16, 0x0D, 0x86, 0x61, 0x18, 0xFF, 0xBF, 0xE0, 0x60, 0x18, // '4' - 0x7C, 0xFC, 0xC0, 0xC0, 0xFC, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFC, 0xF8, // '5' - 0x1E, 0x7E, 0x60, 0xC0, 0xFC, 0xFE, 0xC6, 0xC2, 0xC2, 0xC6, 0x7E, 0x3C, // '6' - 0xFE, 0xFE, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, // '7' - 0x7C, 0xFE, 0xC6, 0xC6, 0x64, 0x38, 0x7C, 0xC6, 0x82, 0xC6, 0xFE, 0x7C, // '8' - 0x78, 0xFC, 0xC6, 0xC6, 0x86, 0xC6, 0xFE, 0x7E, 0x06, 0x0C, 0xFC, 0xF0, // '9' - 0xD8, 0x00, 0x06, 0xC0, // ':' - 0x66, 0x00, 0x00, 0x06, 0x64, 0x40, // ';' - 0x02, 0x0E, 0x38, 0xE0, 0xC0, 0x38, 0x0E, 0x02, // '<' - 0xFE, 0x00, 0x00, 0x00, 0xFE, // '=' - 0x80, 0xE0, 0x38, 0x0E, 0x06, 0x38, 0xE0, 0x80, // '>' - 0x78, 0xFC, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, // '?' - 0x0F, 0x81, 0xC6, 0x18, 0x08, 0x9F, 0x6D, 0x99, 0x4C, 0xCA, 0x46, 0x52, 0x32, 0x99, 0xB6, 0x77, 0x10, 0x00, - 0x61, 0x01, 0xF8, 0x00, // '@' - 0x0E, 0x00, 0xE0, 0x0A, 0x01, 0xB0, 0x1B, 0x03, 0x18, 0x31, 0x83, 0xF8, 0x7F, 0xC6, 0x0C, 0x60, 0xCC, 0x06, // 'A' - 0xFC, 0x7F, 0x21, 0xD0, 0x68, 0x67, 0xF3, 0xF9, 0x06, 0x83, 0x41, 0xBF, 0xDF, 0x80, // 'B' - 0x1F, 0x3F, 0x98, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x1F, 0xC3, 0xE0, // 'C' - 0xFC, 0x3F, 0x88, 0x72, 0x0E, 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x83, 0xA1, 0xCF, 0xE3, 0xF0, // 'D' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x03, 0xF7, 0xE0, // 'E' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x02, 0x04, 0x00, // 'F' - 0x1F, 0x87, 0xF1, 0xC0, 0x70, 0x0C, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE0, 0xCE, 0x19, 0xFF, 0x0F, 0xC0, // 'G' - 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x81, 0xBF, 0xEF, 0xFA, 0x06, 0x81, 0xA0, 0x68, 0x1A, 0x06, // 'H' - 0xAA, 0xAA, 0xAA, // 'I' - 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x63, 0x7B, 0x80, // 'J' - 0xC3, 0x30, 0xCC, 0x63, 0x30, 0xD8, 0x36, 0x0F, 0x83, 0x30, 0xC6, 0x31, 0x8C, 0x33, 0x06, // 'K' - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xFE, // 'L' - 0xC0, 0x6E, 0x0E, 0xE0, 0xEA, 0x0A, 0xB1, 0xAB, 0x12, 0x91, 0x29, 0xB2, 0x9A, 0x28, 0xE2, 0x8E, 0x28, 0xC2, // 'M' - 0xC0, 0xB8, 0x2E, 0x0A, 0xC2, 0xB8, 0xA6, 0x28, 0xCA, 0x3A, 0x86, 0xA0, 0xE8, 0x3A, 0x06, // 'N' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0xC1, 0xF0, // 'O' - 0xF8, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x80, 0x80, 0x80, 0x80, // 'P' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0x81, 0xF0, - 0x03, 0x80, 0x18, 0x00, 0xC0, // 'Q' - 0xFC, 0x3F, 0x8C, 0x73, 0x0C, 0xC3, 0x31, 0xCF, 0xE3, 0xF0, 0xCC, 0x31, 0x8C, 0x33, 0x0E, // 'R' - 0x7C, 0xFE, 0xC2, 0xC0, 0xE0, 0x78, 0x1C, 0x06, 0x06, 0x86, 0xFE, 0xFC, // 'S' - 0xFF, 0xBF, 0xE0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'T' - 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xCC, 0x31, 0xFE, 0x0F, 0x00, // 'U' - 0xC0, 0xD8, 0x11, 0x86, 0x30, 0xC6, 0x10, 0x66, 0x0C, 0xC1, 0x90, 0x1E, 0x03, 0xC0, 0x70, 0x06, 0x00, // 'V' - 0xC3, 0x86, 0xC3, 0x86, 0x63, 0x8C, 0x62, 0x8C, 0x66, 0xCC, 0x66, 0xCC, 0x24, 0xC8, 0x34, 0x58, 0x3C, 0x78, - 0x3C, 0x78, 0x18, 0x30, 0x18, 0x30, // 'W' - 0x61, 0x8C, 0x30, 0xCC, 0x19, 0x81, 0xE0, 0x18, 0x07, 0x80, 0xF0, 0x33, 0x06, 0x61, 0x86, 0x60, 0x60, // 'X' - 0xC1, 0x98, 0xC6, 0x30, 0xD8, 0x36, 0x07, 0x01, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'Y' - 0xFE, 0x7F, 0x01, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x3F, 0xDF, 0xE0, // 'Z' - 0xF6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xC0, // '[' - 0xC0, 0x81, 0x83, 0x02, 0x06, 0x0C, 0x08, 0x18, 0x30, 0x20, 0x60, // '\' - 0xF1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1B, 0xC0, // ']' - 0x08, 0x07, 0x01, 0x40, 0x98, 0x22, 0x10, 0xCC, 0x10, // '^' - 0xFE, // '_' - 0xC4, 0x20, // '`' - 0x7C, 0x7E, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xFE, 0x76, // 'a' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB8, 0xDF, 0xCD, 0xE0, // 'b' - 0x3C, 0xFB, 0x06, 0x0C, 0x18, 0x30, 0x3E, 0x3C, // 'c' - 0x03, 0x01, 0x80, 0xC0, 0x67, 0xB3, 0xFB, 0x1D, 0x86, 0xC3, 0x61, 0xB1, 0xDF, 0xE7, 0xB0, // 'd' - 0x3C, 0x7E, 0xC6, 0xFE, 0xFE, 0xC0, 0xC0, 0x7E, 0x3C, // 'e' - 0x1E, 0x3C, 0x30, 0x30, 0x7C, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // 'f' - 0x3F, 0x99, 0x86, 0x31, 0x8C, 0x62, 0x0F, 0x06, 0x01, 0xFC, 0x7F, 0x30, 0x6C, 0x1B, 0x0C, 0x7E, 0x00, // 'g' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x30, // 'h' - 0xD8, 0x0D, 0xB6, 0xDB, 0x6C, // 'i' - 0x31, 0x80, 0x03, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDE, 0xE0, // 'j' - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x66, 0x63, 0x61, 0xB0, 0xF8, 0x7C, 0x33, 0x18, 0xCC, 0x70, // 'k' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6C, // 'l' - 0xDC, 0xF3, 0xFF, 0xEE, 0x71, 0xB0, 0xC6, 0xC2, 0x1B, 0x08, 0x6C, 0x21, 0xB0, 0x86, 0xC2, 0x18, // 'm' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x00, // 'n' - 0x3C, 0x3F, 0x30, 0xD8, 0x6C, 0x36, 0x1B, 0x0C, 0xFC, 0x3C, 0x00, // 'o' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x8D, 0xFC, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x00, // 'p' - 0x7B, 0x3F, 0xB1, 0xD8, 0x6C, 0x36, 0x1B, 0x1D, 0xFE, 0x7B, 0x01, 0x80, 0xC0, 0x60, 0x30, // 'q' - 0xDD, 0xFB, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 'r' - 0x79, 0xFB, 0x17, 0x07, 0x81, 0x83, 0x7E, 0xF8, // 's' - 0x20, 0x41, 0xF7, 0xE6, 0x0C, 0x18, 0x30, 0x60, 0x78, 0xF0, // 't' - 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x1C, 0xFE, 0x7B, 0x00, // 'u' - 0xC1, 0x90, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x40, 0x70, 0x1C, 0x00, // 'v' - 0xC7, 0x19, 0x1C, 0x46, 0x53, 0x19, 0x4C, 0x6D, 0xB0, 0xB6, 0x83, 0x8E, 0x0E, 0x38, 0x38, 0xE0, // 'w' - 0x63, 0x18, 0xC3, 0x60, 0x70, 0x1C, 0x07, 0x03, 0x61, 0x8C, 0x63, 0x00, // 'x' - 0xC1, 0x98, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x60, 0x70, 0x1C, 0x06, 0x01, 0x83, 0xC0, 0xE0, 0x00, // 'y' - 0xFD, 0xF8, 0x30, 0xC3, 0x0C, 0x30, 0x7E, 0xFC, // 'z' - 0x1C, 0x70, 0xC1, 0x83, 0x06, 0x38, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x03, 0x07, 0x00, // '{' - 0xAA, 0xAA, 0xAA, 0xAA, 0x80, // '|' - 0xE0, 0xE0, 0xC1, 0x83, 0x06, 0x07, 0x1C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_16Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 5, 0, 0}, // ' ' - {1, 3, 12, 5, 1, -12}, // '!' - {6, 6, 4, 8, 1, -12}, // '"' - {9, 11, 12, 11, 0, -12}, // '#' - {26, 8, 14, 10, 1, -13}, // '$' - {40, 13, 12, 15, 1, -12}, // '%' - {60, 12, 12, 13, 1, -12}, // '&' - {78, 3, 4, 5, 1, -12}, // ''' - {80, 5, 15, 6, 1, -12}, // '(' - {90, 5, 15, 6, 0, -12}, // ')' - {100, 8, 7, 10, 1, -13}, // '*' - {107, 8, 7, 10, 1, -9}, // '+' - {114, 4, 4, 5, 0, -2}, // ',' - {116, 4, 2, 6, 1, -5}, // '-' - {117, 3, 2, 5, 1, -2}, // '.' - {118, 7, 12, 7, 0, -12}, // '/' - {129, 8, 12, 10, 1, -12}, // '0' - {141, 6, 12, 10, 1, -12}, // '1' - {150, 8, 12, 10, 1, -12}, // '2' - {162, 8, 12, 10, 1, -12}, // '3' - {174, 10, 12, 10, 0, -12}, // '4' - {189, 8, 12, 10, 1, -12}, // '5' - {201, 8, 12, 10, 1, -12}, // '6' - {213, 8, 12, 10, 1, -12}, // '7' - {225, 8, 12, 10, 1, -12}, // '8' - {237, 8, 12, 10, 1, -12}, // '9' - {249, 3, 9, 5, 1, -9}, // ':' - {253, 4, 11, 5, 0, -9}, // ';' - {259, 8, 8, 10, 1, -10}, // '<' - {267, 8, 5, 10, 1, -8}, // '=' - {272, 8, 8, 10, 1, -10}, // '>' - {280, 8, 12, 8, 0, -12}, // '?' - {292, 13, 13, 15, 1, -12}, // '@' - {314, 12, 12, 12, 0, -12}, // 'A' - {332, 9, 12, 12, 2, -12}, // 'B' - {346, 9, 12, 11, 1, -12}, // 'C' - {360, 10, 12, 13, 2, -12}, // 'D' - {375, 7, 12, 10, 2, -12}, // 'E' - {386, 7, 12, 10, 2, -12}, // 'F' - {397, 11, 12, 13, 1, -12}, // 'G' - {414, 10, 12, 13, 2, -12}, // 'H' - {429, 2, 12, 6, 2, -12}, // 'I' - {432, 5, 15, 6, -1, -12}, // 'J' - {442, 10, 12, 11, 1, -12}, // 'K' - {457, 8, 12, 10, 2, -12}, // 'L' - {469, 12, 12, 16, 2, -12}, // 'M' - {487, 10, 12, 14, 2, -12}, // 'N' - {502, 12, 12, 14, 1, -12}, // 'O' - {520, 8, 12, 11, 2, -12}, // 'P' - {532, 12, 15, 14, 1, -12}, // 'Q' - {555, 10, 12, 11, 1, -12}, // 'R' - {570, 8, 12, 10, 1, -12}, // 'S' - {582, 10, 12, 10, 0, -12}, // 'T' - {597, 11, 12, 13, 1, -12}, // 'U' - {614, 11, 12, 11, 0, -12}, // 'V' - {631, 16, 12, 16, 0, -12}, // 'W' - {655, 11, 12, 11, 0, -12}, // 'X' - {672, 10, 12, 10, 0, -12}, // 'Y' - {687, 9, 12, 10, 1, -12}, // 'Z' - {701, 5, 15, 6, 1, -12}, // '[' - {711, 7, 12, 7, 0, -12}, // '\' - {722, 5, 15, 6, 0, -12}, // ']' - {732, 10, 7, 10, 0, -12}, // '^' - {741, 8, 1, 8, 0, 1}, // '_' - {742, 4, 3, 10, 3, -13}, // '`' - {744, 8, 9, 10, 1, -9}, // 'a' - {753, 9, 13, 11, 1, -13}, // 'b' - {768, 7, 9, 9, 1, -9}, // 'c' - {776, 9, 13, 11, 1, -13}, // 'd' - {791, 8, 9, 10, 1, -9}, // 'e' - {800, 8, 13, 7, 0, -13}, // 'f' - {813, 10, 13, 10, 0, -9}, // 'g' - {830, 9, 13, 11, 1, -13}, // 'h' - {845, 3, 13, 5, 1, -13}, // 'i' - {850, 5, 17, 5, -1, -13}, // 'j' - {861, 9, 13, 10, 1, -13}, // 'k' - {876, 3, 13, 5, 1, -13}, // 'l' - {881, 14, 9, 16, 1, -9}, // 'm' - {897, 9, 9, 11, 1, -9}, // 'n' - {908, 9, 9, 11, 1, -9}, // 'o' - {919, 9, 13, 11, 1, -9}, // 'p' - {934, 9, 13, 11, 1, -9}, // 'q' - {949, 7, 9, 8, 1, -9}, // 'r' - {957, 7, 9, 9, 1, -9}, // 's' - {965, 7, 11, 7, 0, -11}, // 't' - {975, 9, 9, 11, 1, -9}, // 'u' - {986, 10, 9, 10, 0, -9}, // 'v' - {998, 14, 9, 14, 0, -9}, // 'w' - {1014, 10, 9, 10, 0, -9}, // 'x' - {1026, 10, 13, 10, 0, -9}, // 'y' - {1043, 7, 9, 9, 1, -9}, // 'z' - {1051, 7, 15, 7, 0, -12}, // '{' - {1065, 2, 17, 10, 4, -13}, // '|' - {1070, 7, 15, 7, 0, -12} // '}' -}; -const GFXfont Open_Sans_SemiBold_16 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_16Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_16Glyphs, 0x20, 0x7E, 23}; \ No newline at end of file diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h deleted file mode 100644 index 0fa23e60d..000000000 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h +++ /dev/null @@ -1,276 +0,0 @@ -// 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 Open_Sans_SemiBold_24Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x0E, 0xEE, 0xE0, // '!' - 0x66, 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x30, // '"' - 0x06, 0x30, 0x0C, 0x60, 0x18, 0xC0, 0x71, 0x80, 0xC6, 0x0F, 0xFF, 0x9F, 0xFF, 0x06, 0x30, 0x18, 0xE0, 0x31, - 0x83, 0xFF, 0xF7, 0xFF, 0xE3, 0x8C, 0x06, 0x38, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, // '#' - 0x06, 0x00, 0x30, 0x07, 0xF0, 0xFF, 0xC7, 0x66, 0x73, 0x03, 0x98, 0x0E, 0xC0, 0x7E, 0x00, 0xFC, 0x01, 0xF8, - 0x0D, 0xC0, 0x67, 0x03, 0x3B, 0x1B, 0x9F, 0xFC, 0x7F, 0x80, 0x30, 0x01, 0x80, // '$' - 0x3C, 0x06, 0x07, 0xE0, 0xE0, 0xE6, 0x0C, 0x0C, 0x71, 0x80, 0xC7, 0x18, 0x0C, 0x73, 0x00, 0xC7, 0x70, 0x0E, - 0x66, 0x78, 0x7E, 0xEF, 0xC3, 0xCC, 0xCE, 0x01, 0xDC, 0x60, 0x19, 0xC6, 0x03, 0x1C, 0x60, 0x71, 0xC6, 0x06, - 0x0C, 0xE0, 0xE0, 0xFC, 0x0C, 0x07, 0x80, // '%' - 0x0F, 0x80, 0x0F, 0xF0, 0x03, 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x0E, 0x70, 0x01, 0xFC, 0x00, 0x3C, 0x00, - 0x3F, 0x07, 0x1F, 0xE1, 0xCF, 0x3C, 0xE3, 0x83, 0xB8, 0xE0, 0x7C, 0x38, 0x0F, 0x07, 0x0F, 0xC1, 0xFF, 0xB8, - 0x1F, 0x87, 0x00, // '&' - 0xDB, 0x6D, 0x80, // ''' - 0x1C, 0x30, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xE0, 0xC1, - 0xC0, // '(' - 0xE0, 0xC1, 0xC1, 0x83, 0x83, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x71, 0xC3, 0x0E, - 0x00, // ')' - 0x0E, 0x00, 0xE0, 0x0E, 0x08, 0x42, 0xFF, 0xEF, 0xFE, 0x0E, 0x01, 0xB0, 0x3B, 0x83, 0x18, 0x11, 0x00, // '*' - 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x7F, 0xFB, 0xFF, 0xC0, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, // '+' - 0x73, 0x39, 0xCC, 0x60, // ',' - 0xFD, 0xF8, // '-' - 0xEE, 0xEE, // '.' - 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x07, - 0x01, 0x80, 0xE0, 0x00, // '/' - 0x1F, 0x01, 0xFE, 0x1C, 0x38, 0xE1, 0xCE, 0x06, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x71, 0xC3, 0x87, 0xF8, 0x0F, 0x80, // '0' - 0x0E, 0x1E, 0x3E, 0xF6, 0xE6, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // '1' - 0x1F, 0x83, 0xFE, 0x1C, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF0, // '2' - 0x3F, 0x87, 0xFE, 0x18, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0x00, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x7B, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '3' - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x1B, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0x38, 0x0E, 0x70, 0x38, 0xE0, 0x61, - 0xC1, 0x83, 0x87, 0xFF, 0xEF, 0xFF, 0xC0, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, // '4' - 0x7F, 0xE3, 0xFF, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x73, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '5' - 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x9E, 0x1F, 0xFC, 0xF0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x39, 0xE3, 0x87, 0xF8, 0x0F, 0x80, // '6' - 0xFF, 0xF7, 0xFF, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, - 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x38, 0x00, // '7' - 0x1F, 0x81, 0xFE, 0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x38, 0x71, 0xE7, 0x07, 0xF0, 0x1F, 0x83, 0xDE, 0x1C, 0x39, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0xC3, 0x8F, 0xFC, 0x1F, 0x80, // '8' - 0x1F, 0x01, 0xFE, 0x1C, 0x79, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0x70, 0xF3, 0xFF, 0x87, 0xDC, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x0F, 0x0F, 0xF0, 0x7E, 0x00, // '9' - 0xEE, 0xEE, 0x00, 0x00, 0x0E, 0xEE, 0xE0, // ':' - 0x73, 0x9C, 0xE0, 0x00, 0x00, 0x00, 0x1C, 0xE6, 0x73, 0x18, // ';' - 0x00, 0x10, 0x03, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3C, - 0x00, 0x20, // '<' - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, // '=' - 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, 0x3C, 0x01, - 0x00, 0x00, // '>' - 0x3F, 0x1F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x80, 0x70, 0x0E, 0x00, 0x00, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, // '?' - 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0x80, 0xE0, 0x30, 0x01, 0x83, 0x00, 0x0E, 0x38, 0x7E, 0x31, 0x8F, 0xF1, - 0x8C, 0x61, 0x86, 0xE7, 0x0C, 0x36, 0x30, 0x63, 0xB1, 0x83, 0x19, 0xCE, 0x38, 0xC6, 0x3F, 0xFC, 0x30, 0xF1, - 0xC1, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0x00, // '@' - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x66, 0x00, 0x73, 0x80, 0x39, 0xC0, 0x18, 0x60, 0x1C, - 0x38, 0x0E, 0x1C, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0x81, 0xC3, 0x80, 0x71, 0xC0, 0x38, 0xC0, 0x1C, 0xE0, 0x07, - 0x00, // 'A' - 0xFF, 0x83, 0xFF, 0x8E, 0x0F, 0x38, 0x1C, 0xE0, 0x73, 0x81, 0xCE, 0x0E, 0x3F, 0xF0, 0xFF, 0xE3, 0x83, 0xCE, - 0x07, 0x38, 0x0E, 0xE0, 0x3B, 0x81, 0xEE, 0x0F, 0x3F, 0xF8, 0xFF, 0xC0, // 'B' - 0x07, 0xF0, 0x7F, 0xE3, 0xC1, 0x8E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x87, 0xFE, 0x07, 0xF0, // 'C' - 0xFF, 0x80, 0xFF, 0xE0, 0xE0, 0xF0, 0xE0, 0x38, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x38, 0xE0, 0xF0, 0xFF, 0xE0, 0xFF, 0x80, // 'D' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0xFC, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'E' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'F' - 0x03, 0xF8, 0x1F, 0xF8, 0xF8, 0x21, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0xFD, 0xC1, - 0xF9, 0x80, 0x73, 0x80, 0xE7, 0x01, 0xCF, 0x03, 0x8F, 0x07, 0x0F, 0xFE, 0x07, 0xF8, // 'G' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1C, // 'H' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, // 'I' - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x1C, 0xFC, 0xF0, // 'J' - 0xE0, 0x73, 0x83, 0xCE, 0x0E, 0x38, 0x70, 0xE3, 0x83, 0x9C, 0x0E, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xDC, 0x0E, - 0x78, 0x38, 0xE0, 0xE1, 0xC3, 0x87, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x78, // 'K' - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'L' - 0xF0, 0x03, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7C, 0x03, 0xEF, 0xC0, 0xFD, 0xD8, 0x1B, 0xBB, 0x07, 0x77, 0x70, - 0xCE, 0xE6, 0x19, 0xDC, 0xC7, 0x3B, 0x9C, 0xC7, 0x71, 0x98, 0xEE, 0x3F, 0x1D, 0xC7, 0xC3, 0xB8, 0x78, 0x77, - 0x0F, 0x0E, 0xE1, 0xC1, 0xC0, // 'M' - 0xF0, 0x0E, 0xF8, 0x0E, 0xF8, 0x0E, 0xFC, 0x0E, 0xFE, 0x0E, 0xEE, 0x0E, 0xE7, 0x0E, 0xE7, 0x0E, 0xE3, 0x8E, - 0xE1, 0xCE, 0xE1, 0xCE, 0xE0, 0xEE, 0xE0, 0xFE, 0xE0, 0x7E, 0xE0, 0x3E, 0xE0, 0x3E, 0xE0, 0x1E, // 'N' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, // 'O' - 0xFF, 0x87, 0xFF, 0x38, 0x39, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x3C, 0xFF, 0xC7, 0xF8, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x00, // 'P' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, // 'Q' - 0xFF, 0x03, 0xFF, 0x0E, 0x1E, 0x38, 0x38, 0xE0, 0xE3, 0x83, 0x8E, 0x0E, 0x38, 0x78, 0xFF, 0xC3, 0xFC, 0x0E, - 0x38, 0x38, 0xE0, 0xE1, 0xC3, 0x83, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x70, // 'R' - 0x1F, 0x87, 0xFC, 0x70, 0x4E, 0x00, 0xE0, 0x0E, 0x00, 0x78, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0xC1, 0xCF, 0xFC, 0x7F, 0x00, // 'S' - 0xFF, 0xFD, 0xFF, 0xF8, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'T' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1D, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xCE, 0x07, 0x1E, 0x1E, 0x1F, 0xF8, 0x0F, 0xC0, // 'U' - 0xE0, 0x0E, 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x1C, 0x30, 0x18, 0x38, 0x38, 0x38, 0x38, 0x18, 0x30, 0x1C, 0x70, - 0x1C, 0x70, 0x0C, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x06, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, // 'V' - 0xE0, 0x38, 0x0E, 0x60, 0x38, 0x0C, 0x70, 0x7C, 0x1C, 0x70, 0x7C, 0x1C, 0x70, 0x6C, 0x1C, 0x30, 0xEC, 0x18, - 0x38, 0xEE, 0x38, 0x38, 0xCE, 0x38, 0x38, 0xC6, 0x38, 0x19, 0xC7, 0x30, 0x1D, 0xC7, 0x70, 0x1D, 0x83, 0x70, - 0x1D, 0x83, 0x70, 0x0F, 0x83, 0xE0, 0x0F, 0x01, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xC0, // 'W' - 0x70, 0x1C, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0xC0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x38, 0x38, 0x70, 0x1C, 0xE0, 0x1E, // 'X' - 0xE0, 0x1C, 0xE0, 0x71, 0xC0, 0xE1, 0xC3, 0x83, 0x87, 0x03, 0x9C, 0x07, 0x38, 0x07, 0xE0, 0x07, 0x80, 0x0F, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'Y' - 0xFF, 0xF7, 0xFF, 0x80, 0x38, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0x80, 0x1F, 0xFE, 0xFF, 0xF0, // 'Z' - 0xFB, 0xEC, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3E, 0xF8, // '[' - 0xE0, 0x18, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, // '\' - 0xFB, 0xE1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0xBE, 0xF8, // ']' - 0x06, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x60, 0x1D, 0x80, 0x63, 0x03, 0x8C, 0x0C, 0x18, 0x30, 0x61, 0x80, 0xC6, - 0x03, 0x00, // '^' - 0xFF, 0xDF, 0xF8, // '_' - 0xF0, 0xE0, 0xE0, 0xE0, // '`' - 0x1F, 0x83, 0xFC, 0x30, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x7F, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'a' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x77, 0xC3, 0xFF, 0x1E, 0x1C, 0xE0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x83, 0x9E, 0x1C, 0xDF, 0xC6, 0x7C, 0x00, // 'b' - 0x0F, 0xC7, 0xF9, 0xE0, 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE1, 0x1F, 0xE1, 0xF8, // 'c' - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x0F, 0xB8, 0xFF, 0xCE, 0x1E, 0x70, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x39, 0xC1, 0xCE, 0x1E, 0x3F, 0xF0, 0xF9, 0x80, // 'd' - 0x0F, 0x81, 0xFE, 0x1C, 0x38, 0xE0, 0xEE, 0x07, 0x7F, 0xFB, 0xFF, 0xDC, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x08, - 0x7F, 0xC0, 0xFC, 0x00, // 'e' - 0x07, 0xC3, 0xF0, 0x70, 0x0C, 0x01, 0x80, 0xFF, 0x3F, 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, - 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, // 'f' - 0x0F, 0xF8, 0xFF, 0xE3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x83, 0x8E, 0x0F, 0xF0, 0x1F, 0x80, 0xC0, 0x03, - 0x00, 0x0F, 0xF8, 0x3F, 0xF1, 0xC1, 0xCE, 0x03, 0x38, 0x0C, 0xE0, 0x71, 0xFF, 0x83, 0xF8, 0x00, // 'g' - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0xF8, 0xFF, 0xCF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, // 'h' - 0xEE, 0xE0, 0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'i' - 0x1C, 0x38, 0x70, 0x00, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, - 0xC3, 0xBE, 0x78, // 'j' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x73, 0x87, 0x1C, 0x70, 0xE7, 0x07, 0x70, 0x3F, 0x01, - 0xFC, 0x0F, 0xF0, 0x73, 0x83, 0x8E, 0x1C, 0x38, 0xE0, 0xE7, 0x07, 0x80, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xCF, 0x8F, 0x8D, 0xFD, 0xFC, 0xF1, 0xF0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, - 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xE0, // 'm' - 0xCF, 0x8D, 0xFC, 0xF0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xE0, // 'n' - 0x0F, 0x80, 0xFF, 0x87, 0x8F, 0x1C, 0x1C, 0xE0, 0x3B, 0x80, 0xEE, 0x03, 0xB8, 0x0E, 0xE0, 0x39, 0xC1, 0xC7, - 0x8F, 0x0F, 0xF8, 0x0F, 0x80, // 'o' - 0xCF, 0x86, 0xFE, 0x3C, 0x39, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x07, 0x3C, 0x39, - 0xFF, 0x8E, 0xF8, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, // 'p' - 0x1F, 0x31, 0xFF, 0x9C, 0x3C, 0xE0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x73, 0x83, 0x9C, 0x3C, - 0x7F, 0xE1, 0xF7, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, // 'q' - 0xCF, 0x6F, 0x3F, 0x9E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, // 'r' - 0x3F, 0x8F, 0xF3, 0x82, 0x70, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x3C, 0x01, 0xC0, 0x3B, 0x07, 0x7F, 0xC7, 0xF0, // 's' - 0x18, 0x0C, 0x0E, 0x0F, 0xEF, 0xF1, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0x7C, 0x1E, // 't' - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'u' - 0xE0, 0x39, 0x80, 0xC7, 0x07, 0x1C, 0x1C, 0x30, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xD8, 0x03, 0xE0, 0x07, 0x00, // 'v' - 0xE0, 0xF0, 0x73, 0x07, 0x83, 0x1C, 0x3C, 0x38, 0xE3, 0xF1, 0xC3, 0x1B, 0x8C, 0x1C, 0xCC, 0xE0, 0xE6, 0x67, - 0x07, 0x73, 0xB8, 0x1B, 0x0D, 0x80, 0xD8, 0x7C, 0x07, 0xC3, 0xE0, 0x1C, 0x1E, 0x00, 0xE0, 0x70, 0x00, // 'w' - 0x70, 0x70, 0xE3, 0x83, 0x8E, 0x07, 0x70, 0x0D, 0x80, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x1D, 0xC0, 0x77, 0x03, - 0x8E, 0x1C, 0x1C, 0x70, 0x70, // 'x' - 0xE0, 0x39, 0xC1, 0xC7, 0x07, 0x1C, 0x1C, 0x38, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xF8, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x00, // 'y' - 0xFF, 0xBF, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0xFE, 0xFF, 0x80, // 'z' - 0x0E, 0x1E, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0xF0, 0xE0, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x1C, 0x1E, 0x06, // '{' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // '|' - 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x1E, 0x0E, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x70, 0xF0, 0xE0 // '}' -}; -const GFXglyph Open_Sans_SemiBold_24Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 7, 0, 0}, // ' ' - {1, 4, 17, 8, 2, -17}, // '!' - {10, 9, 6, 11, 1, -17}, // '"' - {17, 15, 17, 17, 1, -17}, // '#' - {49, 13, 19, 15, 1, -18}, // '$' - {80, 20, 17, 22, 1, -17}, // '%' - {123, 18, 17, 19, 1, -17}, // '&' - {162, 3, 6, 7, 2, -17}, // ''' - {165, 7, 21, 9, 1, -17}, // '(' - {184, 7, 21, 9, 1, -17}, // ')' - {203, 12, 11, 14, 1, -18}, // '*' - {220, 13, 12, 15, 1, -15}, // '+' - {240, 5, 6, 7, 1, -3}, // ',' - {244, 7, 2, 9, 1, -8}, // '-' - {246, 4, 4, 8, 2, -4}, // '.' - {248, 10, 17, 10, 0, -17}, // '/' - {270, 13, 17, 15, 1, -17}, // '0' - {298, 8, 17, 15, 2, -17}, // '1' - {315, 13, 17, 15, 1, -17}, // '2' - {343, 13, 17, 15, 1, -17}, // '3' - {371, 15, 17, 15, 0, -17}, // '4' - {403, 13, 17, 15, 1, -17}, // '5' - {431, 13, 17, 15, 1, -17}, // '6' - {459, 13, 17, 15, 1, -17}, // '7' - {487, 13, 17, 15, 1, -17}, // '8' - {515, 13, 17, 15, 1, -17}, // '9' - {543, 4, 13, 8, 2, -13}, // ':' - {550, 5, 16, 8, 1, -13}, // ';' - {560, 13, 12, 15, 1, -15}, // '<' - {580, 13, 7, 15, 1, -12}, // '=' - {592, 13, 12, 15, 1, -15}, // '>' - {612, 11, 17, 12, 0, -17}, // '?' - {636, 21, 19, 23, 1, -17}, // '@' - {686, 17, 17, 17, 0, -17}, // 'A' - {723, 14, 17, 17, 2, -17}, // 'B' - {753, 14, 17, 16, 1, -17}, // 'C' - {783, 16, 17, 19, 2, -17}, // 'D' - {817, 11, 17, 14, 2, -17}, // 'E' - {841, 11, 17, 14, 2, -17}, // 'F' - {865, 15, 17, 18, 1, -17}, // 'G' - {897, 15, 17, 19, 2, -17}, // 'H' - {929, 4, 17, 8, 2, -17}, // 'I' - {938, 8, 22, 8, -2, -17}, // 'J' - {960, 14, 17, 16, 2, -17}, // 'K' - {990, 11, 17, 14, 2, -17}, // 'L' - {1014, 19, 17, 23, 2, -17}, // 'M' - {1055, 16, 17, 20, 2, -17}, // 'N' - {1089, 18, 17, 20, 1, -17}, // 'O' - {1128, 13, 17, 16, 2, -17}, // 'P' - {1156, 18, 21, 20, 1, -17}, // 'Q' - {1204, 14, 17, 16, 2, -17}, // 'R' - {1234, 12, 17, 14, 1, -17}, // 'S' - {1260, 15, 17, 15, 0, -17}, // 'T' - {1292, 15, 17, 19, 2, -17}, // 'U' - {1324, 16, 17, 16, 0, -17}, // 'V' - {1358, 24, 17, 24, 0, -17}, // 'W' - {1409, 16, 17, 16, 0, -17}, // 'X' - {1443, 15, 17, 15, 0, -17}, // 'Y' - {1475, 13, 17, 15, 1, -17}, // 'Z' - {1503, 6, 21, 9, 2, -17}, // '[' - {1519, 10, 17, 10, 0, -17}, // '\' - {1541, 6, 21, 9, 1, -17}, // ']' - {1557, 14, 11, 14, 0, -17}, // '^' - {1577, 11, 2, 11, 0, 2}, // '_' - {1580, 7, 4, 15, 4, -19}, // '`' - {1584, 12, 13, 15, 1, -13}, // 'a' - {1604, 13, 18, 16, 2, -18}, // 'b' - {1634, 11, 13, 13, 1, -13}, // 'c' - {1652, 13, 18, 16, 1, -18}, // 'd' - {1682, 13, 13, 15, 1, -13}, // 'e' - {1704, 11, 18, 10, 0, -18}, // 'f' - {1729, 14, 19, 14, 0, -13}, // 'g' - {1763, 12, 18, 16, 2, -18}, // 'h' - {1790, 4, 18, 8, 2, -18}, // 'i' - {1799, 7, 24, 8, -1, -18}, // 'j' - {1820, 13, 18, 15, 2, -18}, // 'k' - {1850, 4, 18, 8, 2, -18}, // 'l' - {1859, 20, 13, 24, 2, -13}, // 'm' - {1892, 12, 13, 16, 2, -13}, // 'n' - {1912, 14, 13, 16, 1, -13}, // 'o' - {1935, 13, 19, 16, 2, -13}, // 'p' - {1966, 13, 19, 16, 1, -13}, // 'q' - {1997, 9, 13, 11, 2, -13}, // 'r' - {2012, 11, 13, 13, 1, -13}, // 's' - {2030, 9, 16, 10, 0, -16}, // 't' - {2048, 12, 13, 16, 2, -13}, // 'u' - {2068, 14, 13, 14, 0, -13}, // 'v' - {2091, 21, 13, 21, 0, -13}, // 'w' - {2126, 14, 13, 14, 0, -13}, // 'x' - {2149, 14, 19, 14, 0, -13}, // 'y' - {2183, 10, 13, 12, 1, -13}, // 'z' - {2200, 8, 21, 10, 1, -17}, // '{' - {2221, 4, 24, 14, 5, -18}, // '|' - {2233, 8, 21, 10, 1, -17} // '}' -}; -const GFXfont Open_Sans_SemiBold_24 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_24Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_24Glyphs, 0x20, 0x7E, 33}; \ No newline at end of file diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h deleted file mode 100644 index 3da740530..000000000 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h +++ /dev/null @@ -1,363 +0,0 @@ -// 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 Open_Sans_SemiBold_32Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFB, 0xEF, 0xBC, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x00, 0x07, 0x3E, 0xFB, 0xE7, 0x00, // '!' - 0xF3, 0xDE, 0x7B, 0xCF, 0x70, 0xEE, 0x1C, 0xC3, 0x18, 0x63, 0x0C, // '"' - 0x01, 0xC3, 0x00, 0x18, 0x70, 0x03, 0x87, 0x00, 0x38, 0x70, 0x03, 0x87, 0x00, 0x38, 0x60, 0x03, 0x86, 0x07, - 0xFF, 0xFE, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x07, 0x0E, 0x00, 0x70, 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC7, - 0x00, 0x18, 0x70, 0x00, // '#' - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x7F, 0x03, 0xFF, 0xCF, 0xFF, 0x3E, 0xC6, 0x79, 0x80, 0xF3, 0x01, 0xE6, - 0x03, 0xEC, 0x03, 0xF8, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x03, 0x3C, 0x06, 0x38, 0x0C, 0x70, - 0x19, 0xEE, 0x37, 0xDF, 0xFF, 0x3F, 0xFC, 0x1F, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, // '$' - 0x1F, 0x00, 0x38, 0x07, 0xF0, 0x0E, 0x01, 0xFF, 0x01, 0xC0, 0x38, 0xE0, 0x70, 0x07, 0x1C, 0x1C, 0x01, 0xC3, - 0x83, 0x80, 0x38, 0x38, 0xE0, 0x07, 0x07, 0x1C, 0x00, 0xE1, 0xC7, 0x00, 0x0E, 0x38, 0xE7, 0xC1, 0xC7, 0x39, - 0xFC, 0x3F, 0xEF, 0x7F, 0xC3, 0xF9, 0xCE, 0x38, 0x3E, 0x71, 0xC7, 0x00, 0x0E, 0x78, 0x70, 0x03, 0x8E, 0x0E, - 0x00, 0x71, 0xC1, 0xC0, 0x1C, 0x1C, 0x38, 0x03, 0x83, 0x8E, 0x00, 0xE0, 0x71, 0xC0, 0x38, 0x0F, 0xF8, 0x07, - 0x00, 0xFE, 0x01, 0xC0, 0x0F, 0x80, // '%' - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xE0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xC0, 0x07, 0x07, 0x80, 0x0E, - 0x0F, 0x00, 0x1E, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x03, 0xC7, 0xFE, - 0x07, 0x1F, 0x3E, 0x1E, 0x3C, 0x3E, 0x3C, 0x78, 0x3E, 0xF0, 0xE0, 0x3F, 0xE1, 0xC0, 0x3F, 0x83, 0xC0, 0x3E, - 0x07, 0xC1, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0x9E, 0x03, 0xF8, 0x1E, 0x00, // '&' - 0xF7, 0xBD, 0xCE, 0x31, 0x8C, // ''' - 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x83, 0xC0, 0xE0, 0x78, 0x1C, 0x0E, 0x03, 0x81, 0xE0, // '(' - 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x00, // ')' - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x18, 0x03, 0xCC, 0xF3, 0xFF, 0xFD, 0xFF, 0xFE, 0x03, - 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xCE, 0x01, 0xE7, 0x80, 0xE1, 0xC0, 0x10, 0xC0, // '*' - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, - 0xFF, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, // '+' - 0x3C, 0xF1, 0xE3, 0xC7, 0x0E, 0x38, 0x70, // ',' - 0xFF, 0x7F, 0xBF, 0xC0, // '-' - 0x73, 0xEF, 0xBE, 0x70, // '.' - 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x03, - 0xC0, 0x00, // '/' - 0x07, 0xE0, 0x0F, 0xF8, 0x0F, 0xFE, 0x07, 0x87, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x1C, 0xF0, - 0x0E, 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x38, 0xE0, 0x1C, 0x70, 0x1E, - 0x3C, 0x0F, 0x1E, 0x07, 0x87, 0x87, 0x81, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '0' - 0x03, 0xC0, 0xF8, 0x3F, 0x0F, 0xE7, 0xFD, 0xF7, 0x9C, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, // '1' - 0x07, 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x0F, 0x07, 0x82, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // '2' - 0x0F, 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0x78, 0x3C, 0x20, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF8, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0xE0, 0x3E, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, // '3' - 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0E, - 0x38, 0x0F, 0x1C, 0x07, 0x0E, 0x07, 0x07, 0x07, 0x83, 0x83, 0x81, 0xC3, 0x80, 0xE1, 0xFF, 0xFE, 0xFF, 0xFF, - 0x7F, 0xFF, 0x80, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, // '4' - 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xFF, - 0x83, 0xFF, 0xC7, 0xFF, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xF6, - 0x07, 0xCF, 0xFF, 0x9F, 0xFE, 0x0F, 0xE0, 0x00, // '5' - 0x01, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x71, - 0xF0, 0x3B, 0xFE, 0x1F, 0xFF, 0x1F, 0x87, 0xCF, 0x81, 0xE7, 0x80, 0x7B, 0xC0, 0x3C, 0xE0, 0x1E, 0x70, 0x0F, - 0x3C, 0x07, 0x9E, 0x07, 0x87, 0x87, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '6' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, // '7' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xC7, 0x81, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x70, 0x38, 0x3E, - 0x7C, 0x0F, 0xF8, 0x01, 0xF8, 0x03, 0xFE, 0x03, 0xEF, 0xC3, 0xC1, 0xF1, 0xC0, 0x79, 0xE0, 0x1C, 0xF0, 0x0F, - 0x78, 0x07, 0x9C, 0x03, 0x8F, 0x07, 0xC7, 0xFF, 0xC0, 0xFF, 0xC0, 0x1F, 0x80, // '8' - 0x07, 0xC0, 0x0F, 0xF8, 0x0F, 0xFE, 0x0F, 0x87, 0x87, 0x81, 0xE3, 0x80, 0xF3, 0xC0, 0x39, 0xE0, 0x1C, 0xF0, - 0x0F, 0x78, 0x07, 0x9E, 0x07, 0xCF, 0x87, 0xE3, 0xFF, 0xE1, 0xFF, 0x70, 0x3E, 0x38, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x1F, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, 0x00, // '9' - 0x73, 0xEF, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, 0xBE, 0x70, // ':' - 0x38, 0xF9, 0xF3, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x3C, 0x70, 0xE1, 0xC7, 0x0E, - 0x00, // ';' - 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x06, // '<' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0xFF, 0xFC, // '=' - 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, // '>' - 0x1F, 0xC0, 0xFF, 0xE1, 0xFF, 0xE3, 0x83, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xC0, 0x00, // '?' - 0x00, 0x7F, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xBF, 0x80, 0x3C, 0x00, 0xF0, 0x1E, 0x00, 0x1E, 0x0F, 0x00, - 0x03, 0xC3, 0x83, 0xF8, 0x71, 0xC1, 0xFF, 0x0E, 0x70, 0xFB, 0xC3, 0xB8, 0x70, 0x70, 0xEE, 0x3C, 0x1C, 0x3B, - 0x8E, 0x07, 0x0E, 0xE3, 0x81, 0xC3, 0xB8, 0xE0, 0x70, 0xEE, 0x38, 0x1C, 0x3B, 0x8E, 0x07, 0x0E, 0xE3, 0xC3, - 0xC7, 0x38, 0x7B, 0xFB, 0xCE, 0x0F, 0xE7, 0xE1, 0xC1, 0xF0, 0xF0, 0x78, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, - 0xE0, 0x02, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, // '@' - 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x77, 0x00, 0x01, 0xDC, 0x00, 0x0F, 0x78, 0x00, 0x3D, - 0xE0, 0x00, 0xE3, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x1C, 0x00, 0x70, 0x70, 0x03, 0xC1, 0xE0, 0x0E, 0x03, 0x80, - 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0x80, 0x0E, 0x1E, 0x00, - 0x3C, 0x78, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x80, // 'A' - 0xFF, 0xE0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E, 0x07, 0xCF, 0x01, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, - 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xE7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, - 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x07, 0xEF, 0xFF, 0xE7, 0xFF, 0xE3, 0xFF, 0xC0, // 'B' - 0x01, 0xFC, 0x01, 0xFF, 0xE1, 0xFF, 0xF0, 0xFC, 0x1C, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x0C, 0x1F, 0xFF, 0x03, 0xFF, 0xC0, 0x3F, 0xE0, // 'C' - 0xFF, 0xE0, 0x1F, 0xFF, 0x03, 0xFF, 0xF8, 0x78, 0x1F, 0x8F, 0x00, 0xF1, 0xE0, 0x0F, 0x3C, 0x01, 0xE7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xC0, 0x7C, 0x78, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, // 'D' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0xCF, - 0xFF, 0x3F, 0xFC, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'E' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0xFF, 0x3F, 0xFC, 0xFF, 0xF3, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x00, // 'F' - 0x00, 0xFF, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xC1, 0xF8, 0x18, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, 0x3F, 0xEF, 0x03, 0xFE, 0xF0, - 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x3C, 0x01, 0xE3, 0xF0, 0x1E, 0x1F, 0xFF, 0xE0, 0xFF, - 0xFE, 0x01, 0xFF, 0x00, // 'G' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, - 0xF0, // 'H' - 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xC0, // 'I' - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, - 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x03, 0xCF, 0xF3, 0xF8, 0xF8, - 0x00, // 'J' - 0xF0, 0x0F, 0x3C, 0x07, 0xCF, 0x03, 0xE3, 0xC0, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x1E, 0x03, 0xCF, 0x80, - 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3E, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF8, // 'K' - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'L' - 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x0F, 0xDF, 0xC0, 0x0F, 0xEE, 0xE0, 0x07, 0x77, 0x70, 0x03, - 0xFB, 0xBC, 0x03, 0xBD, 0xCE, 0x01, 0xDE, 0xE7, 0x00, 0xEF, 0x73, 0xC0, 0xE7, 0xB8, 0xE0, 0x73, 0xDC, 0x70, - 0x79, 0xEE, 0x3C, 0x38, 0xF7, 0x0E, 0x1C, 0x7B, 0x87, 0x1E, 0x3D, 0xC3, 0xCE, 0x1E, 0xE0, 0xE7, 0x0F, 0x70, - 0x7F, 0x07, 0xB8, 0x1F, 0x83, 0xDC, 0x0F, 0xC1, 0xEE, 0x07, 0xC0, 0xF7, 0x01, 0xE0, 0x7B, 0x80, 0xF0, 0x3C, // 'M' - 0xF8, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xEF, 0xE0, 0x0E, 0xFE, 0x00, 0xEE, 0xF0, 0x0E, 0xEF, 0x80, 0xEE, - 0x78, 0x0E, 0xE3, 0xC0, 0xEE, 0x3C, 0x0E, 0xE1, 0xE0, 0xEE, 0x1F, 0x0E, 0xE0, 0xF0, 0xEE, 0x07, 0x8E, 0xE0, - 0x78, 0xEE, 0x03, 0xCE, 0xE0, 0x3E, 0xEE, 0x01, 0xEE, 0xE0, 0x0F, 0xEE, 0x00, 0xFE, 0xE0, 0x07, 0xEE, 0x00, - 0x7E, 0xE0, 0x03, 0xE0, // 'N' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, // 'O' - 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xF0, 0x7E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x7C, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, // 'P' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, // 'Q' - 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x3C, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0xC3, 0xFF, 0xE0, 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF0, // 'R' - 0x0F, 0xE0, 0x3F, 0xFC, 0x7F, 0xFC, 0xF8, 0x18, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x3C, 0xE0, 0x7C, 0xFF, 0xF8, 0xFF, 0xF0, 0x3F, 0xC0, // 'S' - 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, // 'T' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x79, 0xE0, 0x1E, 0x3E, 0x07, 0xC3, 0xFF, 0xF0, 0x3F, 0xFC, 0x01, 0xFE, - 0x00, // 'U' - 0xF0, 0x00, 0xF3, 0x80, 0x07, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC3, 0x80, 0x1C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, - 0x03, 0x80, 0x70, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x03, 0x81, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x03, 0x87, - 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x03, 0x9C, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, // 'V' - 0xF0, 0x07, 0x80, 0x3C, 0xE0, 0x0F, 0x00, 0x71, 0xE0, 0x3E, 0x01, 0xE3, 0xC0, 0x7E, 0x03, 0xC7, 0x80, 0xFC, - 0x07, 0x87, 0x01, 0xF8, 0x0E, 0x0F, 0x07, 0xF8, 0x3C, 0x1E, 0x0E, 0x70, 0x78, 0x3C, 0x1C, 0xE0, 0xF0, 0x38, - 0x79, 0xC1, 0xC0, 0x78, 0xF3, 0xC7, 0x80, 0xF1, 0xC3, 0x8F, 0x01, 0xE3, 0x87, 0x1E, 0x01, 0xCF, 0x0F, 0x38, - 0x03, 0x9C, 0x1E, 0x70, 0x07, 0xB8, 0x1D, 0xE0, 0x0F, 0x70, 0x3B, 0xC0, 0x0E, 0xE0, 0x77, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0xF0, 0x03, 0xC0, 0x00, // 'W' - 0x78, 0x01, 0xE1, 0xE0, 0x1E, 0x0F, 0x00, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x07, 0x87, 0x80, 0x1E, 0x78, - 0x00, 0xF3, 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, - 0x00, 0x1E, 0xF0, 0x00, 0xF3, 0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x81, 0xE0, 0x78, 0x0F, 0x83, 0xC0, - 0x3C, 0x3C, 0x00, 0xF3, 0xC0, 0x07, 0xC0, // 'X' - 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x03, 0xC3, 0xC0, 0x78, 0x3C, 0x07, 0x81, 0xE0, 0xF0, 0x1E, 0x0E, 0x00, - 0xF1, 0xE0, 0x07, 0x1C, 0x00, 0x7B, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, // 'Y' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // 'Z' - 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, // '[' - 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, - 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x70, - 0x03, 0xC0, // '\' - 0xFE, 0xFE, 0xFE, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xFE, 0xFE, 0xFE, // ']' - 0x01, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0x9C, 0x00, 0xE7, 0x00, 0x38, 0xE0, - 0x1C, 0x38, 0x07, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x38, 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x70, // '^' - 0xFF, 0xFD, 0xFF, 0xF8, // '_' - 0xF0, 0x78, 0x3C, 0x1C, 0x0E, // '`' - 0x07, 0xF0, 0x3F, 0xFC, 0x1F, 0xFE, 0x1C, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x07, 0xFE, 0x3F, 0xFE, - 0x7C, 0x0E, 0x78, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x1F, 0x86, // 'a' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, // 'b' - 0x07, 0xF0, 0x7F, 0xE7, 0xFF, 0x1F, 0x04, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xF0, 0x67, 0xFF, 0x8F, 0xFE, 0x0F, 0xE0, // 'c' - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x0F, 0x8E, 0x3F, 0xEE, - 0x7F, 0xFE, 0x7C, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'd' - 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xCF, 0x03, 0xDE, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, - 0xFB, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x81, 0x9F, 0xFF, 0x0F, 0xFE, 0x07, 0xF0, // 'e' - 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xFC, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, // 'f' - 0x07, 0xFF, 0x83, 0xFF, 0xE1, 0xE3, 0xF8, 0xF0, 0x78, 0x38, 0x0E, 0x0E, 0x03, 0x83, 0x80, 0xE0, 0xE0, 0x38, - 0x3C, 0x1E, 0x07, 0x8F, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, - 0x3F, 0xFF, 0x9E, 0x01, 0xE7, 0x00, 0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0x9E, 0x03, 0xE7, 0xFF, 0xF0, 0xFF, 0xF8, - 0x0F, 0xF0, 0x00, // 'g' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'h' - 0x73, 0xCF, 0x9C, 0x00, 0x00, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, // 'i' - 0x07, 0x03, 0xC0, 0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, - 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x3C, 0x0F, - 0x3F, 0xCF, 0xE3, 0xF0, // 'j' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, - 0xE0, 0xF0, 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xF3, 0xC0, - 0xE1, 0xE0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE0, 0x78, 0xE0, 0x7C, 0xE0, 0x3C, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xE3, 0xE0, 0x7C, 0x3B, 0xFE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFB, 0xE1, 0xFC, 0x1E, 0xF0, 0x3E, 0x07, 0xBC, 0x07, - 0x80, 0xEF, 0x01, 0xE0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, - 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, - 0x03, 0x80, // 'm' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'n' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xCF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xC0, 0x0E, 0xE0, - 0x07, 0x70, 0x03, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF3, 0xE1, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xE0, - 0x00, // 'o' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xE0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x7C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, // 'p' - 0x0F, 0x8E, 0x3F, 0xEE, 0x7F, 0xFE, 0x78, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, // 'q' - 0xE3, 0xDC, 0xFB, 0xBF, 0x7F, 0xAF, 0x81, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'r' - 0x1F, 0xC1, 0xFF, 0xCF, 0xFF, 0x3C, 0x18, 0xE0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x1F, 0xC0, - 0x1F, 0x00, 0x1E, 0x00, 0x7B, 0x03, 0xCF, 0xFF, 0x3F, 0xF8, 0x7F, 0x80, // 's' - 0x1C, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x7F, 0xEF, 0xFE, 0xFF, 0xE3, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1F, 0xE1, 0xFE, 0x07, 0xE0, // 't' - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'u' - 0xF0, 0x07, 0x9C, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x3D, 0xE0, 0x07, 0x70, 0x01, 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, // 'v' - 0xF0, 0x1E, 0x03, 0xCE, 0x03, 0xC0, 0x71, 0xE0, 0xFC, 0x1E, 0x3C, 0x1F, 0x83, 0xC3, 0x83, 0xF0, 0x70, 0x70, - 0xE7, 0x1E, 0x0F, 0x1C, 0xE3, 0xC1, 0xE3, 0x9C, 0x78, 0x1C, 0x73, 0x8E, 0x03, 0x9C, 0x3B, 0xC0, 0x7B, 0x87, - 0x78, 0x07, 0x70, 0xEE, 0x00, 0xEC, 0x1D, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0x3E, 0x07, 0xC0, - 0x07, 0x80, 0x78, 0x00, // 'w' - 0x78, 0x07, 0x87, 0x81, 0xE0, 0xF8, 0x7C, 0x0F, 0x0F, 0x00, 0xF3, 0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x3C, 0x3C, 0x0F, 0x03, 0xC3, - 0xE0, 0x7C, 0x78, 0x07, 0x80, // 'x' - 0xF0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x1D, 0xE0, 0x07, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, - 0x7C, 0x00, 0x00, // 'y' - 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // 'z' - 0x01, 0xC0, 0xF8, 0x3F, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x03, 0xE1, - 0xF8, 0x3C, 0x07, 0xE0, 0x3E, 0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF8, - 0x1F, 0x00, 0xE0, // '{' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, // '|' - 0xE0, 0x1F, 0x03, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF0, - 0x1F, 0x80, 0x70, 0x7E, 0x1F, 0x03, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x1F, 0x83, - 0xE0, 0x70, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_32Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 9, 0, 0}, // ' ' - {1, 6, 23, 10, 2, -23}, // '!' - {19, 11, 8, 15, 2, -23}, // '"' - {30, 20, 23, 22, 1, -23}, // '#' - {88, 15, 27, 19, 2, -25}, // '$' - {139, 27, 23, 29, 1, -23}, // '%' - {217, 23, 23, 25, 2, -23}, // '&' - {284, 5, 8, 9, 2, -23}, // ''' - {289, 9, 28, 11, 1, -23}, // '(' - {321, 9, 28, 11, 1, -23}, // ')' - {353, 17, 15, 19, 1, -24}, // '*' - {385, 17, 15, 19, 1, -19}, // '+' - {417, 7, 8, 10, 1, -4}, // ',' - {424, 9, 3, 11, 1, -10}, // '-' - {428, 6, 5, 10, 2, -5}, // '.' - {432, 13, 23, 13, 0, -23}, // '/' - {470, 17, 23, 19, 1, -23}, // '0' - {519, 11, 23, 19, 2, -23}, // '1' - {551, 17, 23, 19, 1, -23}, // '2' - {600, 16, 23, 19, 1, -23}, // '3' - {646, 17, 23, 19, 1, -23}, // '4' - {695, 15, 23, 19, 2, -23}, // '5' - {739, 17, 23, 19, 1, -23}, // '6' - {788, 17, 23, 19, 1, -23}, // '7' - {837, 17, 23, 19, 1, -23}, // '8' - {886, 17, 23, 19, 1, -23}, // '9' - {935, 6, 17, 10, 2, -17}, // ':' - {948, 7, 21, 10, 1, -17}, // ';' - {967, 17, 16, 19, 1, -20}, // '<' - {1001, 15, 9, 19, 2, -16}, // '=' - {1018, 17, 16, 19, 1, -20}, // '>' - {1052, 15, 23, 16, 0, -23}, // '?' - {1096, 26, 26, 30, 2, -23}, // '@' - {1181, 22, 23, 22, 0, -23}, // 'A' - {1245, 17, 23, 22, 3, -23}, // 'B' - {1294, 18, 23, 21, 2, -23}, // 'C' - {1346, 19, 23, 24, 3, -23}, // 'D' - {1401, 14, 23, 19, 3, -23}, // 'E' - {1442, 14, 23, 18, 3, -23}, // 'F' - {1483, 20, 23, 24, 2, -23}, // 'G' - {1541, 19, 23, 25, 3, -23}, // 'H' - {1596, 5, 23, 11, 3, -23}, // 'I' - {1611, 10, 29, 11, -2, -23}, // 'J' - {1648, 18, 23, 21, 3, -23}, // 'K' - {1700, 14, 23, 18, 3, -23}, // 'L' - {1741, 25, 23, 31, 3, -23}, // 'M' - {1813, 20, 23, 26, 3, -23}, // 'N' - {1871, 22, 23, 26, 2, -23}, // 'O' - {1935, 16, 23, 21, 3, -23}, // 'P' - {1981, 22, 28, 26, 2, -23}, // 'Q' - {2058, 18, 23, 21, 3, -23}, // 'R' - {2110, 16, 23, 19, 2, -23}, // 'S' - {2156, 19, 23, 19, 0, -23}, // 'T' - {2211, 19, 23, 25, 3, -23}, // 'U' - {2266, 21, 23, 21, 0, -23}, // 'V' - {2327, 31, 23, 31, 0, -23}, // 'W' - {2417, 21, 23, 21, 0, -23}, // 'X' - {2478, 20, 23, 20, 0, -23}, // 'Y' - {2536, 17, 23, 19, 1, -23}, // 'Z' - {2585, 8, 28, 12, 3, -23}, // '[' - {2613, 13, 23, 13, 0, -23}, // '\' - {2651, 8, 28, 12, 1, -23}, // ']' - {2679, 18, 15, 18, 0, -23}, // '^' - {2713, 15, 2, 15, 0, 3}, // '_' - {2717, 8, 5, 20, 6, -24}, // '`' - {2722, 16, 17, 20, 1, -17}, // 'a' - {2756, 16, 24, 21, 3, -24}, // 'b' - {2804, 14, 17, 17, 2, -17}, // 'c' - {2834, 16, 24, 21, 2, -24}, // 'd' - {2882, 15, 17, 19, 2, -17}, // 'e' - {2914, 13, 24, 13, 1, -24}, // 'f' - {2953, 18, 25, 19, 0, -17}, // 'g' - {3010, 16, 24, 21, 3, -24}, // 'h' - {3058, 6, 24, 10, 2, -24}, // 'i' - {3076, 10, 32, 10, -2, -24}, // 'j' - {3116, 16, 24, 19, 3, -24}, // 'k' - {3164, 4, 24, 10, 3, -24}, // 'l' - {3176, 26, 17, 32, 3, -17}, // 'm' - {3232, 16, 17, 21, 3, -17}, // 'n' - {3266, 17, 17, 21, 2, -17}, // 'o' - {3303, 16, 25, 21, 3, -17}, // 'p' - {3353, 16, 25, 21, 2, -17}, // 'q' - {3403, 11, 17, 15, 3, -17}, // 'r' - {3427, 14, 17, 17, 2, -17}, // 's' - {3457, 12, 21, 14, 1, -21}, // 't' - {3489, 16, 17, 21, 2, -17}, // 'u' - {3523, 18, 17, 18, 0, -17}, // 'v' - {3562, 27, 17, 27, 0, -17}, // 'w' - {3620, 19, 17, 19, 0, -17}, // 'x' - {3661, 18, 25, 18, 0, -17}, // 'y' - {3718, 14, 17, 16, 1, -17}, // 'z' - {3748, 11, 28, 13, 1, -23}, // '{' - {3787, 3, 32, 19, 8, -24}, // '|' - {3799, 11, 28, 13, 1, -23} // '}' -}; -const GFXfont Open_Sans_SemiBold_32 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_32Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_32Glyphs, 0x20, 0x7E, 45}; \ No newline at end of file diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h deleted file mode 100644 index 93d1d062a..000000000 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h +++ /dev/null @@ -1,798 +0,0 @@ -// 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 Open_Sans_SemiBold_56Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x3F, 0x9F, 0xCF, 0xF7, 0xFB, 0xF9, 0xFC, 0x7C, 0x00, // '!' - 0xFC, 0x3F, 0x7E, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0xF8, - 0x1F, 0x7C, 0x0F, 0xBE, 0x07, 0xDF, 0x03, 0xE7, 0x81, 0xE3, 0xC0, 0xF0, // '"' - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x1F, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x3E, 0x00, - 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0xF0, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xC0, 0x00, // '#' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0x78, - 0xFC, 0x3F, 0x8F, 0x01, 0x8F, 0xE1, 0xE0, 0x01, 0xFC, 0x3C, 0x00, 0x3F, 0x87, 0x80, 0x07, 0xF0, 0xF0, 0x00, - 0x7F, 0x1E, 0x00, 0x0F, 0xF3, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x1F, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0x3C, 0x3F, 0x80, 0x07, 0x83, 0xF0, 0x00, 0xF0, 0x7E, - 0x80, 0x1E, 0x1F, 0xDC, 0x03, 0xC7, 0xFB, 0xF8, 0x7B, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, // '$' - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x0F, 0xC0, 0x07, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0x7E, 0x00, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x7E, 0x01, - 0xF0, 0x00, 0x3F, 0x03, 0xF0, 0x1F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0xF8, 0x00, 0x0F, 0xC0, 0xFC, 0x0F, 0x80, - 0x00, 0x7E, 0x07, 0xE0, 0xFC, 0x00, 0x03, 0xF0, 0x3F, 0x07, 0xC0, 0x00, 0x1F, 0x81, 0xF8, 0x7E, 0x00, 0x00, - 0xFC, 0x0F, 0xC3, 0xE0, 0xFC, 0x03, 0xE0, 0x7C, 0x3F, 0x1F, 0xF8, 0x1F, 0x03, 0xE1, 0xF1, 0xFF, 0xE0, 0xF8, - 0x1F, 0x1F, 0x1F, 0xFF, 0x07, 0xE1, 0xF8, 0xF8, 0xFF, 0xFC, 0x1F, 0xFF, 0x8F, 0x8F, 0xC3, 0xE0, 0xFF, 0xFC, - 0xFC, 0x7C, 0x1F, 0x83, 0xFF, 0xC7, 0xC3, 0xE0, 0x7C, 0x0F, 0xFC, 0x7E, 0x3F, 0x03, 0xE0, 0x1F, 0x83, 0xE1, - 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0xFC, 0x00, 0x01, 0xF0, 0x7E, 0x07, 0xE0, 0x00, 0x1F, 0x83, 0xF0, - 0x3F, 0x00, 0x00, 0xF8, 0x1F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x0F, 0xC0, 0x00, 0x7C, 0x07, 0xE0, 0x7E, - 0x00, 0x07, 0xC0, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, - 0x3F, 0x00, 0x3E, 0x0F, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, // '%' - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x7F, 0x00, - 0x00, 0x03, 0xFB, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x01, 0xFF, 0xF8, 0x00, 0xFC, 0x07, - 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xE7, 0xF8, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x0F, 0xE0, 0xFE, 0x07, 0xF8, 0x3F, - 0x83, 0xF8, 0x07, 0xF8, 0x7F, 0x07, 0xF0, 0x07, 0xF9, 0xFC, 0x0F, 0xE0, 0x07, 0xFB, 0xF8, 0x1F, 0x80, 0x07, - 0xFF, 0xE0, 0x3F, 0x00, 0x07, 0xFF, 0xC0, 0x7F, 0x00, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x01, 0xFE, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xF7, 0xF8, 0x07, 0xFF, 0xFF, 0xC7, 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xF8, 0x07, 0xFF, 0xF0, - 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, // '&' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xF1, 0xE3, 0xC7, 0x8F, 0x00, // ''' - 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xFC, - 0x00, 0xFC, // '(' - 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, - 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, - 0xFC, 0x00, // ')' - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x70, 0x1F, 0x01, 0xC7, 0xF1, 0xF1, 0xFC, 0x7F, - 0xFE, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x07, 0xF1, - 0xFC, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, 0x03, 0xC0, 0x78, 0x00, 0x08, 0x02, - 0x00, // '*' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, // '+' - 0x3F, 0x8F, 0xE3, 0xF8, 0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x3E, 0x00, // ',' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0xC0, // '-' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // '.' - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, // '/' - 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0x00, 0xFE, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0x7E, - 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0x7E, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x3F, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x3F, 0x87, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x07, - 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x0F, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, // '0' - 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0x7E, - 0x7F, 0x9F, 0xBF, 0xC7, 0xE7, 0xE1, 0xF8, 0xF0, 0x7E, 0x10, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, // '1' - 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, - 0x3F, 0xE0, 0x7F, 0xC0, 0xFC, 0x00, 0xFE, 0x03, 0x80, 0x03, 0xF8, 0x08, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, // '2' - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x03, - 0xF8, 0x0F, 0xF8, 0x3E, 0x00, 0x3F, 0x81, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x80, 0x00, 0x1F, 0xCE, 0x00, 0x03, 0xFC, - 0xFE, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, // '3' - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x1F, 0x7F, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x03, 0xE3, 0xF8, 0x00, 0x0F, 0xC7, 0xF0, - 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x01, 0xF8, 0x3F, 0x80, 0x07, 0xE0, 0x7F, 0x00, 0x0F, 0x80, - 0xFE, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0xF8, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, // '4' - 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF7, 0xFC, 0x00, - 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xC0, 0x3F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x03, 0xFC, 0x7E, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, // '5' - 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, - 0x7F, 0xE0, 0x10, 0x0F, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0xFC, 0x7F, 0xF8, 0x0F, 0xCF, 0xFF, 0xE0, 0xFD, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x8F, 0xF8, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xF8, 0x03, 0xF8, - 0x1F, 0xE0, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, // '6' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, // '7' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0x7E, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0xC0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x03, 0xFC, 0x0F, 0xE0, 0x0F, 0xF9, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x81, 0xFC, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0xFC, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0xC0, 0x03, - 0xF8, 0xFF, 0x00, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, // '8' - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF0, 0x7F, 0x80, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7E, - 0x1F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0xFC, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x9F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x3F, - 0xE7, 0xF8, 0x03, 0xFE, 0x1F, 0xF0, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0xFC, 0x0F, 0xFF, 0xE7, - 0xE0, 0x1F, 0xFE, 0x3F, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x01, 0x00, 0x7F, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, // '9' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // ':' - 0x1F, 0x07, 0xF0, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF0, 0x7E, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x00, // ';' - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, // '<' - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, // '=' - 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, // '>' - 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF8, 0x0F, - 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, // '?' - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x3F, 0xE0, 0x0F, 0x81, 0xF0, 0x07, 0xFF, 0xF0, - 0x3E, 0x1F, 0x00, 0xFF, 0xFF, 0x81, 0xF0, 0xF8, 0x0F, 0xFF, 0xFC, 0x0F, 0x8F, 0x80, 0xFF, 0x07, 0xE0, 0x3E, - 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xF3, 0xE0, 0x7E, 0x00, 0xF8, 0x0F, 0x9F, 0x03, 0xE0, 0x07, 0xC0, 0x7D, 0xF0, - 0x3F, 0x00, 0x3E, 0x03, 0xEF, 0x81, 0xF0, 0x01, 0xF0, 0x1F, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xFB, 0xE0, 0x7C, - 0x00, 0x7C, 0x07, 0xDF, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0xF8, 0x1F, 0x00, 0x3F, 0x01, 0xE7, 0xC0, 0xF8, 0x01, - 0xF8, 0x1F, 0x3E, 0x07, 0xC0, 0x0F, 0xC0, 0xF9, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xCF, 0x80, 0xF8, 0x0F, 0xF0, - 0x7C, 0x7C, 0x07, 0xF0, 0xFF, 0xC7, 0xE1, 0xF0, 0x1F, 0xFF, 0x9F, 0xFE, 0x0F, 0x80, 0x7F, 0xFC, 0xFF, 0xE0, - 0x7E, 0x01, 0xFF, 0x83, 0xFE, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xE0, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, // '@' - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, - 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, // 'A' - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x7F, 0x3F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, - 0x00, 0xFE, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x03, 0xFC, - 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, // 'B' - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFC, 0x0F, 0xF8, 0x00, 0x18, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x04, 0x0F, 0xFF, 0x00, 0x7C, - 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0x80, // 'C' - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x3F, 0xE0, 0xFE, 0x00, - 0x07, 0xFC, 0x3F, 0x80, 0x00, 0xFF, 0x8F, 0xE0, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, - 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x1F, 0xF8, 0x3F, 0x80, 0x3F, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, // 'D' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'E' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, // 'F' - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, 0xC0, 0x7F, 0xE0, 0x00, 0x30, 0x0F, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xFF, 0xEF, 0xE0, 0x01, - 0xFF, 0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0xBF, 0x80, 0x07, 0xFF, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x7E, 0x00, 0x1F, - 0xFF, 0xCF, 0xE0, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x01, - 0xFC, 0xFF, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x00, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0x80, 0x1F, 0xE0, 0x7F, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFC, 0x00, // 'G' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, - 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0xFE, // 'H' - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, // 'I' - 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x3F, 0xE7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xC0, - 0x00, // 'J' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xF0, 0xFE, 0x00, - 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xDF, - 0xE0, 0x00, 0xFF, 0x8F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x03, 0xFC, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xF0, - 0xFE, 0x00, 0x07, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x01, 0xFE, // 'K' - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'L' - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x7F, 0xF0, - 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xBF, 0xFC, 0x00, 0x00, - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x1F, 0x7E, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xDF, 0xBF, 0x00, 0x00, 0xFD, 0xFB, - 0xF7, 0xE0, 0x00, 0x1F, 0x3F, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xEF, 0xCF, 0xC0, 0x00, 0xF8, 0xFD, 0xF9, 0xF8, - 0x00, 0x1F, 0x1F, 0xBF, 0x1F, 0x80, 0x07, 0xE7, 0xF7, 0xE3, 0xF0, 0x00, 0xF8, 0xFE, 0xFC, 0x7E, 0x00, 0x3F, - 0x1F, 0xDF, 0x87, 0xE0, 0x07, 0xE3, 0xFB, 0xF0, 0xFC, 0x00, 0xF8, 0x7F, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0xEF, - 0xC1, 0xF8, 0x07, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0xBF, 0x03, 0xE0, 0x3F, 0x07, 0xF7, 0xE0, 0x7E, - 0x07, 0xC0, 0xFE, 0xFC, 0x0F, 0xC0, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0x3F, 0x03, 0xFB, 0xF0, 0x1F, 0x87, 0xC0, - 0x7F, 0x7E, 0x03, 0xF1, 0xF8, 0x0F, 0xEF, 0xC0, 0x3F, 0x3F, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xC0, 0x3F, 0xBF, - 0x00, 0xFD, 0xF8, 0x07, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0xFE, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, - 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x7E, 0x00, 0x7F, 0xC0, 0x0F, 0xEF, 0xC0, 0x0F, 0xF8, 0x01, - 0xFD, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xBF, 0x00, 0x1F, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0xFE, // 'M' - 0xFF, 0x80, 0x00, 0x0F, 0xDF, 0xF0, 0x00, 0x01, 0xFB, 0xFF, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0x00, 0x07, 0xEF, - 0xFE, 0x00, 0x00, 0xFD, 0xFF, 0xE0, 0x00, 0x1F, 0xBF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xC0, 0x00, 0x7E, 0xFF, - 0xFC, 0x00, 0x0F, 0xDF, 0xBF, 0x80, 0x01, 0xFB, 0xF7, 0xF8, 0x00, 0x3F, 0x7E, 0x7F, 0x00, 0x07, 0xEF, 0xC7, - 0xF0, 0x00, 0xFD, 0xF8, 0xFF, 0x00, 0x1F, 0xBF, 0x0F, 0xE0, 0x03, 0xF7, 0xE1, 0xFE, 0x00, 0x7E, 0xFC, 0x1F, - 0xC0, 0x0F, 0xDF, 0x81, 0xFC, 0x01, 0xFB, 0xF0, 0x3F, 0xC0, 0x3F, 0x7E, 0x03, 0xF8, 0x07, 0xEF, 0xC0, 0x3F, - 0x80, 0xFD, 0xF8, 0x07, 0xF8, 0x1F, 0xBF, 0x00, 0x7F, 0x03, 0xF7, 0xE0, 0x0F, 0xF0, 0x7E, 0xFC, 0x00, 0xFE, - 0x0F, 0xDF, 0x80, 0x0F, 0xE1, 0xFB, 0xF0, 0x01, 0xFE, 0x3F, 0x7E, 0x00, 0x1F, 0xC7, 0xEF, 0xC0, 0x01, 0xFC, - 0xFD, 0xF8, 0x00, 0x3F, 0xDF, 0xBF, 0x00, 0x03, 0xFB, 0xF7, 0xE0, 0x00, 0x7F, 0xFE, 0xFC, 0x00, 0x07, 0xFF, - 0xDF, 0x80, 0x00, 0x7F, 0xFB, 0xF0, 0x00, 0x0F, 0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xEF, 0xC0, 0x00, 0x0F, 0xFD, - 0xF8, 0x00, 0x01, 0xFF, 0xBF, 0x00, 0x00, 0x1F, 0xF7, 0xE0, 0x00, 0x03, 0xFE, // 'N' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, // 'O' - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0x80, 0x7F, 0xE7, 0xF0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x7F, 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x00, 0xFE, - 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x07, 0xFB, 0xF8, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, // 'P' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, // 'Q' - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x3F, 0xF0, 0x7F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x1F, 0xE1, 0xFC, - 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x7F, 0x03, 0xF8, 0x03, - 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x1F, 0xC0, 0xFE, 0x00, - 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, // 'R' - 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFE, 0x1F, 0xF0, 0x1F, 0x83, 0xF8, 0x00, 0x30, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, // 'S' - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, // 'T' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0F, 0xFC, 0x03, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, // 'U' - 0xFE, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x01, 0xFC, - 0x3F, 0x00, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x03, 0xF0, - 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, - 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, // 'V' - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0xF8, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x1F, 0x80, 0x07, 0xDF, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFD, 0xF8, - 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF7, 0xE0, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x3E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xF8, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xE0, - 0x07, 0xE0, 0x1F, 0x0F, 0xC0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x00, 0x7F, 0x03, 0xF0, 0x7E, - 0x07, 0xF0, 0x01, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0xC0, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x7E, 0x00, 0x0F, 0xC1, - 0xF8, 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x87, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x3F, 0x80, - 0x01, 0xF8, 0xFC, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xC0, 0x1F, - 0x9F, 0xC0, 0x00, 0x3F, 0x3E, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0xF9, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, // 'W' - 0x7F, 0x80, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x03, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x3F, 0x80, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x01, 0xFE, // 'X' - 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, // 'Y' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, // 'Z' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // '[' - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, // '\' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, - 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, - 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // ']' - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x0F, 0x8F, 0x80, - 0x00, 0x7C, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x03, - 0xE7, 0xC0, 0x00, 0x0F, 0x80, // '^' - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, // '_' - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, // '`' - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0xFF, 0x01, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0x03, 0xF9, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x0F, 0xE7, 0xF0, 0x01, 0xFD, 0xFC, - 0x00, 0x3F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x01, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF9, 0xFE, 0x07, - 0xFF, 0x3F, 0xFF, 0xF7, 0xE3, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0x0F, 0x83, 0xFF, 0xC1, 0xF0, 0x1F, 0xE0, 0x00, // 'a' - 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, 0x0F, 0xE0, 0x0F, 0xC7, 0xFF, 0x80, 0xFC, 0xFF, 0xFC, 0x0F, 0xDF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFF, 0x00, 0x1F, 0xCF, 0xF8, 0x03, 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xF9, 0xFF, 0xFE, 0x0F, - 0x8F, 0xFF, 0xC0, 0xF8, 0x7F, 0xF8, 0x00, 0x01, 0xFE, 0x00, // 'b' - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x1F, 0xE0, 0x3C, - 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x3F, 0xE0, 0x3C, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xE0, // 'c' - 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, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7E, 0x07, 0xFF, 0xE7, 0xE0, 0xFF, - 0xFF, 0x7E, 0x1F, 0xFF, 0xFF, 0xE3, 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x07, - 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF3, 0xE0, - 0x7F, 0xFE, 0x3E, 0x03, 0xFF, 0xC3, 0xE0, 0x0F, 0xE0, 0x00, // 'd' - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, - 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x3F, 0x7F, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x30, 0x7F, 0xC0, - 0x3E, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, // 'e' - 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0x02, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x80, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, // 'f' - 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, - 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFE, 0x00, 0x7E, 0x01, 0xFC, - 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC3, 0xF8, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x07, 0xEF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0xFE, 0x1F, 0xE0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, // 'g' - 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, 0x0F, 0xF0, 0x0F, 0xC7, 0xFF, 0xC0, 0xFC, 0xFF, 0xFE, 0x0F, 0xDF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, - 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xE0, // 'h' - 0x3C, 0x3F, 0x3F, 0x9F, 0xEF, 0xE3, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x00, // 'i' - 0x00, 0x78, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x00, // 'j' - 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, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, - 0x0F, 0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x07, 0xF8, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x1F, - 0xE0, 0x0F, 0xC1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x0F, 0xC7, 0xF0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xBF, 0x80, - 0x0F, 0xE1, 0xFC, 0x00, 0xFC, 0x1F, 0xE0, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F, 0x80, - 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFC, 0x00, 0x7F, 0x8F, - 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x1F, 0xC0, // 'k' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, - 0xFB, 0xF0, // 'l' - 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x03, 0xE1, 0xFF, 0xE0, 0x3F, 0xFE, 0x0F, 0x8F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xCF, 0xF8, - 0x07, 0xFF, 0x00, 0x7F, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, 0xC0, 0x03, 0xF3, 0xF8, 0x00, - 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, - 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, - 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, - 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, // 'm' - 0x00, 0x0F, 0xF0, 0x0F, 0x87, 0xFF, 0xC0, 0xF8, 0xFF, 0xFE, 0x0F, 0x9F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE0, // 'n' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xF8, 0x7F, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x3F, - 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, - 0xE1, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, // 'o' - 0x00, 0x0F, 0xE0, 0x0F, 0x87, 0xFF, 0x80, 0xF8, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFC, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x3F, 0xCF, 0xF8, 0x03, - 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFD, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xC0, 0xFC, 0x7F, 0xF8, - 0x0F, 0xC1, 0xFE, 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, // 'p' - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x07, 0xFF, 0xE3, 0xE0, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, - 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF7, 0xE0, 0x7F, 0xFE, 0x7E, 0x03, 0xFF, 0xC7, - 0xE0, 0x0F, 0xF0, 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, // 'q' - 0x00, 0x0F, 0xDF, 0x07, 0xFB, 0xE3, 0xFF, 0x7C, 0xFF, 0xEF, 0x9F, 0xFD, 0xF7, 0xFF, 0x3F, 0xF8, 0x07, 0xFC, - 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x00, // 'r' - 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xE0, 0x3E, 0x3F, - 0x00, 0x08, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFD, - 0x80, 0x03, 0xF3, 0xE0, 0x1F, 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x07, - 0xFE, 0x00, // 's' - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x10, 0x3F, 0xFF, 0x80, - 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x1F, 0xE0, // 't' - 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, - 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x80, 0x3F, 0xE7, 0xFC, 0x0F, - 0xFE, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xE3, 0xE0, 0x7F, 0xFC, 0x3E, 0x01, 0xFE, 0x00, - 0x00, // 'u' - 0xFE, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF0, 0x00, - 0x3F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0x7E, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, // 'v' - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xBF, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0xFC, - 0x00, 0xFF, 0xC0, 0x0F, 0xC7, 0xE0, 0x07, 0xFE, 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0xF0, 0x07, 0xF1, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0x87, 0xE0, 0x1F, 0x7E, 0x01, 0xF8, 0x3F, 0x00, 0xF9, 0xF0, 0x0F, 0xC1, 0xFC, 0x07, 0xCF, - 0x80, 0xFE, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xE3, 0xF0, 0x3F, 0x01, 0xF8, 0x1F, 0x0F, 0x81, - 0xF8, 0x0F, 0xE0, 0xF8, 0x7C, 0x1F, 0xC0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x01, 0xF8, 0x7C, 0x1F, 0x87, 0xE0, - 0x0F, 0xC3, 0xE0, 0x7C, 0x3F, 0x00, 0x3F, 0x3F, 0x03, 0xF3, 0xF0, 0x01, 0xF9, 0xF8, 0x1F, 0x9F, 0x80, 0x0F, - 0xCF, 0x80, 0x7C, 0xFC, 0x00, 0x7E, 0x7C, 0x03, 0xE7, 0xE0, 0x01, 0xF7, 0xE0, 0x1F, 0x7E, 0x00, 0x0F, 0xFE, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, // 'w' - 0x7F, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, - 0xC0, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0xC0, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x7F, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xE0, - 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0xFE, 0x1F, 0xE0, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x0F, 0xE0, // 'x' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x7F, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xF1, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, // 'y' - 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'z' - 0x00, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x07, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x01, 0xF0, // '{' - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, // '|' - 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0xFF, 0xE0, 0x1F, 0xF0, 0x03, 0xF8, - 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_56Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 16, 0, 0}, // ' ' - {1, 9, 41, 16, 4, -40}, // '!' - {48, 17, 14, 25, 4, -40}, // '"' - {78, 35, 40, 37, 1, -40}, // '#' - {253, 27, 46, 33, 3, -43}, // '$' - {409, 45, 42, 49, 2, -41}, // '%' - {646, 39, 42, 42, 3, -41}, // '&' - {851, 7, 14, 15, 4, -40}, // ''' - {864, 15, 49, 19, 2, -40}, // '(' - {956, 15, 49, 19, 2, -40}, // ')' - {1048, 28, 26, 32, 2, -43}, // '*' - {1139, 27, 27, 33, 3, -33}, // '+' - {1231, 10, 14, 16, 2, -7}, // ',' - {1249, 15, 5, 19, 2, -18}, // '-' - {1259, 9, 8, 16, 4, -7}, // '.' - {1268, 23, 40, 23, 0, -40}, // '/' - {1383, 29, 42, 33, 2, -41}, // '0' - {1536, 18, 40, 33, 4, -40}, // '1' - {1626, 29, 41, 33, 2, -41}, // '2' - {1775, 28, 42, 33, 2, -41}, // '3' - {1922, 31, 40, 33, 1, -40}, // '4' - {2077, 27, 41, 33, 3, -40}, // '5' - {2216, 28, 42, 33, 3, -41}, // '6' - {2363, 29, 40, 33, 2, -40}, // '7' - {2508, 29, 42, 33, 2, -41}, // '8' - {2661, 29, 42, 33, 2, -41}, // '9' - {2814, 9, 32, 16, 4, -31}, // ':' - {2850, 11, 38, 17, 2, -31}, // ';' - {2903, 27, 28, 33, 3, -34}, // '<' - {2998, 27, 16, 33, 3, -28}, // '=' - {3052, 27, 28, 33, 3, -34}, // '>' - {3147, 25, 42, 26, 0, -41}, // '?' - {3279, 45, 45, 51, 3, -40}, // '@' - {3533, 38, 40, 38, 0, -40}, // 'A' - {3723, 30, 40, 38, 5, -40}, // 'B' - {3873, 32, 42, 37, 3, -41}, // 'C' - {4041, 34, 40, 42, 5, -40}, // 'D' - {4211, 24, 40, 32, 5, -40}, // 'E' - {4331, 24, 40, 31, 5, -40}, // 'F' - {4451, 35, 42, 42, 3, -41}, // 'G' - {4635, 33, 40, 43, 5, -40}, // 'H' - {4800, 8, 40, 18, 5, -40}, // 'I' - {4840, 17, 51, 18, -4, -40}, // 'J' - {4949, 32, 40, 37, 5, -40}, // 'K' - {5109, 24, 40, 31, 5, -40}, // 'L' - {5229, 43, 40, 53, 5, -40}, // 'M' - {5444, 35, 40, 45, 5, -40}, // 'N' - {5619, 39, 42, 45, 3, -41}, // 'O' - {5824, 27, 40, 35, 5, -40}, // 'P' - {5959, 39, 51, 45, 3, -41}, // 'Q' - {6208, 31, 40, 37, 5, -40}, // 'R' - {6363, 27, 42, 32, 3, -41}, // 'S' - {6505, 31, 40, 33, 1, -40}, // 'T' - {6660, 33, 41, 43, 5, -40}, // 'U' - {6830, 36, 40, 36, 0, -40}, // 'V' - {7010, 54, 40, 54, 0, -40}, // 'W' - {7280, 36, 40, 36, 0, -40}, // 'X' - {7460, 34, 40, 34, 0, -40}, // 'Y' - {7630, 29, 40, 33, 2, -40}, // 'Z' - {7775, 14, 49, 19, 4, -40}, // '[' - {7861, 23, 40, 23, 0, -40}, // '\' - {7976, 14, 49, 19, 1, -40}, // ']' - {8062, 29, 26, 31, 1, -40}, // '^' - {8157, 25, 4, 25, 0, 5}, // '_' - {8170, 14, 9, 34, 10, -43}, // '`' - {8186, 27, 32, 33, 2, -31}, // 'a' - {8294, 28, 44, 36, 5, -43}, // 'b' - {8448, 24, 32, 29, 3, -31}, // 'c' - {8544, 28, 44, 36, 3, -43}, // 'd' - {8698, 27, 32, 33, 3, -31}, // 'e' - {8806, 23, 43, 21, 1, -43}, // 'f' - {8930, 30, 44, 32, 1, -31}, // 'g' - {9095, 28, 43, 37, 5, -43}, // 'h' - {9246, 9, 42, 17, 4, -42}, // 'i' - {9294, 16, 55, 17, -3, -42}, // 'j' - {9404, 28, 43, 33, 5, -43}, // 'k' - {9555, 7, 43, 17, 5, -43}, // 'l' - {9593, 46, 31, 55, 5, -31}, // 'm' - {9772, 28, 31, 37, 5, -31}, // 'n' - {9881, 29, 32, 35, 3, -31}, // 'o' - {9997, 28, 44, 36, 5, -31}, // 'p' - {10151, 28, 44, 36, 3, -31}, // 'q' - {10305, 19, 31, 25, 5, -31}, // 'r' - {10379, 23, 32, 28, 3, -31}, // 's' - {10471, 21, 38, 23, 1, -37}, // 't' - {10571, 28, 31, 37, 4, -30}, // 'u' - {10680, 31, 30, 31, 0, -30}, // 'v' - {10797, 45, 30, 47, 1, -30}, // 'w' - {10966, 30, 30, 32, 1, -30}, // 'x' - {11079, 31, 43, 31, 0, -30}, // 'y' - {11246, 24, 30, 28, 2, -30}, // 'z' - {11336, 21, 49, 23, 1, -40}, // '{' - {11465, 6, 56, 32, 13, -43}, // '|' - {11507, 20, 49, 22, 1, -40} // '}' -}; -const GFXfont Open_Sans_SemiBold_56 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_56Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_56Glyphs, 0x20, 0x7E, 77}; \ No newline at end of file diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Inkplate6PLUS_Crowdsupply_Campaing_Tracker.ino b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Inkplate6PLUS_Crowdsupply_Campaing_Tracker.ino deleted file mode 100644 index db919f78e..000000000 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/Inkplate6PLUS_Crowdsupply_Campaing_Tracker.ino +++ /dev/null @@ -1,210 +0,0 @@ -/* - Inkplate6PLUS_Crowdsupply_Campaing_Tracker example for Soldered Inkplate 6Plus - For this example you will need USB cable and Inkplate 6Plus. - Select "e-radionica Inkplate 6Plus" or "Soldered Inkplate 6Plus" from Tools -> Board menu. - Don't have "e-radionica Inkplate 6Plus" or "Soldered Inkplate 6Plus" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 6Plus to display html data. - This example gets html data from crowdsource campaing and displays them on Inkplate screen. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 8 December 2022 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#if !defined(ARDUINO_INKPLATE6PLUS) && !defined(ARDUINO_INKPLATE6PLUSV2) -#error \ - "Wrong board selection for this example, please select e-radionica Inkplate 6Plus or Soldered Inkplate 6Plus in the boards menu." -#endif - -#include "Inkplate.h" // Include Inkplate library to the sketch -#include "generatedUI.h" // include generated UI - -// Enter your Wi-Fi credentials -char ssid[] = ""; -char pass[] = ""; - -#define DELAY_MS 60000 * 60 // Delay between fetching data -#define URL "https://www.crowdsupply.com/soldered/inkplate-6plus" // Link to the Inkplate 6PLUS crowdsupply campaign - -// Create an object on Inkplate library and also set library into 1Bit (BW) mode -Inkplate display(INKPLATE_1BIT); - -uint32_t n; // Variable for counting position in the buffer -char *buf; // Pointer to the buffer - -// Declaration of the function used later -String textInTag(const char *tag, const char *tagEnd, int dt = 1); - -void setup() -{ - Serial.begin(115200); // Init serial communication - // Uncomment this line if you have a USB Power Only Inkplate6PLUS - // Must be called before display.begin()! - //display.setInkplatePowerMode(INKPLATE_USB_PWR_ONLY); - display.begin(); // Init Inkplate library (you should call this function ONLY ONCE) - - // Connect to WiFi - while (!display.connectWiFi(ssid, pass)) - { - Serial.print('.'); - delay(1000); - } - - // Allocate memory for the buffer - buf = (char *)ps_malloc(100000); - - // Create an HTTPclient object and do the GET request - HTTPClient http; - if (http.begin(URL) && http.GET() > 0) - { - // If we have available data, read it and save it to the buffer - while (http.getStreamPtr()->available()) - { - char c = http.getStreamPtr()->read(); - buf[n++] = c; - delayMicroseconds(100); - } - - // Add the end of the string - buf[n] = 0; - } - Serial.println("Buffer load complete!"); - - // Get the values for each field. - // When we did a get request, we got HTML as a response because there is no API on this web page. - // If you open the source of the page, you will see the HTML code. Here in the function we pass tags we are - // interested in and get the value between the tags as a string. - text1_content = textInTag("

", "

"); // Separate the product name - text3_content = textInTag("

", "

"); // Separate the project teaser - text4_content = textInTag("

", "

"); // Separate the amount of pledged - text7_content = textInTag("

", "

"); // Separate the goal - text11_content = textInTag("
", ""); // Separate the percentage - - int percent; - text11_content.replace(",", ""); - sscanf(text11_content.c_str(), "%d%%", &percent); - - // Draw parcent slider - if (percent < 100 && percent > 0) - { - float per = (float)(percent / 100.00); - int diff = line0_end_x - line0_start_x; - Serial.println(per); - Serial.println(diff); - line0_end_x = line0_start_x + (diff * per); - } - else if (percent >= 100) - { - } - else - { - line0_end_x = line0_start_x; - } - - text13_content = - textInTag("", ""); // Separate the number of updates - text14_content = - textInTag("", ""); // Separate the date when founded - text15_content = - textInTag("", ""); // Separate the number of backers - - text19_content += textInTag("", - ""); // Separate the last update date - - // Display the content on the screen - mainDraw(); - display.display(); - - // Free the buffer - free(buf); - - // Go to sleep - esp_sleep_enable_timer_wakeup(1000LL * DELAY_MS); - (void)esp_deep_sleep_start(); -} - -void loop() -{ - // Never here -} - -/** - * @brief The function that returns content between HTML tags as a string. - * - * @param const char *tag - * The starting tag from which we want to get the value - * - * @param const char *tagEnd - * The ending tag from which we want to get the value - * - * @param int dt - * How many end tags (*tagEnd) want to skip. Default is 1 - * - * @return String value between passed tags - */ -String textInTag(const char *tag, const char *tagEnd, int dt) -{ - String r; // String for result - char *start = strstr(buf, tag) + strlen(tag); // Pointer to the beginning of the text after the tag - char *end = start - 1; // Set tag end one address before start pointer - while (dt--) - { - // Search where is the "tagEnd" starting from the last "end" which is the beginning for the first time - // (*end = start - 1) and repeat it "dt" times - end = strstr(end + 1, tagEnd); - } - - // Remove "<" and ">" from the result string - int d = 0; - for (char *t = start; t < end; ++t) - { - if (*t == '<') - ++d; - if (d == 0 && *t != '\n') - { - r += *t; - } - if (*t == '>') - --d; - } - - // Remove certain words to get only the data we want - // Hacky solution: - r.replace(""", "\""); - r.replace(" ", " "); - - r.replace("raised", ""); - r.replace("goal", ""); - r.replace("Funded!", ""); - r.replace("funded", ""); - r.replace(" on", ""); - r.replace("updates", ""); - - // Remove the following from the result string if it exists and put it in the separate string that displays on - // the screen - if (r.indexOf("hours left") != -1) - { - r.replace("hours left", ""); - text17_content = "hours left"; - } - if (r.indexOf("days left") != -1) - { - r.replace("days left", ""); - text17_content = "days left"; - } - - r.replace("backers", ""); - r.replace("Subscribe to Updates", ""); - - // Remove extraneous whitespace characters at the beginning or the end of the string - r.trim(); - - // If there is a dollar sign, the result is the string after that - if (r.indexOf("$") != -1) - r = r.substring(r.indexOf("$") + 1); - - return r; -} diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/generatedUI.h b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/generatedUI.h deleted file mode 100644 index b44d261c6..000000000 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crowdsupply_Campaing_Tracker/generatedUI.h +++ /dev/null @@ -1,309 +0,0 @@ -#include "Arduino.h" -#include "Fonts/Open_Sans_SemiBold_16.h" -#include "Fonts/Open_Sans_SemiBold_24.h" -#include "Fonts/Open_Sans_SemiBold_32.h" -#include "Fonts/Open_Sans_SemiBold_56.h" -#include "Inkplate.h" - -extern Inkplate display; - -int rect0_a_x = 9; -int rect0_a_y = 9; -int rect0_b_x = 1015; -int rect0_b_y = 749; -int rect0_fill = -1; -int rect0_radius = -1; -int rect0_color = BLACK; - -String text1_content; -int text1_cursor_x = 30; -int text1_cursor_y = 90; -const GFXfont *text1_font = &Open_Sans_SemiBold_56; - -String text2_content = "Soldered"; -int text2_cursor_x = 30; -int text2_cursor_y = 110; -const GFXfont *text2_font = &Open_Sans_SemiBold_16; - -String text3_content; -int text3_cursor_x = 30; -int text3_cursor_y = 157; -const GFXfont *text3_font = &Open_Sans_SemiBold_24; - -String text4_content; -int text4_cursor_x = 98; -int text4_cursor_y = 390; -const GFXfont *text4_font = &Open_Sans_SemiBold_32; - -String text5_content = "$"; -int text5_cursor_x = 74; -int text5_cursor_y = 390; -const GFXfont *text5_font = &Open_Sans_SemiBold_24; - -String text6_content = "raised"; -int text6_cursor_x = 223; -int text6_cursor_y = 390; -const GFXfont *text6_font = &Open_Sans_SemiBold_24; - -String text7_content; -int text7_cursor_x = 98; -int text7_cursor_y = 490; -const GFXfont *text7_font = &Open_Sans_SemiBold_32; - -String text8_content = "$"; -int text8_cursor_x = 73; -int text8_cursor_y = 490; -const GFXfont *text8_font = &Open_Sans_SemiBold_24; - -String text9_content = "goal"; -int text9_cursor_x = 224; -int text9_cursor_y = 490; -const GFXfont *text9_font = &Open_Sans_SemiBold_24; - -int rect1_a_x = 22; -int rect1_a_y = 300; -int rect1_b_x = 468; -int rect1_b_y = 700; -int rect1_fill = -1; -int rect1_radius = -1; -int rect1_color = BLACK; - -int rect2_a_x = 512; -int rect2_a_y = 300; -int rect2_b_x = 1002; -int rect2_b_y = 700; -int rect2_fill = -1; -int rect2_radius = -1; -int rect2_color = BLACK; - -int rect3_a_x = 42; -int rect3_a_y = 600; -int rect3_b_x = 448; -int rect3_b_y = 650; -int rect3_fill = -1; -int rect3_radius = -1; -int rect3_color = BLACK; - -int line0_start_x = 42; -int line0_start_y = 625; -int line0_end_x = 448; -int line0_end_y = 625; -int line0_color = BLACK; -int line0_thickness = 50; -int line0_gradient = 0; - -String text11_content = "100%"; -int text11_cursor_x = 188; -int text11_cursor_y = 565; // HERE LAST -const GFXfont *text11_font = &Open_Sans_SemiBold_16; - -String text12_content = "Funded!"; -int text12_cursor_x = 225; -int text12_cursor_y = 679; -const GFXfont *text12_font = &Open_Sans_SemiBold_16; - -String text13_content; -int text13_cursor_x = 585; -int text13_cursor_y = 395; -const GFXfont *text13_font = &Open_Sans_SemiBold_32; - -String text14_content; -int text14_cursor_x = 585; -int text14_cursor_y = 513; -const GFXfont *text14_font = &Open_Sans_SemiBold_32; - -String text15_content; -int text15_cursor_x = 585; -int text15_cursor_y = 641; -const GFXfont *text15_font = &Open_Sans_SemiBold_32; - -String text16_content = "updates"; -int text16_cursor_x = 680; -int text16_cursor_y = 390; -const GFXfont *text16_font = &Open_Sans_SemiBold_24; - -String text17_content; -int text17_cursor_x = 683; -int text17_cursor_y = 512; -const GFXfont *text17_font = &Open_Sans_SemiBold_24; - -String text18_content = "backers"; -int text18_cursor_x = 687; -int text18_cursor_y = 639; -const GFXfont *text18_font = &Open_Sans_SemiBold_24; - -String text19_content = "Last update posted "; -int text19_cursor_x = 371; -int text19_cursor_y = 735; -const GFXfont *text19_font = &Open_Sans_SemiBold_16; - -void mainDraw() -{ - if (rect0_radius != -1 && rect0_fill != -1) - display.fillRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius != -1 && rect0_fill == -1) - display.drawRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius == -1 && rect0_fill != -1) - display.fillRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - else if (rect0_radius == -1 && rect0_fill == -1) - display.drawRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - - display.setFont(text1_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text1_cursor_x, text1_cursor_y); - display.print(text1_content); - - display.setFont(text2_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text2_cursor_x, text2_cursor_y); - display.print(text2_content); - - // Manual edit: - GFXcanvas1 canvas(1024 - 100, 150); - canvas.setFont(text3_font); - canvas.setTextColor(BLACK, WHITE); - canvas.setTextSize(1); - canvas.setCursor(0, 20); - canvas.print(text3_content); - // canvas.drawRect(0, 0, 100, 100, BLACK); - - display.drawBitmap(text3_cursor_x, text3_cursor_y, canvas.getBuffer(), 1024 - 100, 150, BLACK, WHITE); - - display.setFont(text4_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text4_cursor_x, text4_cursor_y); - display.print(text4_content); - - display.setFont(text5_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text5_cursor_x, text5_cursor_y); - display.print(text5_content); - - display.setFont(text6_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text6_cursor_x, text6_cursor_y); - display.print(text6_content); - - display.setFont(text7_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text7_cursor_x, text7_cursor_y); - display.print(text7_content); - - display.setFont(text8_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text8_cursor_x, text8_cursor_y); - display.print(text8_content); - - display.setFont(text9_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text9_cursor_x, text9_cursor_y); - display.print(text9_content); - - if (rect1_radius != -1 && rect1_fill != -1) - display.fillRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius != -1 && rect1_fill == -1) - display.drawRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius == -1 && rect1_fill != -1) - display.fillRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - else if (rect1_radius == -1 && rect1_fill == -1) - display.drawRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - - if (rect2_radius != -1 && rect2_fill != -1) - display.fillRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius != -1 && rect2_fill == -1) - display.drawRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius == -1 && rect2_fill != -1) - display.fillRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - else if (rect2_radius == -1 && rect2_fill == -1) - display.drawRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - - if (rect3_radius != -1 && rect3_fill != -1) - display.fillRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius != -1 && rect3_fill == -1) - display.drawRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius == -1 && rect3_fill != -1) - display.fillRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - else if (rect3_radius == -1 && rect3_fill == -1) - display.drawRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - - if (line0_gradient <= line0_color && line0_thickness == 1) - display.drawLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color); - else if (line0_gradient <= line0_color && line0_thickness != 1) - display.drawThickLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_thickness); - else if (line0_gradient > line0_color && line0_thickness == 1) - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - 1); - else if (line0_gradient > line0_color && line0_thickness != 1) - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - line0_thickness); - - display.setFont(text11_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text11_cursor_x, text11_cursor_y); - display.print(text11_content); - - display.setFont(text12_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text12_cursor_x, text12_cursor_y); - display.print(text12_content); - - display.setFont(text13_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text13_cursor_x, text13_cursor_y); - display.print(text13_content); - - display.setFont(text14_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text14_cursor_x, text14_cursor_y); - display.print(text14_content); - - display.setFont(text15_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text15_cursor_x, text15_cursor_y); - display.print(text15_content); - - display.setFont(text16_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text16_cursor_x, text16_cursor_y); - display.print(text16_content); - - display.setFont(text17_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text17_cursor_x, text17_cursor_y); - display.print(text17_content); - - display.setFont(text18_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text18_cursor_x, text18_cursor_y); - display.print(text18_content); - - display.setFont(text19_font); - display.setTextColor(BLACK, WHITE); - display.setTextSize(1); - display.setCursor(text19_cursor_x, text19_cursor_y); - display.print(text19_content); -} diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crypto_Currency_Checker/Inkplate6PLUS_Crypto_Currency_Checker.ino b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crypto_Currency_Checker/Inkplate6PLUS_Crypto_Currency_Checker.ino index bd503116c..0e70fd82a 100644 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crypto_Currency_Checker/Inkplate6PLUS_Crypto_Currency_Checker.ino +++ b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Crypto_Currency_Checker/Inkplate6PLUS_Crypto_Currency_Checker.ino @@ -6,7 +6,7 @@ /* In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ #include "Crypto_UI.h" #include "Icons/bnc.h" diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Google_Calendar/Inkplate6PLUS_Google_Calendar.ino b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Google_Calendar/Inkplate6PLUS_Google_Calendar.ino index 4f30d5618..2d531aaf4 100644 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Google_Calendar/Inkplate6PLUS_Google_Calendar.ino +++ b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Google_Calendar/Inkplate6PLUS_Google_Calendar.ino @@ -1,8 +1,8 @@ /* -Inkplate6PLUS_Google_Calendar for Soldered Inkplate 6PLUS +Inkplate6PLUS_Google_Calendar for Soldered Inkplate 6PLUS -> https://soldered.com/documentation/inkplate/projects/GoogleCalendar -Getting Started: -For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ +Getting Started with Inkplate: +For setup and documentation, visit: https://soldered.com/documentation/inkplate Before You Start: @@ -13,7 +13,10 @@ Before You Start: - Get Google Calendar public calendar ID and API key: 1. Calendar ID: Go to calendar.google.com > Settings > Select your calendar > "Integrate calendar" > Copy "Calendar ID" (e.g. random@group.calendar.google.com). 2. API Key: Go to console.cloud.google.com > Select/create a project > "APIs & Services" > "Credentials" > "Create credentials" > API key. - Make sure your calendar is public under "Access permissions" in calendar settings. + + For this to work: + - Ensure the "Google Calendar API" is enabled in the "APIs & Services" to avoid getting '403 Forbidden' error. + - Make sure your calendar is public under "Access permissions for events" in calendar settings or you will get '404 Not Found' error. */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Image_Uploader/Inkplate6PLUS_Image_Uploader.ino b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Image_Uploader/Inkplate6PLUS_Image_Uploader.ino index 79710a391..2bb2ee9cd 100644 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Image_Uploader/Inkplate6PLUS_Image_Uploader.ino +++ b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_Image_Uploader/Inkplate6PLUS_Image_Uploader.ino @@ -1,9 +1,9 @@ /* - Inkplate10 Image Uploader Example - Compatible with Soldered Inkplate 10 + Inkplate 6PLUS Image Uploader Example + Compatible with Soldered Inkplate 6PLUS -> https://soldered.com/documentation/inkplate/projects/image-uploader - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to upload an image to a webapp hosted by Inkplate 6PLUS diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Image_Slideshow/Inkplate6PLUS_OpenAI_Image_Slideshow.ino b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Image_Slideshow/Inkplate6PLUS_OpenAI_Image_Slideshow.ino index e07c71a03..ccee02eff 100644 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Image_Slideshow/Inkplate6PLUS_OpenAI_Image_Slideshow.ino +++ b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Image_Slideshow/Inkplate6PLUS_OpenAI_Image_Slideshow.ino @@ -1,6 +1,6 @@ /* Inkplate6PLUS OpenAI Image slideshow - Compatible with Soldered Inkplate 6PLUS + Compatible with Soldered Inkplate 6PLUS -> https://soldered.com/documentation/inkplate/projects/openai-image-slideshow For this example you will need only USB cable and Inkplate 6PLUS. Select "Soldered Inkplate6PLUS" from Tools -> Board menu. diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Text_Prompt/Inkplate6PLUS_OpenAI_Text_Prompt.ino b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Text_Prompt/Inkplate6PLUS_OpenAI_Text_Prompt.ino index dbdc18a1c..dd2858291 100644 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Text_Prompt/Inkplate6PLUS_OpenAI_Text_Prompt.ino +++ b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenAI_Text_Prompt/Inkplate6PLUS_OpenAI_Text_Prompt.ino @@ -1,6 +1,6 @@ /* Inkplate6PLUS OpenAI text prompt generator - Compatible with Soldered Inkplate 6PLUS + Compatible with Soldered Inkplate 6PLUS -> https://soldered.com/documentation/inkplate/projects/OpenAI-text-prompt For this example you will need only USB cable and Inkplate 6PLUS. Select "Soldered Inkplate6PLUS" from Tools -> Board menu. diff --git a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenMeteo_Weather_Station/Inkplate6PLUS_OpenMeteo_Weather_Station.ino b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenMeteo_Weather_Station/Inkplate6PLUS_OpenMeteo_Weather_Station.ino index aac622faf..71cef0de3 100644 --- a/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenMeteo_Weather_Station/Inkplate6PLUS_OpenMeteo_Weather_Station.ino +++ b/examples/Inkplate6PLUS/Projects/Inkplate6PLUS_OpenMeteo_Weather_Station/Inkplate6PLUS_OpenMeteo_Weather_Station.ino @@ -1,9 +1,9 @@ /* Inkplate6PLUS OpenMeteo Weather Station Example - Compatible with Soldered Inkplate 6 Plus + Compatible with Soldered Inkplate 6 Plus -> https://soldered.com/documentation/inkplate/projects/open-meteo-weather-station - Getting Started: - For setup and documentation, visit: https://inkplate.readthedocs.io/en/latest/ + Getting Started with Inkplate: + For setup and documentation, visit: https://soldered.com/documentation/inkplate Overview: This example demonstrates how to fetch and display weather data from the OpenMeteo API diff --git a/examples/Inkplate7/Advanced/Communication/Inkplate7_EasyC/icons.h b/examples/Inkplate7/Advanced/Communication/Inkplate7_EasyC/icons.h index 79998218c..9b06d4b66 100644 --- a/examples/Inkplate7/Advanced/Communication/Inkplate7_EasyC/icons.h +++ b/examples/Inkplate7/Advanced/Communication/Inkplate7_EasyC/icons.h @@ -1,5 +1,5 @@ // These icons are converted using Inkplate image converter: -// https://solderedelectronics.github.io/Inkplate-image-converter/ +// http://soldered.com/image-converter const uint8_t temperature_icon[] PROGMEM = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, diff --git a/examples/Inkplate7/Advanced/DeepSleep/Inkplate7_Simple_Deep_Sleep/Inkplate7_Simple_Deep_Sleep.ino b/examples/Inkplate7/Advanced/DeepSleep/Inkplate7_Simple_Deep_Sleep/Inkplate7_Simple_Deep_Sleep.ino index 01865ed80..38e2fe715 100644 --- a/examples/Inkplate7/Advanced/DeepSleep/Inkplate7_Simple_Deep_Sleep/Inkplate7_Simple_Deep_Sleep.ino +++ b/examples/Inkplate7/Advanced/DeepSleep/Inkplate7_Simple_Deep_Sleep/Inkplate7_Simple_Deep_Sleep.ino @@ -19,7 +19,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate7/Advanced/Other/Inkplate7_Read_Battery_Voltage/Inkplate7_Read_Battery_Voltage.ino b/examples/Inkplate7/Advanced/Other/Inkplate7_Read_Battery_Voltage/Inkplate7_Read_Battery_Voltage.ino index d5fb49e96..27250a84f 100644 --- a/examples/Inkplate7/Advanced/Other/Inkplate7_Read_Battery_Voltage/Inkplate7_Read_Battery_Voltage.ino +++ b/examples/Inkplate7/Advanced/Other/Inkplate7_Read_Battery_Voltage/Inkplate7_Read_Battery_Voltage.ino @@ -13,7 +13,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h b/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h deleted file mode 100644 index 7f2ed9e6b..000000000 --- a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_16.h +++ /dev/null @@ -1,203 +0,0 @@ -// 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 Open_Sans_SemiBold_16Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xDB, 0x6D, 0xB6, 0x03, 0x60, // '!' - 0xDB, 0x6D, 0xB6, // '"' - 0x09, 0x03, 0x20, 0x6C, 0x3F, 0xE1, 0x20, 0x24, 0x04, 0x87, 0xFC, 0x36, 0x04, 0xC0, 0x90, 0x12, 0x00, // '#' - 0x10, 0x10, 0x7C, 0xFE, 0xD0, 0xD0, 0x78, 0x3C, 0x16, 0x96, 0xFE, 0xFC, 0x10, 0x10, // '$' - 0x70, 0xC6, 0x84, 0x26, 0x61, 0x32, 0x09, 0xB0, 0x69, 0x71, 0xD2, 0xC1, 0xB2, 0x09, 0x90, 0xCC, 0x84, 0x2C, - 0x61, 0xC0, // '%' - 0x3C, 0x07, 0xE0, 0x66, 0x06, 0x60, 0x6C, 0x03, 0x80, 0x78, 0xCC, 0xCC, 0xC7, 0x8C, 0x38, 0xFF, 0x87, 0xCC, // '&' - 0xDB, 0x60, // ''' - 0x23, 0x11, 0x8C, 0x42, 0x10, 0x84, 0x31, 0x84, 0x30, 0x80, // '(' - 0x43, 0x08, 0x63, 0x08, 0x42, 0x10, 0x8C, 0x62, 0x31, 0x00, // ')' - 0x10, 0x10, 0xD6, 0xFE, 0x38, 0x6C, 0x44, // '*' - 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, // '+' - 0x66, 0x44, // ',' - 0xEE, // '-' - 0xD8, // '.' - 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x0C, 0x10, 0x60, 0xC1, 0x06, 0x00, // '/' - 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x38, // '0' - 0x18, 0xEF, 0x96, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, // '1' - 0x7C, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x08, 0x10, 0x20, 0xC0, 0xFE, 0xFE, // '2' - 0x7C, 0xFE, 0x86, 0x06, 0x04, 0x78, 0x7C, 0x06, 0x06, 0x06, 0xFE, 0xF8, // '3' - 0x06, 0x03, 0x80, 0xE0, 0x78, 0x16, 0x0D, 0x86, 0x61, 0x18, 0xFF, 0xBF, 0xE0, 0x60, 0x18, // '4' - 0x7C, 0xFC, 0xC0, 0xC0, 0xFC, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFC, 0xF8, // '5' - 0x1E, 0x7E, 0x60, 0xC0, 0xFC, 0xFE, 0xC6, 0xC2, 0xC2, 0xC6, 0x7E, 0x3C, // '6' - 0xFE, 0xFE, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, // '7' - 0x7C, 0xFE, 0xC6, 0xC6, 0x64, 0x38, 0x7C, 0xC6, 0x82, 0xC6, 0xFE, 0x7C, // '8' - 0x78, 0xFC, 0xC6, 0xC6, 0x86, 0xC6, 0xFE, 0x7E, 0x06, 0x0C, 0xFC, 0xF0, // '9' - 0xD8, 0x00, 0x06, 0xC0, // ':' - 0x66, 0x00, 0x00, 0x06, 0x64, 0x40, // ';' - 0x02, 0x0E, 0x38, 0xE0, 0xC0, 0x38, 0x0E, 0x02, // '<' - 0xFE, 0x00, 0x00, 0x00, 0xFE, // '=' - 0x80, 0xE0, 0x38, 0x0E, 0x06, 0x38, 0xE0, 0x80, // '>' - 0x78, 0xFC, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, // '?' - 0x0F, 0x81, 0xC6, 0x18, 0x08, 0x9F, 0x6D, 0x99, 0x4C, 0xCA, 0x46, 0x52, 0x32, 0x99, 0xB6, 0x77, 0x10, 0x00, - 0x61, 0x01, 0xF8, 0x00, // '@' - 0x0E, 0x00, 0xE0, 0x0A, 0x01, 0xB0, 0x1B, 0x03, 0x18, 0x31, 0x83, 0xF8, 0x7F, 0xC6, 0x0C, 0x60, 0xCC, 0x06, // 'A' - 0xFC, 0x7F, 0x21, 0xD0, 0x68, 0x67, 0xF3, 0xF9, 0x06, 0x83, 0x41, 0xBF, 0xDF, 0x80, // 'B' - 0x1F, 0x3F, 0x98, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x1F, 0xC3, 0xE0, // 'C' - 0xFC, 0x3F, 0x88, 0x72, 0x0E, 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x83, 0xA1, 0xCF, 0xE3, 0xF0, // 'D' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x03, 0xF7, 0xE0, // 'E' - 0xFD, 0xFA, 0x04, 0x08, 0x1F, 0xBF, 0x40, 0x81, 0x02, 0x04, 0x00, // 'F' - 0x1F, 0x87, 0xF1, 0xC0, 0x70, 0x0C, 0x01, 0x80, 0x31, 0xF6, 0x3E, 0xE0, 0xCE, 0x19, 0xFF, 0x0F, 0xC0, // 'G' - 0x81, 0xA0, 0x68, 0x1A, 0x06, 0x81, 0xBF, 0xEF, 0xFA, 0x06, 0x81, 0xA0, 0x68, 0x1A, 0x06, // 'H' - 0xAA, 0xAA, 0xAA, // 'I' - 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x63, 0x7B, 0x80, // 'J' - 0xC3, 0x30, 0xCC, 0x63, 0x30, 0xD8, 0x36, 0x0F, 0x83, 0x30, 0xC6, 0x31, 0x8C, 0x33, 0x06, // 'K' - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFE, 0xFE, // 'L' - 0xC0, 0x6E, 0x0E, 0xE0, 0xEA, 0x0A, 0xB1, 0xAB, 0x12, 0x91, 0x29, 0xB2, 0x9A, 0x28, 0xE2, 0x8E, 0x28, 0xC2, // 'M' - 0xC0, 0xB8, 0x2E, 0x0A, 0xC2, 0xB8, 0xA6, 0x28, 0xCA, 0x3A, 0x86, 0xA0, 0xE8, 0x3A, 0x06, // 'N' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0xC1, 0xF0, // 'O' - 0xF8, 0xFE, 0x86, 0x86, 0x86, 0x86, 0xFC, 0xF8, 0x80, 0x80, 0x80, 0x80, // 'P' - 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xE0, 0x66, 0x0C, 0x7F, 0x81, 0xF0, - 0x03, 0x80, 0x18, 0x00, 0xC0, // 'Q' - 0xFC, 0x3F, 0x8C, 0x73, 0x0C, 0xC3, 0x31, 0xCF, 0xE3, 0xF0, 0xCC, 0x31, 0x8C, 0x33, 0x0E, // 'R' - 0x7C, 0xFE, 0xC2, 0xC0, 0xE0, 0x78, 0x1C, 0x06, 0x06, 0x86, 0xFE, 0xFC, // 'S' - 0xFF, 0xBF, 0xE0, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'T' - 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xCC, 0x31, 0xFE, 0x0F, 0x00, // 'U' - 0xC0, 0xD8, 0x11, 0x86, 0x30, 0xC6, 0x10, 0x66, 0x0C, 0xC1, 0x90, 0x1E, 0x03, 0xC0, 0x70, 0x06, 0x00, // 'V' - 0xC3, 0x86, 0xC3, 0x86, 0x63, 0x8C, 0x62, 0x8C, 0x66, 0xCC, 0x66, 0xCC, 0x24, 0xC8, 0x34, 0x58, 0x3C, 0x78, - 0x3C, 0x78, 0x18, 0x30, 0x18, 0x30, // 'W' - 0x61, 0x8C, 0x30, 0xCC, 0x19, 0x81, 0xE0, 0x18, 0x07, 0x80, 0xF0, 0x33, 0x06, 0x61, 0x86, 0x60, 0x60, // 'X' - 0xC1, 0x98, 0xC6, 0x30, 0xD8, 0x36, 0x07, 0x01, 0xC0, 0x20, 0x08, 0x02, 0x00, 0x80, 0x20, // 'Y' - 0xFE, 0x7F, 0x01, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x3F, 0xDF, 0xE0, // 'Z' - 0xF6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xC0, // '[' - 0xC0, 0x81, 0x83, 0x02, 0x06, 0x0C, 0x08, 0x18, 0x30, 0x20, 0x60, // '\' - 0xF1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1B, 0xC0, // ']' - 0x08, 0x07, 0x01, 0x40, 0x98, 0x22, 0x10, 0xCC, 0x10, // '^' - 0xFE, // '_' - 0xC4, 0x20, // '`' - 0x7C, 0x7E, 0x06, 0x06, 0x7E, 0xC6, 0xC6, 0xFE, 0x76, // 'a' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB8, 0xDF, 0xCD, 0xE0, // 'b' - 0x3C, 0xFB, 0x06, 0x0C, 0x18, 0x30, 0x3E, 0x3C, // 'c' - 0x03, 0x01, 0x80, 0xC0, 0x67, 0xB3, 0xFB, 0x1D, 0x86, 0xC3, 0x61, 0xB1, 0xDF, 0xE7, 0xB0, // 'd' - 0x3C, 0x7E, 0xC6, 0xFE, 0xFE, 0xC0, 0xC0, 0x7E, 0x3C, // 'e' - 0x1E, 0x3C, 0x30, 0x30, 0x7C, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // 'f' - 0x3F, 0x99, 0x86, 0x31, 0x8C, 0x62, 0x0F, 0x06, 0x01, 0xFC, 0x7F, 0x30, 0x6C, 0x1B, 0x0C, 0x7E, 0x00, // 'g' - 0xC0, 0x60, 0x30, 0x18, 0x0D, 0xE7, 0xF3, 0x8D, 0x86, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x30, // 'h' - 0xD8, 0x0D, 0xB6, 0xDB, 0x6C, // 'i' - 0x31, 0x80, 0x03, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xDE, 0xE0, // 'j' - 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x66, 0x63, 0x61, 0xB0, 0xF8, 0x7C, 0x33, 0x18, 0xCC, 0x70, // 'k' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6C, // 'l' - 0xDC, 0xF3, 0xFF, 0xEE, 0x71, 0xB0, 0xC6, 0xC2, 0x1B, 0x08, 0x6C, 0x21, 0xB0, 0x86, 0xC2, 0x18, // 'm' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x00, // 'n' - 0x3C, 0x3F, 0x30, 0xD8, 0x6C, 0x36, 0x1B, 0x0C, 0xFC, 0x3C, 0x00, // 'o' - 0xDE, 0x7F, 0x38, 0xD8, 0x6C, 0x36, 0x1B, 0x8D, 0xFC, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x00, // 'p' - 0x7B, 0x3F, 0xB1, 0xD8, 0x6C, 0x36, 0x1B, 0x1D, 0xFE, 0x7B, 0x01, 0x80, 0xC0, 0x60, 0x30, // 'q' - 0xDD, 0xFB, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC0, // 'r' - 0x79, 0xFB, 0x17, 0x07, 0x81, 0x83, 0x7E, 0xF8, // 's' - 0x20, 0x41, 0xF7, 0xE6, 0x0C, 0x18, 0x30, 0x60, 0x78, 0xF0, // 't' - 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x1B, 0x1C, 0xFE, 0x7B, 0x00, // 'u' - 0xC1, 0x90, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x40, 0x70, 0x1C, 0x00, // 'v' - 0xC7, 0x19, 0x1C, 0x46, 0x53, 0x19, 0x4C, 0x6D, 0xB0, 0xB6, 0x83, 0x8E, 0x0E, 0x38, 0x38, 0xE0, // 'w' - 0x63, 0x18, 0xC3, 0x60, 0x70, 0x1C, 0x07, 0x03, 0x61, 0x8C, 0x63, 0x00, // 'x' - 0xC1, 0x98, 0xC6, 0x31, 0x8C, 0x36, 0x0D, 0x81, 0x60, 0x70, 0x1C, 0x06, 0x01, 0x83, 0xC0, 0xE0, 0x00, // 'y' - 0xFD, 0xF8, 0x30, 0xC3, 0x0C, 0x30, 0x7E, 0xFC, // 'z' - 0x1C, 0x70, 0xC1, 0x83, 0x06, 0x38, 0x38, 0x30, 0x60, 0xC1, 0x83, 0x03, 0x07, 0x00, // '{' - 0xAA, 0xAA, 0xAA, 0xAA, 0x80, // '|' - 0xE0, 0xE0, 0xC1, 0x83, 0x06, 0x07, 0x1C, 0x30, 0x60, 0xC1, 0x83, 0x0C, 0x38, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_16Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 5, 0, 0}, // ' ' - {1, 3, 12, 5, 1, -12}, // '!' - {6, 6, 4, 8, 1, -12}, // '"' - {9, 11, 12, 11, 0, -12}, // '#' - {26, 8, 14, 10, 1, -13}, // '$' - {40, 13, 12, 15, 1, -12}, // '%' - {60, 12, 12, 13, 1, -12}, // '&' - {78, 3, 4, 5, 1, -12}, // ''' - {80, 5, 15, 6, 1, -12}, // '(' - {90, 5, 15, 6, 0, -12}, // ')' - {100, 8, 7, 10, 1, -13}, // '*' - {107, 8, 7, 10, 1, -9}, // '+' - {114, 4, 4, 5, 0, -2}, // ',' - {116, 4, 2, 6, 1, -5}, // '-' - {117, 3, 2, 5, 1, -2}, // '.' - {118, 7, 12, 7, 0, -12}, // '/' - {129, 8, 12, 10, 1, -12}, // '0' - {141, 6, 12, 10, 1, -12}, // '1' - {150, 8, 12, 10, 1, -12}, // '2' - {162, 8, 12, 10, 1, -12}, // '3' - {174, 10, 12, 10, 0, -12}, // '4' - {189, 8, 12, 10, 1, -12}, // '5' - {201, 8, 12, 10, 1, -12}, // '6' - {213, 8, 12, 10, 1, -12}, // '7' - {225, 8, 12, 10, 1, -12}, // '8' - {237, 8, 12, 10, 1, -12}, // '9' - {249, 3, 9, 5, 1, -9}, // ':' - {253, 4, 11, 5, 0, -9}, // ';' - {259, 8, 8, 10, 1, -10}, // '<' - {267, 8, 5, 10, 1, -8}, // '=' - {272, 8, 8, 10, 1, -10}, // '>' - {280, 8, 12, 8, 0, -12}, // '?' - {292, 13, 13, 15, 1, -12}, // '@' - {314, 12, 12, 12, 0, -12}, // 'A' - {332, 9, 12, 12, 2, -12}, // 'B' - {346, 9, 12, 11, 1, -12}, // 'C' - {360, 10, 12, 13, 2, -12}, // 'D' - {375, 7, 12, 10, 2, -12}, // 'E' - {386, 7, 12, 10, 2, -12}, // 'F' - {397, 11, 12, 13, 1, -12}, // 'G' - {414, 10, 12, 13, 2, -12}, // 'H' - {429, 2, 12, 6, 2, -12}, // 'I' - {432, 5, 15, 6, -1, -12}, // 'J' - {442, 10, 12, 11, 1, -12}, // 'K' - {457, 8, 12, 10, 2, -12}, // 'L' - {469, 12, 12, 16, 2, -12}, // 'M' - {487, 10, 12, 14, 2, -12}, // 'N' - {502, 12, 12, 14, 1, -12}, // 'O' - {520, 8, 12, 11, 2, -12}, // 'P' - {532, 12, 15, 14, 1, -12}, // 'Q' - {555, 10, 12, 11, 1, -12}, // 'R' - {570, 8, 12, 10, 1, -12}, // 'S' - {582, 10, 12, 10, 0, -12}, // 'T' - {597, 11, 12, 13, 1, -12}, // 'U' - {614, 11, 12, 11, 0, -12}, // 'V' - {631, 16, 12, 16, 0, -12}, // 'W' - {655, 11, 12, 11, 0, -12}, // 'X' - {672, 10, 12, 10, 0, -12}, // 'Y' - {687, 9, 12, 10, 1, -12}, // 'Z' - {701, 5, 15, 6, 1, -12}, // '[' - {711, 7, 12, 7, 0, -12}, // '\' - {722, 5, 15, 6, 0, -12}, // ']' - {732, 10, 7, 10, 0, -12}, // '^' - {741, 8, 1, 8, 0, 1}, // '_' - {742, 4, 3, 10, 3, -13}, // '`' - {744, 8, 9, 10, 1, -9}, // 'a' - {753, 9, 13, 11, 1, -13}, // 'b' - {768, 7, 9, 9, 1, -9}, // 'c' - {776, 9, 13, 11, 1, -13}, // 'd' - {791, 8, 9, 10, 1, -9}, // 'e' - {800, 8, 13, 7, 0, -13}, // 'f' - {813, 10, 13, 10, 0, -9}, // 'g' - {830, 9, 13, 11, 1, -13}, // 'h' - {845, 3, 13, 5, 1, -13}, // 'i' - {850, 5, 17, 5, -1, -13}, // 'j' - {861, 9, 13, 10, 1, -13}, // 'k' - {876, 3, 13, 5, 1, -13}, // 'l' - {881, 14, 9, 16, 1, -9}, // 'm' - {897, 9, 9, 11, 1, -9}, // 'n' - {908, 9, 9, 11, 1, -9}, // 'o' - {919, 9, 13, 11, 1, -9}, // 'p' - {934, 9, 13, 11, 1, -9}, // 'q' - {949, 7, 9, 8, 1, -9}, // 'r' - {957, 7, 9, 9, 1, -9}, // 's' - {965, 7, 11, 7, 0, -11}, // 't' - {975, 9, 9, 11, 1, -9}, // 'u' - {986, 10, 9, 10, 0, -9}, // 'v' - {998, 14, 9, 14, 0, -9}, // 'w' - {1014, 10, 9, 10, 0, -9}, // 'x' - {1026, 10, 13, 10, 0, -9}, // 'y' - {1043, 7, 9, 9, 1, -9}, // 'z' - {1051, 7, 15, 7, 0, -12}, // '{' - {1065, 2, 17, 10, 4, -13}, // '|' - {1070, 7, 15, 7, 0, -12} // '}' -}; -const GFXfont Open_Sans_SemiBold_16 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_16Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_16Glyphs, 0x20, 0x7E, 23}; \ No newline at end of file diff --git a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h b/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h deleted file mode 100644 index 0fa23e60d..000000000 --- a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_24.h +++ /dev/null @@ -1,276 +0,0 @@ -// 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 Open_Sans_SemiBold_24Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x0E, 0xEE, 0xE0, // '!' - 0x66, 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x30, // '"' - 0x06, 0x30, 0x0C, 0x60, 0x18, 0xC0, 0x71, 0x80, 0xC6, 0x0F, 0xFF, 0x9F, 0xFF, 0x06, 0x30, 0x18, 0xE0, 0x31, - 0x83, 0xFF, 0xF7, 0xFF, 0xE3, 0x8C, 0x06, 0x38, 0x0C, 0x60, 0x18, 0xC0, 0x31, 0x80, // '#' - 0x06, 0x00, 0x30, 0x07, 0xF0, 0xFF, 0xC7, 0x66, 0x73, 0x03, 0x98, 0x0E, 0xC0, 0x7E, 0x00, 0xFC, 0x01, 0xF8, - 0x0D, 0xC0, 0x67, 0x03, 0x3B, 0x1B, 0x9F, 0xFC, 0x7F, 0x80, 0x30, 0x01, 0x80, // '$' - 0x3C, 0x06, 0x07, 0xE0, 0xE0, 0xE6, 0x0C, 0x0C, 0x71, 0x80, 0xC7, 0x18, 0x0C, 0x73, 0x00, 0xC7, 0x70, 0x0E, - 0x66, 0x78, 0x7E, 0xEF, 0xC3, 0xCC, 0xCE, 0x01, 0xDC, 0x60, 0x19, 0xC6, 0x03, 0x1C, 0x60, 0x71, 0xC6, 0x06, - 0x0C, 0xE0, 0xE0, 0xFC, 0x0C, 0x07, 0x80, // '%' - 0x0F, 0x80, 0x0F, 0xF0, 0x03, 0x8E, 0x00, 0xC3, 0x80, 0x30, 0xE0, 0x0E, 0x70, 0x01, 0xFC, 0x00, 0x3C, 0x00, - 0x3F, 0x07, 0x1F, 0xE1, 0xCF, 0x3C, 0xE3, 0x83, 0xB8, 0xE0, 0x7C, 0x38, 0x0F, 0x07, 0x0F, 0xC1, 0xFF, 0xB8, - 0x1F, 0x87, 0x00, // '&' - 0xDB, 0x6D, 0x80, // ''' - 0x1C, 0x30, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xE0, 0xC1, - 0xC0, // '(' - 0xE0, 0xC1, 0xC1, 0x83, 0x83, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x71, 0xC3, 0x0E, - 0x00, // ')' - 0x0E, 0x00, 0xE0, 0x0E, 0x08, 0x42, 0xFF, 0xEF, 0xFE, 0x0E, 0x01, 0xB0, 0x3B, 0x83, 0x18, 0x11, 0x00, // '*' - 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x7F, 0xFB, 0xFF, 0xC0, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, - 0x0C, 0x00, // '+' - 0x73, 0x39, 0xCC, 0x60, // ',' - 0xFD, 0xF8, // '-' - 0xEE, 0xEE, // '.' - 0x03, 0x80, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x06, 0x03, 0x80, 0xE0, 0x30, 0x1C, 0x07, - 0x01, 0x80, 0xE0, 0x00, // '/' - 0x1F, 0x01, 0xFE, 0x1C, 0x38, 0xE1, 0xCE, 0x06, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x71, 0xC3, 0x87, 0xF8, 0x0F, 0x80, // '0' - 0x0E, 0x1E, 0x3E, 0xF6, 0xE6, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, // '1' - 0x1F, 0x83, 0xFE, 0x1C, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, - 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1F, 0xFE, 0xFF, 0xF0, // '2' - 0x3F, 0x87, 0xFE, 0x18, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0x00, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x7B, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '3' - 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x1B, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0x38, 0x0E, 0x70, 0x38, 0xE0, 0x61, - 0xC1, 0x83, 0x87, 0xFF, 0xEF, 0xFF, 0xC0, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, // '4' - 0x7F, 0xE3, 0xFF, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xE0, 0x07, 0x80, 0x1C, - 0x00, 0xE0, 0x07, 0x00, 0x73, 0x07, 0x9F, 0xF8, 0x7F, 0x00, // '5' - 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x07, 0x00, 0x30, 0x03, 0x9E, 0x1F, 0xFC, 0xF0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x38, 0x39, 0xE3, 0x87, 0xF8, 0x0F, 0x80, // '6' - 0xFF, 0xF7, 0xFF, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, - 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x38, 0x00, // '7' - 0x1F, 0x81, 0xFE, 0x1C, 0x38, 0xC0, 0xC6, 0x06, 0x38, 0x71, 0xE7, 0x07, 0xF0, 0x1F, 0x83, 0xDE, 0x1C, 0x39, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0xC3, 0x8F, 0xFC, 0x1F, 0x80, // '8' - 0x1F, 0x01, 0xFE, 0x1C, 0x79, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0x70, 0xF3, 0xFF, 0x87, 0xDC, - 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x0F, 0x0F, 0xF0, 0x7E, 0x00, // '9' - 0xEE, 0xEE, 0x00, 0x00, 0x0E, 0xEE, 0xE0, // ':' - 0x73, 0x9C, 0xE0, 0x00, 0x00, 0x00, 0x1C, 0xE6, 0x73, 0x18, // ';' - 0x00, 0x10, 0x03, 0x80, 0x78, 0x0F, 0x01, 0xE0, 0x7C, 0x03, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3C, - 0x00, 0x20, // '<' - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, // '=' - 0x80, 0x07, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x03, 0xC0, 0x7C, 0x1F, 0x03, 0xE0, 0x3C, 0x01, - 0x00, 0x00, // '>' - 0x3F, 0x1F, 0xF1, 0x87, 0x00, 0x60, 0x0C, 0x03, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x80, 0x70, 0x0E, 0x00, 0x00, - 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, // '?' - 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0x80, 0xE0, 0x30, 0x01, 0x83, 0x00, 0x0E, 0x38, 0x7E, 0x31, 0x8F, 0xF1, - 0x8C, 0x61, 0x86, 0xE7, 0x0C, 0x36, 0x30, 0x63, 0xB1, 0x83, 0x19, 0xCE, 0x38, 0xC6, 0x3F, 0xFC, 0x30, 0xF1, - 0xC1, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x02, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0x00, // '@' - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x66, 0x00, 0x73, 0x80, 0x39, 0xC0, 0x18, 0x60, 0x1C, - 0x38, 0x0E, 0x1C, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0x81, 0xC3, 0x80, 0x71, 0xC0, 0x38, 0xC0, 0x1C, 0xE0, 0x07, - 0x00, // 'A' - 0xFF, 0x83, 0xFF, 0x8E, 0x0F, 0x38, 0x1C, 0xE0, 0x73, 0x81, 0xCE, 0x0E, 0x3F, 0xF0, 0xFF, 0xE3, 0x83, 0xCE, - 0x07, 0x38, 0x0E, 0xE0, 0x3B, 0x81, 0xEE, 0x0F, 0x3F, 0xF8, 0xFF, 0xC0, // 'B' - 0x07, 0xF0, 0x7F, 0xE3, 0xC1, 0x8E, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x06, - 0x00, 0x1C, 0x00, 0x70, 0x01, 0xE0, 0x03, 0xC0, 0x87, 0xFE, 0x07, 0xF0, // 'C' - 0xFF, 0x80, 0xFF, 0xE0, 0xE0, 0xF0, 0xE0, 0x38, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x38, 0xE0, 0xF0, 0xFF, 0xE0, 0xFF, 0x80, // 'D' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0xFC, 0xFF, 0x9C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'E' - 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'F' - 0x03, 0xF8, 0x1F, 0xF8, 0xF8, 0x21, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0xFD, 0xC1, - 0xF9, 0x80, 0x73, 0x80, 0xE7, 0x01, 0xCF, 0x03, 0x8F, 0x07, 0x0F, 0xFE, 0x07, 0xF8, // 'G' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1C, // 'H' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, // 'I' - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x1C, 0xFC, 0xF0, // 'J' - 0xE0, 0x73, 0x83, 0xCE, 0x0E, 0x38, 0x70, 0xE3, 0x83, 0x9C, 0x0E, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xDC, 0x0E, - 0x78, 0x38, 0xE0, 0xE1, 0xC3, 0x87, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x78, // 'K' - 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0xFE, 0xFF, 0xC0, // 'L' - 0xF0, 0x03, 0xDF, 0x00, 0xFB, 0xE0, 0x1F, 0x7C, 0x03, 0xEF, 0xC0, 0xFD, 0xD8, 0x1B, 0xBB, 0x07, 0x77, 0x70, - 0xCE, 0xE6, 0x19, 0xDC, 0xC7, 0x3B, 0x9C, 0xC7, 0x71, 0x98, 0xEE, 0x3F, 0x1D, 0xC7, 0xC3, 0xB8, 0x78, 0x77, - 0x0F, 0x0E, 0xE1, 0xC1, 0xC0, // 'M' - 0xF0, 0x0E, 0xF8, 0x0E, 0xF8, 0x0E, 0xFC, 0x0E, 0xFE, 0x0E, 0xEE, 0x0E, 0xE7, 0x0E, 0xE7, 0x0E, 0xE3, 0x8E, - 0xE1, 0xCE, 0xE1, 0xCE, 0xE0, 0xEE, 0xE0, 0xFE, 0xE0, 0x7E, 0xE0, 0x3E, 0xE0, 0x3E, 0xE0, 0x1E, // 'N' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, // 'O' - 0xFF, 0x87, 0xFF, 0x38, 0x39, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x3C, 0xFF, 0xC7, 0xF8, 0x38, 0x01, - 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x00, // 'P' - 0x07, 0xF0, 0x07, 0xFF, 0x03, 0xC1, 0xE0, 0xE0, 0x38, 0x70, 0x07, 0x1C, 0x01, 0xC7, 0x00, 0x73, 0x80, 0x0E, - 0xE0, 0x03, 0xB8, 0x00, 0xE7, 0x00, 0x71, 0xC0, 0x1C, 0x70, 0x07, 0x0E, 0x03, 0x83, 0xC1, 0xE0, 0x7F, 0xF0, - 0x07, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, // 'Q' - 0xFF, 0x03, 0xFF, 0x0E, 0x1E, 0x38, 0x38, 0xE0, 0xE3, 0x83, 0x8E, 0x0E, 0x38, 0x78, 0xFF, 0xC3, 0xFC, 0x0E, - 0x38, 0x38, 0xE0, 0xE1, 0xC3, 0x83, 0x8E, 0x0E, 0x38, 0x1C, 0xE0, 0x70, // 'R' - 0x1F, 0x87, 0xFC, 0x70, 0x4E, 0x00, 0xE0, 0x0E, 0x00, 0x78, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0xE0, 0x0E, - 0x00, 0xE0, 0x0E, 0xC1, 0xCF, 0xFC, 0x7F, 0x00, // 'S' - 0xFF, 0xFD, 0xFF, 0xF8, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'T' - 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x0E, 0xE0, 0x1D, 0xC0, - 0x3B, 0x80, 0x77, 0x00, 0xEE, 0x01, 0xCE, 0x07, 0x1E, 0x1E, 0x1F, 0xF8, 0x0F, 0xC0, // 'U' - 0xE0, 0x0E, 0x60, 0x0C, 0x70, 0x1C, 0x70, 0x1C, 0x30, 0x18, 0x38, 0x38, 0x38, 0x38, 0x18, 0x30, 0x1C, 0x70, - 0x1C, 0x70, 0x0C, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x06, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, // 'V' - 0xE0, 0x38, 0x0E, 0x60, 0x38, 0x0C, 0x70, 0x7C, 0x1C, 0x70, 0x7C, 0x1C, 0x70, 0x6C, 0x1C, 0x30, 0xEC, 0x18, - 0x38, 0xEE, 0x38, 0x38, 0xCE, 0x38, 0x38, 0xC6, 0x38, 0x19, 0xC7, 0x30, 0x1D, 0xC7, 0x70, 0x1D, 0x83, 0x70, - 0x1D, 0x83, 0x70, 0x0F, 0x83, 0xE0, 0x0F, 0x01, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xC0, // 'W' - 0x70, 0x1C, 0x70, 0x1C, 0x38, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x0E, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0x80, - 0x07, 0xC0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x38, 0x38, 0x70, 0x1C, 0xE0, 0x1E, // 'X' - 0xE0, 0x1C, 0xE0, 0x71, 0xC0, 0xE1, 0xC3, 0x83, 0x87, 0x03, 0x9C, 0x07, 0x38, 0x07, 0xE0, 0x07, 0x80, 0x0F, - 0x00, 0x0C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, // 'Y' - 0xFF, 0xF7, 0xFF, 0x80, 0x38, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, - 0x70, 0x03, 0x80, 0x38, 0x03, 0x80, 0x1F, 0xFE, 0xFF, 0xF0, // 'Z' - 0xFB, 0xEC, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3E, 0xF8, // '[' - 0xE0, 0x18, 0x07, 0x01, 0xC0, 0x30, 0x0E, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0xE0, 0x38, 0x06, 0x01, 0xC0, - 0x70, 0x0C, 0x03, 0x80, // '\' - 0xFB, 0xE1, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0xBE, 0xF8, // ']' - 0x06, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x60, 0x1D, 0x80, 0x63, 0x03, 0x8C, 0x0C, 0x18, 0x30, 0x61, 0x80, 0xC6, - 0x03, 0x00, // '^' - 0xFF, 0xDF, 0xF8, // '_' - 0xF0, 0xE0, 0xE0, 0xE0, // '`' - 0x1F, 0x83, 0xFC, 0x30, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x7F, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'a' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x77, 0xC3, 0xFF, 0x1E, 0x1C, 0xE0, 0xE7, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x83, 0x9E, 0x1C, 0xDF, 0xC6, 0x7C, 0x00, // 'b' - 0x0F, 0xC7, 0xF9, 0xE0, 0x38, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x01, 0xE1, 0x1F, 0xE1, 0xF8, // 'c' - 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x0F, 0xB8, 0xFF, 0xCE, 0x1E, 0x70, 0x77, 0x03, 0xB8, 0x1D, - 0xC0, 0xEE, 0x07, 0x70, 0x39, 0xC1, 0xCE, 0x1E, 0x3F, 0xF0, 0xF9, 0x80, // 'd' - 0x0F, 0x81, 0xFE, 0x1C, 0x38, 0xE0, 0xEE, 0x07, 0x7F, 0xFB, 0xFF, 0xDC, 0x00, 0xE0, 0x03, 0x80, 0x1E, 0x08, - 0x7F, 0xC0, 0xFC, 0x00, // 'e' - 0x07, 0xC3, 0xF0, 0x70, 0x0C, 0x01, 0x80, 0xFF, 0x3F, 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, - 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, // 'f' - 0x0F, 0xF8, 0xFF, 0xE3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x83, 0x8E, 0x0F, 0xF0, 0x1F, 0x80, 0xC0, 0x03, - 0x00, 0x0F, 0xF8, 0x3F, 0xF1, 0xC1, 0xCE, 0x03, 0x38, 0x0C, 0xE0, 0x71, 0xFF, 0x83, 0xF8, 0x00, // 'g' - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0xF8, 0xFF, 0xCF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, // 'h' - 0xEE, 0xE0, 0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'i' - 0x1C, 0x38, 0x70, 0x00, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, - 0xC3, 0xBE, 0x78, // 'j' - 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x73, 0x87, 0x1C, 0x70, 0xE7, 0x07, 0x70, 0x3F, 0x01, - 0xFC, 0x0F, 0xF0, 0x73, 0x83, 0x8E, 0x1C, 0x38, 0xE0, 0xE7, 0x07, 0x80, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xCF, 0x8F, 0x8D, 0xFD, 0xFC, 0xF1, 0xF0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, - 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xEE, 0x0E, 0x0E, 0xE0, 0xE0, 0xE0, // 'm' - 0xCF, 0x8D, 0xFC, 0xF0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, - 0xE0, 0xE0, // 'n' - 0x0F, 0x80, 0xFF, 0x87, 0x8F, 0x1C, 0x1C, 0xE0, 0x3B, 0x80, 0xEE, 0x03, 0xB8, 0x0E, 0xE0, 0x39, 0xC1, 0xC7, - 0x8F, 0x0F, 0xF8, 0x0F, 0x80, // 'o' - 0xCF, 0x86, 0xFE, 0x3C, 0x39, 0xC1, 0xCE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x77, 0x07, 0x3C, 0x39, - 0xFF, 0x8E, 0xF8, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, // 'p' - 0x1F, 0x31, 0xFF, 0x9C, 0x3C, 0xE0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDC, 0x0E, 0xE0, 0x73, 0x83, 0x9C, 0x3C, - 0x7F, 0xE1, 0xF7, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, // 'q' - 0xCF, 0x6F, 0x3F, 0x9E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00, // 'r' - 0x3F, 0x8F, 0xF3, 0x82, 0x70, 0x0F, 0x00, 0xF8, 0x0F, 0xE0, 0x3C, 0x01, 0xC0, 0x3B, 0x07, 0x7F, 0xC7, 0xF0, // 's' - 0x18, 0x0C, 0x0E, 0x0F, 0xEF, 0xF1, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0x7C, 0x1E, // 't' - 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE1, 0xE7, 0xF6, - 0x3E, 0x60, // 'u' - 0xE0, 0x39, 0x80, 0xC7, 0x07, 0x1C, 0x1C, 0x30, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xD8, 0x03, 0xE0, 0x07, 0x00, // 'v' - 0xE0, 0xF0, 0x73, 0x07, 0x83, 0x1C, 0x3C, 0x38, 0xE3, 0xF1, 0xC3, 0x1B, 0x8C, 0x1C, 0xCC, 0xE0, 0xE6, 0x67, - 0x07, 0x73, 0xB8, 0x1B, 0x0D, 0x80, 0xD8, 0x7C, 0x07, 0xC3, 0xE0, 0x1C, 0x1E, 0x00, 0xE0, 0x70, 0x00, // 'w' - 0x70, 0x70, 0xE3, 0x83, 0x8E, 0x07, 0x70, 0x0D, 0x80, 0x3E, 0x00, 0x70, 0x03, 0xE0, 0x1D, 0xC0, 0x77, 0x03, - 0x8E, 0x1C, 0x1C, 0x70, 0x70, // 'x' - 0xE0, 0x39, 0xC1, 0xC7, 0x07, 0x1C, 0x1C, 0x38, 0xE0, 0xE3, 0x81, 0x8E, 0x07, 0x70, 0x1D, 0xC0, 0x36, 0x00, - 0xF8, 0x01, 0xE0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x01, 0xF0, 0x07, 0x80, 0x00, // 'y' - 0xFF, 0xBF, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x1C, 0x0E, 0x03, 0xFE, 0xFF, 0x80, // 'z' - 0x0E, 0x1E, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0xF0, 0xE0, 0x78, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x1C, 0x1E, 0x06, // '{' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // '|' - 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x38, 0x38, 0x1E, 0x0E, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x70, 0xF0, 0xE0 // '}' -}; -const GFXglyph Open_Sans_SemiBold_24Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 7, 0, 0}, // ' ' - {1, 4, 17, 8, 2, -17}, // '!' - {10, 9, 6, 11, 1, -17}, // '"' - {17, 15, 17, 17, 1, -17}, // '#' - {49, 13, 19, 15, 1, -18}, // '$' - {80, 20, 17, 22, 1, -17}, // '%' - {123, 18, 17, 19, 1, -17}, // '&' - {162, 3, 6, 7, 2, -17}, // ''' - {165, 7, 21, 9, 1, -17}, // '(' - {184, 7, 21, 9, 1, -17}, // ')' - {203, 12, 11, 14, 1, -18}, // '*' - {220, 13, 12, 15, 1, -15}, // '+' - {240, 5, 6, 7, 1, -3}, // ',' - {244, 7, 2, 9, 1, -8}, // '-' - {246, 4, 4, 8, 2, -4}, // '.' - {248, 10, 17, 10, 0, -17}, // '/' - {270, 13, 17, 15, 1, -17}, // '0' - {298, 8, 17, 15, 2, -17}, // '1' - {315, 13, 17, 15, 1, -17}, // '2' - {343, 13, 17, 15, 1, -17}, // '3' - {371, 15, 17, 15, 0, -17}, // '4' - {403, 13, 17, 15, 1, -17}, // '5' - {431, 13, 17, 15, 1, -17}, // '6' - {459, 13, 17, 15, 1, -17}, // '7' - {487, 13, 17, 15, 1, -17}, // '8' - {515, 13, 17, 15, 1, -17}, // '9' - {543, 4, 13, 8, 2, -13}, // ':' - {550, 5, 16, 8, 1, -13}, // ';' - {560, 13, 12, 15, 1, -15}, // '<' - {580, 13, 7, 15, 1, -12}, // '=' - {592, 13, 12, 15, 1, -15}, // '>' - {612, 11, 17, 12, 0, -17}, // '?' - {636, 21, 19, 23, 1, -17}, // '@' - {686, 17, 17, 17, 0, -17}, // 'A' - {723, 14, 17, 17, 2, -17}, // 'B' - {753, 14, 17, 16, 1, -17}, // 'C' - {783, 16, 17, 19, 2, -17}, // 'D' - {817, 11, 17, 14, 2, -17}, // 'E' - {841, 11, 17, 14, 2, -17}, // 'F' - {865, 15, 17, 18, 1, -17}, // 'G' - {897, 15, 17, 19, 2, -17}, // 'H' - {929, 4, 17, 8, 2, -17}, // 'I' - {938, 8, 22, 8, -2, -17}, // 'J' - {960, 14, 17, 16, 2, -17}, // 'K' - {990, 11, 17, 14, 2, -17}, // 'L' - {1014, 19, 17, 23, 2, -17}, // 'M' - {1055, 16, 17, 20, 2, -17}, // 'N' - {1089, 18, 17, 20, 1, -17}, // 'O' - {1128, 13, 17, 16, 2, -17}, // 'P' - {1156, 18, 21, 20, 1, -17}, // 'Q' - {1204, 14, 17, 16, 2, -17}, // 'R' - {1234, 12, 17, 14, 1, -17}, // 'S' - {1260, 15, 17, 15, 0, -17}, // 'T' - {1292, 15, 17, 19, 2, -17}, // 'U' - {1324, 16, 17, 16, 0, -17}, // 'V' - {1358, 24, 17, 24, 0, -17}, // 'W' - {1409, 16, 17, 16, 0, -17}, // 'X' - {1443, 15, 17, 15, 0, -17}, // 'Y' - {1475, 13, 17, 15, 1, -17}, // 'Z' - {1503, 6, 21, 9, 2, -17}, // '[' - {1519, 10, 17, 10, 0, -17}, // '\' - {1541, 6, 21, 9, 1, -17}, // ']' - {1557, 14, 11, 14, 0, -17}, // '^' - {1577, 11, 2, 11, 0, 2}, // '_' - {1580, 7, 4, 15, 4, -19}, // '`' - {1584, 12, 13, 15, 1, -13}, // 'a' - {1604, 13, 18, 16, 2, -18}, // 'b' - {1634, 11, 13, 13, 1, -13}, // 'c' - {1652, 13, 18, 16, 1, -18}, // 'd' - {1682, 13, 13, 15, 1, -13}, // 'e' - {1704, 11, 18, 10, 0, -18}, // 'f' - {1729, 14, 19, 14, 0, -13}, // 'g' - {1763, 12, 18, 16, 2, -18}, // 'h' - {1790, 4, 18, 8, 2, -18}, // 'i' - {1799, 7, 24, 8, -1, -18}, // 'j' - {1820, 13, 18, 15, 2, -18}, // 'k' - {1850, 4, 18, 8, 2, -18}, // 'l' - {1859, 20, 13, 24, 2, -13}, // 'm' - {1892, 12, 13, 16, 2, -13}, // 'n' - {1912, 14, 13, 16, 1, -13}, // 'o' - {1935, 13, 19, 16, 2, -13}, // 'p' - {1966, 13, 19, 16, 1, -13}, // 'q' - {1997, 9, 13, 11, 2, -13}, // 'r' - {2012, 11, 13, 13, 1, -13}, // 's' - {2030, 9, 16, 10, 0, -16}, // 't' - {2048, 12, 13, 16, 2, -13}, // 'u' - {2068, 14, 13, 14, 0, -13}, // 'v' - {2091, 21, 13, 21, 0, -13}, // 'w' - {2126, 14, 13, 14, 0, -13}, // 'x' - {2149, 14, 19, 14, 0, -13}, // 'y' - {2183, 10, 13, 12, 1, -13}, // 'z' - {2200, 8, 21, 10, 1, -17}, // '{' - {2221, 4, 24, 14, 5, -18}, // '|' - {2233, 8, 21, 10, 1, -17} // '}' -}; -const GFXfont Open_Sans_SemiBold_24 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_24Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_24Glyphs, 0x20, 0x7E, 33}; \ No newline at end of file diff --git a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h b/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h deleted file mode 100644 index 3da740530..000000000 --- a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_32.h +++ /dev/null @@ -1,363 +0,0 @@ -// 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 Open_Sans_SemiBold_32Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFB, 0xEF, 0xBC, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x00, 0x07, 0x3E, 0xFB, 0xE7, 0x00, // '!' - 0xF3, 0xDE, 0x7B, 0xCF, 0x70, 0xEE, 0x1C, 0xC3, 0x18, 0x63, 0x0C, // '"' - 0x01, 0xC3, 0x00, 0x18, 0x70, 0x03, 0x87, 0x00, 0x38, 0x70, 0x03, 0x87, 0x00, 0x38, 0x60, 0x03, 0x86, 0x07, - 0xFF, 0xFE, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x07, 0x0E, 0x00, 0x70, 0xC0, 0x06, 0x1C, 0x00, 0xE1, 0xC0, 0xFF, - 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC3, 0x80, 0x1C, 0x38, 0x01, 0xC7, - 0x00, 0x18, 0x70, 0x00, // '#' - 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x7F, 0x03, 0xFF, 0xCF, 0xFF, 0x3E, 0xC6, 0x79, 0x80, 0xF3, 0x01, 0xE6, - 0x03, 0xEC, 0x03, 0xF8, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x01, 0xFE, 0x03, 0x3C, 0x06, 0x38, 0x0C, 0x70, - 0x19, 0xEE, 0x37, 0xDF, 0xFF, 0x3F, 0xFC, 0x1F, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x0C, 0x00, // '$' - 0x1F, 0x00, 0x38, 0x07, 0xF0, 0x0E, 0x01, 0xFF, 0x01, 0xC0, 0x38, 0xE0, 0x70, 0x07, 0x1C, 0x1C, 0x01, 0xC3, - 0x83, 0x80, 0x38, 0x38, 0xE0, 0x07, 0x07, 0x1C, 0x00, 0xE1, 0xC7, 0x00, 0x0E, 0x38, 0xE7, 0xC1, 0xC7, 0x39, - 0xFC, 0x3F, 0xEF, 0x7F, 0xC3, 0xF9, 0xCE, 0x38, 0x3E, 0x71, 0xC7, 0x00, 0x0E, 0x78, 0x70, 0x03, 0x8E, 0x0E, - 0x00, 0x71, 0xC1, 0xC0, 0x1C, 0x1C, 0x38, 0x03, 0x83, 0x8E, 0x00, 0xE0, 0x71, 0xC0, 0x38, 0x0F, 0xF8, 0x07, - 0x00, 0xFE, 0x01, 0xC0, 0x0F, 0x80, // '%' - 0x07, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xE0, 0x01, 0xE1, 0xE0, 0x03, 0x83, 0xC0, 0x07, 0x07, 0x80, 0x0E, - 0x0F, 0x00, 0x1E, 0x3C, 0x00, 0x1E, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x03, 0xC7, 0xFE, - 0x07, 0x1F, 0x3E, 0x1E, 0x3C, 0x3E, 0x3C, 0x78, 0x3E, 0xF0, 0xE0, 0x3F, 0xE1, 0xC0, 0x3F, 0x83, 0xC0, 0x3E, - 0x07, 0xC1, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0x9E, 0x03, 0xF8, 0x1E, 0x00, // '&' - 0xF7, 0xBD, 0xCE, 0x31, 0x8C, // ''' - 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0, 0x70, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, - 0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x83, 0xC0, 0xE0, 0x78, 0x1C, 0x0E, 0x03, 0x81, 0xE0, // '(' - 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0x81, 0xC1, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x00, // ')' - 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x30, 0x00, 0x18, 0x03, 0xCC, 0xF3, 0xFF, 0xFD, 0xFF, 0xFE, 0x03, - 0xC0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xCE, 0x01, 0xE7, 0x80, 0xE1, 0xC0, 0x10, 0xC0, // '*' - 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x03, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, - 0xFF, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, // '+' - 0x3C, 0xF1, 0xE3, 0xC7, 0x0E, 0x38, 0x70, // ',' - 0xFF, 0x7F, 0xBF, 0xC0, // '-' - 0x73, 0xEF, 0xBE, 0x70, // '.' - 0x00, 0xF0, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x38, 0x01, 0xC0, - 0x1E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0E, 0x00, 0xF0, 0x07, 0x80, 0x38, 0x03, - 0xC0, 0x00, // '/' - 0x07, 0xE0, 0x0F, 0xF8, 0x0F, 0xFE, 0x07, 0x87, 0x87, 0x81, 0xE3, 0xC0, 0xF1, 0xC0, 0x78, 0xE0, 0x1C, 0xF0, - 0x0E, 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x38, 0xE0, 0x1C, 0x70, 0x1E, - 0x3C, 0x0F, 0x1E, 0x07, 0x87, 0x87, 0x81, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '0' - 0x03, 0xC0, 0xF8, 0x3F, 0x0F, 0xE7, 0xFD, 0xF7, 0x9C, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, // '1' - 0x07, 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x0F, 0x07, 0x82, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, - 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // '2' - 0x0F, 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0x78, 0x3C, 0x20, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, - 0x00, 0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF8, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x1E, - 0x00, 0x1E, 0xE0, 0x3E, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, // '3' - 0x00, 0x38, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1D, 0xC0, 0x1E, 0xE0, 0x0E, 0x70, 0x0E, - 0x38, 0x0F, 0x1C, 0x07, 0x0E, 0x07, 0x07, 0x07, 0x83, 0x83, 0x81, 0xC3, 0x80, 0xE1, 0xFF, 0xFE, 0xFF, 0xFF, - 0x7F, 0xFF, 0x80, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, // '4' - 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xFF, - 0x83, 0xFF, 0xC7, 0xFF, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xF6, - 0x07, 0xCF, 0xFF, 0x9F, 0xFE, 0x0F, 0xE0, 0x00, // '5' - 0x01, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x71, - 0xF0, 0x3B, 0xFE, 0x1F, 0xFF, 0x1F, 0x87, 0xCF, 0x81, 0xE7, 0x80, 0x7B, 0xC0, 0x3C, 0xE0, 0x1E, 0x70, 0x0F, - 0x3C, 0x07, 0x9E, 0x07, 0x87, 0x87, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x1F, 0x80, // '6' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, - 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xC0, - 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, // '7' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xC7, 0x81, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x70, 0x38, 0x3E, - 0x7C, 0x0F, 0xF8, 0x01, 0xF8, 0x03, 0xFE, 0x03, 0xEF, 0xC3, 0xC1, 0xF1, 0xC0, 0x79, 0xE0, 0x1C, 0xF0, 0x0F, - 0x78, 0x07, 0x9C, 0x03, 0x8F, 0x07, 0xC7, 0xFF, 0xC0, 0xFF, 0xC0, 0x1F, 0x80, // '8' - 0x07, 0xC0, 0x0F, 0xF8, 0x0F, 0xFE, 0x0F, 0x87, 0x87, 0x81, 0xE3, 0x80, 0xF3, 0xC0, 0x39, 0xE0, 0x1C, 0xF0, - 0x0F, 0x78, 0x07, 0x9E, 0x07, 0xCF, 0x87, 0xE3, 0xFF, 0xE1, 0xFF, 0x70, 0x3E, 0x38, 0x00, 0x1C, 0x00, 0x1E, - 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x1F, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFE, 0x00, // '9' - 0x73, 0xEF, 0xBE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEF, 0xBE, 0x70, // ':' - 0x38, 0xF9, 0xF3, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x3C, 0x70, 0xE1, 0xC7, 0x0E, - 0x00, // ';' - 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3C, 0x00, 0x06, // '<' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0xFE, 0xFF, 0xFC, // '=' - 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x3F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, // '>' - 0x1F, 0xC0, 0xFF, 0xE1, 0xFF, 0xE3, 0x83, 0xE0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, - 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x78, 0x00, 0xF8, 0x01, 0xE0, 0x01, 0xC0, 0x00, // '?' - 0x00, 0x7F, 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xBF, 0x80, 0x3C, 0x00, 0xF0, 0x1E, 0x00, 0x1E, 0x0F, 0x00, - 0x03, 0xC3, 0x83, 0xF8, 0x71, 0xC1, 0xFF, 0x0E, 0x70, 0xFB, 0xC3, 0xB8, 0x70, 0x70, 0xEE, 0x3C, 0x1C, 0x3B, - 0x8E, 0x07, 0x0E, 0xE3, 0x81, 0xC3, 0xB8, 0xE0, 0x70, 0xEE, 0x38, 0x1C, 0x3B, 0x8E, 0x07, 0x0E, 0xE3, 0xC3, - 0xC7, 0x38, 0x7B, 0xFB, 0xCE, 0x0F, 0xE7, 0xE1, 0xC1, 0xF0, 0xF0, 0x78, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x01, - 0xE0, 0x02, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xE0, 0x00, // '@' - 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x77, 0x00, 0x01, 0xDC, 0x00, 0x0F, 0x78, 0x00, 0x3D, - 0xE0, 0x00, 0xE3, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x1C, 0x00, 0x70, 0x70, 0x03, 0xC1, 0xE0, 0x0E, 0x03, 0x80, - 0x7F, 0xFF, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x3C, 0x01, 0xE0, 0xF0, 0x07, 0x83, 0x80, 0x0E, 0x1E, 0x00, - 0x3C, 0x78, 0x00, 0xF1, 0xC0, 0x01, 0xCF, 0x00, 0x07, 0x80, // 'A' - 0xFF, 0xE0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E, 0x07, 0xCF, 0x01, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0xF0, - 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFF, 0x8F, 0x03, 0xE7, 0x80, 0x7B, 0xC0, 0x3D, 0xE0, 0x1E, 0xF0, 0x0F, - 0x78, 0x07, 0xBC, 0x03, 0xDE, 0x07, 0xEF, 0xFF, 0xE7, 0xFF, 0xE3, 0xFF, 0xC0, // 'B' - 0x01, 0xFC, 0x01, 0xFF, 0xE1, 0xFF, 0xF0, 0xFC, 0x1C, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, - 0x78, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x0C, 0x1F, 0xFF, 0x03, 0xFF, 0xC0, 0x3F, 0xE0, // 'C' - 0xFF, 0xE0, 0x1F, 0xFF, 0x03, 0xFF, 0xF8, 0x78, 0x1F, 0x8F, 0x00, 0xF1, 0xE0, 0x0F, 0x3C, 0x01, 0xE7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x07, 0x9E, 0x01, 0xF3, 0xC0, 0x7C, 0x78, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F, 0xF0, - 0x00, // 'D' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0xCF, - 0xFF, 0x3F, 0xFC, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'E' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0xFF, 0x3F, 0xFC, 0xFF, 0xF3, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x03, 0xC0, 0x0F, 0x00, 0x00, // 'F' - 0x00, 0xFF, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xC1, 0xF8, 0x18, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xFE, 0xF0, 0x3F, 0xEF, 0x03, 0xFE, 0xF0, - 0x01, 0xEF, 0x00, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x3C, 0x01, 0xE3, 0xF0, 0x1E, 0x1F, 0xFF, 0xE0, 0xFF, - 0xFE, 0x01, 0xFF, 0x00, // 'G' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, - 0xF0, // 'H' - 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xC0, // 'I' - 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, - 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x03, 0xCF, 0xF3, 0xF8, 0xF8, - 0x00, // 'J' - 0xF0, 0x0F, 0x3C, 0x07, 0xCF, 0x03, 0xE3, 0xC0, 0xF0, 0xF0, 0x78, 0x3C, 0x3C, 0x0F, 0x1E, 0x03, 0xCF, 0x80, - 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3E, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0xF8, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF8, // 'K' - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, - 0xFB, 0xFF, 0xEF, 0xFF, 0x80, // 'L' - 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x0F, 0xDF, 0xC0, 0x0F, 0xEE, 0xE0, 0x07, 0x77, 0x70, 0x03, - 0xFB, 0xBC, 0x03, 0xBD, 0xCE, 0x01, 0xDE, 0xE7, 0x00, 0xEF, 0x73, 0xC0, 0xE7, 0xB8, 0xE0, 0x73, 0xDC, 0x70, - 0x79, 0xEE, 0x3C, 0x38, 0xF7, 0x0E, 0x1C, 0x7B, 0x87, 0x1E, 0x3D, 0xC3, 0xCE, 0x1E, 0xE0, 0xE7, 0x0F, 0x70, - 0x7F, 0x07, 0xB8, 0x1F, 0x83, 0xDC, 0x0F, 0xC1, 0xEE, 0x07, 0xC0, 0xF7, 0x01, 0xE0, 0x7B, 0x80, 0xF0, 0x3C, // 'M' - 0xF8, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xEF, 0xE0, 0x0E, 0xFE, 0x00, 0xEE, 0xF0, 0x0E, 0xEF, 0x80, 0xEE, - 0x78, 0x0E, 0xE3, 0xC0, 0xEE, 0x3C, 0x0E, 0xE1, 0xE0, 0xEE, 0x1F, 0x0E, 0xE0, 0xF0, 0xEE, 0x07, 0x8E, 0xE0, - 0x78, 0xEE, 0x03, 0xCE, 0xE0, 0x3E, 0xEE, 0x01, 0xEE, 0xE0, 0x0F, 0xEE, 0x00, 0xFE, 0xE0, 0x07, 0xEE, 0x00, - 0x7E, 0xE0, 0x03, 0xE0, // 'N' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x00, // 'O' - 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xF0, 0x7E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x7C, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, // 'P' - 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC, 0x0F, 0xC1, 0xF8, 0x7C, 0x01, 0xE1, 0xE0, 0x03, 0xC7, 0x80, - 0x0F, 0x3C, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, - 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, 0x1E, 0x78, 0x00, 0xF1, 0xE0, 0x03, 0xC3, 0xC0, 0x1E, 0x0F, 0xC1, - 0xF8, 0x1F, 0xFF, 0xC0, 0x3F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x7C, // 'Q' - 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xC1, 0xF0, 0xF0, 0x3C, 0x3C, 0x07, 0x8F, 0x01, 0xE3, 0xC0, 0x78, - 0xF0, 0x1E, 0x3C, 0x0F, 0x0F, 0x07, 0xC3, 0xFF, 0xE0, 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0x1E, 0x03, 0xC3, 0xC0, - 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x03, 0xC3, 0xC0, 0xF8, 0xF0, 0x1E, 0x3C, 0x03, 0xCF, 0x00, 0xF0, // 'R' - 0x0F, 0xE0, 0x3F, 0xFC, 0x7F, 0xFC, 0xF8, 0x18, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, - 0x00, 0x3C, 0xE0, 0x7C, 0xFF, 0xF8, 0xFF, 0xF0, 0x3F, 0xC0, // 'S' - 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, - 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, // 'T' - 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0x80, - 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, - 0x80, 0x1E, 0xF0, 0x03, 0xDE, 0x00, 0x79, 0xE0, 0x1E, 0x3E, 0x07, 0xC3, 0xFF, 0xF0, 0x3F, 0xFC, 0x01, 0xFE, - 0x00, // 'U' - 0xF0, 0x00, 0xF3, 0x80, 0x07, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xC3, 0x80, 0x1C, 0x1E, 0x01, 0xE0, 0xF0, 0x0F, - 0x03, 0x80, 0x70, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x03, 0x81, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0xF0, 0x03, 0x87, - 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x03, 0x9C, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, - 0x80, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, // 'V' - 0xF0, 0x07, 0x80, 0x3C, 0xE0, 0x0F, 0x00, 0x71, 0xE0, 0x3E, 0x01, 0xE3, 0xC0, 0x7E, 0x03, 0xC7, 0x80, 0xFC, - 0x07, 0x87, 0x01, 0xF8, 0x0E, 0x0F, 0x07, 0xF8, 0x3C, 0x1E, 0x0E, 0x70, 0x78, 0x3C, 0x1C, 0xE0, 0xF0, 0x38, - 0x79, 0xC1, 0xC0, 0x78, 0xF3, 0xC7, 0x80, 0xF1, 0xC3, 0x8F, 0x01, 0xE3, 0x87, 0x1E, 0x01, 0xCF, 0x0F, 0x38, - 0x03, 0x9C, 0x1E, 0x70, 0x07, 0xB8, 0x1D, 0xE0, 0x0F, 0x70, 0x3B, 0xC0, 0x0E, 0xE0, 0x77, 0x00, 0x1F, 0x80, - 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0xF0, 0x03, 0xC0, 0x00, // 'W' - 0x78, 0x01, 0xE1, 0xE0, 0x1E, 0x0F, 0x00, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78, 0x07, 0x87, 0x80, 0x1E, 0x78, - 0x00, 0xF3, 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x01, 0xFE, - 0x00, 0x1E, 0xF0, 0x00, 0xF3, 0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x78, 0x07, 0x81, 0xE0, 0x78, 0x0F, 0x83, 0xC0, - 0x3C, 0x3C, 0x00, 0xF3, 0xC0, 0x07, 0xC0, // 'X' - 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x03, 0xC3, 0xC0, 0x78, 0x3C, 0x07, 0x81, 0xE0, 0xF0, 0x1E, 0x0E, 0x00, - 0xF1, 0xE0, 0x07, 0x1C, 0x00, 0x7B, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, - 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, - 0x00, 0x00, 0xE0, 0x00, // 'Y' - 0xFF, 0xFF, 0x7F, 0xFF, 0xBF, 0xFF, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, - 0x1E, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xF7, 0xFF, 0xFB, 0xFF, 0xFC, // 'Z' - 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, // '[' - 0xF0, 0x03, 0x80, 0x1E, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, - 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x70, - 0x03, 0xC0, // '\' - 0xFE, 0xFE, 0xFE, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, - 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xFE, 0xFE, 0xFE, // ']' - 0x01, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0x9C, 0x00, 0xE7, 0x00, 0x38, 0xE0, - 0x1C, 0x38, 0x07, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x38, 0x38, 0x0E, 0x1C, 0x01, 0xC7, 0x00, 0x70, // '^' - 0xFF, 0xFD, 0xFF, 0xF8, // '_' - 0xF0, 0x78, 0x3C, 0x1C, 0x0E, // '`' - 0x07, 0xF0, 0x3F, 0xFC, 0x1F, 0xFE, 0x1C, 0x1E, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x07, 0xFE, 0x3F, 0xFE, - 0x7C, 0x0E, 0x78, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x1F, 0x86, // 'a' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x1E, - 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x3C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, // 'b' - 0x07, 0xF0, 0x7F, 0xE7, 0xFF, 0x1F, 0x04, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0F, - 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xF0, 0x67, 0xFF, 0x8F, 0xFE, 0x0F, 0xE0, // 'c' - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x0F, 0x8E, 0x3F, 0xEE, - 0x7F, 0xFE, 0x7C, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'd' - 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xCF, 0x03, 0xDE, 0x03, 0xB8, 0x07, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, - 0xFB, 0x80, 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x81, 0x9F, 0xFF, 0x0F, 0xFE, 0x07, 0xF0, // 'e' - 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0xFC, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, - 0xF0, 0x07, 0x80, // 'f' - 0x07, 0xFF, 0x83, 0xFF, 0xE1, 0xE3, 0xF8, 0xF0, 0x78, 0x38, 0x0E, 0x0E, 0x03, 0x83, 0x80, 0xE0, 0xE0, 0x38, - 0x3C, 0x1E, 0x07, 0x8F, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, - 0x3F, 0xFF, 0x9E, 0x01, 0xE7, 0x00, 0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0x9E, 0x03, 0xE7, 0xFF, 0xF0, 0xFF, 0xF8, - 0x0F, 0xF0, 0x00, // 'g' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'h' - 0x73, 0xCF, 0x9C, 0x00, 0x00, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, // 'i' - 0x07, 0x03, 0xC0, 0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, - 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x3C, 0x0F, - 0x3F, 0xCF, 0xE3, 0xF0, // 'j' - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, - 0xE0, 0xF0, 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0xF3, 0xC0, - 0xE1, 0xE0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE0, 0x78, 0xE0, 0x7C, 0xE0, 0x3C, // 'k' - 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, // 'l' - 0xE3, 0xE0, 0x7C, 0x3B, 0xFE, 0x7F, 0xCF, 0xFF, 0xFF, 0xFB, 0xE1, 0xFC, 0x1E, 0xF0, 0x3E, 0x07, 0xBC, 0x07, - 0x80, 0xEF, 0x01, 0xE0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, - 0x80, 0x70, 0x0E, 0xE0, 0x1C, 0x03, 0xB8, 0x07, 0x00, 0xEE, 0x01, 0xC0, 0x3B, 0x80, 0x70, 0x0E, 0xE0, 0x1C, - 0x03, 0x80, // 'm' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x3C, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, - 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, 0xE0, 0x1E, // 'n' - 0x07, 0xE0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x87, 0xCF, 0x00, 0xF7, 0x80, 0x7B, 0xC0, 0x3D, 0xC0, 0x0E, 0xE0, - 0x07, 0x70, 0x03, 0xBC, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF3, 0xE1, 0xF0, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xE0, - 0x00, // 'o' - 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, 0xF8, 0x3C, 0xF0, 0x1E, 0xF0, 0x1E, 0xE0, 0x1E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xE0, 0x1E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF8, 0x7C, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, // 'p' - 0x0F, 0x8E, 0x3F, 0xEE, 0x7F, 0xFE, 0x78, 0x3E, 0xF0, 0x1E, 0xF0, 0x1E, 0xF0, 0x0E, 0xE0, 0x0E, 0xE0, 0x0E, - 0xE0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0xF0, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, 0x00, 0x0E, - 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, // 'q' - 0xE3, 0xDC, 0xFB, 0xBF, 0x7F, 0xAF, 0x81, 0xE0, 0x3C, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x00, // 'r' - 0x1F, 0xC1, 0xFF, 0xCF, 0xFF, 0x3C, 0x18, 0xE0, 0x03, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xE0, 0x1F, 0xC0, - 0x1F, 0x00, 0x1E, 0x00, 0x7B, 0x03, 0xCF, 0xFF, 0x3F, 0xF8, 0x7F, 0x80, // 's' - 0x1C, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x7F, 0xEF, 0xFE, 0xFF, 0xE3, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xE0, 0x1F, 0xE1, 0xFE, 0x07, 0xE0, // 't' - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x0E, - 0xF0, 0x0E, 0xF0, 0x0E, 0xF0, 0x1E, 0x78, 0x1E, 0x78, 0x3E, 0x7F, 0xFE, 0x3F, 0xEE, 0x0F, 0x8E, // 'u' - 0xF0, 0x07, 0x9C, 0x01, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x38, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x3D, 0xE0, 0x07, 0x70, 0x01, 0xDC, 0x00, 0x3E, 0x00, 0x0F, 0x80, - 0x03, 0xE0, 0x00, // 'v' - 0xF0, 0x1E, 0x03, 0xCE, 0x03, 0xC0, 0x71, 0xE0, 0xFC, 0x1E, 0x3C, 0x1F, 0x83, 0xC3, 0x83, 0xF0, 0x70, 0x70, - 0xE7, 0x1E, 0x0F, 0x1C, 0xE3, 0xC1, 0xE3, 0x9C, 0x78, 0x1C, 0x73, 0x8E, 0x03, 0x9C, 0x3B, 0xC0, 0x7B, 0x87, - 0x78, 0x07, 0x70, 0xEE, 0x00, 0xEC, 0x1D, 0xC0, 0x1F, 0x81, 0xF8, 0x03, 0xF0, 0x3F, 0x00, 0x3E, 0x07, 0xC0, - 0x07, 0x80, 0x78, 0x00, // 'w' - 0x78, 0x07, 0x87, 0x81, 0xE0, 0xF8, 0x7C, 0x0F, 0x0F, 0x00, 0xF3, 0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x1F, 0xE0, 0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x3C, 0x3C, 0x0F, 0x03, 0xC3, - 0xE0, 0x7C, 0x78, 0x07, 0x80, // 'x' - 0xF0, 0x07, 0x9E, 0x03, 0xC7, 0x80, 0xF1, 0xE0, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0xF0, - 0x1E, 0x3C, 0x03, 0x8E, 0x00, 0xF7, 0x80, 0x1D, 0xE0, 0x07, 0x70, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, - 0x7C, 0x00, 0x00, // 'y' - 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x3C, 0x01, - 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xE0, 0x0F, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // 'z' - 0x01, 0xC0, 0xF8, 0x3F, 0x07, 0x80, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x03, 0xE1, - 0xF8, 0x3C, 0x07, 0xE0, 0x3E, 0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF8, - 0x1F, 0x00, 0xE0, // '{' - 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, // '|' - 0xE0, 0x1F, 0x03, 0xF0, 0x1E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0x01, 0xF0, - 0x1F, 0x80, 0x70, 0x7E, 0x1F, 0x03, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x3C, 0x1F, 0x83, - 0xE0, 0x70, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_32Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 9, 0, 0}, // ' ' - {1, 6, 23, 10, 2, -23}, // '!' - {19, 11, 8, 15, 2, -23}, // '"' - {30, 20, 23, 22, 1, -23}, // '#' - {88, 15, 27, 19, 2, -25}, // '$' - {139, 27, 23, 29, 1, -23}, // '%' - {217, 23, 23, 25, 2, -23}, // '&' - {284, 5, 8, 9, 2, -23}, // ''' - {289, 9, 28, 11, 1, -23}, // '(' - {321, 9, 28, 11, 1, -23}, // ')' - {353, 17, 15, 19, 1, -24}, // '*' - {385, 17, 15, 19, 1, -19}, // '+' - {417, 7, 8, 10, 1, -4}, // ',' - {424, 9, 3, 11, 1, -10}, // '-' - {428, 6, 5, 10, 2, -5}, // '.' - {432, 13, 23, 13, 0, -23}, // '/' - {470, 17, 23, 19, 1, -23}, // '0' - {519, 11, 23, 19, 2, -23}, // '1' - {551, 17, 23, 19, 1, -23}, // '2' - {600, 16, 23, 19, 1, -23}, // '3' - {646, 17, 23, 19, 1, -23}, // '4' - {695, 15, 23, 19, 2, -23}, // '5' - {739, 17, 23, 19, 1, -23}, // '6' - {788, 17, 23, 19, 1, -23}, // '7' - {837, 17, 23, 19, 1, -23}, // '8' - {886, 17, 23, 19, 1, -23}, // '9' - {935, 6, 17, 10, 2, -17}, // ':' - {948, 7, 21, 10, 1, -17}, // ';' - {967, 17, 16, 19, 1, -20}, // '<' - {1001, 15, 9, 19, 2, -16}, // '=' - {1018, 17, 16, 19, 1, -20}, // '>' - {1052, 15, 23, 16, 0, -23}, // '?' - {1096, 26, 26, 30, 2, -23}, // '@' - {1181, 22, 23, 22, 0, -23}, // 'A' - {1245, 17, 23, 22, 3, -23}, // 'B' - {1294, 18, 23, 21, 2, -23}, // 'C' - {1346, 19, 23, 24, 3, -23}, // 'D' - {1401, 14, 23, 19, 3, -23}, // 'E' - {1442, 14, 23, 18, 3, -23}, // 'F' - {1483, 20, 23, 24, 2, -23}, // 'G' - {1541, 19, 23, 25, 3, -23}, // 'H' - {1596, 5, 23, 11, 3, -23}, // 'I' - {1611, 10, 29, 11, -2, -23}, // 'J' - {1648, 18, 23, 21, 3, -23}, // 'K' - {1700, 14, 23, 18, 3, -23}, // 'L' - {1741, 25, 23, 31, 3, -23}, // 'M' - {1813, 20, 23, 26, 3, -23}, // 'N' - {1871, 22, 23, 26, 2, -23}, // 'O' - {1935, 16, 23, 21, 3, -23}, // 'P' - {1981, 22, 28, 26, 2, -23}, // 'Q' - {2058, 18, 23, 21, 3, -23}, // 'R' - {2110, 16, 23, 19, 2, -23}, // 'S' - {2156, 19, 23, 19, 0, -23}, // 'T' - {2211, 19, 23, 25, 3, -23}, // 'U' - {2266, 21, 23, 21, 0, -23}, // 'V' - {2327, 31, 23, 31, 0, -23}, // 'W' - {2417, 21, 23, 21, 0, -23}, // 'X' - {2478, 20, 23, 20, 0, -23}, // 'Y' - {2536, 17, 23, 19, 1, -23}, // 'Z' - {2585, 8, 28, 12, 3, -23}, // '[' - {2613, 13, 23, 13, 0, -23}, // '\' - {2651, 8, 28, 12, 1, -23}, // ']' - {2679, 18, 15, 18, 0, -23}, // '^' - {2713, 15, 2, 15, 0, 3}, // '_' - {2717, 8, 5, 20, 6, -24}, // '`' - {2722, 16, 17, 20, 1, -17}, // 'a' - {2756, 16, 24, 21, 3, -24}, // 'b' - {2804, 14, 17, 17, 2, -17}, // 'c' - {2834, 16, 24, 21, 2, -24}, // 'd' - {2882, 15, 17, 19, 2, -17}, // 'e' - {2914, 13, 24, 13, 1, -24}, // 'f' - {2953, 18, 25, 19, 0, -17}, // 'g' - {3010, 16, 24, 21, 3, -24}, // 'h' - {3058, 6, 24, 10, 2, -24}, // 'i' - {3076, 10, 32, 10, -2, -24}, // 'j' - {3116, 16, 24, 19, 3, -24}, // 'k' - {3164, 4, 24, 10, 3, -24}, // 'l' - {3176, 26, 17, 32, 3, -17}, // 'm' - {3232, 16, 17, 21, 3, -17}, // 'n' - {3266, 17, 17, 21, 2, -17}, // 'o' - {3303, 16, 25, 21, 3, -17}, // 'p' - {3353, 16, 25, 21, 2, -17}, // 'q' - {3403, 11, 17, 15, 3, -17}, // 'r' - {3427, 14, 17, 17, 2, -17}, // 's' - {3457, 12, 21, 14, 1, -21}, // 't' - {3489, 16, 17, 21, 2, -17}, // 'u' - {3523, 18, 17, 18, 0, -17}, // 'v' - {3562, 27, 17, 27, 0, -17}, // 'w' - {3620, 19, 17, 19, 0, -17}, // 'x' - {3661, 18, 25, 18, 0, -17}, // 'y' - {3718, 14, 17, 16, 1, -17}, // 'z' - {3748, 11, 28, 13, 1, -23}, // '{' - {3787, 3, 32, 19, 8, -24}, // '|' - {3799, 11, 28, 13, 1, -23} // '}' -}; -const GFXfont Open_Sans_SemiBold_32 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_32Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_32Glyphs, 0x20, 0x7E, 45}; \ No newline at end of file diff --git a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h b/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h deleted file mode 100644 index 93d1d062a..000000000 --- a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Fonts/Open_Sans_SemiBold_56.h +++ /dev/null @@ -1,798 +0,0 @@ -// 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 Open_Sans_SemiBold_56Bitmaps[] PROGMEM = { - - // Bitmap Data: - 0x00, // ' ' - 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x3F, 0x9F, 0xCF, 0xF7, 0xFB, 0xF9, 0xFC, 0x7C, 0x00, // '!' - 0xFC, 0x3F, 0x7E, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, 0xF0, 0x3E, 0xF8, - 0x1F, 0x7C, 0x0F, 0xBE, 0x07, 0xDF, 0x03, 0xE7, 0x81, 0xE3, 0xC0, 0xF0, // '"' - 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x78, 0x00, - 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x1F, 0x01, 0xE0, 0x00, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x1F, 0x01, 0xF0, 0x03, 0xFF, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x00, 0x07, 0xC0, - 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x7C, 0x0F, 0x80, 0x00, 0x0F, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x3E, 0x00, - 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0xF0, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x00, 0x3C, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0xF8, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x3E, 0x03, 0xC0, 0x00, // '#' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0x78, - 0xFC, 0x3F, 0x8F, 0x01, 0x8F, 0xE1, 0xE0, 0x01, 0xFC, 0x3C, 0x00, 0x3F, 0x87, 0x80, 0x07, 0xF0, 0xF0, 0x00, - 0x7F, 0x1E, 0x00, 0x0F, 0xF3, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x1F, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0x3C, 0x3F, 0x80, 0x07, 0x83, 0xF0, 0x00, 0xF0, 0x7E, - 0x80, 0x1E, 0x1F, 0xDC, 0x03, 0xC7, 0xFB, 0xF8, 0x7B, 0xFE, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, // '$' - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x00, 0x7F, - 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x0F, 0xC0, 0x07, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0x7E, 0x00, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x00, 0x7C, 0x0F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x7E, 0x01, - 0xF0, 0x00, 0x3F, 0x03, 0xF0, 0x1F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0xF8, 0x00, 0x0F, 0xC0, 0xFC, 0x0F, 0x80, - 0x00, 0x7E, 0x07, 0xE0, 0xFC, 0x00, 0x03, 0xF0, 0x3F, 0x07, 0xC0, 0x00, 0x1F, 0x81, 0xF8, 0x7E, 0x00, 0x00, - 0xFC, 0x0F, 0xC3, 0xE0, 0xFC, 0x03, 0xE0, 0x7C, 0x3F, 0x1F, 0xF8, 0x1F, 0x03, 0xE1, 0xF1, 0xFF, 0xE0, 0xF8, - 0x1F, 0x1F, 0x1F, 0xFF, 0x07, 0xE1, 0xF8, 0xF8, 0xFF, 0xFC, 0x1F, 0xFF, 0x8F, 0x8F, 0xC3, 0xE0, 0xFF, 0xFC, - 0xFC, 0x7C, 0x1F, 0x83, 0xFF, 0xC7, 0xC3, 0xE0, 0x7C, 0x0F, 0xFC, 0x7E, 0x3F, 0x03, 0xE0, 0x1F, 0x83, 0xE1, - 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0xFC, 0x00, 0x01, 0xF0, 0x7E, 0x07, 0xE0, 0x00, 0x1F, 0x83, 0xF0, - 0x3F, 0x00, 0x00, 0xF8, 0x1F, 0x81, 0xF8, 0x00, 0x0F, 0x80, 0xFC, 0x0F, 0xC0, 0x00, 0x7C, 0x07, 0xE0, 0x7E, - 0x00, 0x07, 0xC0, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0xF8, 0x00, - 0x3F, 0x00, 0x3E, 0x0F, 0xC0, 0x01, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xE0, 0x00, 0xF8, - 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, // '%' - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, - 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x7F, 0x00, - 0x00, 0x03, 0xFB, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x01, 0xFF, 0xF8, 0x00, 0xFC, 0x07, - 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xE7, 0xF8, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x0F, 0xE0, 0xFE, 0x07, 0xF8, 0x3F, - 0x83, 0xF8, 0x07, 0xF8, 0x7F, 0x07, 0xF0, 0x07, 0xF9, 0xFC, 0x0F, 0xE0, 0x07, 0xFB, 0xF8, 0x1F, 0x80, 0x07, - 0xFF, 0xE0, 0x3F, 0x00, 0x07, 0xFF, 0xC0, 0x7F, 0x00, 0x07, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x01, 0xFE, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x07, 0xFF, 0xFF, 0xF7, 0xF8, 0x07, 0xFF, 0xFF, 0xC7, 0xF8, 0x07, 0xFF, 0xFE, 0x07, 0xF8, 0x07, 0xFF, 0xF0, - 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, // '&' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7C, 0xF9, 0xF1, 0xE3, 0xC7, 0x8F, 0x00, // ''' - 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xFC, - 0x00, 0xFC, // '(' - 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, - 0xC0, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3F, 0x00, - 0xFC, 0x00, // ')' - 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x70, 0x1F, 0x01, 0xC7, 0xF1, 0xF1, 0xFC, 0x7F, - 0xFE, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x07, 0xF1, - 0xFC, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, 0x03, 0xC0, 0x78, 0x00, 0x08, 0x02, - 0x00, // '*' - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x78, - 0x00, 0x00, // '+' - 0x3F, 0x8F, 0xE3, 0xF8, 0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x07, 0xC3, 0xF0, 0xF8, 0x3E, 0x00, // ',' - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0xC0, // '-' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // '.' - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, // '/' - 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF8, 0x7F, 0x80, 0x7F, 0x00, 0xFE, 0x07, 0xF0, 0x03, 0xF0, 0x3F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0x7E, - 0x1F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0x7E, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x3F, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x3F, 0x87, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xE0, 0x07, - 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x0F, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, // '0' - 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x81, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0x7E, - 0x7F, 0x9F, 0xBF, 0xC7, 0xE7, 0xE1, 0xF8, 0xF0, 0x7E, 0x10, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, // '1' - 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, - 0x3F, 0xE0, 0x7F, 0xC0, 0xFC, 0x00, 0xFE, 0x03, 0x80, 0x03, 0xF8, 0x08, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, // '2' - 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x03, - 0xF8, 0x0F, 0xF8, 0x3E, 0x00, 0x3F, 0x81, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x80, 0x00, 0x1F, 0xCE, 0x00, 0x03, 0xFC, - 0xFE, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x00, - 0x3F, 0xF8, 0x00, // '3' - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x1F, 0x7F, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x03, 0xE3, 0xF8, 0x00, 0x0F, 0xC7, 0xF0, - 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x7C, 0x1F, 0xC0, 0x01, 0xF8, 0x3F, 0x80, 0x07, 0xE0, 0x7F, 0x00, 0x0F, 0x80, - 0xFE, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0xC0, 0x7E, 0x00, 0x3F, 0x80, 0xF8, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, // '4' - 0x1F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF7, 0xFC, 0x00, - 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x81, 0xC0, 0x3F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x03, 0xFC, 0x7E, 0x01, 0xFF, 0x8F, 0xFF, 0xFF, 0xE1, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, // '5' - 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, - 0x7F, 0xE0, 0x10, 0x0F, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0xFC, 0x7F, 0xF8, 0x0F, 0xCF, 0xFF, 0xE0, 0xFD, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x8F, 0xF8, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xF8, 0x03, 0xF8, - 0x1F, 0xE0, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, // '6' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, // '7' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x3F, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x7E, - 0x0F, 0xC0, 0x03, 0xF0, 0x7E, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0xC0, 0x0F, 0xE0, 0x7F, 0x00, 0xFE, - 0x03, 0xFC, 0x0F, 0xE0, 0x0F, 0xF9, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, 0x3F, 0xC0, 0x7F, - 0x81, 0xFC, 0x00, 0xFE, 0x1F, 0xC0, 0x03, 0xF8, 0xFC, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x1F, 0xC0, 0x03, - 0xF8, 0xFF, 0x00, 0x3F, 0xC3, 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xC0, 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00, // '8' - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xF0, 0x7F, 0x80, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x03, 0xF0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7E, - 0x1F, 0x80, 0x03, 0xF9, 0xFC, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x7E, 0x7F, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0xFC, 0xFE, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, 0x9F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x3F, - 0xE7, 0xF8, 0x03, 0xFE, 0x1F, 0xF0, 0x7F, 0xF0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0xFC, 0x0F, 0xFF, 0xE7, - 0xE0, 0x1F, 0xFE, 0x3F, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x01, 0x00, 0x7F, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x03, 0xFF, 0xFC, - 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x00, // '9' - 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F, 0x3F, 0x9F, 0xEF, 0xF7, 0xF3, 0xF8, 0xF8, // ':' - 0x1F, 0x07, 0xF0, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF0, 0x7E, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x7E, 0x0F, 0x81, 0xF0, 0x00, // ';' - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x20, // '<' - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, // '=' - 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x40, 0x00, 0x00, 0x00, // '>' - 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC1, 0xF8, 0x0F, - 0xF0, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, // '?' - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x87, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x3F, 0xE0, 0x0F, 0x81, 0xF0, 0x07, 0xFF, 0xF0, - 0x3E, 0x1F, 0x00, 0xFF, 0xFF, 0x81, 0xF0, 0xF8, 0x0F, 0xFF, 0xFC, 0x0F, 0x8F, 0x80, 0xFF, 0x07, 0xE0, 0x3E, - 0x7C, 0x07, 0xE0, 0x1F, 0x01, 0xF3, 0xE0, 0x7E, 0x00, 0xF8, 0x0F, 0x9F, 0x03, 0xE0, 0x07, 0xC0, 0x7D, 0xF0, - 0x3F, 0x00, 0x3E, 0x03, 0xEF, 0x81, 0xF0, 0x01, 0xF0, 0x1F, 0x7C, 0x0F, 0x80, 0x0F, 0x80, 0xFB, 0xE0, 0x7C, - 0x00, 0x7C, 0x07, 0xDF, 0x03, 0xE0, 0x07, 0xE0, 0x3E, 0xF8, 0x1F, 0x00, 0x3F, 0x01, 0xE7, 0xC0, 0xF8, 0x01, - 0xF8, 0x1F, 0x3E, 0x07, 0xC0, 0x0F, 0xC0, 0xF9, 0xF0, 0x3F, 0x00, 0xFE, 0x07, 0xCF, 0x80, 0xF8, 0x0F, 0xF0, - 0x7C, 0x7C, 0x07, 0xF0, 0xFF, 0xC7, 0xE1, 0xF0, 0x1F, 0xFF, 0x9F, 0xFE, 0x0F, 0x80, 0x7F, 0xFC, 0xFF, 0xE0, - 0x7E, 0x01, 0xFF, 0x83, 0xFE, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x01, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xE0, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, // '@' - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, - 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, // 'A' - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x7F, 0x3F, 0x80, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, - 0x00, 0xFE, 0x3F, 0x80, 0x07, 0xF0, 0xFE, 0x00, 0x7F, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x03, 0xFC, - 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, // 'B' - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0x00, 0xFC, 0x0F, 0xF8, 0x00, 0x18, 0x1F, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x04, 0x0F, 0xFF, 0x00, 0x7C, - 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0x80, // 'C' - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x3F, 0xE0, 0xFE, 0x00, - 0x07, 0xFC, 0x3F, 0x80, 0x00, 0xFF, 0x8F, 0xE0, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, - 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, - 0x7F, 0x8F, 0xE0, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0x1F, 0xF0, 0xFE, 0x00, 0x1F, 0xF8, 0x3F, 0x80, 0x3F, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, // 'D' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'E' - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, // 'F' - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x0F, 0xC0, 0x7F, 0xE0, 0x00, 0x30, 0x0F, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xFF, 0xEF, 0xE0, 0x01, - 0xFF, 0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0xBF, 0x80, 0x07, 0xFF, 0xF7, 0xF0, 0x00, 0xFF, 0xFE, 0x7E, 0x00, 0x1F, - 0xFF, 0xCF, 0xE0, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x01, - 0xFC, 0xFF, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0xFE, 0x1F, 0xE0, 0x00, 0x1F, - 0xC3, 0xFE, 0x00, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0x80, 0x1F, 0xE0, 0x7F, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFC, 0x00, // 'G' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, - 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, - 0x00, 0x00, 0xFE, // 'H' - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, - 0xFE, 0xFE, 0xFE, 0xFE, // 'I' - 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x3F, 0x80, 0x1F, 0xC0, 0x3F, 0xE7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xC0, - 0x00, // 'J' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x0F, 0xF0, 0xFE, 0x00, - 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFE, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xDF, - 0xE0, 0x00, 0xFF, 0x8F, 0xF0, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xF8, 0x00, 0xFE, 0x03, 0xFC, 0x00, - 0xFE, 0x01, 0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x3F, 0xC0, 0xFE, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x0F, 0xF0, - 0xFE, 0x00, 0x07, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x01, 0xFE, // 'K' - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'L' - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x7F, 0xF0, - 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xBF, 0xFC, 0x00, 0x00, - 0xFF, 0xF7, 0xFF, 0x80, 0x00, 0x1F, 0x7E, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xDF, 0xBF, 0x00, 0x00, 0xFD, 0xFB, - 0xF7, 0xE0, 0x00, 0x1F, 0x3F, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xEF, 0xCF, 0xC0, 0x00, 0xF8, 0xFD, 0xF9, 0xF8, - 0x00, 0x1F, 0x1F, 0xBF, 0x1F, 0x80, 0x07, 0xE7, 0xF7, 0xE3, 0xF0, 0x00, 0xF8, 0xFE, 0xFC, 0x7E, 0x00, 0x3F, - 0x1F, 0xDF, 0x87, 0xE0, 0x07, 0xE3, 0xFB, 0xF0, 0xFC, 0x00, 0xF8, 0x7F, 0x7E, 0x0F, 0x80, 0x3F, 0x0F, 0xEF, - 0xC1, 0xF8, 0x07, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0xBF, 0x03, 0xE0, 0x3F, 0x07, 0xF7, 0xE0, 0x7E, - 0x07, 0xC0, 0xFE, 0xFC, 0x0F, 0xC0, 0xF8, 0x1F, 0xDF, 0x80, 0xFC, 0x3F, 0x03, 0xFB, 0xF0, 0x1F, 0x87, 0xC0, - 0x7F, 0x7E, 0x03, 0xF1, 0xF8, 0x0F, 0xEF, 0xC0, 0x3F, 0x3F, 0x01, 0xFD, 0xF8, 0x07, 0xE7, 0xC0, 0x3F, 0xBF, - 0x00, 0xFD, 0xF8, 0x07, 0xF7, 0xE0, 0x0F, 0xFF, 0x00, 0xFE, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, - 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x7E, 0x00, 0x7F, 0xC0, 0x0F, 0xEF, 0xC0, 0x0F, 0xF8, 0x01, - 0xFD, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xBF, 0x00, 0x1F, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0xFE, // 'M' - 0xFF, 0x80, 0x00, 0x0F, 0xDF, 0xF0, 0x00, 0x01, 0xFB, 0xFF, 0x00, 0x00, 0x3F, 0x7F, 0xE0, 0x00, 0x07, 0xEF, - 0xFE, 0x00, 0x00, 0xFD, 0xFF, 0xE0, 0x00, 0x1F, 0xBF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xC0, 0x00, 0x7E, 0xFF, - 0xFC, 0x00, 0x0F, 0xDF, 0xBF, 0x80, 0x01, 0xFB, 0xF7, 0xF8, 0x00, 0x3F, 0x7E, 0x7F, 0x00, 0x07, 0xEF, 0xC7, - 0xF0, 0x00, 0xFD, 0xF8, 0xFF, 0x00, 0x1F, 0xBF, 0x0F, 0xE0, 0x03, 0xF7, 0xE1, 0xFE, 0x00, 0x7E, 0xFC, 0x1F, - 0xC0, 0x0F, 0xDF, 0x81, 0xFC, 0x01, 0xFB, 0xF0, 0x3F, 0xC0, 0x3F, 0x7E, 0x03, 0xF8, 0x07, 0xEF, 0xC0, 0x3F, - 0x80, 0xFD, 0xF8, 0x07, 0xF8, 0x1F, 0xBF, 0x00, 0x7F, 0x03, 0xF7, 0xE0, 0x0F, 0xF0, 0x7E, 0xFC, 0x00, 0xFE, - 0x0F, 0xDF, 0x80, 0x0F, 0xE1, 0xFB, 0xF0, 0x01, 0xFE, 0x3F, 0x7E, 0x00, 0x1F, 0xC7, 0xEF, 0xC0, 0x01, 0xFC, - 0xFD, 0xF8, 0x00, 0x3F, 0xDF, 0xBF, 0x00, 0x03, 0xFB, 0xF7, 0xE0, 0x00, 0x7F, 0xFE, 0xFC, 0x00, 0x07, 0xFF, - 0xDF, 0x80, 0x00, 0x7F, 0xFB, 0xF0, 0x00, 0x0F, 0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xEF, 0xC0, 0x00, 0x0F, 0xFD, - 0xF8, 0x00, 0x01, 0xFF, 0xBF, 0x00, 0x00, 0x1F, 0xF7, 0xE0, 0x00, 0x03, 0xFE, // 'N' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, // 'O' - 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0x80, 0x7F, 0xE7, 0xF0, 0x03, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x7F, 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x00, 0xFE, - 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x07, 0xFB, 0xF8, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xE0, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, // 'P' - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, - 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x00, 0x3F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x07, - 0xF1, 0xFC, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, - 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x3F, - 0xC0, 0x00, 0x3F, 0xC0, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xC0, // 'Q' - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x3F, 0xF0, 0x7F, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x1F, 0xE1, 0xFC, - 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x7F, 0x03, 0xF8, 0x03, - 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x1F, 0xC0, 0xFE, 0x00, - 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, // 'R' - 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFE, 0x1F, 0xF0, 0x1F, 0x83, 0xF8, 0x00, 0x30, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF3, 0x80, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, // 'S' - 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, // 'T' - 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, - 0xFB, 0xF8, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x01, 0xFE, 0x0F, 0xFC, 0x03, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, // 'U' - 0xFE, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x01, 0xFC, - 0x3F, 0x00, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x03, 0xF0, - 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, 0xE0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, - 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, // 'V' - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x3F, 0xC0, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0x0F, 0xF8, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x1F, 0x80, 0x07, 0xDF, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0xFD, 0xF8, - 0x01, 0xFC, 0x07, 0xF0, 0x03, 0xF7, 0xE0, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x3E, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xF8, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x07, 0xE3, 0xF0, 0x0F, 0xE0, - 0x07, 0xE0, 0x1F, 0x0F, 0xC0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x1F, 0x80, 0xFC, 0x00, 0x7F, 0x03, 0xF0, 0x7E, - 0x07, 0xF0, 0x01, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0xC0, 0x03, 0xF0, 0x7E, 0x03, 0xE0, 0x7E, 0x00, 0x0F, 0xC1, - 0xF8, 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x87, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0xFC, 0x3F, 0x80, - 0x01, 0xF8, 0xFC, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xC0, 0x1F, - 0x9F, 0xC0, 0x00, 0x3F, 0x3E, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0xF9, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x03, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, // 'W' - 0x7F, 0x80, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x3F, 0x80, - 0x03, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x03, 0xF8, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x3F, 0x80, - 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x3F, 0x80, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x00, 0x01, 0xFE, // 'X' - 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x0F, 0xE0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x00, - 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, // 'Y' - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFE, // 'Z' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // '[' - 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, // '\' - 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, - 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, - 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, - 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, - 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF8, // ']' - 0x00, 0x1E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x0F, 0x8F, 0x80, - 0x00, 0x7C, 0x7C, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x01, 0xE0, 0x3E, 0x00, 0x1F, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x07, 0xC0, 0x07, 0xC0, 0x3E, 0x00, 0x1F, - 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x03, - 0xE7, 0xC0, 0x00, 0x0F, 0x80, // '^' - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, // '_' - 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, // '`' - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x0F, - 0x80, 0xFF, 0x01, 0x80, 0x0F, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xC7, 0xFF, 0x03, 0xF9, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x0F, 0xE7, 0xF0, 0x01, 0xFD, 0xFC, - 0x00, 0x3F, 0xBF, 0x80, 0x07, 0xF7, 0xF0, 0x01, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF9, 0xFE, 0x07, - 0xFF, 0x3F, 0xFF, 0xF7, 0xE3, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0x0F, 0x83, 0xFF, 0xC1, 0xF0, 0x1F, 0xE0, 0x00, // 'a' - 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, 0x0F, 0xE0, 0x0F, 0xC7, 0xFF, 0x80, 0xFC, 0xFF, 0xFC, 0x0F, 0xDF, - 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x01, 0xFC, - 0xFF, 0x00, 0x1F, 0xCF, 0xF8, 0x03, 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xF9, 0xFF, 0xFE, 0x0F, - 0x8F, 0xFF, 0xC0, 0xF8, 0x7F, 0xF8, 0x00, 0x01, 0xFE, 0x00, // 'b' - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x1F, 0xE0, 0x3C, - 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x04, 0x3F, 0xE0, 0x3C, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xE0, // 'c' - 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, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7E, 0x07, 0xFF, 0xE7, 0xE0, 0xFF, - 0xFF, 0x7E, 0x1F, 0xFF, 0xFF, 0xE3, 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x07, - 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, - 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF3, 0xE0, - 0x7F, 0xFE, 0x3E, 0x03, 0xFF, 0xC3, 0xE0, 0x0F, 0xE0, 0x00, // 'd' - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, - 0xC1, 0xFE, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, - 0x3F, 0x7F, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x30, 0x7F, 0xC0, - 0x3E, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0x80, // 'e' - 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0x02, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x80, 0x1F, 0x80, - 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, // 'f' - 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFE, 0x1F, 0xE0, 0xFF, - 0xE0, 0x7F, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x03, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x00, 0x1F, 0x80, 0xFE, 0x00, 0x7E, 0x01, 0xFC, - 0x03, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC3, 0xF8, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, - 0x07, 0xEF, 0x80, 0x00, 0x1F, 0xBE, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0xFE, 0x1F, 0xE0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, // 'g' - 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, 0x0F, 0xF0, 0x0F, 0xC7, 0xFF, 0xC0, 0xFC, 0xFF, 0xFE, 0x0F, 0xDF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, - 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xE0, // 'h' - 0x3C, 0x3F, 0x3F, 0x9F, 0xEF, 0xE3, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x00, // 'i' - 0x00, 0x78, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x01, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF0, 0xFF, 0xE0, - 0xFF, 0x00, // 'j' - 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, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, - 0x0F, 0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x07, 0xF8, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x1F, - 0xE0, 0x0F, 0xC1, 0xFC, 0x00, 0xFC, 0x3F, 0x80, 0x0F, 0xC7, 0xF0, 0x00, 0xFC, 0xFE, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xBF, 0x80, - 0x0F, 0xE1, 0xFC, 0x00, 0xFC, 0x1F, 0xE0, 0x0F, 0xC0, 0xFF, 0x00, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F, 0x80, - 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC, 0x00, 0xFE, 0x0F, 0xC0, 0x07, 0xF0, 0xFC, 0x00, 0x7F, 0x8F, - 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x1F, 0xC0, // 'k' - 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, - 0xFB, 0xF0, // 'l' - 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x03, 0xE1, 0xFF, 0xE0, 0x3F, 0xFE, 0x0F, 0x8F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, - 0x7F, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xE3, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xCF, 0xF8, - 0x07, 0xFF, 0x00, 0x7F, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, 0xC0, 0x03, 0xF3, 0xF8, 0x00, - 0x7F, 0x00, 0x0F, 0xEF, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, - 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, - 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, - 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0xBF, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0xFC, - 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, // 'm' - 0x00, 0x0F, 0xF0, 0x0F, 0x87, 0xFF, 0xC0, 0xF8, 0xFF, 0xFE, 0x0F, 0x9F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFE, 0x07, 0xFC, 0xFF, 0x80, 0x3F, 0xCF, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, - 0xE0, // 'n' - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF8, - 0x0F, 0xF0, 0x3F, 0xC0, 0xFE, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xF8, 0x7F, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x3F, - 0x3F, 0x80, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x7F, 0x7E, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x7F, 0x7F, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x8F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x1F, - 0xE1, 0xFC, 0x00, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, // 'o' - 0x00, 0x0F, 0xE0, 0x0F, 0x87, 0xFF, 0x80, 0xF8, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFC, 0x0F, 0xF8, 0xFF, 0x80, 0x3F, 0x8F, 0xF0, 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0xFC, 0xFC, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0xFE, 0xFC, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x3F, 0xCF, 0xF8, 0x03, - 0xF8, 0xFF, 0xE0, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFD, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xC0, 0xFC, 0x7F, 0xF8, - 0x0F, 0xC1, 0xFE, 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, // 'p' - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x07, 0xFF, 0xE3, 0xE0, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xFF, 0xE3, - 0xFE, 0x0F, 0xFE, 0x3F, 0x80, 0x3F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFE, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, - 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x00, 0x1F, 0xE3, 0xF8, 0x01, - 0xFE, 0x3F, 0xE0, 0x7F, 0xE1, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xF7, 0xE0, 0x7F, 0xFE, 0x7E, 0x03, 0xFF, 0xC7, - 0xE0, 0x0F, 0xF0, 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, // 'q' - 0x00, 0x0F, 0xDF, 0x07, 0xFB, 0xE3, 0xFF, 0x7C, 0xFF, 0xEF, 0x9F, 0xFD, 0xF7, 0xFF, 0x3F, 0xF8, 0x07, 0xFC, - 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x00, // 'r' - 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xE0, 0x3E, 0x3F, - 0x00, 0x08, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFD, - 0x80, 0x03, 0xF3, 0xE0, 0x1F, 0xE7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x07, - 0xFE, 0x00, // 's' - 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x03, 0xFF, 0xFC, 0x7F, 0xFF, 0xE7, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, - 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x10, 0x3F, 0xFF, 0x80, - 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x1F, 0xE0, // 't' - 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, - 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x7E, 0xFE, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xE7, 0xF0, 0x01, 0xFE, 0x7F, 0x80, 0x3F, 0xE7, 0xFC, 0x0F, - 0xFE, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x3E, 0x1F, 0xFF, 0xE3, 0xE0, 0x7F, 0xFC, 0x3E, 0x01, 0xFE, 0x00, - 0x00, // 'u' - 0xFE, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF0, 0x00, - 0x3F, 0x07, 0xF0, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7E, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0x7E, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, // 'v' - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xFE, 0x00, 0x1F, 0xBF, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0xFC, - 0x00, 0xFF, 0xC0, 0x0F, 0xC7, 0xE0, 0x07, 0xFE, 0x00, 0x7E, 0x3F, 0x80, 0x3F, 0xF0, 0x07, 0xF1, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0x87, 0xE0, 0x1F, 0x7E, 0x01, 0xF8, 0x3F, 0x00, 0xF9, 0xF0, 0x0F, 0xC1, 0xFC, 0x07, 0xCF, - 0x80, 0xFE, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x3F, 0x03, 0xE3, 0xF0, 0x3F, 0x01, 0xF8, 0x1F, 0x0F, 0x81, - 0xF8, 0x0F, 0xE0, 0xF8, 0x7C, 0x1F, 0xC0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x01, 0xF8, 0x7C, 0x1F, 0x87, 0xE0, - 0x0F, 0xC3, 0xE0, 0x7C, 0x3F, 0x00, 0x3F, 0x3F, 0x03, 0xF3, 0xF0, 0x01, 0xF9, 0xF8, 0x1F, 0x9F, 0x80, 0x0F, - 0xCF, 0x80, 0x7C, 0xFC, 0x00, 0x7E, 0x7C, 0x03, 0xE7, 0xE0, 0x01, 0xF7, 0xE0, 0x1F, 0x7E, 0x00, 0x0F, 0xFE, - 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0xFF, 0xC0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, // 'w' - 0x7F, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x3F, 0xC3, 0xF8, 0x00, 0xFE, 0x07, 0xF0, 0x07, 0xF0, 0x1F, 0xC0, 0x3F, - 0xC0, 0x3F, 0x80, 0xFE, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0xC0, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x7F, 0x7F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x7F, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xE0, - 0x0F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0xFE, 0x1F, 0xE0, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x0F, 0xE0, // 'x' - 0xFE, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x1F, - 0x80, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x7F, 0x01, 0xF8, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xF1, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, // 'y' - 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, // 'z' - 0x00, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, - 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x07, 0xFC, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, 0x01, 0xFE, - 0x00, 0x01, 0xF0, // '{' - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, - 0xFB, 0xEF, 0xBE, 0xFB, 0xEF, 0xBE, // '|' - 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0xFF, 0xE0, 0x1F, 0xF0, 0x03, 0xF8, - 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x01, - 0xFE, 0x00, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xF8, 0x00, 0x00 // '}' -}; -const GFXglyph Open_Sans_SemiBold_56Glyphs[] PROGMEM = { - // bitmapOffset, width, height, xAdvance, xOffset, yOffset - {0, 1, 1, 16, 0, 0}, // ' ' - {1, 9, 41, 16, 4, -40}, // '!' - {48, 17, 14, 25, 4, -40}, // '"' - {78, 35, 40, 37, 1, -40}, // '#' - {253, 27, 46, 33, 3, -43}, // '$' - {409, 45, 42, 49, 2, -41}, // '%' - {646, 39, 42, 42, 3, -41}, // '&' - {851, 7, 14, 15, 4, -40}, // ''' - {864, 15, 49, 19, 2, -40}, // '(' - {956, 15, 49, 19, 2, -40}, // ')' - {1048, 28, 26, 32, 2, -43}, // '*' - {1139, 27, 27, 33, 3, -33}, // '+' - {1231, 10, 14, 16, 2, -7}, // ',' - {1249, 15, 5, 19, 2, -18}, // '-' - {1259, 9, 8, 16, 4, -7}, // '.' - {1268, 23, 40, 23, 0, -40}, // '/' - {1383, 29, 42, 33, 2, -41}, // '0' - {1536, 18, 40, 33, 4, -40}, // '1' - {1626, 29, 41, 33, 2, -41}, // '2' - {1775, 28, 42, 33, 2, -41}, // '3' - {1922, 31, 40, 33, 1, -40}, // '4' - {2077, 27, 41, 33, 3, -40}, // '5' - {2216, 28, 42, 33, 3, -41}, // '6' - {2363, 29, 40, 33, 2, -40}, // '7' - {2508, 29, 42, 33, 2, -41}, // '8' - {2661, 29, 42, 33, 2, -41}, // '9' - {2814, 9, 32, 16, 4, -31}, // ':' - {2850, 11, 38, 17, 2, -31}, // ';' - {2903, 27, 28, 33, 3, -34}, // '<' - {2998, 27, 16, 33, 3, -28}, // '=' - {3052, 27, 28, 33, 3, -34}, // '>' - {3147, 25, 42, 26, 0, -41}, // '?' - {3279, 45, 45, 51, 3, -40}, // '@' - {3533, 38, 40, 38, 0, -40}, // 'A' - {3723, 30, 40, 38, 5, -40}, // 'B' - {3873, 32, 42, 37, 3, -41}, // 'C' - {4041, 34, 40, 42, 5, -40}, // 'D' - {4211, 24, 40, 32, 5, -40}, // 'E' - {4331, 24, 40, 31, 5, -40}, // 'F' - {4451, 35, 42, 42, 3, -41}, // 'G' - {4635, 33, 40, 43, 5, -40}, // 'H' - {4800, 8, 40, 18, 5, -40}, // 'I' - {4840, 17, 51, 18, -4, -40}, // 'J' - {4949, 32, 40, 37, 5, -40}, // 'K' - {5109, 24, 40, 31, 5, -40}, // 'L' - {5229, 43, 40, 53, 5, -40}, // 'M' - {5444, 35, 40, 45, 5, -40}, // 'N' - {5619, 39, 42, 45, 3, -41}, // 'O' - {5824, 27, 40, 35, 5, -40}, // 'P' - {5959, 39, 51, 45, 3, -41}, // 'Q' - {6208, 31, 40, 37, 5, -40}, // 'R' - {6363, 27, 42, 32, 3, -41}, // 'S' - {6505, 31, 40, 33, 1, -40}, // 'T' - {6660, 33, 41, 43, 5, -40}, // 'U' - {6830, 36, 40, 36, 0, -40}, // 'V' - {7010, 54, 40, 54, 0, -40}, // 'W' - {7280, 36, 40, 36, 0, -40}, // 'X' - {7460, 34, 40, 34, 0, -40}, // 'Y' - {7630, 29, 40, 33, 2, -40}, // 'Z' - {7775, 14, 49, 19, 4, -40}, // '[' - {7861, 23, 40, 23, 0, -40}, // '\' - {7976, 14, 49, 19, 1, -40}, // ']' - {8062, 29, 26, 31, 1, -40}, // '^' - {8157, 25, 4, 25, 0, 5}, // '_' - {8170, 14, 9, 34, 10, -43}, // '`' - {8186, 27, 32, 33, 2, -31}, // 'a' - {8294, 28, 44, 36, 5, -43}, // 'b' - {8448, 24, 32, 29, 3, -31}, // 'c' - {8544, 28, 44, 36, 3, -43}, // 'd' - {8698, 27, 32, 33, 3, -31}, // 'e' - {8806, 23, 43, 21, 1, -43}, // 'f' - {8930, 30, 44, 32, 1, -31}, // 'g' - {9095, 28, 43, 37, 5, -43}, // 'h' - {9246, 9, 42, 17, 4, -42}, // 'i' - {9294, 16, 55, 17, -3, -42}, // 'j' - {9404, 28, 43, 33, 5, -43}, // 'k' - {9555, 7, 43, 17, 5, -43}, // 'l' - {9593, 46, 31, 55, 5, -31}, // 'm' - {9772, 28, 31, 37, 5, -31}, // 'n' - {9881, 29, 32, 35, 3, -31}, // 'o' - {9997, 28, 44, 36, 5, -31}, // 'p' - {10151, 28, 44, 36, 3, -31}, // 'q' - {10305, 19, 31, 25, 5, -31}, // 'r' - {10379, 23, 32, 28, 3, -31}, // 's' - {10471, 21, 38, 23, 1, -37}, // 't' - {10571, 28, 31, 37, 4, -30}, // 'u' - {10680, 31, 30, 31, 0, -30}, // 'v' - {10797, 45, 30, 47, 1, -30}, // 'w' - {10966, 30, 30, 32, 1, -30}, // 'x' - {11079, 31, 43, 31, 0, -30}, // 'y' - {11246, 24, 30, 28, 2, -30}, // 'z' - {11336, 21, 49, 23, 1, -40}, // '{' - {11465, 6, 56, 32, 13, -43}, // '|' - {11507, 20, 49, 22, 1, -40} // '}' -}; -const GFXfont Open_Sans_SemiBold_56 PROGMEM = {(uint8_t *)Open_Sans_SemiBold_56Bitmaps, - (GFXglyph *)Open_Sans_SemiBold_56Glyphs, 0x20, 0x7E, 77}; \ No newline at end of file diff --git a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Inkplate7_Crowdsupply_Campaing_Tracker.ino b/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Inkplate7_Crowdsupply_Campaing_Tracker.ino deleted file mode 100644 index 45c04595f..000000000 --- a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/Inkplate7_Crowdsupply_Campaing_Tracker.ino +++ /dev/null @@ -1,204 +0,0 @@ -/* - Inkplate7_Crowdsupply_Campaing_Tracker example for Soldered Inkplate 7 - For this example you will need only USB cable and Inkplate 7. - Select "Soldered Inkplate7" from Tools -> Board menu. - Don't have "Soldered Inkplate7" option? Follow our tutorial and add it: - https://soldered.com/learn/add-inkplate-6-board-definition-to-arduino-ide/ - - This example will show you how you can use Inkplate 7 to display html data. - This example gets html data from crowdsource campaing and displays them on Inkplate screen. - - Want to learn more about Inkplate? Visit www.inkplate.io - Looking to get support? Write on our forums: https://forum.soldered.com/ - 7 July 2023 by Soldered -*/ - -// Next 3 lines are a precaution, you can ignore those, and the example would also work without them -#ifndef ARDUINO_INKPLATE7 -#error "Wrong board selection for this example, please select Soldered Inkplate7 in the boards menu." -#endif - -#include "Inkplate.h" // Include Inkplate library to the sketch -#include "generatedUI.h" // include generated UI - -#define DELAY_MS 60000 * 60 // Delay between fetching data -#define URL "https://www.crowdsupply.com/soldered/inkplate-6" // Link to the Inkplate 7 crowdsupply campaign - -// Enter your WiFi credentials -char ssid[] = ""; -char pass[] = ""; - -// Create an object on Inkplate library and also set library into 1Bit (BW) mode -Inkplate display; - -uint32_t n; // Variable for counting position in the buffer -char *buf; // Pointer to the buffer - -// Declaration of the function used later -String textInTag(const char *tag, const char *tagEnd, int dt = 1); - -void setup() -{ - Serial.begin(115200); // Init serial communication - display.begin(); // Init Inkplate library (you should call this function ONLY ONCE) - - // Connect to WiFi - while (!display.connectWiFi(ssid, pass)) - { - Serial.print('.'); - delay(1000); - } - - // Allocate memory for the buffer - buf = (char *)ps_malloc(100000); - - // Create an HTTPclient object and do the GET request - HTTPClient http; - if (http.begin(URL) && http.GET() > 0) - { - // Create an HTTPclient object and do the GET request - while (http.getStreamPtr()->available()) - { - char c = http.getStreamPtr()->read(); - buf[n++] = c; - delayMicroseconds(100); - } - - // Add the end of the string - buf[n] = 0; - } - - Serial.println("Buffer load complete!"); - - // Get the values for each field. - // When we did a get request, we got HTML as a response because there is no API on this web page. - // If you open the source of the page, you will see the HTML code. Here in the function we pass tags we are - // interested in and get the value between the tags as a string. - text1_content = textInTag("

", "

"); // Separate the product name - text3_content = textInTag("

", "

"); // Separate the project teaser - text4_content = textInTag("

", "

"); // Separate the amount of pledged - text7_content = textInTag("

", "

"); // Separate the goal - text11_content = textInTag("
", ""); // Separate the percentage - - int percent; - text11_content.replace(",", ""); - sscanf(text11_content.c_str(), "%d%%", &percent); - - // Draw parcent slider - if (percent < 100 && percent > 0) - { - float per = (float)(percent / 100.00); - int diff = line0_end_x - line0_start_x; - Serial.println(per); - Serial.println(diff); - line0_end_x = line0_start_x + (diff * per); - } - else if (percent >= 100) - { - } - else - { - line0_end_x = line0_start_x; - } - - text13_content = textInTag("", ""); // Separate the number of updates - text14_content = - textInTag("", ""); // Separate the date when founded - text17_content = textInTag("", ""); // Separate the number of backers - text19_content += textInTag("", - ""); // Separate the last update date - - // Display the content on the screen - mainDraw(); - display.display(); - - // Free the buffer - free(buf); - - // Go to sleep - esp_sleep_enable_timer_wakeup(1000LL * DELAY_MS); - (void)esp_deep_sleep_start(); -} - -void loop() -{ - // Never here -} - -/** - * @brief The function that returns content between HTML tags as a string. - * - * @param const char *tag - * The starting tag from which we want to get the value - * - * @param const char *tagEnd - * The ending tag from which we want to get the value - * - * @param int dt - * How many end tags (*tagEnd) want to skip. Default is 1 - * - * @return String value between passed tags - */ -String textInTag(const char *tag, const char *tagEnd, int dt) -{ - String r; // String for result - char *start = strstr(buf, tag) + strlen(tag); // Pointer to the beginning of the text after the tag - char *end = start - 1; // Set tag end one address before start pointer - while (dt--) - { - // Search where is the "tagEnd" starting from the last "end" which is the beginning for the first time - // (*end = start - 1) and repeat it "dt" times - end = strstr(end + 1, tagEnd); - } - - // Remove "<" and ">" from the result string - int d = 0; - for (char *t = start; t < end; ++t) - { - if (*t == '<') - ++d; - if (d == 0 && *t != '\n') - { - r += *t; - } - if (*t == '>') - --d; - } - - // Remove certain words to get only the data we want - // Hacky solution: - r.replace(""", "\""); - r.replace(" ", " "); - - r.replace("raised", ""); - r.replace("goal", ""); - r.replace("Funded!", ""); - r.replace("funded", ""); - r.replace(" on", ""); - r.replace("updates", ""); - - // Remove the following from the result string if it exists and put it in the separate string that displays on - // the screen - if (r.indexOf("hours left") != -1) - { - r.replace("hours left", ""); - text17_content = "hours left"; - } - if (r.indexOf("days left") != -1) - { - r.replace("days left", ""); - text17_content = "days left"; - } - - r.replace("backers", ""); - r.replace("Subscribe to Updates", ""); - - // Remove extraneous whitespace characters at the beginning or the end of the string - r.trim(); - - // If there is a dollar sign, the result is the string after that - if (r.indexOf("$") != -1) - r = r.substring(r.indexOf("$") + 1); - - return r; -} diff --git a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/generatedUI.h b/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/generatedUI.h deleted file mode 100644 index 0cb85e769..000000000 --- a/examples/Inkplate7/Projects/Inkplate7_Crowdsupply_Campaing_Tracker/generatedUI.h +++ /dev/null @@ -1,355 +0,0 @@ -#include "Arduino.h" -#include "Fonts/Open_Sans_SemiBold_16.h" -#include "Fonts/Open_Sans_SemiBold_24.h" -#include "Fonts/Open_Sans_SemiBold_32.h" -#include "Fonts/Open_Sans_SemiBold_56.h" -#include "Inkplate.h" - -extern Inkplate display; - -float scale_x = 630.0 / 800.0; -float scale_y = 374.0 / 600.0; - -int rect0_a_x = 10; -int rect0_a_y = 10; -int rect0_b_x = 630; -int rect0_b_y = 374; -int rect0_fill = -1; -int rect0_radius = -1; -int rect0_color = INKPLATE7_BLACK; - -String text1_content; -int text1_cursor_x = 20; -int text1_cursor_y = 45; -const GFXfont *text1_font = &Open_Sans_SemiBold_32; - -String text2_content = "Soldered"; -int text2_cursor_x = 520; -int text2_cursor_y = 40; -const GFXfont *text2_font = &Open_Sans_SemiBold_16; - -String text3_content; -int text3_cursor_x = 120; -int text3_cursor_y = 60; -const GFXfont *text3_font = &Open_Sans_SemiBold_16; - -String text4_content; -int text4_cursor_x = 70 * scale_x; -int text4_cursor_y = 305 * scale_y; -const GFXfont *text4_font = &Open_Sans_SemiBold_32; - -String text5_content = "$"; -int text5_cursor_x = 50 * scale_x; -int text5_cursor_y = 300 * scale_y; -const GFXfont *text5_font = &Open_Sans_SemiBold_24; - -String text6_content = "raised"; -int text6_cursor_x = 240 * scale_x; -int text6_cursor_y = 305 * scale_y; -const GFXfont *text6_font = &Open_Sans_SemiBold_16; - -String text7_content; -int text7_cursor_x = 70 * scale_x; -int text7_cursor_y = 380 * scale_y; -const GFXfont *text7_font = &Open_Sans_SemiBold_32; - -String text8_content = "$"; -int text8_cursor_x = 50 * scale_x; -int text8_cursor_y = 385 * scale_y; -const GFXfont *text8_font = &Open_Sans_SemiBold_24; - -String text9_content = "goal"; -int text9_cursor_x = 240 * scale_x; -int text9_cursor_y = 385 * scale_y; -const GFXfont *text9_font = &Open_Sans_SemiBold_16; - -int rect1_a_x = 40 * scale_x; -int rect1_a_y = 250 * scale_y; -int rect1_b_x = 350 * scale_x; -int rect1_b_y = 525 * scale_y; -int rect1_fill = -1; -int rect1_radius = -1; -int rect1_color = INKPLATE7_BLACK; - -int rect2_a_x = 450 * scale_x; -int rect2_a_y = 250 * scale_y; -int rect2_b_x = 760 * scale_x; -int rect2_b_y = 525 * scale_y; -int rect2_fill = -1; -int rect2_radius = -1; -int rect2_color = INKPLATE7_BLACK; - -int rect3_a_x = 50 * scale_x; -int rect3_a_y = 450 * scale_y; -int rect3_b_x = 340 * scale_x; -int rect3_b_y = 477 * scale_y; -int rect3_fill = -1; -int rect3_radius = -1; -int rect3_color = INKPLATE7_BLACK; - -int line0_start_x = 50 * scale_x; -int line0_start_y = 463 * scale_y; -int line0_end_x = 340 * scale_x; -int line0_end_y = 463 * scale_y; -int line0_color = INKPLATE7_RED; -int line0_thickness = 26; -int line0_gradient = 0; - -String text11_content = "100%"; -int text11_cursor_x = 168 * scale_x; -int text11_cursor_y = 435 * scale_y; -const GFXfont *text11_font = &Open_Sans_SemiBold_16; - -String text12_content = "Funded!"; -int text12_cursor_x = 150 * scale_x; -int text12_cursor_y = 516 * scale_y; -const GFXfont *text12_font = &Open_Sans_SemiBold_16; - -String text13_content; -int text13_cursor_x = 460 * scale_x; -int text13_cursor_y = 305 * scale_y; -const GFXfont *text13_font = &Open_Sans_SemiBold_32; - -String text14_content; -int text14_cursor_x = 460 * scale_x; -int text14_cursor_y = 390 * scale_y; -const GFXfont *text14_font = &Open_Sans_SemiBold_32; - -String text15_content; -int text15_cursor_x = 600 * scale_x; -int text15_cursor_y = 406 * scale_y; -const GFXfont *text15_font = &Open_Sans_SemiBold_32; - -String text16_content = "updates"; -int text16_cursor_x = 600 * scale_x; -int text16_cursor_y = 305 * scale_y; -const GFXfont *text16_font = &Open_Sans_SemiBold_16; - -String text17_content; -int text17_cursor_x = 460 * scale_x; -int text17_cursor_y = 470 * scale_y; -const GFXfont *text17_font = &Open_Sans_SemiBold_24; - -String text18_content = "backers"; -int text18_cursor_x = 600 * scale_x; -int text18_cursor_y = 470 * scale_y; -const GFXfont *text18_font = &Open_Sans_SemiBold_16; - -String text19_content = "Last update posted "; -int text19_cursor_x = 255 * scale_x; -int text19_cursor_y = 570 * scale_y; -const GFXfont *text19_font = &Open_Sans_SemiBold_16; - -void mainDraw() -{ - if (rect0_radius != -1 && rect0_fill != -1) - display.fillRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius != -1 && rect0_fill == -1) - display.drawRoundRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_radius, - rect0_color); - else if (rect0_radius == -1 && rect0_fill != -1) - display.fillRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - else if (rect0_radius == -1 && rect0_fill == -1) - display.drawRect(rect0_a_x, rect0_a_y, rect0_b_x - rect0_a_x, rect0_b_y - rect0_a_y, rect0_color); - - display.setFont(text1_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text1_cursor_x, text1_cursor_y); - display.print(text1_content); - //Serial.print("Text 1: "); - //Serial.println(text1_content); - - display.setFont(text2_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text2_cursor_x, text2_cursor_y); - display.print(text2_content); - //Serial.print("Text 2: "); - //Serial.println(text2_content); - - // Manual edit: - GFXcanvas1 canvas(500, 100); - canvas.setFont(text3_font); - canvas.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - canvas.setTextSize(1); - canvas.setCursor(0, 20); - canvas.print(text3_content); - // canvas.drawRect(0, 0, 100, 100, INKPLATE7_BLACK); - //Serial.print("Text 3: "); - //Serial.println(text3_content); - - display.drawBitmap(100, 75, canvas.getBuffer(), 500, 100, INKPLATE7_BLACK, INKPLATE7_WHITE); - - display.setFont(text4_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text4_cursor_x, text4_cursor_y); - display.print(text4_content); - //Serial.print("Text 4: ");// - //Serial.println(text4_content)//; - - display.setFont(text5_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text5_cursor_x, text5_cursor_y); - display.print(text5_content); - //Serial.print("Text 5: "); - //Serial.println(text5_content); - - display.setFont(text6_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text6_cursor_x, text6_cursor_y); - display.print(text6_content); - //Serial.print("Text 6: "); - //Serial.println(text6_content); - - display.setFont(text7_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text7_cursor_x, text7_cursor_y); - display.print(text7_content); - //Serial.print("Text 7: "); - //Serial.println(text7_content); - - display.setFont(text8_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text8_cursor_x, text8_cursor_y); - display.print(text8_content); - //Serial.print("Text 8: "); - //Serial.println(text8_content); - - display.setFont(text9_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text9_cursor_x, text9_cursor_y); - display.print(text9_content); - //Serial.print("Text 9: "); - //Serial.println(text9_content); - - if (rect1_radius != -1 && rect1_fill != -1) - display.fillRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius != -1 && rect1_fill == -1) - display.drawRoundRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_radius, - rect1_color); - else if (rect1_radius == -1 && rect1_fill != -1) - display.fillRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - else if (rect1_radius == -1 && rect1_fill == -1) - display.drawRect(rect1_a_x, rect1_a_y, rect1_b_x - rect1_a_x, rect1_b_y - rect1_a_y, rect1_color); - - if (rect2_radius != -1 && rect2_fill != -1) - display.fillRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius != -1 && rect2_fill == -1) - display.drawRoundRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_radius, - rect2_color); - else if (rect2_radius == -1 && rect2_fill != -1) - display.fillRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - else if (rect2_radius == -1 && rect2_fill == -1) - display.drawRect(rect2_a_x, rect2_a_y, rect2_b_x - rect2_a_x, rect2_b_y - rect2_a_y, rect2_color); - - if (rect3_radius != -1 && rect3_fill != -1) - display.fillRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius != -1 && rect3_fill == -1) - display.drawRoundRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_radius, - rect3_color); - else if (rect3_radius == -1 && rect3_fill != -1) - display.fillRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - else if (rect3_radius == -1 && rect3_fill == -1) - display.drawRect(rect3_a_x, rect3_a_y, rect3_b_x - rect3_a_x, rect3_b_y - rect3_a_y, rect3_color); - - if (line0_gradient <= line0_color && line0_thickness == 1) - { - display.drawLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color); - } - else if (line0_gradient <= line0_color && line0_thickness != 1) - { - display.drawThickLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_thickness); - } - else if (line0_gradient > line0_color && line0_thickness == 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - 1); - } - else if (line0_gradient > line0_color && line0_thickness != 1) - { - display.drawGradientLine(line0_start_x, line0_start_y, line0_end_x, line0_end_y, line0_color, line0_gradient, - line0_thickness); - } - display.setFont(text11_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text11_cursor_x, text11_cursor_y); - display.print(text11_content); - //Serial.print("Text 11: "); - //Serial.println(text11_content); - - display.setFont(text12_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text12_cursor_x, text12_cursor_y); - display.print(text12_content); - //Serial.print("Text 12: "); - //Serial.println(text12_content); - - display.setFont(text13_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text13_cursor_x, text13_cursor_y); - display.print(text13_content); - //Serial.print("Text 13: "); - //Serial.println(text13_content); - - display.setFont(text14_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text14_cursor_x, text14_cursor_y); - display.print(text14_content); - //Serial.print("Text 14: "); - //Serial.println(text14_content); - - display.setFont(text15_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text15_cursor_x, text15_cursor_y); - display.print(text15_content); - //Serial.print("Text 15: "); - //Serial.println(text15_content); - - display.setFont(text16_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text16_cursor_x, text16_cursor_y); - display.print(text16_content); - //Serial.print("Text 16: "); - //Serial.println(text16_content); - - display.setFont(text17_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text17_cursor_x, text17_cursor_y); - display.print(text17_content); - //Serial.print("Text 17: "); - //Serial.println(text17_content); - - display.setFont(text18_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text18_cursor_x, text18_cursor_y); - display.print(text18_content); - //Serial.print("Text 18: "); - //Serial.println(text18_content); - - display.setFont(text19_font); - display.setTextColor(INKPLATE7_BLACK, INKPLATE7_WHITE); - display.setTextSize(1); - display.setCursor(text19_cursor_x, text19_cursor_y); - display.print(text19_content); - //Serial.print("Text 19: "); - //Serial.println(text19_content); -} diff --git a/examples/Inkplate7/Projects/Inkplate7_Daily_Weather_Station/Inkplate7_Daily_Weather_Station.ino b/examples/Inkplate7/Projects/Inkplate7_Daily_Weather_Station/Inkplate7_Daily_Weather_Station.ino index d4cbc9caa..1caffa8c6 100644 --- a/examples/Inkplate7/Projects/Inkplate7_Daily_Weather_Station/Inkplate7_Daily_Weather_Station.ino +++ b/examples/Inkplate7/Projects/Inkplate7_Daily_Weather_Station/Inkplate7_Daily_Weather_Station.ino @@ -23,7 +23,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate7/Projects/Inkplate7_Google_Calendar/Inkplate7_Google_Calendar.ino b/examples/Inkplate7/Projects/Inkplate7_Google_Calendar/Inkplate7_Google_Calendar.ino index e1bde53f8..bdbed66e9 100644 --- a/examples/Inkplate7/Projects/Inkplate7_Google_Calendar/Inkplate7_Google_Calendar.ino +++ b/examples/Inkplate7/Projects/Inkplate7_Google_Calendar/Inkplate7_Google_Calendar.ino @@ -8,6 +8,8 @@ This project shows you how Inkplate 7 can be used to display events in your Google Calendar using their provided API + Documentation link: https://soldered.com/documentation/inkplate/projects/GoogleCalendar + For this to work you need to change your timezone, wifi credentials and your private calendar url which you can find following these steps: diff --git a/examples/Inkplate7/Projects/Inkplate7_Hourly_Weather_Station/Inkplate7_Hourly_Weather_Station.ino b/examples/Inkplate7/Projects/Inkplate7_Hourly_Weather_Station/Inkplate7_Hourly_Weather_Station.ino index b9ae2febd..3d35091fa 100644 --- a/examples/Inkplate7/Projects/Inkplate7_Hourly_Weather_Station/Inkplate7_Hourly_Weather_Station.ino +++ b/examples/Inkplate7/Projects/Inkplate7_Hourly_Weather_Station/Inkplate7_Hourly_Weather_Station.ino @@ -25,7 +25,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/examples/Inkplate7/Projects/Inkplate7_OpenWeather_Station/Inkplate7_OpenWeather_Station.ino b/examples/Inkplate7/Projects/Inkplate7_OpenWeather_Station/Inkplate7_OpenWeather_Station.ino index 245a303bd..76f54a665 100644 --- a/examples/Inkplate7/Projects/Inkplate7_OpenWeather_Station/Inkplate7_OpenWeather_Station.ino +++ b/examples/Inkplate7/Projects/Inkplate7_OpenWeather_Station/Inkplate7_OpenWeather_Station.ino @@ -26,7 +26,7 @@ In order to convert your images into a format compatible with Inkplate use the Soldered Image Converter available at: - https://github.com/SolderedElectronics/Soldered-Image-Converter/releases + http://soldered.com/image-converter */ // Next 3 lines are a precaution, you can ignore those, and the example would also work without them diff --git a/keywords.txt b/keywords.txt index b8de86ab3..b94c2aa36 100644 --- a/keywords.txt +++ b/keywords.txt @@ -127,7 +127,7 @@ RTC_ALARM_MATCH_SS LITERAL1 RTC_ALARM_MATCH_MMSS LITERAL1 RTC_ALARM_MATCH_HHMMSS LITERAL1 RTC_ALARM_MATCH_DHHMMSS LITERAL1 -RTC_ALARM_MATCH_WHHMSS LITERAL1 +RTC_ALARM_MATCH_WHHMMSS LITERAL1 IO_INT_ADDR LITERAL1 IO_EXT_ADDR LITERAL1 O_RDONLY LITERAL1 diff --git a/src/include/System.h b/src/include/System.h index dbcad5e94..f0ee35eba 100644 --- a/src/include/System.h +++ b/src/include/System.h @@ -70,7 +70,7 @@ #define RTC_ALARM_MATCH_MMSS 0b00000011 #define RTC_ALARM_MATCH_HHMMSS 0b00000111 #define RTC_ALARM_MATCH_DHHMMSS 0b00001111 -#define RTC_ALARM_MATCH_WHHMSS 0b00011111 +#define RTC_ALARM_MATCH_WHHMMSS 0b00010111 // Rtc internal capacitors #define RTC_7PF 0