add custom font files, changes to the init procedure, add status infos, improved time sync reliability

This commit is contained in:
2EEEB 2020-06-20 21:20:16 +02:00
parent 8572c8e4dc
commit 9ebee4264d
Signed by: 2EEEB
GPG Key ID: 8F12BD6D9D435DB2
3 changed files with 1168 additions and 181 deletions

638
FreeSans22pt7b.h Normal file

@ -0,0 +1,638 @@
const uint8_t FreeSans22pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x77, 0x76, 0x66,
0x66, 0x00, 0x0F, 0xFF, 0xF0, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1F,
0xE3, 0xB8, 0x77, 0x0E, 0xE1, 0xCC, 0x19, 0x82, 0x00, 0x00, 0xE0, 0xF0,
0x03, 0x83, 0xC0, 0x1E, 0x0E, 0x00, 0x78, 0x38, 0x01, 0xC0, 0xE0, 0x07,
0x03, 0x80, 0x1C, 0x1E, 0x00, 0x70, 0x70, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF,
0xF7, 0xFF, 0xFF, 0xC0, 0xE0, 0xF0, 0x03, 0x83, 0xC0, 0x1E, 0x0E, 0x00,
0x78, 0x38, 0x01, 0xC0, 0xE0, 0x07, 0x03, 0x80, 0x1C, 0x1E, 0x00, 0x70,
0x78, 0x3F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xE0, 0xE0, 0xF0,
0x03, 0x83, 0xC0, 0x1E, 0x0E, 0x00, 0x78, 0x38, 0x01, 0xC0, 0xE0, 0x07,
0x03, 0x80, 0x1C, 0x1E, 0x00, 0x70, 0x78, 0x03, 0xC1, 0xC0, 0x00, 0x00,
0x70, 0x00, 0x03, 0x80, 0x00, 0x7F, 0x80, 0x0F, 0xFF, 0x01, 0xFF, 0xFC,
0x1F, 0xB9, 0xF0, 0xF1, 0xC7, 0x8F, 0x0E, 0x1E, 0x78, 0x70, 0x73, 0x83,
0x83, 0x9C, 0x1C, 0x1C, 0xF0, 0xE0, 0x07, 0x87, 0x00, 0x3E, 0x38, 0x00,
0xF9, 0xC0, 0x07, 0xFE, 0x00, 0x1F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x7F,
0xF0, 0x00, 0xFF, 0xE0, 0x07, 0x3F, 0x00, 0x38, 0x7C, 0x01, 0xC1, 0xE0,
0x0E, 0x07, 0xF0, 0x70, 0x3F, 0x83, 0x81, 0xDC, 0x1C, 0x0E, 0xE0, 0xE0,
0xF7, 0x87, 0x07, 0xBE, 0x38, 0x78, 0xF9, 0xCF, 0xC3, 0xFF, 0xFC, 0x0F,
0xFF, 0x80, 0x0F, 0xF0, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00,
0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x7C, 0x00, 0x0E, 0x00,
0x1F, 0xF0, 0x00, 0xE0, 0x03, 0xFF, 0x80, 0x1C, 0x00, 0x7C, 0x3C, 0x01,
0xC0, 0x07, 0x01, 0xC0, 0x38, 0x00, 0xF0, 0x1E, 0x03, 0x80, 0x0E, 0x00,
0xE0, 0x70, 0x00, 0xE0, 0x0E, 0x07, 0x00, 0x0E, 0x00, 0xE0, 0xE0, 0x00,
0xF0, 0x1E, 0x0C, 0x00, 0x07, 0x01, 0xC1, 0xC0, 0x00, 0x7C, 0x3C, 0x18,
0x00, 0x03, 0xFF, 0x83, 0x80, 0x00, 0x1F, 0xF0, 0x30, 0x00, 0x00, 0x7C,
0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x0E, 0x03, 0xE0,
0x00, 0x01, 0xC0, 0xFF, 0x80, 0x00, 0x1C, 0x1F, 0xFC, 0x00, 0x03, 0x83,
0xE1, 0xE0, 0x00, 0x38, 0x38, 0x0E, 0x00, 0x07, 0x03, 0x80, 0x70, 0x00,
0x70, 0x70, 0x07, 0x00, 0x0E, 0x07, 0x00, 0x70, 0x00, 0xE0, 0x70, 0x07,
0x00, 0x1C, 0x03, 0x80, 0x70, 0x01, 0x80, 0x38, 0x0E, 0x00, 0x38, 0x03,
0xE1, 0xE0, 0x03, 0x00, 0x1F, 0xFC, 0x00, 0x70, 0x00, 0xFF, 0x80, 0x0E,
0x00, 0x03, 0xE0, 0x00, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0xE0,
0x00, 0xF0, 0xF0, 0x00, 0xF0, 0x3C, 0x00, 0x70, 0x1E, 0x00, 0x38, 0x07,
0x00, 0x1C, 0x03, 0x80, 0x0F, 0x03, 0xC0, 0x07, 0x81, 0xE0, 0x01, 0xE3,
0xE0, 0x00, 0xFB, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x0F,
0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xFC, 0x1E, 0x1F, 0x1F, 0x0F, 0x0F,
0x07, 0x87, 0x0F, 0x01, 0xE3, 0x87, 0x00, 0x7B, 0xC7, 0x80, 0x3F, 0xE3,
0xC0, 0x0F, 0xE1, 0xE0, 0x03, 0xF0, 0xF0, 0x00, 0xF0, 0x78, 0x00, 0xFC,
0x1E, 0x00, 0xFF, 0x0F, 0x80, 0xFF, 0xC3, 0xF9, 0xF9, 0xE0, 0xFF, 0xF8,
0x78, 0x3F, 0xF8, 0x3E, 0x07, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0x77, 0x76,
0x60, 0x01, 0x80, 0xE0, 0x70, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0x70, 0x3C,
0x0E, 0x03, 0x81, 0xE0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0xF0, 0x3C, 0x0F,
0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x1C, 0x07, 0x01, 0xC0,
0x78, 0x0E, 0x03, 0x80, 0xE0, 0x1C, 0x07, 0x01, 0xC0, 0x38, 0x06, 0x01,
0xC0, 0x30, 0x0E, 0x01, 0xC0, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x81, 0xC0,
0x70, 0x38, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0x70, 0x38, 0x1C, 0x0F, 0x07,
0x83, 0xC1, 0xE0, 0xF0, 0x38, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xC0,
0xE0, 0x70, 0x78, 0x38, 0x1C, 0x1C, 0x0E, 0x07, 0x07, 0x03, 0x83, 0x81,
0x81, 0xC0, 0xC0, 0x00, 0x07, 0x00, 0x38, 0x01, 0x81, 0x0C, 0x2F, 0x6F,
0x7F, 0xFC, 0xFF, 0x01, 0xE0, 0x1F, 0x81, 0xEE, 0x0E, 0x38, 0x61, 0x80,
0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07,
0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x07,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x00, 0x00, 0x38,
0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00,
0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x33,
0x7E, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x00, 0x30, 0x07,
0x00, 0x60, 0x06, 0x00, 0xE0, 0x0C, 0x00, 0xC0, 0x1C, 0x01, 0xC0, 0x18,
0x01, 0x80, 0x38, 0x03, 0x00, 0x30, 0x07, 0x00, 0x60, 0x06, 0x00, 0xE0,
0x0C, 0x00, 0xC0, 0x1C, 0x01, 0x80, 0x18, 0x03, 0x80, 0x30, 0x03, 0x00,
0x70, 0x06, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0x0C, 0x00, 0x01, 0xF8, 0x00,
0x7F, 0xE0, 0x0F, 0xFF, 0x01, 0xF9, 0xF8, 0x3E, 0x07, 0xC3, 0xC0, 0x3C,
0x78, 0x03, 0xC7, 0x80, 0x1E, 0x78, 0x01, 0xEF, 0x00, 0x1E, 0xF0, 0x00,
0xEF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00,
0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
0x00, 0xFF, 0x00, 0x0E, 0xF0, 0x01, 0xE7, 0x00, 0x1E, 0x78, 0x01, 0xE7,
0x80, 0x3C, 0x3C, 0x03, 0xC3, 0xC0, 0x7C, 0x1F, 0x0F, 0x80, 0xFF, 0xF0,
0x07, 0xFE, 0x00, 0x1F, 0x80, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0xF0, 0x3E,
0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03,
0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0,
0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78,
0x01, 0xFE, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xF0, 0x3F, 0x9F, 0xC1, 0xE0,
0x1F, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0xEF, 0x00, 0x0F, 0x78, 0x00, 0x7B,
0xC0, 0x03, 0xDE, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00,
0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x80, 0x03, 0xF8, 0x00,
0x7F, 0x80, 0x07, 0xF0, 0x00, 0x7E, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00,
0x07, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xFF,
0xFF, 0xF7, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFC,
0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xF0, 0x3F, 0x1F, 0x83, 0xE0, 0x3E, 0x1E,
0x00, 0xF1, 0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x00, 0xF3, 0xC0, 0x07,
0x80, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x07, 0xE0, 0x01,
0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0x7C,
0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00,
0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0x78, 0x03, 0xC3,
0xFD, 0xFE, 0x0F, 0xFF, 0xE0, 0x3F, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x03,
0x80, 0x00, 0x3C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x01, 0xF8, 0x00,
0x1F, 0xC0, 0x01, 0xFE, 0x00, 0x0E, 0xF0, 0x00, 0xF7, 0x80, 0x0F, 0x3C,
0x00, 0x71, 0xE0, 0x07, 0x8F, 0x00, 0x78, 0x78, 0x07, 0x83, 0xC0, 0x38,
0x1E, 0x03, 0xC0, 0xF0, 0x3C, 0x07, 0x81, 0xC0, 0x3C, 0x1E, 0x01, 0xE1,
0xE0, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00,
0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x0F, 0xFF, 0xF0, 0x7F,
0xFF, 0x87, 0xFF, 0xFC, 0x3F, 0xFF, 0xE1, 0xE0, 0x00, 0x0F, 0x00, 0x00,
0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00,
0x00, 0x7B, 0xFC, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xE0, 0xFC, 0x1F, 0x87,
0x80, 0x3E, 0x38, 0x00, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x1E, 0x00, 0x00,
0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xFE, 0x00, 0x0F, 0x78,
0x00, 0x7B, 0xC0, 0x07, 0x9F, 0x00, 0x3C, 0x7C, 0x07, 0xC3, 0xFC, 0xFE,
0x0F, 0xFF, 0xE0, 0x1F, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x7F,
0xF0, 0x0F, 0xFF, 0x81, 0xFD, 0xFC, 0x3E, 0x03, 0xC3, 0xC0, 0x1E, 0x78,
0x01, 0xE7, 0x80, 0x0E, 0x78, 0x00, 0x07, 0x00, 0x00, 0xF0, 0x00, 0x0F,
0x00, 0x00, 0xF1, 0xFE, 0x0F, 0x7F, 0xF0, 0xFF, 0xFF, 0xCF, 0xF0, 0x7C,
0xFC, 0x03, 0xEF, 0x80, 0x1E, 0xF8, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x70, 0x00, 0xF7, 0x80,
0x1E, 0x7C, 0x01, 0xE3, 0xE0, 0x3C, 0x1F, 0x9F, 0xC1, 0xFF, 0xF8, 0x07,
0xFF, 0x00, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x38,
0x00, 0x07, 0x80, 0x00, 0x70, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x1C,
0x00, 0x03, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x80, 0x00, 0x70, 0x00, 0x0F,
0x00, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1C, 0x00, 0x03,
0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00,
0x78, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xF8,
0x00, 0xFF, 0xE0, 0x1F, 0xFF, 0x83, 0xF9, 0xFC, 0x7C, 0x07, 0xC7, 0x80,
0x3E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x78,
0x01, 0xE7, 0xC0, 0x3C, 0x3E, 0x0F, 0x81, 0xFF, 0xF0, 0x07, 0xFE, 0x01,
0xFF, 0xF8, 0x3F, 0x0F, 0xC7, 0xC0, 0x3E, 0xF8, 0x01, 0xEF, 0x00, 0x0F,
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
0xFF, 0x00, 0x1F, 0xF8, 0x01, 0xE7, 0xC0, 0x3E, 0x3F, 0x9F, 0xC1, 0xFF,
0xF8, 0x0F, 0xFF, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0xFF, 0xE0, 0x1F,
0xFF, 0x03, 0xF1, 0xF8, 0x7C, 0x07, 0xC7, 0x80, 0x3C, 0xF0, 0x01, 0xEF,
0x00, 0x1E, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
0xF0, 0x01, 0xFF, 0x00, 0x1F, 0xF8, 0x01, 0xF7, 0x80, 0x3F, 0x7E, 0x0F,
0xF3, 0xFF, 0xFF, 0x1F, 0xFC, 0xF0, 0x7F, 0x8F, 0x00, 0x00, 0xF0, 0x00,
0x0E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0xF0, 0x01, 0xE7, 0x80, 0x3C, 0x78,
0x03, 0xC7, 0xC0, 0x78, 0x3F, 0x3F, 0x81, 0xFF, 0xF0, 0x0F, 0xFC, 0x00,
0x3F, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xE3, 0x18, 0xCE, 0x6F, 0x40,
0x00, 0x00, 0x08, 0x00, 0x01, 0xC0, 0x00, 0x3E, 0x00, 0x0F, 0xF0, 0x01,
0xFE, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x80, 0x07,
0xF0, 0x00, 0x3C, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0,
0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0,
0x00, 0x7E, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x80,
0x00, 0x07, 0x00, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00,
0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00,
0x1F, 0xC0, 0x00, 0x1E, 0x00, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x1F, 0xE0,
0x03, 0xFC, 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0x3F, 0x00,
0x01, 0xE0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x01, 0xFF, 0xC0,
0x7F, 0xFE, 0x1F, 0x9F, 0xE7, 0xC0, 0x7C, 0xF0, 0x07, 0x9C, 0x00, 0x7F,
0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x01, 0xE0,
0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00,
0x1F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00,
0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x00,
0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF,
0xFE, 0x00, 0x00, 0x3F, 0xE1, 0xFF, 0x80, 0x00, 0x7E, 0x00, 0x1F, 0xC0,
0x01, 0xF8, 0x00, 0x07, 0xE0, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x07, 0xC0,
0x00, 0x00, 0xF8, 0x07, 0x80, 0x00, 0x00, 0x7C, 0x0F, 0x00, 0x1E, 0x00,
0x3C, 0x1E, 0x00, 0x7F, 0x8E, 0x1E, 0x1E, 0x01, 0xFF, 0xDE, 0x1E, 0x3C,
0x03, 0xE1, 0xDC, 0x1F, 0x3C, 0x07, 0xC0, 0xFC, 0x0F, 0x78, 0x0F, 0x80,
0x7C, 0x0F, 0x78, 0x0F, 0x00, 0x78, 0x0F, 0x78, 0x1E, 0x00, 0x78, 0x0F,
0x70, 0x1E, 0x00, 0x78, 0x0F, 0x70, 0x1E, 0x00, 0x78, 0x0F, 0xF0, 0x3C,
0x00, 0x70, 0x0F, 0xF0, 0x3C, 0x00, 0xF0, 0x1E, 0xF0, 0x3C, 0x00, 0xF0,
0x1E, 0x70, 0x3C, 0x01, 0xE0, 0x3C, 0x78, 0x1E, 0x01, 0xE0, 0x3C, 0x78,
0x1E, 0x03, 0xE0, 0x78, 0x78, 0x1F, 0x07, 0xE1, 0xF8, 0x3C, 0x0F, 0xFE,
0xFF, 0xF0, 0x3C, 0x07, 0xFC, 0xFF, 0xC0, 0x1E, 0x01, 0xF0, 0x7F, 0x00,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xC0,
0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x08,
0x00, 0x00, 0xFF, 0xC3, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00,
0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0x00,
0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07,
0xFC, 0x00, 0x00, 0xF7, 0x80, 0x00, 0x3E, 0xF0, 0x00, 0x07, 0x9F, 0x00,
0x00, 0xF1, 0xE0, 0x00, 0x3E, 0x3C, 0x00, 0x07, 0x87, 0xC0, 0x00, 0xF0,
0x78, 0x00, 0x3C, 0x0F, 0x00, 0x07, 0x81, 0xF0, 0x00, 0xF0, 0x1E, 0x00,
0x3C, 0x03, 0xE0, 0x07, 0x80, 0x7C, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x00,
0xF8, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFE, 0x07,
0x80, 0x07, 0xC1, 0xF0, 0x00, 0x78, 0x3C, 0x00, 0x0F, 0x87, 0x80, 0x00,
0xF1, 0xF0, 0x00, 0x1E, 0x3C, 0x00, 0x03, 0xE7, 0x80, 0x00, 0x3D, 0xE0,
0x00, 0x07, 0xFC, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xE0,
0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, 0x7C, 0xF0, 0x00, 0x3C,
0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C,
0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x78, 0xFF, 0xFF, 0xF0,
0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, 0x7C,
0xF0, 0x00, 0x3E, 0xF0, 0x00, 0x1E, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0F,
0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x1E,
0xF0, 0x00, 0x3E, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xF0,
0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0xFF,
0xF0, 0x07, 0xFF, 0xFF, 0x00, 0xF8, 0x03, 0xF0, 0x3E, 0x00, 0x1F, 0x0F,
0x80, 0x01, 0xE1, 0xE0, 0x00, 0x3C, 0x78, 0x00, 0x03, 0xCF, 0x00, 0x00,
0x79, 0xE0, 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, 0x0F, 0x00,
0x00, 0x01, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x1E,
0x78, 0x00, 0x03, 0xC7, 0x80, 0x00, 0xF8, 0xF8, 0x00, 0x3E, 0x0F, 0x80,
0x07, 0xC1, 0xFC, 0x03, 0xF0, 0x1F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0x00,
0x0F, 0xFF, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xFF,
0xF0, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x0F, 0x00, 0x0F, 0xC7, 0x80,
0x01, 0xF3, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x1E, 0xF0, 0x00, 0x0F, 0x78,
0x00, 0x07, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F,
0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07,
0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x7F, 0x80, 0x00, 0x7F, 0xC0, 0x00, 0x3D, 0xE0, 0x00, 0x1E, 0xF0, 0x00,
0x1E, 0x78, 0x00, 0x1F, 0x3C, 0x00, 0x3F, 0x1F, 0xFF, 0xFF, 0x0F, 0xFF,
0xFF, 0x07, 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFD, 0xFF,
0xFF, 0xFB, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x1E, 0x00,
0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00,
0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
0xBF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x03,
0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C,
0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0,
0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00,
0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0,
0x00, 0x03, 0xFF, 0xFF, 0x8F, 0xFF, 0xFE, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF,
0xE3, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03,
0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0,
0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x03,
0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xF8, 0x0F, 0xC0, 0x1F, 0x81, 0xF0, 0x00,
0x7C, 0x3E, 0x00, 0x03, 0xE3, 0xC0, 0x00, 0x1E, 0x7C, 0x00, 0x01, 0xF7,
0x80, 0x00, 0x0F, 0x78, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00,
0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x1F, 0xFF,
0xF0, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x00,
0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00,
0xF7, 0x80, 0x00, 0x0F, 0x7C, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x1F, 0x3E,
0x00, 0x03, 0xF1, 0xF0, 0x00, 0x7F, 0x0F, 0xC0, 0x1F, 0x70, 0x7F, 0xFF,
0xE7, 0x03, 0xFF, 0xFC, 0x70, 0x0F, 0xFF, 0x03, 0x00, 0x3F, 0xC0, 0x00,
0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00,
0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00,
0x00, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F,
0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01,
0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00,
0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C,
0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00,
0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00,
0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C,
0x00, 0x0F, 0x00, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x3F, 0xE0, 0x0F, 0x78,
0x03, 0xDE, 0x00, 0xF7, 0x80, 0x7D, 0xF0, 0x1E, 0x3F, 0x9F, 0x87, 0xFF,
0xC0, 0xFF, 0xE0, 0x0F, 0xE0, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xBC,
0x00, 0x0F, 0x9E, 0x00, 0x0F, 0x8F, 0x00, 0x0F, 0x87, 0x80, 0x0F, 0x83,
0xC0, 0x0F, 0x81, 0xE0, 0x0F, 0x80, 0xF0, 0x0F, 0x80, 0x78, 0x0F, 0x80,
0x3C, 0x0F, 0x80, 0x1E, 0x0F, 0x80, 0x0F, 0x0F, 0x80, 0x07, 0x8F, 0xC0,
0x03, 0xCF, 0xF0, 0x01, 0xEF, 0x78, 0x00, 0xFF, 0x1E, 0x00, 0x7F, 0x0F,
0x80, 0x3F, 0x03, 0xE0, 0x1F, 0x00, 0xF0, 0x0F, 0x00, 0x7C, 0x07, 0x80,
0x1F, 0x03, 0xC0, 0x07, 0x81, 0xE0, 0x03, 0xE0, 0xF0, 0x00, 0xF8, 0x78,
0x00, 0x3E, 0x3C, 0x00, 0x1F, 0x1E, 0x00, 0x07, 0xCF, 0x00, 0x01, 0xF7,
0x80, 0x00, 0x7B, 0xC0, 0x00, 0x3E, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0,
0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F,
0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00,
0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00,
0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00,
0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0,
0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF,
0x80, 0x00, 0x7F, 0xFF, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0x70,
0x00, 0x3F, 0xFD, 0xE0, 0x00, 0xEF, 0xF7, 0x80, 0x03, 0xBF, 0xCE, 0x00,
0x1E, 0xFF, 0x3C, 0x00, 0x73, 0xFC, 0xF0, 0x01, 0xCF, 0xF1, 0xC0, 0x0F,
0x3F, 0xC7, 0x80, 0x38, 0xFF, 0x1E, 0x00, 0xE3, 0xFC, 0x38, 0x07, 0x8F,
0xF0, 0xF0, 0x1C, 0x3F, 0xC3, 0xC0, 0x70, 0xFF, 0x07, 0x03, 0xC3, 0xFC,
0x1E, 0x0E, 0x0F, 0xF0, 0x38, 0x78, 0x3F, 0xC0, 0xE1, 0xE0, 0xFF, 0x03,
0xC7, 0x03, 0xFC, 0x07, 0x3C, 0x0F, 0xF0, 0x1C, 0xF0, 0x3F, 0xC0, 0x7B,
0x80, 0xFF, 0x00, 0xFE, 0x03, 0xFC, 0x03, 0xF8, 0x0F, 0xF0, 0x0F, 0xC0,
0x3F, 0xC0, 0x1F, 0x00, 0xFF, 0x00, 0x7C, 0x03, 0xC0, 0xF8, 0x00, 0x07,
0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xF0, 0x00,
0x7F, 0xF8, 0x00, 0x3F, 0xDE, 0x00, 0x1F, 0xEF, 0x80, 0x0F, 0xF3, 0xC0,
0x07, 0xF8, 0xF0, 0x03, 0xFC, 0x7C, 0x01, 0xFE, 0x1E, 0x00, 0xFF, 0x07,
0x80, 0x7F, 0x83, 0xE0, 0x3F, 0xC0, 0xF0, 0x1F, 0xE0, 0x7C, 0x0F, 0xF0,
0x1E, 0x07, 0xF8, 0x07, 0x83, 0xFC, 0x03, 0xE1, 0xFE, 0x00, 0xF0, 0xFF,
0x00, 0x3C, 0x7F, 0x80, 0x1F, 0x3F, 0xC0, 0x07, 0x9F, 0xE0, 0x01, 0xEF,
0xF0, 0x00, 0xFF, 0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFE, 0x00, 0x07,
0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x3E, 0x00, 0x1F,
0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF,
0xE0, 0x0F, 0xC0, 0x1F, 0xC0, 0x7E, 0x00, 0x1F, 0x83, 0xE0, 0x00, 0x3E,
0x0F, 0x00, 0x00, 0x7C, 0x7C, 0x00, 0x00, 0xF1, 0xE0, 0x00, 0x03, 0xE7,
0x80, 0x00, 0x07, 0xBC, 0x00, 0x00, 0x1E, 0xF0, 0x00, 0x00, 0x3F, 0xC0,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00,
0x00, 0x3F, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00,
0x0F, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xE7, 0x80, 0x00, 0x07,
0x9E, 0x00, 0x00, 0x1E, 0x7C, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x07, 0xC3,
0xE0, 0x00, 0x3E, 0x07, 0xE0, 0x01, 0xF8, 0x0F, 0xC0, 0x1F, 0xC0, 0x1F,
0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F,
0xE0, 0x00, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xE7, 0xFF,
0xFF, 0xCF, 0x00, 0x07, 0xDE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00,
0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x01,
0xFF, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xBF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFC,
0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F,
0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0,
0x00, 0x01, 0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00,
0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00,
0x03, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xE0, 0x0F,
0xC0, 0x1F, 0xC0, 0x7E, 0x00, 0x1F, 0x83, 0xE0, 0x00, 0x3E, 0x0F, 0x00,
0x00, 0x7C, 0x7C, 0x00, 0x00, 0xF1, 0xE0, 0x00, 0x01, 0xE7, 0x80, 0x00,
0x07, 0xBC, 0x00, 0x00, 0x1E, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3F,
0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0,
0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xE7, 0x80, 0x00, 0x07, 0x9E, 0x00,
0x00, 0x3E, 0x7C, 0x00, 0x30, 0xF0, 0xF0, 0x01, 0xF7, 0xC3, 0xE0, 0x03,
0xFE, 0x07, 0xC0, 0x07, 0xF8, 0x0F, 0xC0, 0x1F, 0xC0, 0x1F, 0xFF, 0xFF,
0x80, 0x3F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0x3E, 0x00, 0x1F, 0xE0, 0x78,
0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x3F,
0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xF0, 0x00, 0x3F,
0x3C, 0x00, 0x07, 0xCF, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x3C, 0xF0, 0x00,
0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x3C, 0xF0,
0x00, 0x1E, 0x3C, 0x00, 0x1F, 0x8F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xC0,
0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0x0F, 0x00, 0x03, 0xE3, 0xC0, 0x00,
0x78, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0xF3, 0xC0,
0x00, 0x3C, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0xF3,
0xC0, 0x00, 0x3C, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xEF, 0x00, 0x00,
0x7C, 0x00, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0xFE, 0x03, 0xFC,
0xFF, 0x83, 0xE0, 0x07, 0xC1, 0xE0, 0x01, 0xF1, 0xF0, 0x00, 0x78, 0xF0,
0x00, 0x3C, 0x78, 0x00, 0x0F, 0x3C, 0x00, 0x07, 0x9E, 0x00, 0x00, 0x0F,
0x80, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00,
0x1F, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0xFF,
0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00,
0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x07, 0x9E, 0x00,
0x03, 0xCF, 0x80, 0x03, 0xE3, 0xF0, 0x03, 0xE0, 0xFF, 0xFF, 0xE0, 0x3F,
0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0,
0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x1E,
0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x01,
0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00,
0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00,
0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0,
0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00,
0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0,
0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF,
0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F,
0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1E, 0xF0, 0x00,
0x1E, 0x78, 0x00, 0x0F, 0x3C, 0x00, 0x0F, 0x9F, 0x00, 0x07, 0x87, 0xE0,
0x0F, 0xC1, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x01,
0xFF, 0x00, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xF7, 0x80, 0x00, 0x79,
0xE0, 0x00, 0x1E, 0x7C, 0x00, 0x0F, 0x8F, 0x00, 0x03, 0xC3, 0xC0, 0x00,
0xF0, 0xF8, 0x00, 0x78, 0x1E, 0x00, 0x1E, 0x07, 0x80, 0x07, 0x81, 0xF0,
0x03, 0xC0, 0x3C, 0x00, 0xF0, 0x0F, 0x00, 0x3C, 0x01, 0xE0, 0x1E, 0x00,
0x78, 0x07, 0x80, 0x1E, 0x01, 0xE0, 0x03, 0xC0, 0xF0, 0x00, 0xF0, 0x3C,
0x00, 0x3C, 0x0F, 0x00, 0x07, 0x87, 0x80, 0x01, 0xE1, 0xE0, 0x00, 0x7C,
0x78, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00, 0x7B, 0xC0, 0x00,
0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00,
0x00, 0x0F, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3F,
0xE0, 0x00, 0xF8, 0x00, 0x7B, 0xE0, 0x03, 0xF0, 0x00, 0xF3, 0xC0, 0x07,
0xE0, 0x03, 0xE7, 0x80, 0x0F, 0xE0, 0x07, 0xCF, 0x00, 0x3F, 0xC0, 0x0F,
0x1F, 0x00, 0x7F, 0x80, 0x1E, 0x1E, 0x00, 0xF7, 0x00, 0x3C, 0x3C, 0x01,
0xCF, 0x00, 0xF8, 0x78, 0x07, 0x9E, 0x01, 0xE0, 0xF8, 0x0F, 0x1C, 0x03,
0xC0, 0xF0, 0x1C, 0x3C, 0x07, 0x81, 0xE0, 0x38, 0x78, 0x1E, 0x03, 0xC0,
0xF0, 0xF0, 0x3C, 0x07, 0xC1, 0xE0, 0xE0, 0x78, 0x07, 0x83, 0x81, 0xE0,
0xF0, 0x0F, 0x0F, 0x03, 0xC3, 0xC0, 0x1E, 0x1E, 0x07, 0x87, 0x80, 0x3C,
0x3C, 0x07, 0x8F, 0x00, 0x3C, 0x70, 0x0F, 0x1E, 0x00, 0x79, 0xE0, 0x1E,
0x38, 0x00, 0xF3, 0xC0, 0x1C, 0xF0, 0x01, 0xE7, 0x00, 0x3D, 0xE0, 0x01,
0xFE, 0x00, 0x7B, 0xC0, 0x03, 0xFC, 0x00, 0xF7, 0x00, 0x07, 0xF8, 0x00,
0xFE, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x03, 0xF8, 0x00,
0x1F, 0x80, 0x03, 0xE0, 0x00, 0x3F, 0x00, 0x07, 0xC0, 0x00, 0x3C, 0x00,
0x0F, 0x80, 0x00, 0x7C, 0x00, 0x07, 0xCF, 0x80, 0x01, 0xF0, 0xF8, 0x00,
0x3C, 0x0F, 0x80, 0x0F, 0x81, 0xF0, 0x03, 0xE0, 0x1F, 0x00, 0x78, 0x01,
0xF0, 0x1F, 0x00, 0x3E, 0x07, 0xC0, 0x03, 0xE0, 0xF0, 0x00, 0x3E, 0x3C,
0x00, 0x03, 0xCF, 0x80, 0x00, 0x7D, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00,
0x7F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x80,
0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x79, 0xF0, 0x00, 0x1F,
0x1E, 0x00, 0x07, 0xC3, 0xE0, 0x00, 0xF0, 0x3E, 0x00, 0x3E, 0x03, 0xC0,
0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x07, 0xC0, 0x78, 0x00, 0x7C, 0x1F, 0x00,
0x0F, 0x87, 0xC0, 0x00, 0xF8, 0xF0, 0x00, 0x0F, 0xBE, 0x00, 0x01, 0xF0,
0xF8, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0x3E, 0x7C, 0x00, 0x07, 0xC3, 0xE0,
0x00, 0x78, 0x1E, 0x00, 0x0F, 0x81, 0xF0, 0x00, 0xF0, 0x0F, 0x80, 0x1E,
0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x3C, 0x00, 0x3C, 0x07, 0xC0, 0x03,
0xE0, 0x78, 0x00, 0x1F, 0x0F, 0x00, 0x00, 0xF1, 0xF0, 0x00, 0x0F, 0x9E,
0x00, 0x00, 0x7B, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00,
0x01, 0xF8, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F,
0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00,
0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0xF0, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00,
0x00, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF,
0xFF, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00,
0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x03, 0xE0, 0x00, 0x07,
0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x3E,
0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0,
0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00,
0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF,
0xFF, 0xFF, 0xC0, 0x0E, 0x00, 0xE0, 0x06, 0x00, 0x60, 0x07, 0x00, 0x30,
0x03, 0x00, 0x38, 0x01, 0x80, 0x18, 0x01, 0xC0, 0x0C, 0x00, 0xC0, 0x0E,
0x00, 0x60, 0x06, 0x00, 0x70, 0x03, 0x00, 0x30, 0x03, 0x80, 0x38, 0x01,
0x80, 0x1C, 0x01, 0xC0, 0x0C, 0x00, 0xC0, 0x0E, 0x00, 0x60, 0x06, 0x00,
0x70, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0xE0,
0x07, 0xE0, 0x07, 0xE0, 0x0E, 0x70, 0x0E, 0x70, 0x1C, 0x38, 0x1C, 0x38,
0x1C, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x07,
0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x3E, 0x0F,
0x03, 0xC0, 0xF0, 0x38, 0x03, 0xFC, 0x00, 0x3F, 0xFC, 0x01, 0xFF, 0xFC,
0x0F, 0xE3, 0xF0, 0x3C, 0x03, 0xE0, 0xE0, 0x07, 0x87, 0x80, 0x1E, 0x1E,
0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x01, 0xFE, 0x01, 0xFF,
0xF8, 0x1F, 0xFF, 0xE0, 0xFF, 0x87, 0x87, 0xE0, 0x1E, 0x1E, 0x00, 0x78,
0xF0, 0x01, 0xE3, 0xC0, 0x07, 0x8F, 0x00, 0x1E, 0x3C, 0x00, 0xF8, 0x78,
0x07, 0xE1, 0xF0, 0x7F, 0x83, 0xFF, 0xDF, 0xC7, 0xFE, 0x3F, 0x07, 0xE0,
0x7C, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0,
0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x1F, 0x80, 0xE7, 0xFE, 0x0E,
0xFF, 0xF0, 0xFF, 0x1F, 0x8F, 0xC0, 0x7C, 0xF8, 0x03, 0xCF, 0x00, 0x1E,
0xF0, 0x01, 0xEF, 0x00, 0x1E, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00,
0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x00,
0x1E, 0xF0, 0x01, 0xEF, 0x00, 0x1E, 0xF8, 0x03, 0xCF, 0xC0, 0x7C, 0xFF,
0x1F, 0x8E, 0xFF, 0xF0, 0xE7, 0xFE, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00,
0x7F, 0xF0, 0x0F, 0xFF, 0x81, 0xF9, 0xFC, 0x3E, 0x03, 0xC3, 0xC0, 0x1E,
0x78, 0x01, 0xE7, 0x80, 0x1E, 0x78, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00,
0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00,
0x00, 0x70, 0x00, 0xE7, 0x80, 0x0E, 0x78, 0x01, 0xE3, 0xC0, 0x1E, 0x3E,
0x03, 0xC1, 0xF9, 0xFC, 0x0F, 0xFF, 0x80, 0x7F, 0xF0, 0x01, 0xFC, 0x00,
0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00,
0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x1F, 0x87, 0x07, 0xFE, 0x70, 0xFF,
0xF7, 0x1F, 0xCF, 0xF3, 0xE0, 0x3F, 0x3C, 0x01, 0xF7, 0x80, 0x0F, 0x78,
0x00, 0xF7, 0x80, 0x0F, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F,
0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x77, 0x80, 0x0F,
0x78, 0x00, 0xF7, 0x80, 0x0F, 0x3C, 0x01, 0xF3, 0xE0, 0x3F, 0x1F, 0x8F,
0xF0, 0xFF, 0xF7, 0x07, 0xFE, 0x70, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x3F,
0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0x1F, 0x83, 0xE0, 0x3E, 0x1E, 0x00, 0xF1,
0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x00, 0xF3, 0x80, 0x03, 0xBC, 0x00,
0x1D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x1E,
0x00, 0x00, 0x70, 0x00, 0x03, 0xC0, 0x07, 0x9E, 0x00, 0x3C, 0x78, 0x03,
0xC3, 0xE0, 0x3E, 0x0F, 0xC7, 0xE0, 0x3F, 0xFE, 0x00, 0xFF, 0xE0, 0x01,
0xFC, 0x00, 0x03, 0xC3, 0xF1, 0xFC, 0x7C, 0x1E, 0x07, 0x01, 0xC0, 0x70,
0x1C, 0x3F, 0xFF, 0xFF, 0xFF, 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, 0x01, 0xF8, 0x00, 0x7F, 0xCF, 0x0F,
0xFE, 0x71, 0xF8, 0xF7, 0x3E, 0x03, 0xF3, 0xC0, 0x1F, 0x78, 0x01, 0xF7,
0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x70, 0x00,
0xF7, 0x80, 0x0F, 0x78, 0x01, 0xF3, 0xC0, 0x1F, 0x3E, 0x03, 0xF1, 0xF8,
0xFF, 0x0F, 0xFE, 0xF0, 0x7F, 0xCF, 0x01, 0xF0, 0xF0, 0x00, 0x0F, 0x78,
0x00, 0xF7, 0x80, 0x1E, 0x7C, 0x01, 0xE3, 0xE0, 0x7C, 0x1F, 0xFF, 0x80,
0xFF, 0xF0, 0x03, 0xFC, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03,
0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x87, 0xF0, 0xE7,
0xFE, 0x3B, 0xFF, 0xCF, 0xE1, 0xFB, 0xF0, 0x1E, 0xF8, 0x07, 0xBC, 0x00,
0xFF, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F,
0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0,
0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00,
0xFE, 0x00, 0x3C, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xF8, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x00, 0x00, 0x0E, 0x1C,
0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87,
0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x71, 0xFF,
0xFF, 0x7C, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E,
0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x0F, 0x9C,
0x03, 0xE3, 0x80, 0xF8, 0x70, 0x3E, 0x0E, 0x0F, 0x81, 0xC3, 0xE0, 0x38,
0xF8, 0x07, 0x3E, 0x00, 0xEF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7E,
0xF8, 0x0F, 0x8F, 0x01, 0xE1, 0xF0, 0x38, 0x1F, 0x07, 0x01, 0xE0, 0xE0,
0x3E, 0x1C, 0x03, 0xC3, 0x80, 0x7C, 0x70, 0x07, 0xCE, 0x00, 0x79, 0xC0,
0x0F, 0xB8, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xF8, 0x0F, 0xC7, 0x3F, 0xE1, 0xFF, 0xBB,
0xFF, 0x9F, 0xFD, 0xFC, 0x7F, 0xE3, 0xFF, 0x80, 0xFC, 0x07, 0xF8, 0x07,
0xC0, 0x3F, 0xC0, 0x1E, 0x00, 0xFC, 0x00, 0xF0, 0x07, 0xE0, 0x07, 0x00,
0x3F, 0x00, 0x38, 0x01, 0xF8, 0x01, 0xC0, 0x0F, 0xC0, 0x0E, 0x00, 0x7E,
0x00, 0x70, 0x03, 0xF0, 0x03, 0x80, 0x1F, 0x80, 0x1C, 0x00, 0xFC, 0x00,
0xE0, 0x07, 0xE0, 0x07, 0x00, 0x3F, 0x00, 0x38, 0x01, 0xF8, 0x01, 0xC0,
0x0F, 0xC0, 0x0E, 0x00, 0x7E, 0x00, 0x70, 0x03, 0xF0, 0x03, 0x80, 0x1F,
0x80, 0x1C, 0x00, 0xFC, 0x00, 0xE0, 0x07, 0x00, 0xF8, 0x38, 0xFF, 0x8E,
0x7F, 0xF3, 0xB8, 0x7E, 0xFC, 0x07, 0xBE, 0x01, 0xFF, 0x00, 0x3F, 0xC0,
0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03,
0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE,
0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80,
0x0F, 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0x1F, 0x83,
0xE0, 0x3E, 0x1E, 0x00, 0xF1, 0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x00,
0xF7, 0x80, 0x03, 0xBC, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF8,
0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00, 0x0F, 0x78, 0x00, 0xF3, 0xC0, 0x07,
0x9E, 0x00, 0x3C, 0x78, 0x03, 0xC3, 0xE0, 0x3E, 0x0F, 0xC7, 0xE0, 0x3F,
0xFE, 0x00, 0xFF, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0xF8, 0x0E, 0x3F, 0xE0,
0xEF, 0xFF, 0x0E, 0xF1, 0xF8, 0xFC, 0x07, 0xCF, 0x80, 0x3C, 0xF8, 0x01,
0xEF, 0x00, 0x1E, 0xF0, 0x01, 0xEE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00,
0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xF0,
0x01, 0xEF, 0x00, 0x1E, 0xF0, 0x01, 0xEF, 0x80, 0x3C, 0xFC, 0x07, 0xCF,
0xF1, 0xF8, 0xEF, 0xFF, 0x0E, 0x7F, 0xE0, 0xE1, 0xF8, 0x0E, 0x00, 0x00,
0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00,
0x0E, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x7F, 0xE7, 0x0F,
0xFF, 0x71, 0xFC, 0xFF, 0x3E, 0x03, 0xF3, 0xC0, 0x1F, 0x78, 0x00, 0xF7,
0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07,
0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0x78, 0x00,
0xF7, 0x80, 0x0F, 0x78, 0x00, 0xF3, 0xC0, 0x1F, 0x3E, 0x03, 0xF1, 0xF8,
0xFF, 0x0F, 0xFF, 0x70, 0x7F, 0xE7, 0x01, 0xF8, 0x70, 0x00, 0x07, 0x00,
0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70,
0x00, 0x07, 0x00, 0x00, 0x70, 0x01, 0xF9, 0xFE, 0xFF, 0xBF, 0xFE, 0x3E,
0x0F, 0x03, 0xC0, 0xF0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03,
0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0x03,
0xF8, 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0x8F, 0xC7, 0xC0, 0x78, 0xF0,
0x07, 0x9E, 0x00, 0xF3, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0xC0, 0x00, 0xFF,
0x00, 0x0F, 0xFE, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x07, 0xF0, 0x00,
0x1E, 0x00, 0x01, 0xFE, 0x00, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0xF7, 0xC0,
0x3C, 0xFE, 0x3F, 0x8F, 0xFF, 0xE0, 0xFF, 0xF8, 0x03, 0xF8, 0x00, 0x1C,
0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0xC7, 0x01,
0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70,
0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x81, 0xE0, 0x7F, 0x1F, 0xC1,
0xF0, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03,
0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE,
0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80,
0x0F, 0xE0, 0x07, 0xF8, 0x01, 0xFF, 0x00, 0xFF, 0xC0, 0x7F, 0xFC, 0x3F,
0xDF, 0xFE, 0xF3, 0xFF, 0x3C, 0x3F, 0x00, 0x78, 0x00, 0x7B, 0xC0, 0x07,
0x9E, 0x00, 0x3C, 0x78, 0x01, 0xE3, 0xC0, 0x1E, 0x1E, 0x00, 0xF0, 0x78,
0x07, 0x03, 0xC0, 0x78, 0x1E, 0x03, 0xC0, 0x78, 0x1C, 0x03, 0xC1, 0xE0,
0x1E, 0x0F, 0x00, 0x78, 0x70, 0x03, 0xC7, 0x80, 0x1E, 0x38, 0x00, 0x71,
0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xE0, 0x00, 0x77, 0x00, 0x03, 0xF8, 0x00,
0x1F, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x07, 0xC0, 0x3E,
0xF0, 0x0F, 0x80, 0x79, 0xE0, 0x1F, 0x00, 0xF3, 0xC0, 0x7F, 0x01, 0xE3,
0xC0, 0xFE, 0x07, 0x87, 0x81, 0xDC, 0x0F, 0x0F, 0x03, 0xB8, 0x1E, 0x0E,
0x0F, 0x78, 0x38, 0x1E, 0x1E, 0xF0, 0xF0, 0x3C, 0x38, 0xE1, 0xE0, 0x78,
0x71, 0xC3, 0xC0, 0x70, 0xE3, 0xC7, 0x00, 0xF3, 0xC7, 0x9E, 0x01, 0xE7,
0x07, 0x3C, 0x01, 0xCE, 0x0E, 0x70, 0x03, 0x9C, 0x1E, 0xE0, 0x07, 0xF8,
0x3F, 0xC0, 0x0F, 0xE0, 0x3F, 0x80, 0x0F, 0xC0, 0x7E, 0x00, 0x1F, 0x80,
0xFC, 0x00, 0x3F, 0x01, 0xF8, 0x00, 0x3C, 0x01, 0xE0, 0x00, 0x78, 0x03,
0xC0, 0x00, 0x78, 0x01, 0xF3, 0xC0, 0x1E, 0x1E, 0x03, 0xC1, 0xE0, 0x38,
0x0F, 0x07, 0x80, 0x78, 0xF0, 0x07, 0x8E, 0x00, 0x3D, 0xE0, 0x01, 0xFC,
0x00, 0x1F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F,
0xC0, 0x03, 0xFE, 0x00, 0x39, 0xE0, 0x07, 0x8F, 0x00, 0xF0, 0xF0, 0x1E,
0x07, 0x81, 0xE0, 0x3C, 0x3C, 0x03, 0xC7, 0x80, 0x1E, 0x78, 0x00, 0xF0,
0x70, 0x00, 0xF7, 0x80, 0x0F, 0x78, 0x01, 0xE3, 0x80, 0x1E, 0x3C, 0x01,
0xE3, 0xC0, 0x3C, 0x1C, 0x03, 0xC1, 0xE0, 0x38, 0x1E, 0x07, 0x80, 0xE0,
0x78, 0x0F, 0x07, 0x00, 0xF0, 0xF0, 0x07, 0x0F, 0x00, 0x78, 0xE0, 0x07,
0x9E, 0x00, 0x39, 0xE0, 0x03, 0xDC, 0x00, 0x3F, 0xC0, 0x01, 0xF8, 0x00,
0x1F, 0x80, 0x01, 0xF8, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00,
0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x03, 0xC0,
0x03, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x7F,
0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xFF, 0x00, 0x03, 0xE0, 0x00, 0x78, 0x00,
0x1E, 0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03,
0xC0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x01, 0xE0, 0x00, 0x78,
0x00, 0x1E, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xC3, 0xF0, 0xFC, 0x78, 0x1E,
0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81,
0xC0, 0x70, 0x1C, 0x0F, 0x07, 0xC3, 0xE0, 0xE0, 0x3E, 0x07, 0x80, 0xF0,
0x1C, 0x07, 0x01, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07,
0x81, 0xE0, 0x78, 0x1E, 0x03, 0xF0, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
0xF8, 0x3F, 0x0F, 0xE0, 0x78, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03,
0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0F, 0x01, 0xC0, 0x78,
0x0F, 0x01, 0xC0, 0xF0, 0x78, 0x3C, 0x0F, 0x03, 0x80, 0xE0, 0x38, 0x0E,
0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x1E, 0x3F, 0x8F,
0xC3, 0xE0, 0x1E, 0x00, 0x07, 0xF0, 0x0D, 0xFF, 0x81, 0xB8, 0xF8, 0x76,
0x07, 0xFF, 0xC0, 0x7F, 0x80, 0x03, 0xE0 };
const GFXglyph FreeSans22pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 11, 0, 0 }, // 0x20 ' '
{ 1, 4, 31, 14, 5, -30 }, // 0x21 '!'
{ 17, 11, 11, 14, 2, -30 }, // 0x22 '"'
{ 33, 22, 31, 24, 1, -29 }, // 0x23 '#'
{ 119, 21, 38, 24, 1, -32 }, // 0x24 '$'
{ 219, 36, 32, 38, 1, -30 }, // 0x25 '%'
{ 363, 25, 32, 29, 2, -30 }, // 0x26 '&'
{ 463, 4, 11, 9, 2, -30 }, // 0x27 '''
{ 469, 10, 41, 14, 3, -30 }, // 0x28 '('
{ 521, 9, 41, 14, 2, -30 }, // 0x29 ')'
{ 568, 13, 12, 17, 2, -30 }, // 0x2A '*'
{ 588, 21, 21, 25, 2, -19 }, // 0x2B '+'
{ 644, 4, 11, 12, 4, -3 }, // 0x2C ','
{ 650, 10, 3, 14, 2, -12 }, // 0x2D '-'
{ 654, 5, 4, 11, 3, -3 }, // 0x2E '.'
{ 657, 12, 32, 12, 0, -30 }, // 0x2F '/'
{ 705, 20, 32, 24, 2, -30 }, // 0x30 '0'
{ 785, 11, 31, 24, 4, -30 }, // 0x31 '1'
{ 828, 21, 31, 24, 1, -30 }, // 0x32 '2'
{ 910, 21, 32, 24, 1, -30 }, // 0x33 '3'
{ 994, 21, 31, 24, 1, -30 }, // 0x34 '4'
{ 1076, 21, 32, 24, 1, -30 }, // 0x35 '5'
{ 1160, 20, 32, 24, 2, -30 }, // 0x36 '6'
{ 1240, 20, 31, 24, 2, -30 }, // 0x37 '7'
{ 1318, 20, 32, 24, 2, -30 }, // 0x38 '8'
{ 1398, 20, 32, 24, 2, -30 }, // 0x39 '9'
{ 1478, 5, 23, 11, 3, -22 }, // 0x3A ':'
{ 1493, 5, 30, 11, 3, -22 }, // 0x3B ';'
{ 1512, 21, 21, 25, 2, -19 }, // 0x3C '<'
{ 1568, 21, 10, 25, 2, -14 }, // 0x3D '='
{ 1595, 21, 21, 25, 2, -19 }, // 0x3E '>'
{ 1651, 19, 32, 24, 3, -31 }, // 0x3F '?'
{ 1727, 40, 38, 44, 1, -31 }, // 0x40 '@'
{ 1917, 27, 31, 29, 1, -30 }, // 0x41 'A'
{ 2022, 24, 31, 29, 3, -30 }, // 0x42 'B'
{ 2115, 27, 33, 31, 2, -31 }, // 0x43 'C'
{ 2227, 25, 31, 30, 3, -30 }, // 0x44 'D'
{ 2324, 23, 31, 27, 3, -30 }, // 0x45 'E'
{ 2414, 22, 31, 26, 3, -30 }, // 0x46 'F'
{ 2500, 28, 33, 33, 2, -31 }, // 0x47 'G'
{ 2616, 25, 31, 31, 3, -30 }, // 0x48 'H'
{ 2713, 4, 31, 12, 4, -30 }, // 0x49 'I'
{ 2729, 18, 32, 23, 1, -30 }, // 0x4A 'J'
{ 2801, 25, 31, 29, 3, -30 }, // 0x4B 'K'
{ 2898, 20, 31, 24, 3, -30 }, // 0x4C 'L'
{ 2976, 30, 31, 36, 3, -30 }, // 0x4D 'M'
{ 3093, 25, 31, 31, 3, -30 }, // 0x4E 'N'
{ 3190, 30, 33, 34, 2, -31 }, // 0x4F 'O'
{ 3314, 23, 31, 28, 3, -30 }, // 0x50 'P'
{ 3404, 30, 35, 34, 2, -31 }, // 0x51 'Q'
{ 3536, 26, 31, 31, 3, -30 }, // 0x52 'R'
{ 3637, 25, 33, 29, 2, -31 }, // 0x53 'S'
{ 3741, 25, 31, 27, 1, -30 }, // 0x54 'T'
{ 3838, 25, 32, 31, 3, -30 }, // 0x55 'U'
{ 3938, 26, 31, 28, 1, -30 }, // 0x56 'V'
{ 4039, 39, 31, 40, 1, -30 }, // 0x57 'W'
{ 4191, 27, 31, 28, 1, -30 }, // 0x58 'X'
{ 4296, 28, 31, 29, 1, -30 }, // 0x59 'Y'
{ 4405, 24, 31, 27, 1, -30 }, // 0x5A 'Z'
{ 4498, 8, 40, 12, 3, -30 }, // 0x5B '['
{ 4538, 12, 32, 12, 0, -30 }, // 0x5C '\'
{ 4586, 8, 40, 12, 1, -30 }, // 0x5D ']'
{ 4626, 16, 16, 20, 2, -30 }, // 0x5E '^'
{ 4658, 26, 2, 24, -1, 7 }, // 0x5F '_'
{ 4665, 9, 6, 11, 1, -31 }, // 0x60 '`'
{ 4672, 22, 25, 23, 1, -23 }, // 0x61 'a'
{ 4741, 20, 32, 24, 3, -30 }, // 0x62 'b'
{ 4821, 20, 25, 22, 1, -23 }, // 0x63 'c'
{ 4884, 20, 32, 24, 1, -30 }, // 0x64 'd'
{ 4964, 21, 25, 23, 1, -23 }, // 0x65 'e'
{ 5030, 10, 32, 12, 1, -31 }, // 0x66 'f'
{ 5070, 20, 33, 24, 1, -23 }, // 0x67 'g'
{ 5153, 18, 31, 23, 3, -30 }, // 0x68 'h'
{ 5223, 3, 31, 10, 3, -30 }, // 0x69 'i'
{ 5235, 7, 40, 10, 0, -30 }, // 0x6A 'j'
{ 5270, 19, 31, 22, 3, -30 }, // 0x6B 'k'
{ 5344, 3, 31, 9, 3, -30 }, // 0x6C 'l'
{ 5356, 29, 24, 35, 3, -23 }, // 0x6D 'm'
{ 5443, 18, 24, 23, 3, -23 }, // 0x6E 'n'
{ 5497, 21, 25, 23, 1, -23 }, // 0x6F 'o'
{ 5563, 20, 33, 24, 3, -23 }, // 0x70 'p'
{ 5646, 20, 33, 24, 1, -23 }, // 0x71 'q'
{ 5729, 10, 24, 14, 3, -23 }, // 0x72 'r'
{ 5759, 19, 25, 21, 1, -23 }, // 0x73 's'
{ 5819, 10, 30, 12, 1, -28 }, // 0x74 't'
{ 5857, 18, 24, 23, 3, -22 }, // 0x75 'u'
{ 5911, 21, 23, 21, 0, -22 }, // 0x76 'v'
{ 5972, 31, 23, 31, 0, -22 }, // 0x77 'w'
{ 6062, 20, 23, 21, 0, -22 }, // 0x78 'x'
{ 6120, 20, 33, 21, 0, -22 }, // 0x79 'y'
{ 6203, 19, 23, 21, 1, -22 }, // 0x7A 'z'
{ 6258, 10, 40, 14, 2, -30 }, // 0x7B '{'
{ 6308, 3, 41, 11, 4, -30 }, // 0x7C '|'
{ 6324, 10, 40, 14, 2, -30 }, // 0x7D '}'
{ 6374, 19, 7, 22, 1, -18 } }; // 0x7E '~'
const GFXfont FreeSans22pt7b PROGMEM = {
(uint8_t *)FreeSans22pt7bBitmaps,
(GFXglyph *)FreeSans22pt7bGlyphs,
0x20, 0x7E, 52 };
// Approx. 7063 bytes

