From 111da49b5ae3ed8992d45345e1fd0b2c256b6186 Mon Sep 17 00:00:00 2001 From: Me Here Date: Thu, 28 May 2026 21:30:03 -0500 Subject: [PATCH] PM_K-1 CircuitPython: fix MemoryError + red/blue swap (from on-board test) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On hardware the app rendered, beeped and took input, then died with MemoryError at the text Bitmap alloc — the two ~37KB base64 font strings stayed pinned in RAM. Move the fonts to small binary files read at boot (font_m.bin / font_l.bin), drop the base64 + binascii, and gc.collect() before each text bitmap. code.py 56KB -> 20KB and RAM use drops ~37KB+. Also: cyan rendered as yellow (R/B swapped) -> MADCTL 0x40 -> 0x48. Bundle + README updated to include the font blobs. (LED still needs the neopixel lib.) Co-Authored-By: Claude Opus 4.7 (1M context) --- build.sh | 2 +- pico-cp/README.md | 5 +++-- pico-cp/__pycache__/code.cpython-312.pyc | Bin 68403 -> 31772 bytes pico-cp/code.py | 22 +++++++++++----------- pico-cp/font_l.bin | Bin 0 -> 15792 bytes pico-cp/font_m.bin | Bin 0 -> 11818 bytes 6 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 pico-cp/font_l.bin create mode 100644 pico-cp/font_m.bin diff --git a/build.sh b/build.sh index 5533d05..41d76b6 100755 --- a/build.sh +++ b/build.sh @@ -39,7 +39,7 @@ pathlib.Path("dist/pico-main.py").write_text(pathlib.Path("pico/main.py").read_t print("copied pico-main.py") import zipfile # PM_K-1 CircuitPython drive bundle (download → unzip onto CIRCUITPY) with zipfile.ZipFile("dist/pm_k1_circuitpy.zip", "w", zipfile.ZIP_DEFLATED) as z: - for f in ("code.py", "programs.json", "README.md"): + for f in ("code.py", "programs.json", "font_m.bin", "font_l.bin", "README.md"): z.write("pico-cp/" + f, f) print("zipped pm_k1_circuitpy.zip") PY diff --git a/pico-cp/README.md b/pico-cp/README.md index 1b5bf81..5c48e56 100644 --- a/pico-cp/README.md +++ b/pico-cp/README.md @@ -15,9 +15,10 @@ same program‑string language as . 1. **Flash CircuitPython:** hold **BOOTSEL**, plug in, and drop the CircuitPython `.uf2` for your board onto the `RPI‑RP2` drive ( — or the Pico 2 / W build). It reboots and a **`CIRCUITPY`** drive appears. -2. **Copy the files** onto `CIRCUITPY` (drag‑and‑drop — it's a normal drive now): +2. **Copy everything from the bundle** onto `CIRCUITPY` (drag‑and‑drop — it's a normal drive now): - `code.py` (this firmware — runs on boot) - `programs.json` (your grooves) + - `font_m.bin`, `font_l.bin` (the anti‑aliased fonts — kept as files to save RAM) 3. It starts immediately. Editing `programs.json` (or re‑saving it from the editor) makes CircuitPython **auto‑reload** with the new tracks. @@ -39,7 +40,7 @@ Each `prog` is a program string from the web editor. Add/replace entries and sav ## Calibration (flip flags at the top of `code.py`) -- **Red/blue swapped:** change `MADCTL = 0x40` to `0x48`. +- **Red/blue swapped:** flip `MADCTL` between `0x48` (default) and `0x40`. - **Colours look negative:** toggle `INVERT_COLORS`. - **Taps land wrong:** set `TOUCH_DEBUG = True`, watch the serial output, then set `TOUCH_SWAP_XY` / `TOUCH_INVERT_X` / `TOUCH_INVERT_Y`. diff --git a/pico-cp/__pycache__/code.cpython-312.pyc b/pico-cp/__pycache__/code.cpython-312.pyc index bbbc24b9f80ab3762079724963836957e35aaaad..851f8f3990c6377620725a0d2efd2e431cfea3a3 100644 GIT binary patch delta 6304 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 Yl{a0vl@qi##|z-(w8~i;e+)7HKen>&1ONa4 literal 68403 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 dDlYNmDT-f~8p}

q#8R6is=S>Ut&z`CkZIsjC10 diff --git a/pico-cp/code.py b/pico-cp/code.py index fc3e3e1..02439b7 100644 --- a/pico-cp/code.py +++ b/pico-cp/code.py @@ -15,8 +15,7 @@ # # Untested-panel notes & calibration flags are in CONFIG + pico-cp/README.md. -import board, busio, digitalio, analogio, pwmio, displayio, vectorio, time, json -from binascii import a2b_base64 +import board, busio, digitalio, analogio, pwmio, displayio, vectorio, time, json, gc try: # CircuitPython 9.x from fourwire import FourWire from busdisplay import BusDisplay @@ -31,7 +30,7 @@ except ImportError: # ============================== CONFIG (tweak if needed) ============================== SPI_BAUD = 40_000_000 WIDTH, HEIGHT = 320, 480 -MADCTL = 0x40 # portrait, RGB order (displayio sends RGB565). If red/blue look swapped, try 0x48. +MADCTL = 0x48 # portrait; 0x48 swaps R/B for this BGR panel (cyan reads cyan). Use 0x40 if reversed. INVERT_COLORS = True # most ST7796 modules need inversion ON; set False if colours look negative # Touch (GT911) — flip if taps land wrong: TOUCH_SWAP_XY = False @@ -64,12 +63,11 @@ C_CYAN, C_AMBER, C_GREEN, C_DIM = 0x0AB3F7, 0xFF9B2E, 0x2FE07A, 0x243240 C_BTN = 0x1C222C LEVEL_RGB = {2: (255, 110, 0), 1: (0, 150, 255), 3: (130, 70, 255)} -# ============================== ANTI-ALIASED FONTS (baked; see pico/gen_font.py) ============================== -FONT_M_B64 = "YgAgAAAAAAgAIQoQAAUKACILEAAFCwAjEhAABRIAJA8TAAUPACUWEAAFFgAmExAABRMAJwcQAAUHACgKFAAECgApChQABAoAKgwQAAUMACsSDQAIEgAsCAcAEQgALQkIAA0JAC4IBAARCAAvCRIABQgAMA8QAAUPADEPEAAFDwAyDxAABQ8AMw8QAAUPADQPEAAFDwA1DxAABQ8ANg8QAAUPADcPEAAFDwA4DxAABQ8AOQ8QAAUPADoJDAAJCQA7CQ8ACQkAPBINAAgSAD0SCwAKEgA+Eg0ACBIAPw0QAAUNAEAWEwAFFgBBERAABREAQhEQAAURAEMQEAAFEABEEhAABRIARQ8QAAUPAEYPEAAFDwBHEhAABRIASBIQAAUSAEkIEAAFCABKChT+BQgASxIQAAURAEwOEAAFDgBNFhAABRYAThIQAAUSAE8TEAAFEwBQEBAABRAAURMTAAUTAFIREAAFEQBTEBAABRAAVA8QAAUPAFUSEAAFEgBWERAABREAVxgQAAUYAFgREAAFEQBZEhD/BRAAWhAQAAUQAFsKFAAECgBcCRIABQgAXQoUAAQKAF4SEAAFEgBfCwUAFQsAYAsSAAMLAGEPDAAJDwBiEBEABBAAYw0MAAkNAGQQEQAEEABlDwwACQ8AZgoRAAQKAGcQEQAJEABoEBEABBAAaQgRAAQIAGoJFv8ECABrEBEABA8AbAgRAAQIAG0XDAAJFwBuEAwACRAAbw8MAAkPAHAQEQAJEABxEBEACRAAcgsMAAkLAHMNDAAJDQB0Cw8ABgsAdRAMAAkQAHYPDAAJDgB3FAwACRQAeA4MAAkOAHkOEQAJDgB6DQwACQ0AexAUAAQQAHwIFgAECAB9EBQABBAAfhIKAAsSJcAREgAGESW2ERIABhEloBUSAAYVAA7/8AAADv/wAAAO//AAAA7/8AAADv/wAAAO//AAAA3/0AAAC/+wAAAJ/5AAAAf/cAAAAAAAAAAAAAAAAA7/8AAADv/wAAAO//AAAA7/8AAA76Av9gAO+gL/YADvoC/2AA76Av9gAO+gL/YADvoC/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/oAf+AAAAAADvcAr7AAAAAAL/QA73AAAAAAX/EB/0AAAAAAj9AE/xAAAE/////////wAE/////////wAAAF/wAv9AAAAAAJ/ABv8AAAAAAN+ACvwAAACP////////sACP////////sAAACvwAb/AAAAAADvgAr7AAAAAAL/MA73AAAAAAb/AC/zAAAAAAAAP4AAAAAAAAP4AAAAAAGM7/2mEAAD//////0AAN/6T4JJsAA//yP4AAAABP/5P4AAAAAv///8cwAAAL/////9QAABr/////8wAAAnv///+gAAAAP5Xv/AAAAAP4Cv+wBMcxP4Lv9wBP//////sAADi9//61AAAAAAP4AAAAAAAAP4AAAAAAAAP4AAAAAATP/EAAAAf+AAAAX///9QAAL/QAAADv4i7+AAC/oAAAA/+ACP8gBf8QAAAE/2AG/0Ae9gAAAAP/gAj/IJ/AAAAAAO/iLv4D/yAAAAAAX///9Q34BM/8UAAEz/xAf9Bf///2AAAAAAL/QO/iLv8AAAAAC/oC/5AH/zAAAABf4QP/cAb/UAAAAe9gAv+QB/8wAAAJ/AAA7+It/gAAAD/yAABf///2AAAA34AAAATP/FAAAAA63+xyAAAAAACP////8AAAAAAf/9ICbAAAAAAD//oAAAAAAAAAH//zAAAAAAAAAK//4QAAAAAAAK///8AADf9wAJ////+gAP/1AD//wu//gD//IAj/9AP//1n/0ACv/xAG////+AAJ//IACf///xAAX/+QAAz//2AAAM//khTf//sAAAHP///////7AAAAW+/ttiz/+wAO+gAA76AADvoAAO+gAA76AADvoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC//EAAAv/kAAAP/8gAACv/AAAAf/2AAAG//IAAAr/4AAADv+wAAAP/6AAAB//kAAAH/+QAAAP/6AAAA7/sAAACv/gAAAG//IAAAH/9gAAAK/8AAAAP/8gAAAL/5AAAAL/8QAP/zAAAAj/wAAAAf/0AAAAv/sAAABf/xAAAB//cAAADv+wAAAK/+AAAAn/8AAACP/yAAAI//IAAAn/8AAACv/wAAAO/7AAAB//cAAAb/8gAAC/+wAAAf/0AAAI/8AAAA//MAAAAAL6AAAAAAL6AAABxgL6AqgD3+j8r/kABM//+BAABM//+BAD3+j8r/kB1gL6AqgAAAL6AAAAAAL6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAH/gAAAAAAAAAH/gAAAAAAAAAH/gAAAAAAAAAH/gAAAAACv////////EACv////////EACv////////EAAAAAH/gAAAAAAAAAH/gAAAAAAAAAH/gAAAAAAAAAH/gAAAAAAAAAH/gAAAAADP/xAAz/8QAM//EADf/QAC//MABv9wAAv8AAAN////AN////AN////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz/8QAM//EADP/xAAz/8QAAAI/QAAAN+AAAAv8wAAB/4AAADPkAAAH/QAAAb/AAAAv6AAAA/1AAAF/xAAAK+wAAAO9gAABP8QAACfwAAADvcAAAP/IAAAj9AAAA34AAAAAABK7+xgAAAAn////9EAAI//YD7/wAAf/7AAb/9gB//3AAL//AC//0AAD//wDf/zAADv/yDv/zAADv/zDv/zAADv/zDf/zAADv/yC//0AAD//wB//3AAL//AAf/7AAb/9gAI//YD7/wAAAn////9EAAABK7+xgAAAASM//8gAAAI////8gAAAHtzz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAAAAz/8gAAAG///////AAG///////AADe9/+tQAAA//////7AAA/+iBO//kAA/UAAE//8AA0AAAA//8wAAAAAA7/8wAAAAAB//8QAAAAAI//oAAAAABP/+IAAAAAT//zAAAAAG//9AAAAAB//+MAAAAAn//SAAAAAK//wQAAAABP//////9gBP//////9gABa9/+xxAAAN/////+MAALgxBN//0AAAAAAC//8QAAAAAA//8gAAAAAC//4AAAAABN//UAAADP///DAAAADP///8IAAAAAE7//4AAAAAAA3/9gAAAAAAr/+AAAAAAA3/9gB6UgA6//4QCP/////+MAAFnO/9tgAAAAAAHv//AAAAAAv///AAAAAG////AAAAA//v//AAAADf9e//AAAAr/oO//AAAF/+AO//AAAv/0AO//AADP+QAO//AAD/0AAO//AAD////////0D////////0AAAAAO//AAAAAAAO//AAAAAAAO//AAAAAAAO//AAAK//////kAAK//////kAAK/6AAAAAAAK/6AAAAAAAK/6AAAAAAAK/6AAAAAAAK//7/yBAAAK//////QAAJhBAq//8gAAAAAAz/+AAAAAAAf/+wAAAAAAf/+wAAAAAAz/+ABMcxAq//8QBP/////+MAADjN/+twAAAAAFrv7JMAAAHP////8QAA3/5iAlsQAI//IAAAAAAP/5AAAAAABP/5rf61AACP//////kACf//sRz/9gCf//EAL//QCf/+AAD//wBv/9AADv/xA//+AAD//wAN//EAL/+wAE//sRz/8wAAb/////UAAAAp3/2SAACP//////+QCP//////+QAAAAAA//9wAAAAAG//8QAAAAAN//kAAAAABP//IAAAAAC//6AAAAAAL//zAAAAAAj/+wAAAAAA7/9AAAAAAG//0AAAAAAN//UAAAAAA//+AAAAAACv/3AAAAAAH//wAAAAAAj/+AAAAAAAGM7/2jAAAE//////gAAO//YD7/8wA//8AAf/+ABP/6AAX/+AAf/8AAf/9QAI//YD7/wAAAbv///5AAABn////7MAAO/+QCz/8wB//3AAL/+wCf/0AAD//gCP/2AAL//QA//+QCz/+AAH//////sAAAOd//2lAAAAB87+pAAAAC3////5AAAO/+MX//cAB//3AA3/8QC//zAAn/9wDf/yAAj/+gDP/zAAn//QCf/2AA3//gAv/+MX///QAG///////AAAOu/sf/+QAAAAAAX/9AAAAAAA3/wAAKcwFM//IAAM/////jAAABfO/rYAAAAI//UAAI//UAAI//UAAI//UAAAAAAAAAAAAAAAAAAAAAAAAAAI//UAAI//UAAI//UAAI//UAAI//UAAI//UAAI//UAAI//UAAAAAAAAAAAAAAAAAAAAAAAAAAI//UAAI//UAAI//UAAK//IAAO/2AAA/+wAAB/4QAAAAAAAAAAABfBAAAAAAABa//xAAAAAAW////BAAAAWv///HEAAAOf///HEAAAAAr//GEAAAAAAAr/+2EAAAAAAAOv///GEAAAAAAAWv///GEAAAAAAAW////BAAAAAAABbP/xAAAAAAAAABfBAAAAAAAAAAAAAAr////////xAAr////////xAAr////////xAAAAAAAAAAAAAAAAAAAAAAAAAAr////////xAAr////////xAAr////////xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmTAAAAAAAAAAr/6DAAAAAAAAf///2CAAAAAAAErv//1yAAAAAAAErv//xgAAAAAAAEnv/xAAAAAAAEnv/xAAAAAEnv//xgAAAEnv//1yAAAAf///2CAAAAAAr/6DAAAAAAAAmTAAAAAAAAAAAAAAAAAAAAAAWt/+tAAAf/////gAB6QgPv/yAAAAAJ//QAAAAB7/8gAAAB3/+wAAAB3/+wAAAAv/+wAAAAL//gAAAABP/6AAAAAAAAAAAAAAAAAAAAAABP/5AAAAAE//kAAAAAT/+QAAAABP/5AAAAAAAASd/9thAAAAAAADz/////+AAAAAAG/9cwAVr/wQAAAF/4AAAAAD38AAAC/2AAAAAAAd9wAAr6AAbf1q+QP+AAD/IAj///75AN8wBfsAL/sRv/kAn2AH+QBv8QAf+QCfYAj3AI/wAA75AM9AB/gAb/EAH/kD/wAF+wAv+xG/+V74AAH/EAj///7//5AAAK+QAG39av6kAAAAL/YAAAAAAAAAAAAG/3AAAAAHcAAAAAB//XIAJt/xAAAAAATf/////mAAAAAAAAWt/+pgAAAAAAAC///yAAAAAACP//+AAAAAAA7///4AAAAABP////QAAAAAr/9//6AAAAAP/+Df/wAAAAX/+Aj/9gAAAL//IC//wAAAH//QAN//IAAH//cAB//4AADf///////QAD////////8wCf/yAAAC//kA7/4AAAAN//Bf/6AAAACf/1v/9gAAAAX/+wD/////2TAAAA///////3AAAP//IAX//yAAD//yAAv/9wAA//8gAJ//gAAP//IAC//2AAD//yAF//8QAA///////TAAAP//////+QAAD//yACv/+QAA//8gAB//8AAP//IAAP//IAD//yAAH//yAA//8gAr//0AAP///////jAAD/////7HEAAAAAKM7/24MAAAn/////+wAAz//EEDj7AAr/+wAAABgAP//xAAAAAACP/7AAAAAAAM//cAAAAAAA3/9gAAAAAADf/2AAAAAAAM//cAAAAAAAj/+wAAAAAAA///EAAAAAAAr/+wAAABgAAM//xAAo+wAACf/////7AAAAKM7/3IMAD////tuCAAAAD///////sQAAD//yAUv//iAAD//yAACf/9AAD//yAAAN//YAD//yAAAH//wAD//yAAAE//8AD//yAAAC//8QD//yAAAD//8QD//yAAAE//8AD//yAAAH//wAD//yAAAN//YAD//yAACf/9AAD//yAUv//iAAD///////sQAAD////9uCAAAAD///////MAD///////MAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//////8AAD//////8AAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD///////YAD///////YAD///////MAD///////MAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//////8AAD//////8AAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAD//yAAAAAAAAAnvv/ttzAAAAn//////9AAAM//1RAVr9AACv/8AAAAApAAP//yAAAAAAAAj/+wAAAAAAAAz/9wAAAAAAAA3/9gAA////cA3/9gAA////cAz/9wAAAH//cAj/+wAAAH//cAP//xAAAH//cACv/7AAAH//cAAM//xRAq//cAAAn///////cAAAAozv/spzAAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD/////////YAD/////////YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAAAM//YAD//yAA//8gAP//IAD//yAA//8gAP//IAD//yAA//8gAP//IAD//yAA//8gAP//IAD//yAA//8gAP//IAD//yAAAP//IAAA//8gAAD//yAAAP//IAAA//8gAAD//yAAAP//IAAA//8gAAD//yAAAP//IAAA//8gAAD//yAAAP//IAAA//8gAAD//yAAAP//EAAE//8AAD3/+QA///+wAD/9pQAAAP//IAAG//9gAP//IABv//YAAP//IAb//2AAAP//IH//9QAAAP//J///UAAAAP//r//1AAAAAP////9QAAAAAP////cAAAAAAP////4wAAAAAP/////jAAAAAP//Tv//MAAAAP//Iu//8wAAAP//IC7//zAAAP//IAHf//MAAP//IAAd//8wAP//IAAB3//0AP//IAAAAAD//yAAAAAA//8gAAAAAP//IAAAAAD//yAAAAAA//8gAAAAAP//IAAAAAD//yAAAAAA//8gAAAAAP//IAAAAAD//yAAAAAA//8gAAAAAP//IAAAAAD//yAAAAAA///////2AP//////9gD///cAAACf//0AAP///gAAAf///QAA////UAAH///9AAD////AAA3///0AAP////MAT/7//QAA//+f+QC/9//9AAD//y//Ev/x//0AAP//C/95/5D//QAA//8E/+//IP/9AAD//wDf//sA//0AAP//AG//9QD//QAA//8AD//gAP/9AAD//wAJ/3AA//0AAP//AAAAAAD//QAA//8AAAAAAP/9AAD//wAAAAAA//0AAP//4AAAj/9gAP//9wAAj/9gAP///gAAj/9gAP///4AAj/9gAP////EAj/9gAP//z/kAj/9gAP//T/8Qj/9gAP//C/+gj/9gAP//A//yj/9gAP//AK/7j/9gAP//AC//z/9gAP//AAn///9gAP//AAH///9gAP//AACP//9gAP//AAAf//9gAP//AAAH//9gAAAEnf/sggAAAAAc//////kAAAAe//gQO//7AAAM//cAAAz/9wAE//4AAABP/+AAn/+gAAAA7/9ADP/3AAAADP/3AN//YAAAAL//gA3/9gAAAAv/+ADP/3AAAADP/3AJ//oAAAAO//QAT//gAAAE//4AAM//cAAAz/9wAAHv/4EDv/+wAAABz/////+QAAAAAEnf/sggAAAA/////+pQAAD///////sAAP//IATv/5AA//8gAF//8AD//yAAH//yAP//IAAf//IA//8gAF//8AD//yAE7/+QAP//////+wAA/////+pQAAD//yAAAAAAAP//IAAAAAAA//8gAAAAAAD//yAAAAAAAP//IAAAAAAA//8gAAAAAAAABJ3v7IIAAAAAHP/////5AAAAHv/4EDv/+wAADP/3AAAM//cABP/+AAAAT//gAJ//oAAAAO//QAz/9wAAAAz/9wDf/2AAAAC//4AN//YAAAAL//kAz/9wAAAAz/9wCf/6AAAADv/0AE//4AAABP//AADP/3AAAM//gAAB7/+BA7//wAAAAc//////sAAAAABJ3v//cAAAAAAAAAC//hAAAAAAAAAB3/0QAAAAAAAAAe/9EAAA/////9kgAAAP//////9QAAD//yAY//8QAA//8gAO//UAAP//IAC//2AAD//yAAv/9QAA//8gAO//IAAP//IBj/+AAAD//////nAAAA//////6AAAAP//ID7/+AAAD//yAD//8wAA//8gAK//sAAP//IAAv//MAD//yAACv/7AA//8gAAL//0AAF87/7bgQAALv/////zAADf/lECjvMAA//3AAAAggAG//YAAAAAAAb//TAAAAAAAv///aYwAAAAr/////1QAAAJ//////cAAAAWrv///wAAAAAAOv//MAAAAAAA3/8wBIAAAADf/wAE/5QQKf/6AAT//////9EAAWnN7/62AADv////////7v////////4AAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAAAAn/+QAAAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAT//QAA//8gAAX//AAA3/9AAAb/+wAAn/+AAAr/9wAAL//2EX//4QAABf/////+MAAAABfO/+twAAC//3AAAABv/7X//AAAAAz/9Q7/8gAAAv//AJ//gAAAf/+QA//+AAAN//MADf/zAAP//QAAf/+QAJ//gAAB//4ADv/yAAAL//UE//wAAABf/6Cv/2AAAAD//x//8AAAAAr//P/6AAAAAE////9AAAAAAO///+AAAAAACP//+AAAAAAAL///IAAAP/+wAAD//zAAB//3D//wAAP//3AAC//zDP/zAAf//7AAD//wCP/3AAv///AAP/+wBP/7AA7/v/MAb/+AAP/+AC/7f/YAr/9AAM//IG/3P/oA7/8AAI//YK/0D/4C//wAAF//oN/wDP8m//kAAB//4f/ACP9Z//UAAA3/9/+ABP+d//EAAAn//v9AAP/v/9AAAAX///8QAM///5AAAAL///0AAJ///2AAAADv//kAAF///yAAAACv//UAAB///gAAHv/0AAAF//4QX//hAAH//0AAr/+gAL//kAAB7/9Qb//QAAAE//4///MAAAAJ////+AAAAAAN///9AAAAAABP//8wAAAAAAf///YAAAAAAv////IAAAAAz//f/8AAAACP/8Df/3AAAD//8gP//yAADf/3AAf//AAI//wAAAz/9wP//yAAAC//8w3/+QAAAL//wAP//0AABf//IACf/9AAHv/3AAAN//gAr//QAAAE//80//8wAAAAn//N//gAAAAADv///9AAAAAABP///zAAAAAAAJ//+AAAAAAAAC//8AAAAAAAAB//8AAAAAAAAB//8AAAAAAAAB//8AAAAAAAAB//8AAAAAAAAB//8AAAAAAAAB//8AAAAAz///////+wDP///////7AAAAAADP//sAAAAACP//8gAAAABf//9QAAAAAv//+QAAAAAM///AAAAAAJ///iAAAAAF///0AAAAAC///4AAAAAA3//8AAAAAAr//+EAAAAAb///QAAAAAD///cAAAAAAP////////8A/////////wAf///5AB////kAH/+AAAAf/4AAAB//gAAAH/+AAAAf/4AAAB//gAAAH/+AAAAf/4AAAB//gAAAH/+AAAAf/4AAAB//gAAAH/+AAAAf/4AAAB//gAAAH/+AAAAf///5AB////kN+AAAAI/QAAAD/yAAAA73AAAAn8AAAAT/EAAADvYAAACvsAAABf8QAAAP9QAAAL+gAAAG/wAAAB/0AAAAz5AAAAf+AAAAL/MAAADfgAAACP0Aj///8gCP///yAAAH//IAAAf/8gAAB//yAAAH//IAAAf/8gAAB//yAAAH//IAAAf/8gAAB//yAAAH//IAAAf/8gAAB//yAAAH//IAAAf/8gAAB//yAAAH//IAj///8gCP///yAAAAAJ/+EAAAAAAACP//0QAAAAAAf//v/RAAAAAG/+Qb/8AAAABf/BAAb/sAAAX/gAAAA9+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wB/9gAAAACP8wAAAACP0QAAAACPsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe+/+xwAAAP/////+EAAMYxAX//oAAAAAAA3/8AABjO////8QA+//////8QDP/4EAz/8QD//gAA7/8QD//gAE//8QDP/3A+//8QBP///8z/8QADv/1wz/8QAv/7AAAAAAAC//sAAAAAAAL/+wAAAAAAAv/7AAAAAAAC//sAAAAAAAL/+wff6iAAAv/7z///4wAC///CBv/9AAL//yAAv/9QAv/9AABf/5AC//sAAE//sAL/+wAAT/+wAv/9AABf/5AC//8gAK//UAL//8IG//0AAv/7z///4wAC//sH3+ogAAAAa+/sYQAC3////5AB7/+BAncAn/+QAAAADv/yAAAAAP//AAAAAA//8AAAAADv/yAAAAAJ//kAAAAAHv/4ECdwAD3////5AAAGvv7HEAAAAAAA//4AAAAAAAD//gAAAAAAAP/+AAAAAAAA//4AAAAAAAD//gAABL/8UP/+AABv///4//4AAv/+QE7//gAJ//YAB//+AA3/8QAB//4AD//wAAD//gAP//AAAP/+AA3/8QAB//4ACf/2AAb//gAC//4wTv/+AABv///4//4AAAS//FD//gAAAHvv7GAAAAPv////0QAB7/5ATv/AAJ//UABv/1AO//AAAv/6AP///////8AP///////9AO//AAAAAAAJ//UAAAAAAB7/5hAjfEAAPv/////0AAAGvv/bcwAAAq7//AAe///8AH//gAAAr/8wAACv/yAAn/////ef////9wCv/yAAAK//IAAAr/8gAACv/yAAAK//IAAAr/8gAACv/yAAAK//IAAAr/8gAACv/yAAAAO//FD//gAAb///+P/+AAL//kBO//4ACf/3AAf//gAN//IAAv/+AA//8AAA//4AD//wAAD//gAN//EAAv/+AAn/9gAH//4AAv/+ME7//gAAb///+P/+AAADv/xQ//0AAAAAAAL/+wAAAAAACP/2AAB5QQKP/9AAAI/////8EAAABb3/2lAAAAL/+wAAAAAAAv/7AAAAAAAC//sAAAAAAAL/+wAAAAAAAv/7AAAAAAAC//sH3+swAAL/+8////MAAv//0xn/+gAC//8gAP/+AAL//QAA//4AAv/7AADv/wAC//sAAO//AAL/+wAA7/8AAv/7AADv/wAC//sAAO//AAL/+wAA7/8AAv/7AADv/wAC//sAAv/7AAL/+wAC//sAAAAAAAL/+wAC//sAAv/7AAL/+wAC//sAAv/7AAL/+wAC//sAAv/7AAL/+wAC//sAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAAAAAAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/7AAAv/6AAA//5AAGv/1AL///AAL/9gAAAL/+wAAAAAAAv/7AAAAAAAC//sAAAAAAAL/+wAAAAAAAv/7AAAAAAAC//sABv/+IAL/+wBv/9IAAv/7Bv/9EAAC//tv/8EAAAL//v/7AAAAAv///+AAAAAC////+gAAAAL/+8//oAAAAv/7Hf/6AAAC//sB3/+QAAL/+wAu//kAAv/7AALv/4AC//sAAv/7AAL/+wAC//sAAv/7AAL/+wAC//sAAv/7AAL/+wAC//sAAv/7AAL/+wAC//sAAv/7AAL/+wAC//sAAv/7AAL/+wjv1wBc/8UAAC//vf//+o////YAAv//sR3//4FP/+AAL//xAI//0ADP/yAC//wAB//4AAr/8gAv/7AAb/9wAK//MAL/+wAG//cAC//zAC//sABv/3AAv/8wAv/7AAb/9wAL//MAL/+wAG//cAC//zAC//sABv/3AAv/8wAv/7AAb/9wAL//MAL/+wff6zAAAv/7z///8wAC///TGf/6AAL//yAA//4AAv/9AAD//gAC//sAAO//AAL/+wAA7/8AAv/7AADv/wAC//sAAO//AAL/+wAA7/8AAv/7AADv/wAC//sAAO//AAABfO/sgQAAA+/////0AAHv/kA9//MAn/9gAF//sA7/8QAA//8A//8AAA7/8g//8AAA7/8g7/8QAA//8An/9gAF//sAHv/kA9//MAA+/////0AAABfO/8gQAAL/+wff6iAAAv/7z///4wAC///CBv/9AAL//yAAv/9QAv/9AABf/5AC//sAAE//sAL/+wAAT/+wAv/9AABf/5AC//8gAK//UAL//8IG//0AAv/7z///4wAC//sH3+ogAAL/+wAAAAAAAv/7AAAAAAAC//sAAAAAAAL/+wAAAAAAAv/7AAAAAAAABL/8UP/+AABv///4//4AAv/+QE7//gAJ//YAB//+AA3/8QAB//4AD//wAAD//gAP//AAAP/+AA3/8QAB//4ACf/2AAb//gAC//4wTv/+AABv///4//4AAAS//FD//gAAAAAAAP/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP/+AAAAAAAA//4AAv/7CN/AL/+9//wC///kAAAv//MAAAL//QAAAC//sAAAAv/7AAAAL/+wAAAC//sAAAAv/7AAAAL/+wAAAC//sAAAACnf/shAAC//////QAr/0gE3wwDf+gAAAAAM//6oUQAAb/////sQAH/////6AAAEac//8AAAAAC//wCaUhA+/9AK//////QAFazv/ZIAAM//AAAADP/wAAAAz/8AAAv/////8L//////AAz/8AAAAM//AAAADP/wAAAAz/8AAAAM//AAAADP/wAAAAz/8QAAAK//YAAABf///6AABs//+gAE//kAAP/9AAT/+QAA//0ABP/5AAD//QAE//kAAP/9AAT/+QAA//0ABP/5AAD//QAE//kAAP/9AAT/+QAC//0AA//7AAf//QAA//9AX//9AACP///3//0AAAbP+0D//QB//1AAAP/9Af/7AABv/2AL//EAC//xAE//YAH/+gAA7/wAf/8wAAj/8g3/0AAAH/+C//cAAAC//o//EAAABf///6AAAAAO///0AAAAAI///QAAAAAC//9wAAAf/6AAn/4ABP/2Df/gAM//IAj/8gn/8QD//2AM/+AE//UE//+gD/+gAP/5CP+v4E//UADP/Qz7b/KP/xAAj/8v9y/2z/0AAD//r/MO+v/5AAAP///wCv//9QAAC///wAb///AAAAf//4AC///AAAAD//9AAO//gAAv/+EADP/0Bf/6AH//gACf/1P//AAADf/t/+EAAAL///9AAAAAb//5AAAAAJ///AAAAAX///+AAAAv/9v/9AAAz/8x7/4QCP/3AE//sE//wAAJ//eP/0AAAf/8H/+wAAb/9gr/8QAM//AE//cAH/+gAN/+AG//QABv/0DP/gAAD/+x//kAAAn/+P/zAAAC////0AAAAL///3AAAABf//8QAAAADv/7AAAAAAj/9gAAAAAJ//AAAAAAT/+QAAAAz//9AAAAAM/+kQAAAAz//////ADP/////8AAAAAv//sAAAAe//8wAAAd//9QAAAM//9gAAAK//+AAAAJ//+gAAAH//+wAAAA///QAAAAD//////8AP//////wAAAAAW+/+AAAAAAX///4AAAAADP/1AAAAAAAO/9AAAAAAAA7/wAAAAAAADv/AAAAAAAAO/7AAAAAAAB//oAAAAAACv/9gAAAABP//+AAAAAAE///6AAAAAAACv/9wAAAAAAAv/6AAAAAAAA//sAAAAAAADv/AAAAAAAAO/8AAAAAAAA7/0AAAAAAADP/1AAAAAAAF///+AAAAAABb7/4AAAP/MAAD/zAAA/8wAAP/MAAD/zAAA/8wAAP/MAAD/zAAA/8wAAP/MAAD/zAAA/8wAAP/MAAD/zAAA/8wAAP/MAAD/zAAA/8wAAP/MAAD/zAAA/8wAAP/MAAE//6iAAAAAAT///4QAAAAAAGv/3AAAAAAAC//gAAAAAAAH/+QAAAAAAAf/5AAAAAAAB//kAAAAAAAD//AAAAAAAAL//cQAAAAAAK///4AAAAAAt///gAAAAAM//gQAAAAAA//wAAAAAAAH/+QAAAAAAAf/5AAAAAAAB//kAAAAAAAL/+AAAAAAAGv/2AAAAAE///+EAAAAAT//qIAAAAAAAAAAAAAAAAAAFvv63MQJ+EACf////////EACv////////EACtUQJZ3/2BAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAB+/QAAAAAAB+//0AAAAAB+///9AAAAB+/////QAAB+//////0AB+///////9B+/////////W//////////0Bj////////9AAGP///////QAAAY//////0AAAABj////9AAAAAAGP///QAAAAAAAY//0AAAAAAAABj9AAAAAAAAAAFgAAAAAAAAAADWAAAAAAAAAA/+YAAAAAAAAP//5gAAAAAAD////mAAAAAA/////+YAAAAP//////5gAAD////////mAA/////////+YP/////////+X////////+cA///////+cAAP/////+cAAAD////+cAAAAA///+cAAAAAAP/+cAAAAAAAD+cAAAAAAAAAcAAAAAAAAAAAAiIiIiIiIiIhAAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAD//////////8AAC7u7u7u7u7u4AA==" -FONT_L_B64 = "CwAwNjsADzYAMTY5ABA2ADI2OgAPNgAzNjsADzYANDY5ABA2ADU2OgAQNgA2NjsADzYANzY5ABA2ADg2OwAPNgA5NjsADzYAIAAAAAAbAAAAAAAAAAAAACab3v/+ynQAAAAAAAAAAAAAAAAAAAAAAAADjv/////////6QAAAAAAAAAAAAAAAAAAAAAO//////////////VAAAAAAAAAAAAAAAAAAAJ////////////////wgAAAAAAAAAAAAAAAALf/////////////////1AAAAAAAAAAAAAAAD7///////////////////YAAAAAAAAAAAAAAv////////////////////9gAAAAAAAAAAAAHv/////////////////////0AAAAAAAAAAAAv//////////////////////+EAAAAAAAAAAH////////////////////////sAAAAAAAAAAf/////////9YgAVv/////////9QAAAAAAAACf////////+AAAAABf/////////QAAAAAAAAH/////////kAAAAAAE/////////1AAAAAAAAj////////9AAAAAAAAn////////8AAAAAAAA7////////1AAAAAAAAH/////////MAAAAAAE/////////gAAAAAAAAC/////////gAAAAAAJ////////+gAAAAAAAABv////////0AAAAAAN////////9gAAAAAAAAAv////////8gAAAAAf////////8gAAAAAAAAAO////////9gAAAABf////////8AAAAAAAAAAM////////+QAAAACP////////0AAAAAAAAAAJ/////////AAAAACv////////wAAAAAAAAAAH/////////wAAAADf////////oAAAAAAAAAAG/////////xAAAAD/////////kAAAAAAAAAAF/////////zAAAAD/////////gAAAAAAAAAAE/////////0AAAAH/////////cAAAAAAAAAAD/////////2AAAAL/////////YAAAAAAAAAAC/////////3AAAAP/////////YAAAAAAAAAAC/////////3AAAAP/////////YAAAAAAAAAAC/////////4AAAAT/////////YAAAAAAAAAAC/////////4AAAAP/////////YAAAAAAAAAAC/////////4AAAAP/////////YAAAAAAAAAAC/////////3AAAAL/////////cAAAAAAAAAAC/////////3AAAAL/////////cAAAAAAAAAAD/////////2AAAAD/////////gAAAAAAAAAAE/////////0AAAAD/////////kAAAAAAAAAAF/////////zAAAADf////////oAAAAAAAAAAG/////////xAAAACv////////wAAAAAAAAAAI/////////wAAAACP////////4AAAAAAAAAAK/////////AAAAABf////////8AAAAAAAAAAM////////+QAAAAAf////////8wAAAAAAAAAP////////9gAAAAAN////////9gAAAAAAAAAv////////8gAAAAAJ////////+gAAAAAAAABv////////0AAAAAAE/////////wAAAAAAAAC/////////gAAAAAAA7////////2AAAAAAAAL/////////MAAAAAAAj////////9AAAAAAAAr////////8AAAAAAAAH/////////kAAAAAAF/////////1AAAAAAAACf////////+QAAAABf/////////QAAAAAAAAAf/////////9YgAVv/////////9QAAAAAAAAAH////////////////////////sAAAAAAAAAAAz//////////////////////+EAAAAAAAAAAAHv/////////////////////0AAAAAAAAAAAAAv////////////////////9gAAAAAAAAAAAAAD7///////////////////YAAAAAAAAAAAAAAALf/////////////////1AAAAAAAAAAAAAAAAAJ////////////////wgAAAAAAAAAAAAAAAAAAO//////////////VAAAAAAAAAAAAAAAAAAAAADnv/////////6QAAAAAAAAAAAAAAAAAAAAAAAADac7v/+ynQAAAAAAAAAAAAAAAAAAAAAAAAANq7/////////AAAAAAAAAAAAAAAAAAAAAUi/////////////AAAAAAAAAAAAAAAAAAJp3///////////////AAAAAAAAAAAAAAAAAD//////////////////AAAAAAAAAAAAAAAAAD//////////////////AAAAAAAAAAAAAAAAAD//////////////////AAAAAAAAAAAAAAAAAD//////////////////AAAAAAAAAAAAAAAAAD//////////////////AAAAAAAAAAAAAAAAAD//////////////////AAAAAAAAAAAAAAAAAD//////////////////AAAAAAAAAAAAAAAAAD//////2VLv////////AAAAAAAAAAAAAAAAAD///rdAAADv////////AAAAAAAAAAAAAAAAAD2WIAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAAAAAAAAAADv////////AAAAAAAAAAAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAA3/////////////////////////4AAAAAAAAAAAAAFGis3e///suGIAAAAAAAAAAAAAAAAAAAAVi+/////////////pQAAAAAAAAAAAAAAABJ3//////////////////VAAAAAAAAAAAAAAr/////////////////////wwAAAAAAAAAAAAr//////////////////////3AAAAAAAAAAAAr///////////////////////gAAAAAAAAAAAr///////////////////////+AAAAAAAAAAAr////////////////////////0AAAAAAAAAAr////////////////////////+AAAAAAAAAAr/////////////////////////cAAAAAAAAAr//////7dCABJZ////////////4AAAAAAAAAr////7UAAAAAAAGf//////////9AAAAAAAAAr///kgAAAAAAAAAF//////////+QAAAAAAAAr/+RAAAAAAAAAAAAb//////////AAAAAAAAAr6IAAAAAAAAAAAAAC//////////gAAAAAAAAhAAAAAAAAAAAAAAAA//////////wAAAAAAAAAAAAAAAAAAAAAAAAAO/////////xAAAAAAAAAAAAAAAAAAAAAAAAAM/////////xAAAAAAAAAAAAAAAAAAAAAAAAAK/////////wAAAAAAAAAAAAAAAAAAAAAAAAAK/////////gAAAAAAAAAAAAAAAAAAAAAAAAAM////////+wAAAAAAAAAAAAAAAAAAAAAAAAAP////////9wAAAAAAAAAAAAAAAAAAAAAAAABf////////8gAAAAAAAAAAAAAAAAAAAAAAAADP////////wAAAAAAAAAAAAAAAAAAAAAAAAAX/////////QAAAAAAAAAAAAAAAAAAAAAAAAB7////////8AAAAAAAAAAAAAAAAAAAAAAAAAM/////////yAAAAAAAAAAAAAAAAAAAAAAAAC/////////9gAAAAAAAAAAAAAAAAAAAAAAAAv/////////oAAAAAAAAAAAAAAAAAAAAAAAAc/////////7AAAAAAAAAAAAAAAAAAAAAAAALf/////////AAAAAAAAAAAAAAAAAAAAAAAAD7/////////0QAAAAAAAAAAAAAAAAAAAAAABP/////////8EAAAAAAAAAAAAAAAAAAAAAAAb//////////BAAAAAAAAAAAAAAAAAAAAAAAI//////////sAAAAAAAAAAAAAAAAAAAAAAACv/////////6AAAAAAAAAAAAAAAAAAAAAAABz/////////+AAAAAAAAAAAAAAAAAAAAAAAAt//////////YAAAAAAAAAAAAAAAAAAAAAAAPv/////////0AAAAAAAAAAAAAAAAAAAAAAAE//////////4wAAAAAAAAAAAAAAAAAAAAAABv/////////9EAAAAAAAAAAAAAAAAAAAAAAAj/////////+wAAAAAAAAAAAAAAAAAAAAAAAK//////////kAAAAAAAAAAAAAAAAAAAAAAAHP/////////3AAAAAAAAAAAAAAAAAAAAAAAC3/////////9QAAAAAAAAAAAAAAAAAAAAAAA+/////////+QAAAAAAAAAAAAAAAAAAAAAAAT//////////iAAAAAAAAAAAAAAAAAAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAA3//////////////////////////4AAAAAAAAAAAAATaJvN7v//7cuXQQAAAAAAAAAAAAAAAAACWc///////////////9gwAAAAAAAAAAAAAABf///////////////////9YAAAAAAAAAAAAABf/////////////////////UAAAAAAAAAAAABf//////////////////////gAAAAAAAAAAABf//////////////////////+QAAAAAAAAAABf///////////////////////2AAAAAAAAAABf////////////////////////EAAAAAAAAABf////////////////////////kAAAAAAAAABf////////////////////////8AAAAAAAAABf///9qFMhABJHz///////////9AAAAAAAAABf/6YQAAAAAAAAA8//////////9wAAAAAAAABbUAAAAAAAAAAAAAn/////////+gAAAAAAAAAAAAAAAAAAAAAAAADP////////+wAAAAAAAAAAAAAAAAAAAAAAAABP////////+wAAAAAAAAAAAAAAAAAAAAAAAAAP////////+gAAAAAAAAAAAAAAAAAAAAAAAAAP////////+AAAAAAAAAAAAAAAAAAAAAAAAAAP////////9QAAAAAAAAAAAAAAAAAAAAAAAABP////////8QAAAAAAAAAAAAAAAAAAAAAAAADP////////sAAAAAAAAAAAAAAAAAAAAAAAAAj/////////MAAAAAAAAAAAAAAAAAAAAAAAA7/////////5AAAAAAAAAAAAAAAAAAAAABNY3/////////+wAAAAAAAAAAAAAAAA//////////////////oAAAAAAAAAAAAAAAAA/////////////////mAAAAAAAAAAAAAAAAAA///////////////9cAAAAAAAAAAAAAAAAAAA//////////////1AAAAAAAAAAAAAAAAAAAAA///////////////7UAAAAAAAAAAAAAAAAAAA/////////////////EAAAAAAAAAAAAAAAAAA//////////////////kAAAAAAAAAAAAAAAAA///////////////////AAAAAAAAAAAAAAAAA///////////////////7AAAAAAAAAAAAAAAA////////////////////gAAAAAAAAAAAAAAAAAAAARNp3///////////8gAAAAAAAAAAAAAAAAAAAAAAA6//////////+gAAAAAAAAAAAAAAAAAAAAAAAAT//////////xAAAAAAAAAAAAAAAAAAAAAAAAA//////////2AAAAAAAAAAAAAAAAAAAAAAAAAH/////////6AAAAAAAAAAAAAAAAAAAAAAAAAB/////////9AAAAAAAAAAAAAAAAAAAAAAAAAAz////////+AAAAAAAAAAAAAAAAAAAAAAAAAAr/////////AAAAAAAAAAAAAAAAAAAAAAAAAAr/////////AAAAAAAAAAAAAAAAAAAAAAAAAAz/////////AAAAAAAAAAAAAAAAAAAAAAAAAA//////////AAAAAAAAAAAAAAAAAAAAAAAAAH/////////8AAAAAAAKcQAAAAAAAAAAAAAAAv/////////6AAAAAAAM/5MAAAAAAAAAAAAAPv/////////1AAAAAAAM///pQAAAAAAAAAAq///////////xAAAAAAAM/////8lkIQABJY3///////////+gAAAAAAAM//////////////////////////8gAAAAAAAM//////////////////////////gAAAAAAAAM/////////////////////////8AAAAAAAAAM/////////////////////////RAAAAAAAAAM////////////////////////wQAAAAAAAAAM///////////////////////4AAAAAAAAAAAM//////////////////////swAAAAAAAAAAABa///////////////////+jAAAAAAAAAAAAAAAASL//////////////6lAAAAAAAAAAAAAAAAAAAAAleb3e///+y5dBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//////////kAAAAAAAAAAAAAAAAAAAAAAAC///////////kAAAAAAAAAAAAAAAAAAAAAAAb///////////kAAAAAAAAAAAAAAAAAAAAAAC////////////kAAAAAAAAAAAAAAAAAAAAAAM////////////kAAAAAAAAAAAAAAAAAAAAAB/////////////kAAAAAAAAAAAAAAAAAAAAAL/////////////kAAAAAAAAAAAAAAAAAAAAAz/////////////kAAAAAAAAAAAAAAAAAAAAH//////////////kAAAAAAAAAAAAAAAAAAAA///////////////kAAAAAAAAAAAAAAAAAAADf//////////////kAAAAAAAAAAAAAAAAAAAj///////////////kAAAAAAAAAAAAAAAAAAD//////+/////////kAAAAAAAAAAAAAAAAAAN//////xP////////kAAAAAAAAAAAAAAAAACf//////JP////////kAAAAAAAAAAAAAAAAAP//////2BP////////kAAAAAAAAAAAAAAAAA3//////ABP////////kAAAAAAAAAAAAAAAAJ//////8gBP////////kAAAAAAAAAAAAAAABP//////YABP////////kAAAAAAAAAAAAAAAHv/////7AABP////////kAAAAAAAAAAAAAAAr//////xAABP////////kAAAAAAAAAAAAAAE//////9gAABP////////kAAAAAAAAAAAAAAe//////sAAABP////////kAAAAAAAAAAAAACv//////EAAABP////////kAAAAAAAAAAAAAX//////2AAAABP////////kAAAAAAAAAAAAB7/////+wAAAABP////////kAAAAAAAAAAAAL//////4QAAAABP////////kAAAAAAAAAAABv//////UAAAAABP////////kAAAAAAAAAAAH//////6AAAAAABP////////kAAAAAAAAAAAv//////hAAAAAABP////////kAAAAAAAAAAG//////9QAAAAAABP////////kAAAAAAAAAAv//////oAAAAAAABP////////kAAAAAAAAADP/////+EAAAAAAABP////////kAAAAAAAAAb//////1AAAAAAAABP////////kAAAAAAAAAj/////+gAAAAAAAABP////////kAAAAAAAAAj/////4QAAAAAAAABP////////kAAAAAAAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAj//////////////////////////////7AAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAAAAAAAAAAAAAABP////////kAAAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////////////////////7AAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAL///////yWc3v/+y4UgAAAAAAAAAAAAAAAAAL/////////////////9ggAAAAAAAAAAAAAAAL///////////////////8QAAAAAAAAAAAAAAL////////////////////+hAAAAAAAAAAAAAL/////////////////////+QAAAAAAAAAAAAL//////////////////////9gAAAAAAAAAAAL///////////////////////1AAAAAAAAAAAL////////////////////////MAAAAAAAAAAL////////////////////////0AAAAAAAAAAL////////////////////////9wAAAAAAAAAL////2nUyEAE2r////////////gAAAAAAAAAL/+lRAAAAAAAAAY///////////2AAAAAAAAAKlAAAAAAAAAAAAALf/////////8AAAAAAAAAAAAAAAAAAAAAAAAAd//////////EAAAAAAAAAAAAAAAAAAAAAAAAD//////////QAAAAAAAAAAAAAAAAAAAAAAAAAr/////////gAAAAAAAAAAAAAAAAAAAAAAAAAX/////////oAAAAAAAAAAAAAAAAAAAAAAAAAD/////////sAAAAAAAAAAAAAAAAAAAAAAAAAD/////////wAAAAAAAAAAAAAAAAAAAAAAAAADf////////0AAAAAAAAAAAAAAAAAAAAAAAAAD/////////wAAAAAAAAAAAAAAAAAAAAAAAAAD/////////sAAAAAAAAAAAAAAAAAAAAAAAAAX/////////kAAAAAAAAAAAAAAAAAAAAAAAAAr/////////cAAAAAAAswAAAAAAAAAAAAAAAD//////////QAAAAAAA/7QAAAAAAAAAAAAAAe//////////AAAAAAAA///WEAAAAAAAAAAALf/////////6AAAAAAAA////+1EAAAAAAAAY///////////0AAAAAAAA///////JYxAAE2r////////////QAAAAAAAA//////////////////////////9AAAAAAAAA//////////////////////////kAAAAAAAAA/////////////////////////8AAAAAAAAAA/////////////////////////RAAAAAAAAAA////////////////////////wQAAAAAAAAAA///////////////////////5AAAAAAAAAAAA//////////////////////1AAAAAAAAAAAAAJr///////////////////FAAAAAAAAAAAAAAAABHrv/////////////YMAAAAAAAAAAAAAAAAAAAABRom93v//7cp0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN5ze//7tyoYxAAAAAAAAAAAAAAAAAAAAAAa/////////////6nMAAAAAAAAAAAAAAAAAGf////////////////9QAAAAAAAAAAAAAAAI//////////////////9QAAAAAAAAAAAAAAPf//////////////////9QAAAAAAAAAAAAAG////////////////////9QAAAAAAAAAAAACP////////////////////9QAAAAAAAAAAAAj/////////////////////9QAAAAAAAAAAAG//////////////////////9QAAAAAAAAAAA///////////////////////9QAAAAAAAAAADv//////////6mMgASNov///9QAAAAAAAAAAj//////////FAAAAAAAAAEnv9QAAAAAAAAAC//////////YAAAAAAAAAAAAEpQAAAAAAAAAK/////////jAAAAAAAAAAAAAAAAAAAAAAAAAv////////9AAAAAAAAAAAAAAAAAAAAAAAAACf////////cAAAAAAAAAAAAAAAAAAAAAAAAADv///////+AAAAAAAAAAAAAAAAAAAAAAAAAAX////////2AAAAAAAAAAAAAAAAAAAAAAAAAAn////////wAAAAAAAAAAAAAAAAAAAAAAAAAA7///////+gAAAAAAAAAAAAAAAAAAAAAAAAAC////////9gAAFYze/+24UAAAAAAAAAAAAAAF////////8gA6/////////7QAAAAAAAAAAAAI////////8Cz////////////UAAAAAAAAAAAL////////6P//////////////oAAAAAAAAAAN/////////////////////////RAAAAAAAAAO/////////////////////////+IAAAAAAAAP//////////////////////////0QAAAAAAAf//////////////////////////+wAAAAAAAf///////////////////////////2AAAAAAAv///////////////////////////+AAAAAAAv////////////xiABSf//////////cAAAAAAf///////////2AAAAABz/////////0AAAAAAf//////////9gAAAAAAHf////////8wAAAAAP//////////wAAAAAAABP////////9wAAAAAP//////////UAAAAAAAAN////////+wAAAAAO//////////AAAAAAAAAI/////////QAAAAAM/////////8AAAAAAAAAF/////////wAAAAAK/////////6AAAAAAAAAC/////////wAAAAAH/////////5AAAAAAAAAB/////////xAAAAAF/////////4AAAAAAAAAA/////////wAAAAAB/////////5AAAAAAAAAB/////////wAAAAAA3////////6AAAAAAAAAC/////////gAAAAAAn////////8AAAAAAAAAF/////////AAAAAAAT/////////AAAAAAAAAI////////+QAAAAAADv////////UAAAAAAAAN////////9QAAAAAACf////////sAAAAAAABP////////8QAAAAAAAv////////9gAAAAAADf////////sAAAAAAAAK/////////2AAAAABz/////////UAAAAAAAAC//////////xiABSf/////////9AAAAAAAAAAj////////////////////////0AAAAAAAAAADP//////////////////////+gAAAAAAAAAAAu//////////////////////0AAAAAAAAAAAAD/////////////////////+IAAAAAAAAAAAAAT////////////////////SAAAAAAAAAAAAAAA+//////////////////wQAAAAAAAAAAAAAAABr////////////////3AAAAAAAAAAAAAAAAAAA8//////////////kQAAAAAAAAAAAAAAAAAAAAOe//////////xxAAAAAAAAAAAAAAAAAAAAAAAAN6zu//7LhRAAAAAAAAAAAAAAAM////////////////////////////EAAAAAAM////////////////////////////EAAAAAAM////////////////////////////EAAAAAAM////////////////////////////EAAAAAAM////////////////////////////EAAAAAAM////////////////////////////EAAAAAAM////////////////////////////EAAAAAAM////////////////////////////EAAAAAAM///////////////////////////+AAAAAAAM///////////////////////////4AAAAAAAM///////////////////////////xAAAAAAAAAAAAAAAAAAAAAAAAAJ////////+QAAAAAAAAAAAAAAAAAAAAAAAAAf////////8gAAAAAAAAAAAAAAAAAAAAAAAACP////////sAAAAAAAAAAAAAAAAAAAAAAAAADv////////MAAAAAAAAAAAAAAAAAAAAAAAAAf////////8AAAAAAAAAAAAAAAAAAAAAAAAAA7////////1AAAAAAAAAAAAAAAAAAAAAAAAAF/////////QAAAAAAAAAAAAAAAAAAAAAAAAAN////////9gAAAAAAAAAAAAAAAAAAAAAAAABP////////4AAAAAAAAAAAAAAAAAAAAAAAAAC/////////gAAAAAAAAAAAAAAAAAAAAAAAAAL/////////EAAAAAAAAAAAAAAAAAAAAAAAAAr////////5AAAAAAAAAAAAAAAAAAAAAAAAAB/////////yAAAAAAAAAAAAAAAAAAAAAAAAAI////////+gAAAAAAAAAAAAAAAAAAAAAAAAAf////////8wAAAAAAAAAAAAAAAAAAAAAAAAB/////////wAAAAAAAAAAAAAAAAAAAAAAAAADv////////UAAAAAAAAAAAAAAAAAAAAAAAAAb////////9AAAAAAAAAAAAAAAAAAAAAAAAAA3////////2AAAAAAAAAAAAAAAAAAAAAAAAAE/////////gAAAAAAAAAAAAAAAAAAAAAAAAAM////////+AAAAAAAAAAAAAAAAAAAAAAAAAA/////////8QAAAAAAAAAAAAAAAAAAAAAAAACv////////kAAAAAAAAAAAAAAAAAAAAAAAAAL/////////IAAAAAAAAAAAAAAAAAAAAAAAAAn////////6AAAAAAAAAAAAAAAAAAAAAAAAAB/////////zAAAAAAAAAAAAAAAAAAAAAAAAAH/////////AAAAAAAAAAAAAAAAAAAAAAAAAAO////////9QAAAAAAAAAAAAAAAAAAAAAAAABv////////0AAAAAAAAAAAAAAAAAAAAAAAAADf////////YAAAAAAAAAAAAAAAAAAAAAAAAAX////////+AAAAAAAAAAAAAAAAAAAAAAAAAAz////////3AAAAAAAAAAAAAAAAAAAAAAAAAD/////////xAAAAAAAAAAAAAAAAAAAAAAAAAK////////+QAAAAAAAAAAAAAAAAAAAAAAAAAv////////8gAAAAAAAAAAAAAAAAAAAAAAAACf////////oAAAAAAAAAAAAAAAAAAAAAAAAAH/////////MAAAAAAAAAAAAAAAAAAAAAAAAAj////////8AAAAAAAAAAAAAAAAAAAAAAAAAA7////////1AAAAAAAAAAAAAAAAAAAAAAAAAG/////////QAAAAAAAAAAAAAAAAAAAAAAAAAN////////9gAAAAAAAAAAAAAAAAAAAAAAAABf////////4AAAAAAAAAAAAAAAAAAAAAAAAADP////////cAAAAAAAAAAAAAAAAAAAAAAAAAT/////////EAAAAAAAAAAAAAAAAAAAAAAAAAv////////5AAAAAAAAAAAAAAAAAAAAAAAAAC/////////yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJorN7///7LljAAAAAAAAAAAAAAAAAAAAAAWu////////////+2EAAAAAAAAAAAAAAAAAGP////////////////+iAAAAAAAAAAAAAAAG7///////////////////kAAAAAAAAAAAAACv/////////////////////SAAAAAAAAAAAAv//////////////////////+IAAAAAAAAAAJ////////////////////////0AAAAAAAAABP////////////////////////+AAAAAAAAADP/////////////////////////xAAAAAAAAP//////////////////////////3AAAAAAAAj//////////5QQAUjv/////////7AAAAAAAAv/////////wQAAAAAK//////////AAAAAAAA7////////9AAAAAAAAv/////////EAAAAAAA/////////1AAAAAAAAL/////////IAAAAAAA/////////wAAAAAAAADf////////MAAAAAAA7////////gAAAAAAAAC/////////EAAAAAAAz////////gAAAAAAAAC/////////AAAAAAAAn////////wAAAAAAAADf///////9AAAAAAAAX////////1AAAAAAAAL////////4AAAAAAAADv///////9AAAAAAAAv////////yAAAAAAAAB/////////wQAAAAAK////////+gAAAAAAAAAM/////////5QQATjv////////4QAAAAAAAAAB3///////////////////////MAAAAAAAAAAAHP/////////////////////jAAAAAAAAAAAAAI////////////////////oQAAAAAAAAAAAAAAKf////////////////+zAAAAAAAAAAAAAAAAABbv/////////////4EAAAAAAAAAAAAAAAAAA57///////////////pAAAAAAAAAAAAAAAACr//////////////////8QAAAAAAAAAAAAAB/////////////////////+QAAAAAAAAAAAAv//////////////////////9EAAAAAAAAAAL////////////////////////0QAAAAAAAACP/////////5UgATfv/////////AAAAAAAAAP/////////oQAAAAAH/////////2AAAAAAAAz////////5AAAAAAAAX////////+AAAAAAAC/////////QAAAAAAAACv////////YAAAAAAI////////9QAAAAAAAAAv////////sAAAAAAM////////8AAAAAAAAAAN////////8AAAAAAP////////wAAAAAAAAAAJ////////8wAAAAAf////////sAAAAAAAAAAH////////9AAAAAAv////////oAAAAAAAAAAH////////9QAAAAA/////////sAAAAAAAAAAH////////9gAAAAA/////////wAAAAAAAAAAJ////////9gAAAAAv////////8AAAAAAAAAAN////////9QAAAAAP////////9QAAAAAAAAAv////////8wAAAAAN/////////QAAAAAAAACf////////8QAAAAAK/////////5AAAAAAAAX/////////0AAAAAAG//////////oQAAAAAH//////////kAAAAAAA///////////5QQATfv//////////MAAAAAAAn//////////////////////////8AAAAAAAAH//////////////////////////0AAAAAAAAB/////////////////////////+gAAAAAAAAAK////////////////////////0QAAAAAAAAAAv//////////////////////9EAAAAAAAAAAACf/////////////////////BAAAAAAAAAAAAAF7///////////////////cAAAAAAAAAAAAAAAB+////////////////+RAAAAAAAAAAAAAAAAAASe////////////+1AAAAAAAAAAAAAAAAAAAAAAJYrN7///7LhjAAAAAAAAAAAAAAAAAAAAAAAAFIrO//7slzAAAAAAAAAAAAAAAAAAAAAAAABs//////////+TAAAAAAAAAAAAAAAAAAAAAY//////////////xAAAAAAAAAAAAAAAAAAAb////////////////6EAAAAAAAAAAAAAAAAK//////////////////4wAAAAAAAAAAAAAAHf///////////////////1AAAAAAAAAAAAAB3/////////////////////QAAAAAAAAAAAAM//////////////////////8wAAAAAAAAAACP///////////////////////QAAAAAAAAAAP////////////////////////5AAAAAAAAAAz/////////+lEAJr//////////MAAAAAAAAD/////////+MAAAAAX/////////wAAAAAAAAK/////////yAAAAAABP////////8wAAAAAAAP////////9gAAAAAAAJ////////+gAAAAAABP////////8AAAAAAAAC/////////xAAAAAAB/////////oAAAAAAAAA3////////2AAAAAACv////////cAAAAAAAAAr////////7AAAAAADP////////QAAAAAAAAAf/////////AAAAAADv////////MAAAAAAAAAb/////////MAAAAADv////////IAAAAAAAAAb/////////cAAAAAD/////////MAAAAAAAAAb/////////kAAAAADv////////QAAAAAAAAAf/////////wAAAAADf////////cAAAAAAAAAr/////////4AAAAADP////////oAAAAAAAAA3/////////8AAAAACf////////4AAAAAAAAC//////////8QAAAABv////////9gAAAAAAAJ//////////8gAAAAAf/////////hAAAAAABP//////////8wAAAAAM/////////+IAAAAAX///////////8wAAAAAG//////////+lEAJb////////////9AAAAAAA7///////////////////////////9AAAAAAAX///////////////////////////8wAAAAAACv//////////////////////////8wAAAAAAAN//////////////////////////8gAAAAAAAB3/////////////////////////8AAAAAAAAAHP////////////////////////4AAAAAAAAAAJ//////////////+M////////0AAAAAAAAAAAPP///////////8MO////////oAAAAAAAAAAAAEr/////////tAAP////////cAAAAAAAAAAAAAAEi97/7clRAAA/////////QAAAAAAAAAAAAAAAAAAAAAAAAACP////////AAAAAAAAAAAAAAAAAAAAAAAAAADf///////7AAAAAAAAAAAAAAAAAAAAAAAAAAT////////3AAAAAAAAAAAAAAAAAAAAAAAAAAz////////xAAAAAAAAAAAAAAAAAAAAAAAAAF////////+wAAAAAAAAAAAAAAAAAAAAAAAAA/////////9AAAAAAAAAAAAAAAAAAAAAAAAALv////////wAAAAAAAAAArUAAAAAAAAAAAAF//////////QAAAAAAAAAA//pUAAAAAAAAAS//////////6AAAAAAAAAAA////8ljIQATWd///////////hAAAAAAAAAAA///////////////////////9AAAAAAAAAAAA///////////////////////gAAAAAAAAAAAA//////////////////////5AAAAAAAAAAAAA/////////////////////+QAAAAAAAAAAAAA/////////////////////cAAAAAAAAAAAAAA////////////////////kAAAAAAAAAAAAAAA///////////////////kAAAAAAAAAAAAAAAA/////////////////+SAAAAAAAAAAAAAAAAACau/////////////GEAAAAAAAAAAAAAAAAAAAAAE2is3u//7sp0AAAAAAAAAAAAAAAA" - -def load_font(b64): - blob = a2b_base64(b64); count = blob[0]; p = 1; pixoff = 1 + count * 7; glyphs = {} +# ============================== ANTI-ALIASED FONTS (binary blobs on the drive; see pico/gen_font.py) ============================== +def load_font(path): + with open(path, "rb") as f: + blob = f.read() + count = blob[0]; p = 1; pixoff = 1 + count * 7; glyphs = {} for _ in range(count): cp = (blob[p] << 8) | blob[p+1]; w = blob[p+2]; h = blob[p+3] xoff = blob[p+4]; xoff = xoff - 256 if xoff > 127 else xoff @@ -77,8 +75,9 @@ def load_font(b64): glyphs[cp] = (w, h, xoff, top, adv, pixoff); pixoff += (w * h + 1) // 2 return (glyphs, blob) -FONT_M = load_font(FONT_M_B64) -FONT_L = load_font(FONT_L_B64) +FONT_M = load_font("/font_m.bin") +FONT_L = load_font("/font_l.bin") +gc.collect() def _blend(bg, fg, i): t = i * 17 @@ -100,6 +99,7 @@ def make_text(s, font, fg, bg): if g[3] + g[1] > bot: bot = g[3] + g[1] if top0 == 999: top0 = 0 w = max(1, w); h = max(1, bot - top0) + gc.collect() bmp = displayio.Bitmap(w, h, 16) pal = displayio.Palette(16) for i in range(16): pal[i] = _blend(bg, fg, i) diff --git a/pico-cp/font_l.bin b/pico-cp/font_l.bin new file mode 100644 index 0000000000000000000000000000000000000000..89cdaa2a2fede4f55669125b12adfd1fbc1d6a7a GIT binary patch literal 15792 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 literal 0 HcmV?d00001 diff --git a/pico-cp/font_m.bin b/pico-cp/font_m.bin new file mode 100644 index 0000000000000000000000000000000000000000..646e7163a8d91a7d38d63911fd93c7284a38819b GIT binary patch literal 11818 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 LnEOjF&&&S;cG