252
FreeSansBold11pt7b.h Normal file

@ -0,0 +1,252 @@
const uint8_t FreeSansBold11pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFF, 0xF7, 0x66, 0x66, 0x66, 0x0F, 0xFF, 0xE7, 0xE7, 0xE7,
0xE7, 0x43, 0x42, 0x0C, 0xE0, 0xCC, 0x1C, 0xC1, 0xCC, 0x7F, 0xF7, 0xFF,
0x19, 0x83, 0x98, 0x39, 0x8F, 0xFE, 0xFF, 0xE3, 0x30, 0x73, 0x07, 0x30,
0x63, 0x06, 0x70, 0x06, 0x03, 0xF0, 0xFF, 0x3B, 0x77, 0x6E, 0xED, 0xDD,
0x83, 0xF0, 0x3F, 0x81, 0xF8, 0x1F, 0x83, 0x7E, 0x6E, 0xED, 0xDF, 0xF9,
0xFE, 0x1F, 0x80, 0xC0, 0x18, 0x00, 0x1C, 0x04, 0x0F, 0xE1, 0x81, 0x9C,
0x20, 0x31, 0x8C, 0x0E, 0x31, 0x00, 0xC6, 0x60, 0x1F, 0xC8, 0x01, 0xF3,
0x00, 0x00, 0x47, 0x80, 0x19, 0xF8, 0x06, 0x73, 0x00, 0xCC, 0x70, 0x31,
0x8E, 0x06, 0x39, 0x81, 0x83, 0xF0, 0x20, 0x3C, 0x0F, 0x00, 0x7E, 0x03,
0x9C, 0x0E, 0x70, 0x39, 0xC0, 0xFE, 0x01, 0xF0, 0x07, 0x80, 0x7F, 0x39,
0xDE, 0xEE, 0x3F, 0x38, 0x7C, 0xF0, 0xE1, 0xEF, 0xC7, 0xFB, 0x87, 0xCF,
0xFF, 0xF6, 0x80, 0x18, 0xE3, 0x1C, 0x61, 0x8E, 0x38, 0xE3, 0x8E, 0x38,
0xE3, 0x86, 0x18, 0x70, 0xC3, 0x86, 0x61, 0xC3, 0x0E, 0x18, 0x61, 0xC7,
0x1C, 0x71, 0xC7, 0x1C, 0x71, 0x86, 0x38, 0xC7, 0x18, 0x18, 0x18, 0x7E,
0x7E, 0x3C, 0x3C, 0x24, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0xFF, 0xFF, 0xFF,
0xFC, 0x38, 0x0E, 0x03, 0x80, 0xFF, 0x92, 0xF0, 0xFF, 0xFE, 0xFF, 0x80,
0x0C, 0x30, 0x86, 0x18, 0x41, 0x0C, 0x30, 0x82, 0x18, 0x41, 0x0C, 0x30,
0x3E, 0x1F, 0xE7, 0x7B, 0x8F, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8,
0x7E, 0x1F, 0x87, 0xE3, 0xDF, 0xE7, 0xF8, 0x78, 0x06, 0x1C, 0x7F, 0xFF,
0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x3E, 0x1F,
0xEF, 0xFF, 0x87, 0xE1, 0xF8, 0x70, 0x1C, 0x0E, 0x07, 0x83, 0xC3, 0xC1,
0xE0, 0x70, 0x3F, 0xFF, 0xFF, 0xFF, 0x3E, 0x1F, 0xEF, 0x7B, 0x8F, 0xE1,
0xC0, 0xE0, 0x38, 0x3C, 0x0F, 0x80, 0xF0, 0x1F, 0x87, 0xE1, 0xFF, 0xF7,
0xF8, 0xF8, 0x07, 0x83, 0xE0, 0xF8, 0x6E, 0x1B, 0x8C, 0xE7, 0x39, 0x8E,
0xE3, 0xB0, 0xEF, 0xFF, 0xFF, 0x03, 0xC0, 0xE0, 0x38, 0x0E, 0x7F, 0xDF,
0xF7, 0xFD, 0x80, 0x60, 0x3F, 0xCF, 0xFB, 0xDE, 0xE1, 0xC0, 0x70, 0x1F,
0x87, 0xE1, 0xFF, 0xE7, 0xF8, 0xF8, 0x1F, 0x0F, 0xE7, 0xBF, 0x87, 0xE0,
0x38, 0x0F, 0xF3, 0xFE, 0xF3, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xDF, 0xE7,
0xF8, 0x78, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0x03, 0x81, 0xC0, 0x70, 0x38,
0x0E, 0x07, 0x01, 0xC0, 0x70, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x1F, 0x07,
0xF9, 0xE7, 0x38, 0x77, 0x0E, 0xE1, 0x8F, 0xE1, 0xFE, 0x71, 0xEE, 0x1F,
0x83, 0xF8, 0x77, 0x0E, 0xFF, 0xCF, 0xF0, 0xF8, 0x3E, 0x1F, 0xCF, 0x7B,
0x87, 0xE1, 0xF0, 0x7E, 0x1F, 0x8F, 0xFF, 0xDF, 0xF0, 0x1C, 0x07, 0xE3,
0xBF, 0xE7, 0xF0, 0xF8, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x00,
0xFF, 0x92, 0xF0, 0x00, 0xC1, 0xF1, 0xFB, 0xF0, 0xE0, 0x3C, 0x07, 0xE0,
0x3F, 0x03, 0xC0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF,
0xFF, 0xFF, 0xFF, 0xC0, 0x3E, 0x07, 0xF0, 0x3F, 0x01, 0xC0, 0xF1, 0xFB,
0xF8, 0xF0, 0x20, 0x00, 0x1F, 0x07, 0xF9, 0xFF, 0x38, 0xFE, 0x0F, 0xC1,
0xC0, 0x78, 0x1E, 0x07, 0x80, 0xE0, 0x38, 0x07, 0x00, 0x00, 0x1C, 0x03,
0x80, 0x70, 0x01, 0xFC, 0x00, 0xFF, 0xE0, 0x78, 0x1E, 0x1C, 0x00, 0xE3,
0x00, 0x0C, 0xC1, 0xEC, 0xF8, 0x7F, 0x1E, 0x18, 0x63, 0xC6, 0x0C, 0x78,
0xC1, 0x8F, 0x18, 0x61, 0xE3, 0x0C, 0x7C, 0x63, 0x9D, 0xCF, 0xFF, 0x18,
0x73, 0xC3, 0x80, 0x00, 0x3C, 0x04, 0x01, 0xFF, 0x80, 0x0F, 0xE0, 0x00,
0x03, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3F, 0x00, 0xEE, 0x01, 0xDC, 0x03,
0xBC, 0x0E, 0x38, 0x1C, 0x70, 0x78, 0xF0, 0xFF, 0xE1, 0xFF, 0xC7, 0xFF,
0xCE, 0x03, 0x9C, 0x07, 0x78, 0x0F, 0xFF, 0x8F, 0xFE, 0xFF, 0xEE, 0x0F,
0xE0, 0x7E, 0x0F, 0xFF, 0xEF, 0xFC, 0xFF, 0xEE, 0x07, 0xE0, 0x7E, 0x07,
0xE0, 0x7F, 0xFF, 0xFF, 0xEF, 0xFC, 0x0F, 0xC0, 0x7F, 0xC3, 0xFF, 0x9E,
0x1E, 0xF0, 0x3B, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0E,
0x03, 0xFC, 0x0E, 0x78, 0x78, 0xFF, 0xE3, 0xFF, 0x03, 0xF0, 0xFF, 0x87,
0xFF, 0x3F, 0xF9, 0xC1, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xFC, 0x0F, 0xE0,
0x7F, 0x03, 0xF8, 0x1D, 0xC0, 0xEE, 0x0F, 0x7F, 0xF3, 0xFF, 0x9F, 0xF0,
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0E, 0x01, 0xC0, 0x3F, 0xF7, 0xFE, 0xFF,
0xDC, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xF0, 0x0E, 0x01, 0xC0, 0x3F, 0xF7, 0xFE, 0xFF, 0xDC, 0x03,
0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x07, 0xC0, 0x7F, 0xC3,
0xFF, 0x9E, 0x0F, 0x70, 0x1F, 0x80, 0x0E, 0x00, 0x38, 0x3F, 0xE0, 0xFF,
0x83, 0xFF, 0x01, 0xDC, 0x07, 0x78, 0x3C, 0xFF, 0xF1, 0xFE, 0xC1, 0xF3,
0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xFF, 0xFF, 0xFF,
0xFF, 0xFE, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xFE, 0x3F, 0x8F, 0xE3, 0xFF, 0xE7,
0xF8, 0xF8, 0xE0, 0x73, 0x83, 0xCE, 0x1E, 0x38, 0xF0, 0xE7, 0x83, 0xBC,
0x0F, 0xE0, 0x3F, 0x80, 0xFF, 0x03, 0xDE, 0x0E, 0x38, 0x38, 0xF0, 0xE1,
0xE3, 0x83, 0xCE, 0x07, 0x38, 0x1E, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0,
0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x3F, 0xFF,
0xFF, 0xFF, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC3, 0xFF, 0xC7, 0xFF,
0x8D, 0xFB, 0x1B, 0xF6, 0x37, 0xEC, 0xEF, 0xDD, 0x9F, 0x9B, 0x3F, 0x36,
0x7E, 0x7C, 0xFC, 0xF9, 0xF9, 0xE3, 0xF1, 0xC7, 0xE0, 0x7F, 0x83, 0xFC,
0x1F, 0xF0, 0xFF, 0xC7, 0xFE, 0x3F, 0xB9, 0xFD, 0xCF, 0xE7, 0x7F, 0x1B,
0xF8, 0xFF, 0xC3, 0xFE, 0x1F, 0xF0, 0x7F, 0x83, 0xFC, 0x0F, 0x07, 0xC0,
0x3F, 0xE0, 0xFF, 0xE3, 0xC1, 0xE7, 0x01, 0xDE, 0x03, 0xF8, 0x03, 0xF0,
0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0xC0, 0x7B, 0x80, 0xE7, 0x83, 0xC7, 0xFF,
0x07, 0xFC, 0x03, 0xE0, 0xFF, 0x8F, 0xFE, 0xFF, 0xEE, 0x0F, 0xE0, 0xFE,
0x0F, 0xE0, 0xFF, 0xFE, 0xFF, 0xEF, 0xF8, 0xE0, 0x0E, 0x00, 0xE0, 0x0E,
0x00, 0xE0, 0x0E, 0x00, 0x07, 0xC0, 0x3F, 0xE0, 0xFF, 0xE3, 0xC1, 0xE7,
0x01, 0xDE, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0xC3,
0x7B, 0x87, 0xE7, 0x87, 0xC7, 0xFF, 0x07, 0xFF, 0x83, 0xE6, 0x00, 0x04,
0xFF, 0xC7, 0xFF, 0xBF, 0xFD, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81, 0xDF,
0xFC, 0xFF, 0xC7, 0xFF, 0x38, 0x3D, 0xC0, 0xEE, 0x07, 0x70, 0x3B, 0x81,
0xDC, 0x0F, 0x1F, 0x83, 0xFF, 0x1F, 0xFD, 0xE0, 0xEE, 0x07, 0x78, 0x03,
0xF8, 0x0F, 0xFC, 0x1F, 0xF0, 0x07, 0xC0, 0x1F, 0xC0, 0x7F, 0x07, 0xBF,
0xF9, 0xFF, 0x83, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x0F, 0x00,
0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00,
0xF0, 0x0F, 0x00, 0xF0, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xF0, 0xFF,
0xFE, 0x7F, 0xE1, 0xF8, 0x70, 0x3D, 0xC0, 0xE7, 0x03, 0x8E, 0x0E, 0x38,
0x70, 0xE1, 0xC1, 0xC7, 0x07, 0x38, 0x1C, 0xE0, 0x33, 0x80, 0xEC, 0x03,
0xF0, 0x07, 0xC0, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x70, 0x70, 0x77, 0x0F,
0x07, 0x70, 0xF0, 0xF7, 0x8F, 0x8E, 0x38, 0xD8, 0xE3, 0x8D, 0x8E, 0x39,
0xD8, 0xC1, 0x9D, 0x9C, 0x1D, 0x9D, 0xC1, 0xD8, 0xDC, 0x1D, 0x8D, 0x80,
0xF8, 0xD8, 0x0F, 0x0F, 0x80, 0xF0, 0xF8, 0x0F, 0x07, 0x00, 0x70, 0x70,
0x78, 0x3C, 0xE1, 0xE3, 0xC7, 0x07, 0x3C, 0x1E, 0xE0, 0x3F, 0x00, 0x7C,
0x01, 0xE0, 0x07, 0x80, 0x3F, 0x00, 0xFE, 0x07, 0xB8, 0x1C, 0xF0, 0xF1,
0xE7, 0x87, 0x9C, 0x0F, 0xF0, 0x39, 0xC1, 0xE7, 0x87, 0x0E, 0x1C, 0x1C,
0xE0, 0x73, 0x80, 0xFC, 0x03, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01,
0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
0x80, 0xF0, 0x3C, 0x07, 0x01, 0xE0, 0x78, 0x1E, 0x03, 0x80, 0xF0, 0x3C,
0x0F, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x38, 0xE3, 0x8E, 0x38,
0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8F, 0xFF, 0x83, 0x04, 0x10,
0x61, 0x82, 0x0C, 0x30, 0x41, 0x06, 0x08, 0x20, 0xC1, 0xFF, 0xF1, 0xC7,
0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x7F, 0xFF,
0x0E, 0x07, 0x81, 0xF0, 0x6C, 0x3B, 0x0C, 0xE7, 0x19, 0x87, 0x60, 0xC0,
0xFF, 0xFF, 0xFF, 0x61, 0x84, 0x3F, 0x0F, 0xF3, 0xCF, 0x70, 0xE0, 0x3C,
0x7F, 0x9F, 0x77, 0x0E, 0xE1, 0xDE, 0xFB, 0xFF, 0x3C, 0xE0, 0x00, 0xE0,
0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE7, 0x8E, 0xFC, 0xFF, 0xEF, 0x0E, 0xF0,
0xEE, 0x0E, 0xE0, 0xFF, 0x0E, 0xF0, 0xEF, 0xFE, 0xFF, 0xCE, 0xF8, 0x1F,
0x1F, 0xE7, 0xBF, 0x87, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE1, 0xDE, 0xF7,
0xF8, 0x7C, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x71, 0xEE, 0x7F, 0xDF, 0xFF,
0x8F, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7F, 0x1E, 0xFF, 0xDF, 0xF9, 0xF7,
0x00, 0x00, 0x1F, 0x0F, 0xF1, 0xCF, 0x70, 0xEE, 0x1F, 0xFF, 0xFF, 0xFF,
0x00, 0xE0, 0xEE, 0x79, 0xFE, 0x0F, 0x80, 0x1E, 0x7C, 0xE1, 0xCF, 0xFF,
0xCE, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x1E, 0xEF, 0xFD,
0xFF, 0xF8, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xF1, 0xEF, 0xFD, 0xFF,
0x8F, 0x70, 0x0F, 0xC1, 0xFC, 0x73, 0xFE, 0x3F, 0x00, 0xE0, 0x1C, 0x03,
0x80, 0x70, 0x0E, 0x79, 0xDF, 0xBF, 0xF7, 0x8F, 0xE0, 0xFC, 0x1F, 0x83,
0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7B, 0xDE, 0x07, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xBD,
0xEF, 0x7B, 0xDF, 0xEF, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x1D,
0xC7, 0x39, 0xC7, 0x78, 0xEE, 0x1F, 0xC3, 0xFC, 0x7B, 0x8E, 0x39, 0xC7,
0xB8, 0x77, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x9E, 0x77,
0xFF, 0xBF, 0xFF, 0xFE, 0x38, 0x7E, 0x1C, 0x3F, 0x0E, 0x1F, 0x87, 0x0F,
0xC3, 0x87, 0xE1, 0xC3, 0xF0, 0xE1, 0xF8, 0x70, 0xFC, 0x38, 0x70, 0xE7,
0x9D, 0xFB, 0xFF, 0xF8, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC,
0x1F, 0x83, 0xF0, 0x70, 0x1F, 0x07, 0xF9, 0xEF, 0x78, 0x7E, 0x0F, 0xC1,
0xF8, 0x3F, 0x07, 0xF0, 0xEF, 0x78, 0xFF, 0x0F, 0x80, 0xE7, 0x8E, 0xFC,
0xFF, 0xEF, 0x0E, 0xF0, 0xEE, 0x0F, 0xE0, 0xEF, 0x0E, 0xF0, 0xEF, 0xFE,
0xEF, 0xCE, 0x78, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x00, 0x1E,
0xEF, 0xFD, 0xFF, 0xF8, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xF1, 0xEF,
0xFD, 0xFF, 0x8F, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0xE7,
0xDF, 0xFF, 0x8F, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x00, 0x3F, 0x1F,
0xEF, 0x3F, 0x87, 0xF8, 0x1F, 0xC3, 0xFC, 0x0F, 0xE1, 0xFC, 0xFF, 0xF8,
0xFC, 0x38, 0x70, 0xE7, 0xFF, 0xE7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3,
0x87, 0xC7, 0x80, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8,
0x3F, 0x07, 0xF1, 0xEF, 0xFD, 0xFF, 0x9E, 0x70, 0xF0, 0xEE, 0x1D, 0xC3,
0xB8, 0xE3, 0x9C, 0x73, 0x8E, 0x60, 0xFC, 0x1F, 0x83, 0xE0, 0x3C, 0x07,
0x80, 0xE1, 0xC7, 0x38, 0xE3, 0x9C, 0xF1, 0xCE, 0x7C, 0xE7, 0x36, 0x61,
0xDB, 0x70, 0xED, 0xB8, 0x7E, 0xFC, 0x1E, 0x7C, 0x0F, 0x1E, 0x07, 0x8F,
0x03, 0xC7, 0x00, 0x70, 0xE7, 0x9C, 0x39, 0xC1, 0xF8, 0x1F, 0x80, 0xF0,
0x0F, 0x01, 0xF8, 0x1F, 0x83, 0x9C, 0x79, 0xE7, 0x0E, 0xF0, 0xE7, 0x0E,
0x70, 0xE7, 0x8C, 0x39, 0xC3, 0x9C, 0x39, 0x81, 0xF8, 0x1F, 0x81, 0xF0,
0x0F, 0x00, 0xF0, 0x0E, 0x00, 0xE0, 0x0E, 0x03, 0xC0, 0x38, 0x00, 0xFF,
0xFF, 0xC1, 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, 0x70, 0x70, 0x3F, 0xFF,
0xF0, 0x1C, 0xF3, 0x0C, 0x30, 0xC3, 0x0C, 0x73, 0x8E, 0x1C, 0x30, 0xC3,
0x0C, 0x30, 0xC3, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC7, 0x1C,
0x71, 0xC7, 0x1C, 0x70, 0xF3, 0xDC, 0x71, 0xC7, 0x1C, 0x71, 0xCF, 0x38,
0x38, 0x1F, 0x14, 0x7C, 0x0E };
const GFXglyph FreeSansBold11pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 4, 16, 7, 2, -15 }, // 0x21 '!'
{ 9, 8, 6, 10, 1, -15 }, // 0x22 '"'
{ 15, 12, 16, 12, 0, -14 }, // 0x23 '#'
{ 39, 11, 19, 12, 0, -16 }, // 0x24 '$'
{ 66, 19, 16, 19, 0, -15 }, // 0x25 '%'
{ 104, 14, 16, 16, 1, -15 }, // 0x26 '&'
{ 132, 3, 6, 5, 1, -15 }, // 0x27 '''
{ 135, 6, 20, 7, 1, -15 }, // 0x28 '('
{ 150, 6, 20, 7, 0, -15 }, // 0x29 ')'
{ 165, 8, 7, 8, 0, -15 }, // 0x2A '*'
{ 172, 10, 10, 13, 1, -9 }, // 0x2B '+'
{ 185, 3, 7, 5, 1, -2 }, // 0x2C ','
{ 188, 5, 3, 7, 1, -6 }, // 0x2D '-'
{ 190, 3, 3, 5, 1, -2 }, // 0x2E '.'
{ 192, 6, 16, 6, 0, -15 }, // 0x2F '/'
{ 204, 10, 16, 12, 1, -15 }, // 0x30 '0'
{ 224, 7, 16, 12, 1, -15 }, // 0x31 '1'
{ 238, 10, 16, 12, 1, -15 }, // 0x32 '2'
{ 258, 10, 16, 12, 1, -15 }, // 0x33 '3'
{ 278, 10, 16, 12, 1, -15 }, // 0x34 '4'
{ 298, 10, 16, 12, 1, -15 }, // 0x35 '5'
{ 318, 10, 16, 12, 1, -15 }, // 0x36 '6'
{ 338, 10, 16, 12, 1, -15 }, // 0x37 '7'
{ 358, 11, 16, 12, 0, -15 }, // 0x38 '8'
{ 380, 10, 16, 12, 1, -15 }, // 0x39 '9'
{ 400, 3, 11, 5, 1, -10 }, // 0x3A ':'
{ 405, 3, 15, 5, 1, -10 }, // 0x3B ';'
{ 411, 10, 10, 13, 1, -9 }, // 0x3C '<'
{ 424, 11, 8, 13, 1, -8 }, // 0x3D '='
{ 435, 10, 10, 13, 1, -9 }, // 0x3E '>'
{ 448, 11, 16, 13, 1, -15 }, // 0x3F '?'
{ 470, 19, 19, 21, 1, -15 }, // 0x40 '@'
{ 516, 15, 16, 15, 0, -15 }, // 0x41 'A'
{ 546, 12, 16, 15, 2, -15 }, // 0x42 'B'
{ 570, 14, 16, 16, 1, -15 }, // 0x43 'C'
{ 598, 13, 16, 16, 2, -15 }, // 0x44 'D'
{ 624, 11, 16, 14, 2, -15 }, // 0x45 'E'
{ 646, 11, 16, 14, 2, -15 }, // 0x46 'F'
{ 668, 14, 16, 17, 1, -15 }, // 0x47 'G'
{ 696, 12, 16, 16, 2, -15 }, // 0x48 'H'
{ 720, 3, 16, 7, 2, -15 }, // 0x49 'I'
{ 726, 10, 16, 12, 1, -15 }, // 0x4A 'J'
{ 746, 14, 16, 16, 2, -15 }, // 0x4B 'K'
{ 774, 10, 16, 13, 2, -15 }, // 0x4C 'L'
{ 794, 15, 16, 19, 2, -15 }, // 0x4D 'M'
{ 824, 13, 16, 16, 2, -15 }, // 0x4E 'N'
{ 850, 15, 16, 17, 1, -15 }, // 0x4F 'O'
{ 880, 12, 16, 15, 2, -15 }, // 0x50 'P'
{ 904, 15, 17, 17, 1, -15 }, // 0x51 'Q'
{ 936, 13, 16, 16, 2, -15 }, // 0x52 'R'
{ 962, 13, 16, 15, 1, -15 }, // 0x53 'S'
{ 988, 12, 16, 14, 1, -15 }, // 0x54 'T'
{ 1012, 12, 16, 16, 2, -15 }, // 0x55 'U'
{ 1036, 14, 16, 14, 0, -15 }, // 0x56 'V'
{ 1064, 20, 16, 21, 0, -15 }, // 0x57 'W'
{ 1104, 14, 16, 15, 0, -15 }, // 0x58 'X'
{ 1132, 14, 16, 14, 0, -15 }, // 0x59 'Y'
{ 1160, 11, 16, 13, 1, -15 }, // 0x5A 'Z'
{ 1182, 6, 20, 7, 1, -15 }, // 0x5B '['
{ 1197, 6, 16, 6, 0, -15 }, // 0x5C '\'
{ 1209, 6, 20, 7, 0, -15 }, // 0x5D ']'
{ 1224, 10, 9, 13, 1, -14 }, // 0x5E '^'
{ 1236, 12, 2, 12, 0, 3 }, // 0x5F '_'
{ 1239, 5, 3, 5, 0, -15 }, // 0x60 '`'
{ 1241, 11, 13, 12, 1, -11 }, // 0x61 'a'
{ 1259, 12, 16, 13, 1, -15 }, // 0x62 'b'
{ 1283, 10, 12, 12, 1, -11 }, // 0x63 'c'
{ 1298, 11, 17, 13, 1, -15 }, // 0x64 'd'
{ 1322, 11, 12, 13, 1, -11 }, // 0x65 'e'
{ 1339, 7, 16, 7, 0, -15 }, // 0x66 'f'
{ 1353, 11, 17, 13, 1, -11 }, // 0x67 'g'
{ 1377, 11, 16, 13, 1, -15 }, // 0x68 'h'
{ 1399, 4, 16, 6, 1, -15 }, // 0x69 'i'
{ 1407, 5, 21, 6, 0, -15 }, // 0x6A 'j'
{ 1421, 11, 16, 12, 1, -15 }, // 0x6B 'k'
{ 1443, 3, 16, 6, 1, -15 }, // 0x6C 'l'
{ 1449, 17, 12, 19, 1, -11 }, // 0x6D 'm'
{ 1475, 11, 12, 13, 1, -11 }, // 0x6E 'n'
{ 1492, 11, 12, 13, 1, -11 }, // 0x6F 'o'
{ 1509, 12, 17, 13, 1, -11 }, // 0x70 'p'
{ 1535, 11, 17, 13, 1, -11 }, // 0x71 'q'
{ 1559, 7, 12, 8, 1, -11 }, // 0x72 'r'
{ 1570, 10, 12, 12, 1, -11 }, // 0x73 's'
{ 1585, 7, 15, 7, 0, -14 }, // 0x74 't'
{ 1599, 11, 12, 13, 1, -11 }, // 0x75 'u'
{ 1616, 11, 12, 12, 0, -11 }, // 0x76 'v'
{ 1633, 17, 12, 17, 0, -11 }, // 0x77 'w'
{ 1659, 12, 12, 12, 0, -11 }, // 0x78 'x'
{ 1677, 12, 17, 12, 0, -11 }, // 0x79 'y'
{ 1703, 9, 12, 11, 1, -11 }, // 0x7A 'z'
{ 1717, 6, 20, 8, 1, -15 }, // 0x7B '{'
{ 1732, 2, 20, 6, 2, -15 }, // 0x7C '|'
{ 1737, 6, 20, 8, 2, -15 }, // 0x7D '}'
{ 1752, 10, 4, 11, 0, -6 } }; // 0x7E '~'
const GFXfont FreeSansBold11pt7b PROGMEM = {
(uint8_t *)FreeSansBold11pt7bBitmaps,
(GFXglyph *)FreeSansBold11pt7bGlyphs,
0x20, 0x7E, 26 };
// Approx. 2429 bytes

@ -1,35 +1,39 @@
#include <Wire.h>
// display mapping suggestion for Arduino MEGA
// display mapping for Arduino MEGA
// BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51
#include <GxEPD2_BW.h>
#include <Fonts/FreeSans18pt7b.h>
#include <Fonts/FreeSansBold12pt7b.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include "FreeSansBold11pt7b.h"
#include "FreeSans22pt7b.h"
#include <Fonts/TomThumb.h>
#include <MD_DS3231.h>
//#include <BME280I2C.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include<bc_co2_module_arduino.h>
#include <BME280I2C.h>
#include <bc_co2_module_arduino.h>
//BME280I2C bme;
Adafruit_BME280 bme;
/**************************** BME280 setup **********************************/
BME280I2C::Settings settings(
BME280::OSR_X1,
BME280::OSR_X1,
BME280::OSR_X1,
BME280::Mode_Forced,
BME280::StandbyTime_1000ms,
BME280::Filter_4,
BME280::SpiEnable_False,
0x76 // I2C address. I2C specific.
);
/**************************** Serial setup ************************************/
BME280I2C bme(settings);
/**************************** Serial setup **********************************/
#define BAUDRATE 115200
/**************************** I2C setup **************************************/
#define BME280_ADDR 0x76
#define BME280_ID 0x60
/**************************** Screen setup **********************************/
#define MAX_DISPAY_BUFFER_SIZE 32 //
#define MAX_DISPAY_BUFFER_SIZE 32
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPAY_BUFFER_SIZE / (EPD::WIDTH / 8))
GxEPD2_BW<GxEPD2_290, MAX_HEIGHT(GxEPD2_290)> display(GxEPD2_290(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7));
/*************************** Global variables *********************************/
/*************************** Global variables *******************************/
struct data {
float temp;
@ -41,18 +45,17 @@ struct data {
};
volatile static struct data dataset;
static struct lp8_t sensor;
char incoming[40];
bool commRecvd = false;
char ssid[16];
char ip[16];
//
static byte bmeerr = 0;
/******************************* Setup routine ******************************/
void setup() {
char buf;
static byte i=0;
ADCSRA = 0; //turn off adc to save power as it is not needed
pinMode(13, OUTPUT);
digitalWrite(13, LOW); //turn off led
@ -61,50 +64,188 @@ void setup() {
Wire.begin();
Serial.print(F("\r\n***Enviro data monitor***\r\n"));
//start co2 module
init_module();
while(!bme.begin(BME280_ADDR)) { //for adafruit driver
// while(!bme.begin()) { //for bme280i2c driver
Serial.println(F("Could not find BME280 sensor"));
delay(1000);
}
//for adafruit driver
if(bme.sensorID() == BME280_ID){
Serial.println(F("Found BME280 sensor"));
}
else {
Serial.println(F("Found unknown sensor"));
}
//for bme280i2c driver
// switch(bme.chipModel()) {
// case BME280::ChipModel_BME280:
// Serial.println(F("Found BME280 sensor!"));
// break;
// case BME280::ChipModel_BMP280:
// Serial.println(F("Found BMP280 sensor! No Humidity available."));
// break;
// default:
// Serial.println(F("Error, found UNKNOWN sensor."));
// }
//start co2 module
init_co2_module();
display.init(); //init display
delay(100);
layoutScreen(); //print static parts of screen
//make sure we're always in 24hr mode
if(RTC.status(DS3231_12H)){ //invert to change to 12h
RTC.control(DS3231_12H, DS3231_OFF); //use DS3231_ON to enable 12h mode
switch (RTC.status(DS3231_12H) ){
case 0: Serial.println(F("24h mode"));
case 1: Serial.println(F("12h mode")); //should not occur
//make sure we're always in 24hr mode, invert to change to 12h
switch (RTC.status(DS3231_12H)) {
case DS3231_OFF:
Serial.println(F("RTC in 24h mode"));
break;
case DS3231_ON:
Serial.println(F("RTC in 12h mode, fixing")); //should not occur
RTC.control(DS3231_12H, DS3231_OFF);
break;
default:
break;
}
Serial.println(F("Waiting for ESP to boot"));
bool n;
static byte tries = 0;
Serial.print("[");
while(1) {
delay(1000);
Serial.print("=");
n = readNetInfo();
if(n == true) {
break;
}
else {
tries++;
if(tries >= 33) {
Serial.print("X");
Serial.println();
Serial.println(F("Could not read connection info, likely no network connection"));
display.setFont(&TomThumb);
display.setTextColor(GxEPD_BLACK);
uint16_t x = 10;
uint16_t y = 277;
display.setPartialWindow(0, 270, display.width(), 20);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(x,y);
display.print("Network error");
}
while (display.nextPage());
tries = 0;
break;
}
}
}
static byte retries = 0;
bool t;
while(1){ //sync time with network
delay(5000);
t = syncTime();
if(t == true) {
break;
}
else {
retries++;
if(retries > 4){ //break after 5 tries
Serial.println(F("Could not sync time\n"));
break;
}
}
}
delay(2000); //leave time for esp to connect to wireless network
retries = 0;
printRTCTimeToScreen(); //print time to screen
printRTCDateToScreen(); //print date to screen
bool tsens;
while(1) {
tsens = bme.begin();
if(tsens == true) {
switch(bme.chipModel()) {
case BME280::ChipModel_BME280:
Serial.println(F("Found BME280 sensor!"));
break;
case BME280::ChipModel_BMP280:
Serial.println(F("Found BMP280 sensor! No Humidity available."));
break;
default:
Serial.println(F("Error, found unknown sensor."));
}
break;
}
else {
delay(2000);
retries++;
if(retries > 4) {
Serial.println(F("Could not find BME280 sensor."));
//display error message on screen
display.setFont(&FreeSansBold11pt7b);
display.setTextColor(GxEPD_BLACK);
int16_t tbx, tby; uint16_t tbw, tbh;
display.getTextBounds("SENS ERR!", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t y = (92 - tbh) - tby + 20;
display.setPartialWindow(0, 70 + 20, display.width(), 33);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(6, y);
display.print(F("SENS ERR!"));
}
while (display.nextPage());
bmeerr = 1;
break;
}
}
}
Serial.println(F("Setup complete"));
};
/********************************* MAINLOOP ***************************************/
void loop() {
static byte oldmins;
RTC.readTime();
if(RTC.m != oldmins){ //run this every minute
printRTCTimeToScreen(); //update time on screen
if(bmeerr == 0){ //only attempt to measure anything if the sensor is present
doStuff(); //acquire data
sendDataToServer(); //send over to esp for publishing
printDataToScreen(); //update values on screen
}
oldmins = RTC.m; //save old value
}
else if((RTC.m == 0 || RTC.m == 30) && RTC.s == 55) {
delay(1100); //delay to prevent firing multiple times
display.refresh(); //perform a full display refresh every half hour, removes quick refresh artifacts
}
else if(RTC.m == 0 && RTC.h == 0 && RTC.s == 40){
delay(1100); //delay to prevent firing multiple times
printRTCDateToScreen(); //refresh date on midnight
}
else if(RTC.m == 0 && RTC.h == 2 && RTC.s == 33) { //resync time at 2am
static byte retries = 0;
bool t;
while(1){
delay(2000);
t = syncTime();
if(t == true) {
break;
}
else {
retries++;
if(retries > 4){ //break after 5 tries
Serial.println(F("Could not sync time\n"));
break;
}
}
}
}
delay(500);
};
/************************************************************************************/
void doStuff() {
dataset.temp = measureTemp();
dataset.hum = measureHum();
dataset.rhum = round(dataset.hum);
dataset.pres = measurePres();
dataset.rpres = round(dataset.pres);
dataset.co2 = measureCO2();
};
bool readNetInfo() {
char buf;
bool commRecvd = false;
static byte i=0;
static bool recv = false;
while(Serial2.available() > 0) {
buf = Serial2.read();
if(recv == true) {
@ -125,7 +266,7 @@ void setup() {
}
i = 0;
if(commRecvd == true){
char* token = strtok(incoming, ",");
while(token != NULL){
@ -140,70 +281,17 @@ void setup() {
}
i = 0;
commRecvd = false;
printConnInfo();
Serial.print("]");
Serial.println();
Serial.print(F("Got conn info:\n"));
Serial.println(ssid);
Serial.println(ip);
printConnInfo();
return true;
}
return false;
}
static byte retries = 0;
while(!syncTime()){ //sync time with network
delay(1750); //should take about a second and a half
retries++;
if(retries > 4){
break; //break the loop in case of no connectivity/ other error
}
}
printRTCTimeToScreen(); //print time to screen
printRTCDateToScreen(); //print date to screen
Serial.println(F("Setup complete"));
};
void loop() {
static byte oldmins;
RTC.readTime();
if(RTC.m != oldmins){ //run this every minute
printRTCTimeToScreen(); //update time on screen
doStuff(); //acquire data
sendDataToServer(); //send over to esp for publishing
printTempToScreen(); //update values on screen
oldmins = RTC.m; //save old value
}
else if((RTC.m == 0 || RTC.m == 30) && RTC.s == 55) {
delay(1100); //delay to prevent firing multiple times
display.refresh(); //perform a full display refresh every half hour, removes quick refresh artifacts
}
else if(RTC.m == 0 && RTC.h == 0 && RTC.s == 40){
delay(1100); //delay to prevent firing multiple times
printRTCDateToScreen(); //change date on midnight
}
//sync time every morning and evening. only here for safety should the device run for long periods of time without restarting
if ((RTC.h == 6 || RTC.h == 22) && (RTC.m == 00) && RTC.s == 40){
delay(1100); //delay to prevent firing multiple times
static byte retries = 0;
while(!syncTime()){ //sync time with network
delay(1500); //should take about a second and a half
retries++;
if(retries > 4){
break; //break the loop in case of no connectivity
}
}
}
};
void doStuff() {
//function to acquire and save data from sensors
dataset.temp = measureTemp();
dataset.hum = measureHum();
dataset.rhum = round(dataset.hum);
dataset.pres = measurePres();
dataset.rpres = round(dataset.pres);
dataset.co2 = measureCO2();
};
bool syncTime() {
char tbuf;
@ -211,12 +299,15 @@ bool syncTime() {
static bool trecvn = false;
char tarry[21];
static byte j = 0;
byte dst;
dst = checkDST();
Serial.print(F("Syncing time...\n"));
delay(50);
delay(10);
Serial2.print("?ntp");
Serial2.print("\n");
delay(25);
delay(300);
while(Serial2.available() > 0 && trecvd == false){
tbuf = Serial2.read();
if(trecvn == true) {
@ -235,6 +326,7 @@ bool syncTime() {
trecvn = true;
}
}
j = 0;
if(trecvd == true){
Serial.println(tarry);
char* token = strtok(tarry, "/");
@ -249,7 +341,17 @@ bool syncTime() {
RTC.dd = atoi(token);
};
if(j == 3) {
RTC.h = atoi(token);
if(dst == 1) {
if(atoi(token) == 23) {
RTC.h = 0;
}
else {
RTC.h = atoi(token) + 1;
}
}
if(dst == 0) {
RTC.h = atoi(token);
}
};
if(j == 4){
RTC.m = atoi(token);
@ -261,11 +363,12 @@ bool syncTime() {
j++;
}
j = 0;
Serial.println(F("NTP sync complete"));
RTC.writeTime();
Serial.println(F("NTP sync complete"));
trecvd = false;
return(true);
return true;
}
return false;
}
void layoutScreen() {
@ -277,13 +380,13 @@ void layoutScreen() {
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(8, 69);
display.setCursor(8, 69+20);
display.print(F("Temperature:"));
display.setCursor(8, (69 + 40));
display.setCursor(8, (69 + 40 + 20));
display.print(F("Humidity:"));
display.setCursor(8, (69 + 80));
display.setCursor(8, (69 + 80) + 20);
display.print(F("Pressure:"));
display.setCursor(8, (69 + 120));
display.setCursor(8, (69 + 120) + 20);
display.print(F("CO2 concentration:"));
display.setCursor(8, 269);
display.print(F("Network info:"));
@ -319,43 +422,31 @@ void printConnInfo() {
void printRTCTimeToScreen() {
char delim[] = ":";
byte hrs;
byte DST;
DST = checkDST(); //check whether DST is active and set the var accordingly
RTC.readTime();
hrs = RTC.h;
if(DST == 1){
hrs = hrs + 1;
}
display.setFont(&FreeSans18pt7b);
display.setFont(&FreeSans22pt7b);
display.setTextColor(GxEPD_BLACK);
int16_t tbx, tby; uint16_t tbw, tbh;
display.getTextBounds(delim, 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x = ((display.width() / 2) - tbw);
uint16_t y = ((32 - tbh) / 2) - (tby - 4);
uint16_t y = ((32 - tbh) / 2) - (tby - 4) + 10;
display.getTextBounds("00", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x2 = (display.width() / 2) - 8 - tbw ;
uint16_t y2 = ((32 - tbh) / 2) - ( tby - 4);
uint16_t y2 = ((32 - tbh) / 2) - ( tby - 4) + 10;
display.getTextBounds("00", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x3 = (display.width() / 2) + 8;
display.setPartialWindow(0, 0, display.width(), (display.height() - (display.height() - 32)));
display.setPartialWindow(0, 0, display.width(), (display.height() - (display.height() - 32)) + 20);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(x, y);
display.print(delim);
display.setCursor(x2, y2);
if(hrs < 10) {
if(RTC.h < 10) {
display.print("0");
display.print(hrs);
display.print(RTC.h);
}
else {
display.print(hrs);
display.print(RTC.h);
}
display.setCursor(x3, y2);
if(RTC.m < 10) {
@ -371,14 +462,15 @@ void printRTCTimeToScreen() {
void printRTCDateToScreen() {
RTC.readTime();
display.setFont(&FreeSansBold9pt7b);
display.setTextColor(GxEPD_BLACK);
int16_t tbx, tby; uint16_t tbw, tbh;
display.getTextBounds("00 - 00 - 0000", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x = (display.width() / 2) - (tbw / 2) ;
uint16_t y = 48 + (tbh / 2);
uint16_t y = 48 + (tbh / 2) + 20;
display.setPartialWindow(0, 33, display.width(), 31);
display.setPartialWindow(0, 33 + 20, display.width(), 31);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
@ -404,34 +496,36 @@ void printRTCDateToScreen() {
while(display.nextPage());
}
void printTempToScreen() {
void printDataToScreen() {
struct data *dtsp = &dataset;
display.setFont(&FreeSansBold9pt7b);
display.setFont(&FreeSansBold11pt7b);
display.setTextColor(GxEPD_BLACK);
int16_t tbx, tby; uint16_t tbw, tbh;
display.getTextBounds("00.0 C", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x = ((display.width() - tbw) / 2) - tbx;
uint16_t y = (92 - tbh) - tby;
uint16_t y = (92 - tbh) - tby +20;
display.getTextBounds("00 %", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x2 = ((display.width() - tbw) / 2) - tbx;
uint16_t y2 = (132 - tbh) - tby;
uint16_t y2 = (132 - tbh) - tby + 20;
display.getTextBounds("1488 hpa", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x3 = ((display.width() - tbw) / 2) - tbx;
uint16_t y3 = ( 176 - tbh) - tby;
uint16_t y3 = ( 176 - tbh) - tby + 20;
display.getTextBounds("1488 ppm", 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t y4 = ( 216 - tbh) - tby;
uint16_t y4 = ( 216 - tbh) - tby + 20;
display.setPartialWindow(0, 70, display.width(), 33);
display.setPartialWindow(0, 70 + 20, display.width(), 33);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(x, y);
display.print(dtsp -> temp, 1);
display.print(F(" C"));
display.drawCircle(x+48,80 + 20,3,GxEPD_BLACK);
display.drawCircle(x+48,80 + 20,2,GxEPD_BLACK); //quick and dirty way to get a "degrees symbol"
display.print(F(" C"));
}
while (display.nextPage());
display.setPartialWindow(0, 110, display.width(), 33);
display.setPartialWindow(0, 110 + 20, display.width(), 33);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
@ -441,7 +535,7 @@ void printTempToScreen() {
}
while(display.nextPage());
display.setPartialWindow(0, 150 ,display.width(), 33);
display.setPartialWindow(0, 150 + 20,display.width(), 33);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
@ -451,7 +545,7 @@ void printTempToScreen() {
}
while(display.nextPage());
display.setPartialWindow(0, 190 ,display.width(), 33);
display.setPartialWindow(0, 190 +20 ,display.width(), 33);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
@ -463,45 +557,48 @@ void printTempToScreen() {
}
float measureTemp() {
// BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
int temps[6];
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
int temps[5];
//light led while measuring
digitalWrite(13, HIGH);
Serial.print(F("Measuring temperature..."));
Serial.print(F("Measuring temperature"));
for(char i = 0; i <= 5; i++){
temps[i] = bme.readTemperature() * 100;
for(char i = 0; i < 5; i++){
temps[i] = bme.temp() * 100;
Serial.print(F("."));
delay(1000);
}
float temp;
temp = (temps[1] + temps[2] + temps[3] + temps[4] + temps[5]) / 5;
temp = (temps[0] + temps[1] + temps[2] + temps[3] + temps[4]) / 5;
Serial.print(F("done: "));
Serial.println(temp / 100);
digitalWrite(13, LOW);
return temp / 100;
return temp/100;
}
float measureHum() {
int hums[6];
float measureHum() {
int hums[5];
//light led while measuring
digitalWrite(13, HIGH);
Serial.print(F("Measuring humidity..."));
Serial.print(F("Measuring humidity"));
for(char i = 0; i <= 5; i++){
hums[i] = bme.readHumidity() * 100;
for(char i = 0; i < 5; i++){
hums[i] = bme.hum() * 100;
Serial.print(F("."));
delay(1000);
}
float hum;
hum = (hums[1] + hums[2] + hums[3] + hums[4] + hums[5]) / 5;
hum = (hums[0] + hums[1] + hums[2] + hums[3] + hums[4]) / 5;
Serial.print(F("done: "));
Serial.println(hum / 100);
@ -511,23 +608,23 @@ float measureHum() {
}
float measurePres() {
// BME280::PresUnit presUnit(BME280::PresUnit_hPa);
float presrs[6];
BME280::PresUnit presUnit(BME280::PresUnit_hPa);
float presrs[5];
//light led while measuring
digitalWrite(13, HIGH);
Serial.print(F("Measuring pressure..."));
Serial.print(F("Measuring pressure"));
for(char i = 0; i <= 5; i++){
// presrs[i] = bme.pres();
presrs[i] = bme.readPressure() / 100.0F; //returns in Pa, divide by 100 to get value in hPa
for(char i = 0; i < 5; i++){
presrs[i] = bme.pres(BME280::PresUnit_hPa);
Serial.print(F("."));
delay(1000);
}
float pres;
pres = (presrs[1] + presrs[2] + presrs[3] + presrs[4] + presrs[5]) / 5;
pres = (presrs[0] + presrs[1] + presrs[2] + presrs[3] + presrs[4]) / 5;
Serial.print(F("done: "));
Serial.println(pres);
@ -538,9 +635,9 @@ float measurePres() {
int16_t measureCO2(){
digitalWrite(13, HIGH);
Serial.print(F("Measuring CO2..."));
Serial.print(F("Measuring CO2....."));
int16_t co2conc = get_concentration();
int16_t co2conc = get_co2_concentration(uint16_t(dataset.pres * 10));
Serial.print(F("done:"));
Serial.println(co2conc);