changeset 1048:493a5903ec20 GasConsumption

Merge with 9d9d506a82d3162b6b2323819cc08652887d7dd4 (Bootloader)
author Ideenmodellierer
date Sat, 15 Nov 2025 19:29:44 +0100
parents 6fb16ca39125 (current diff) 9d9d506a82d3 (diff)
children d91345e9c009
files BootLoader/Src/base_bootlader.c BootLoader/Src/display_mini.c BootLoader/Src/externLogbookFlash_mini.c BootLoader/Src/gfx_engine_mini.c BootLoader/Src/ostc_mini.c BootLoader/Src/tComm_mini.c Discovery/Inc/tComm.h OtherSources/data_central_mini.c
diffstat 15 files changed, 9594 insertions(+), 377 deletions(-) [+]
line wrap: on
line diff
--- a/BootLoader/CPU1-F429_boot.ld	Sat Nov 15 15:16:14 2025 +0100
+++ b/BootLoader/CPU1-F429_boot.ld	Sat Nov 15 19:29:44 2025 +0100
@@ -48,7 +48,7 @@
 /***************************** Memory Definition ****************************/
 MEMORY
 {
-  ROM_BOOT  (rx) : ORIGIN = 0x08000000, LENGTH = 0x00040000 /* 256K */
+  ROM_BOOT  (rx) : ORIGIN = 0x08000000, LENGTH = 0x00020000 /* 128K */
     ROM  (rx) : ORIGIN = 0x08040000, LENGTH = 0x00090000 /* 576K */
     UPPER(rx) : ORIGIN = 0x08132000, LENGTH = 0xAE270 /* 713K */
     RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 192K
@@ -113,13 +113,6 @@
      *libm.a:*(*)
   } >ROM_BOOT
 
-  .rodata :
-  {
-    . = ALIGN(4);
-    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
-    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
-    . = ALIGN(4);
-  } >ROM_BOOT
 
  /********************** Constant data into ROM memory *********************/
 
@@ -169,16 +162,6 @@
   
     /************* The program code and other data into ROM memory ************/
 
-/*
- .firmware_FirmwareData 0x08050000 : {
- 	KEEP( *(.firmware_firmware_data) )
-  } >ROM
-  
-  .font_firmware_data 0x08132000 : {
-  	KEEP( *(.font_firmware_data) ) 
-  	  
-  } >UPPER
-  */
   
     /************* Data and Structures at absolute address in ROM *************/
  
@@ -215,12 +198,18 @@
     _etext = .;        /* define a global symbols at end of code */
   } >ROM_BOOT
  
-
+  .rodata :
+  {
+    . = ALIGN(4);
+    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
+    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
+    . = ALIGN(4);
+  } >ROM_BOOT
  	
     /* Define Known Address for Each Font */
     /* Flash Sector 23 is protected (bootloader font + image) => use end of sector 22 */
 
-.lower_fonts 	0x08016000  : {
+.lower_fonts 	0x0801F000  : {
 	 *(.lower_fonts.image_data_*)
 	 *(.lower_fonts.*)
 	 *(.upper_fonts.image_data_FontT48*) 
@@ -235,7 +224,6 @@
 	*(.upper_font_directory.FontT24*)
 } > ROM_BOOT
 
-
 .lower_image	0x08009000  : {
 	 *(.lower_image*)
 	  
@@ -244,301 +232,6 @@
 .lower_directory 0x08009500 : {
 	*(.lower_image_directory*)
 } > ROM_BOOT
-
-  .upper_fonts 	0x08132040  : {
-  	__upper_font_data = .;
-  	 . = 0x13E; 
-  	 *(.upper_fonts.image_data_FontT144_0x0030)
-  	 . = 0x02515; 
-  	 *(.upper_fonts.image_data_FontT144_0x0031)
-  	 . = 0x03469; 
-  	 *(.upper_fonts.image_data_FontT144_0x0032)
-  	 . = 0x4FDC; 
-  	 *(.upper_fonts.image_data_FontT144_0x0033)
-  	 . = 0x6862; 
-  	 *(.upper_fonts.image_data_FontT144_0x0034)
-  	 . = 0x86C2; 
-  	 *(.upper_fonts.image_data_FontT144_0x0035)
-  	 . = 0x9FB3; 
-  	 *(.upper_fonts.image_data_FontT144_0x0036)
-  	 . = 0xBB26; 
-  	 *(.upper_fonts.image_data_FontT144_0x0037)
-  	 . = 0xD845; 
-  	 *(.upper_fonts.image_data_FontT144_0x0038)
-  	 . = 0xF34D;
-  	 *(.upper_fonts.image_data_FontT144_0x0039)
-  	 . = 0x10EC0;
-  	 *(.upper_fonts.image_data_FontT24_0x0020)
-  	 *(.upper_fonts.image_data_FontT24_0x0021)
-  	 *(.upper_fonts.image_data_FontT24_0x0022)
-  	 *(.upper_fonts.image_data_FontT24_0x0023)
-  	 *(.upper_fonts.image_data_FontT24_0x0024)
-  	 *(.upper_fonts.image_data_FontT24_0x0025)
-  	 *(.upper_fonts.image_data_FontT24_0x0026)
-  	 *(.upper_fonts.image_data_FontT24_0x0027)
-  	 *(.upper_fonts.image_data_FontT24_0x0028)
-  	 *(.upper_fonts.image_data_FontT24_0x0029)
-  	 *(.upper_fonts.image_data_FontT24_0x002a)
-  	 *(.upper_fonts.image_data_FontT24_0x003f)
-  	 *(.upper_fonts.image_data_FontT24_0x002c)
-  	 *(.upper_fonts.image_data_FontT24_0x002d)
-  	 *(.upper_fonts.image_data_FontT24_0x002e)
-  	 *(.upper_fonts.image_data_FontT24_0x002f)
-     *(.upper_fonts.image_data_FontT24_0x0030)
-  	 *(.upper_fonts.image_data_FontT24_0x0031)
-  	 *(.upper_fonts.image_data_FontT24_0x0032)
-  	 *(.upper_fonts.image_data_FontT24_0x0033)
-  	 *(.upper_fonts.image_data_FontT24_0x0034)
-  	 *(.upper_fonts.image_data_FontT24_0x0035)
-  	 *(.upper_fonts.image_data_FontT24_0x0036)
-  	 *(.upper_fonts.image_data_FontT24_0x0037)
-  	 *(.upper_fonts.image_data_FontT24_0x0038)
-  	 *(.upper_fonts.image_data_FontT24_0x0039)
-  	 *(.upper_fonts.image_data_FontT24_0x003a)
-  	 *(.upper_fonts.image_data_FontT24_0x003b)
-  	 *(.upper_fonts.image_data_FontT24_0x003c)
-  	 *(.upper_fonts.image_data_FontT24_0x003d)
-  	 *(.upper_fonts.image_data_FontT24_0x003e)
-  	 . = . + 0x8c;
-     *(.upper_fonts.image_data_FontT24_0x0040)
-  	 *(.upper_fonts.image_data_FontT24_0x0041)
-  	 *(.upper_fonts.image_data_FontT24_0x0042)
-  	 *(.upper_fonts.image_data_FontT24_0x0043)
-  	 *(.upper_fonts.image_data_FontT24_0x0044)
-  	 *(.upper_fonts.image_data_FontT24_0x0045)
-  	 *(.upper_fonts.image_data_FontT24_0x0046)
-  	 *(.upper_fonts.image_data_FontT24_0x0047)
-  	 *(.upper_fonts.image_data_FontT24_0x0048)
-  	 *(.upper_fonts.image_data_FontT24_0x0049)
-  	 *(.upper_fonts.image_data_FontT24_0x004a)
-  	 *(.upper_fonts.image_data_FontT24_0x004b)
-  	 *(.upper_fonts.image_data_FontT24_0x004c)
-  	 *(.upper_fonts.image_data_FontT24_0x004d)
-  	 *(.upper_fonts.image_data_FontT24_0x004e)  	
-  	 *(.upper_fonts.image_data_FontT24_0x004f)   
-     *(.upper_fonts.image_data_FontT24_0x0050)
-  	 *(.upper_fonts.image_data_FontT24_0x0051)
-  	 *(.upper_fonts.image_data_FontT24_0x0052)
-  	 *(.upper_fonts.image_data_FontT24_0x0053)
-  	 *(.upper_fonts.image_data_FontT24_0x0054)
-  	 *(.upper_fonts.image_data_FontT24_0x0055)
-  	 *(.upper_fonts.image_data_FontT24_0x0056)
-  	 *(.upper_fonts.image_data_FontT24_0x0057)
-  	 *(.upper_fonts.image_data_FontT24_0x0058)
-  	 *(.upper_fonts.image_data_FontT24_0x0059)
-  	 *(.upper_fonts.image_data_FontT24_0x005a)
-  	 *(.upper_fonts.image_data_FontT24_0x005b)
-  	 *(.upper_fonts.image_data_FontT24_0x005c)
-  	 *(.upper_fonts.image_data_FontT24_0x005d)
-  	 *(.upper_fonts.image_data_FontT24_0x005e)  	
-  	 *(.upper_fonts.image_data_FontT24_0x005f)    
-  	 *(.upper_fonts.image_data_FontT24_0x0060)
-  	 *(.upper_fonts.image_data_FontT24_0x0061)
-  	 *(.upper_fonts.image_data_FontT24_0x0062)
-  	 *(.upper_fonts.image_data_FontT24_0x0063)
-  	 . = . + 0x1c;
-  	 *(.upper_fonts.image_data_FontT24_0x0064)
-  	 *(.upper_fonts.image_data_FontT24_0x0065)
-  	 *(.upper_fonts.image_data_FontT24_0x0066)
-  	 *(.upper_fonts.image_data_FontT24_0x0067)
-  	 *(.upper_fonts.image_data_FontT24_0x0068)
-  	 *(.upper_fonts.image_data_FontT24_0x0069)
-  	 *(.upper_fonts.image_data_FontT24_0x006a)
-  	 *(.upper_fonts.image_data_FontT24_0x006b)
-  	 *(.upper_fonts.image_data_FontT24_0x006c)
-  	 *(.upper_fonts.image_data_FontT24_0x006d)
-  	 *(.upper_fonts.image_data_FontT24_0x006e)  	
-  	 *(.upper_fonts.image_data_FontT24_0x006f)  	 
-  	 *(.upper_fonts.image_data_FontT24_0x0070)
-  	 *(.upper_fonts.image_data_FontT24_0x0071)
-  	 *(.upper_fonts.image_data_FontT24_0x0072)
-  	 *(.upper_fonts.image_data_FontT24_0x0073)
-  	 *(.upper_fonts.image_data_FontT24_0x0074)
-  	 *(.upper_fonts.image_data_FontT24_0x0075)
-  	 *(.upper_fonts.image_data_FontT24_0x0076)
-  	 *(.upper_fonts.image_data_FontT24_0x0077)
-  	 *(.upper_fonts.image_data_FontT24_0x0078)
-  	 *(.upper_fonts.image_data_FontT24_0x0079)
-  	 *(.upper_fonts.image_data_FontT24_0x007a)
-  	 *(.upper_fonts.image_data_FontT24_0x007b)
-  	 *(.upper_fonts.image_data_FontT24_0x007c)
-  	 . = . + 0x1c;
-  	 *(.upper_fonts.image_data_FontT24_0x007d)
-  	 *(.upper_fonts.image_data_FontT24_0x007e)  	
-  	 *(.upper_fonts.image_data_FontT24_0x00a1)
-  	 *(.upper_fonts.image_data_FontT24_0x00bf)    
-  	 *(.upper_fonts.image_data_FontT24_0x00c1)
-  	 *(.upper_fonts.image_data_FontT24_0x00c4)  
-  	 *(.upper_fonts.image_data_FontT24_0x00c6) 
-  	 *(.upper_fonts.image_data_FontT24_0x00c7)
-  	 *(.upper_fonts.image_data_FontT24_0x00c9)
-  	 *(.upper_fonts.image_data_FontT24_0x00cd)
-  	 *(.upper_fonts.image_data_FontT24_0x00d1)
-  	 *(.upper_fonts.image_data_FontT24_0x00d3)
-  	 *(.upper_fonts.image_data_FontT24_0x00d6)
-  	 *(.upper_fonts.image_data_FontT24_0x00da)
-  	 *(.upper_fonts.image_data_FontT24_0x00dc)
-  	 *(.upper_fonts.image_data_FontT24_0x00df) 
-  	 *(.upper_fonts.image_data_FontT24_0x00e0)
-  	 *(.upper_fonts.image_data_FontT24_0x00e1)
-  	 *(.upper_fonts.image_data_FontT24_0x00e2)
-  	 *(.upper_fonts.image_data_FontT24_0x00e4)
-  	 *(.upper_fonts.image_data_FontT24_0x00e6)
-  	 *(.upper_fonts.image_data_FontT24_0x00e7)
-  	 *(.upper_fonts.image_data_FontT24_0x00e8)
-  	 *(.upper_fonts.image_data_FontT24_0x00e9)         
-  	 *(.upper_fonts.image_data_FontT24_0x00ec)
-  	 *(.upper_fonts.image_data_FontT24_0x00ed)
-  	 *(.upper_fonts.image_data_FontT24_0x00f0)
-  	 *(.upper_fonts.image_data_FontT24_0x00f1)
-  	 *(.upper_fonts.image_data_FontT24_0x00f2)
-  	 *(.upper_fonts.image_data_FontT24_0x00f3)
-  	 *(.upper_fonts.image_data_FontT24_0x00f6)
-  	 *(.upper_fonts.image_data_FontT24_0x00f9)
-  	 *(.upper_fonts.image_data_FontT24_0x00fa)
-  	 *(.upper_fonts.image_data_FontT24_0x00fc)         
-  	 *(.upper_fonts.image_data_FontT24_0x00ff)
-  	 *(.upper_fonts.image_data_FontT24_0x0152)
-  	 *(.upper_fonts.image_data_FontT24_0x0153)
-  	 *(.upper_fonts.image_data_FontT24_0x0178)
-  	 *(.upper_fonts.image_data_FontT24_0x002b)
-  	 . =  . + 0x1d642;
-  	  *(.upper_images.image_data_ostc_fuer_Tauchcomputer_240px)
-	 *(.upper_fonts.image_data_FontT84_0x002e)
-	  . =  . + 0x9f;
-	 *(.upper_fonts.image_data_FontT84_0x0030)
-	  . =  . + 0x0d;
-	 *(.upper_fonts.image_data_FontT84_0x0031)
-	  . =  . + 0xaa;
-	 *(.upper_fonts.image_data_FontT84_0x0032)
-	  . =  . + 0x7b;
-	 *(.upper_fonts.image_data_FontT84_0x0033)
-	  . =  . + 0x38;
-	 *(.upper_fonts.image_data_FontT84_0x0034)
-	  . =  . + 0x7f;
-	 *(.upper_fonts.image_data_FontT84_0x0035)
-	  . =  . + 0x77;
-	 *(.upper_fonts.image_data_FontT84_0x0036)
-	  . =  . + 0x7b;
-	 *(.upper_fonts.image_data_FontT84_0x0037)
-	 . =  . + 0x0d;
-	 *(.upper_fonts.image_data_FontT84_0x0038)
-	 . =  . + 0x2b;
-	 *(.upper_fonts.image_data_FontT84_0x0039)
-	 . =  . + 0xe8;
-  	 *(.upper_fonts.image_data_FontT54_0x0022)
-  	 *(.upper_fonts.image_data_FontT54_0x0025)
-  	 . =  . + 0x112;
-  	 *(.upper_fonts.image_data_FontT54_0x0027)
-  	 . =  . + 0xd8;
-  	 *(.upper_fonts.image_data_FontT54_0x002a)
-  	 . =  . + 0x133;
-     *(.upper_fonts.image_data_FontT54_0x002d)
-  	 . =  . + 0x1d7;
-  	 *(.upper_fonts.image_data_FontT54_0x002e)
-  	 . =  . + 0x17b;
-  	 *(.upper_fonts.image_data_FontT54_0x002f)
-  	 . =  . + 0x02;
-  	 *(.upper_fonts.image_data_FontT54_0x0030)
-  	 . =  . + 0x0ba;
-  	 *(.upper_fonts.image_data_FontT54_0x0031)
-  	 . =  . + 0x27d;
-  	 *(.upper_fonts.image_data_FontT54_0x0032)
-  	 . =  . + 0xe3;
-  	 *(.upper_fonts.image_data_FontT54_0x0033)
-  	 . =  . + 0x35;
-  	 *(.upper_fonts.image_data_FontT54_0x0034)
-  	 . =  . + 0x68;
-  	 *(.upper_fonts.image_data_FontT54_0x0035)
-  	 . =  . + 0x35;
-  	 *(.upper_fonts.image_data_FontT54_0x0036)
-  	 . =  . + 0xba;
-  	 *(.upper_fonts.image_data_FontT54_0x0037)
-  	 . =  . + 0x191;
-  	 *(.upper_fonts.image_data_FontT54_0x0038)
-  	 . =  . + 0xe3;
-  	 *(.upper_fonts.image_data_FontT54_0x0039)
-  	 . =  . + 0xe3;
-  	 *(.upper_fonts.image_data_FontT54_0x003a)
-  	 . =  . + 0x7b;
-  	 *(.upper_fonts.image_data_FontT54_0x0043)
-  	 . =  . + 0x3b;
-  	 *(.upper_fonts.image_data_FontT54_0x006c)
-  	 . =  . + 0x2d;
-  	 *(.upper_fonts.image_data_FontT54_0x006d)
-  	 . =  . + 0x94;
-  	 *(.upper_fonts.image_data_FontT54_0x00ba)
-  	 . =  . + 0x0a;
-  	 
-  	 *(.upper_fonts.image_data_FontT105_0x002*)
-  	 *(.upper_fonts.image_data_FontT105_0x003*)
-  	 *(.upper_fonts.image_data_FontT105_0x0043)
-  	 . =  . + 0x17c8;
-  	 *(.upper_fonts.image_data_FontT105_0x007c)
-  	 *(.upper_fonts.image_data_FontT105_0x00ba)
-  	 *(.upper_fonts.image_data_FontT105_54_0x006d)
-  	 
-	 *(.upper_fonts.image_data_FontT54_0x0068)
-	 . =  . + 0x1195;
-	 
-	 *(.upper_fonts.image_data_FontT42_0x00b0)
-	 *(.upper_fonts.image_data_FontT42_0x0020)
-	  . =  . + 0x23;
-	 *(.upper_fonts.image_data_FontT42_0x002*)
-	 *(.upper_fonts.image_data_FontT42_0x003*)
-	 *(.upper_fonts.image_data_FontT42_0x004*)
-	 *(.upper_fonts.image_data_FontT42_0x005*)
-	 . =  . + 0x420;
-	 *(.upper_fonts.image_data_FontT42_0x006*)
-	 *(.upper_fonts.image_data_FontT42_0x0070)
-	 *(.upper_fonts.image_data_FontT42_0x0071)
-	 *(.upper_fonts.image_data_FontT42_0x0072)
-	 *(.upper_fonts.image_data_FontT42_0x0073)
-	 *(.upper_fonts.image_data_FontT42_0x0074)
-	 *(.upper_fonts.image_data_FontT42_0x0075)
-	 *(.upper_fonts.image_data_FontT42_0x0076)
-	 *(.upper_fonts.image_data_FontT42_0x0077)
-	 *(.upper_fonts.image_data_FontT42_0x0078)
-	 *(.upper_fonts.image_data_FontT42_0x0079)
-	 . =  . + 0x12c0;
-  	 *(.upper_fonts.image_data_FontT42_*)
-  	 *(.upper_fonts.image_data_T54addon_0x002b_PLUS*)
-  	 *(.upper_fonts.image_data_T54addon_0x0040_AT*)
-  	 *(.upper_fonts.image_data_FontT48addon*)
-  	 *(.upper_fonts.image_data_FontT24plus_0x00fb*)
-  	 *(.upper_fonts.image_data_FontT24plus_0x00fd*)
-  	 *(.upper_fonts.image_data_FontT48_*) 	 
-  	 *(.upper_fonts.image_data_awe48_*)
-  
-/* moving of fonts from lower to upper */  	 
-  	 
-	 *(.upper_fonts.*) 
-	 
-  	__upper_font_data_end = .;
-  } >UPPER
-
- 
-
-  .upper_directory 0x081DEF00 : {
-      __font_directory = .;
-	*(.upper_font_directory.Awe48)
-	*(.upper_font_directory.FontT24)
-	*(.upper_font_directory.FontT42)
-	*(.upper_font_directory.FontT48)
-	*(.upper_font_directory.FontT54)
-	*(.upper_font_directory.FontT84)
-	*(.upper_font_directory.FontT105)
-	*(.upper_font_directory.FontT144)
-	*(.upper_font_directory.Batt24*)
-		
-	__font_directory_end = .;
-  	LONG( -1 );	/* Magic End Marker */
-
-  } >UPPER  
-
-
-
-
   
   /* Used by the startup to initialize data */
 _sidata = LOADADDR(.data);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Inc/font_T24_min.h	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,743 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file   Discovery/Inc/Fonts/font_T24.h
+/// \brief  Font Trebuchet MS, size = 24
+/// \author heinrichs weikamp gmbh
+/// \date   2014-06-09
+///
+/// \details
+///     Imported from lcd-image-converter/OSTC4_T24.xml
+///
+/// $Id$
+///////////////////////////////////////////////////////////////////////////////
+/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+///
+///     This program is free software: you can redistribute it and/or modify
+///     it under the terms of the GNU General Public License as published by
+///     the Free Software Foundation, either version 3 of the License, or
+///     (at your option) any later version.
+///
+///     This program is distributed in the hope that it will be useful,
+///     but WITHOUT ANY WARRANTY; without even the implied warranty of
+///     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+///     GNU General Public License for more details.
+///
+///     You should have received a copy of the GNU General Public License
+///     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//////////////////////////////////////////////////////////////////////////////
+
+/*******************************************************************************
+* font
+* filename: C:/Users/hw/Downloads/l
+* name: FontT24
+* family: Trebuchet MS
+* size: 24
+* style: Normal
+* included characters:  !"#$%&'()*+,-./0123456789:;<=>?\x0040ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÖÜäöüßáéíúóàèìòù�?çÉ�?ÑñÓÚ¡¿âÆæÇŒœŸÿ
+* antialiasing: yes
+* type: proportional
+* encoding: UTF-16
+* unicode bom: no
+*
+* preset name: Grayscale 8
+* data block size: 8 bit(s), uint8_t
+* RLE compression enabled: no
+* conversion type: Grayscale, not_used not_used
+* bits per pixel: 8
+*
+* preprocess:
+*  main scan direction: left_to_right
+*  line scan direction: backward
+*  inverse: no
+*******************************************************************************/
+
+
+#include "gfx_fonts.h"
+
+
+static uint8_t image_data_FontT24_0x0030[364];
+
+static uint8_t image_data_FontT24_0x0031[364];
+
+static uint8_t image_data_FontT24_0x0032[364];
+
+static uint8_t image_data_FontT24_0x0033[364];
+
+static uint8_t image_data_FontT24_0x0034[364];
+
+static uint8_t image_data_FontT24_0x0035[364];
+
+static uint8_t image_data_FontT24_0x0036[364];
+
+static uint8_t image_data_FontT24_0x0037[364];
+
+static uint8_t image_data_FontT24_0x0038[364];
+
+static uint8_t image_data_FontT24_0x0039[364];
+
+static uint8_t image_data_FontT24_0x003a[252];
+
+static uint8_t image_data_FontT24_0x003b[252];
+
+static uint8_t image_data_FontT24_0x003c[364];
+
+static uint8_t image_data_FontT24_0x003d[364];
+
+static uint8_t image_data_FontT24_0x003e[364];
+
+static uint8_t image_data_FontT24_0x003f[252];
+
+static uint8_t image_data_FontT24_0x0040[532];
+
+static uint8_t image_data_FontT24_0x0041[420];
+
+static uint8_t image_data_FontT24_0x0042[392];
+
+static uint8_t image_data_FontT24_0x0043[392];
+
+static uint8_t image_data_FontT24_0x0044[420];
+
+static uint8_t image_data_FontT24_0x0045[364];
+
+static uint8_t image_data_FontT24_0x0046[364];
+
+static uint8_t image_data_FontT24_0x0047[448];
+
+static uint8_t image_data_FontT24_0x0048[448];
+
+static uint8_t image_data_FontT24_0x0049[196];
+
+static uint8_t image_data_FontT24_0x004a[308];
+
+static uint8_t image_data_FontT24_0x004b[392];
+
+static uint8_t image_data_FontT24_0x004c[336];
+
+static uint8_t image_data_FontT24_0x004d[476];
+
+static uint8_t image_data_FontT24_0x004e[420];
+
+static uint8_t image_data_FontT24_0x004f[448];
+
+static uint8_t image_data_FontT24_0x0050[364];
+
+static uint8_t image_data_FontT24_0x0051[476];
+
+static uint8_t image_data_FontT24_0x0052[392];
+
+static uint8_t image_data_FontT24_0x0053[336];
+
+static uint8_t image_data_FontT24_0x0054[392];
+
+static uint8_t image_data_FontT24_0x0055[448];
+
+static uint8_t image_data_FontT24_0x0056[392];
+
+static uint8_t image_data_FontT24_0x0057[560];
+
+static uint8_t image_data_FontT24_0x0058[364];
+
+static uint8_t image_data_FontT24_0x0059[392];
+
+static uint8_t image_data_FontT24_0x005a[364];
+
+static uint8_t image_data_FontT24_0x005b[252];
+
+static uint8_t image_data_FontT24_0x005c[252];
+
+static uint8_t image_data_FontT24_0x005d[252];
+
+static uint8_t image_data_FontT24_0x005e[364];
+
+static uint8_t image_data_FontT24_0x005f[364];
+
+static uint8_t image_data_FontT24_0x0060[364];
+
+static uint8_t image_data_FontT24_0x0061[364];
+
+static uint8_t image_data_FontT24_0x0062[364];
+
+static uint8_t image_data_FontT24_0x0063[336];
+
+static uint8_t image_data_FontT24_0x0064[364];
+
+static uint8_t image_data_FontT24_0x0065[364];
+
+static uint8_t image_data_FontT24_0x0066[252];
+
+static uint8_t image_data_FontT24_0x0067[336];
+
+static uint8_t image_data_FontT24_0x0068[364];
+
+static uint8_t image_data_FontT24_0x0069[196];
+
+static uint8_t image_data_FontT24_0x006a[252];
+
+static uint8_t image_data_FontT24_0x006b[336];
+
+static uint8_t image_data_FontT24_0x006c[196];
+
+static uint8_t image_data_FontT24_0x006d[560];
+
+static uint8_t image_data_FontT24_0x006e[364];
+
+static uint8_t image_data_FontT24_0x006f[364];
+
+static uint8_t image_data_FontT24_0x0070[364];
+
+static uint8_t image_data_FontT24_0x0071[364];
+
+static uint8_t image_data_FontT24_0x0072[252];
+
+static uint8_t image_data_FontT24_0x0073[280];
+
+static uint8_t image_data_FontT24_0x0074[280];
+
+static uint8_t image_data_FontT24_0x0075[364];
+
+static uint8_t image_data_FontT24_0x0076[336];
+
+static uint8_t image_data_FontT24_0x0077[504];
+
+static uint8_t image_data_FontT24_0x0078[336];
+
+static uint8_t image_data_FontT24_0x0079[336];
+
+static uint8_t image_data_FontT24_0x007a[308];
+
+static const tImage FontT24_0x0030 __attribute__(( section(".upper_fonts.FontT24_0x0030") )) = {   image_data_FontT24_0x0030, 13, 28};
+static const tImage FontT24_0x0031 __attribute__(( section(".upper_fonts.FontT24_0x0031") )) = {   image_data_FontT24_0x0031, 13, 28};
+static const tImage FontT24_0x0032 __attribute__(( section(".upper_fonts.FontT24_0x0032") )) = {   image_data_FontT24_0x0032, 13, 28};
+static const tImage FontT24_0x0033 __attribute__(( section(".upper_fonts.FontT24_0x0033") )) = {   image_data_FontT24_0x0033, 13, 28};
+static const tImage FontT24_0x0034 __attribute__(( section(".upper_fonts.FontT24_0x0034") )) = {   image_data_FontT24_0x0034, 13, 28};
+static const tImage FontT24_0x0035 __attribute__(( section(".upper_fonts.FontT24_0x0035") )) = {   image_data_FontT24_0x0035, 13, 28};
+static const tImage FontT24_0x0036 __attribute__(( section(".upper_fonts.FontT24_0x0036") )) = {   image_data_FontT24_0x0036, 13, 28};
+static const tImage FontT24_0x0037 __attribute__(( section(".upper_fonts.FontT24_0x0037") )) = {   image_data_FontT24_0x0037, 13, 28};
+static const tImage FontT24_0x0038 __attribute__(( section(".upper_fonts.FontT24_0x0038") )) = {   image_data_FontT24_0x0038, 13, 28};
+static const tImage FontT24_0x0039 __attribute__(( section(".upper_fonts.FontT24_0x0039") )) = {   image_data_FontT24_0x0039, 13, 28};
+static const tImage FontT24_0x003a __attribute__(( section(".upper_fonts.FontT24_0x003a") )) = {   image_data_FontT24_0x003a,  9, 28};
+static const tImage FontT24_0x003b __attribute__(( section(".upper_fonts.FontT24_0x003b") )) = {   image_data_FontT24_0x003b,  9, 28};
+static const tImage FontT24_0x003c __attribute__(( section(".upper_fonts.FontT24_0x003c") )) = {   image_data_FontT24_0x003c, 13, 28};
+static const tImage FontT24_0x003d __attribute__(( section(".upper_fonts.FontT24_0x003d") )) = {   image_data_FontT24_0x003d, 13, 28};
+static const tImage FontT24_0x003e __attribute__(( section(".upper_fonts.FontT24_0x003e") )) = {   image_data_FontT24_0x003e, 13, 28};
+static const tImage FontT24_0x003f __attribute__(( section(".upper_fonts.FontT24_0x003f") )) = {   image_data_FontT24_0x003f,  9, 28};
+static const tImage FontT24_0x0040 __attribute__(( section(".upper_fonts.FontT24_0x0040") )) = {   image_data_FontT24_0x0040, 19, 28};
+static const tImage FontT24_0x0041 __attribute__(( section(".upper_fonts.FontT24_0x0041") )) = {   image_data_FontT24_0x0041, 15, 28};
+static const tImage FontT24_0x0042 __attribute__(( section(".upper_fonts.FontT24_0x0042") )) = {   image_data_FontT24_0x0042, 14, 28};
+static const tImage FontT24_0x0043 __attribute__(( section(".upper_fonts.FontT24_0x0043") )) = {   image_data_FontT24_0x0043, 14, 28};
+static const tImage FontT24_0x0044 __attribute__(( section(".upper_fonts.FontT24_0x0044") )) = {   image_data_FontT24_0x0044, 15, 28};
+static const tImage FontT24_0x0045 __attribute__(( section(".upper_fonts.FontT24_0x0045") )) = {   image_data_FontT24_0x0045, 13, 28};
+static const tImage FontT24_0x0046 __attribute__(( section(".upper_fonts.FontT24_0x0046") )) = {   image_data_FontT24_0x0046, 13, 28};
+static const tImage FontT24_0x0047 __attribute__(( section(".upper_fonts.FontT24_0x0047") )) = {   image_data_FontT24_0x0047, 16, 28};
+static const tImage FontT24_0x0048 __attribute__(( section(".upper_fonts.FontT24_0x0048") )) = {   image_data_FontT24_0x0048, 16, 28};
+static const tImage FontT24_0x0049 __attribute__(( section(".upper_fonts.FontT24_0x0049") )) = {   image_data_FontT24_0x0049,  7, 28};
+static const tImage FontT24_0x004a __attribute__(( section(".upper_fonts.FontT24_0x004a") )) = {   image_data_FontT24_0x004a, 11, 28};
+static const tImage FontT24_0x004b __attribute__(( section(".upper_fonts.FontT24_0x004b") )) = {   image_data_FontT24_0x004b, 14, 28};
+static const tImage FontT24_0x004c __attribute__(( section(".upper_fonts.FontT24_0x004c") )) = {   image_data_FontT24_0x004c, 12, 28};
+static const tImage FontT24_0x004d __attribute__(( section(".upper_fonts.FontT24_0x004d") )) = {   image_data_FontT24_0x004d, 17, 28};
+static const tImage FontT24_0x004e __attribute__(( section(".upper_fonts.FontT24_0x004e") )) = {   image_data_FontT24_0x004e, 15, 28};
+static const tImage FontT24_0x004f __attribute__(( section(".upper_fonts.FontT24_0x004f") )) = {   image_data_FontT24_0x004f, 16, 28};
+static const tImage FontT24_0x0050 __attribute__(( section(".upper_fonts.FontT24_0x0050") )) = {   image_data_FontT24_0x0050, 13, 28};
+static const tImage FontT24_0x0051 __attribute__(( section(".upper_fonts.FontT24_0x0051") )) = {   image_data_FontT24_0x0051, 17, 28};
+static const tImage FontT24_0x0052 __attribute__(( section(".upper_fonts.FontT24_0x0052") )) = {   image_data_FontT24_0x0052, 14, 28};
+static const tImage FontT24_0x0053 __attribute__(( section(".upper_fonts.FontT24_0x0053") )) = {   image_data_FontT24_0x0053, 12, 28};
+static const tImage FontT24_0x0054 __attribute__(( section(".upper_fonts.FontT24_0x0054") )) = {   image_data_FontT24_0x0054, 14, 28};
+static const tImage FontT24_0x0055 __attribute__(( section(".upper_fonts.FontT24_0x0055") )) = {   image_data_FontT24_0x0055, 16, 28};
+static const tImage FontT24_0x0056 __attribute__(( section(".upper_fonts.FontT24_0x0056") )) = {   image_data_FontT24_0x0056, 14, 28};
+static const tImage FontT24_0x0057 __attribute__(( section(".upper_fonts.FontT24_0x0057") )) = {   image_data_FontT24_0x0057, 20, 28};
+static const tImage FontT24_0x0058 __attribute__(( section(".upper_fonts.FontT24_0x0058") )) = {   image_data_FontT24_0x0058, 13, 28};
+static const tImage FontT24_0x0059 __attribute__(( section(".upper_fonts.FontT24_0x0059") )) = {   image_data_FontT24_0x0059, 14, 28};
+static const tImage FontT24_0x005a __attribute__(( section(".upper_fonts.FontT24_0x005a") )) = {   image_data_FontT24_0x005a, 13, 28};
+static const tImage FontT24_0x005b __attribute__(( section(".upper_fonts.FontT24_0x005b") )) = {   image_data_FontT24_0x005b, 9, 28};
+static const tImage FontT24_0x005c __attribute__(( section(".upper_fonts.FontT24_0x005c") )) = {   image_data_FontT24_0x005c, 9, 28};
+static const tImage FontT24_0x005d __attribute__(( section(".upper_fonts.FontT24_0x005d") )) = {   image_data_FontT24_0x005d, 9, 28};
+static const tImage FontT24_0x005e __attribute__(( section(".upper_fonts.FontT24_0x005e") )) = {   image_data_FontT24_0x005e, 13, 28};
+static const tImage FontT24_0x005f __attribute__(( section(".upper_fonts.FontT24_0x005f") )) = {   image_data_FontT24_0x005f, 13, 28};
+static const tImage FontT24_0x0060 __attribute__(( section(".upper_fonts.FontT24_0x0060") )) = {   image_data_FontT24_0x0060, 13, 28};
+static const tImage FontT24_0x0061 __attribute__(( section(".upper_fonts.FontT24_0x0061") )) = {   image_data_FontT24_0x0061, 13, 28};
+static const tImage FontT24_0x0062 __attribute__(( section(".upper_fonts.FontT24_0x0062") )) = {   image_data_FontT24_0x0062, 13, 28};
+static const tImage FontT24_0x0063 __attribute__(( section(".upper_fonts.FontT24_0x0063") )) = {   image_data_FontT24_0x0063, 12, 28};
+static const tImage FontT24_0x0064 __attribute__(( section(".upper_fonts.FontT24_0x0064") )) = {   image_data_FontT24_0x0064, 13, 28};
+static const tImage FontT24_0x0065 __attribute__(( section(".upper_fonts.FontT24_0x0065") )) = {   image_data_FontT24_0x0065, 13, 28};
+static const tImage FontT24_0x0066 __attribute__(( section(".upper_fonts.FontT24_0x0066") )) = {   image_data_FontT24_0x0066, 9, 28};
+static const tImage FontT24_0x0067 __attribute__(( section(".upper_fonts.FontT24_0x0067") )) = {   image_data_FontT24_0x0067, 12, 28};
+static const tImage FontT24_0x0068 __attribute__(( section(".upper_fonts.FontT24_0x0068") )) = {   image_data_FontT24_0x0068, 13, 28};
+static const tImage FontT24_0x0069 __attribute__(( section(".upper_fonts.FontT24_0x0069") )) = {   image_data_FontT24_0x0069, 7, 28};
+static const tImage FontT24_0x006a __attribute__(( section(".upper_fonts.FontT24_0x006a") )) = {   image_data_FontT24_0x006a, 9, 28};
+static const tImage FontT24_0x006b __attribute__(( section(".upper_fonts.FontT24_0x006b") )) = {   image_data_FontT24_0x006b, 12, 28};
+static const tImage FontT24_0x006c __attribute__(( section(".upper_fonts.FontT24_0x006c") )) = {   image_data_FontT24_0x006c, 7, 28};
+static const tImage FontT24_0x006d __attribute__(( section(".upper_fonts.FontT24_0x006d") )) = {   image_data_FontT24_0x006d, 20, 28};
+static const tImage FontT24_0x006e __attribute__(( section(".upper_fonts.FontT24_0x006e") )) = {   image_data_FontT24_0x006e, 13, 28};
+static const tImage FontT24_0x006f __attribute__(( section(".upper_fonts.FontT24_0x006f") )) = {   image_data_FontT24_0x006f, 13, 28};
+static const tImage FontT24_0x0070 __attribute__(( section(".upper_fonts.FontT24_0x0070") )) = {   image_data_FontT24_0x0070, 13, 28};
+static const tImage FontT24_0x0071 __attribute__(( section(".upper_fonts.FontT24_0x0071") )) = {   image_data_FontT24_0x0071, 13, 28};
+static const tImage FontT24_0x0072 __attribute__(( section(".upper_fonts.FontT24_0x0072") )) = {   image_data_FontT24_0x0072, 9, 28};
+static const tImage FontT24_0x0073 __attribute__(( section(".upper_fonts.FontT24_0x0073") )) = {   image_data_FontT24_0x0073, 10, 28};
+static const tImage FontT24_0x0074 __attribute__(( section(".upper_fonts.FontT24_0x0074") )) = {   image_data_FontT24_0x0074, 10, 28};
+static const tImage FontT24_0x0075 __attribute__(( section(".upper_fonts.FontT24_0x0075") )) = {   image_data_FontT24_0x0075, 13, 28};
+static const tImage FontT24_0x0076 __attribute__(( section(".upper_fonts.FontT24_0x0076") )) = {   image_data_FontT24_0x0076, 12, 28};
+static const tImage FontT24_0x0077 __attribute__(( section(".upper_fonts.FontT24_0x0077") )) = {   image_data_FontT24_0x0077, 18, 28};
+static const tImage FontT24_0x0078 __attribute__(( section(".upper_fonts.FontT24_0x0078") )) = {   image_data_FontT24_0x0078, 12, 28};
+static const tImage FontT24_0x0079 __attribute__(( section(".upper_fonts.FontT24_0x0079") )) = {   image_data_FontT24_0x0079, 12, 28};
+static const tImage FontT24_0x007a __attribute__(( section(".upper_fonts.FontT24_0x007a") )) = {   image_data_FontT24_0x007a, 11, 28};
+
+static const tChar FontT24_array[] __attribute__(( section(".upper_fonts.FontT24min_array") )) = {
+
+  // character: '0'
+  {0x0030, &FontT24_0x0030},
+
+  // character: '1'
+  {0x0031, &FontT24_0x0031},
+
+  // character: '2'
+  {0x0032, &FontT24_0x0032},
+
+  // character: '3'
+  {0x0033, &FontT24_0x0033},
+
+  // character: '4'
+  {0x0034, &FontT24_0x0034},
+
+  // character: '5'
+  {0x0035, &FontT24_0x0035},
+
+  // character: '6'
+  {0x0036, &FontT24_0x0036},
+
+  // character: '7'
+  {0x0037, &FontT24_0x0037},
+
+  // character: '8'
+  {0x0038, &FontT24_0x0038},
+
+  // character: '9'
+  {0x0039, &FontT24_0x0039},
+
+  // character: ':'
+  {0x003a, &FontT24_0x003a},
+
+  // character: ';'
+  {0x003b, &FontT24_0x003b},
+
+  // character: '<'
+  {0x003c, &FontT24_0x003c},
+
+  // character: '='
+  {0x003d, &FontT24_0x003d},
+
+  // character: '>'
+  {0x003e, &FontT24_0x003e},
+
+  // character: '?'
+  {0x003f, &FontT24_0x003f},
+
+  // character: '\x0040'
+  {0x0040, &FontT24_0x0040},
+
+  // character: 'A'
+  {0x0041, &FontT24_0x0041},
+
+  // character: 'B'
+  {0x0042, &FontT24_0x0042},
+
+  // character: 'C'
+  {0x0043, &FontT24_0x0043},
+
+  // character: 'D'
+  {0x0044, &FontT24_0x0044},
+
+  // character: 'E'
+  {0x0045, &FontT24_0x0045},
+
+  // character: 'F'
+  {0x0046, &FontT24_0x0046},
+
+  // character: 'G'
+  {0x0047, &FontT24_0x0047},
+
+  // character: 'H'
+  {0x0048, &FontT24_0x0048},
+
+  // character: 'I'
+  {0x0049, &FontT24_0x0049},
+
+  // character: 'J'
+  {0x004a, &FontT24_0x004a},
+
+  // character: 'K'
+  {0x004b, &FontT24_0x004b},
+
+  // character: 'L'
+  {0x004c, &FontT24_0x004c},
+
+  // character: 'M'
+  {0x004d, &FontT24_0x004d},
+
+  // character: 'N'
+  {0x004e, &FontT24_0x004e},
+
+  // character: 'O'
+  {0x004f, &FontT24_0x004f},
+
+  // character: 'P'
+  {0x0050, &FontT24_0x0050},
+
+  // character: 'Q'
+  {0x0051, &FontT24_0x0051},
+
+  // character: 'R'
+  {0x0052, &FontT24_0x0052},
+
+  // character: 'S'
+  {0x0053, &FontT24_0x0053},
+
+  // character: 'T'
+  {0x0054, &FontT24_0x0054},
+
+  // character: 'U'
+  {0x0055, &FontT24_0x0055},
+
+  // character: 'V'
+  {0x0056, &FontT24_0x0056},
+
+  // character: 'W'
+  {0x0057, &FontT24_0x0057},
+
+  // character: 'X'
+  {0x0058, &FontT24_0x0058},
+
+  // character: 'Y'
+  {0x0059, &FontT24_0x0059},
+
+  // character: 'Z'
+  {0x005a, &FontT24_0x005a},
+
+  // character: '['
+  {0x005b, &FontT24_0x005b},
+
+  // character: '\'
+  {0x005c, &FontT24_0x005c},
+
+  // character: ']'
+  {0x005d, &FontT24_0x005d},
+
+  // character: '^'
+  {0x005e, &FontT24_0x005e},
+
+  // character: '_'
+  {0x005f, &FontT24_0x005f},
+
+  // character: '`'
+  {0x0060, &FontT24_0x0060},
+
+  // character: 'a'
+  {0x0061, &FontT24_0x0061},
+
+  // character: 'b'
+  {0x0062, &FontT24_0x0062},
+
+  // character: 'c'
+  {0x0063, &FontT24_0x0063},
+
+  // character: 'd'
+  {0x0064, &FontT24_0x0064},
+
+  // character: 'e'
+  {0x0065, &FontT24_0x0065},
+
+  // character: 'f'
+  {0x0066, &FontT24_0x0066},
+
+  // character: 'g'
+  {0x0067, &FontT24_0x0067},
+
+  // character: 'h'
+  {0x0068, &FontT24_0x0068},
+
+  // character: 'i'
+  {0x0069, &FontT24_0x0069},
+
+  // character: 'j'
+  {0x006a, &FontT24_0x006a},
+
+  // character: 'k'
+  {0x006b, &FontT24_0x006b},
+
+  // character: 'l'
+  {0x006c, &FontT24_0x006c},
+
+  // character: 'm'
+  {0x006d, &FontT24_0x006d},
+
+  // character: 'n'
+  {0x006e, &FontT24_0x006e},
+
+  // character: 'o'
+  {0x006f, &FontT24_0x006f},
+
+  // character: 'p'
+  {0x0070, &FontT24_0x0070},
+
+  // character: 'q'
+  {0x0071, &FontT24_0x0071},
+
+  // character: 'r'
+  {0x0072, &FontT24_0x0072},
+
+  // character: 's'
+  {0x0073, &FontT24_0x0073},
+
+  // character: 't'
+  {0x0074, &FontT24_0x0074},
+
+  // character: 'u'
+  {0x0075, &FontT24_0x0075},
+
+  // character: 'v'
+  {0x0076, &FontT24_0x0076},
+
+  // character: 'w'
+  {0x0077, &FontT24_0x0077},
+
+  // character: 'x'
+  {0x0078, &FontT24_0x0078},
+
+  // character: 'y'
+  {0x0079, &FontT24_0x0079},
+
+  // character: 'z'
+  {0x007a, &FontT24_0x007a}
+};
+
+const tFont FontT24min __attribute__ (( used, section(".upper_font_directory.FontT24") )) = { 75, FontT24_array, 7, 13, 28 };
+
+static const uint8_t image_data_FontT24_0x0030_mod[216] = { 0, 9, 5, 1, 11, 1, 35, 5, 11, 1, 0, 18, 35, 1, 98, 1, 176, 1, 219, 1, 235, 5, 219, 1, 141, 1, 60, 1, 5, 1, 0, 14, 98, 1, 235, 1, 255, 4, 245, 3, 255, 4, 176, 1, 11, 1, 0, 12, 11, 1, 255, 2, 239, 1, 175, 1, 128, 1, 89, 1, 56, 3, 89, 2, 175, 1, 239, 1, 255, 1, 219, 1, 0, 12, 219, 1, 255, 1, 203, 1, 25, 1, 0, 9, 25, 1, 239, 1, 255, 1, 141, 1, 0, 11, 255, 2, 12, 1, 0, 11, 25, 1, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 5, 1, 0, 12, 255, 2, 0, 11, 203, 1, 255, 1, 176, 1, 11, 1, 0, 9, 5, 1, 141, 1, 255, 1, 245, 1, 0, 11, 12, 1, 245, 1, 255, 1, 219, 1, 141, 1, 60, 2, 35, 4, 60, 1, 98, 1, 176, 1, 255, 2, 56, 1, 0, 12, 56, 1, 203, 1, 255, 4, 235, 4, 255, 3, 245, 1, 128, 1, 0, 14, 12, 1, 89, 1, 175, 1, 239, 1, 245, 5, 239, 1, 203, 1, 175, 1, 56, 1, 0, 18, 25, 1, 56, 5, 25, 1, 12, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x0031_mod[54] = { 0, 72, 98, 2, 0, 26, 89, 1, 255, 1, 98, 1, 0, 26, 239, 1, 255, 1, 11, 1, 0, 13, 11, 12, 36, 1, 255, 1, 219, 1, 5, 1, 0, 12, 219, 13, 255, 2, 176, 1, 5, 1, 0, 11, 255, 16, 176, 1, 0, 11, 89, 17, 0, 118 };
+static const uint8_t image_data_FontT24_0x0032_mod[204] = { 0, 5, 11, 1, 0, 13, 11, 1, 0, 13, 219, 1, 60, 1, 0, 11, 35, 1, 219, 1, 98, 1, 0, 12, 255, 2, 141, 1, 11, 1, 0, 9, 155, 1, 255, 2, 35, 1, 0, 11, 255, 3, 219, 1, 35, 1, 0, 9, 203, 1, 255, 1, 235, 1, 0, 11, 255, 2, 239, 1, 255, 1, 235, 1, 98, 1, 5, 1, 0, 7, 12, 1, 255, 2, 0, 11, 255, 2, 25, 1, 175, 1, 255, 2, 176, 1, 35, 1, 0, 7, 255, 2, 0, 11, 255, 2, 0, 2, 89, 1, 239, 1, 255, 1, 235, 1, 98, 1, 5, 1, 0, 5, 255, 2, 0, 11, 255, 2, 0, 3, 25, 1, 175, 1, 255, 2, 176, 1, 60, 1, 5, 1, 0, 1, 5, 1, 98, 1, 255, 1, 245, 1, 0, 11, 255, 2, 0, 5, 128, 1, 239, 1, 255, 2, 176, 1, 141, 1, 176, 1, 255, 2, 56, 1, 0, 11, 255, 2, 0, 6, 25, 1, 175, 1, 245, 1, 255, 4, 175, 1, 0, 12, 255, 2, 0, 8, 56, 1, 128, 1, 175, 2, 89, 1, 0, 13, 203, 2, 0, 26, 12, 2, 0, 21 };
+static const uint8_t image_data_FontT24_0x0033_mod[188] = { 0, 33, 36, 1, 60, 1, 5, 1, 0, 12, 35, 1, 0, 12, 98, 1, 255, 1, 167, 1, 0, 11, 98, 1, 235, 1, 98, 1, 0, 11, 255, 2, 56, 1, 0, 11, 128, 1, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 6, 141, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 35, 1, 0, 4, 60, 1, 255, 1, 245, 1, 98, 1, 0, 3, 98, 1, 255, 2, 0, 11, 128, 1, 255, 1, 235, 1, 60, 1, 11, 2, 60, 1, 255, 2, 56, 1, 255, 1, 141, 1, 98, 1, 141, 1, 255, 2, 89, 1, 0, 12, 239, 1, 255, 2, 219, 2, 255, 2, 239, 1, 0, 1, 175, 1, 255, 4, 203, 1, 0, 13, 25, 1, 203, 1, 245, 1, 255, 2, 245, 1, 175, 1, 25, 1, 0, 2, 128, 1, 175, 1, 203, 1, 128, 1, 12, 1, 0, 14, 12, 1, 56, 1, 89, 2, 56, 1, 0, 6, 12, 1, 0, 37 };
+static const uint8_t image_data_FontT24_0x0034_mod[126] = { 0, 10, 141, 1, 98, 1, 0, 26, 255, 2, 141, 1, 0, 25, 255, 3, 141, 1, 5, 1, 0, 23, 255, 2, 128, 1, 255, 1, 176, 1, 11, 1, 0, 22, 255, 2, 0, 1, 128, 1, 255, 1, 219, 1, 11, 1, 0, 21, 255, 2, 0, 2, 89, 1, 245, 1, 219, 1, 35, 1, 0, 20, 255, 2, 0, 3, 56, 1, 239, 1, 235, 1, 60, 1, 0, 19, 255, 2, 0, 4, 25, 1, 203, 1, 255, 1, 60, 1, 0, 13, 141, 5, 255, 2, 141, 5, 154, 1, 255, 2, 98, 1, 0, 12, 255, 16, 141, 1, 0, 11, 175, 5, 255, 2, 175, 10, 0, 16, 255, 2, 0, 26, 128, 2, 0, 16 };
+static const uint8_t image_data_FontT24_0x0035_mod[174] = { 0, 34, 35, 1, 0, 7, 11, 8, 0, 11, 60, 1, 235, 1, 141, 1, 0, 6, 219, 8, 0, 11, 255, 2, 128, 1, 0, 6, 175, 1, 255, 7, 0, 11, 255, 2, 0, 8, 255, 1, 153, 1, 89, 3, 255, 2, 0, 11, 255, 2, 0, 8, 255, 2, 0, 3, 255, 2, 0, 11, 255, 2, 0, 8, 255, 2, 0, 3, 255, 2, 0, 11, 255, 2, 35, 1, 0, 6, 35, 1, 255, 2, 0, 3, 255, 2, 0, 11, 128, 1, 255, 1, 235, 1, 60, 1, 5, 2, 0, 1, 5, 1, 35, 1, 235, 1, 255, 1, 245, 1, 0, 3, 255, 2, 0, 12, 239, 1, 255, 2, 176, 2, 141, 1, 176, 1, 235, 1, 255, 2, 56, 1, 0, 3, 255, 2, 0, 12, 25, 1, 203, 1, 245, 1, 255, 5, 239, 1, 89, 1, 0, 4, 203, 2, 0, 13, 12, 1, 56, 1, 128, 1, 175, 3, 89, 1, 25, 1, 0, 5, 12, 2, 0, 34 };
+static const uint8_t image_data_FontT24_0x0036_mod[220] = { 0, 10, 5, 4, 0, 21, 11, 1, 60, 1, 141, 1, 176, 4, 98, 1, 35, 1, 5, 1, 0, 17, 35, 1, 219, 1, 255, 7, 235, 1, 176, 1, 35, 1, 0, 15, 5, 1, 235, 1, 255, 1, 203, 1, 128, 3, 203, 1, 255, 2, 239, 1, 255, 1, 235, 1, 98, 1, 0, 14, 176, 1, 255, 1, 175, 1, 12, 1, 0, 3, 12, 1, 175, 1, 255, 1, 124, 1, 128, 1, 255, 2, 141, 1, 0, 13, 255, 2, 0, 7, 255, 2, 0, 1, 89, 1, 245, 1, 255, 1, 141, 1, 0, 12, 255, 2, 0, 7, 255, 2, 0, 2, 56, 1, 245, 1, 255, 1, 35, 1, 0, 11, 255, 2, 5, 1, 0, 5, 5, 1, 255, 2, 0, 3, 56, 1, 255, 1, 235, 1, 0, 11, 239, 1, 255, 1, 176, 1, 11, 1, 0, 3, 11, 1, 176, 1, 255, 1, 245, 1, 0, 4, 146, 1, 175, 1, 0, 11, 25, 1, 255, 2, 219, 1, 141, 1, 98, 1, 141, 1, 219, 1, 255, 2, 56, 1, 0, 4, 56, 1, 0, 13, 89, 1, 245, 1, 255, 5, 245, 1, 128, 1, 0, 20, 56, 1, 128, 1, 203, 3, 128, 1, 56, 1, 0, 23, 12, 3, 0, 16 };
+static const uint8_t image_data_FontT24_0x0037_mod[170] = { 0, 48, 219, 2, 0, 11, 60, 1, 11, 1, 0, 13, 255, 2, 0, 11, 255, 1, 219, 1, 141, 1, 35, 1, 5, 1, 0, 10, 255, 2, 0, 11, 255, 3, 235, 1, 176, 1, 60, 1, 5, 1, 0, 8, 255, 2, 0, 11, 89, 1, 175, 1, 239, 1, 255, 3, 176, 1, 98, 1, 11, 1, 0, 6, 255, 2, 0, 13, 25, 1, 89, 1, 203, 1, 245, 1, 255, 2, 219, 1, 98, 1, 11, 1, 0, 4, 255, 2, 0, 15, 12, 1, 56, 1, 175, 1, 245, 1, 255, 2, 219, 1, 98, 1, 11, 1, 0, 2, 255, 2, 0, 18, 56, 1, 175, 1, 239, 1, 255, 2, 219, 1, 98, 1, 11, 1, 255, 2, 0, 20, 25, 1, 128, 1, 239, 1, 255, 2, 219, 1, 255, 2, 0, 22, 25, 1, 128, 1, 245, 1, 255, 3, 0, 24, 56, 1, 175, 1, 245, 1, 255, 1, 0, 26, 56, 1, 128, 1, 0, 6 };
+static const uint8_t image_data_FontT24_0x0038_mod[260] = { 0, 9, 5, 2, 0, 23, 5, 1, 98, 1, 141, 1, 176, 2, 98, 1, 11, 1, 0, 3, 5, 1, 35, 2, 11, 1, 0, 14, 176, 1, 255, 5, 219, 1, 11, 1, 0, 1, 35, 1, 176, 1, 235, 2, 219, 1, 60, 1, 0, 12, 60, 1, 255, 2, 203, 1, 128, 2, 239, 1, 255, 1, 219, 1, 5, 1, 235, 1, 255, 1, 245, 2, 255, 2, 11, 1, 0, 11, 255, 2, 175, 1, 12, 1, 0, 2, 25, 1, 203, 1, 255, 1, 176, 1, 255, 1, 239, 1, 56, 2, 203, 1, 255, 1, 219, 1, 0, 11, 255, 2, 0, 5, 12, 1, 255, 3, 25, 1, 0, 2, 12, 1, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 128, 1, 0, 4, 255, 2, 0, 11, 255, 2, 0, 5, 35, 1, 255, 2, 35, 1, 0, 4, 255, 2, 0, 11, 255, 2, 141, 1, 0, 3, 11, 1, 235, 1, 255, 2, 235, 1, 98, 1, 11, 2, 141, 1, 255, 1, 245, 1, 0, 11, 89, 1, 255, 2, 141, 1, 60, 1, 98, 1, 219, 1, 255, 1, 203, 1, 89, 1, 255, 2, 219, 2, 255, 2, 56, 1, 0, 12, 203, 1, 255, 5, 239, 1, 12, 1, 0, 1, 89, 1, 239, 1, 255, 2, 245, 1, 128, 1, 0, 13, 12, 1, 128, 1, 203, 1, 239, 2, 175, 1, 25, 1, 0, 3, 25, 1, 89, 2, 56, 1, 0, 16, 12, 1, 25, 2, 0, 17 };
+static const uint8_t image_data_FontT24_0x0039_mod[210] = { 0, 14, 5, 1, 11, 3, 5, 1, 0, 22, 60, 1, 176, 1, 219, 3, 176, 1, 60, 1, 0, 20, 141, 1, 255, 7, 141, 1, 0, 12, 60, 1, 0, 5, 60, 1, 255, 2, 203, 1, 89, 3, 175, 1, 255, 2, 35, 1, 0, 11, 255, 1, 141, 1, 0, 4, 255, 2, 175, 1, 12, 1, 0, 4, 128, 1, 255, 1, 235, 1, 0, 11, 239, 1, 255, 1, 60, 1, 0, 3, 255, 2, 0, 7, 255, 2, 0, 11, 25, 1, 255, 2, 60, 1, 0, 2, 255, 2, 0, 7, 255, 2, 0, 12, 128, 1, 255, 2, 98, 1, 0, 1, 255, 2, 5, 1, 0, 5, 5, 1, 255, 2, 0, 13, 128, 1, 255, 2, 141, 1, 125, 1, 255, 1, 176, 1, 11, 1, 0, 3, 11, 1, 176, 1, 255, 1, 175, 1, 0, 14, 89, 1, 239, 1, 255, 1, 235, 1, 255, 2, 219, 1, 141, 3, 219, 1, 255, 1, 239, 1, 0, 16, 25, 1, 175, 1, 239, 1, 255, 6, 245, 1, 203, 1, 25, 1, 0, 18, 25, 1, 128, 1, 175, 1, 203, 2, 175, 1, 128, 1, 56, 1, 12, 1, 0, 22, 12, 2, 0, 12 };
+static const uint8_t image_data_FontT24_0x003a_mod[74] = { 0, 61, 11, 1, 98, 2, 11, 1, 0, 5, 11, 1, 98, 2, 11, 1, 0, 15, 219, 1, 255, 2, 219, 1, 0, 5, 219, 1, 255, 2, 219, 1, 0, 15, 255, 4, 0, 5, 255, 4, 0, 15, 89, 1, 203, 1, 239, 1, 89, 1, 0, 5, 89, 1, 203, 1, 239, 1, 89, 1, 0, 16, 12, 1, 25, 1, 0, 7, 12, 1, 25, 1, 0, 67 };
+static const uint8_t image_data_FontT24_0x003b_mod[96] = { 0, 29, 11, 1, 0, 27, 210, 1, 60, 1, 0, 3, 11, 1, 60, 1, 11, 1, 0, 5, 11, 1, 98, 2, 11, 1, 0, 11, 56, 1, 255, 1, 98, 1, 11, 2, 219, 1, 255, 1, 219, 1, 0, 5, 219, 1, 255, 2, 219, 1, 0, 12, 89, 1, 245, 1, 219, 2, 255, 3, 0, 5, 255, 4, 0, 13, 56, 1, 175, 1, 239, 3, 128, 1, 0, 5, 89, 1, 203, 1, 239, 1, 89, 1, 0, 15, 25, 3, 0, 7, 12, 1, 25, 1, 0, 67 };
+static const uint8_t image_data_FontT24_0x003c_mod[114] = { 0, 40, 60, 1, 0, 26, 35, 1, 255, 1, 35, 1, 0, 25, 235, 1, 255, 1, 235, 1, 0, 24, 5, 1, 255, 1, 203, 1, 255, 1, 5, 1, 0, 23, 176, 1, 255, 1, 12, 1, 255, 1, 176, 1, 0, 23, 255, 1, 245, 1, 0, 1, 245, 1, 255, 1, 0, 22, 98, 1, 255, 1, 56, 1, 0, 1, 56, 1, 255, 1, 98, 1, 0, 21, 255, 2, 0, 3, 255, 2, 0, 20, 60, 1, 255, 1, 175, 1, 0, 3, 175, 1, 255, 1, 60, 1, 0, 19, 203, 2, 0, 5, 203, 2, 0, 19, 12, 2, 0, 5, 12, 2, 0, 39 };
+static const uint8_t image_data_FontT24_0x003d_mod[90] = { 0, 38, 60, 2, 0, 2, 60, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 255, 2, 0, 2, 255, 2, 0, 22, 89, 2, 0, 2, 89, 2, 0, 40 };
+static const uint8_t image_data_FontT24_0x003e_mod[110] = { 0, 36, 60, 2, 0, 5, 60, 2, 0, 19, 203, 1, 255, 1, 11, 1, 0, 3, 11, 1, 255, 1, 203, 1, 0, 19, 12, 1, 255, 1, 219, 1, 0, 3, 219, 1, 255, 1, 12, 1, 0, 20, 245, 1, 255, 1, 0, 3, 255, 1, 245, 1, 0, 21, 56, 1, 255, 1, 141, 1, 0, 1, 141, 1, 255, 1, 56, 1, 0, 22, 255, 2, 0, 1, 255, 2, 0, 23, 128, 1, 255, 1, 60, 1, 255, 1, 128, 1, 0, 24, 255, 3, 0, 25, 175, 1, 255, 1, 175, 1, 0, 26, 203, 1, 0, 27, 12, 1, 0, 43 };
+static const uint8_t image_data_FontT24_0x003f_mod[144] = { 0, 20, 11, 1, 98, 1, 0, 12, 11, 2, 0, 12, 140, 1, 255, 1, 141, 1, 0, 10, 98, 1, 219, 2, 98, 1, 0, 1, 98, 1, 141, 2, 60, 1, 5, 1, 0, 6, 255, 2, 0, 10, 255, 4, 0, 1, 245, 2, 255, 2, 176, 1, 35, 1, 0, 5, 255, 2, 0, 10, 203, 1, 255, 2, 203, 1, 0, 1, 56, 2, 89, 1, 175, 1, 255, 1, 235, 1, 60, 1, 0, 3, 5, 1, 255, 2, 0, 10, 12, 1, 89, 2, 12, 1, 0, 5, 128, 1, 255, 2, 98, 1, 35, 2, 176, 1, 255, 1, 245, 1, 0, 20, 128, 1, 255, 2, 235, 2, 255, 2, 56, 1, 0, 21, 89, 1, 203, 1, 245, 2, 239, 1, 128, 1, 0, 23, 12, 1, 56, 2, 25, 1, 0, 7 };
+static const uint8_t image_data_FontT24_0x0040_mod[368] = { 0, 11, 5, 2, 0, 23, 35, 1, 98, 1, 141, 1, 176, 2, 141, 1, 98, 1, 11, 1, 0, 18, 5, 1, 141, 1, 235, 1, 245, 1, 239, 1, 203, 2, 239, 1, 255, 1, 219, 1, 98, 1, 0, 17, 176, 1, 245, 1, 128, 1, 56, 1, 25, 1, 12, 2, 25, 1, 89, 1, 175, 1, 255, 1, 141, 1, 0, 15, 141, 1, 239, 1, 56, 1, 0, 8, 89, 1, 245, 1, 141, 1, 0, 13, 5, 1, 255, 1, 25, 1, 0, 2, 35, 1, 60, 1, 11, 1, 0, 5, 56, 1, 255, 1, 0, 13, 176, 1, 175, 1, 0, 2, 60, 1, 235, 1, 255, 1, 219, 1, 0, 2, 60, 1, 35, 1, 0, 2, 203, 1, 141, 1, 0, 12, 255, 1, 0, 3, 255, 1, 203, 1, 128, 1, 239, 1, 141, 1, 0, 1, 128, 1, 235, 1, 0, 2, 12, 1, 255, 1, 0, 12, 255, 1, 0, 3, 255, 1, 12, 1, 0, 1, 25, 1, 255, 1, 0, 2, 255, 1, 0, 3, 255, 1, 0, 12, 255, 1, 0, 3, 255, 1, 0, 3, 255, 1, 0, 1, 11, 1, 255, 1, 0, 3, 255, 1, 0, 12, 255, 1, 0, 3, 128, 1, 141, 3, 255, 1, 141, 1, 219, 1, 203, 1, 0, 3, 255, 1, 0, 12, 255, 1, 5, 1, 0, 2, 141, 1, 255, 1, 245, 3, 239, 1, 175, 1, 12, 1, 0, 2, 11, 1, 255, 1, 0, 12, 203, 1, 176, 1, 0, 2, 255, 1, 89, 1, 56, 3, 25, 1, 0, 4, 219, 1, 175, 1, 0, 12, 12, 1, 255, 1, 53, 1, 0, 1, 255, 1, 0, 8, 60, 1, 255, 1, 0, 14, 245, 1, 56, 1, 0, 1, 255, 1, 35, 1, 0, 5, 5, 1, 98, 1, 255, 1, 175, 1, 0, 14, 56, 1, 0, 2, 128, 1, 235, 1, 98, 1, 60, 3, 98, 1, 176, 1, 255, 1, 175, 1, 0, 19, 128, 1, 239, 1, 255, 3, 245, 1, 239, 1, 128, 1, 0, 21, 25, 1, 89, 1, 128, 1, 89, 1, 56, 1, 25, 1, 0, 40 };
+static const uint8_t image_data_FontT24_0x0041_mod[236] = { 0, 5, 176, 1, 60, 1, 11, 1, 0, 25, 255, 2, 219, 1, 98, 1, 35, 1, 0, 23, 203, 1, 245, 1, 255, 2, 235, 1, 141, 1, 60, 1, 11, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 255, 3, 219, 1, 98, 1, 35, 1, 0, 21, 12, 1, 255, 2, 203, 1, 245, 1, 255, 1, 235, 1, 141, 1, 60, 1, 5, 1, 0, 19, 255, 2, 12, 1, 56, 1, 128, 1, 239, 1, 255, 2, 176, 1, 98, 1, 11, 1, 0, 17, 255, 2, 0, 3, 25, 1, 89, 1, 175, 1, 239, 1, 255, 1, 219, 1, 141, 1, 35, 1, 0, 15, 255, 2, 0, 4, 5, 1, 35, 1, 124, 1, 255, 2, 245, 1, 183, 1, 0, 15, 255, 2, 0, 1, 11, 1, 60, 1, 98, 1, 176, 1, 235, 1, 255, 1, 239, 1, 128, 1, 56, 1, 12, 1, 0, 15, 255, 2, 141, 1, 219, 1, 255, 2, 239, 1, 175, 1, 89, 1, 25, 1, 0, 15, 11, 1, 60, 1, 141, 1, 255, 3, 245, 1, 203, 1, 128, 1, 25, 1, 0, 17, 141, 1, 219, 1, 255, 3, 239, 1, 175, 1, 56, 1, 12, 1, 0, 19, 255, 2, 245, 1, 175, 1, 89, 1, 25, 1, 0, 22, 203, 1, 128, 1, 56, 1, 0, 25, 12, 1, 0, 22 };
+static const uint8_t image_data_FontT24_0x0042_mod[190] = { 0, 33, 35, 17, 0, 11, 235, 17, 0, 11, 255, 2, 245, 6, 255, 2, 245, 5, 255, 2, 0, 11, 255, 2, 56, 6, 255, 2, 56, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 5, 1, 0, 4, 5, 1, 255, 1, 239, 1, 141, 1, 0, 3, 60, 1, 255, 2, 0, 11, 203, 1, 255, 1, 176, 1, 5, 1, 0, 3, 176, 1, 255, 1, 25, 1, 255, 1, 141, 1, 98, 1, 141, 1, 255, 2, 128, 1, 0, 11, 12, 1, 255, 2, 176, 1, 98, 1, 60, 1, 141, 1, 255, 2, 0, 1, 203, 1, 255, 4, 239, 1, 0, 13, 128, 1, 255, 6, 89, 1, 0, 1, 12, 1, 128, 1, 203, 2, 175, 1, 25, 1, 0, 14, 89, 1, 203, 1, 239, 2, 203, 1, 89, 1, 0, 4, 12, 2, 0, 17, 12, 1, 25, 2, 12, 1, 0, 16 };
+static const uint8_t image_data_FontT24_0x0043_mod[196] = { 0, 10, 5, 1, 11, 2, 35, 1, 11, 2, 0, 20, 11, 1, 98, 1, 176, 1, 219, 2, 235, 1, 219, 2, 141, 1, 60, 1, 5, 1, 0, 16, 60, 1, 219, 1, 255, 9, 176, 1, 35, 1, 0, 14, 60, 1, 255, 2, 245, 1, 175, 1, 128, 1, 89, 3, 128, 1, 203, 1, 245, 1, 255, 1, 235, 1, 35, 1, 0, 12, 5, 1, 255, 2, 203, 1, 56, 1, 0, 6, 12, 1, 56, 1, 203, 1, 255, 1, 235, 1, 0, 12, 176, 1, 255, 1, 245, 1, 12, 1, 0, 9, 12, 1, 245, 1, 255, 1, 98, 1, 0, 11, 255, 2, 56, 1, 0, 11, 56, 1, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 203, 1, 255, 1, 141, 1, 0, 11, 35, 1, 255, 2, 0, 11, 12, 1, 255, 2, 47, 1, 0, 10, 183, 1, 245, 1, 89, 1, 0, 12, 155, 1, 175, 1, 25, 1, 0, 10, 12, 1, 56, 1, 0, 13, 12, 1, 0, 21 };
+static const uint8_t image_data_FontT24_0x0044_mod[168] = { 0, 33, 35, 17, 0, 11, 235, 17, 0, 11, 255, 2, 245, 13, 255, 2, 0, 11, 255, 2, 56, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 239, 1, 255, 1, 98, 1, 0, 11, 35, 1, 255, 2, 0, 11, 25, 1, 255, 2, 35, 1, 0, 9, 5, 1, 235, 1, 255, 1, 89, 1, 0, 12, 239, 1, 255, 1, 235, 1, 60, 1, 5, 1, 0, 6, 11, 1, 176, 1, 255, 1, 245, 1, 0, 13, 25, 1, 239, 1, 255, 2, 176, 1, 98, 1, 60, 3, 98, 1, 141, 1, 219, 1, 255, 1, 245, 1, 56, 1, 0, 14, 25, 1, 203, 1, 255, 9, 239, 1, 56, 1, 0, 16, 12, 1, 89, 1, 175, 1, 203, 1, 239, 4, 203, 1, 128, 1, 25, 1, 0, 20, 12, 1, 25, 4, 12, 1, 0, 11 };
+static const uint8_t image_data_FontT24_0x0045_mod[122] = { 0, 33, 35, 17, 0, 11, 235, 17, 0, 11, 255, 2, 245, 6, 255, 2, 245, 5, 255, 2, 0, 11, 255, 2, 56, 6, 255, 2, 56, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 255, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 203, 2, 0, 5, 255, 2, 0, 11, 255, 2, 0, 6, 12, 2, 0, 5, 255, 2, 0, 11, 239, 2, 0, 13, 239, 2, 0, 11, 25, 2, 0, 13, 25, 2, 0, 6 };
+static const uint8_t image_data_FontT24_0x0046_mod[86] = { 0, 33, 35, 17, 0, 11, 235, 17, 0, 11, 245, 8, 255, 2, 245, 5, 255, 2, 0, 11, 56, 8, 255, 2, 56, 5, 255, 2, 0, 19, 255, 2, 0, 5, 255, 2, 0, 19, 255, 2, 0, 5, 255, 2, 0, 19, 255, 2, 0, 5, 255, 2, 0, 19, 255, 2, 0, 5, 255, 2, 0, 19, 245, 2, 0, 5, 255, 2, 0, 19, 56, 2, 0, 5, 255, 2, 0, 26, 255, 2, 0, 26, 128, 2, 0, 6 };
+static const uint8_t image_data_FontT24_0x0047_mod[216] = { 0, 11, 11, 2, 35, 1, 11, 1, 5, 1, 0, 20, 11, 1, 60, 1, 141, 1, 219, 2, 235, 1, 219, 1, 176, 1, 141, 1, 60, 1, 5, 1, 0, 16, 35, 1, 219, 1, 255, 9, 176, 1, 11, 1, 0, 14, 35, 1, 235, 1, 255, 1, 245, 1, 175, 1, 128, 1, 89, 3, 128, 1, 203, 1, 255, 2, 219, 1, 5, 1, 0, 13, 235, 1, 255, 1, 239, 1, 56, 1, 0, 6, 12, 1, 89, 1, 245, 1, 255, 1, 176, 1, 0, 12, 98, 1, 255, 2, 25, 1, 0, 9, 56, 1, 255, 2, 11, 1, 0, 11, 255, 2, 89, 1, 0, 11, 128, 1, 255, 1, 219, 1, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 5, 98, 2, 0, 6, 255, 2, 0, 11, 255, 2, 11, 1, 0, 4, 255, 2, 0, 6, 255, 2, 0, 11, 175, 1, 255, 1, 219, 1, 35, 4, 255, 2, 0, 5, 98, 1, 255, 2, 0, 12, 255, 2, 235, 4, 255, 2, 0, 5, 175, 1, 245, 1, 89, 1, 0, 12, 203, 1, 245, 7, 0, 6, 56, 1, 0, 13, 12, 1, 56, 7, 0, 42 };
+static const uint8_t image_data_FontT24_0x0048_mod[74] = { 0, 33, 35, 17, 0, 11, 235, 17, 0, 11, 245, 8, 255, 2, 245, 7, 0, 11, 56, 8, 255, 2, 56, 7, 0, 19, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 18, 35, 8, 255, 2, 35, 7, 0, 11, 235, 8, 255, 2, 235, 7, 0, 11, 245, 17, 0, 11, 56, 17, 0, 34 };
+static const uint8_t image_data_FontT24_0x0049_mod[14] = { 0, 61, 141, 17, 0, 11, 255, 17, 0, 11, 175, 17, 0, 62 };
+static const uint8_t image_data_FontT24_0x004a_mod[90] = { 0, 7, 35, 1, 98, 1, 0, 25, 141, 1, 235, 1, 255, 1, 0, 24, 141, 1, 255, 1, 245, 1, 175, 1, 0, 24, 255, 2, 56, 1, 0, 25, 255, 2, 0, 26, 255, 2, 5, 1, 0, 25, 239, 1, 255, 1, 176, 1, 60, 1, 35, 1, 11, 12, 0, 11, 25, 1, 245, 1, 255, 2, 235, 1, 219, 12, 0, 12, 56, 1, 203, 1, 239, 1, 245, 1, 255, 12, 0, 13, 12, 1, 25, 1, 56, 1, 89, 12, 0, 34 };
+static const uint8_t image_data_FontT24_0x004b_mod[192] = { 0, 33, 35, 17, 0, 11, 235, 17, 0, 11, 245, 5, 255, 3, 245, 9, 0, 11, 56, 5, 203, 1, 255, 2, 92, 1, 56, 8, 0, 16, 12, 1, 128, 1, 245, 1, 235, 1, 98, 1, 5, 1, 0, 24, 117, 1, 255, 2, 176, 1, 35, 1, 0, 21, 35, 1, 141, 1, 255, 2, 245, 1, 255, 1, 235, 1, 98, 1, 5, 1, 0, 17, 5, 1, 98, 1, 235, 1, 255, 2, 203, 1, 56, 1, 128, 1, 245, 1, 255, 1, 176, 1, 35, 1, 0, 15, 35, 1, 176, 1, 255, 2, 239, 1, 128, 1, 12, 1, 0, 2, 56, 1, 239, 1, 255, 1, 235, 1, 98, 1, 0, 12, 5, 1, 98, 1, 235, 1, 255, 1, 245, 1, 175, 1, 25, 1, 0, 5, 25, 1, 175, 1, 255, 2, 141, 1, 0, 11, 176, 1, 255, 2, 203, 1, 56, 1, 0, 9, 89, 1, 245, 1, 255, 1, 0, 11, 255, 1, 239, 1, 128, 1, 12, 1, 0, 11, 56, 1, 239, 1, 0, 11, 203, 1, 25, 1, 0, 14, 25, 1, 0, 6 };
+static const uint8_t image_data_FontT24_0x004c_mod[50] = { 0, 33, 60, 17, 0, 11, 255, 17, 0, 11, 255, 2, 245, 15, 0, 11, 255, 2, 56, 15, 0, 11, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 175, 2, 0, 21 };
+static const uint8_t image_data_FontT24_0x004d_mod[350] = { 0, 5, 141, 1, 98, 1, 60, 1, 35, 1, 5, 1, 0, 23, 255, 3, 235, 1, 176, 1, 141, 1, 98, 1, 60, 1, 35, 1, 11, 1, 5, 1, 0, 17, 128, 1, 175, 1, 239, 1, 245, 1, 255, 4, 235, 1, 219, 1, 176, 1, 98, 1, 60, 1, 35, 1, 11, 1, 5, 1, 0, 14, 25, 1, 56, 1, 89, 1, 128, 1, 175, 1, 203, 1, 239, 1, 245, 1, 255, 3, 235, 1, 219, 1, 176, 1, 141, 1, 0, 18, 12, 1, 25, 1, 67, 1, 153, 1, 255, 4, 239, 1, 175, 1, 0, 17, 11, 1, 60, 1, 141, 1, 219, 1, 255, 2, 239, 1, 175, 1, 89, 1, 25, 1, 0, 15, 11, 1, 60, 1, 141, 1, 219, 1, 255, 2, 239, 1, 175, 1, 89, 1, 25, 1, 0, 15, 11, 1, 60, 1, 141, 1, 219, 1, 255, 2, 239, 1, 175, 1, 89, 1, 25, 1, 0, 18, 210, 1, 255, 4, 125, 1, 30, 1, 0, 21, 56, 1, 128, 1, 203, 1, 245, 1, 255, 1, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 1, 235, 1, 176, 1, 141, 1, 60, 1, 11, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 60, 1, 11, 1, 5, 1, 0, 19, 18, 1, 92, 1, 197, 1, 255, 4, 219, 1, 176, 1, 0, 13, 5, 1, 11, 1, 35, 1, 60, 1, 98, 1, 141, 1, 176, 1, 235, 1, 255, 3, 245, 1, 239, 1, 175, 1, 128, 1, 0, 11, 60, 1, 141, 1, 176, 1, 219, 1, 235, 1, 255, 3, 245, 1, 239, 1, 203, 1, 128, 1, 89, 1, 56, 1, 25, 1, 0, 13, 255, 3, 245, 1, 239, 1, 203, 1, 128, 1, 89, 1, 56, 1, 25, 1, 12, 1, 0, 17, 203, 1, 175, 1, 89, 1, 56, 1, 25, 1, 12, 1, 0, 17 };
+static const uint8_t image_data_FontT24_0x004e_mod[134] = { 0, 33, 60, 17, 0, 11, 255, 16, 239, 1, 0, 11, 239, 12, 255, 3, 175, 1, 25, 1, 0, 11, 25, 10, 30, 1, 124, 1, 255, 1, 245, 1, 128, 1, 0, 22, 11, 1, 176, 1, 255, 1, 203, 1, 56, 1, 0, 22, 60, 1, 219, 1, 255, 1, 128, 1, 12, 1, 0, 21, 11, 1, 141, 1, 255, 1, 239, 1, 89, 1, 0, 22, 60, 1, 219, 1, 255, 1, 175, 1, 25, 1, 0, 21, 5, 1, 98, 1, 255, 1, 239, 1, 89, 1, 0, 22, 35, 1, 176, 1, 255, 1, 216, 1, 36, 1, 11, 10, 0, 11, 5, 1, 98, 1, 235, 1, 255, 2, 235, 1, 219, 11, 0, 11, 176, 1, 255, 16, 0, 11, 89, 17, 0, 34 };
+static const uint8_t image_data_FontT24_0x004f_mod[234] = { 0, 11, 5, 1, 11, 4, 0, 20, 11, 1, 60, 1, 141, 1, 176, 1, 219, 4, 141, 1, 60, 1, 11, 1, 0, 16, 60, 1, 219, 1, 255, 9, 219, 1, 60, 1, 0, 14, 60, 1, 255, 2, 245, 1, 175, 1, 128, 1, 89, 3, 128, 1, 175, 1, 239, 1, 255, 2, 60, 1, 0, 12, 5, 1, 255, 2, 175, 1, 56, 1, 0, 7, 25, 1, 128, 1, 255, 2, 5, 1, 0, 11, 176, 1, 255, 1, 203, 1, 0, 11, 175, 1, 255, 1, 176, 1, 0, 11, 255, 2, 12, 1, 0, 12, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 11, 1, 0, 11, 5, 1, 255, 2, 0, 11, 175, 1, 255, 1, 219, 1, 0, 11, 176, 1, 255, 1, 203, 1, 0, 12, 255, 2, 141, 1, 35, 1, 0, 7, 11, 1, 141, 1, 255, 2, 12, 1, 0, 12, 89, 1, 255, 2, 235, 1, 141, 1, 98, 1, 60, 4, 141, 1, 219, 1, 255, 2, 128, 1, 0, 14, 89, 1, 239, 1, 255, 9, 239, 1, 128, 1, 0, 16, 25, 1, 128, 1, 175, 1, 239, 2, 245, 1, 239, 2, 203, 1, 128, 1, 25, 1, 0, 20, 25, 2, 56, 1, 25, 2, 12, 1, 0, 11 };
+static const uint8_t image_data_FontT24_0x0050_mod[124] = { 0, 33, 60, 17, 0, 11, 255, 17, 0, 11, 239, 6, 255, 2, 239, 7, 255, 2, 0, 11, 25, 6, 255, 2, 25, 7, 255, 2, 0, 17, 255, 2, 0, 7, 255, 2, 0, 17, 255, 2, 0, 7, 255, 2, 0, 17, 255, 2, 11, 1, 0, 5, 11, 1, 255, 2, 0, 17, 203, 1, 255, 1, 219, 1, 5, 1, 0, 3, 5, 1, 219, 1, 255, 1, 175, 1, 0, 17, 12, 1, 255, 2, 176, 1, 60, 3, 176, 1, 255, 2, 0, 19, 128, 1, 255, 7, 128, 1, 0, 20, 89, 1, 203, 1, 239, 1, 245, 2, 203, 1, 128, 1, 0, 22, 12, 1, 25, 1, 56, 2, 12, 1, 0, 9 };
+static const uint8_t image_data_FontT24_0x0051_mod[268] = { 0, 11, 11, 2, 35, 1, 11, 2, 0, 20, 11, 1, 60, 1, 141, 1, 219, 2, 235, 1, 219, 2, 141, 1, 98, 1, 11, 1, 0, 16, 60, 1, 219, 1, 255, 9, 219, 1, 60, 1, 0, 14, 98, 1, 255, 2, 245, 1, 175, 1, 128, 1, 89, 4, 175, 1, 239, 1, 255, 2, 60, 1, 0, 12, 5, 1, 255, 2, 175, 1, 56, 1, 0, 7, 25, 1, 128, 1, 255, 2, 5, 1, 0, 11, 176, 1, 255, 1, 203, 1, 0, 11, 175, 1, 255, 1, 176, 1, 0, 11, 255, 2, 12, 1, 0, 12, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 11, 255, 2, 0, 13, 255, 2, 0, 10, 35, 1, 255, 2, 11, 1, 0, 11, 5, 1, 255, 2, 0, 9, 35, 1, 235, 1, 255, 2, 219, 1, 5, 1, 0, 10, 176, 1, 255, 1, 175, 1, 0, 9, 235, 1, 255, 1, 203, 1, 255, 2, 176, 1, 35, 1, 0, 7, 11, 1, 141, 1, 255, 2, 0, 9, 5, 1, 255, 1, 245, 1, 12, 1, 128, 1, 255, 2, 235, 1, 141, 1, 98, 1, 60, 3, 98, 1, 141, 1, 219, 1, 255, 2, 128, 1, 0, 9, 176, 1, 255, 1, 56, 1, 0, 2, 89, 1, 239, 1, 255, 9, 239, 1, 128, 1, 0, 10, 255, 2, 0, 4, 25, 1, 128, 1, 175, 1, 239, 5, 203, 1, 128, 1, 25, 1, 0, 11, 255, 2, 0, 7, 25, 5, 12, 1, 0, 13, 255, 2, 0, 24 };
+static const uint8_t image_data_FontT24_0x0052_mod[170] = { 0, 33, 35, 17, 0, 11, 235, 17, 0, 11, 255, 17, 0, 11, 89, 7, 255, 2, 89, 6, 255, 2, 0, 18, 255, 2, 0, 6, 255, 2, 0, 17, 11, 1, 255, 2, 0, 6, 255, 2, 0, 16, 60, 1, 219, 1, 255, 2, 0, 6, 255, 2, 0, 14, 11, 1, 141, 1, 255, 2, 239, 1, 255, 1, 60, 1, 0, 4, 60, 1, 255, 2, 0, 13, 60, 1, 219, 1, 255, 2, 175, 1, 25, 1, 255, 2, 60, 1, 35, 2, 60, 1, 255, 2, 128, 1, 0, 11, 11, 1, 141, 1, 255, 2, 239, 1, 89, 1, 0, 2, 175, 1, 255, 2, 235, 2, 255, 2, 239, 1, 0, 12, 219, 1, 255, 2, 175, 1, 25, 1, 0, 4, 128, 1, 239, 1, 255, 2, 245, 1, 203, 1, 25, 1, 0, 12, 255, 1, 239, 1, 89, 1, 0, 7, 25, 1, 89, 2, 56, 1, 12, 1, 0, 13, 203, 1, 25, 1, 0, 21 };
+static const uint8_t image_data_FontT24_0x0053_mod[204] = { 0, 5, 5, 1, 0, 10, 5, 1, 11, 2, 0, 14, 36, 1, 141, 1, 60, 1, 0, 7, 98, 1, 176, 1, 219, 2, 141, 1, 5, 1, 0, 12, 176, 1, 255, 1, 239, 1, 0, 6, 141, 1, 255, 5, 176, 1, 0, 12, 255, 2, 25, 1, 0, 5, 35, 1, 255, 2, 175, 1, 89, 1, 128, 1, 255, 2, 98, 1, 0, 11, 255, 2, 0, 6, 235, 1, 255, 1, 203, 1, 0, 3, 89, 1, 255, 2, 0, 11, 255, 2, 0, 5, 11, 1, 255, 2, 12, 1, 0, 4, 255, 2, 0, 11, 255, 2, 0, 5, 219, 1, 255, 1, 203, 1, 0, 5, 255, 2, 0, 11, 239, 1, 255, 1, 98, 1, 0, 3, 35, 1, 255, 2, 12, 1, 0, 5, 255, 2, 0, 11, 25, 1, 255, 2, 141, 1, 60, 1, 98, 1, 235, 1, 255, 1, 203, 1, 0, 5, 141, 1, 255, 2, 0, 12, 175, 1, 255, 5, 239, 1, 12, 1, 0, 5, 128, 1, 239, 1, 89, 1, 0, 13, 128, 1, 203, 1, 239, 2, 175, 1, 25, 1, 0, 7, 25, 1, 0, 15, 12, 1, 25, 2, 0, 17 };
+static const uint8_t image_data_FontT24_0x0054_mod[64] = { 0, 20, 176, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 11, 60, 15, 255, 2, 0, 11, 255, 17, 0, 11, 245, 15, 255, 2, 0, 11, 56, 15, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 175, 2, 0, 6 };
+static const uint8_t image_data_FontT24_0x0055_mod[110] = { 0, 36, 11, 1, 35, 13, 0, 13, 98, 1, 219, 1, 235, 13, 0, 12, 141, 1, 255, 3, 245, 12, 0, 11, 35, 1, 255, 2, 203, 1, 89, 1, 56, 12, 0, 11, 235, 1, 255, 1, 203, 1, 12, 1, 0, 24, 255, 2, 12, 1, 0, 25, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 5, 1, 0, 25, 239, 1, 255, 1, 176, 1, 5, 1, 0, 24, 25, 1, 255, 2, 176, 1, 60, 1, 35, 12, 0, 12, 175, 1, 255, 3, 235, 12, 0, 13, 128, 1, 203, 1, 245, 13, 0, 14, 12, 1, 56, 13, 0, 34 };
+static const uint8_t image_data_FontT24_0x0056_mod[222] = { 0, 19, 5, 1, 35, 1, 141, 1, 0, 23, 35, 1, 98, 1, 176, 1, 235, 1, 255, 1, 0, 20, 11, 1, 60, 1, 141, 1, 235, 1, 255, 3, 239, 1, 0, 17, 5, 1, 60, 1, 141, 1, 219, 1, 255, 3, 245, 1, 203, 1, 89, 1, 25, 1, 0, 14, 5, 1, 35, 1, 98, 1, 176, 1, 255, 3, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 14, 11, 1, 60, 1, 176, 1, 235, 1, 255, 3, 203, 1, 128, 1, 56, 1, 12, 1, 0, 16, 141, 1, 219, 1, 255, 3, 239, 1, 175, 1, 89, 1, 12, 1, 0, 19, 203, 1, 255, 4, 168, 1, 60, 1, 5, 1, 0, 20, 12, 1, 89, 1, 175, 1, 239, 1, 255, 3, 176, 1, 98, 1, 35, 1, 5, 1, 0, 20, 25, 1, 89, 1, 175, 1, 245, 1, 255, 2, 235, 1, 176, 1, 98, 1, 11, 1, 0, 21, 56, 1, 128, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 60, 1, 11, 1, 0, 20, 12, 1, 56, 1, 128, 1, 239, 1, 255, 3, 219, 1, 98, 1, 0, 22, 25, 1, 89, 1, 175, 1, 239, 1, 255, 2, 0, 25, 25, 1, 128, 1, 203, 1, 0, 6 };
+static const uint8_t image_data_FontT24_0x0057_mod[380] = { 0, 18, 11, 1, 60, 1, 141, 1, 219, 1, 0, 21, 11, 1, 60, 1, 141, 1, 219, 1, 255, 3, 0, 18, 11, 1, 60, 1, 141, 1, 219, 1, 255, 3, 239, 1, 203, 1, 128, 1, 0, 14, 5, 1, 35, 1, 98, 1, 141, 1, 219, 1, 255, 3, 239, 1, 175, 1, 89, 1, 25, 1, 12, 1, 0, 12, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 2, 245, 1, 203, 1, 128, 1, 89, 1, 25, 1, 0, 16, 167, 1, 235, 1, 255, 3, 216, 1, 134, 1, 56, 1, 12, 1, 0, 19, 56, 1, 128, 1, 203, 1, 245, 1, 255, 1, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 1, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 1, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 20, 12, 1, 56, 1, 128, 1, 216, 1, 255, 2, 235, 1, 176, 1, 141, 1, 0, 19, 11, 1, 60, 1, 141, 1, 235, 1, 255, 2, 245, 1, 203, 1, 128, 1, 0, 16, 11, 1, 60, 1, 141, 1, 219, 1, 255, 2, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 14, 5, 1, 35, 1, 141, 1, 219, 1, 255, 2, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 15, 35, 1, 98, 1, 176, 1, 235, 1, 255, 2, 203, 1, 128, 1, 56, 1, 12, 1, 0, 18, 183, 1, 245, 1, 255, 4, 111, 1, 35, 1, 5, 1, 0, 19, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 2, 235, 1, 176, 1, 141, 1, 60, 1, 11, 1, 0, 19, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 3, 219, 1, 141, 1, 60, 1, 35, 1, 5, 1, 0, 18, 12, 1, 56, 1, 89, 1, 175, 1, 239, 1, 255, 3, 235, 1, 176, 1, 98, 1, 0, 21, 25, 1, 89, 1, 175, 1, 239, 1, 255, 3, 0, 24, 25, 1, 89, 1, 175, 1, 239, 1, 0, 6 };
+static const uint8_t image_data_FontT24_0x0058_mod[264] = { 0, 5, 141, 1, 11, 1, 0, 14, 60, 1, 0, 11, 255, 1, 219, 1, 60, 1, 5, 1, 0, 10, 11, 1, 98, 1, 255, 1, 0, 11, 203, 1, 255, 2, 176, 1, 35, 1, 0, 7, 5, 1, 60, 1, 219, 1, 255, 1, 245, 1, 0, 11, 12, 1, 89, 1, 239, 1, 255, 1, 235, 1, 141, 1, 11, 1, 0, 4, 35, 1, 176, 1, 255, 2, 203, 1, 56, 1, 0, 13, 25, 1, 128, 1, 245, 1, 255, 1, 219, 1, 98, 1, 5, 1, 11, 1, 141, 1, 235, 1, 255, 1, 239, 1, 128, 1, 12, 1, 0, 16, 56, 1, 175, 1, 255, 2, 176, 1, 219, 1, 255, 1, 245, 1, 175, 1, 25, 1, 0, 20, 153, 1, 255, 4, 67, 1, 0, 20, 35, 1, 141, 1, 255, 2, 239, 1, 245, 1, 255, 1, 219, 1, 98, 1, 5, 1, 0, 16, 11, 1, 98, 1, 235, 1, 255, 1, 245, 1, 128, 1, 25, 1, 56, 1, 203, 1, 255, 2, 176, 1, 35, 1, 0, 13, 5, 1, 60, 1, 219, 1, 255, 2, 175, 1, 56, 1, 0, 3, 12, 1, 89, 1, 239, 1, 255, 1, 235, 1, 141, 1, 11, 1, 0, 11, 176, 1, 255, 2, 203, 1, 89, 1, 0, 7, 25, 1, 128, 1, 245, 1, 255, 1, 219, 1, 0, 11, 255, 1, 239, 1, 128, 1, 12, 1, 0, 10, 56, 1, 175, 1, 255, 1, 0, 11, 175, 1, 25, 1, 0, 14, 128, 1, 0, 6 };
+static const uint8_t image_data_FontT24_0x0059_mod[154] = { 0, 20, 5, 1, 141, 1, 0, 25, 60, 1, 176, 1, 255, 1, 0, 23, 35, 1, 141, 1, 255, 2, 203, 1, 0, 21, 5, 1, 98, 1, 235, 1, 255, 1, 245, 1, 128, 1, 12, 1, 0, 20, 60, 1, 176, 1, 255, 2, 175, 1, 56, 1, 0, 13, 35, 8, 141, 1, 255, 2, 203, 1, 89, 1, 0, 15, 235, 8, 255, 2, 128, 1, 12, 1, 0, 16, 245, 8, 255, 2, 98, 1, 5, 1, 0, 16, 56, 8, 203, 1, 255, 2, 176, 1, 35, 1, 0, 23, 12, 1, 89, 1, 239, 1, 255, 1, 235, 1, 141, 1, 11, 1, 0, 23, 25, 1, 128, 1, 245, 1, 255, 1, 219, 1, 98, 1, 5, 1, 0, 23, 56, 1, 175, 1, 255, 2, 176, 1, 0, 25, 89, 1, 239, 1, 255, 1, 0, 26, 25, 1, 175, 1, 0, 6 };
+static const uint8_t image_data_FontT24_0x005a_mod[200] = { 0, 5, 5, 1, 0, 14, 5, 2, 0, 11, 176, 1, 60, 1, 5, 1, 0, 12, 176, 2, 0, 11, 255, 2, 176, 1, 60, 1, 5, 1, 0, 10, 255, 2, 0, 11, 255, 4, 176, 1, 60, 1, 5, 1, 0, 8, 255, 2, 0, 11, 255, 2, 175, 1, 245, 1, 255, 2, 176, 1, 60, 1, 5, 1, 0, 6, 255, 2, 0, 11, 255, 2, 0, 1, 56, 1, 175, 1, 245, 1, 255, 2, 176, 1, 60, 1, 5, 1, 0, 4, 255, 2, 0, 11, 255, 2, 0, 3, 56, 1, 175, 1, 245, 1, 255, 2, 176, 1, 60, 1, 5, 1, 0, 2, 255, 2, 0, 11, 255, 2, 0, 5, 56, 1, 175, 1, 245, 1, 255, 2, 176, 1, 60, 1, 5, 1, 255, 2, 0, 11, 255, 2, 0, 7, 56, 1, 175, 1, 245, 1, 255, 2, 176, 1, 255, 2, 0, 11, 255, 2, 0, 9, 56, 1, 175, 1, 245, 1, 255, 3, 0, 11, 255, 2, 0, 11, 56, 1, 175, 1, 245, 1, 255, 1, 0, 11, 203, 2, 0, 13, 56, 1, 175, 1, 0, 11, 12, 2, 0, 21 };
+static const uint8_t image_data_FontT24_0x005b_mod[50] = { 0, 56, 98, 23, 0, 5, 255, 23, 0, 5, 255, 2, 203, 19, 255, 2, 0, 5, 255, 2, 12, 19, 255, 2, 0, 5, 255, 2, 0, 19, 255, 2, 0, 5, 239, 2, 0, 19, 239, 2, 0, 5, 25, 2, 0, 19, 25, 2, 0, 5 };
+static const uint8_t image_data_FontT24_0x005c_mod[126] = { 0, 19, 35, 1, 98, 1, 176, 1, 0, 22, 11, 1, 60, 1, 141, 1, 235, 1, 245, 1, 203, 1, 0, 19, 5, 1, 35, 1, 141, 1, 219, 1, 255, 1, 239, 1, 175, 1, 56, 1, 12, 1, 0, 17, 11, 1, 98, 1, 176, 1, 235, 1, 245, 1, 175, 1, 89, 1, 25, 1, 0, 17, 11, 1, 60, 1, 141, 1, 219, 1, 245, 1, 203, 1, 128, 1, 56, 1, 0, 17, 5, 1, 35, 1, 98, 1, 219, 1, 255, 1, 239, 1, 175, 1, 56, 1, 12, 1, 0, 19, 176, 1, 235, 1, 245, 1, 175, 1, 89, 1, 25, 1, 0, 22, 203, 1, 128, 1, 56, 1, 0, 25, 12, 1, 0, 22 };
+static const uint8_t image_data_FontT24_0x005d_mod[48] = { 11, 2, 0, 19, 11, 2, 0, 5, 219, 2, 0, 19, 219, 2, 0, 5, 255, 2, 0, 19, 255, 2, 0, 5, 255, 2, 5, 19, 255, 2, 0, 5, 255, 2, 176, 19, 255, 2, 0, 5, 255, 23, 0, 5, 128, 23, 0, 61 };
+static const uint8_t image_data_FontT24_0x005e_mod[96] = { 0, 44, 11, 1, 0, 27, 219, 1, 60, 1, 5, 1, 0, 25, 128, 1, 239, 1, 176, 1, 35, 1, 0, 25, 25, 1, 128, 1, 219, 1, 141, 1, 35, 1, 0, 25, 25, 1, 128, 1, 219, 1, 98, 1, 0, 25, 11, 1, 124, 1, 245, 1, 0, 23, 11, 1, 98, 1, 219, 1, 203, 1, 56, 1, 0, 21, 11, 1, 98, 1, 219, 1, 203, 1, 89, 1, 12, 1, 0, 22, 219, 1, 239, 1, 89, 1, 12, 1, 0, 24, 175, 1, 25, 1, 0, 66 };
+static const uint8_t image_data_FontT24_0x005f_mod[54] = { 0, 2, 235, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 245, 2, 0, 24 };
+static const uint8_t image_data_FontT24_0x0060_mod[44] = { 0, 107, 11, 1, 0, 26, 35, 1, 219, 1, 0, 24, 5, 1, 98, 1, 235, 1, 255, 1, 0, 24, 176, 1, 255, 1, 239, 1, 128, 1, 0, 24, 239, 1, 128, 1, 25, 1, 0, 25, 25, 1, 0, 119 };
+static const uint8_t image_data_FontT24_0x0061_mod[190] = { 0, 7, 5, 1, 11, 1, 5, 1, 0, 24, 60, 1, 176, 1, 219, 1, 176, 1, 98, 1, 0, 5, 35, 1, 0, 16, 35, 1, 255, 5, 141, 1, 0, 3, 141, 1, 235, 1, 35, 1, 0, 15, 235, 1, 255, 1, 203, 1, 89, 1, 175, 1, 255, 2, 11, 1, 0, 2, 89, 1, 255, 1, 235, 1, 0, 15, 255, 2, 12, 1, 0, 2, 203, 1, 255, 1, 219, 1, 0, 3, 255, 2, 0, 15, 255, 2, 0, 3, 12, 1, 255, 2, 0, 3, 255, 2, 0, 15, 245, 1, 255, 1, 5, 1, 0, 3, 255, 2, 0, 3, 255, 2, 0, 15, 56, 1, 255, 1, 176, 1, 0, 3, 255, 2, 0, 2, 60, 1, 255, 2, 0, 16, 140, 1, 255, 1, 141, 1, 60, 2, 255, 2, 60, 1, 141, 1, 255, 2, 175, 1, 0, 15, 35, 1, 219, 1, 255, 9, 239, 1, 0, 16, 235, 1, 255, 1, 239, 7, 203, 1, 128, 1, 25, 1, 0, 16, 239, 1, 128, 1, 25, 7, 12, 1, 0, 18, 25, 1, 0, 22 };
+static const uint8_t image_data_FontT24_0x0062_mod[158] = { 0, 33, 98, 18, 0, 10, 239, 1, 255, 17, 0, 10, 25, 1, 255, 2, 203, 7, 255, 2, 203, 6, 0, 10, 141, 1, 255, 1, 128, 1, 12, 7, 128, 1, 255, 1, 72, 1, 12, 5, 0, 10, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 8, 11, 1, 255, 2, 0, 15, 239, 1, 255, 1, 141, 1, 0, 6, 5, 1, 219, 1, 255, 1, 239, 1, 0, 15, 25, 1, 255, 2, 141, 1, 60, 1, 35, 1, 11, 1, 35, 1, 60, 1, 176, 1, 255, 2, 25, 1, 0, 16, 128, 1, 245, 1, 255, 2, 235, 1, 219, 1, 235, 1, 255, 3, 128, 1, 0, 18, 56, 1, 175, 1, 239, 1, 245, 1, 255, 2, 245, 1, 203, 1, 89, 1, 0, 21, 25, 1, 56, 1, 89, 2, 56, 1, 12, 1, 0, 13 };
+static const uint8_t image_data_FontT24_0x0063_mod[158] = { 0, 9, 11, 1, 35, 3, 11, 1, 0, 21, 35, 1, 141, 1, 219, 1, 235, 3, 219, 1, 141, 1, 11, 1, 0, 18, 60, 1, 235, 1, 255, 2, 245, 3, 255, 2, 219, 1, 35, 1, 0, 16, 5, 1, 255, 2, 203, 1, 89, 1, 56, 3, 128, 1, 239, 1, 255, 1, 235, 1, 0, 16, 176, 1, 255, 1, 239, 1, 12, 1, 0, 5, 25, 1, 245, 1, 255, 1, 98, 1, 0, 15, 255, 2, 25, 1, 0, 7, 56, 1, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 239, 1, 255, 1, 141, 1, 0, 7, 141, 1, 255, 1, 239, 1, 0, 15, 25, 1, 239, 1, 128, 1, 0, 7, 89, 1, 239, 1, 25, 1, 0, 16, 25, 1, 0, 9, 25, 1, 0, 11 };
+static const uint8_t image_data_FontT24_0x0064_mod[150] = { 0, 8, 5, 1, 11, 1, 35, 3, 5, 1, 0, 21, 60, 1, 176, 1, 219, 1, 235, 3, 176, 1, 98, 1, 11, 1, 0, 18, 141, 1, 255, 3, 245, 2, 255, 3, 219, 1, 35, 1, 0, 16, 60, 1, 255, 2, 203, 1, 128, 1, 56, 2, 89, 1, 128, 1, 239, 1, 255, 1, 235, 1, 5, 1, 0, 15, 255, 2, 203, 1, 12, 1, 0, 5, 25, 1, 245, 1, 255, 1, 176, 1, 0, 15, 255, 2, 12, 1, 0, 7, 56, 1, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 134, 1, 255, 1, 60, 1, 5, 7, 98, 1, 255, 1, 134, 1, 5, 5, 0, 10, 176, 1, 255, 2, 176, 7, 255, 2, 176, 6, 0, 10, 255, 18, 0, 10, 128, 18, 0, 33 };
+static const uint8_t image_data_FontT24_0x0065_mod[216] = { 0, 9, 11, 1, 35, 1, 60, 1, 35, 1, 11, 1, 0, 21, 35, 1, 141, 1, 219, 1, 235, 1, 255, 1, 235, 1, 219, 1, 141, 1, 11, 1, 0, 18, 60, 1, 235, 1, 255, 2, 245, 1, 255, 2, 245, 1, 255, 1, 219, 1, 35, 1, 0, 16, 5, 1, 255, 2, 203, 1, 89, 1, 56, 1, 255, 2, 56, 1, 175, 1, 255, 1, 235, 1, 0, 16, 176, 1, 255, 1, 239, 1, 12, 1, 0, 2, 255, 2, 0, 2, 175, 1, 255, 1, 141, 1, 0, 15, 255, 2, 25, 1, 0, 3, 255, 2, 0, 3, 255, 2, 0, 15, 255, 2, 0, 4, 255, 2, 0, 3, 255, 2, 0, 15, 255, 2, 0, 4, 255, 2, 0, 3, 255, 2, 0, 15, 255, 2, 0, 4, 255, 2, 0, 2, 60, 1, 255, 2, 0, 15, 245, 1, 255, 1, 98, 1, 0, 3, 255, 2, 35, 1, 98, 1, 255, 2, 89, 1, 0, 15, 56, 1, 239, 1, 128, 1, 0, 3, 255, 2, 235, 1, 255, 2, 203, 1, 0, 17, 25, 1, 0, 4, 245, 1, 255, 1, 245, 1, 239, 1, 128, 1, 12, 1, 0, 22, 56, 1, 89, 1, 56, 1, 25, 1, 0, 13 };
+static const uint8_t image_data_FontT24_0x0066_mod[88] = { 0, 16, 35, 2, 0, 26, 235, 2, 0, 15, 60, 11, 255, 2, 60, 1, 35, 1, 5, 1, 0, 12, 255, 14, 235, 1, 176, 1, 35, 1, 0, 11, 239, 11, 255, 2, 239, 1, 245, 1, 255, 1, 235, 1, 11, 1, 0, 10, 25, 11, 255, 2, 25, 1, 56, 1, 203, 1, 255, 1, 219, 1, 0, 21, 255, 2, 0, 2, 12, 1, 255, 2, 0, 21, 175, 2, 0, 3, 255, 2, 0, 26, 203, 1, 245, 1, 0, 5 };
+static const uint8_t image_data_FontT24_0x0067_mod[276] = { 0, 1, 5, 1, 0, 9, 5, 1, 11, 3, 0, 14, 176, 1, 11, 1, 0, 2, 11, 1, 98, 1, 60, 1, 0, 2, 98, 1, 176, 1, 219, 3, 98, 1, 5, 1, 0, 11, 11, 1, 255, 1, 219, 1, 0, 2, 219, 1, 255, 1, 245, 1, 11, 1, 141, 1, 255, 6, 176, 1, 0, 11, 219, 1, 255, 1, 89, 1, 0, 2, 255, 2, 56, 1, 219, 1, 255, 2, 175, 1, 89, 2, 175, 1, 255, 2, 98, 1, 0, 10, 255, 2, 0, 3, 255, 2, 0, 1, 255, 2, 89, 1, 0, 4, 89, 1, 255, 2, 0, 10, 255, 2, 0, 3, 255, 2, 0, 1, 255, 2, 0, 6, 255, 2, 0, 10, 255, 2, 0, 3, 255, 2, 0, 1, 255, 2, 0, 5, 5, 1, 255, 2, 0, 10, 255, 2, 5, 1, 0, 2, 255, 2, 0, 1, 245, 1, 255, 1, 141, 1, 11, 1, 5, 1, 0, 1, 11, 1, 176, 1, 255, 1, 245, 1, 0, 10, 175, 1, 255, 1, 176, 1, 11, 1, 60, 1, 255, 2, 0, 1, 56, 1, 255, 2, 219, 1, 176, 1, 141, 1, 219, 1, 255, 2, 92, 1, 0, 11, 255, 2, 219, 1, 255, 2, 203, 1, 0, 2, 89, 1, 245, 1, 255, 4, 245, 1, 255, 1, 235, 1, 132, 1, 0, 10, 89, 1, 239, 1, 255, 2, 203, 1, 12, 1, 0, 3, 56, 1, 128, 1, 175, 2, 128, 1, 56, 1, 89, 1, 239, 1, 56, 1, 0, 11, 25, 1, 89, 2, 12, 1, 0, 11, 25, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x0068_mod[84] = { 0, 33, 98, 18, 0, 10, 255, 18, 0, 10, 239, 10, 255, 2, 239, 6, 0, 10, 25, 10, 239, 1, 255, 1, 30, 1, 25, 5, 0, 20, 25, 1, 255, 1, 176, 1, 0, 26, 255, 2, 0, 25, 5, 1, 255, 2, 0, 15, 5, 9, 11, 1, 176, 1, 255, 2, 0, 15, 176, 9, 219, 1, 255, 2, 128, 1, 0, 15, 255, 10, 245, 1, 175, 1, 0, 16, 175, 8, 128, 2, 56, 1, 0, 40 };
+static const uint8_t image_data_FontT24_0x0069_mod[60] = { 0, 16, 35, 2, 0, 26, 235, 2, 0, 15, 60, 11, 255, 2, 0, 2, 11, 1, 60, 1, 11, 1, 0, 10, 255, 13, 0, 2, 219, 1, 255, 1, 219, 1, 0, 10, 239, 13, 0, 2, 239, 1, 255, 1, 239, 1, 0, 10, 25, 13, 0, 2, 25, 1, 89, 1, 25, 1, 0, 33 };
+static const uint8_t image_data_FontT24_0x006a_mod[94] = { 176, 2, 0, 26, 255, 2, 0, 14, 60, 2, 0, 10, 255, 2, 11, 1, 0, 13, 255, 2, 0, 10, 175, 1, 255, 1, 219, 1, 35, 1, 5, 12, 255, 2, 0, 2, 11, 1, 60, 1, 11, 1, 0, 6, 255, 2, 235, 1, 176, 12, 255, 2, 0, 2, 219, 1, 255, 1, 219, 1, 0, 6, 89, 1, 239, 1, 255, 15, 0, 2, 245, 1, 255, 1, 245, 1, 0, 7, 25, 1, 89, 1, 128, 14, 0, 2, 56, 1, 128, 1, 56, 1, 0, 61 };
+static const uint8_t image_data_FontT24_0x006b_mod[142] = { 0, 33, 98, 18, 0, 10, 255, 18, 0, 10, 203, 4, 239, 1, 255, 1, 216, 1, 203, 11, 0, 10, 12, 4, 25, 1, 203, 1, 235, 1, 72, 1, 12, 10, 0, 15, 12, 1, 255, 2, 141, 1, 5, 1, 0, 22, 11, 1, 98, 1, 255, 3, 176, 1, 35, 1, 0, 20, 60, 1, 219, 1, 255, 1, 245, 1, 175, 2, 255, 1, 235, 1, 98, 1, 0, 17, 35, 1, 141, 1, 255, 2, 203, 1, 56, 1, 0, 2, 128, 1, 255, 2, 141, 1, 0, 15, 98, 1, 235, 1, 255, 1, 239, 1, 128, 1, 12, 1, 0, 4, 89, 1, 239, 1, 255, 1, 0, 15, 255, 2, 175, 1, 25, 1, 0, 7, 25, 1, 245, 1, 0, 15, 239, 1, 89, 1, 0, 10, 56, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x006c_mod[42] = { 0, 35, 35, 1, 60, 15, 0, 11, 141, 1, 235, 1, 255, 15, 0, 10, 98, 1, 255, 2, 245, 15, 0, 10, 255, 2, 203, 1, 56, 15, 0, 10, 245, 2, 12, 1, 0, 25, 56, 2, 0, 21 };
+static const uint8_t image_data_FontT24_0x006d_mod[136] = { 0, 33, 98, 13, 0, 15, 255, 12, 245, 1, 0, 15, 239, 9, 245, 1, 255, 1, 181, 1, 56, 1, 0, 15, 25, 9, 56, 1, 245, 1, 176, 1, 0, 26, 56, 1, 255, 1, 141, 1, 0, 26, 255, 2, 0, 25, 5, 1, 255, 2, 0, 15, 35, 10, 176, 1, 255, 2, 0, 15, 235, 10, 255, 2, 89, 1, 0, 15, 245, 9, 255, 2, 134, 1, 0, 16, 56, 9, 89, 1, 245, 1, 176, 1, 0, 26, 56, 1, 255, 1, 141, 1, 0, 26, 255, 2, 0, 26, 255, 2, 0, 15, 5, 9, 35, 1, 141, 1, 255, 2, 0, 15, 176, 9, 235, 1, 255, 2, 128, 1, 0, 15, 255, 10, 245, 1, 175, 1, 0, 16, 128, 10, 56, 1, 0, 40 };
+static const uint8_t image_data_FontT24_0x006e_mod[82] = { 0, 33, 98, 13, 0, 15, 255, 13, 0, 15, 239, 10, 255, 1, 216, 1, 89, 1, 0, 15, 25, 10, 239, 1, 235, 1, 11, 1, 0, 25, 25, 1, 255, 1, 219, 1, 0, 26, 255, 2, 0, 26, 255, 2, 0, 15, 5, 9, 11, 1, 141, 1, 255, 2, 0, 15, 176, 9, 219, 1, 255, 2, 175, 1, 0, 15, 255, 10, 245, 1, 175, 1, 0, 16, 175, 8, 128, 2, 56, 1, 0, 40 };
+static const uint8_t image_data_FontT24_0x006f_mod[184] = { 0, 9, 11, 1, 35, 3, 11, 1, 0, 21, 60, 1, 141, 1, 219, 1, 235, 3, 219, 1, 141, 1, 35, 1, 0, 18, 98, 1, 255, 3, 245, 3, 255, 2, 235, 1, 60, 1, 0, 16, 11, 1, 255, 2, 175, 1, 89, 1, 56, 3, 89, 1, 203, 1, 255, 2, 11, 1, 0, 15, 219, 1, 255, 1, 175, 1, 0, 6, 12, 1, 203, 1, 255, 1, 219, 1, 0, 15, 255, 2, 0, 8, 12, 1, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 5, 1, 0, 8, 255, 2, 0, 15, 239, 1, 255, 1, 176, 1, 5, 1, 0, 6, 141, 1, 255, 1, 245, 1, 0, 15, 25, 1, 255, 2, 176, 1, 60, 1, 35, 3, 60, 1, 141, 1, 255, 2, 56, 1, 0, 16, 128, 1, 245, 1, 255, 2, 235, 3, 255, 3, 128, 1, 0, 18, 56, 1, 175, 1, 239, 1, 245, 3, 239, 1, 203, 1, 89, 1, 0, 21, 25, 1, 56, 3, 25, 1, 12, 1, 0, 13 };
+static const uint8_t image_data_FontT24_0x0070_mod[150] = { 0, 28, 98, 18, 0, 10, 255, 18, 0, 10, 203, 6, 255, 2, 203, 7, 255, 2, 203, 1, 0, 10, 12, 5, 111, 1, 255, 1, 89, 1, 12, 7, 128, 1, 255, 1, 72, 1, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 5, 1, 0, 8, 255, 2, 0, 15, 245, 1, 255, 1, 176, 1, 5, 1, 0, 6, 141, 1, 255, 2, 0, 15, 56, 1, 255, 2, 176, 1, 60, 1, 35, 1, 11, 1, 35, 1, 60, 1, 141, 1, 255, 2, 89, 1, 0, 16, 128, 1, 255, 3, 235, 1, 219, 1, 235, 1, 255, 3, 175, 1, 0, 18, 89, 1, 203, 1, 245, 1, 255, 3, 245, 1, 203, 1, 128, 1, 0, 20, 12, 1, 56, 1, 89, 3, 56, 1, 12, 1, 0, 13 };
+static const uint8_t image_data_FontT24_0x0071_mod[152] = { 0, 8, 5, 1, 11, 1, 35, 3, 11, 1, 0, 21, 60, 1, 176, 1, 219, 1, 235, 3, 219, 1, 141, 1, 35, 1, 0, 18, 141, 1, 255, 3, 245, 2, 255, 3, 235, 1, 60, 1, 0, 16, 60, 1, 255, 2, 239, 1, 128, 1, 56, 2, 89, 1, 128, 1, 239, 1, 255, 2, 5, 1, 0, 15, 255, 2, 239, 1, 25, 1, 0, 5, 25, 1, 239, 1, 255, 1, 176, 1, 0, 15, 255, 2, 25, 1, 0, 7, 25, 1, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 10, 5, 5, 134, 1, 255, 1, 35, 1, 5, 7, 60, 1, 255, 1, 203, 1, 0, 10, 176, 6, 255, 1, 235, 1, 176, 7, 255, 2, 47, 1, 0, 10, 255, 17, 235, 1, 0, 10, 128, 18, 0, 38 };
+static const uint8_t image_data_FontT24_0x0072_mod[56] = { 0, 33, 60, 13, 0, 15, 255, 13, 0, 15, 239, 8, 245, 1, 255, 2, 239, 2, 0, 15, 25, 8, 56, 1, 128, 1, 255, 1, 168, 1, 25, 1, 0, 25, 128, 1, 255, 1, 98, 1, 0, 26, 255, 2, 0, 26, 255, 2, 0, 26, 203, 1, 255, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x0073_mod[156] = { 0, 5, 5, 2, 0, 6, 5, 1, 11, 2, 0, 17, 66, 1, 176, 1, 98, 1, 0, 4, 35, 1, 176, 1, 219, 2, 98, 1, 0, 16, 235, 1, 255, 1, 175, 1, 0, 3, 5, 1, 235, 1, 255, 4, 60, 1, 0, 15, 255, 2, 0, 4, 176, 1, 255, 1, 203, 1, 89, 1, 175, 1, 255, 2, 0, 15, 255, 2, 0, 4, 255, 2, 12, 1, 0, 2, 255, 2, 0, 15, 255, 2, 0, 3, 141, 1, 255, 1, 175, 1, 0, 3, 255, 2, 0, 15, 255, 2, 141, 1, 35, 1, 60, 1, 255, 2, 0, 3, 5, 1, 255, 2, 0, 15, 89, 1, 255, 2, 235, 1, 255, 2, 175, 1, 0, 3, 167, 1, 255, 1, 175, 1, 0, 16, 128, 1, 239, 1, 245, 2, 175, 1, 0, 4, 56, 1, 128, 1, 0, 18, 25, 1, 56, 2, 0, 18 };
+static const uint8_t image_data_FontT24_0x0074_mod[86] = { 0, 16, 5, 2, 0, 26, 176, 2, 0, 17, 35, 1, 98, 8, 255, 2, 98, 2, 0, 14, 141, 1, 235, 1, 255, 12, 141, 1, 0, 12, 141, 1, 255, 2, 239, 8, 255, 2, 239, 3, 0, 12, 255, 2, 175, 1, 25, 8, 255, 2, 25, 3, 0, 12, 255, 2, 0, 9, 255, 2, 0, 15, 255, 2, 0, 9, 255, 2, 0, 15, 255, 1, 239, 1, 0, 9, 89, 2, 0, 15, 89, 1, 25, 1, 0, 21 };
+static const uint8_t image_data_FontT24_0x0075_mod[84] = { 0, 35, 35, 1, 98, 10, 0, 16, 141, 1, 235, 1, 255, 10, 0, 15, 98, 1, 255, 2, 239, 1, 203, 9, 0, 15, 255, 2, 175, 1, 25, 1, 12, 9, 0, 15, 255, 2, 0, 26, 255, 2, 0, 26, 203, 1, 255, 1, 11, 1, 0, 25, 12, 1, 255, 1, 219, 1, 5, 1, 0, 24, 141, 1, 255, 2, 176, 1, 141, 9, 0, 15, 255, 13, 0, 15, 203, 13, 0, 15, 12, 13, 0, 10 };
+static const uint8_t image_data_FontT24_0x0076_mod[174] = { 0, 16, 35, 1, 141, 1, 0, 23, 5, 1, 60, 1, 141, 1, 235, 1, 255, 1, 0, 21, 11, 1, 98, 1, 176, 1, 255, 2, 245, 1, 203, 1, 0, 18, 5, 1, 35, 1, 141, 1, 219, 1, 255, 2, 239, 1, 175, 1, 56, 1, 12, 1, 0, 16, 11, 1, 98, 1, 176, 1, 235, 1, 255, 1, 245, 1, 175, 1, 89, 1, 25, 1, 0, 18, 141, 1, 219, 1, 255, 2, 210, 1, 128, 1, 56, 1, 0, 21, 89, 1, 203, 1, 255, 2, 190, 1, 98, 1, 35, 1, 0, 22, 12, 1, 89, 1, 175, 1, 245, 1, 255, 1, 235, 1, 141, 1, 60, 1, 11, 1, 0, 22, 56, 1, 128, 1, 239, 1, 255, 2, 219, 1, 98, 1, 35, 1, 5, 1, 0, 21, 25, 1, 89, 1, 203, 1, 245, 1, 255, 1, 235, 1, 176, 1, 0, 23, 12, 1, 56, 1, 175, 1, 239, 1, 255, 1, 0, 26, 25, 1, 128, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x0077_mod[290] = { 0, 15, 5, 1, 35, 1, 141, 1, 0, 22, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 1, 0, 19, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 2, 245, 1, 203, 1, 0, 16, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 2, 239, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 15, 98, 1, 176, 1, 235, 1, 255, 2, 239, 1, 175, 1, 89, 1, 25, 1, 12, 1, 0, 18, 128, 1, 239, 1, 255, 3, 85, 1, 11, 1, 0, 22, 25, 1, 89, 1, 203, 1, 245, 1, 255, 1, 219, 1, 98, 1, 35, 1, 0, 22, 12, 1, 56, 1, 175, 1, 245, 1, 255, 1, 235, 1, 141, 1, 60, 1, 11, 1, 0, 22, 56, 1, 128, 1, 255, 3, 219, 1, 98, 1, 0, 21, 35, 1, 98, 1, 255, 3, 203, 1, 128, 1, 0, 18, 5, 1, 35, 1, 141, 1, 235, 1, 255, 1, 245, 1, 175, 1, 89, 1, 12, 1, 0, 17, 11, 1, 60, 1, 176, 1, 235, 1, 255, 1, 239, 1, 128, 1, 56, 1, 0, 19, 98, 1, 219, 1, 255, 3, 100, 1, 25, 1, 0, 21, 128, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 60, 1, 11, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 60, 1, 11, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 0, 22, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 1, 0, 25, 12, 1, 56, 1, 175, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x0078_mod[226] = { 0, 5, 141, 1, 5, 1, 0, 10, 60, 1, 0, 15, 255, 1, 176, 1, 35, 1, 0, 7, 5, 1, 98, 1, 255, 1, 0, 15, 245, 1, 255, 1, 235, 1, 60, 1, 0, 5, 35, 1, 176, 1, 255, 1, 245, 1, 0, 15, 56, 1, 203, 1, 255, 2, 141, 1, 11, 1, 0, 1, 5, 1, 98, 1, 235, 1, 255, 1, 203, 1, 56, 1, 0, 16, 12, 1, 128, 1, 245, 1, 255, 1, 219, 1, 35, 1, 176, 1, 255, 1, 245, 1, 128, 1, 12, 1, 0, 19, 56, 1, 210, 1, 255, 1, 235, 1, 255, 1, 210, 1, 56, 1, 0, 21, 35, 1, 190, 1, 255, 1, 245, 1, 255, 1, 190, 1, 35, 1, 0, 19, 5, 1, 98, 1, 235, 1, 255, 1, 239, 1, 56, 1, 203, 1, 255, 1, 235, 1, 98, 1, 5, 1, 0, 16, 35, 1, 176, 1, 255, 2, 175, 1, 25, 1, 0, 1, 12, 1, 128, 1, 245, 1, 255, 1, 176, 1, 35, 1, 0, 15, 235, 1, 255, 1, 245, 1, 89, 1, 0, 5, 56, 1, 203, 1, 255, 1, 235, 1, 0, 15, 255, 1, 203, 1, 56, 1, 0, 7, 12, 1, 128, 1, 255, 1, 0, 15, 175, 1, 12, 1, 0, 10, 89, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x0079_mod[214] = { 0, 15, 5, 1, 35, 1, 98, 1, 0, 10, 98, 2, 0, 11, 11, 1, 98, 1, 176, 1, 235, 1, 255, 1, 0, 10, 255, 2, 0, 8, 11, 1, 60, 1, 141, 1, 219, 1, 255, 2, 239, 1, 175, 1, 0, 10, 239, 1, 255, 1, 60, 1, 0, 4, 5, 1, 35, 1, 141, 1, 219, 1, 255, 2, 245, 1, 203, 1, 128, 1, 25, 1, 0, 11, 25, 1, 255, 2, 60, 1, 35, 2, 98, 1, 176, 1, 235, 1, 255, 2, 203, 1, 128, 1, 56, 1, 12, 1, 0, 14, 128, 1, 255, 2, 235, 2, 255, 2, 239, 1, 175, 1, 89, 1, 12, 1, 0, 18, 89, 1, 175, 1, 239, 1, 255, 3, 168, 1, 60, 1, 11, 1, 0, 21, 25, 1, 89, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 60, 1, 11, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 60, 1, 11, 1, 0, 20, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 2, 219, 1, 141, 1, 0, 22, 12, 1, 56, 1, 175, 1, 239, 1, 255, 2, 0, 25, 25, 1, 89, 1, 175, 1, 0, 10 };
+static const uint8_t image_data_FontT24_0x007a_mod[160] = { 0, 5, 98, 1, 5, 1, 0, 9, 60, 2, 0, 15, 255, 1, 176, 1, 35, 1, 0, 8, 255, 2, 0, 15, 255, 2, 235, 1, 98, 1, 5, 1, 0, 6, 255, 2, 0, 15, 255, 4, 176, 1, 35, 1, 0, 5, 255, 2, 0, 15, 255, 2, 89, 1, 239, 1, 255, 1, 235, 1, 98, 1, 5, 1, 0, 3, 255, 2, 0, 15, 255, 2, 0, 1, 25, 1, 175, 1, 255, 2, 176, 1, 35, 1, 0, 2, 255, 2, 0, 15, 255, 2, 0, 3, 89, 1, 239, 1, 255, 1, 235, 1, 60, 1, 0, 1, 255, 2, 0, 15, 255, 2, 0, 4, 25, 1, 175, 1, 255, 2, 141, 1, 255, 2, 0, 15, 255, 2, 0, 6, 89, 1, 239, 1, 255, 3, 0, 15, 255, 2, 0, 7, 25, 1, 175, 1, 255, 2, 0, 15, 239, 2, 0, 9, 89, 1, 203, 1, 0, 10 };
+
+static const tImageComp FontT24_0x0030_mod = {    image_data_FontT24_0x0030,    image_data_FontT24_0x0030_mod, 216, 13, 28 };
+static const tImageComp FontT24_0x0031_mod = {    image_data_FontT24_0x0031,    image_data_FontT24_0x0031_mod, 54, 13, 28 };
+static const tImageComp FontT24_0x0032_mod = {    image_data_FontT24_0x0032,    image_data_FontT24_0x0032_mod, 204, 13, 28 };
+static const tImageComp FontT24_0x0033_mod = {    image_data_FontT24_0x0033,    image_data_FontT24_0x0033_mod, 188, 13, 28 };
+static const tImageComp FontT24_0x0034_mod = {    image_data_FontT24_0x0034,    image_data_FontT24_0x0034_mod, 126, 13, 28 };
+static const tImageComp FontT24_0x0035_mod = {    image_data_FontT24_0x0035,    image_data_FontT24_0x0035_mod, 174, 13, 28 };
+static const tImageComp FontT24_0x0036_mod = {    image_data_FontT24_0x0036,    image_data_FontT24_0x0036_mod, 220, 13, 28 };
+static const tImageComp FontT24_0x0037_mod = {    image_data_FontT24_0x0037,    image_data_FontT24_0x0037_mod, 170, 13, 28 };
+static const tImageComp FontT24_0x0038_mod = {    image_data_FontT24_0x0038,    image_data_FontT24_0x0038_mod, 260, 13, 28 };
+static const tImageComp FontT24_0x0039_mod = {    image_data_FontT24_0x0039,    image_data_FontT24_0x0039_mod, 210, 13, 28 };
+static const tImageComp FontT24_0x003a_mod = {    image_data_FontT24_0x003a,    image_data_FontT24_0x003a_mod, 74, 9, 28 };
+static const tImageComp FontT24_0x003b_mod = {    image_data_FontT24_0x003b,    image_data_FontT24_0x003b_mod, 96, 9, 28 };
+static const tImageComp FontT24_0x003c_mod = {    image_data_FontT24_0x003c,    image_data_FontT24_0x003c_mod, 114, 13, 28 };
+static const tImageComp FontT24_0x003d_mod = {    image_data_FontT24_0x003d,    image_data_FontT24_0x003d_mod, 90, 13, 28 };
+static const tImageComp FontT24_0x003e_mod = {    image_data_FontT24_0x003e,    image_data_FontT24_0x003e_mod, 110, 13, 28 };
+static const tImageComp FontT24_0x003f_mod = {    image_data_FontT24_0x003f,    image_data_FontT24_0x003f_mod, 144, 9, 28 };
+static const tImageComp FontT24_0x0040_mod = {    image_data_FontT24_0x0040,    image_data_FontT24_0x0040_mod, 368, 19, 28 };
+static const tImageComp FontT24_0x0041_mod = {    image_data_FontT24_0x0041,    image_data_FontT24_0x0041_mod, 236, 15, 28 };
+static const tImageComp FontT24_0x0042_mod = {    image_data_FontT24_0x0042,    image_data_FontT24_0x0042_mod, 190, 14, 28 };
+static const tImageComp FontT24_0x0043_mod = {    image_data_FontT24_0x0043,    image_data_FontT24_0x0043_mod, 196, 14, 28 };
+static const tImageComp FontT24_0x0044_mod = {    image_data_FontT24_0x0044,    image_data_FontT24_0x0044_mod, 168, 15, 28 };
+static const tImageComp FontT24_0x0045_mod = {    image_data_FontT24_0x0045,    image_data_FontT24_0x0045_mod, 122, 13, 28 };
+static const tImageComp FontT24_0x0046_mod = {    image_data_FontT24_0x0046,    image_data_FontT24_0x0046_mod, 86, 13, 28 };
+static const tImageComp FontT24_0x0047_mod = {    image_data_FontT24_0x0047,    image_data_FontT24_0x0047_mod, 216, 16, 28 };
+static const tImageComp FontT24_0x0048_mod = {    image_data_FontT24_0x0048,    image_data_FontT24_0x0048_mod, 74, 16, 28 };
+static const tImageComp FontT24_0x0049_mod = {    image_data_FontT24_0x0049,    image_data_FontT24_0x0049_mod, 14, 7, 28 };
+static const tImageComp FontT24_0x004a_mod = {    image_data_FontT24_0x004a,    image_data_FontT24_0x004a_mod, 90, 11, 28 };
+static const tImageComp FontT24_0x004b_mod = {    image_data_FontT24_0x004b,    image_data_FontT24_0x004b_mod, 192, 14, 28 };
+static const tImageComp FontT24_0x004c_mod = {    image_data_FontT24_0x004c,    image_data_FontT24_0x004c_mod, 50, 12, 28 };
+static const tImageComp FontT24_0x004d_mod = {    image_data_FontT24_0x004d,    image_data_FontT24_0x004d_mod, 350, 17, 28 };
+static const tImageComp FontT24_0x004e_mod = {    image_data_FontT24_0x004e,    image_data_FontT24_0x004e_mod, 134, 15, 28 };
+static const tImageComp FontT24_0x004f_mod = {    image_data_FontT24_0x004f,    image_data_FontT24_0x004f_mod, 234, 16, 28 };
+static const tImageComp FontT24_0x0050_mod = {    image_data_FontT24_0x0050,    image_data_FontT24_0x0050_mod, 124, 13, 28 };
+static const tImageComp FontT24_0x0051_mod = {    image_data_FontT24_0x0051,    image_data_FontT24_0x0051_mod, 268, 17, 28 };
+static const tImageComp FontT24_0x0052_mod = {    image_data_FontT24_0x0052,    image_data_FontT24_0x0052_mod, 170, 14, 28 };
+static const tImageComp FontT24_0x0053_mod = {    image_data_FontT24_0x0053,    image_data_FontT24_0x0053_mod, 204, 12, 28 };
+static const tImageComp FontT24_0x0054_mod = {    image_data_FontT24_0x0054,    image_data_FontT24_0x0054_mod, 64, 14, 28 };
+static const tImageComp FontT24_0x0055_mod = {    image_data_FontT24_0x0055,    image_data_FontT24_0x0055_mod, 110, 16, 28 };
+static const tImageComp FontT24_0x0056_mod = {    image_data_FontT24_0x0056,    image_data_FontT24_0x0056_mod, 222, 14, 28 };
+static const tImageComp FontT24_0x0057_mod = {    image_data_FontT24_0x0057,    image_data_FontT24_0x0057_mod, 380, 20, 28 };
+static const tImageComp FontT24_0x0058_mod = {    image_data_FontT24_0x0058,    image_data_FontT24_0x0058_mod, 264, 13, 28 };
+static const tImageComp FontT24_0x0059_mod = {    image_data_FontT24_0x0059,    image_data_FontT24_0x0059_mod, 154, 14, 28 };
+static const tImageComp FontT24_0x005a_mod = {    image_data_FontT24_0x005a,    image_data_FontT24_0x005a_mod, 200, 13, 28 };
+static const tImageComp FontT24_0x005b_mod = {    image_data_FontT24_0x005b,    image_data_FontT24_0x005b_mod, 50, 9, 28 };
+static const tImageComp FontT24_0x005c_mod = {    image_data_FontT24_0x005c,    image_data_FontT24_0x005c_mod, 126, 9, 28 };
+static const tImageComp FontT24_0x005d_mod = {    image_data_FontT24_0x005d,    image_data_FontT24_0x005d_mod, 48, 9, 28 };
+static const tImageComp FontT24_0x005e_mod = {    image_data_FontT24_0x005e,    image_data_FontT24_0x005e_mod, 96, 13, 28 };
+static const tImageComp FontT24_0x005f_mod = {    image_data_FontT24_0x005f,    image_data_FontT24_0x005f_mod, 54, 13, 28 };
+static const tImageComp FontT24_0x0060_mod = {    image_data_FontT24_0x0060,    image_data_FontT24_0x0060_mod, 44, 13, 28 };
+static const tImageComp FontT24_0x0061_mod = {    image_data_FontT24_0x0061,    image_data_FontT24_0x0061_mod, 190, 13, 28 };
+static const tImageComp FontT24_0x0062_mod = {    image_data_FontT24_0x0062,    image_data_FontT24_0x0062_mod, 158, 13, 28 };
+static const tImageComp FontT24_0x0063_mod = {    image_data_FontT24_0x0063,    image_data_FontT24_0x0063_mod, 158, 12, 28 };
+static const tImageComp FontT24_0x0064_mod = {    image_data_FontT24_0x0064,    image_data_FontT24_0x0064_mod, 150, 13, 28 };
+static const tImageComp FontT24_0x0065_mod = {    image_data_FontT24_0x0065,    image_data_FontT24_0x0065_mod, 216, 13, 28 };
+static const tImageComp FontT24_0x0066_mod = {    image_data_FontT24_0x0066,    image_data_FontT24_0x0066_mod, 88, 9, 28 };
+static const tImageComp FontT24_0x0067_mod = {    image_data_FontT24_0x0067,    image_data_FontT24_0x0067_mod, 276, 12, 28 };
+static const tImageComp FontT24_0x0068_mod = {    image_data_FontT24_0x0068,    image_data_FontT24_0x0068_mod, 84, 13, 28 };
+static const tImageComp FontT24_0x0069_mod = {    image_data_FontT24_0x0069,    image_data_FontT24_0x0069_mod, 60, 7, 28 };
+static const tImageComp FontT24_0x006a_mod = {    image_data_FontT24_0x006a,    image_data_FontT24_0x006a_mod, 94, 9, 28 };
+static const tImageComp FontT24_0x006b_mod = {    image_data_FontT24_0x006b,    image_data_FontT24_0x006b_mod, 142, 12, 28 };
+static const tImageComp FontT24_0x006c_mod = {    image_data_FontT24_0x006c,    image_data_FontT24_0x006c_mod, 42, 7, 28 };
+static const tImageComp FontT24_0x006d_mod = {    image_data_FontT24_0x006d,    image_data_FontT24_0x006d_mod, 136, 20, 28 };
+static const tImageComp FontT24_0x006e_mod = {    image_data_FontT24_0x006e,    image_data_FontT24_0x006e_mod, 82, 13, 28 };
+static const tImageComp FontT24_0x006f_mod = {    image_data_FontT24_0x006f,    image_data_FontT24_0x006f_mod, 184, 13, 28 };
+static const tImageComp FontT24_0x0070_mod = {    image_data_FontT24_0x0070,    image_data_FontT24_0x0070_mod, 150, 13, 28 };
+static const tImageComp FontT24_0x0071_mod = {    image_data_FontT24_0x0071,    image_data_FontT24_0x0071_mod, 152, 13, 28 };
+static const tImageComp FontT24_0x0072_mod = {    image_data_FontT24_0x0072,    image_data_FontT24_0x0072_mod, 56, 9, 28 };
+static const tImageComp FontT24_0x0073_mod = {    image_data_FontT24_0x0073,    image_data_FontT24_0x0073_mod, 156, 10, 28 };
+static const tImageComp FontT24_0x0074_mod = {    image_data_FontT24_0x0074,    image_data_FontT24_0x0074_mod, 86, 10, 28 };
+static const tImageComp FontT24_0x0075_mod = {    image_data_FontT24_0x0075,    image_data_FontT24_0x0075_mod, 84, 13, 28 };
+static const tImageComp FontT24_0x0076_mod = {    image_data_FontT24_0x0076,    image_data_FontT24_0x0076_mod, 174, 12, 28 };
+static const tImageComp FontT24_0x0077_mod = {    image_data_FontT24_0x0077,    image_data_FontT24_0x0077_mod, 290, 18, 28 };
+static const tImageComp FontT24_0x0078_mod = {    image_data_FontT24_0x0078,    image_data_FontT24_0x0078_mod, 226, 12, 28 };
+static const tImageComp FontT24_0x0079_mod = {    image_data_FontT24_0x0079,    image_data_FontT24_0x0079_mod, 214, 12, 28 };
+static const tImageComp FontT24_0x007a_mod = {    image_data_FontT24_0x007a,    image_data_FontT24_0x007a_mod, 160, 11, 28 };
+
+static const tImageComp* FontT24_Comp[] = {
+ &FontT24_0x0030_mod,
+ &FontT24_0x0031_mod,
+ &FontT24_0x0032_mod,
+ &FontT24_0x0033_mod,
+ &FontT24_0x0034_mod,
+ &FontT24_0x0035_mod,
+ &FontT24_0x0036_mod,
+ &FontT24_0x0037_mod,
+ &FontT24_0x0038_mod,
+ &FontT24_0x0039_mod,
+ &FontT24_0x003a_mod,
+ &FontT24_0x003b_mod,
+ &FontT24_0x003c_mod,
+ &FontT24_0x003d_mod,
+ &FontT24_0x003e_mod,
+ &FontT24_0x003f_mod,
+ &FontT24_0x0040_mod,
+ &FontT24_0x0041_mod,
+ &FontT24_0x0042_mod,
+ &FontT24_0x0043_mod,
+ &FontT24_0x0044_mod,
+ &FontT24_0x0045_mod,
+ &FontT24_0x0046_mod,
+ &FontT24_0x0047_mod,
+ &FontT24_0x0048_mod,
+ &FontT24_0x0049_mod,
+ &FontT24_0x004a_mod,
+ &FontT24_0x004b_mod,
+ &FontT24_0x004c_mod,
+ &FontT24_0x004d_mod,
+ &FontT24_0x004e_mod,
+ &FontT24_0x004f_mod,
+ &FontT24_0x0050_mod,
+ &FontT24_0x0051_mod,
+ &FontT24_0x0052_mod,
+ &FontT24_0x0053_mod,
+ &FontT24_0x0054_mod,
+ &FontT24_0x0055_mod,
+ &FontT24_0x0056_mod,
+ &FontT24_0x0057_mod,
+ &FontT24_0x0058_mod,
+ &FontT24_0x0059_mod,
+ &FontT24_0x005a_mod,
+ &FontT24_0x005b_mod,
+ &FontT24_0x005c_mod,
+ &FontT24_0x005d_mod,
+ &FontT24_0x005e_mod,
+ &FontT24_0x005f_mod,
+ &FontT24_0x0060_mod,
+ &FontT24_0x0061_mod,
+ &FontT24_0x0062_mod,
+ &FontT24_0x0063_mod,
+ &FontT24_0x0064_mod,
+ &FontT24_0x0065_mod,
+ &FontT24_0x0066_mod,
+ &FontT24_0x0067_mod,
+ &FontT24_0x0068_mod,
+ &FontT24_0x0069_mod,
+ &FontT24_0x006a_mod,
+ &FontT24_0x006b_mod,
+ &FontT24_0x006c_mod,
+ &FontT24_0x006d_mod,
+ &FontT24_0x006e_mod,
+ &FontT24_0x006f_mod,
+ &FontT24_0x0070_mod,
+ &FontT24_0x0071_mod,
+ &FontT24_0x0072_mod,
+ &FontT24_0x0073_mod,
+ &FontT24_0x0074_mod,
+ &FontT24_0x0075_mod,
+ &FontT24_0x0076_mod,
+ &FontT24_0x0077_mod,
+ &FontT24_0x0078_mod,
+ &FontT24_0x0079_mod,
+ &FontT24_0x007a_mod
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Inc/font_T48_min.h	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,874 @@
+#include "gfx_fonts.h"
+
+static uint8_t image_data_FontT48_0x00b0[784];
+
+static uint8_t image_data_FontT48_0x0020[14];
+
+static uint8_t image_data_FontT48_0x0021[403];
+
+static uint8_t image_data_FontT48_0x0022[621];
+
+static uint8_t image_data_FontT48_0x0023[1456];
+
+static uint8_t image_data_FontT48_0x0024[1180];
+
+static uint8_t image_data_FontT48_0x0025[1514];
+
+static uint8_t image_data_FontT48_0x0026[1574];
+
+static uint8_t image_data_FontT48_0x0027[338];
+
+static uint8_t image_data_FontT48_0x0028[678];
+
+static uint8_t image_data_FontT48_0x0029[623];
+
+static uint8_t image_data_FontT48_0x002a[843];
+
+static uint8_t image_data_FontT48_0x002b[1180];
+
+static uint8_t image_data_FontT48_0x002c[513];
+
+static uint8_t image_data_FontT48_0x002d[678];
+
+static uint8_t image_data_FontT48_0x002e[513];
+
+static uint8_t image_data_FontT48_0x002f[960];
+
+static uint8_t image_data_FontT48_0x0030[1290];
+
+static uint8_t image_data_FontT48_0x0031[740];
+
+static uint8_t image_data_FontT48_0x0032[1235];
+
+static uint8_t image_data_FontT48_0x0033[1070];
+
+static uint8_t image_data_FontT48_0x0034[1400];
+
+static uint8_t image_data_FontT48_0x0035[1125];
+
+static uint8_t image_data_FontT48_0x0036[1235];
+
+static uint8_t image_data_FontT48_0x0037[1345];
+
+static uint8_t image_data_FontT48_0x0038[1125];
+
+static uint8_t image_data_FontT48_0x0039[1235];
+
+static uint8_t image_data_FontT48_0x003a[513];
+
+static uint8_t image_data_FontT48_0x003b[513];
+
+static uint8_t image_data_FontT48_0x003c[1015];
+
+static uint8_t image_data_FontT48_0x003d[1180];
+
+static uint8_t image_data_FontT48_0x003e[1015];
+
+static uint8_t image_data_FontT48_0x003f[898];
+
+static uint8_t image_data_FontT48_0x0040[1852];
+
+static uint8_t image_data_FontT48_0x0041[1568];
+
+static uint8_t image_data_FontT48_0x0042[1292];
+
+static uint8_t image_data_FontT48_0x0043[1404];
+
+static uint8_t image_data_FontT48_0x0044[1404];
+
+static uint8_t image_data_FontT48_0x0045[1236];
+
+static uint8_t image_data_FontT48_0x0046[1236];
+
+static uint8_t image_data_FontT48_0x0047[1572];
+
+static uint8_t image_data_FontT48_0x0048[1406];
+
+static uint8_t image_data_FontT48_0x0049[398];
+
+static uint8_t image_data_FontT48_0x004a[1068];
+
+static uint8_t image_data_FontT48_0x004b[1293];
+
+static uint8_t image_data_FontT48_0x004c[1179];
+
+static uint8_t image_data_FontT48_0x004d[1851];
+
+static uint8_t image_data_FontT48_0x004e[1406];
+
+static uint8_t image_data_FontT48_0x004f[1627];
+
+static uint8_t image_data_FontT48_0x0050[1292];
+
+static uint8_t image_data_FontT48_0x0051[1849];
+
+static uint8_t image_data_FontT48_0x0052[1403];
+
+static uint8_t image_data_FontT48_0x0053[1288];
+
+static uint8_t image_data_FontT48_0x0054[1568];
+
+static uint8_t image_data_FontT48_0x0055[1406];
+
+static uint8_t image_data_FontT48_0x0056[1568];
+
+static uint8_t image_data_FontT48_0x0057[2296];
+
+static uint8_t image_data_FontT48_0x0058[1512];
+
+static uint8_t image_data_FontT48_0x0059[1512];
+
+static uint8_t image_data_FontT48_0x005a[1456];
+
+static uint8_t image_data_FontT48_0x005b[733];
+
+static uint8_t image_data_FontT48_0x005c[842];
+
+static uint8_t image_data_FontT48_0x005d[733];
+
+static uint8_t image_data_FontT48_0x005e[1015];
+
+static uint8_t image_data_FontT48_0x005f[1400];
+
+//static uint8_t image_data_FontT48_0x0060[1015];
+
+static uint8_t image_data_FontT48_0x0061[1290];
+
+static uint8_t image_data_FontT48_0x0062[1347];
+
+static uint8_t image_data_FontT48_0x0063[1234];
+
+static uint8_t image_data_FontT48_0x0064[1347];
+
+static uint8_t image_data_FontT48_0x0065[1346];
+
+static uint8_t image_data_FontT48_0x0066[843];
+
+static uint8_t image_data_FontT48_0x0067[1234];
+
+static uint8_t image_data_FontT48_0x0068[1236];
+
+static uint8_t image_data_FontT48_0x0069[564];
+
+static uint8_t image_data_FontT48_0x006a[788];
+
+static uint8_t image_data_FontT48_0x006b[1290];
+
+static uint8_t image_data_FontT48_0x006c[564];
+
+static uint8_t image_data_FontT48_0x006d[2020];
+
+static uint8_t image_data_FontT48_0x006e[1236];
+
+static uint8_t image_data_FontT48_0x006f[1346];
+
+static uint8_t image_data_FontT48_0x0070[1347];
+
+static uint8_t image_data_FontT48_0x0071[1347];
+
+static uint8_t image_data_FontT48_0x0072[900];
+
+static uint8_t image_data_FontT48_0x0073[954];
+
+static uint8_t image_data_FontT48_0x0074[954];
+
+static uint8_t image_data_FontT48_0x0075[1236];
+
+static uint8_t image_data_FontT48_0x0076[1289];
+
+static uint8_t image_data_FontT48_0x0077[2016];
+
+static uint8_t image_data_FontT48_0x0078[1289];
+
+static uint8_t image_data_FontT48_0x0079[1344];
+
+static uint8_t image_data_FontT48_0x007a[1288];
+
+static uint8_t image_data_FontT48_0x007b[1008];
+
+static uint8_t image_data_FontT48_0x007c[300];
+
+static uint8_t image_data_FontT48_0x007d[843];
+
+static uint8_t image_data_FontT48_0x007e[1015];
+
+
+static const tImage FontT48_0x00b0 __attribute__(( section(".upper_fonts.FontT48_0x00b0") )) = { image_data_FontT48_0x00b0, 14, 56};
+static const tImage FontT48_0x0020 __attribute__(( section(".upper_fonts.FontT48_0x0020") )) = { image_data_FontT48_0x0020, 14, 56};
+static const tImage FontT48_0x0021 __attribute__(( section(".upper_fonts.FontT48_0x0021") )) = { image_data_FontT48_0x0021, 18, 56};
+static const tImage FontT48_0x0022 __attribute__(( section(".upper_fonts.FontT48_0x0022") )) = { image_data_FontT48_0x0022, 16, 56};
+static const tImage FontT48_0x0023 __attribute__(( section(".upper_fonts.FontT48_0x0023") )) = { image_data_FontT48_0x0023, 26, 56};
+static const tImage FontT48_0x0024 __attribute__(( section(".upper_fonts.FontT48_0x0024") )) = { image_data_FontT48_0x0024, 25, 56};
+static const tImage FontT48_0x0025 __attribute__(( section(".upper_fonts.FontT48_0x0025") )) = { image_data_FontT48_0x0025, 29, 56};
+static const tImage FontT48_0x0026 __attribute__(( section(".upper_fonts.FontT48_0x0026") )) = { image_data_FontT48_0x0026, 34, 56};
+static const tImage FontT48_0x0027 __attribute__(( section(".upper_fonts.FontT48_0x0027") )) = { image_data_FontT48_0x0027,  8, 56};
+static const tImage FontT48_0x0028 __attribute__(( section(".upper_fonts.FontT48_0x0028") )) = { image_data_FontT48_0x0028, 18, 56};
+static const tImage FontT48_0x0029 __attribute__(( section(".upper_fonts.FontT48_0x0029") )) = { image_data_FontT48_0x0029, 18, 56};
+static const tImage FontT48_0x002a __attribute__(( section(".upper_fonts.FontT48_0x002a") )) = { image_data_FontT48_0x002a, 18, 56};
+static const tImage FontT48_0x002b __attribute__(( section(".upper_fonts.FontT48_0x002b") )) = { image_data_FontT48_0x002b, 25, 56};
+static const tImage FontT48_0x002c __attribute__(( section(".upper_fonts.FontT48_0x002c") )) = { image_data_FontT48_0x002c, 18, 56};
+static const tImage FontT48_0x002d __attribute__(( section(".upper_fonts.FontT48_0x002d") )) = { image_data_FontT48_0x002d, 18, 56};
+static const tImage FontT48_0x002e __attribute__(( section(".upper_fonts.FontT48_0x002e") )) = { image_data_FontT48_0x002e, 18, 56};
+static const tImage FontT48_0x002f __attribute__(( section(".upper_fonts.FontT48_0x002f") )) = { image_data_FontT48_0x002f, 25, 56};
+static const tImage FontT48_0x0030 __attribute__(( section(".upper_fonts.FontT48_0x0030") )) = { image_data_FontT48_0x0030, 25, 56};
+static const tImage FontT48_0x0031 __attribute__(( section(".upper_fonts.FontT48_0x0031") )) = { image_data_FontT48_0x0031, 25, 56};
+static const tImage FontT48_0x0032 __attribute__(( section(".upper_fonts.FontT48_0x0032") )) = { image_data_FontT48_0x0032, 25, 56};
+static const tImage FontT48_0x0033 __attribute__(( section(".upper_fonts.FontT48_0x0033") )) = { image_data_FontT48_0x0033, 25, 56};
+static const tImage FontT48_0x0034 __attribute__(( section(".upper_fonts.FontT48_0x0034") )) = { image_data_FontT48_0x0034, 25, 56};
+static const tImage FontT48_0x0035 __attribute__(( section(".upper_fonts.FontT48_0x0035") )) = { image_data_FontT48_0x0035, 25, 56};
+static const tImage FontT48_0x0036 __attribute__(( section(".upper_fonts.FontT48_0x0036") )) = { image_data_FontT48_0x0036, 25, 56};
+static const tImage FontT48_0x0037 __attribute__(( section(".upper_fonts.FontT48_0x0037") )) = { image_data_FontT48_0x0037, 25, 56};
+static const tImage FontT48_0x0038 __attribute__(( section(".upper_fonts.FontT48_0x0038") )) = { image_data_FontT48_0x0038, 25, 56};
+static const tImage FontT48_0x0039 __attribute__(( section(".upper_fonts.FontT48_0x0039") )) = { image_data_FontT48_0x0039, 25, 56};
+static const tImage FontT48_0x003a __attribute__(( section(".upper_fonts.FontT48_0x003a") )) = { image_data_FontT48_0x003a, 18, 56};
+static const tImage FontT48_0x003b __attribute__(( section(".upper_fonts.FontT48_0x003b") )) = { image_data_FontT48_0x003b, 18, 56};
+static const tImage FontT48_0x003c __attribute__(( section(".upper_fonts.FontT48_0x003c") )) = { image_data_FontT48_0x003c, 25, 56};
+static const tImage FontT48_0x003d __attribute__(( section(".upper_fonts.FontT48_0x003d") )) = { image_data_FontT48_0x003d, 25, 56};
+static const tImage FontT48_0x003e __attribute__(( section(".upper_fonts.FontT48_0x003e") )) = { image_data_FontT48_0x003e, 25, 56};
+static const tImage FontT48_0x003f __attribute__(( section(".upper_fonts.FontT48_0x003f") )) = { image_data_FontT48_0x003f, 18, 56};
+static const tImage FontT48_0x0040 __attribute__(( section(".upper_fonts.FontT48_0x0040") )) = { image_data_FontT48_0x0040, 37, 56};
+static const tImage FontT48_0x0041 __attribute__(( section(".upper_fonts.FontT48_0x0041") )) = { image_data_FontT48_0x0041, 28, 56};
+static const tImage FontT48_0x0042 __attribute__(( section(".upper_fonts.FontT48_0x0042") )) = { image_data_FontT48_0x0042, 27, 56};
+static const tImage FontT48_0x0043 __attribute__(( section(".upper_fonts.FontT48_0x0043") )) = { image_data_FontT48_0x0043, 29, 56};
+static const tImage FontT48_0x0044 __attribute__(( section(".upper_fonts.FontT48_0x0044") )) = { image_data_FontT48_0x0044, 29, 56};
+static const tImage FontT48_0x0045 __attribute__(( section(".upper_fonts.FontT48_0x0045") )) = { image_data_FontT48_0x0045, 26, 56};
+static const tImage FontT48_0x0046 __attribute__(( section(".upper_fonts.FontT48_0x0046") )) = { image_data_FontT48_0x0046, 26, 56};
+static const tImage FontT48_0x0047 __attribute__(( section(".upper_fonts.FontT48_0x0047") )) = { image_data_FontT48_0x0047, 32, 56};
+static const tImage FontT48_0x0048 __attribute__(( section(".upper_fonts.FontT48_0x0048") )) = { image_data_FontT48_0x0048, 31, 56};
+static const tImage FontT48_0x0049 __attribute__(( section(".upper_fonts.FontT48_0x0049") )) = { image_data_FontT48_0x0049, 13, 56};
+static const tImage FontT48_0x004a __attribute__(( section(".upper_fonts.FontT48_0x004a") )) = { image_data_FontT48_0x004a, 23, 56};
+static const tImage FontT48_0x004b __attribute__(( section(".upper_fonts.FontT48_0x004b") )) = { image_data_FontT48_0x004b, 28, 56};
+static const tImage FontT48_0x004c __attribute__(( section(".upper_fonts.FontT48_0x004c") )) = { image_data_FontT48_0x004c, 24, 56};
+static const tImage FontT48_0x004d __attribute__(( section(".upper_fonts.FontT48_0x004d") )) = { image_data_FontT48_0x004d, 36, 56};
+static const tImage FontT48_0x004e __attribute__(( section(".upper_fonts.FontT48_0x004e") )) = { image_data_FontT48_0x004e, 31, 56};
+static const tImage FontT48_0x004f __attribute__(( section(".upper_fonts.FontT48_0x004e") )) = { image_data_FontT48_0x004f, 32, 56};
+static const tImage FontT48_0x0050 __attribute__(( section(".upper_fonts.FontT48_0x0050") )) = { image_data_FontT48_0x0050, 27, 56};
+static const tImage FontT48_0x0051 __attribute__(( section(".upper_fonts.FontT48_0x0051") )) = { image_data_FontT48_0x0051, 34, 56};
+static const tImage FontT48_0x0052 __attribute__(( section(".upper_fonts.FontT48_0x0052") )) = { image_data_FontT48_0x0052, 28, 56};
+static const tImage FontT48_0x0053 __attribute__(( section(".upper_fonts.FontT48_0x0053") )) = { image_data_FontT48_0x0053, 23, 56};
+static const tImage FontT48_0x0054 __attribute__(( section(".upper_fonts.FontT48_0x0054") )) = { image_data_FontT48_0x0054, 28, 56};
+static const tImage FontT48_0x0055 __attribute__(( section(".upper_fonts.FontT48_0x0055") )) = { image_data_FontT48_0x0055, 31, 56};
+static const tImage FontT48_0x0056 __attribute__(( section(".upper_fonts.FontT48_0x0056") )) = { image_data_FontT48_0x0056, 28, 56};
+static const tImage FontT48_0x0057 __attribute__(( section(".upper_fonts.FontT48_0x0057") )) = { image_data_FontT48_0x0057, 41, 56};
+static const tImage FontT48_0x0058 __attribute__(( section(".upper_fonts.FontT48_0x0058") )) = { image_data_FontT48_0x0058, 27, 56};
+static const tImage FontT48_0x0059 __attribute__(( section(".upper_fonts.FontT48_0x0059") )) = { image_data_FontT48_0x0059, 27, 56};
+static const tImage FontT48_0x005a __attribute__(( section(".upper_fonts.FontT48_0x005b") )) = { image_data_FontT48_0x005a, 26, 56};
+static const tImage FontT48_0x005b __attribute__(( section(".upper_fonts.FontT48_0x005b") )) = { image_data_FontT48_0x005b, 18, 56};
+static const tImage FontT48_0x005c __attribute__(( section(".upper_fonts.FontT48_0x005c") )) = { image_data_FontT48_0x005c, 17, 56};
+static const tImage FontT48_0x005d __attribute__(( section(".upper_fonts.FontT48_0x005d") )) = { image_data_FontT48_0x005d, 18, 56};
+static const tImage FontT48_0x005e __attribute__(( section(".upper_fonts.FontT48_0x005e") )) = { image_data_FontT48_0x005e, 25, 56};
+static const tImage FontT48_0x005f __attribute__(( section(".upper_fonts.FontT48_0x005f") )) = { image_data_FontT48_0x005f, 25, 56};
+static const tImage FontT48_0x0061 __attribute__(( section(".upper_fonts.FontT48_0x0061") )) = { image_data_FontT48_0x0061, 25, 56};
+static const tImage FontT48_0x0062 __attribute__(( section(".upper_fonts.FontT48_0x0062") )) = { image_data_FontT48_0x0062, 27, 56};
+static const tImage FontT48_0x0063 __attribute__(( section(".upper_fonts.FontT48_0x0063") )) = { image_data_FontT48_0x0063, 24, 56};
+static const tImage FontT48_0x0064 __attribute__(( section(".upper_fonts.FontT48_0x0064") )) = { image_data_FontT48_0x0064, 27, 56};
+static const tImage FontT48_0x0065 __attribute__(( section(".upper_fonts.FontT48_0x0065") )) = { image_data_FontT48_0x0065, 26, 56};
+static const tImage FontT48_0x0066 __attribute__(( section(".upper_fonts.FontT48_0x0066") )) = { image_data_FontT48_0x0066, 18, 56};
+static const tImage FontT48_0x0067 __attribute__(( section(".upper_fonts.FontT48_0x0067") )) = { image_data_FontT48_0x0067, 24, 56};
+static const tImage FontT48_0x0068 __attribute__(( section(".upper_fonts.FontT48_0x0068") )) = { image_data_FontT48_0x0068, 26, 56};
+static const tImage FontT48_0x0069 __attribute__(( section(".upper_fonts.FontT48_0x0069") )) = { image_data_FontT48_0x0069, 14, 56};
+static const tImage FontT48_0x006a __attribute__(( section(".upper_fonts.FontT48_0x006a") )) = { image_data_FontT48_0x006a, 18, 56};
+static const tImage FontT48_0x006b __attribute__(( section(".upper_fonts.FontT48_0x006b") )) = { image_data_FontT48_0x006b, 25, 56};
+static const tImage FontT48_0x006c __attribute__(( section(".upper_fonts.FontT48_0x006c") )) = { image_data_FontT48_0x006c, 14, 56};
+static const tImage FontT48_0x006d __attribute__(( section(".upper_fonts.FontT48_0x006d") )) = { image_data_FontT48_0x006d, 40, 56};
+static const tImage FontT48_0x006e __attribute__(( section(".upper_fonts.FontT48_0x006e") )) = { image_data_FontT48_0x006e, 26, 56};
+static const tImage FontT48_0x006f __attribute__(( section(".upper_fonts.FontT48_0x006f") )) = { image_data_FontT48_0x006f, 26, 56};
+static const tImage FontT48_0x0070 __attribute__(( section(".upper_fonts.FontT48_0x0070") )) = { image_data_FontT48_0x0070, 27, 56};
+static const tImage FontT48_0x0071 __attribute__(( section(".upper_fonts.FontT48_0x0071") )) = { image_data_FontT48_0x0071, 27, 56};
+static const tImage FontT48_0x0072 __attribute__(( section(".upper_fonts.FontT48_0x0072") )) = { image_data_FontT48_0x0072, 20, 56};
+static const tImage FontT48_0x0073 __attribute__(( section(".upper_fonts.FontT48_0x0073") )) = { image_data_FontT48_0x0073, 19, 56};
+static const tImage FontT48_0x0074 __attribute__(( section(".upper_fonts.FontT48_0x0074") )) = { image_data_FontT48_0x0074, 19, 56};
+static const tImage FontT48_0x0075 __attribute__(( section(".upper_fonts.FontT48_0x0075") )) = { image_data_FontT48_0x0075, 26, 56};
+static const tImage FontT48_0x0076 __attribute__(( section(".upper_fonts.FontT48_0x0076") )) = { image_data_FontT48_0x0076, 24, 56};
+static const tImage FontT48_0x0077 __attribute__(( section(".upper_fonts.FontT48_0x0077") )) = { image_data_FontT48_0x0077, 36, 56};
+static const tImage FontT48_0x0078 __attribute__(( section(".upper_fonts.FontT48_0x0078") )) = { image_data_FontT48_0x0078, 24, 56};
+static const tImage FontT48_0x0079 __attribute__(( section(".upper_fonts.FontT48_0x0079") )) = { image_data_FontT48_0x0079, 24, 56};
+static const tImage FontT48_0x007a __attribute__(( section(".upper_fonts.FontT48_0x007a") )) = { image_data_FontT48_0x007a, 23, 56};
+static const tImage FontT48_0x007b __attribute__(( section(".upper_fonts.FontT48_0x007b") )) = { image_data_FontT48_0x007b, 18, 56};
+static const tImage FontT48_0x007c __attribute__(( section(".upper_fonts.FontT48_0x007c") )) = { image_data_FontT48_0x007c, 25, 56};
+static const tImage FontT48_0x007d __attribute__(( section(".upper_fonts.FontT48_0x007d") )) = { image_data_FontT48_0x007d, 18, 56};
+static const tImage FontT48_0x007e __attribute__(( section(".upper_fonts.FontT48_0x007e") )) = { image_data_FontT48_0x007e, 25, 56};
+
+static const tChar FontT48_array[] __attribute__(( section(".upper_fonts.FontT48_array") )) = {
+
+  
+  {0x0020, &FontT48_0x0020},
+
+  
+  {0x0021, &FontT48_0x0021},
+
+  
+  {0x0022, &FontT48_0x0022},
+
+  
+  {0x0023, &FontT48_0x0023},
+
+  
+  {0x0024, &FontT48_0x0024},
+
+  
+  {0x0025, &FontT48_0x0025},
+
+  
+  {0x0026, &FontT48_0x0026},
+
+  
+  {0x0027, &FontT48_0x0027},
+
+  
+  {0x0028, &FontT48_0x0028},
+
+  
+  {0x0029, &FontT48_0x0029},
+
+  
+  {0x002a, &FontT48_0x002a},
+
+  
+  {0x002b, &FontT48_0x002b},
+
+  
+  {0x002c, &FontT48_0x002c},
+
+  
+  {0x002d, &FontT48_0x002d},
+
+  
+  {0x002e, &FontT48_0x002e},
+
+  
+  {0x002f, &FontT48_0x002f},
+
+  
+  {0x0030, &FontT48_0x0030},
+
+  
+  {0x0031, &FontT48_0x0031},
+
+  
+  {0x0032, &FontT48_0x0032},
+
+  
+  {0x0033, &FontT48_0x0033},
+
+  
+  {0x0034, &FontT48_0x0034},
+
+  
+  {0x0035, &FontT48_0x0035},
+
+  
+  {0x0036, &FontT48_0x0036},
+
+  
+  {0x0037, &FontT48_0x0037},
+
+  
+  {0x0038, &FontT48_0x0038},
+
+  
+  {0x0039, &FontT48_0x0039},
+
+  
+  {0x003a, &FontT48_0x003a},
+
+  
+  {0x003b, &FontT48_0x003b},
+
+  
+  {0x003c, &FontT48_0x003c},
+
+  
+  {0x003d, &FontT48_0x003d},
+
+  
+  {0x003e, &FontT48_0x003e},
+
+  
+  {0x003f, &FontT48_0x003f},
+
+  
+  {0x0040, &FontT48_0x0040},
+
+  
+  {0x0041, &FontT48_0x0041},
+
+  
+  {0x0042, &FontT48_0x0042},
+
+  
+  {0x0043, &FontT48_0x0043},
+
+  
+  {0x0044, &FontT48_0x0044},
+
+  
+  {0x0045, &FontT48_0x0045},
+
+  
+  {0x0046, &FontT48_0x0046},
+
+  
+  {0x0047, &FontT48_0x0047},
+
+  
+  {0x0048, &FontT48_0x0048},
+
+  
+  {0x0049, &FontT48_0x0049},
+
+  
+  {0x004a, &FontT48_0x004a},
+
+  
+  {0x004b, &FontT48_0x004b},
+
+  
+  {0x004c, &FontT48_0x004c},
+
+  
+  {0x004d, &FontT48_0x004d},
+
+  
+  {0x004e, &FontT48_0x004e},
+
+  
+  {0x004f, &FontT48_0x004f},
+
+  
+  {0x0050, &FontT48_0x0050},
+
+  
+  {0x0051, &FontT48_0x0051},
+
+  
+  {0x0052, &FontT48_0x0052},
+
+  
+  {0x0053, &FontT48_0x0053},
+
+  
+  {0x0054, &FontT48_0x0054},
+
+  
+  {0x0055, &FontT48_0x0055},
+
+  
+  {0x0056, &FontT48_0x0056},
+
+  
+  {0x0057, &FontT48_0x0057},
+
+  
+  {0x0058, &FontT48_0x0058},
+
+  
+  {0x0059, &FontT48_0x0059},
+
+  
+  {0x005a, &FontT48_0x005a},
+
+  
+  {0x005b, &FontT48_0x005b},
+
+  
+  {0x005c, &FontT48_0x005c},
+
+  
+  {0x005d, &FontT48_0x005d},
+
+  
+  {0x005e, &FontT48_0x005e},
+
+  
+  {0x005f, &FontT48_0x005f},
+
+
+  {0x0060, &FontT48_0x00b0},
+
+  
+  {0x0061, &FontT48_0x0061},
+
+  
+  {0x0062, &FontT48_0x0062},
+
+  
+  {0x0063, &FontT48_0x0063},
+
+  
+  {0x0064, &FontT48_0x0064},
+
+  
+  {0x0065, &FontT48_0x0065},
+
+  
+  {0x0066, &FontT48_0x0066},
+
+  
+  {0x0067, &FontT48_0x0067},
+
+  
+  {0x0068, &FontT48_0x0068},
+
+  
+  {0x0069, &FontT48_0x0069},
+
+  
+  {0x006a, &FontT48_0x006a},
+
+  
+  {0x006b, &FontT48_0x006b},
+
+  
+  {0x006c, &FontT48_0x006c},
+
+  
+  {0x006d, &FontT48_0x006d},
+
+  
+  {0x006e, &FontT48_0x006e},
+
+  
+  {0x006f, &FontT48_0x006f},
+
+  
+  {0x0070, &FontT48_0x0070},
+
+  
+  {0x0071, &FontT48_0x0071},
+
+  
+  {0x0072, &FontT48_0x0072},
+
+  
+  {0x0073, &FontT48_0x0073},
+
+  
+  {0x0074, &FontT48_0x0074},
+
+  
+  {0x0075, &FontT48_0x0075},
+
+  
+  {0x0076, &FontT48_0x0076},
+
+  
+  {0x0077, &FontT48_0x0077},
+
+  
+  {0x0078, &FontT48_0x0078},
+
+  
+  {0x0079, &FontT48_0x0079},
+
+  
+  {0x007a, &FontT48_0x007a},
+
+  
+  {0x007b, &FontT48_0x007b},
+
+  
+  {0x007c, &FontT48_0x007c},
+
+  
+  {0x007d, &FontT48_0x007d},
+
+  
+  {0x007e, &FontT48_0x007e},
+};
+
+const tFont FontT48min __attribute__ (( used, section(".upper_font_directory.FontT48") )) = { 95, FontT48_array, 14, 25, 56 };
+
+static const uint8_t image_data_FontT48_0x00b0_mod[146] = { 0, 95, 5, 1, 11, 2, 5, 1, 0, 51, 60, 1, 176, 1, 219, 2, 176, 1, 60, 1, 0, 49, 141, 1, 255, 1, 239, 1, 175, 2, 239, 1, 255, 1, 141, 1, 0, 47, 60, 1, 255, 1, 245, 1, 25, 1, 0, 2, 25, 1, 245, 1, 255, 1, 60, 1, 0, 46, 255, 2, 56, 1, 0, 4, 56, 1, 255, 2, 0, 46, 255, 2, 0, 6, 255, 2, 0, 46, 255, 2, 0, 6, 255, 2, 0, 46, 239, 1, 255, 1, 60, 1, 0, 4, 60, 1, 255, 1, 239, 1, 0, 46, 25, 1, 255, 2, 60, 1, 5, 2, 60, 1, 255, 2, 25, 1, 0, 47, 89, 1, 245, 1, 255, 1, 176, 2, 255, 1, 245, 1, 89, 1, 0, 49, 56, 1, 128, 1, 175, 2, 128, 1, 56, 1, 0, 124 };
+static const uint8_t image_data_FontT48_0x0020_mod[2] = { 1, 14 };
+static const uint8_t image_data_FontT48_0x0021_mod[154] = { 1, 6, 0, 12, 141, 1, 235, 1, 255, 1, 235, 1, 141, 1, 0, 10, 5, 1, 11, 2, 35, 1, 60, 2, 98, 13, 0, 21, 141, 1, 255, 5, 141, 1, 0, 2, 5, 1, 11, 1, 35, 1, 60, 2, 98, 1, 141, 1, 176, 1, 219, 2, 235, 1, 255, 15, 0, 21, 255, 7, 0, 2, 176, 1, 219, 1, 235, 1, 255, 23, 0, 21, 255, 7, 0, 2, 239, 1, 245, 1, 255, 24, 0, 21, 239, 1, 255, 5, 239, 1, 0, 2, 25, 1, 56, 1, 89, 1, 128, 1, 175, 2, 203, 1, 239, 1, 245, 2, 255, 16, 0, 21, 25, 1, 245, 1, 255, 3, 245, 1, 25, 1, 0, 8, 12, 1, 25, 1, 56, 2, 89, 1, 128, 2, 175, 3, 203, 10, 0, 22, 56, 1, 175, 3, 56, 1, 0, 19, 12, 10, 0, 10, 1, 5 };
+static const uint8_t image_data_FontT48_0x0022_mod[94] = { 1, 1, 0, 37, 5, 3, 11, 2, 35, 3, 60, 1, 0, 47, 176, 3, 219, 2, 235, 3, 255, 1, 0, 47, 255, 9, 0, 47, 255, 9, 0, 47, 89, 1, 128, 2, 175, 2, 203, 3, 239, 1, 0, 52, 12, 3, 25, 1, 0, 10, 1, 2, 0, 37, 11, 1, 35, 3, 60, 3, 98, 2, 0, 47, 219, 1, 235, 3, 255, 5, 0, 47, 255, 9, 0, 47, 245, 2, 255, 7, 0, 47, 56, 2, 89, 2, 128, 3, 175, 2, 0, 10, 1, 2 };
+static const uint8_t image_data_FontT48_0x0023_mod[546] = { 0, 21, 35, 3, 0, 43, 60, 1, 11, 1, 0, 8, 235, 3, 0, 43, 255, 1, 219, 1, 141, 1, 98, 1, 35, 1, 5, 1, 0, 4, 255, 3, 0, 43, 255, 4, 235, 1, 176, 1, 141, 1, 60, 1, 35, 1, 5, 1, 255, 3, 0, 9, 98, 3, 0, 31, 203, 1, 239, 1, 255, 6, 235, 1, 176, 1, 255, 3, 5, 1, 0, 8, 255, 3, 0, 31, 12, 1, 25, 1, 89, 1, 175, 1, 203, 1, 245, 1, 255, 7, 176, 1, 98, 1, 35, 1, 11, 1, 0, 5, 255, 3, 0, 35, 12, 1, 56, 1, 128, 1, 175, 1, 239, 1, 255, 6, 235, 1, 219, 1, 141, 1, 98, 1, 35, 1, 5, 1, 0, 1, 255, 3, 0, 39, 25, 1, 89, 1, 255, 9, 235, 1, 176, 1, 141, 1, 255, 3, 0, 41, 255, 3, 89, 1, 128, 1, 203, 1, 239, 1, 255, 8, 98, 1, 60, 1, 11, 1, 0, 38, 255, 3, 0, 2, 12, 1, 25, 1, 89, 1, 175, 1, 203, 1, 245, 1, 255, 6, 219, 1, 141, 1, 98, 1, 35, 1, 11, 1, 0, 34, 255, 3, 0, 6, 12, 1, 56, 1, 89, 1, 255, 8, 235, 1, 219, 1, 141, 1, 60, 1, 0, 22, 60, 1, 11, 1, 0, 8, 255, 3, 0, 9, 255, 3, 89, 1, 175, 1, 239, 1, 255, 6, 0, 22, 255, 1, 219, 1, 141, 1, 98, 1, 35, 1, 11, 1, 0, 4, 255, 3, 0, 9, 255, 3, 0, 2, 25, 1, 89, 1, 128, 1, 203, 1, 245, 1, 255, 2, 0, 22, 255, 4, 235, 1, 219, 1, 141, 1, 60, 1, 35, 1, 5, 1, 255, 3, 0, 9, 255, 3, 0, 5, 12, 1, 56, 1, 89, 1, 175, 1, 0, 22, 203, 1, 239, 1, 255, 6, 235, 1, 176, 1, 255, 3, 5, 1, 0, 8, 255, 3, 0, 31, 12, 1, 25, 1, 89, 1, 175, 1, 203, 1, 245, 1, 255, 7, 176, 1, 98, 1, 60, 1, 11, 1, 0, 5, 255, 3, 0, 35, 12, 1, 56, 1, 89, 1, 175, 1, 239, 1, 245, 1, 255, 6, 219, 1, 141, 1, 98, 1, 35, 1, 11, 1, 0, 1, 255, 3, 0, 39, 25, 1, 56, 1, 255, 3, 245, 1, 255, 5, 235, 1, 219, 1, 141, 1, 255, 3, 0, 41, 255, 3, 56, 1, 128, 1, 175, 1, 239, 1, 245, 1, 255, 7, 141, 1, 60, 1, 35, 1, 5, 1, 0, 37, 255, 3, 0, 3, 25, 1, 56, 1, 128, 1, 203, 1, 239, 1, 255, 6, 235, 1, 176, 1, 98, 1, 60, 1, 11, 1, 5, 1, 0, 33, 255, 3, 0, 6, 12, 1, 25, 1, 89, 1, 255, 9, 219, 1, 176, 1, 98, 1, 0, 32, 239, 3, 0, 9, 255, 3, 89, 1, 175, 1, 203, 1, 245, 1, 255, 5, 0, 32, 25, 3, 0, 9, 255, 3, 0, 2, 12, 1, 56, 1, 128, 1, 175, 1, 239, 1, 245, 1, 255, 1, 0, 44, 255, 3, 0, 6, 25, 1, 56, 1, 128, 1, 0, 44, 255, 3, 0, 53, 89, 3, 0, 20 };
+static const uint8_t image_data_FontT48_0x0024_mod[400] = { 1, 2, 0, 35, 5, 3, 0, 31, 98, 1, 35, 1, 0, 17, 35, 1, 98, 1, 141, 1, 176, 3, 141, 1, 60, 1, 5, 1, 0, 27, 141, 1, 255, 1, 235, 1, 141, 1, 60, 1, 0, 13, 5, 1, 141, 1, 235, 1, 255, 7, 176, 1, 35, 1, 0, 26, 255, 4, 203, 1, 0, 12, 11, 1, 176, 1, 255, 10, 235, 1, 60, 1, 0, 25, 255, 4, 12, 1, 0, 12, 219, 1, 255, 13, 35, 1, 0, 23, 60, 1, 255, 4, 0, 12, 98, 1, 255, 5, 245, 1, 203, 2, 239, 1, 255, 5, 235, 1, 0, 23, 255, 4, 128, 1, 0, 12, 255, 5, 175, 1, 56, 1, 12, 2, 25, 1, 89, 1, 239, 1, 255, 4, 35, 1, 0, 22, 255, 4, 0, 12, 141, 1, 255, 4, 128, 1, 0, 6, 25, 1, 255, 4, 235, 1, 0, 17, 60, 5, 255, 4, 0, 12, 255, 4, 245, 1, 0, 8, 89, 1, 255, 4, 60, 4, 0, 13, 255, 9, 0, 11, 98, 1, 255, 4, 56, 1, 0, 9, 255, 8, 0, 13, 255, 9, 0, 11, 255, 4, 245, 1, 0, 10, 255, 8, 0, 13, 239, 5, 255, 4, 0, 10, 60, 1, 255, 4, 56, 1, 0, 10, 255, 4, 239, 4, 0, 13, 25, 5, 255, 4, 98, 1, 0, 9, 255, 5, 0, 11, 255, 4, 25, 4, 0, 18, 239, 1, 255, 4, 5, 1, 0, 7, 60, 1, 255, 4, 89, 1, 0, 10, 11, 1, 255, 4, 0, 22, 25, 1, 255, 4, 176, 1, 11, 1, 0, 5, 60, 1, 255, 5, 0, 11, 219, 1, 255, 4, 0, 23, 255, 5, 219, 1, 98, 1, 60, 3, 141, 1, 255, 5, 89, 1, 0, 11, 255, 4, 203, 1, 0, 23, 89, 1, 255, 14, 203, 1, 0, 11, 98, 1, 255, 4, 12, 1, 0, 24, 175, 1, 255, 12, 203, 1, 12, 1, 0, 11, 128, 1, 203, 1, 245, 1, 255, 2, 0, 26, 175, 1, 255, 10, 175, 1, 12, 1, 0, 13, 12, 1, 56, 1, 128, 1, 89, 1, 0, 27, 89, 1, 203, 1, 245, 1, 255, 4, 239, 1, 203, 1, 89, 1, 0, 47, 12, 1, 56, 1, 89, 1, 128, 1, 89, 2, 25, 1, 12, 1, 0, 32, 1, 2 };
+static const uint8_t image_data_FontT48_0x0025_mod[726] = { 1, 1, 0, 33, 35, 1, 60, 1, 98, 4, 60, 1, 11, 1, 0, 26, 141, 1, 11, 1, 0, 18, 35, 1, 141, 1, 235, 1, 255, 6, 219, 1, 141, 1, 11, 1, 0, 24, 255, 1, 219, 1, 60, 1, 0, 16, 60, 1, 235, 1, 255, 10, 219, 1, 11, 1, 0, 23, 255, 3, 141, 1, 35, 1, 0, 13, 5, 1, 255, 3, 203, 1, 175, 1, 128, 1, 89, 2, 128, 1, 175, 1, 239, 1, 255, 2, 219, 1, 0, 23, 128, 1, 239, 1, 255, 2, 235, 1, 98, 1, 5, 1, 0, 11, 176, 1, 255, 2, 89, 1, 12, 1, 0, 6, 25, 1, 128, 1, 255, 2, 60, 1, 0, 23, 25, 1, 175, 1, 255, 3, 176, 1, 60, 1, 0, 10, 255, 2, 89, 1, 0, 10, 128, 1, 255, 2, 0, 25, 89, 1, 203, 1, 255, 3, 141, 1, 11, 1, 0, 8, 255, 2, 0, 12, 255, 2, 0, 26, 12, 1, 128, 1, 245, 1, 255, 2, 219, 1, 60, 1, 5, 1, 0, 6, 255, 2, 0, 12, 255, 2, 0, 28, 56, 1, 175, 1, 255, 3, 176, 1, 35, 1, 0, 5, 255, 2, 60, 1, 0, 10, 35, 1, 255, 2, 0, 30, 89, 1, 239, 1, 255, 2, 235, 1, 98, 1, 11, 1, 0, 3, 128, 1, 255, 2, 60, 1, 5, 1, 0, 6, 5, 1, 35, 1, 235, 1, 255, 1, 203, 1, 0, 31, 25, 1, 128, 1, 245, 1, 255, 2, 219, 1, 60, 1, 0, 3, 245, 1, 255, 2, 176, 1, 141, 1, 98, 1, 60, 3, 98, 1, 176, 1, 235, 1, 255, 2, 12, 1, 0, 33, 56, 1, 203, 1, 255, 3, 141, 1, 35, 1, 0, 1, 56, 1, 239, 1, 255, 10, 245, 1, 89, 1, 0, 29, 5, 4, 0, 2, 12, 1, 89, 1, 239, 1, 255, 2, 235, 1, 98, 1, 5, 1, 25, 1, 175, 1, 239, 1, 255, 6, 245, 1, 175, 1, 56, 1, 0, 27, 11, 1, 60, 1, 141, 1, 176, 4, 141, 1, 60, 1, 5, 1, 0, 1, 25, 1, 175, 1, 245, 1, 255, 2, 176, 1, 60, 1, 0, 1, 25, 1, 89, 1, 128, 4, 89, 1, 56, 1, 0, 28, 98, 1, 219, 1, 255, 8, 176, 1, 60, 1, 0, 2, 56, 1, 203, 1, 255, 3, 141, 1, 11, 1, 0, 34, 141, 1, 255, 4, 245, 4, 255, 4, 60, 1, 0, 2, 12, 1, 128, 1, 239, 1, 255, 2, 219, 1, 98, 1, 5, 1, 0, 31, 35, 1, 255, 2, 245, 1, 175, 1, 89, 1, 56, 4, 89, 1, 175, 1, 245, 1, 255, 2, 0, 4, 25, 1, 175, 1, 255, 3, 176, 1, 35, 1, 0, 30, 235, 1, 255, 1, 239, 1, 56, 1, 0, 8, 56, 1, 245, 1, 255, 1, 141, 1, 0, 5, 89, 1, 203, 1, 255, 2, 235, 1, 141, 1, 11, 1, 0, 28, 255, 2, 25, 1, 0, 10, 56, 1, 255, 2, 0, 6, 12, 1, 128, 1, 245, 1, 255, 2, 219, 1, 60, 1, 5, 1, 0, 26, 255, 2, 0, 12, 255, 2, 0, 8, 56, 1, 175, 1, 255, 3, 176, 1, 35, 1, 0, 25, 255, 2, 0, 12, 255, 2, 0, 10, 89, 1, 239, 1, 255, 2, 235, 1, 98, 1, 11, 1, 0, 23, 255, 2, 141, 1, 0, 10, 60, 1, 255, 2, 0, 11, 25, 1, 128, 1, 245, 1, 255, 2, 219, 1, 60, 1, 0, 22, 89, 1, 255, 2, 141, 1, 35, 1, 5, 1, 0, 4, 5, 1, 11, 1, 98, 1, 255, 2, 128, 1, 0, 13, 56, 1, 203, 1, 255, 3, 0, 23, 203, 1, 255, 2, 235, 1, 176, 1, 141, 4, 176, 1, 219, 1, 255, 2, 239, 1, 0, 15, 12, 1, 89, 1, 239, 1, 255, 1, 0, 23, 12, 1, 175, 1, 255, 10, 203, 1, 25, 1, 0, 17, 25, 1, 175, 1, 0, 25, 89, 1, 203, 1, 239, 1, 245, 1, 255, 2, 245, 1, 239, 1, 203, 1, 128, 1, 12, 1, 0, 46, 12, 1, 25, 1, 56, 1, 89, 2, 56, 1, 25, 1, 12, 1, 0, 33, 1, 1 };
+static const uint8_t image_data_FontT48_0x0026_mod[492] = { 1, 3, 0, 17, 11, 1, 60, 1, 98, 1, 141, 4, 98, 1, 35, 1, 5, 1, 0, 8, 11, 1, 35, 3, 5, 1, 0, 31, 35, 1, 141, 1, 219, 1, 255, 7, 235, 1, 176, 1, 60, 1, 0, 5, 35, 1, 141, 1, 219, 1, 235, 3, 176, 1, 98, 1, 11, 1, 0, 28, 98, 1, 235, 1, 255, 12, 141, 1, 5, 1, 0, 1, 5, 1, 98, 1, 235, 1, 255, 7, 219, 1, 60, 1, 0, 26, 141, 1, 255, 15, 176, 1, 5, 1, 176, 1, 255, 11, 60, 1, 0, 24, 60, 1, 255, 7, 245, 1, 239, 2, 245, 1, 255, 6, 176, 1, 255, 13, 35, 1, 0, 23, 255, 5, 245, 1, 175, 1, 89, 1, 56, 1, 25, 2, 56, 1, 89, 1, 175, 1, 245, 1, 255, 7, 203, 1, 89, 3, 128, 1, 203, 1, 255, 4, 235, 1, 0, 22, 35, 1, 255, 4, 245, 1, 56, 1, 0, 8, 56, 1, 203, 1, 255, 5, 89, 1, 12, 1, 0, 4, 12, 1, 175, 1, 255, 4, 5, 1, 0, 21, 235, 1, 255, 4, 56, 1, 0, 10, 12, 1, 255, 4, 89, 1, 0, 8, 255, 4, 176, 1, 0, 21, 255, 4, 203, 1, 0, 12, 255, 4, 0, 9, 89, 1, 255, 4, 0, 21, 255, 4, 12, 1, 0, 12, 255, 4, 0, 10, 255, 4, 0, 21, 255, 4, 0, 13, 255, 4, 0, 10, 255, 4, 0, 21, 255, 4, 0, 13, 255, 4, 0, 10, 255, 4, 0, 21, 255, 4, 0, 13, 255, 4, 0, 10, 255, 4, 0, 21, 255, 4, 0, 13, 255, 4, 0, 9, 35, 1, 255, 4, 0, 21, 239, 1, 255, 3, 0, 13, 255, 4, 0, 9, 235, 1, 255, 3, 245, 1, 0, 21, 25, 1, 255, 3, 11, 1, 0, 12, 255, 4, 0, 8, 60, 1, 255, 4, 56, 1, 0, 22, 255, 3, 219, 1, 11, 1, 35, 11, 255, 4, 35, 4, 0, 4, 128, 1, 239, 1, 255, 3, 0, 23, 203, 1, 255, 3, 219, 1, 235, 11, 255, 4, 235, 4, 141, 1, 0, 4, 25, 1, 128, 1, 245, 1, 128, 1, 0, 23, 12, 1, 255, 24, 0, 6, 56, 1, 0, 24, 141, 1, 255, 24, 35, 1, 0, 29, 35, 1, 255, 7, 245, 9, 255, 4, 245, 5, 226, 1, 0, 29, 235, 1, 255, 4, 203, 1, 128, 1, 89, 1, 56, 9, 255, 4, 56, 6, 0, 29, 255, 4, 203, 1, 12, 1, 0, 11, 255, 4, 0, 35, 255, 4, 12, 1, 0, 12, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 245, 1, 255, 3, 5, 1, 0, 12, 239, 4, 0, 35, 56, 1, 255, 3, 167, 1, 0, 12, 25, 4, 0, 24, 1, 3 };
+static const uint8_t image_data_FontT48_0x0027_mod[52] = { 1, 1, 0, 37, 5, 3, 11, 2, 35, 3, 60, 1, 0, 47, 176, 3, 219, 2, 235, 3, 255, 1, 0, 47, 255, 9, 0, 47, 255, 9, 0, 47, 89, 1, 128, 2, 175, 2, 203, 3, 239, 1, 0, 52, 12, 3, 25, 1, 0, 10, 1, 1 };
+static const uint8_t image_data_FontT48_0x0028_mod[294] = { 1, 4, 0, 18, 5, 1, 11, 1, 35, 3, 60, 3, 35, 2, 11, 1, 5, 1, 0, 40, 11, 1, 60, 1, 98, 1, 141, 1, 176, 1, 219, 1, 235, 3, 255, 3, 235, 2, 219, 1, 176, 1, 141, 1, 60, 1, 11, 1, 5, 1, 0, 33, 11, 1, 60, 1, 141, 1, 219, 1, 255, 17, 219, 1, 176, 1, 98, 1, 11, 1, 0, 29, 35, 1, 141, 1, 219, 1, 255, 23, 219, 1, 141, 1, 35, 1, 0, 25, 11, 1, 141, 1, 235, 1, 255, 27, 235, 1, 141, 1, 35, 1, 0, 22, 98, 1, 219, 1, 255, 10, 245, 3, 239, 6, 245, 2, 255, 10, 235, 1, 98, 1, 5, 1, 0, 18, 11, 1, 141, 1, 255, 5, 245, 1, 239, 1, 203, 1, 175, 1, 128, 1, 89, 2, 56, 3, 25, 6, 56, 2, 89, 2, 128, 1, 175, 1, 203, 1, 239, 1, 245, 1, 255, 5, 176, 1, 35, 1, 0, 16, 11, 1, 219, 1, 255, 3, 239, 1, 175, 1, 89, 1, 56, 1, 25, 1, 12, 1, 0, 19, 12, 1, 25, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 3, 235, 1, 60, 1, 0, 14, 11, 1, 219, 1, 255, 1, 245, 1, 175, 1, 89, 1, 25, 1, 0, 28, 12, 1, 56, 1, 128, 1, 203, 1, 255, 3, 60, 1, 0, 12, 5, 1, 219, 1, 255, 1, 203, 1, 56, 1, 0, 34, 12, 1, 89, 1, 239, 1, 255, 2, 11, 1, 0, 11, 132, 1, 203, 1, 128, 1, 12, 1, 0, 37, 25, 1, 128, 1, 203, 1, 168, 1, 0, 11, 12, 2, 0, 41, 12, 2, 0, 10, 1, 2 };
+static const uint8_t image_data_FontT48_0x0029_mod[272] = { 1, 4, 0, 1, 98, 2, 11, 1, 0, 39, 35, 1, 98, 2, 0, 11, 89, 1, 255, 1, 219, 1, 60, 1, 0, 36, 11, 1, 98, 1, 235, 1, 255, 1, 128, 1, 0, 12, 128, 1, 255, 2, 141, 1, 35, 1, 5, 1, 0, 31, 11, 1, 98, 1, 219, 1, 255, 2, 175, 1, 0, 14, 128, 1, 255, 2, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 24, 5, 1, 11, 1, 60, 1, 141, 1, 219, 1, 255, 3, 203, 1, 0, 16, 128, 1, 245, 1, 255, 3, 235, 1, 176, 1, 141, 1, 98, 1, 60, 1, 35, 1, 11, 1, 5, 2, 0, 11, 5, 2, 11, 1, 35, 1, 60, 1, 98, 1, 176, 1, 219, 1, 255, 5, 175, 1, 12, 1, 0, 17, 56, 1, 203, 1, 255, 7, 235, 1, 219, 1, 176, 2, 141, 4, 98, 4, 141, 3, 176, 2, 219, 1, 235, 1, 255, 7, 239, 1, 89, 1, 0, 20, 12, 1, 128, 1, 245, 1, 255, 29, 245, 1, 175, 1, 25, 1, 0, 23, 56, 1, 175, 1, 239, 1, 255, 25, 239, 1, 175, 1, 56, 1, 0, 27, 25, 1, 128, 1, 203, 1, 245, 1, 255, 19, 245, 1, 203, 1, 128, 1, 25, 1, 0, 31, 12, 1, 56, 1, 128, 1, 175, 1, 239, 1, 245, 1, 255, 12, 239, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 37, 25, 1, 56, 1, 89, 1, 128, 2, 175, 6, 128, 2, 89, 1, 25, 1, 12, 1, 0, 24, 1, 3 };
+static const uint8_t image_data_FontT48_0x002a_mod[224] = { 1, 1, 0, 39, 141, 1, 35, 1, 0, 49, 60, 1, 0, 3, 35, 1, 255, 1, 235, 1, 141, 1, 0, 47, 98, 1, 255, 1, 141, 1, 0, 2, 235, 1, 255, 3, 0, 46, 35, 1, 255, 3, 35, 1, 0, 1, 255, 4, 0, 46, 183, 1, 255, 3, 235, 1, 0, 1, 255, 3, 89, 1, 0, 46, 12, 1, 128, 1, 245, 1, 255, 2, 35, 1, 255, 2, 175, 1, 0, 1, 11, 1, 60, 1, 98, 2, 0, 44, 56, 1, 175, 1, 245, 1, 235, 1, 255, 2, 60, 1, 141, 1, 219, 1, 255, 3, 0, 46, 61, 1, 255, 2, 245, 1, 255, 6, 0, 44, 5, 1, 60, 1, 176, 1, 255, 2, 206, 1, 128, 1, 203, 1, 245, 1, 255, 3, 0, 43, 60, 1, 176, 1, 255, 2, 203, 1, 255, 2, 35, 1, 12, 1, 56, 1, 89, 1, 175, 2, 0, 42, 98, 1, 255, 4, 12, 1, 255, 2, 235, 1, 0, 47, 128, 1, 255, 3, 128, 1, 0, 1, 255, 3, 141, 1, 0, 47, 175, 1, 255, 1, 203, 1, 0, 2, 255, 4, 0, 48, 175, 1, 12, 1, 0, 2, 239, 1, 255, 2, 239, 1, 0, 52, 25, 1, 203, 1, 89, 1, 25, 1, 0, 14, 1, 2 };
+static const uint8_t image_data_FontT48_0x002b_mod[102] = { 1, 2, 0, 24, 35, 3, 0, 53, 235, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 45, 11, 8, 255, 3, 11, 8, 0, 37, 219, 8, 255, 3, 219, 8, 0, 37, 255, 19, 0, 37, 255, 19, 0, 37, 89, 8, 255, 3, 89, 8, 0, 45, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 128, 3, 0, 29, 1, 2 };
+static const uint8_t image_data_FontT48_0x002c_mod[140] = { 1, 4, 0, 2, 5, 1, 141, 1, 11, 1, 0, 53, 160, 1, 255, 1, 219, 1, 11, 1, 0, 7, 35, 1, 60, 2, 11, 1, 0, 41, 25, 1, 245, 1, 255, 1, 219, 1, 35, 1, 0, 5, 35, 1, 235, 1, 255, 2, 219, 1, 11, 1, 0, 41, 56, 1, 255, 2, 235, 1, 98, 1, 11, 1, 5, 2, 35, 1, 235, 1, 255, 4, 219, 1, 0, 42, 89, 1, 245, 1, 255, 2, 219, 1, 176, 2, 235, 1, 255, 6, 0, 43, 56, 1, 239, 1, 255, 11, 0, 44, 25, 1, 175, 1, 245, 1, 255, 8, 128, 1, 0, 46, 56, 1, 128, 1, 203, 1, 239, 1, 245, 3, 239, 1, 128, 1, 0, 49, 12, 1, 25, 1, 56, 3, 25, 1, 0, 40, 1, 5 };
+static const uint8_t image_data_FontT48_0x002d_mod[54] = { 1, 3, 0, 23, 60, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 203, 4, 0, 52, 12, 4, 0, 29, 1, 3 };
+static const uint8_t image_data_FontT48_0x002e_mod[74] = { 1, 4, 0, 13, 5, 1, 11, 1, 5, 1, 0, 52, 60, 1, 176, 1, 219, 1, 176, 1, 60, 1, 0, 50, 60, 1, 255, 5, 60, 1, 0, 49, 255, 7, 0, 49, 255, 7, 0, 49, 255, 7, 0, 49, 89, 1, 255, 5, 89, 1, 0, 50, 89, 1, 203, 1, 239, 1, 203, 1, 128, 1, 0, 52, 12, 1, 25, 1, 12, 1, 0, 40, 1, 5 };
+static const uint8_t image_data_FontT48_0x002f_mod[274] = { 1, 4, 0, 11, 98, 1, 11, 1, 0, 54, 255, 1, 219, 1, 141, 1, 60, 1, 11, 1, 0, 51, 255, 4, 219, 1, 141, 1, 35, 1, 5, 1, 0, 48, 255, 6, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 45, 89, 1, 175, 1, 245, 1, 255, 6, 235, 1, 176, 1, 98, 1, 11, 1, 0, 45, 56, 1, 128, 1, 203, 1, 245, 1, 255, 6, 219, 1, 141, 1, 60, 1, 11, 1, 0, 44, 12, 1, 56, 1, 128, 1, 239, 1, 255, 7, 219, 1, 141, 1, 35, 1, 5, 1, 0, 44, 25, 1, 89, 1, 175, 1, 239, 1, 255, 6, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 44, 25, 1, 89, 1, 203, 1, 245, 1, 255, 6, 235, 1, 176, 1, 98, 1, 11, 1, 0, 44, 12, 1, 56, 1, 128, 1, 203, 1, 255, 7, 219, 1, 141, 1, 60, 1, 11, 1, 0, 44, 12, 1, 89, 1, 175, 1, 239, 1, 255, 7, 219, 1, 141, 1, 35, 1, 5, 1, 0, 44, 25, 1, 89, 1, 175, 1, 245, 1, 255, 6, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 44, 56, 1, 128, 1, 203, 1, 245, 1, 255, 6, 235, 1, 176, 1, 98, 1, 0, 45, 12, 1, 56, 1, 128, 1, 239, 1, 255, 7, 0, 48, 25, 1, 89, 1, 175, 1, 239, 1, 255, 4, 0, 51, 25, 1, 89, 1, 203, 1, 245, 1, 255, 1, 0, 53, 12, 1, 56, 1, 128, 1, 0, 11, 1, 4 };
+static const uint8_t image_data_FontT48_0x0030_mod[426] = { 1, 1, 0, 20, 5, 1, 11, 1, 35, 1, 60, 2, 98, 7, 60, 1, 35, 1, 11, 1, 5, 1, 0, 37, 35, 1, 98, 1, 141, 1, 176, 1, 219, 1, 235, 1, 255, 10, 235, 1, 219, 1, 176, 1, 98, 1, 35, 1, 0, 33, 35, 1, 141, 1, 235, 1, 255, 19, 235, 1, 141, 1, 35, 1, 0, 30, 98, 1, 235, 1, 255, 23, 235, 1, 98, 1, 5, 1, 0, 27, 141, 1, 255, 11, 245, 6, 255, 10, 176, 1, 5, 1, 0, 25, 60, 1, 255, 6, 245, 1, 239, 1, 175, 1, 128, 1, 89, 2, 56, 6, 89, 2, 128, 1, 175, 1, 203, 1, 245, 1, 255, 5, 176, 1, 0, 25, 255, 5, 245, 1, 175, 1, 56, 1, 25, 1, 0, 14, 12, 1, 56, 1, 175, 1, 245, 1, 255, 4, 141, 1, 0, 23, 35, 1, 255, 4, 203, 1, 56, 1, 0, 20, 56, 1, 239, 1, 255, 4, 0, 23, 235, 1, 255, 3, 245, 1, 12, 1, 0, 22, 25, 1, 255, 4, 98, 1, 0, 22, 255, 4, 56, 1, 0, 24, 89, 1, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 60, 1, 0, 24, 5, 1, 255, 4, 0, 22, 203, 1, 255, 4, 5, 1, 0, 23, 176, 1, 255, 4, 0, 22, 12, 1, 255, 4, 176, 1, 11, 1, 0, 21, 98, 1, 255, 4, 128, 1, 0, 23, 203, 1, 255, 4, 219, 1, 98, 1, 11, 1, 5, 1, 0, 15, 5, 1, 35, 1, 141, 1, 255, 5, 0, 24, 12, 1, 245, 1, 255, 5, 219, 1, 176, 1, 141, 1, 98, 1, 60, 1, 35, 4, 11, 1, 35, 4, 60, 2, 98, 1, 176, 1, 235, 1, 255, 5, 128, 1, 0, 25, 56, 1, 239, 1, 255, 9, 235, 4, 219, 1, 235, 4, 255, 9, 203, 1, 0, 27, 25, 1, 175, 1, 255, 25, 175, 1, 12, 1, 0, 29, 89, 1, 203, 1, 245, 1, 255, 20, 203, 1, 89, 1, 0, 32, 12, 1, 56, 1, 128, 1, 203, 1, 239, 1, 245, 1, 255, 11, 245, 1, 239, 1, 203, 1, 175, 1, 89, 1, 12, 1, 0, 36, 12, 1, 25, 1, 56, 1, 89, 1, 128, 3, 175, 3, 128, 3, 89, 1, 56, 1, 25, 1, 12, 1, 0, 19, 1, 1 };
+static const uint8_t image_data_FontT48_0x0031_mod[96] = { 1, 4, 0, 32, 60, 4, 0, 52, 89, 1, 255, 3, 98, 1, 0, 52, 203, 1, 255, 3, 11, 1, 0, 51, 12, 1, 255, 3, 219, 1, 0, 52, 128, 1, 255, 3, 141, 1, 0, 52, 239, 1, 255, 3, 98, 1, 0, 51, 25, 1, 255, 4, 60, 1, 0, 26, 60, 25, 197, 1, 255, 4, 35, 1, 0, 25, 255, 30, 235, 1, 60, 1, 0, 24, 255, 32, 60, 1, 0, 23, 255, 33, 98, 1, 0, 22, 255, 34, 0, 22, 89, 34, 0, 11, 1, 8 };
+static const uint8_t image_data_FontT48_0x0032_mod[386] = { 1, 1, 0, 11, 60, 1, 11, 1, 0, 26, 35, 1, 11, 1, 0, 26, 255, 1, 219, 1, 60, 1, 0, 24, 11, 1, 235, 1, 219, 1, 98, 1, 0, 25, 255, 3, 141, 1, 11, 1, 0, 21, 11, 1, 219, 1, 255, 3, 141, 1, 0, 24, 255, 4, 219, 1, 60, 1, 0, 20, 168, 1, 255, 5, 60, 1, 0, 23, 255, 6, 141, 1, 11, 1, 0, 18, 12, 1, 128, 1, 255, 5, 0, 23, 255, 7, 219, 1, 60, 1, 0, 19, 128, 1, 255, 4, 35, 1, 0, 22, 255, 9, 141, 1, 11, 1, 0, 18, 245, 1, 255, 3, 235, 1, 0, 22, 255, 10, 219, 1, 60, 1, 0, 17, 56, 1, 255, 4, 0, 22, 255, 4, 128, 1, 245, 1, 255, 6, 141, 1, 11, 1, 0, 16, 255, 4, 0, 22, 255, 4, 0, 1, 56, 1, 203, 1, 255, 6, 219, 1, 60, 1, 0, 15, 255, 4, 0, 22, 255, 4, 0, 2, 12, 1, 128, 1, 245, 1, 255, 6, 141, 1, 11, 1, 0, 13, 255, 4, 0, 22, 255, 4, 0, 4, 56, 1, 175, 1, 255, 6, 219, 1, 60, 1, 0, 12, 255, 4, 0, 22, 255, 4, 0, 6, 89, 1, 239, 1, 255, 6, 141, 1, 35, 1, 0, 9, 141, 1, 255, 4, 0, 22, 255, 4, 0, 7, 25, 1, 175, 1, 255, 6, 235, 1, 141, 1, 35, 1, 5, 1, 0, 5, 60, 1, 255, 4, 89, 1, 0, 22, 255, 4, 0, 9, 89, 1, 239, 1, 255, 6, 235, 1, 176, 1, 141, 1, 98, 1, 60, 1, 98, 1, 141, 1, 255, 5, 0, 23, 255, 4, 0, 10, 25, 1, 175, 1, 245, 1, 255, 15, 175, 1, 0, 23, 255, 4, 0, 12, 56, 1, 203, 1, 255, 13, 245, 1, 0, 24, 255, 4, 0, 13, 12, 1, 89, 1, 203, 1, 255, 10, 239, 1, 56, 1, 0, 24, 255, 4, 0, 15, 12, 1, 89, 1, 203, 1, 245, 1, 255, 5, 245, 1, 175, 1, 25, 1, 0, 25, 255, 4, 0, 17, 12, 1, 56, 1, 89, 1, 128, 3, 89, 1, 56, 1, 0, 27, 255, 4, 0, 52, 128, 4, 0, 41, 1, 2 };
+static const uint8_t image_data_FontT48_0x0033_mod[378] = { 1, 3, 0, 13, 190, 1, 235, 1, 141, 1, 11, 1, 0, 24, 60, 1, 35, 1, 0, 25, 60, 1, 255, 3, 219, 1, 91, 1, 0, 21, 5, 1, 98, 1, 255, 1, 235, 1, 11, 1, 0, 24, 255, 4, 245, 1, 56, 1, 0, 21, 160, 1, 255, 3, 219, 1, 0, 23, 5, 1, 255, 4, 56, 1, 0, 22, 25, 1, 255, 4, 11, 1, 0, 22, 176, 1, 255, 3, 203, 1, 0, 24, 175, 1, 255, 3, 219, 1, 0, 22, 255, 4, 12, 1, 0, 25, 255, 4, 0, 22, 255, 4, 0, 12, 60, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 11, 5, 1, 255, 4, 5, 1, 0, 9, 255, 4, 0, 22, 255, 4, 60, 1, 0, 10, 176, 1, 255, 4, 176, 1, 0, 8, 141, 1, 255, 4, 0, 22, 203, 1, 255, 4, 0, 9, 35, 1, 255, 6, 60, 1, 0, 6, 60, 1, 255, 4, 128, 1, 0, 22, 12, 1, 255, 4, 141, 1, 5, 1, 0, 6, 35, 1, 235, 1, 255, 3, 128, 1, 255, 3, 141, 1, 60, 1, 35, 2, 60, 1, 141, 1, 255, 5, 0, 24, 255, 5, 176, 1, 60, 1, 35, 1, 11, 2, 35, 1, 98, 1, 235, 1, 255, 4, 0, 1, 255, 5, 235, 2, 255, 6, 203, 1, 0, 24, 89, 1, 255, 6, 235, 1, 219, 2, 235, 1, 255, 5, 175, 1, 0, 1, 128, 1, 255, 12, 12, 1, 0, 25, 203, 1, 255, 13, 239, 1, 0, 3, 128, 1, 255, 10, 89, 1, 0, 26, 12, 1, 203, 1, 255, 11, 239, 1, 25, 1, 0, 4, 89, 1, 239, 1, 255, 6, 239, 1, 89, 1, 0, 28, 12, 1, 175, 1, 245, 1, 255, 7, 245, 1, 175, 1, 25, 1, 0, 6, 25, 1, 128, 1, 175, 1, 203, 2, 175, 1, 89, 1, 25, 1, 0, 31, 56, 1, 128, 1, 175, 1, 203, 1, 239, 1, 203, 2, 128, 1, 56, 1, 0, 11, 12, 2, 0, 18, 1, 3 };
+static const uint8_t image_data_FontT48_0x0034_mod[254] = { 0, 20, 60, 3, 0, 53, 255, 3, 141, 1, 5, 1, 0, 51, 255, 4, 176, 1, 11, 1, 0, 50, 255, 5, 219, 1, 35, 1, 0, 49, 255, 6, 235, 1, 98, 1, 0, 48, 255, 8, 141, 1, 5, 1, 0, 46, 255, 4, 175, 1, 255, 4, 176, 1, 11, 1, 0, 45, 255, 4, 0, 1, 128, 1, 245, 1, 255, 3, 219, 1, 35, 1, 0, 44, 255, 4, 0, 2, 56, 1, 239, 1, 255, 3, 235, 1, 60, 1, 0, 43, 255, 4, 0, 3, 25, 1, 203, 1, 255, 4, 98, 1, 0, 42, 255, 4, 0, 4, 12, 1, 175, 1, 255, 4, 141, 1, 5, 1, 0, 40, 255, 4, 0, 6, 128, 1, 255, 4, 176, 1, 11, 1, 0, 39, 255, 4, 0, 7, 89, 1, 245, 1, 255, 3, 219, 1, 60, 1, 0, 38, 255, 4, 0, 8, 56, 1, 239, 1, 255, 4, 98, 1, 0, 37, 255, 4, 0, 9, 25, 1, 203, 1, 255, 4, 141, 1, 5, 1, 0, 26, 11, 9, 255, 4, 11, 10, 23, 1, 188, 1, 255, 4, 176, 1, 11, 1, 0, 25, 219, 9, 255, 4, 219, 12, 255, 5, 219, 1, 35, 1, 0, 24, 255, 31, 235, 1, 60, 1, 0, 23, 255, 33, 98, 1, 0, 22, 255, 34, 0, 22, 128, 9, 255, 4, 128, 21, 0, 31, 255, 4, 0, 52, 255, 4, 0, 52, 239, 4, 0, 52, 25, 4, 0, 32 };
+static const uint8_t image_data_FontT48_0x0035_mod[334] = { 1, 3, 0, 13, 98, 1, 176, 1, 60, 1, 5, 1, 0, 11, 35, 17, 0, 23, 11, 1, 255, 3, 176, 1, 60, 1, 0, 9, 60, 1, 235, 17, 0, 23, 219, 1, 255, 4, 89, 1, 0, 9, 203, 1, 255, 17, 0, 23, 255, 4, 175, 1, 0, 10, 12, 1, 239, 1, 255, 16, 0, 22, 141, 1, 255, 4, 0, 12, 25, 1, 255, 16, 0, 22, 255, 4, 128, 1, 0, 13, 128, 1, 255, 3, 89, 8, 255, 4, 0, 22, 255, 4, 0, 15, 255, 3, 60, 1, 0, 7, 255, 4, 0, 22, 255, 4, 0, 15, 255, 4, 0, 7, 255, 4, 0, 22, 255, 4, 0, 15, 255, 4, 0, 7, 255, 4, 0, 22, 255, 4, 0, 15, 255, 4, 0, 7, 255, 4, 0, 22, 255, 4, 35, 1, 0, 13, 11, 1, 255, 4, 0, 7, 255, 4, 0, 22, 245, 1, 255, 3, 235, 1, 0, 13, 219, 1, 255, 4, 0, 7, 255, 4, 0, 22, 56, 1, 255, 4, 98, 1, 0, 11, 98, 1, 255, 5, 0, 7, 255, 4, 0, 23, 255, 5, 141, 1, 35, 1, 5, 1, 0, 5, 5, 1, 35, 1, 141, 1, 255, 5, 89, 1, 0, 7, 255, 4, 0, 23, 128, 1, 255, 5, 235, 1, 176, 1, 141, 1, 98, 3, 141, 1, 176, 1, 235, 1, 255, 6, 0, 8, 255, 4, 0, 24, 239, 1, 255, 18, 128, 1, 0, 8, 255, 4, 0, 24, 25, 1, 203, 1, 255, 16, 175, 1, 0, 9, 255, 4, 0, 25, 12, 1, 175, 1, 245, 1, 255, 12, 245, 1, 128, 1, 0, 10, 203, 4, 0, 27, 56, 1, 128, 1, 203, 1, 239, 1, 245, 1, 255, 5, 245, 1, 239, 1, 175, 1, 56, 1, 0, 11, 12, 4, 0, 29, 12, 1, 25, 1, 56, 1, 89, 2, 128, 1, 89, 2, 56, 1, 25, 1, 0, 28, 1, 2 };
+static const uint8_t image_data_FontT48_0x0036_mod[446] = { 1, 1, 0, 21, 5, 2, 11, 4, 5, 1, 0, 45, 5, 1, 35, 1, 98, 1, 141, 1, 176, 2, 219, 4, 176, 1, 141, 1, 98, 1, 35, 1, 5, 1, 0, 39, 5, 1, 60, 1, 176, 1, 235, 1, 255, 11, 235, 1, 176, 1, 98, 1, 11, 1, 0, 36, 35, 1, 176, 1, 255, 17, 219, 1, 98, 1, 11, 1, 0, 33, 35, 1, 235, 1, 255, 20, 219, 1, 60, 1, 0, 31, 5, 1, 235, 1, 255, 5, 245, 1, 239, 1, 203, 1, 239, 2, 255, 13, 141, 1, 11, 1, 0, 29, 176, 1, 255, 4, 203, 1, 89, 1, 56, 1, 25, 1, 12, 1, 25, 2, 89, 1, 175, 1, 255, 4, 210, 1, 245, 1, 255, 6, 219, 1, 35, 1, 0, 28, 255, 4, 175, 1, 12, 1, 0, 8, 128, 1, 255, 3, 190, 1, 56, 1, 175, 1, 255, 6, 235, 1, 60, 1, 0, 26, 141, 1, 255, 3, 245, 1, 0, 11, 239, 1, 255, 3, 11, 1, 0, 1, 89, 1, 239, 1, 255, 6, 60, 1, 0, 25, 255, 4, 56, 1, 0, 11, 25, 1, 255, 3, 219, 1, 0, 2, 25, 1, 203, 1, 255, 6, 35, 1, 0, 24, 255, 4, 0, 13, 255, 4, 0, 3, 12, 1, 175, 1, 255, 5, 235, 1, 5, 1, 0, 23, 255, 4, 0, 13, 255, 4, 0, 5, 128, 1, 255, 5, 176, 1, 0, 23, 255, 4, 0, 13, 255, 4, 0, 6, 128, 1, 255, 5, 5, 1, 0, 22, 255, 4, 0, 12, 5, 1, 255, 4, 0, 7, 128, 1, 255, 4, 176, 1, 0, 22, 255, 4, 141, 1, 0, 11, 176, 1, 255, 4, 0, 8, 175, 1, 255, 3, 239, 1, 0, 22, 128, 1, 255, 4, 60, 1, 0, 9, 60, 1, 255, 4, 175, 1, 0, 9, 239, 1, 255, 1, 203, 1, 25, 1, 0, 23, 255, 5, 98, 1, 11, 1, 5, 1, 0, 3, 5, 1, 35, 1, 141, 1, 255, 5, 0, 10, 86, 1, 128, 1, 12, 1, 0, 24, 128, 1, 255, 5, 219, 1, 176, 1, 141, 1, 98, 1, 141, 1, 176, 1, 235, 1, 255, 5, 203, 1, 0, 10, 12, 1, 0, 27, 203, 1, 255, 15, 245, 1, 12, 1, 0, 38, 12, 1, 203, 1, 255, 13, 239, 1, 56, 1, 0, 40, 12, 1, 128, 1, 239, 1, 255, 9, 245, 1, 175, 1, 25, 1, 0, 43, 25, 1, 128, 1, 203, 1, 239, 2, 245, 2, 239, 1, 203, 1, 128, 1, 56, 1, 0, 29, 1, 2 };
+static const uint8_t image_data_FontT48_0x0037_mod[336] = { 1, 1, 0, 41, 11, 4, 0, 52, 219, 4, 0, 52, 255, 4, 0, 22, 11, 1, 0, 29, 255, 4, 0, 22, 219, 1, 141, 1, 60, 1, 11, 1, 0, 26, 255, 4, 0, 22, 255, 3, 219, 1, 141, 1, 35, 1, 5, 1, 0, 23, 255, 4, 0, 22, 255, 5, 235, 1, 176, 1, 98, 1, 11, 1, 0, 21, 255, 4, 0, 22, 255, 8, 219, 1, 141, 1, 35, 1, 0, 19, 255, 4, 0, 22, 245, 1, 255, 9, 235, 1, 141, 1, 60, 1, 5, 1, 0, 16, 255, 4, 0, 22, 56, 1, 128, 1, 203, 1, 245, 1, 255, 9, 176, 1, 98, 1, 11, 1, 0, 14, 255, 4, 0, 24, 12, 1, 56, 1, 128, 1, 203, 1, 255, 9, 219, 1, 98, 1, 11, 1, 0, 12, 255, 4, 0, 27, 12, 1, 89, 1, 175, 1, 239, 1, 255, 8, 219, 1, 141, 1, 35, 1, 0, 10, 255, 4, 0, 30, 25, 1, 128, 1, 203, 1, 255, 8, 235, 1, 141, 1, 35, 1, 0, 8, 255, 4, 0, 32, 12, 1, 89, 1, 175, 1, 245, 1, 255, 7, 235, 1, 141, 1, 35, 1, 0, 6, 255, 4, 0, 35, 56, 1, 128, 1, 239, 1, 255, 7, 235, 1, 141, 1, 60, 1, 5, 1, 0, 3, 255, 4, 0, 37, 25, 1, 128, 1, 203, 1, 255, 8, 176, 1, 60, 1, 0, 2, 255, 4, 0, 39, 12, 1, 89, 1, 203, 1, 255, 8, 141, 1, 35, 1, 255, 4, 0, 41, 12, 1, 89, 1, 175, 1, 245, 1, 255, 6, 235, 1, 255, 4, 0, 44, 56, 1, 175, 1, 245, 1, 255, 9, 0, 46, 56, 1, 175, 1, 245, 1, 255, 7, 0, 48, 56, 1, 175, 1, 245, 1, 255, 5, 0, 50, 56, 1, 175, 1, 245, 1, 255, 3, 0, 52, 56, 1, 203, 1, 245, 2, 0, 53, 12, 1, 56, 2, 0, 11 };
+static const uint8_t image_data_FontT48_0x0038_mod[486] = { 1, 3, 0, 14, 60, 1, 176, 1, 255, 8, 219, 1, 98, 1, 5, 1, 0, 7, 35, 1, 98, 1, 141, 2, 98, 1, 60, 1, 11, 1, 0, 28, 98, 1, 255, 12, 176, 1, 11, 1, 0, 4, 11, 1, 141, 1, 235, 1, 255, 5, 219, 1, 60, 1, 0, 26, 35, 1, 255, 14, 219, 1, 5, 1, 0, 2, 35, 1, 219, 1, 255, 9, 98, 1, 0, 25, 235, 1, 255, 5, 245, 1, 203, 3, 239, 1, 255, 5, 176, 1, 0, 1, 11, 1, 235, 1, 255, 11, 35, 1, 0, 24, 255, 5, 175, 1, 56, 1, 12, 3, 25, 1, 89, 1, 203, 1, 255, 4, 60, 1, 219, 1, 255, 5, 239, 2, 245, 1, 255, 4, 235, 1, 0, 23, 141, 1, 255, 4, 128, 1, 0, 7, 12, 1, 175, 1, 255, 8, 239, 1, 89, 1, 25, 2, 56, 1, 175, 1, 255, 4, 11, 1, 0, 22, 255, 4, 239, 1, 0, 10, 203, 1, 255, 6, 245, 1, 25, 1, 0, 5, 239, 1, 255, 3, 219, 1, 0, 22, 255, 4, 25, 1, 0, 10, 12, 1, 255, 6, 56, 1, 0, 6, 25, 1, 255, 4, 0, 22, 255, 4, 0, 12, 89, 1, 255, 4, 128, 1, 0, 8, 255, 4, 0, 22, 255, 4, 0, 12, 98, 1, 255, 4, 0, 9, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 89, 1, 0, 9, 255, 4, 0, 22, 255, 4, 11, 1, 0, 10, 141, 1, 255, 4, 141, 1, 0, 8, 11, 1, 255, 4, 0, 22, 255, 4, 219, 1, 0, 9, 35, 1, 255, 6, 141, 1, 11, 1, 0, 6, 219, 1, 255, 4, 0, 22, 128, 1, 255, 4, 60, 1, 0, 7, 35, 1, 235, 1, 255, 3, 245, 1, 255, 3, 219, 1, 98, 1, 35, 1, 5, 2, 35, 1, 141, 1, 255, 4, 89, 1, 0, 23, 255, 5, 98, 1, 11, 1, 0, 3, 5, 1, 60, 1, 235, 1, 255, 4, 56, 1, 255, 5, 235, 1, 176, 2, 235, 1, 255, 5, 0, 24, 203, 1, 255, 5, 219, 1, 141, 1, 98, 1, 141, 1, 176, 1, 255, 5, 89, 1, 0, 1, 128, 1, 255, 12, 128, 1, 0, 24, 12, 1, 245, 1, 255, 13, 175, 1, 0, 3, 128, 1, 245, 1, 255, 9, 203, 1, 0, 26, 56, 1, 245, 1, 255, 11, 175, 1, 0, 5, 56, 1, 203, 1, 255, 6, 245, 1, 128, 1, 12, 1, 0, 27, 56, 1, 203, 1, 255, 8, 245, 1, 128, 1, 0, 7, 12, 1, 89, 1, 175, 1, 203, 2, 175, 1, 128, 1, 56, 1, 0, 30, 12, 1, 89, 1, 175, 1, 239, 2, 245, 1, 239, 1, 203, 1, 175, 1, 56, 1, 0, 11, 12, 2, 0, 18, 1, 2 };
+static const uint8_t image_data_FontT48_0x0039_mod[446] = { 1, 1, 0, 30, 5, 1, 11, 1, 35, 1, 60, 2, 35, 2, 11, 1, 0, 46, 5, 1, 60, 1, 176, 1, 219, 1, 235, 1, 255, 2, 235, 2, 219, 1, 141, 1, 35, 1, 0, 43, 35, 1, 176, 1, 255, 10, 235, 1, 141, 1, 11, 1, 0, 40, 60, 1, 235, 1, 255, 13, 219, 1, 11, 1, 0, 38, 11, 1, 255, 16, 219, 1, 5, 1, 0, 25, 11, 1, 0, 11, 219, 1, 255, 5, 239, 1, 175, 1, 128, 1, 89, 1, 128, 1, 175, 1, 203, 1, 255, 5, 176, 1, 0, 24, 11, 1, 219, 1, 35, 1, 0, 9, 5, 1, 255, 4, 245, 1, 128, 1, 25, 1, 0, 5, 12, 1, 89, 1, 239, 1, 255, 4, 0, 23, 35, 1, 219, 1, 255, 1, 235, 1, 5, 1, 0, 8, 176, 1, 255, 4, 56, 1, 0, 9, 25, 1, 255, 4, 141, 1, 0, 22, 235, 1, 255, 3, 176, 1, 0, 8, 255, 4, 175, 1, 0, 11, 128, 1, 255, 4, 0, 22, 175, 1, 255, 4, 141, 1, 0, 7, 255, 4, 0, 13, 255, 4, 0, 23, 255, 5, 141, 1, 5, 1, 0, 5, 255, 4, 0, 13, 255, 4, 0, 23, 175, 1, 255, 5, 176, 1, 5, 1, 0, 4, 255, 4, 0, 13, 255, 4, 0, 24, 239, 1, 255, 5, 176, 1, 11, 1, 0, 3, 255, 4, 0, 13, 255, 4, 0, 24, 25, 1, 245, 1, 255, 5, 219, 1, 35, 1, 0, 2, 203, 1, 255, 3, 35, 1, 0, 11, 60, 1, 255, 4, 0, 25, 56, 1, 239, 1, 255, 5, 235, 1, 98, 1, 11, 1, 12, 1, 255, 3, 235, 1, 0, 10, 5, 1, 255, 4, 89, 1, 0, 26, 25, 1, 239, 1, 255, 6, 219, 1, 98, 1, 216, 1, 255, 3, 141, 1, 11, 1, 0, 7, 35, 1, 176, 1, 255, 4, 0, 28, 25, 1, 175, 1, 255, 7, 235, 1, 255, 4, 219, 1, 98, 1, 60, 1, 35, 2, 60, 2, 141, 1, 235, 1, 255, 4, 175, 1, 0, 30, 128, 1, 245, 1, 255, 13, 235, 2, 255, 7, 239, 1, 0, 32, 56, 1, 175, 1, 255, 20, 203, 1, 25, 1, 0, 34, 89, 1, 203, 1, 245, 1, 255, 15, 245, 1, 128, 1, 12, 1, 0, 36, 12, 1, 56, 1, 175, 1, 239, 1, 245, 1, 255, 9, 245, 1, 203, 1, 128, 1, 56, 1, 0, 41, 25, 1, 56, 1, 128, 1, 175, 6, 128, 1, 89, 1, 56, 1, 12, 1, 0, 18, 1, 2 };
+static const uint8_t image_data_FontT48_0x003a_mod[142] = { 1, 4, 0, 13, 5, 1, 11, 1, 5, 1, 0, 15, 5, 1, 11, 1, 5, 1, 0, 34, 60, 1, 176, 1, 219, 1, 176, 1, 60, 1, 0, 13, 60, 1, 176, 1, 219, 1, 176, 1, 60, 1, 0, 32, 60, 1, 255, 5, 60, 1, 0, 11, 60, 1, 255, 5, 60, 1, 0, 31, 255, 7, 0, 11, 255, 7, 0, 31, 255, 7, 0, 11, 255, 7, 0, 31, 255, 7, 0, 11, 255, 7, 0, 31, 89, 1, 255, 5, 89, 1, 0, 11, 89, 1, 255, 5, 89, 1, 0, 32, 89, 1, 203, 1, 239, 1, 203, 1, 128, 1, 0, 13, 89, 1, 203, 1, 239, 1, 203, 1, 128, 1, 0, 34, 12, 1, 25, 1, 12, 1, 0, 15, 12, 1, 25, 1, 12, 1, 0, 22, 1, 5 };
+static const uint8_t image_data_FontT48_0x003b_mod[200] = { 1, 4, 0, 2, 5, 1, 141, 1, 11, 1, 0, 26, 11, 3, 0, 24, 160, 1, 255, 1, 219, 1, 11, 1, 0, 7, 35, 1, 60, 2, 11, 1, 0, 13, 98, 1, 219, 3, 98, 1, 0, 23, 25, 1, 245, 1, 255, 1, 219, 1, 35, 1, 0, 5, 35, 1, 235, 1, 255, 2, 219, 1, 11, 1, 0, 11, 60, 1, 255, 5, 60, 1, 0, 23, 56, 1, 255, 2, 235, 1, 98, 1, 11, 1, 5, 2, 35, 1, 235, 1, 255, 4, 219, 1, 0, 11, 255, 7, 0, 24, 89, 1, 245, 1, 255, 2, 219, 1, 176, 2, 235, 1, 255, 6, 0, 11, 255, 7, 0, 25, 56, 1, 239, 1, 255, 11, 0, 11, 255, 7, 0, 26, 25, 1, 175, 1, 245, 1, 255, 8, 128, 1, 0, 11, 89, 1, 255, 5, 89, 1, 0, 28, 56, 1, 128, 1, 203, 1, 239, 1, 245, 3, 239, 1, 128, 1, 0, 13, 89, 1, 203, 1, 239, 1, 203, 1, 89, 1, 0, 31, 12, 1, 25, 1, 56, 3, 25, 1, 0, 15, 12, 1, 25, 1, 12, 1, 0, 22, 1, 5 };
+static const uint8_t image_data_FontT48_0x003c_mod[214] = { 1, 3, 0, 24, 98, 3, 0, 52, 98, 1, 255, 3, 98, 1, 0, 51, 255, 5, 0, 50, 60, 1, 255, 5, 60, 1, 0, 49, 255, 7, 0, 48, 35, 1, 255, 2, 128, 1, 89, 1, 255, 3, 35, 1, 0, 47, 235, 1, 255, 2, 0, 2, 255, 3, 235, 1, 0, 46, 11, 1, 255, 2, 203, 1, 0, 2, 89, 1, 255, 3, 11, 1, 0, 45, 219, 1, 255, 2, 12, 1, 0, 3, 245, 1, 255, 2, 219, 1, 0, 44, 5, 1, 255, 2, 239, 1, 0, 4, 56, 1, 255, 3, 5, 1, 0, 43, 176, 1, 255, 2, 25, 1, 0, 5, 239, 1, 255, 2, 176, 1, 0, 43, 255, 2, 245, 1, 0, 6, 25, 1, 255, 3, 0, 42, 141, 1, 255, 2, 56, 1, 0, 7, 239, 1, 255, 2, 141, 1, 0, 41, 255, 3, 0, 8, 25, 1, 255, 3, 0, 40, 98, 1, 255, 2, 89, 1, 0, 9, 203, 1, 255, 2, 98, 1, 0, 39, 255, 3, 0, 10, 12, 1, 255, 3, 0, 38, 60, 1, 255, 2, 175, 1, 0, 11, 203, 1, 255, 2, 60, 1, 0, 37, 175, 3, 0, 12, 12, 1, 175, 3, 0, 21, 1, 4 };
+static const uint8_t image_data_FontT48_0x003d_mod[174] = { 1, 2, 0, 20, 35, 3, 0, 5, 35, 3, 0, 45, 235, 3, 0, 5, 235, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 255, 3, 0, 5, 255, 3, 0, 45, 89, 3, 0, 5, 89, 3, 0, 25, 1, 2 };
+static const uint8_t image_data_FontT48_0x003e_mod[216] = { 1, 3, 0, 16, 98, 3, 0, 13, 98, 3, 0, 37, 128, 1, 255, 2, 60, 1, 0, 11, 98, 1, 255, 2, 128, 1, 0, 38, 255, 3, 0, 11, 255, 3, 0, 39, 175, 1, 255, 2, 35, 1, 0, 9, 141, 1, 255, 2, 175, 1, 0, 40, 255, 2, 235, 1, 0, 8, 5, 1, 255, 3, 0, 41, 203, 1, 255, 2, 11, 1, 0, 7, 176, 1, 255, 2, 203, 1, 0, 41, 12, 1, 255, 2, 219, 1, 0, 6, 5, 1, 255, 3, 12, 1, 0, 42, 239, 1, 255, 2, 5, 1, 0, 5, 176, 1, 255, 2, 239, 1, 0, 43, 25, 1, 255, 2, 176, 1, 0, 4, 11, 1, 255, 3, 25, 1, 0, 44, 245, 1, 255, 2, 0, 4, 219, 1, 255, 2, 245, 1, 0, 45, 56, 1, 255, 2, 98, 1, 0, 2, 11, 1, 255, 3, 56, 1, 0, 46, 255, 3, 0, 2, 219, 1, 255, 3, 0, 47, 89, 1, 255, 2, 60, 1, 35, 1, 255, 3, 89, 1, 0, 48, 255, 3, 235, 1, 255, 3, 0, 49, 128, 1, 255, 5, 128, 1, 0, 50, 255, 5, 0, 51, 175, 1, 255, 3, 175, 1, 0, 52, 175, 3, 0, 29, 1, 4 };
+static const uint8_t image_data_FontT48_0x003f_mod[312] = { 1, 1, 0, 42, 35, 1, 141, 1, 5, 1, 0, 51, 29, 1, 141, 1, 235, 1, 255, 1, 176, 1, 0, 25, 5, 1, 0, 25, 43, 1, 255, 4, 0, 23, 35, 1, 141, 1, 176, 1, 141, 1, 35, 1, 0, 6, 11, 3, 0, 15, 175, 1, 255, 3, 141, 1, 0, 21, 11, 1, 235, 1, 255, 3, 235, 1, 35, 1, 0, 3, 60, 1, 141, 1, 219, 3, 141, 1, 60, 1, 11, 1, 0, 13, 255, 4, 0, 21, 219, 1, 255, 5, 235, 1, 0, 3, 255, 7, 219, 1, 60, 1, 0, 12, 255, 4, 0, 21, 255, 7, 0, 3, 255, 9, 141, 1, 5, 1, 0, 10, 255, 4, 0, 21, 255, 7, 0, 3, 203, 1, 175, 1, 128, 1, 175, 1, 203, 1, 245, 1, 255, 4, 176, 1, 5, 1, 0, 9, 255, 4, 0, 21, 128, 1, 255, 5, 175, 1, 0, 3, 12, 1, 0, 3, 12, 1, 56, 1, 175, 1, 255, 4, 176, 1, 11, 1, 0, 7, 11, 1, 255, 4, 0, 22, 175, 1, 245, 1, 255, 1, 245, 1, 175, 1, 0, 11, 89, 1, 245, 1, 255, 3, 219, 1, 60, 1, 0, 6, 219, 1, 255, 4, 0, 23, 56, 1, 89, 1, 56, 1, 0, 13, 56, 1, 245, 1, 255, 4, 141, 1, 35, 1, 5, 2, 35, 1, 141, 1, 255, 4, 128, 1, 0, 40, 56, 1, 245, 1, 255, 4, 235, 1, 176, 2, 235, 1, 255, 5, 0, 42, 56, 1, 239, 1, 255, 11, 128, 1, 0, 43, 25, 1, 203, 1, 255, 9, 175, 1, 0, 45, 12, 1, 128, 1, 239, 1, 245, 1, 255, 4, 239, 1, 128, 1, 0, 48, 25, 1, 56, 1, 89, 1, 128, 2, 89, 1, 25, 1, 0, 14, 1, 1 };
+static const uint8_t image_data_FontT48_0x0040_mod[774] = { 1, 2, 0, 18, 5, 1, 35, 1, 60, 1, 98, 2, 141, 3, 98, 1, 60, 1, 35, 1, 11, 1, 0, 42, 11, 1, 98, 1, 176, 1, 235, 1, 255, 8, 235, 1, 219, 1, 141, 1, 35, 1, 5, 1, 0, 37, 5, 1, 98, 1, 219, 1, 255, 14, 235, 1, 176, 1, 35, 1, 0, 35, 35, 1, 176, 1, 255, 5, 245, 1, 203, 2, 175, 3, 203, 1, 239, 1, 245, 1, 255, 4, 235, 1, 98, 1, 5, 1, 0, 32, 35, 1, 235, 1, 255, 3, 245, 1, 175, 1, 89, 1, 56, 1, 12, 2, 0, 3, 12, 1, 25, 1, 56, 1, 128, 1, 239, 1, 255, 4, 176, 1, 5, 1, 0, 30, 11, 1, 235, 1, 255, 3, 203, 1, 56, 1, 0, 12, 25, 1, 128, 1, 239, 1, 255, 3, 176, 1, 0, 30, 219, 1, 255, 3, 128, 1, 12, 1, 0, 15, 25, 1, 203, 1, 255, 3, 141, 1, 0, 28, 141, 1, 255, 3, 89, 1, 0, 18, 12, 1, 175, 1, 255, 3, 60, 1, 0, 26, 5, 1, 255, 3, 128, 1, 0, 21, 203, 1, 255, 3, 0, 26, 176, 1, 255, 2, 245, 1, 0, 6, 11, 1, 98, 1, 141, 2, 98, 1, 35, 1, 0, 10, 12, 1, 255, 3, 98, 1, 0, 25, 255, 3, 56, 1, 0, 5, 60, 1, 219, 1, 255, 4, 235, 1, 60, 1, 0, 5, 5, 1, 0, 4, 128, 1, 255, 3, 0, 24, 5, 1, 255, 3, 0, 5, 5, 1, 255, 8, 35, 1, 0, 3, 35, 1, 176, 1, 0, 5, 255, 3, 0, 24, 176, 1, 255, 2, 203, 1, 0, 5, 176, 1, 255, 3, 239, 2, 245, 1, 255, 2, 235, 1, 0, 3, 219, 1, 255, 1, 141, 1, 0, 4, 239, 1, 255, 2, 141, 1, 0, 23, 255, 3, 12, 1, 0, 5, 255, 3, 89, 1, 25, 2, 56, 1, 175, 1, 255, 2, 0, 3, 25, 1, 255, 2, 0, 4, 25, 1, 255, 3, 0, 23, 255, 3, 0, 6, 255, 2, 89, 1, 0, 5, 203, 1, 255, 1, 141, 1, 0, 3, 255, 2, 0, 5, 255, 3, 0, 23, 255, 3, 0, 6, 255, 2, 0, 6, 12, 1, 255, 2, 0, 3, 255, 2, 0, 5, 255, 3, 0, 23, 255, 3, 0, 6, 255, 2, 0, 7, 255, 2, 0, 3, 255, 2, 0, 5, 255, 3, 0, 23, 255, 3, 0, 6, 175, 1, 255, 1, 35, 1, 0, 6, 255, 2, 0, 2, 98, 1, 255, 2, 0, 5, 255, 3, 0, 23, 255, 3, 0, 7, 255, 1, 235, 1, 60, 6, 255, 2, 60, 1, 141, 1, 255, 2, 128, 1, 0, 5, 255, 3, 0, 23, 255, 3, 0, 7, 168, 1, 255, 12, 245, 1, 0, 6, 255, 3, 0, 23, 255, 3, 35, 1, 0, 6, 235, 1, 255, 11, 239, 1, 56, 1, 0, 5, 60, 1, 255, 3, 0, 23, 89, 1, 255, 2, 235, 1, 0, 5, 98, 1, 255, 2, 245, 7, 239, 1, 203, 1, 128, 1, 25, 1, 0, 6, 255, 3, 128, 1, 0, 24, 255, 3, 5, 1, 0, 4, 255, 3, 56, 7, 25, 1, 12, 1, 0, 7, 5, 1, 255, 3, 0, 25, 245, 1, 255, 2, 176, 1, 0, 4, 255, 2, 89, 1, 0, 16, 176, 1, 255, 3, 0, 25, 56, 1, 255, 3, 60, 1, 0, 3, 255, 2, 0, 16, 60, 1, 255, 3, 128, 1, 0, 26, 203, 1, 255, 3, 0, 3, 255, 2, 0, 15, 35, 1, 255, 4, 0, 27, 12, 1, 245, 1, 255, 2, 0, 3, 255, 2, 11, 1, 0, 13, 35, 1, 235, 1, 255, 3, 89, 1, 0, 28, 56, 1, 255, 1, 175, 1, 0, 3, 203, 1, 255, 1, 219, 1, 5, 1, 0, 10, 5, 1, 98, 1, 235, 1, 255, 3, 175, 1, 0, 30, 175, 1, 0, 4, 12, 1, 255, 2, 176, 1, 60, 1, 11, 1, 5, 1, 0, 4, 5, 1, 35, 1, 98, 1, 176, 1, 255, 4, 203, 1, 0, 37, 128, 1, 255, 3, 219, 1, 176, 1, 141, 4, 176, 1, 235, 1, 255, 5, 175, 1, 12, 1, 0, 38, 128, 1, 245, 1, 255, 12, 239, 1, 128, 1, 0, 41, 56, 1, 175, 1, 245, 1, 255, 7, 245, 1, 203, 1, 128, 1, 25, 1, 0, 44, 56, 1, 89, 1, 175, 4, 128, 1, 89, 1, 56, 1, 12, 1, 0, 24, 1, 2 };
+static const uint8_t image_data_FontT48_0x0041_mod[472] = { 0, 11, 141, 1, 60, 1, 5, 1, 0, 53, 255, 2, 176, 1, 98, 1, 11, 1, 0, 51, 255, 4, 219, 1, 141, 1, 35, 1, 5, 1, 0, 48, 255, 6, 235, 1, 176, 1, 60, 1, 11, 1, 0, 46, 255, 9, 219, 1, 141, 1, 35, 1, 5, 1, 0, 43, 128, 1, 203, 1, 245, 1, 255, 8, 235, 1, 176, 1, 60, 1, 11, 1, 0, 42, 12, 1, 56, 1, 175, 1, 239, 1, 255, 9, 219, 1, 98, 1, 35, 1, 0, 43, 25, 1, 89, 1, 175, 1, 255, 9, 235, 1, 141, 1, 60, 1, 5, 1, 0, 43, 255, 12, 176, 1, 98, 1, 11, 1, 0, 41, 255, 4, 128, 1, 203, 1, 245, 1, 255, 7, 219, 1, 141, 1, 60, 1, 5, 1, 0, 38, 255, 4, 0, 1, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 7, 176, 1, 98, 1, 11, 1, 0, 36, 255, 4, 0, 4, 12, 1, 56, 1, 175, 1, 239, 1, 255, 7, 219, 1, 141, 1, 35, 1, 5, 1, 0, 33, 255, 4, 0, 7, 25, 1, 89, 1, 175, 1, 239, 1, 255, 6, 235, 1, 176, 1, 60, 1, 11, 1, 0, 31, 255, 4, 0, 10, 25, 1, 89, 1, 175, 1, 245, 1, 255, 6, 219, 1, 98, 1, 35, 1, 0, 29, 255, 4, 0, 12, 5, 1, 92, 1, 255, 8, 235, 1, 0, 29, 255, 4, 0, 9, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 6, 245, 1, 203, 1, 128, 1, 0, 29, 255, 4, 0, 6, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 7, 239, 1, 175, 1, 56, 1, 12, 1, 0, 30, 255, 4, 0, 3, 11, 1, 60, 1, 141, 1, 176, 1, 235, 1, 255, 7, 245, 1, 175, 1, 89, 1, 25, 1, 0, 33, 255, 4, 11, 1, 60, 1, 141, 1, 219, 1, 255, 8, 245, 1, 203, 1, 128, 1, 56, 1, 0, 36, 255, 4, 219, 1, 255, 9, 239, 1, 175, 1, 56, 1, 12, 1, 0, 36, 11, 1, 60, 1, 255, 11, 239, 1, 175, 1, 89, 1, 25, 1, 0, 36, 11, 1, 60, 1, 141, 1, 219, 1, 255, 9, 245, 1, 203, 1, 128, 1, 25, 1, 0, 37, 60, 1, 141, 1, 219, 1, 255, 10, 239, 1, 128, 1, 56, 1, 12, 1, 0, 39, 255, 10, 239, 1, 175, 1, 89, 1, 25, 1, 0, 42, 255, 7, 245, 1, 203, 1, 128, 1, 25, 1, 0, 45, 255, 5, 239, 1, 128, 1, 56, 1, 12, 1, 0, 47, 255, 2, 239, 1, 175, 1, 89, 1, 25, 1, 0, 50, 203, 1, 89, 1, 25, 1, 0, 42 };
+static const uint8_t image_data_FontT48_0x0042_mod[378] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 4, 245, 13, 255, 4, 245, 9, 255, 4, 0, 22, 255, 4, 56, 13, 255, 4, 56, 9, 255, 4, 0, 22, 255, 4, 0, 13, 255, 4, 0, 9, 255, 4, 0, 22, 255, 4, 0, 13, 255, 4, 0, 9, 255, 4, 0, 22, 255, 4, 0, 13, 255, 4, 0, 9, 255, 4, 0, 22, 255, 4, 0, 13, 255, 4, 0, 9, 255, 4, 0, 22, 255, 4, 0, 13, 255, 4, 0, 9, 255, 4, 0, 22, 255, 4, 0, 13, 255, 4, 0, 9, 255, 4, 0, 22, 255, 4, 11, 1, 0, 11, 5, 1, 255, 4, 141, 1, 0, 7, 5, 1, 255, 4, 0, 22, 255, 4, 219, 1, 0, 11, 176, 1, 255, 5, 5, 1, 0, 6, 176, 1, 255, 3, 203, 1, 0, 22, 128, 1, 255, 4, 5, 1, 0, 10, 255, 3, 89, 1, 255, 2, 176, 1, 35, 1, 0, 3, 5, 1, 98, 1, 255, 4, 12, 1, 0, 23, 255, 4, 176, 1, 5, 1, 0, 7, 5, 1, 141, 1, 255, 3, 0, 1, 255, 3, 235, 1, 141, 1, 98, 1, 141, 1, 176, 1, 255, 5, 0, 24, 239, 1, 255, 4, 176, 1, 60, 1, 11, 1, 5, 3, 11, 1, 35, 1, 176, 1, 255, 4, 0, 1, 175, 1, 255, 11, 128, 1, 0, 24, 25, 1, 255, 6, 219, 1, 176, 3, 219, 1, 235, 1, 255, 4, 89, 1, 0, 2, 239, 1, 255, 9, 203, 1, 0, 26, 175, 1, 255, 14, 239, 1, 0, 3, 25, 1, 203, 1, 255, 7, 203, 1, 12, 1, 0, 27, 175, 1, 255, 12, 239, 1, 25, 1, 0, 4, 12, 1, 128, 1, 239, 1, 245, 2, 239, 1, 203, 1, 89, 1, 12, 1, 0, 29, 128, 1, 245, 1, 255, 9, 203, 1, 25, 1, 0, 7, 25, 1, 56, 2, 25, 1, 12, 1, 0, 32, 56, 1, 175, 1, 203, 1, 239, 1, 245, 3, 239, 1, 175, 1, 89, 1, 12, 1, 0, 47, 12, 1, 25, 1, 56, 3, 25, 1, 0, 32, 1, 1 };
+static const uint8_t image_data_FontT48_0x0043_mod[380] = { 1, 1, 0, 24, 5, 1, 11, 6, 5, 1, 0, 44, 11, 1, 35, 1, 98, 1, 141, 1, 176, 1, 219, 6, 176, 1, 141, 1, 60, 1, 35, 1, 0, 39, 11, 1, 98, 1, 219, 1, 235, 1, 255, 12, 235, 1, 141, 1, 60, 1, 5, 1, 0, 34, 5, 1, 98, 1, 219, 1, 255, 18, 176, 1, 35, 1, 0, 32, 11, 1, 176, 1, 255, 21, 235, 1, 98, 1, 0, 30, 11, 1, 219, 1, 255, 8, 245, 1, 239, 1, 203, 3, 239, 2, 245, 1, 255, 8, 141, 1, 0, 28, 5, 1, 219, 1, 255, 6, 239, 1, 128, 1, 89, 1, 56, 1, 25, 1, 12, 3, 25, 2, 56, 1, 128, 1, 175, 1, 239, 1, 255, 6, 141, 1, 0, 27, 176, 1, 255, 5, 239, 1, 89, 1, 25, 1, 0, 12, 25, 1, 128, 1, 245, 1, 255, 5, 60, 1, 0, 25, 60, 1, 255, 5, 175, 1, 25, 1, 0, 16, 56, 1, 203, 1, 255, 5, 0, 25, 255, 5, 175, 1, 0, 19, 12, 1, 175, 1, 255, 4, 141, 1, 0, 24, 255, 4, 203, 1, 0, 22, 203, 1, 255, 4, 0, 23, 141, 1, 255, 4, 12, 1, 0, 22, 12, 1, 255, 4, 35, 1, 0, 22, 255, 4, 203, 1, 0, 24, 203, 1, 255, 3, 235, 1, 0, 22, 255, 4, 12, 1, 0, 24, 12, 1, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 203, 1, 255, 3, 141, 1, 0, 24, 5, 1, 255, 4, 0, 22, 12, 1, 255, 4, 0, 24, 176, 1, 255, 3, 203, 1, 0, 23, 255, 4, 141, 1, 0, 23, 255, 4, 12, 1, 0, 23, 175, 1, 255, 4, 60, 1, 0, 21, 98, 1, 255, 4, 0, 25, 255, 5, 36, 1, 0, 20, 89, 1, 175, 1, 245, 1, 255, 1, 203, 1, 0, 25, 89, 1, 255, 2, 239, 1, 89, 1, 0, 23, 56, 1, 128, 1, 12, 1, 0, 12, 1, 3 };
+static const uint8_t image_data_FontT48_0x0044_mod[322] = { 1, 3, 0, 11, 141, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 4, 245, 26, 255, 4, 0, 22, 255, 4, 56, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 5, 1, 0, 25, 255, 4, 0, 22, 89, 1, 255, 3, 176, 1, 0, 24, 98, 1, 255, 4, 0, 23, 255, 4, 5, 1, 0, 23, 255, 4, 89, 1, 0, 23, 255, 4, 176, 1, 0, 22, 60, 1, 255, 4, 0, 24, 128, 1, 255, 4, 98, 1, 0, 20, 11, 1, 255, 4, 245, 1, 0, 25, 255, 5, 141, 1, 11, 1, 0, 17, 11, 1, 219, 1, 255, 4, 56, 1, 0, 25, 128, 1, 255, 5, 219, 1, 60, 1, 11, 1, 0, 13, 5, 1, 60, 1, 219, 1, 255, 4, 203, 1, 0, 27, 203, 1, 255, 6, 219, 1, 141, 1, 60, 1, 35, 1, 11, 1, 5, 6, 11, 1, 35, 1, 98, 1, 176, 1, 255, 5, 245, 1, 12, 1, 0, 27, 12, 1, 203, 1, 255, 8, 235, 1, 219, 1, 176, 6, 219, 1, 235, 1, 255, 6, 245, 1, 56, 1, 0, 29, 12, 1, 175, 1, 255, 22, 245, 1, 56, 1, 0, 32, 128, 1, 239, 1, 255, 19, 203, 1, 56, 1, 0, 34, 25, 1, 128, 1, 203, 1, 245, 1, 255, 13, 245, 1, 203, 1, 89, 1, 12, 1, 0, 37, 12, 1, 56, 1, 128, 1, 175, 1, 203, 1, 239, 1, 245, 5, 239, 2, 203, 1, 128, 1, 56, 1, 12, 1, 0, 43, 12, 1, 25, 1, 56, 5, 25, 2, 12, 1, 0, 22, 1, 1 };
+static const uint8_t image_data_FontT48_0x0045_mod[210] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 4, 89, 12, 255, 4, 89, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 255, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 12, 175, 4, 0, 10, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 245, 4, 0, 26, 245, 4, 0, 22, 56, 4, 0, 26, 56, 4, 0, 11, 1, 1 };
+static const uint8_t image_data_FontT48_0x0046_mod[154] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 245, 16, 255, 4, 245, 10, 255, 4, 0, 22, 56, 16, 255, 4, 56, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 255, 4, 0, 10, 255, 4, 0, 38, 89, 4, 0, 10, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 175, 4, 0, 11, 1, 1 };
+static const uint8_t image_data_FontT48_0x0047_mod[434] = { 1, 1, 0, 23, 5, 1, 11, 2, 35, 4, 11, 1, 5, 1, 0, 44, 11, 1, 60, 1, 141, 1, 176, 1, 219, 2, 235, 4, 219, 1, 176, 1, 141, 1, 98, 1, 35, 1, 5, 1, 0, 38, 35, 1, 141, 1, 219, 1, 255, 13, 235, 1, 176, 1, 60, 1, 5, 1, 0, 34, 5, 1, 98, 1, 235, 1, 255, 18, 176, 1, 35, 1, 0, 32, 11, 1, 176, 1, 255, 21, 235, 1, 60, 1, 0, 30, 11, 1, 219, 1, 255, 7, 245, 1, 239, 1, 203, 5, 239, 1, 245, 1, 255, 8, 98, 1, 0, 28, 5, 1, 219, 1, 255, 6, 203, 1, 128, 1, 56, 1, 25, 1, 12, 5, 25, 1, 56, 1, 89, 1, 175, 1, 239, 1, 255, 6, 60, 1, 0, 27, 176, 1, 255, 5, 239, 1, 89, 1, 12, 1, 0, 12, 25, 1, 128, 1, 245, 1, 255, 5, 11, 1, 0, 25, 35, 1, 255, 5, 203, 1, 25, 1, 0, 16, 56, 1, 239, 1, 255, 4, 219, 1, 0, 25, 235, 1, 255, 4, 175, 1, 12, 1, 0, 18, 25, 1, 239, 1, 255, 4, 35, 1, 0, 24, 255, 4, 245, 1, 0, 21, 25, 1, 255, 4, 235, 1, 0, 23, 60, 1, 255, 4, 56, 1, 0, 22, 89, 1, 255, 4, 0, 23, 255, 5, 0, 24, 255, 4, 60, 1, 0, 22, 255, 4, 89, 1, 0, 24, 175, 1, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 10, 5, 4, 0, 12, 255, 4, 0, 22, 255, 4, 0, 10, 176, 4, 0, 12, 255, 4, 0, 22, 255, 4, 5, 1, 0, 9, 255, 4, 0, 11, 11, 1, 255, 4, 0, 22, 175, 1, 255, 3, 176, 1, 0, 9, 255, 4, 0, 11, 219, 1, 255, 4, 0, 23, 255, 4, 5, 1, 0, 8, 255, 4, 0, 10, 5, 1, 255, 4, 89, 1, 0, 23, 255, 4, 176, 1, 11, 8, 255, 4, 0, 10, 176, 1, 255, 4, 0, 24, 245, 1, 255, 4, 219, 8, 255, 4, 0, 9, 53, 1, 255, 4, 203, 1, 0, 24, 56, 1, 255, 16, 0, 9, 56, 1, 175, 1, 245, 1, 255, 2, 12, 1, 0, 25, 255, 16, 0, 11, 56, 1, 203, 1, 89, 1, 0, 26, 89, 1, 255, 15, 0, 12, 12, 1, 0, 28, 175, 15, 0, 27, 1, 3 };
+static const uint8_t image_data_FontT48_0x0048_mod[122] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 245, 16, 255, 4, 245, 14, 0, 22, 56, 16, 255, 4, 56, 14, 0, 38, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 36, 11, 16, 255, 4, 11, 14, 0, 22, 219, 16, 255, 4, 219, 14, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 175, 34, 0, 11, 1, 3 };
+static const uint8_t image_data_FontT48_0x0049_mod[34] = { 1, 3, 0, 11, 5, 34, 0, 22, 176, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 203, 34, 0, 22, 12, 34, 0, 11, 1, 3 };
+static const uint8_t image_data_FontT48_0x004a_mod[162] = { 1, 1, 0, 14, 5, 1, 60, 1, 98, 1, 176, 1, 0, 51, 11, 1, 176, 1, 255, 3, 0, 50, 11, 1, 219, 1, 255, 4, 0, 50, 219, 1, 255, 5, 0, 49, 11, 1, 255, 4, 203, 1, 128, 1, 0, 49, 219, 1, 255, 3, 203, 1, 12, 1, 0, 50, 255, 4, 12, 1, 0, 51, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 5, 1, 0, 51, 245, 1, 255, 3, 176, 1, 0, 51, 56, 1, 255, 4, 60, 1, 5, 1, 0, 50, 255, 5, 176, 1, 141, 1, 98, 1, 60, 2, 35, 23, 0, 23, 128, 1, 255, 9, 235, 23, 0, 24, 175, 1, 255, 31, 0, 25, 128, 1, 239, 1, 255, 29, 0, 26, 25, 1, 128, 1, 203, 1, 239, 1, 245, 1, 255, 25, 0, 28, 12, 1, 25, 1, 56, 1, 89, 2, 128, 23, 0, 11, 1, 3 };
+static const uint8_t image_data_FontT48_0x004b_mod[354] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 89, 9, 128, 1, 245, 1, 255, 5, 94, 1, 89, 17, 0, 32, 56, 1, 203, 1, 255, 4, 176, 1, 35, 1, 0, 49, 12, 1, 175, 1, 255, 4, 235, 1, 98, 1, 5, 1, 0, 49, 89, 1, 239, 1, 255, 4, 176, 1, 35, 1, 0, 49, 25, 1, 216, 1, 255, 4, 235, 1, 98, 1, 0, 47, 5, 1, 98, 1, 235, 1, 255, 6, 141, 1, 11, 1, 0, 44, 35, 1, 176, 1, 255, 9, 219, 1, 60, 1, 0, 41, 5, 1, 98, 1, 235, 1, 255, 6, 245, 1, 255, 5, 141, 1, 11, 1, 0, 38, 60, 1, 176, 1, 255, 7, 175, 1, 56, 1, 175, 1, 255, 5, 219, 1, 60, 1, 0, 35, 11, 1, 141, 1, 255, 7, 239, 1, 89, 1, 0, 3, 89, 1, 245, 1, 255, 5, 98, 1, 5, 1, 0, 32, 60, 1, 219, 1, 255, 6, 245, 1, 128, 1, 25, 1, 0, 5, 56, 1, 203, 1, 255, 5, 176, 1, 35, 1, 0, 29, 35, 1, 141, 1, 255, 7, 203, 1, 56, 1, 0, 8, 12, 1, 128, 1, 255, 5, 235, 1, 98, 1, 5, 1, 0, 25, 5, 1, 98, 1, 235, 1, 255, 6, 239, 1, 89, 1, 12, 1, 0, 11, 89, 1, 239, 1, 255, 5, 176, 1, 35, 1, 0, 23, 35, 1, 176, 1, 255, 6, 245, 1, 175, 1, 25, 1, 0, 14, 25, 1, 203, 1, 255, 5, 235, 1, 0, 22, 98, 1, 235, 1, 255, 6, 203, 1, 56, 1, 0, 17, 12, 1, 128, 1, 245, 1, 255, 4, 0, 22, 255, 6, 239, 1, 89, 1, 12, 1, 0, 20, 56, 1, 239, 1, 255, 3, 0, 22, 255, 4, 245, 1, 175, 1, 25, 1, 0, 23, 25, 1, 175, 1, 255, 2, 0, 22, 255, 3, 203, 1, 56, 1, 0, 27, 89, 1, 255, 1, 0, 11, 1, 2 };
+static const uint8_t image_data_FontT48_0x004c_mod[92] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 4, 245, 30, 0, 22, 255, 4, 56, 30, 0, 22, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 89, 4, 0, 41 };
+static const uint8_t image_data_FontT48_0x004d_mod[758] = { 1, 1, 0, 11, 255, 1, 235, 1, 219, 1, 176, 1, 141, 1, 98, 1, 60, 1, 35, 1, 5, 1, 0, 47, 255, 7, 235, 1, 176, 1, 141, 1, 98, 1, 60, 1, 35, 1, 11, 1, 5, 1, 0, 41, 255, 12, 235, 1, 219, 1, 176, 1, 98, 1, 60, 1, 35, 1, 11, 1, 5, 1, 0, 36, 239, 1, 245, 1, 255, 15, 235, 1, 219, 1, 176, 1, 141, 1, 98, 1, 60, 1, 11, 1, 5, 1, 0, 31, 25, 1, 56, 1, 89, 1, 128, 1, 203, 1, 239, 1, 245, 1, 255, 16, 219, 1, 176, 1, 141, 1, 98, 1, 60, 1, 35, 1, 11, 1, 5, 1, 0, 29, 12, 1, 25, 1, 56, 1, 89, 1, 128, 1, 175, 1, 203, 1, 239, 1, 245, 1, 255, 15, 235, 1, 219, 1, 176, 1, 98, 1, 60, 1, 35, 1, 0, 32, 12, 1, 25, 1, 56, 1, 89, 1, 128, 1, 203, 1, 239, 1, 245, 1, 255, 15, 235, 1, 0, 37, 12, 1, 25, 1, 56, 1, 89, 1, 128, 1, 175, 1, 216, 1, 255, 11, 245, 1, 0, 40, 11, 1, 60, 1, 141, 1, 235, 1, 255, 8, 245, 1, 203, 1, 128, 1, 56, 1, 0, 37, 5, 1, 60, 1, 141, 1, 219, 1, 255, 8, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 36, 5, 1, 35, 1, 98, 1, 176, 1, 255, 8, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 36, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 7, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 36, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 7, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 36, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 7, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 37, 35, 1, 98, 1, 176, 1, 235, 1, 255, 7, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 39, 141, 1, 235, 1, 255, 7, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 42, 245, 1, 255, 8, 206, 1, 72, 1, 35, 1, 5, 1, 0, 43, 56, 1, 128, 1, 203, 1, 245, 1, 255, 7, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 7, 235, 1, 176, 1, 141, 1, 60, 1, 11, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 219, 1, 141, 1, 60, 1, 11, 1, 5, 1, 0, 41, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 219, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 41, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 235, 1, 176, 1, 98, 1, 60, 1, 11, 1, 0, 41, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 9, 219, 1, 141, 1, 60, 1, 11, 1, 5, 1, 0, 40, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 9, 219, 1, 176, 1, 98, 1, 0, 38, 5, 1, 11, 1, 35, 1, 60, 1, 111, 1, 206, 1, 255, 12, 0, 33, 5, 1, 11, 1, 35, 1, 60, 1, 98, 1, 176, 1, 219, 1, 235, 1, 255, 13, 245, 1, 203, 1, 0, 28, 5, 1, 11, 1, 60, 1, 98, 1, 141, 1, 176, 1, 219, 1, 235, 1, 255, 13, 245, 1, 239, 1, 175, 1, 128, 1, 89, 1, 56, 1, 12, 1, 0, 22, 5, 1, 11, 1, 35, 1, 60, 1, 98, 1, 141, 1, 176, 1, 219, 1, 255, 14, 245, 1, 239, 1, 203, 1, 128, 1, 89, 1, 56, 1, 25, 1, 0, 27, 176, 1, 219, 1, 235, 1, 255, 14, 245, 1, 239, 1, 203, 1, 128, 1, 89, 1, 56, 1, 25, 1, 12, 1, 0, 31, 255, 12, 245, 1, 239, 1, 203, 1, 175, 1, 89, 1, 56, 1, 25, 1, 12, 1, 0, 36, 255, 7, 245, 1, 239, 1, 203, 1, 175, 1, 89, 1, 56, 1, 25, 1, 12, 1, 0, 41, 255, 2, 245, 1, 239, 1, 203, 1, 175, 1, 128, 1, 56, 1, 25, 1, 12, 1, 0, 46, 175, 1, 128, 1, 56, 1, 25, 1, 12, 1, 0, 40, 1, 2 };
+static const uint8_t image_data_FontT48_0x004e_mod[252] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 33, 203, 1, 0, 22, 255, 32, 128, 1, 12, 1, 0, 22, 239, 24, 255, 6, 239, 1, 89, 1, 0, 24, 25, 23, 85, 1, 255, 5, 203, 1, 25, 1, 0, 46, 5, 1, 141, 1, 255, 5, 128, 1, 12, 1, 0, 46, 35, 1, 176, 1, 255, 4, 239, 1, 89, 1, 0, 47, 60, 1, 235, 1, 255, 4, 203, 1, 25, 1, 0, 46, 5, 1, 141, 1, 255, 5, 128, 1, 12, 1, 0, 46, 35, 1, 176, 1, 255, 4, 239, 1, 89, 1, 0, 47, 98, 1, 235, 1, 255, 4, 203, 1, 25, 1, 0, 46, 11, 1, 141, 1, 255, 5, 128, 1, 12, 1, 0, 46, 35, 1, 219, 1, 255, 4, 239, 1, 89, 1, 0, 47, 98, 1, 235, 1, 255, 4, 175, 1, 25, 1, 0, 46, 11, 1, 141, 1, 255, 4, 245, 1, 128, 1, 0, 47, 60, 1, 219, 1, 255, 4, 239, 1, 56, 1, 0, 46, 5, 1, 98, 1, 255, 5, 175, 1, 25, 1, 0, 46, 11, 1, 176, 1, 255, 4, 245, 1, 128, 1, 0, 47, 60, 1, 219, 1, 255, 5, 67, 1, 11, 22, 0, 24, 5, 1, 98, 1, 255, 7, 219, 23, 0, 23, 35, 1, 176, 1, 255, 31, 0, 22, 60, 1, 235, 1, 255, 32, 0, 22, 255, 34, 0, 22, 128, 34, 0, 11, 1, 3 };
+static const uint8_t image_data_FontT48_0x004f_mod[492] = { 1, 1, 0, 23, 5, 1, 11, 2, 35, 4, 11, 2, 5, 1, 0, 43, 11, 1, 60, 1, 98, 1, 176, 1, 219, 2, 235, 4, 219, 2, 176, 1, 141, 1, 60, 1, 11, 1, 0, 38, 35, 1, 141, 1, 219, 1, 255, 14, 219, 1, 141, 1, 35, 1, 0, 34, 11, 1, 141, 1, 235, 1, 255, 18, 235, 1, 141, 1, 11, 1, 0, 31, 60, 1, 219, 1, 255, 22, 219, 1, 35, 1, 0, 29, 60, 1, 255, 8, 245, 1, 239, 2, 203, 5, 239, 1, 245, 1, 255, 7, 235, 1, 60, 1, 0, 27, 60, 1, 255, 6, 245, 1, 203, 1, 128, 1, 56, 1, 25, 2, 12, 5, 25, 1, 56, 1, 89, 1, 175, 1, 239, 1, 255, 6, 35, 1, 0, 25, 5, 1, 255, 6, 175, 1, 56, 1, 12, 1, 0, 13, 25, 1, 89, 1, 239, 1, 255, 4, 235, 1, 0, 25, 176, 1, 255, 4, 239, 1, 89, 1, 0, 18, 25, 1, 175, 1, 255, 4, 141, 1, 0, 24, 255, 4, 239, 1, 25, 1, 0, 21, 203, 1, 255, 4, 0, 23, 60, 1, 255, 4, 25, 1, 0, 22, 12, 1, 255, 4, 35, 1, 0, 22, 255, 4, 203, 1, 0, 24, 128, 1, 255, 3, 235, 1, 0, 22, 255, 4, 12, 1, 0, 25, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 35, 1, 0, 24, 11, 1, 255, 4, 0, 22, 203, 1, 255, 3, 235, 1, 0, 24, 219, 1, 255, 3, 203, 1, 0, 22, 12, 1, 255, 4, 35, 1, 0, 22, 11, 1, 255, 4, 12, 1, 0, 23, 255, 4, 235, 1, 11, 1, 0, 21, 219, 1, 255, 4, 0, 24, 128, 1, 255, 4, 219, 1, 35, 1, 0, 18, 11, 1, 141, 1, 255, 4, 175, 1, 0, 25, 245, 1, 255, 4, 235, 1, 98, 1, 35, 1, 0, 14, 5, 1, 60, 1, 219, 1, 255, 5, 0, 26, 56, 1, 255, 6, 235, 1, 141, 1, 60, 1, 35, 1, 11, 1, 5, 2, 0, 2, 5, 3, 11, 1, 60, 1, 98, 1, 176, 1, 255, 6, 89, 1, 0, 27, 89, 1, 255, 8, 235, 1, 219, 1, 176, 2, 141, 2, 176, 3, 219, 1, 255, 8, 128, 1, 0, 29, 89, 1, 245, 1, 255, 23, 128, 1, 0, 31, 56, 1, 175, 1, 255, 20, 203, 1, 89, 1, 0, 34, 89, 1, 175, 1, 239, 1, 255, 14, 245, 1, 203, 1, 89, 1, 12, 1, 0, 37, 25, 1, 89, 1, 175, 1, 203, 1, 239, 2, 245, 5, 239, 1, 203, 1, 175, 1, 128, 1, 56, 1, 12, 1, 0, 19, 1, 2 };
+static const uint8_t image_data_FontT48_0x0050_mod[238] = { 1, 3, 0, 11, 98, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 245, 13, 255, 4, 245, 13, 255, 4, 0, 22, 56, 13, 255, 4, 56, 13, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 255, 4, 0, 13, 255, 4, 0, 35, 255, 4, 60, 1, 0, 11, 98, 1, 255, 3, 239, 1, 0, 35, 203, 1, 255, 4, 0, 11, 255, 4, 25, 1, 0, 35, 12, 1, 255, 4, 35, 1, 0, 9, 35, 1, 255, 4, 0, 37, 255, 4, 235, 1, 11, 1, 0, 7, 5, 1, 235, 1, 255, 4, 0, 37, 175, 1, 255, 4, 219, 1, 60, 1, 11, 1, 0, 3, 5, 1, 35, 1, 176, 1, 255, 4, 128, 1, 0, 38, 255, 6, 219, 1, 141, 3, 176, 1, 235, 1, 255, 5, 0, 39, 89, 1, 255, 15, 89, 1, 0, 40, 128, 1, 255, 13, 175, 1, 0, 42, 89, 1, 203, 1, 255, 9, 245, 1, 128, 1, 0, 44, 12, 1, 89, 1, 175, 1, 203, 1, 239, 4, 203, 1, 128, 1, 56, 1, 0, 48, 12, 1, 25, 4, 12, 1, 0, 18, 1, 1 };
+static const uint8_t image_data_FontT48_0x0051_mod[564] = { 1, 1, 0, 23, 5, 1, 11, 2, 35, 5, 11, 1, 5, 1, 0, 43, 11, 1, 60, 1, 98, 1, 176, 1, 219, 2, 235, 5, 219, 1, 176, 1, 141, 1, 60, 1, 11, 1, 0, 38, 35, 1, 141, 1, 219, 1, 255, 14, 219, 1, 141, 1, 35, 1, 0, 34, 11, 1, 141, 1, 235, 1, 255, 18, 235, 1, 141, 1, 11, 1, 0, 31, 60, 1, 219, 1, 255, 22, 219, 1, 60, 1, 0, 29, 60, 1, 255, 8, 245, 1, 239, 1, 203, 6, 239, 1, 245, 1, 255, 8, 60, 1, 0, 27, 60, 1, 255, 6, 245, 1, 203, 1, 128, 1, 56, 1, 25, 1, 12, 6, 25, 1, 56, 1, 89, 1, 128, 1, 203, 1, 255, 6, 35, 1, 0, 25, 5, 1, 255, 5, 245, 1, 175, 1, 56, 1, 12, 1, 0, 13, 12, 1, 89, 1, 239, 1, 255, 4, 235, 1, 0, 25, 176, 1, 255, 4, 239, 1, 56, 1, 0, 18, 25, 1, 175, 1, 255, 4, 141, 1, 0, 24, 255, 4, 239, 1, 25, 1, 0, 21, 175, 1, 255, 4, 0, 23, 60, 1, 255, 4, 25, 1, 0, 23, 255, 4, 60, 1, 0, 22, 255, 4, 175, 1, 0, 24, 128, 1, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 22, 255, 4, 0, 26, 255, 4, 0, 21, 11, 1, 255, 4, 60, 1, 0, 24, 11, 1, 255, 4, 0, 20, 60, 1, 219, 1, 255, 5, 0, 24, 219, 1, 255, 3, 203, 1, 0, 19, 60, 1, 255, 7, 60, 1, 0, 22, 11, 1, 255, 4, 12, 1, 0, 18, 60, 1, 255, 9, 35, 1, 0, 20, 5, 1, 219, 1, 255, 4, 0, 18, 5, 1, 255, 5, 245, 1, 255, 4, 235, 1, 60, 1, 0, 18, 11, 1, 176, 1, 255, 4, 128, 1, 0, 18, 176, 1, 255, 4, 203, 1, 56, 1, 255, 6, 141, 1, 35, 1, 5, 1, 0, 13, 11, 1, 98, 1, 219, 1, 255, 4, 245, 1, 0, 18, 5, 1, 255, 4, 175, 1, 12, 1, 0, 1, 89, 1, 255, 6, 235, 1, 176, 1, 98, 1, 60, 1, 35, 1, 11, 2, 5, 3, 11, 2, 35, 1, 60, 1, 141, 1, 219, 1, 255, 6, 56, 1, 0, 18, 176, 1, 255, 3, 239, 1, 0, 4, 89, 1, 255, 9, 235, 1, 219, 2, 176, 3, 219, 2, 235, 1, 255, 8, 128, 1, 0, 19, 255, 4, 25, 1, 0, 5, 89, 1, 245, 1, 255, 22, 245, 1, 89, 1, 0, 20, 255, 3, 239, 1, 0, 7, 56, 1, 175, 1, 245, 1, 255, 19, 203, 1, 56, 1, 0, 20, 60, 1, 255, 3, 25, 1, 0, 9, 56, 1, 175, 1, 239, 1, 255, 14, 239, 1, 175, 1, 89, 1, 12, 1, 0, 21, 255, 4, 0, 12, 25, 1, 89, 1, 128, 1, 175, 1, 203, 1, 239, 6, 203, 2, 128, 1, 89, 1, 25, 1, 0, 24, 255, 4, 0, 16, 12, 1, 25, 6, 12, 2, 0, 27, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 48 };
+static const uint8_t image_data_FontT48_0x0052_mod[344] = { 1, 3, 0, 11, 35, 34, 0, 22, 235, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 128, 15, 255, 4, 128, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 36, 60, 1, 255, 4, 0, 11, 255, 4, 0, 34, 11, 1, 141, 1, 255, 5, 0, 11, 255, 4, 0, 32, 5, 1, 98, 1, 219, 1, 255, 6, 11, 1, 0, 9, 11, 1, 255, 4, 0, 31, 35, 1, 176, 1, 255, 8, 219, 1, 0, 9, 219, 1, 255, 4, 0, 29, 11, 1, 141, 1, 235, 1, 255, 10, 5, 1, 0, 7, 5, 1, 255, 4, 89, 1, 0, 28, 60, 1, 219, 1, 255, 6, 239, 1, 89, 1, 255, 4, 176, 1, 11, 1, 0, 5, 5, 1, 176, 1, 255, 4, 0, 27, 35, 1, 141, 1, 255, 6, 245, 1, 175, 1, 25, 1, 0, 1, 89, 1, 255, 4, 219, 1, 98, 1, 60, 1, 35, 2, 98, 1, 176, 1, 255, 5, 0, 25, 5, 1, 98, 1, 235, 1, 255, 6, 203, 1, 56, 1, 0, 4, 245, 1, 255, 6, 235, 2, 255, 6, 89, 1, 0, 24, 60, 1, 176, 1, 255, 6, 239, 1, 128, 1, 12, 1, 0, 5, 56, 1, 245, 1, 255, 12, 203, 1, 0, 24, 141, 1, 255, 7, 175, 1, 25, 1, 0, 8, 56, 1, 239, 1, 255, 10, 203, 1, 12, 1, 0, 24, 255, 6, 239, 1, 89, 1, 0, 11, 25, 1, 175, 1, 245, 1, 255, 6, 239, 1, 128, 1, 12, 1, 0, 25, 255, 4, 245, 1, 128, 1, 25, 1, 0, 14, 56, 1, 128, 1, 175, 4, 89, 1, 25, 1, 0, 27, 255, 3, 203, 1, 56, 1, 0, 51, 255, 1, 239, 1, 128, 1, 12, 1, 0, 52, 203, 1, 25, 1, 0, 43 };
+static const uint8_t image_data_FontT48_0x0053_mod[414] = { 1, 1, 0, 13, 5, 1, 0, 19, 5, 1, 11, 1, 35, 3, 5, 1, 0, 29, 35, 1, 176, 1, 60, 1, 11, 1, 0, 15, 5, 1, 60, 1, 176, 1, 219, 1, 235, 3, 176, 1, 141, 1, 35, 1, 0, 27, 235, 1, 255, 2, 219, 1, 98, 1, 0, 13, 35, 1, 176, 1, 255, 8, 235, 1, 98, 1, 0, 26, 255, 4, 128, 1, 0, 12, 35, 1, 235, 1, 255, 11, 98, 1, 0, 24, 98, 1, 255, 4, 0, 13, 235, 1, 255, 13, 35, 1, 0, 23, 255, 4, 245, 1, 0, 12, 141, 1, 255, 5, 203, 1, 175, 1, 128, 1, 175, 1, 239, 1, 255, 4, 235, 1, 0, 23, 255, 4, 56, 1, 0, 12, 255, 5, 128, 1, 12, 1, 0, 3, 25, 1, 175, 1, 255, 4, 11, 1, 0, 22, 255, 4, 0, 12, 141, 1, 255, 4, 89, 1, 0, 7, 239, 1, 255, 3, 219, 1, 0, 22, 255, 4, 0, 12, 255, 4, 239, 1, 0, 8, 25, 1, 255, 4, 0, 22, 255, 4, 0, 11, 98, 1, 255, 4, 25, 1, 0, 9, 255, 4, 0, 22, 255, 4, 0, 11, 255, 4, 245, 1, 0, 10, 255, 4, 0, 22, 255, 4, 5, 1, 0, 9, 98, 1, 255, 4, 56, 1, 0, 10, 255, 4, 0, 22, 203, 1, 255, 3, 176, 1, 0, 8, 5, 1, 255, 5, 0, 11, 255, 4, 0, 22, 12, 1, 255, 4, 35, 1, 0, 7, 176, 1, 255, 4, 89, 1, 0, 10, 35, 1, 255, 4, 0, 23, 255, 4, 235, 1, 60, 1, 5, 1, 0, 3, 35, 1, 141, 1, 255, 5, 0, 11, 235, 1, 255, 4, 0, 23, 89, 1, 255, 5, 176, 1, 141, 3, 235, 1, 255, 5, 89, 1, 0, 10, 5, 1, 255, 4, 128, 1, 0, 24, 203, 1, 255, 13, 203, 1, 0, 11, 167, 1, 255, 4, 0, 25, 12, 1, 239, 1, 255, 11, 239, 1, 12, 1, 0, 11, 56, 1, 128, 1, 203, 1, 255, 1, 203, 1, 0, 26, 25, 1, 203, 1, 255, 8, 245, 1, 175, 1, 25, 1, 0, 14, 12, 1, 89, 1, 12, 1, 0, 27, 12, 1, 89, 1, 203, 1, 239, 1, 245, 2, 239, 1, 203, 1, 175, 1, 56, 1, 0, 48, 12, 1, 25, 1, 56, 2, 25, 1, 12, 1, 0, 33, 1, 1 };
+static const uint8_t image_data_FontT48_0x0054_mod[120] = { 0, 41, 98, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 22, 98, 30, 255, 4, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 255, 34, 0, 22, 245, 30, 255, 4, 0, 22, 56, 30, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 128, 4, 0, 11 };
+static const uint8_t image_data_FontT48_0x0055_mod[202] = { 1, 3, 0, 17, 5, 1, 35, 1, 60, 1, 98, 25, 0, 26, 5, 1, 98, 1, 176, 1, 235, 1, 255, 26, 0, 25, 35, 1, 176, 1, 255, 29, 0, 24, 35, 1, 235, 1, 255, 30, 0, 24, 235, 1, 255, 7, 245, 24, 0, 23, 141, 1, 255, 5, 239, 1, 128, 1, 89, 1, 56, 24, 0, 23, 255, 5, 175, 1, 25, 1, 0, 48, 11, 1, 255, 4, 175, 1, 0, 50, 219, 1, 255, 4, 0, 51, 255, 4, 128, 1, 0, 51, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 98, 1, 0, 51, 203, 1, 255, 4, 0, 51, 12, 1, 255, 4, 141, 1, 0, 51, 255, 5, 141, 1, 11, 1, 0, 49, 89, 1, 255, 5, 219, 1, 98, 1, 60, 1, 35, 24, 0, 24, 203, 1, 255, 7, 235, 24, 0, 24, 12, 1, 239, 1, 255, 30, 0, 25, 25, 1, 203, 1, 255, 29, 0, 26, 12, 1, 89, 1, 203, 1, 245, 1, 255, 26, 0, 28, 12, 1, 56, 1, 89, 1, 128, 25, 0, 11, 1, 3 };
+static const uint8_t image_data_FontT48_0x0056_mod[448] = { 0, 42, 5, 1, 35, 1, 98, 1, 0, 51, 11, 1, 60, 1, 176, 1, 235, 1, 255, 1, 0, 48, 5, 1, 60, 1, 141, 1, 219, 1, 255, 4, 0, 45, 5, 1, 35, 1, 98, 1, 176, 1, 255, 7, 0, 43, 11, 1, 60, 1, 176, 1, 235, 1, 255, 9, 0, 40, 5, 1, 60, 1, 141, 1, 219, 1, 255, 10, 239, 1, 175, 1, 0, 37, 5, 1, 35, 1, 98, 1, 176, 1, 255, 10, 245, 1, 203, 1, 128, 1, 25, 1, 0, 36, 11, 1, 60, 1, 176, 1, 235, 1, 255, 10, 239, 1, 175, 1, 56, 1, 12, 1, 0, 35, 5, 1, 60, 1, 141, 1, 219, 1, 255, 10, 245, 1, 175, 1, 89, 1, 25, 1, 0, 35, 5, 1, 35, 1, 98, 1, 176, 1, 255, 11, 203, 1, 128, 1, 56, 1, 0, 36, 11, 1, 60, 1, 176, 1, 235, 1, 255, 10, 239, 1, 175, 1, 89, 1, 12, 1, 0, 35, 11, 1, 60, 1, 141, 1, 219, 1, 255, 10, 245, 1, 203, 1, 128, 1, 25, 1, 0, 36, 35, 1, 98, 1, 219, 1, 255, 11, 239, 1, 128, 1, 56, 1, 12, 1, 0, 38, 235, 1, 255, 10, 245, 1, 175, 1, 89, 1, 25, 1, 0, 41, 255, 11, 159, 1, 35, 1, 5, 1, 0, 42, 128, 1, 239, 1, 255, 10, 235, 1, 176, 1, 60, 1, 11, 1, 0, 41, 25, 1, 89, 1, 175, 1, 239, 1, 255, 10, 219, 1, 141, 1, 60, 1, 11, 1, 0, 41, 25, 1, 89, 1, 203, 1, 245, 1, 255, 10, 219, 1, 98, 1, 35, 1, 5, 1, 0, 40, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 9, 235, 1, 176, 1, 98, 1, 11, 1, 0, 41, 12, 1, 56, 1, 175, 1, 239, 1, 255, 10, 219, 1, 141, 1, 60, 1, 11, 1, 0, 41, 25, 1, 89, 1, 175, 1, 239, 1, 255, 10, 219, 1, 141, 1, 35, 1, 5, 1, 0, 41, 25, 1, 128, 1, 203, 1, 245, 1, 255, 9, 235, 1, 176, 1, 98, 1, 35, 1, 0, 41, 12, 1, 56, 1, 128, 1, 239, 1, 255, 10, 235, 1, 141, 1, 60, 1, 0, 42, 25, 1, 89, 1, 175, 1, 239, 1, 255, 10, 0, 45, 25, 1, 89, 1, 203, 1, 245, 1, 255, 7, 0, 47, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 4, 0, 50, 12, 1, 56, 1, 175, 1, 239, 1, 255, 2, 0, 53, 25, 1, 89, 1, 175, 1, 0, 11 };
+static const uint8_t image_data_FontT48_0x0057_mod[776] = { 0, 42, 5, 1, 35, 1, 98, 1, 0, 50, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 1, 0, 47, 11, 1, 60, 1, 141, 1, 176, 1, 235, 1, 255, 4, 0, 44, 11, 1, 60, 1, 141, 1, 219, 1, 255, 8, 0, 41, 11, 1, 60, 1, 141, 1, 219, 1, 255, 11, 0, 37, 5, 1, 11, 1, 60, 1, 141, 1, 219, 1, 255, 10, 245, 1, 239, 1, 175, 1, 89, 1, 0, 34, 5, 1, 35, 1, 98, 1, 176, 1, 219, 1, 255, 10, 245, 1, 203, 1, 128, 1, 56, 1, 25, 1, 0, 33, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 10, 239, 1, 175, 1, 128, 1, 56, 1, 12, 1, 0, 33, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 9, 245, 1, 203, 1, 175, 1, 89, 1, 25, 1, 0, 34, 11, 1, 60, 1, 98, 1, 176, 1, 235, 1, 255, 9, 239, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 34, 11, 1, 60, 1, 141, 1, 219, 1, 255, 9, 245, 1, 239, 1, 175, 1, 89, 1, 25, 1, 12, 1, 0, 37, 219, 1, 255, 10, 203, 1, 128, 1, 56, 1, 25, 1, 0, 41, 203, 1, 245, 1, 255, 9, 154, 1, 60, 1, 11, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 219, 1, 141, 1, 60, 1, 11, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 219, 1, 141, 1, 60, 1, 11, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 219, 1, 141, 1, 60, 1, 11, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 219, 1, 141, 1, 60, 1, 35, 1, 5, 1, 0, 41, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 41, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 41, 12, 1, 56, 1, 89, 1, 175, 1, 239, 1, 255, 8, 235, 1, 176, 1, 98, 1, 0, 42, 5, 1, 35, 1, 124, 1, 255, 11, 0, 40, 11, 1, 98, 1, 176, 1, 235, 1, 255, 9, 245, 1, 203, 1, 128, 1, 0, 37, 11, 1, 60, 1, 141, 1, 219, 1, 255, 9, 239, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 35, 11, 1, 60, 1, 141, 1, 219, 1, 255, 9, 239, 1, 175, 1, 89, 1, 25, 1, 12, 1, 0, 35, 5, 1, 35, 1, 141, 1, 219, 1, 255, 9, 239, 1, 175, 1, 89, 1, 25, 1, 0, 36, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 8, 239, 1, 175, 1, 89, 1, 25, 1, 0, 36, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 7, 245, 1, 203, 1, 175, 1, 89, 1, 25, 1, 0, 37, 11, 1, 60, 1, 176, 1, 235, 1, 255, 7, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 39, 141, 1, 219, 1, 255, 9, 140, 1, 56, 1, 12, 1, 0, 42, 245, 1, 255, 10, 219, 1, 141, 1, 60, 1, 11, 1, 5, 1, 0, 40, 56, 1, 128, 1, 175, 1, 239, 1, 255, 10, 219, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 40, 25, 1, 89, 1, 175, 1, 239, 1, 255, 10, 235, 1, 176, 1, 98, 1, 60, 1, 11, 1, 0, 40, 25, 1, 89, 1, 175, 1, 239, 1, 255, 11, 219, 1, 141, 1, 60, 1, 11, 1, 5, 1, 0, 39, 25, 1, 89, 1, 128, 1, 203, 1, 245, 1, 255, 10, 219, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 39, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 10, 235, 1, 176, 1, 98, 1, 60, 1, 11, 1, 0, 39, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 11, 219, 1, 141, 1, 60, 1, 0, 40, 12, 1, 56, 1, 89, 1, 175, 1, 239, 1, 255, 11, 0, 44, 25, 1, 89, 1, 175, 1, 239, 1, 255, 8, 0, 47, 25, 1, 89, 1, 175, 1, 239, 1, 245, 1, 255, 4, 0, 50, 25, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 1, 0, 53, 12, 1, 56, 1, 128, 1, 0, 11 };
+static const uint8_t image_data_FontT48_0x0058_mod[532] = { 0, 11, 98, 1, 0, 55, 255, 1, 141, 1, 35, 1, 0, 29, 11, 1, 141, 1, 0, 22, 255, 2, 235, 1, 98, 1, 5, 1, 0, 26, 60, 1, 219, 1, 255, 1, 0, 22, 255, 4, 176, 1, 60, 1, 0, 23, 35, 1, 141, 1, 255, 3, 0, 22, 255, 6, 141, 1, 11, 1, 0, 19, 11, 1, 98, 1, 235, 1, 255, 4, 0, 22, 89, 1, 239, 1, 255, 5, 219, 1, 98, 1, 5, 1, 0, 16, 60, 1, 219, 1, 255, 5, 245, 1, 0, 23, 25, 1, 175, 1, 245, 1, 255, 5, 176, 1, 35, 1, 0, 13, 35, 1, 141, 1, 255, 6, 203, 1, 56, 1, 0, 25, 56, 1, 203, 1, 255, 5, 235, 1, 141, 1, 11, 1, 0, 9, 5, 1, 98, 1, 235, 1, 255, 5, 239, 1, 89, 1, 12, 1, 0, 27, 12, 1, 128, 1, 239, 1, 255, 5, 219, 1, 60, 1, 5, 1, 0, 6, 60, 1, 176, 1, 255, 6, 175, 1, 25, 1, 0, 31, 25, 1, 175, 1, 255, 6, 176, 1, 35, 1, 0, 3, 35, 1, 141, 1, 255, 6, 203, 1, 89, 1, 0, 35, 89, 1, 239, 1, 255, 5, 235, 1, 98, 1, 11, 1, 98, 1, 235, 1, 255, 5, 245, 1, 128, 1, 12, 1, 0, 37, 25, 1, 128, 1, 245, 1, 255, 5, 219, 1, 255, 6, 203, 1, 56, 1, 0, 41, 56, 1, 203, 1, 255, 9, 239, 1, 89, 1, 12, 1, 0, 43, 18, 1, 255, 9, 30, 1, 0, 44, 60, 1, 176, 1, 255, 9, 176, 1, 60, 1, 0, 41, 11, 1, 141, 1, 255, 6, 239, 1, 255, 6, 141, 1, 11, 1, 0, 37, 5, 1, 98, 1, 219, 1, 255, 6, 175, 1, 25, 1, 128, 1, 245, 1, 255, 5, 219, 1, 60, 1, 0, 35, 35, 1, 176, 1, 255, 6, 203, 1, 89, 1, 0, 3, 56, 1, 175, 1, 255, 6, 141, 1, 11, 1, 0, 31, 11, 1, 141, 1, 235, 1, 255, 5, 245, 1, 128, 1, 12, 1, 0, 6, 89, 1, 239, 1, 255, 5, 219, 1, 98, 1, 5, 1, 0, 27, 5, 1, 98, 1, 219, 1, 255, 6, 175, 1, 56, 1, 0, 9, 25, 1, 175, 1, 245, 1, 255, 5, 176, 1, 35, 1, 0, 25, 35, 1, 176, 1, 255, 6, 239, 1, 89, 1, 0, 13, 56, 1, 203, 1, 255, 5, 235, 1, 98, 1, 5, 1, 0, 22, 141, 1, 235, 1, 255, 5, 245, 1, 128, 1, 25, 1, 0, 15, 12, 1, 128, 1, 245, 1, 255, 5, 176, 1, 0, 22, 255, 6, 175, 1, 56, 1, 0, 19, 56, 1, 175, 1, 255, 5, 0, 22, 255, 4, 239, 1, 89, 1, 0, 23, 89, 1, 239, 1, 255, 3, 0, 22, 255, 2, 245, 1, 128, 1, 25, 1, 0, 25, 25, 1, 128, 1, 245, 1, 255, 1, 0, 22, 255, 1, 203, 1, 56, 1, 0, 29, 56, 1, 239, 1, 0, 22, 128, 1, 12, 1, 0, 31, 25, 1, 0, 11 };
+static const uint8_t image_data_FontT48_0x0059_mod[312] = { 0, 43, 5, 1, 98, 1, 0, 53, 35, 1, 176, 1, 255, 1, 0, 51, 11, 1, 141, 1, 235, 1, 255, 2, 0, 49, 5, 1, 98, 1, 219, 1, 255, 4, 0, 48, 60, 1, 176, 1, 255, 6, 0, 46, 35, 1, 141, 1, 255, 6, 203, 1, 89, 1, 0, 44, 11, 1, 141, 1, 235, 1, 255, 5, 239, 1, 128, 1, 12, 1, 0, 43, 5, 1, 98, 1, 219, 1, 255, 5, 245, 1, 175, 1, 25, 1, 0, 44, 60, 1, 176, 1, 255, 6, 175, 1, 56, 1, 0, 44, 35, 1, 141, 1, 255, 6, 203, 1, 89, 1, 0, 29, 5, 15, 11, 1, 98, 1, 235, 1, 255, 5, 239, 1, 128, 1, 12, 1, 0, 30, 176, 15, 219, 1, 255, 5, 245, 1, 175, 1, 25, 1, 0, 32, 255, 20, 203, 1, 56, 1, 0, 34, 255, 19, 153, 1, 12, 1, 0, 35, 255, 20, 141, 1, 35, 1, 0, 34, 203, 15, 239, 1, 255, 5, 235, 1, 98, 1, 11, 1, 0, 32, 12, 15, 25, 1, 175, 1, 245, 1, 255, 5, 219, 1, 60, 1, 5, 1, 0, 47, 56, 1, 203, 1, 255, 6, 176, 1, 60, 1, 0, 47, 12, 1, 89, 1, 239, 1, 255, 6, 141, 1, 35, 1, 0, 47, 25, 1, 128, 1, 239, 1, 255, 5, 235, 1, 98, 1, 11, 1, 0, 47, 25, 1, 175, 1, 245, 1, 255, 5, 219, 1, 60, 1, 5, 1, 0, 47, 56, 1, 203, 1, 255, 6, 176, 1, 60, 1, 0, 47, 12, 1, 89, 1, 239, 1, 255, 6, 0, 49, 25, 1, 128, 1, 245, 1, 255, 4, 0, 51, 56, 1, 175, 1, 255, 3, 0, 53, 89, 1, 203, 1, 255, 1, 0, 54, 12, 1, 128, 1, 0, 11 };
+static const uint8_t image_data_FontT48_0x005a_mod[386] = { 1, 2, 0, 11, 141, 1, 98, 1, 11, 1, 0, 27, 141, 4, 0, 22, 255, 2, 219, 1, 98, 1, 11, 1, 0, 25, 255, 4, 0, 22, 255, 4, 219, 1, 98, 1, 11, 1, 0, 23, 255, 4, 0, 22, 255, 6, 219, 1, 98, 1, 11, 1, 0, 21, 255, 4, 0, 22, 255, 8, 219, 1, 98, 1, 11, 1, 0, 19, 255, 4, 0, 22, 255, 10, 219, 1, 98, 1, 11, 1, 0, 17, 255, 4, 0, 22, 255, 4, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 15, 255, 4, 0, 22, 255, 4, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 13, 255, 4, 0, 22, 255, 4, 0, 2, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 11, 255, 4, 0, 22, 255, 4, 0, 4, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 9, 255, 4, 0, 22, 255, 4, 0, 6, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 7, 255, 4, 0, 22, 255, 4, 0, 8, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 5, 255, 4, 0, 22, 255, 4, 0, 10, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 3, 255, 4, 0, 22, 255, 4, 0, 12, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 11, 1, 0, 1, 255, 4, 0, 22, 255, 4, 0, 14, 25, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 255, 4, 0, 22, 255, 4, 0, 16, 25, 1, 128, 1, 239, 1, 255, 11, 0, 22, 255, 4, 0, 18, 25, 1, 128, 1, 239, 1, 255, 9, 0, 22, 255, 4, 0, 20, 25, 1, 128, 1, 239, 1, 255, 7, 0, 22, 255, 4, 0, 22, 25, 1, 128, 1, 239, 1, 255, 5, 0, 22, 255, 4, 0, 24, 25, 1, 128, 1, 239, 1, 255, 3, 0, 22, 255, 4, 0, 26, 25, 1, 128, 1, 239, 1, 245, 1, 0, 22, 175, 4, 0, 28, 25, 1, 56, 1, 0, 11, 1, 2 };
+static const uint8_t image_data_FontT48_0x005b_mod[90] = { 1, 4, 0, 1, 35, 45, 0, 11, 235, 45, 0, 11, 255, 45, 0, 11, 255, 45, 0, 11, 255, 45, 0, 11, 255, 4, 128, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 239, 4, 0, 37, 239, 4, 0, 11, 25, 4, 0, 37, 25, 4, 0, 10, 1, 1 };
+static const uint8_t image_data_FontT48_0x005c_mod[256] = { 1, 1, 0, 38, 11, 1, 60, 1, 141, 1, 219, 1, 255, 3, 0, 46, 5, 1, 35, 1, 141, 1, 219, 1, 255, 6, 0, 43, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 5, 245, 1, 203, 1, 128, 1, 0, 41, 11, 1, 98, 1, 176, 1, 235, 1, 255, 5, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 39, 11, 1, 60, 1, 141, 1, 219, 1, 255, 6, 203, 1, 128, 1, 56, 1, 12, 1, 0, 39, 5, 1, 60, 1, 141, 1, 219, 1, 255, 6, 239, 1, 175, 1, 89, 1, 12, 1, 0, 39, 5, 1, 35, 1, 98, 1, 176, 1, 255, 6, 239, 1, 175, 1, 89, 1, 25, 1, 0, 40, 35, 1, 98, 1, 176, 1, 235, 1, 255, 5, 245, 1, 203, 1, 89, 1, 25, 1, 0, 40, 11, 1, 60, 1, 141, 1, 235, 1, 255, 5, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 39, 11, 1, 60, 1, 141, 1, 219, 1, 255, 5, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 40, 35, 1, 141, 1, 219, 1, 255, 6, 239, 1, 175, 1, 56, 1, 12, 1, 0, 43, 235, 1, 255, 5, 239, 1, 175, 1, 89, 1, 25, 1, 0, 46, 255, 3, 245, 1, 175, 1, 89, 1, 25, 1, 0, 49, 245, 1, 203, 1, 128, 1, 56, 1, 0, 52, 56, 1, 12, 1, 0, 43, 1, 1 };
+static const uint8_t image_data_FontT48_0x005d_mod[90] = { 1, 1, 0, 1, 11, 4, 0, 37, 11, 4, 0, 11, 219, 4, 0, 37, 219, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 0, 37, 255, 4, 0, 11, 255, 4, 98, 37, 255, 4, 0, 11, 255, 45, 0, 11, 255, 45, 0, 11, 255, 45, 0, 11, 245, 45, 0, 11, 56, 45, 0, 10, 1, 4 };
+static const uint8_t image_data_FontT48_0x005e_mod[210] = { 1, 3, 0, 33, 60, 1, 0, 55, 255, 1, 141, 1, 35, 1, 0, 53, 255, 2, 235, 1, 98, 1, 11, 1, 0, 51, 175, 1, 245, 1, 255, 2, 219, 1, 60, 1, 5, 1, 0, 50, 56, 1, 203, 1, 255, 3, 176, 1, 60, 1, 0, 50, 12, 1, 89, 1, 239, 1, 255, 3, 141, 1, 35, 1, 0, 50, 25, 1, 128, 1, 239, 1, 255, 2, 235, 1, 98, 1, 11, 1, 0, 50, 25, 1, 175, 1, 245, 1, 255, 2, 219, 1, 98, 1, 0, 51, 56, 1, 203, 1, 255, 3, 0, 51, 11, 1, 154, 1, 255, 3, 0, 49, 11, 1, 98, 1, 219, 1, 255, 2, 245, 1, 175, 1, 0, 47, 5, 1, 60, 1, 219, 1, 255, 3, 203, 1, 56, 1, 0, 47, 35, 1, 176, 1, 255, 3, 239, 1, 89, 1, 12, 1, 0, 46, 35, 1, 141, 1, 235, 1, 255, 2, 239, 1, 128, 1, 25, 1, 0, 47, 98, 1, 235, 1, 255, 2, 245, 1, 175, 1, 25, 1, 0, 49, 255, 3, 203, 1, 56, 1, 0, 51, 255, 1, 203, 1, 89, 1, 12, 1, 0, 52, 175, 1, 12, 1, 0, 21, 1, 4 };
+static const uint8_t image_data_FontT48_0x005f_mod[102] = { 0, 5, 235, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 53, 239, 3, 0, 48 };
+static const uint8_t image_data_FontT48_0x0060_mod[88] = { 1, 7, 0, 48, 11, 1, 0, 54, 35, 1, 219, 1, 0, 52, 5, 1, 98, 1, 235, 1, 255, 1, 0, 51, 35, 1, 176, 1, 255, 3, 0, 49, 11, 1, 98, 1, 235, 1, 255, 4, 0, 48, 60, 1, 219, 1, 255, 4, 245, 1, 175, 1, 0, 48, 255, 4, 245, 1, 175, 1, 56, 1, 0, 49, 255, 2, 245, 1, 175, 1, 56, 1, 0, 51, 245, 1, 175, 1, 56, 1, 0, 53, 56, 1, 0, 250, 0, 212 };
+static const uint8_t image_data_FontT48_0x0061_mod[366] = { 1, 1, 0, 16, 11, 1, 35, 2, 11, 1, 5, 1, 0, 49, 35, 1, 141, 1, 219, 1, 235, 2, 219, 1, 176, 1, 60, 1, 5, 1, 0, 46, 60, 1, 235, 1, 255, 7, 176, 1, 11, 1, 0, 7, 35, 1, 141, 1, 60, 1, 0, 34, 60, 1, 255, 10, 219, 1, 5, 1, 0, 4, 35, 1, 141, 1, 235, 1, 255, 2, 0, 34, 255, 12, 176, 1, 0, 4, 113, 1, 255, 4, 141, 1, 0, 32, 141, 1, 255, 4, 175, 1, 89, 2, 128, 1, 245, 1, 255, 4, 35, 1, 0, 4, 128, 1, 255, 4, 0, 32, 255, 4, 239, 1, 0, 4, 56, 1, 255, 4, 235, 1, 0, 5, 255, 4, 60, 1, 0, 31, 255, 4, 25, 1, 0, 5, 89, 1, 255, 4, 0, 5, 89, 1, 255, 4, 0, 31, 255, 4, 0, 7, 255, 4, 98, 1, 0, 5, 255, 4, 0, 31, 255, 4, 0, 7, 89, 1, 255, 4, 0, 5, 255, 4, 0, 31, 255, 4, 0, 8, 255, 4, 0, 5, 255, 4, 0, 31, 239, 1, 255, 3, 0, 8, 255, 4, 0, 5, 255, 4, 0, 31, 25, 1, 255, 3, 11, 1, 0, 7, 255, 4, 0, 4, 11, 1, 255, 4, 0, 32, 255, 3, 219, 1, 0, 7, 255, 4, 0, 4, 219, 1, 255, 3, 245, 1, 0, 32, 89, 1, 255, 3, 11, 1, 0, 5, 60, 1, 255, 3, 203, 1, 0, 2, 5, 1, 98, 1, 255, 4, 56, 1, 0, 33, 175, 1, 255, 2, 219, 1, 35, 5, 255, 4, 47, 1, 60, 1, 98, 1, 176, 1, 255, 5, 0, 33, 11, 1, 141, 1, 255, 3, 235, 5, 255, 4, 235, 1, 255, 7, 175, 1, 0, 33, 219, 1, 255, 20, 203, 1, 0, 33, 60, 1, 255, 19, 245, 1, 175, 1, 12, 1, 0, 33, 255, 5, 245, 12, 239, 1, 203, 1, 175, 1, 56, 1, 0, 35, 255, 3, 203, 1, 89, 1, 56, 12, 25, 1, 12, 1, 0, 37, 245, 2, 128, 1, 12, 1, 0, 52, 56, 2, 0, 43, 1, 1 };
+static const uint8_t image_data_FontT48_0x0062_mod[302] = { 1, 2, 0, 11, 5, 35, 0, 21, 176, 35, 0, 21, 255, 35, 0, 21, 203, 1, 255, 34, 0, 21, 12, 1, 128, 1, 255, 33, 0, 22, 11, 1, 255, 3, 239, 1, 175, 13, 239, 1, 255, 3, 175, 12, 0, 22, 219, 1, 255, 3, 25, 1, 0, 13, 25, 1, 255, 3, 98, 1, 0, 32, 5, 1, 255, 3, 239, 1, 0, 15, 239, 1, 255, 3, 0, 32, 176, 1, 255, 3, 25, 1, 0, 15, 25, 1, 255, 3, 60, 1, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 35, 1, 0, 15, 141, 1, 255, 4, 0, 31, 245, 1, 255, 3, 235, 1, 0, 15, 255, 4, 245, 1, 0, 31, 56, 1, 255, 4, 11, 1, 0, 13, 141, 1, 255, 4, 56, 1, 0, 32, 255, 4, 219, 1, 11, 1, 0, 11, 98, 1, 255, 5, 0, 33, 128, 1, 255, 4, 219, 1, 98, 1, 11, 1, 5, 1, 0, 5, 5, 1, 35, 1, 141, 1, 255, 5, 128, 1, 0, 34, 239, 1, 255, 5, 219, 1, 176, 1, 141, 1, 98, 3, 141, 1, 176, 1, 235, 1, 255, 5, 239, 1, 0, 35, 25, 1, 239, 1, 255, 17, 239, 1, 25, 1, 0, 36, 25, 1, 203, 1, 255, 15, 203, 1, 25, 1, 0, 38, 12, 1, 128, 1, 239, 1, 255, 11, 239, 1, 128, 1, 12, 1, 0, 41, 25, 1, 89, 1, 175, 1, 239, 2, 245, 4, 239, 1, 203, 1, 128, 1, 25, 1, 0, 46, 25, 2, 56, 4, 25, 1, 12, 1, 0, 28, 1, 1 };
+static const uint8_t image_data_FontT48_0x0063_mod[306] = { 1, 1, 0, 19, 11, 1, 35, 1, 60, 5, 35, 1, 5, 1, 0, 44, 5, 1, 60, 1, 141, 1, 219, 1, 235, 1, 255, 5, 235, 1, 176, 1, 98, 1, 11, 1, 0, 41, 35, 1, 176, 1, 255, 12, 219, 1, 98, 1, 5, 1, 0, 38, 35, 1, 235, 1, 255, 15, 176, 1, 5, 1, 0, 36, 35, 1, 235, 1, 255, 17, 176, 1, 5, 1, 0, 35, 235, 1, 255, 5, 203, 1, 175, 1, 89, 4, 128, 1, 175, 1, 239, 1, 255, 5, 176, 1, 0, 34, 141, 1, 255, 4, 245, 1, 89, 1, 12, 1, 0, 7, 25, 1, 128, 1, 255, 5, 35, 1, 0, 33, 255, 4, 245, 1, 56, 1, 0, 11, 89, 1, 255, 4, 235, 1, 0, 32, 60, 1, 255, 4, 56, 1, 0, 13, 89, 1, 255, 4, 0, 32, 255, 4, 245, 1, 0, 15, 245, 1, 255, 3, 98, 1, 0, 31, 255, 4, 56, 1, 0, 15, 56, 1, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 16, 60, 1, 255, 4, 0, 31, 255, 4, 98, 1, 0, 15, 255, 4, 175, 1, 0, 31, 89, 1, 255, 4, 0, 14, 98, 1, 255, 4, 0, 33, 255, 4, 35, 1, 0, 12, 60, 1, 255, 4, 239, 1, 0, 33, 255, 3, 245, 1, 183, 1, 0, 12, 89, 1, 239, 1, 255, 3, 25, 1, 0, 33, 89, 1, 245, 1, 175, 1, 56, 1, 12, 1, 0, 13, 25, 1, 128, 1, 245, 1, 175, 1, 0, 35, 56, 1, 0, 18, 56, 1, 0, 23, 1, 1 };
+static const uint8_t image_data_FontT48_0x0064_mod[294] = { 1, 1, 0, 19, 5, 1, 11, 1, 35, 4, 11, 1, 5, 1, 0, 45, 5, 1, 60, 1, 141, 1, 176, 1, 219, 1, 235, 4, 219, 1, 176, 1, 98, 1, 35, 1, 0, 42, 35, 1, 176, 1, 255, 11, 235, 1, 141, 1, 11, 1, 0, 39, 98, 1, 235, 1, 255, 14, 219, 1, 60, 1, 0, 37, 98, 1, 255, 18, 98, 1, 0, 35, 35, 1, 255, 6, 239, 1, 203, 1, 128, 4, 175, 1, 239, 1, 255, 6, 98, 1, 0, 34, 235, 1, 255, 4, 245, 1, 128, 1, 25, 1, 12, 1, 0, 5, 25, 1, 89, 1, 203, 1, 255, 5, 11, 1, 0, 32, 11, 1, 255, 5, 56, 1, 0, 10, 12, 1, 175, 1, 255, 4, 219, 1, 0, 32, 219, 1, 255, 4, 89, 1, 0, 13, 203, 1, 255, 4, 5, 1, 0, 31, 255, 5, 0, 14, 12, 1, 255, 4, 176, 1, 0, 31, 255, 4, 89, 1, 0, 15, 175, 1, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 175, 1, 255, 3, 5, 1, 0, 15, 5, 1, 255, 3, 239, 1, 0, 32, 255, 3, 176, 1, 0, 15, 176, 1, 255, 3, 25, 1, 0, 32, 203, 1, 255, 3, 11, 1, 0, 13, 60, 1, 255, 3, 203, 1, 0, 32, 141, 1, 154, 1, 255, 3, 219, 1, 141, 13, 255, 4, 154, 1, 141, 11, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 203, 35, 0, 21, 12, 35, 0, 10, 1, 2 };
+static const uint8_t image_data_FontT48_0x0065_mod[406] = { 1, 1, 0, 19, 11, 1, 35, 1, 60, 1, 98, 3, 60, 1, 35, 1, 5, 1, 0, 44, 5, 1, 60, 1, 141, 1, 219, 1, 235, 1, 255, 5, 235, 1, 176, 1, 98, 1, 35, 1, 0, 41, 35, 1, 176, 1, 255, 12, 235, 1, 98, 1, 5, 1, 0, 38, 60, 1, 235, 1, 255, 15, 176, 1, 11, 1, 0, 36, 35, 1, 255, 8, 245, 1, 255, 9, 219, 1, 5, 1, 0, 35, 235, 1, 255, 5, 203, 1, 128, 1, 89, 1, 56, 1, 255, 3, 89, 1, 128, 1, 239, 1, 255, 4, 176, 1, 0, 34, 141, 1, 255, 4, 239, 1, 89, 1, 12, 1, 0, 3, 255, 3, 0, 2, 25, 1, 175, 1, 255, 4, 98, 1, 0, 33, 255, 4, 239, 1, 25, 1, 0, 5, 255, 3, 0, 4, 175, 1, 255, 4, 0, 32, 60, 1, 255, 4, 25, 1, 0, 6, 255, 3, 0, 5, 255, 4, 35, 1, 0, 31, 255, 4, 239, 1, 0, 7, 255, 3, 0, 5, 128, 1, 255, 3, 235, 1, 0, 31, 255, 4, 25, 1, 0, 7, 255, 3, 0, 6, 255, 4, 0, 31, 255, 4, 0, 8, 255, 3, 0, 6, 255, 4, 0, 31, 255, 4, 0, 8, 255, 3, 0, 6, 255, 4, 0, 31, 255, 4, 0, 8, 255, 3, 0, 6, 255, 4, 0, 31, 255, 4, 0, 8, 255, 3, 0, 6, 255, 4, 0, 31, 255, 4, 11, 1, 0, 7, 255, 3, 0, 5, 141, 1, 255, 3, 245, 1, 0, 31, 89, 1, 255, 3, 219, 1, 0, 7, 255, 3, 0, 4, 11, 1, 255, 4, 56, 1, 0, 32, 255, 4, 35, 1, 0, 6, 255, 3, 0, 3, 11, 1, 219, 1, 255, 4, 0, 33, 245, 1, 255, 3, 235, 1, 35, 1, 0, 5, 255, 3, 11, 2, 98, 1, 219, 1, 255, 4, 175, 1, 0, 33, 56, 1, 255, 3, 239, 1, 155, 1, 0, 5, 255, 3, 219, 2, 255, 5, 245, 1, 0, 35, 175, 1, 239, 1, 128, 1, 25, 1, 0, 6, 255, 9, 245, 1, 56, 1, 0, 36, 25, 1, 0, 8, 255, 8, 239, 1, 56, 1, 0, 46, 255, 5, 245, 1, 203, 1, 128, 1, 25, 1, 0, 47, 89, 1, 128, 3, 89, 1, 56, 1, 12, 1, 0, 26, 1, 1 };
+static const uint8_t image_data_FontT48_0x0066_mod[142] = { 1, 1, 0, 32, 60, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 31, 141, 21, 255, 4, 141, 2, 98, 1, 60, 1, 11, 1, 0, 26, 255, 29, 219, 1, 141, 1, 11, 1, 0, 24, 255, 31, 219, 1, 35, 1, 0, 23, 255, 32, 235, 1, 11, 1, 0, 22, 175, 21, 255, 4, 175, 2, 203, 1, 245, 1, 255, 4, 219, 1, 0, 43, 255, 4, 0, 2, 12, 1, 56, 1, 203, 1, 255, 4, 35, 1, 0, 42, 255, 4, 0, 4, 12, 1, 245, 1, 255, 3, 235, 1, 0, 42, 255, 4, 0, 5, 56, 1, 255, 4, 0, 42, 255, 4, 0, 6, 255, 4, 0, 42, 203, 4, 0, 6, 255, 4, 0, 42, 12, 4, 0, 6, 255, 4, 0, 10, 1, 2 };
+static const uint8_t image_data_FontT48_0x0067_mod[588] = { 1, 1, 0, 25, 11, 1, 35, 2, 11, 1, 5, 1, 0, 29, 41, 1, 98, 1, 11, 1, 0, 7, 5, 1, 35, 2, 11, 1, 0, 5, 5, 1, 60, 1, 141, 1, 219, 1, 235, 2, 219, 1, 176, 1, 98, 1, 35, 1, 0, 27, 176, 1, 255, 1, 219, 1, 60, 1, 0, 5, 60, 1, 176, 1, 235, 2, 219, 1, 35, 1, 0, 3, 11, 1, 176, 1, 255, 8, 235, 1, 60, 1, 0, 25, 5, 1, 255, 4, 141, 1, 0, 3, 5, 1, 255, 5, 235, 1, 11, 1, 0, 1, 5, 1, 219, 1, 255, 11, 98, 1, 0, 24, 176, 1, 255, 4, 89, 1, 0, 3, 176, 1, 255, 6, 219, 1, 0, 1, 176, 1, 255, 13, 35, 1, 0, 23, 255, 4, 203, 1, 0, 4, 255, 4, 128, 1, 89, 1, 255, 2, 35, 1, 255, 4, 245, 1, 203, 1, 128, 2, 175, 1, 245, 1, 255, 4, 235, 1, 0, 22, 11, 1, 255, 4, 12, 1, 0, 4, 255, 4, 0, 2, 128, 1, 255, 1, 235, 1, 255, 3, 239, 1, 56, 1, 12, 1, 0, 3, 56, 1, 203, 1, 255, 4, 11, 1, 0, 21, 219, 1, 255, 3, 239, 1, 0, 5, 255, 4, 0, 3, 255, 5, 25, 1, 0, 6, 12, 1, 255, 4, 219, 1, 0, 21, 255, 4, 25, 1, 0, 5, 255, 4, 0, 3, 255, 4, 89, 1, 0, 8, 89, 1, 255, 4, 0, 21, 255, 4, 0, 6, 245, 1, 255, 3, 0, 3, 255, 4, 0, 10, 255, 4, 0, 21, 255, 4, 0, 6, 56, 1, 255, 3, 60, 1, 0, 2, 255, 4, 0, 10, 255, 4, 0, 21, 255, 4, 0, 7, 255, 4, 0, 2, 255, 4, 0, 10, 255, 4, 0, 21, 255, 4, 0, 7, 255, 4, 0, 2, 255, 4, 11, 1, 0, 8, 11, 1, 255, 4, 0, 21, 255, 4, 0, 7, 255, 4, 0, 2, 245, 1, 255, 3, 219, 1, 0, 8, 219, 1, 255, 3, 245, 1, 0, 21, 203, 1, 255, 3, 141, 1, 0, 6, 255, 4, 0, 2, 56, 1, 255, 4, 141, 1, 11, 1, 0, 4, 11, 1, 141, 1, 255, 4, 56, 1, 0, 21, 12, 1, 255, 4, 5, 1, 0, 4, 35, 1, 255, 4, 0, 3, 255, 5, 219, 1, 141, 1, 98, 1, 60, 1, 98, 1, 219, 1, 255, 5, 0, 23, 255, 4, 176, 1, 11, 1, 0, 2, 11, 1, 235, 1, 255, 3, 245, 1, 0, 3, 89, 1, 255, 15, 11, 1, 0, 22, 128, 1, 255, 4, 219, 1, 141, 2, 219, 1, 255, 4, 56, 1, 0, 4, 175, 1, 255, 14, 219, 1, 11, 1, 0, 22, 239, 1, 255, 10, 245, 1, 0, 6, 128, 1, 245, 1, 255, 9, 175, 1, 255, 3, 204, 1, 0, 22, 25, 1, 239, 1, 255, 8, 245, 1, 56, 1, 0, 7, 56, 1, 175, 1, 239, 1, 245, 1, 255, 2, 245, 1, 239, 1, 175, 1, 89, 1, 0, 1, 239, 1, 255, 1, 239, 1, 25, 1, 0, 23, 25, 1, 175, 1, 245, 1, 255, 5, 203, 1, 56, 1, 0, 10, 25, 1, 56, 1, 89, 2, 56, 1, 25, 1, 0, 3, 25, 1, 245, 1, 25, 1, 0, 26, 56, 1, 128, 1, 175, 2, 128, 1, 89, 1, 12, 1, 0, 21, 56, 1, 0, 21, 1, 1 };
+static const uint8_t image_data_FontT48_0x0068_mod[156] = { 1, 2, 0, 11, 5, 35, 0, 21, 176, 35, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 128, 18, 239, 1, 255, 3, 134, 1, 128, 12, 0, 39, 25, 1, 245, 1, 255, 2, 176, 1, 0, 52, 56, 1, 255, 3, 141, 1, 0, 52, 203, 1, 255, 3, 0, 52, 12, 1, 255, 3, 98, 1, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 51, 60, 1, 255, 4, 0, 50, 5, 1, 255, 5, 0, 48, 5, 1, 35, 1, 176, 1, 255, 4, 175, 1, 0, 31, 98, 16, 141, 1, 176, 1, 235, 1, 255, 5, 0, 32, 255, 23, 128, 1, 0, 32, 255, 22, 175, 1, 0, 33, 255, 20, 239, 1, 89, 1, 0, 34, 239, 16, 203, 2, 175, 1, 89, 1, 25, 1, 0, 35, 25, 16, 12, 2, 0, 27, 1, 2 };
+static const uint8_t image_data_FontT48_0x0069_mod[92] = { 1, 1, 0, 32, 11, 4, 0, 52, 219, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 6, 5, 2, 0, 23, 98, 21, 255, 4, 0, 5, 98, 1, 176, 2, 98, 1, 0, 22, 255, 25, 0, 4, 141, 1, 255, 4, 141, 1, 0, 21, 255, 25, 0, 4, 255, 6, 0, 21, 255, 25, 0, 4, 255, 6, 0, 21, 239, 25, 0, 4, 128, 1, 255, 4, 128, 1, 0, 21, 25, 25, 0, 5, 89, 1, 175, 2, 89, 1, 0, 11, 1, 3 };
+static const uint8_t image_data_FontT48_0x006a_mod[180] = { 0, 1, 98, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 27, 60, 4, 0, 21, 255, 4, 11, 1, 0, 26, 255, 4, 0, 21, 175, 1, 255, 3, 219, 1, 0, 26, 255, 4, 0, 22, 255, 4, 11, 1, 0, 25, 255, 4, 0, 22, 255, 4, 219, 1, 35, 1, 0, 24, 255, 4, 0, 5, 35, 1, 98, 2, 35, 1, 0, 13, 128, 1, 255, 4, 235, 1, 141, 1, 98, 1, 60, 22, 255, 4, 0, 4, 60, 1, 235, 1, 255, 2, 235, 1, 60, 1, 0, 13, 245, 1, 255, 32, 0, 4, 255, 6, 0, 13, 56, 1, 245, 1, 255, 31, 0, 4, 255, 6, 0, 14, 56, 1, 203, 1, 255, 30, 0, 4, 203, 1, 255, 4, 203, 1, 0, 15, 12, 1, 89, 1, 175, 1, 203, 1, 239, 1, 245, 26, 0, 4, 12, 1, 175, 1, 239, 2, 175, 1, 12, 1, 0, 18, 12, 1, 25, 1, 56, 26, 0, 6, 25, 2, 0, 12, 1, 4 };
+static const uint8_t image_data_FontT48_0x006b_mod[284] = { 1, 2, 0, 11, 5, 35, 0, 21, 176, 35, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 128, 9, 255, 5, 128, 21, 0, 30, 128, 1, 255, 4, 141, 1, 5, 1, 0, 50, 128, 1, 255, 4, 176, 1, 11, 1, 0, 50, 128, 1, 255, 4, 219, 1, 35, 1, 0, 49, 11, 1, 255, 5, 235, 1, 60, 1, 0, 47, 60, 1, 219, 1, 255, 7, 98, 1, 0, 44, 11, 1, 141, 1, 255, 10, 141, 1, 5, 1, 0, 40, 5, 1, 60, 1, 219, 1, 255, 5, 239, 1, 89, 1, 245, 1, 255, 4, 176, 1, 11, 1, 0, 38, 35, 1, 176, 1, 255, 5, 245, 1, 128, 1, 25, 1, 0, 1, 56, 1, 239, 1, 255, 4, 219, 1, 35, 1, 0, 35, 5, 1, 98, 1, 235, 1, 255, 5, 203, 1, 56, 1, 0, 4, 25, 1, 203, 1, 255, 4, 235, 1, 60, 1, 0, 33, 35, 1, 176, 1, 255, 5, 239, 1, 128, 1, 12, 1, 0, 6, 12, 1, 175, 1, 255, 5, 0, 31, 11, 1, 141, 1, 235, 1, 255, 5, 175, 1, 25, 1, 0, 10, 128, 1, 255, 4, 0, 31, 219, 1, 255, 5, 239, 1, 89, 1, 0, 13, 89, 1, 245, 1, 255, 2, 0, 31, 255, 4, 245, 1, 175, 1, 25, 1, 0, 15, 56, 1, 239, 1, 255, 1, 0, 31, 255, 3, 203, 1, 56, 1, 0, 18, 25, 1, 245, 1, 0, 31, 255, 1, 245, 1, 128, 1, 12, 1, 0, 20, 56, 1, 0, 31, 203, 1, 56, 1, 0, 54, 12, 1, 0, 44 };
+static const uint8_t image_data_FontT48_0x006c_mod[84] = { 1, 3, 0, 15, 35, 1, 60, 1, 98, 29, 0, 23, 11, 1, 141, 1, 235, 1, 255, 30, 0, 22, 11, 1, 219, 1, 255, 32, 0, 22, 219, 1, 255, 33, 0, 21, 5, 1, 255, 5, 245, 1, 239, 1, 203, 27, 0, 21, 176, 1, 255, 4, 175, 1, 56, 1, 25, 1, 12, 27, 0, 21, 255, 4, 203, 1, 0, 51, 255, 4, 12, 1, 0, 51, 239, 4, 0, 52, 25, 4, 0, 41, 1, 1 };
+static const uint8_t image_data_FontT48_0x006d_mod[262] = { 1, 2, 0, 11, 5, 25, 0, 31, 176, 25, 0, 31, 255, 25, 0, 31, 255, 25, 0, 31, 255, 23, 203, 1, 89, 1, 0, 31, 175, 18, 239, 1, 255, 3, 100, 1, 12, 1, 0, 50, 25, 1, 239, 1, 255, 2, 219, 1, 5, 1, 0, 51, 25, 1, 255, 3, 176, 1, 0, 52, 175, 1, 255, 3, 5, 1, 0, 52, 255, 3, 176, 1, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 51, 98, 1, 255, 4, 0, 50, 11, 1, 255, 5, 0, 31, 35, 18, 60, 1, 219, 1, 255, 4, 239, 1, 0, 31, 235, 18, 255, 6, 25, 1, 0, 31, 255, 23, 245, 1, 0, 32, 255, 23, 56, 1, 0, 32, 255, 22, 100, 1, 0, 33, 89, 18, 175, 1, 255, 3, 219, 1, 5, 1, 0, 51, 128, 1, 255, 3, 176, 1, 0, 52, 239, 1, 255, 3, 0, 52, 25, 1, 255, 3, 98, 1, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 51, 35, 1, 255, 4, 0, 50, 5, 1, 235, 1, 255, 4, 0, 48, 5, 1, 35, 1, 176, 1, 255, 4, 239, 1, 0, 31, 98, 16, 141, 1, 176, 1, 235, 1, 255, 5, 25, 1, 0, 31, 255, 23, 203, 1, 0, 32, 255, 22, 239, 1, 12, 1, 0, 32, 255, 20, 245, 1, 175, 1, 25, 1, 0, 33, 203, 18, 175, 1, 128, 1, 56, 1, 0, 35, 12, 18, 0, 27, 1, 2 };
+static const uint8_t image_data_FontT48_0x006e_mod[170] = { 1, 2, 0, 11, 5, 25, 0, 31, 176, 25, 0, 31, 255, 25, 0, 31, 255, 25, 0, 31, 255, 22, 245, 1, 203, 1, 89, 1, 0, 31, 128, 18, 239, 1, 255, 3, 61, 1, 12, 1, 0, 50, 25, 1, 245, 1, 255, 2, 176, 1, 5, 1, 0, 51, 56, 1, 255, 3, 176, 1, 0, 52, 203, 1, 255, 3, 5, 1, 0, 51, 12, 1, 255, 3, 176, 1, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 51, 35, 1, 255, 4, 0, 50, 5, 1, 235, 1, 255, 4, 0, 48, 5, 1, 35, 1, 176, 1, 255, 4, 239, 1, 0, 31, 98, 15, 141, 2, 176, 1, 235, 1, 255, 5, 25, 1, 0, 31, 255, 23, 203, 1, 0, 32, 255, 22, 203, 1, 12, 1, 0, 32, 255, 20, 239, 1, 128, 1, 12, 1, 0, 33, 203, 17, 175, 2, 89, 1, 25, 1, 0, 35, 12, 17, 0, 28, 1, 2 };
+static const uint8_t image_data_FontT48_0x006f_mod[354] = { 1, 1, 0, 19, 11, 1, 35, 1, 60, 5, 35, 1, 11, 1, 0, 44, 5, 1, 60, 1, 141, 1, 219, 1, 235, 1, 255, 5, 235, 1, 219, 1, 141, 1, 60, 1, 5, 1, 0, 40, 35, 1, 176, 1, 255, 13, 176, 1, 35, 1, 0, 38, 98, 1, 235, 1, 255, 15, 235, 1, 60, 1, 0, 36, 98, 1, 255, 19, 60, 1, 0, 34, 11, 1, 255, 5, 245, 1, 203, 1, 128, 1, 89, 5, 175, 1, 203, 1, 255, 6, 5, 1, 0, 33, 219, 1, 255, 4, 175, 1, 56, 1, 12, 1, 0, 7, 12, 1, 89, 1, 239, 1, 255, 4, 176, 1, 0, 33, 255, 4, 128, 1, 0, 12, 25, 1, 203, 1, 255, 4, 0, 32, 141, 1, 255, 3, 245, 1, 0, 14, 12, 1, 255, 4, 98, 1, 0, 31, 255, 4, 56, 1, 0, 15, 128, 1, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 60, 1, 0, 15, 11, 1, 255, 4, 0, 31, 203, 1, 255, 4, 0, 15, 219, 1, 255, 3, 239, 1, 0, 31, 12, 1, 255, 4, 141, 1, 5, 1, 0, 12, 98, 1, 255, 4, 25, 1, 0, 32, 245, 1, 255, 4, 176, 1, 35, 1, 5, 1, 0, 8, 11, 1, 98, 1, 255, 5, 0, 33, 56, 1, 255, 5, 235, 1, 176, 1, 98, 1, 60, 1, 35, 3, 60, 1, 98, 1, 141, 1, 219, 1, 255, 5, 89, 1, 0, 34, 128, 1, 255, 8, 235, 3, 255, 8, 175, 1, 0, 36, 128, 1, 255, 17, 175, 1, 0, 38, 89, 1, 239, 1, 255, 13, 239, 1, 128, 1, 0, 40, 25, 1, 128, 1, 203, 1, 239, 1, 255, 7, 245, 1, 203, 1, 128, 1, 25, 1, 0, 43, 12, 1, 25, 1, 89, 2, 128, 4, 89, 1, 56, 1, 12, 1, 0, 27, 1, 1 };
+static const uint8_t image_data_FontT48_0x0070_mod[296] = { 1, 2, 0, 1, 5, 35, 0, 21, 176, 35, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 255, 35, 0, 21, 175, 11, 188, 1, 255, 3, 203, 1, 175, 13, 245, 1, 255, 3, 175, 2, 0, 32, 219, 1, 255, 3, 12, 1, 0, 13, 56, 1, 255, 3, 98, 1, 0, 32, 5, 1, 255, 3, 128, 1, 0, 15, 239, 1, 255, 3, 0, 32, 176, 1, 255, 3, 0, 16, 25, 1, 255, 3, 98, 1, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 60, 1, 0, 15, 11, 1, 255, 4, 0, 31, 255, 5, 0, 15, 219, 1, 255, 4, 0, 31, 128, 1, 255, 4, 60, 1, 0, 13, 11, 1, 255, 4, 203, 1, 0, 32, 255, 5, 35, 1, 0, 11, 11, 1, 219, 1, 255, 4, 12, 1, 0, 32, 203, 1, 255, 4, 235, 1, 98, 1, 11, 1, 0, 7, 11, 1, 60, 1, 219, 1, 255, 4, 245, 1, 0, 33, 12, 1, 255, 6, 219, 1, 141, 1, 98, 2, 60, 1, 98, 2, 141, 1, 219, 1, 255, 6, 56, 1, 0, 34, 89, 1, 255, 19, 128, 1, 0, 36, 89, 1, 239, 1, 255, 16, 128, 1, 0, 38, 25, 1, 175, 1, 245, 1, 255, 12, 203, 1, 89, 1, 0, 41, 56, 1, 128, 1, 203, 1, 239, 1, 245, 1, 255, 3, 245, 1, 239, 1, 203, 1, 175, 1, 89, 1, 12, 1, 0, 44, 12, 1, 25, 1, 56, 1, 89, 3, 56, 1, 25, 1, 12, 1, 0, 28, 1, 1 };
+static const uint8_t image_data_FontT48_0x0071_mod[290] = { 1, 1, 0, 19, 5, 1, 11, 1, 35, 5, 11, 1, 0, 45, 5, 1, 35, 1, 98, 1, 176, 1, 219, 1, 235, 5, 219, 1, 141, 1, 98, 1, 11, 1, 0, 41, 35, 1, 176, 1, 235, 1, 255, 11, 219, 1, 98, 1, 5, 1, 0, 38, 98, 1, 235, 1, 255, 15, 176, 1, 11, 1, 0, 36, 98, 1, 255, 18, 219, 1, 5, 1, 0, 34, 35, 1, 255, 6, 245, 1, 203, 1, 175, 1, 128, 3, 175, 1, 203, 1, 245, 1, 255, 5, 176, 1, 0, 34, 235, 1, 255, 5, 175, 1, 56, 1, 12, 1, 0, 5, 12, 1, 56, 1, 175, 1, 255, 5, 60, 1, 0, 32, 5, 1, 255, 5, 89, 1, 0, 11, 128, 1, 255, 5, 0, 32, 176, 1, 255, 4, 128, 1, 0, 13, 128, 1, 255, 4, 11, 1, 0, 31, 255, 5, 0, 15, 255, 4, 219, 1, 0, 31, 255, 4, 89, 1, 0, 15, 89, 1, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 203, 1, 255, 3, 0, 17, 255, 3, 245, 1, 0, 31, 12, 1, 255, 3, 60, 1, 0, 15, 141, 1, 255, 3, 56, 1, 0, 32, 203, 1, 255, 3, 0, 14, 5, 1, 255, 4, 0, 22, 98, 11, 111, 1, 255, 3, 98, 14, 176, 1, 255, 3, 89, 1, 0, 22, 255, 33, 141, 1, 35, 1, 0, 21, 255, 34, 235, 1, 0, 21, 255, 35, 0, 21, 203, 35, 0, 21, 12, 35, 0, 20, 1, 2 };
+static const uint8_t image_data_FontT48_0x0072_mod[120] = { 1, 3, 0, 11, 60, 25, 0, 31, 255, 25, 0, 31, 255, 25, 0, 31, 255, 25, 0, 31, 239, 15, 245, 1, 255, 5, 239, 4, 0, 31, 25, 15, 56, 1, 89, 1, 203, 1, 255, 3, 168, 1, 30, 1, 25, 2, 0, 48, 12, 1, 89, 1, 255, 3, 176, 1, 0, 52, 89, 1, 255, 3, 141, 1, 0, 52, 175, 1, 255, 3, 5, 1, 0, 52, 255, 3, 176, 1, 0, 52, 255, 4, 0, 52, 255, 4, 0, 51, 11, 1, 255, 4, 0, 51, 210, 1, 255, 4, 0, 51, 56, 1, 128, 1, 203, 1, 255, 2, 0, 53, 12, 1, 89, 1, 175, 1, 0, 20, 1, 1 };
+static const uint8_t image_data_FontT48_0x0073_mod[308] = { 1, 1, 0, 12, 41, 1, 60, 1, 11, 1, 0, 12, 11, 1, 60, 3, 35, 1, 5, 1, 0, 35, 176, 1, 255, 1, 219, 1, 141, 1, 35, 1, 0, 9, 98, 1, 219, 1, 255, 3, 235, 1, 176, 1, 35, 1, 0, 34, 255, 4, 183, 1, 0, 8, 141, 1, 255, 7, 235, 1, 11, 1, 0, 32, 35, 1, 255, 4, 12, 1, 0, 7, 98, 1, 255, 9, 219, 1, 0, 32, 235, 1, 255, 4, 0, 7, 11, 1, 255, 11, 5, 1, 0, 31, 255, 4, 89, 1, 0, 7, 219, 1, 255, 3, 239, 1, 128, 1, 89, 1, 128, 1, 255, 4, 176, 1, 0, 31, 255, 4, 0, 7, 5, 1, 255, 4, 25, 1, 0, 3, 175, 1, 255, 4, 0, 31, 255, 4, 0, 7, 176, 1, 255, 3, 89, 1, 0, 5, 255, 4, 0, 31, 255, 4, 0, 7, 255, 4, 0, 6, 255, 4, 0, 31, 255, 4, 0, 6, 141, 1, 255, 3, 175, 1, 0, 6, 255, 4, 0, 31, 255, 4, 98, 1, 0, 4, 60, 1, 255, 4, 0, 7, 255, 4, 0, 31, 175, 1, 255, 4, 98, 1, 35, 2, 98, 1, 255, 4, 239, 1, 0, 6, 98, 1, 255, 3, 203, 1, 0, 32, 255, 5, 235, 2, 255, 5, 25, 1, 0, 6, 255, 4, 12, 1, 0, 32, 203, 1, 255, 10, 175, 1, 0, 6, 98, 1, 255, 4, 0, 33, 12, 1, 239, 1, 255, 8, 203, 1, 0, 7, 89, 1, 175, 1, 203, 1, 245, 1, 175, 1, 0, 34, 25, 1, 175, 1, 245, 1, 255, 4, 245, 1, 175, 1, 12, 1, 0, 9, 12, 1, 56, 1, 0, 37, 56, 1, 128, 1, 175, 1, 128, 2, 56, 1, 0, 35, 1, 1 };
+static const uint8_t image_data_FontT48_0x0074_mod[170] = { 1, 1, 0, 32, 35, 4, 0, 52, 235, 4, 0, 52, 255, 4, 0, 35, 5, 1, 11, 1, 35, 1, 60, 14, 255, 4, 60, 5, 0, 29, 60, 1, 176, 1, 219, 1, 235, 1, 255, 23, 141, 1, 0, 27, 98, 1, 255, 28, 0, 26, 98, 1, 255, 29, 35, 1, 0, 24, 5, 1, 255, 7, 245, 13, 255, 4, 245, 6, 226, 1, 0, 24, 176, 1, 255, 4, 239, 1, 128, 1, 89, 1, 56, 13, 255, 4, 56, 7, 0, 24, 255, 4, 245, 1, 25, 1, 0, 15, 255, 4, 0, 31, 255, 4, 56, 1, 0, 16, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 0, 17, 255, 4, 0, 31, 255, 4, 5, 1, 0, 16, 239, 4, 0, 31, 203, 1, 255, 3, 176, 1, 0, 16, 25, 4, 0, 31, 12, 1, 175, 2, 128, 1, 89, 1, 0, 40, 1, 1 };
+static const uint8_t image_data_FontT48_0x0075_mod[160] = { 1, 2, 0, 17, 5, 1, 11, 1, 35, 17, 0, 34, 5, 1, 60, 1, 141, 1, 176, 1, 219, 1, 235, 17, 0, 33, 35, 1, 176, 1, 255, 21, 0, 32, 11, 1, 235, 1, 255, 22, 0, 32, 219, 1, 255, 23, 0, 31, 11, 1, 255, 5, 203, 1, 128, 1, 89, 17, 0, 31, 219, 1, 255, 4, 128, 1, 12, 1, 0, 49, 255, 4, 203, 1, 0, 51, 255, 4, 12, 1, 0, 51, 255, 4, 0, 52, 255, 4, 0, 52, 255, 4, 0, 52, 89, 1, 255, 3, 11, 1, 0, 52, 255, 3, 219, 1, 0, 52, 175, 1, 255, 3, 60, 1, 0, 52, 239, 1, 255, 3, 35, 1, 0, 49, 60, 2, 85, 1, 255, 3, 235, 1, 98, 1, 60, 17, 0, 31, 255, 25, 0, 31, 255, 25, 0, 31, 255, 25, 0, 31, 245, 25, 0, 31, 56, 25, 0, 20, 1, 2 };
+static const uint8_t image_data_FontT48_0x0076_mod[336] = { 1, 1, 0, 32, 11, 1, 60, 1, 176, 1, 255, 1, 0, 50, 11, 1, 98, 1, 219, 1, 255, 3, 0, 47, 5, 1, 35, 1, 141, 1, 219, 1, 255, 5, 0, 45, 11, 1, 60, 1, 176, 1, 235, 1, 255, 7, 0, 43, 11, 1, 98, 1, 219, 1, 255, 8, 239, 1, 175, 1, 0, 40, 5, 1, 35, 1, 141, 1, 219, 1, 255, 7, 245, 1, 203, 1, 89, 1, 25, 1, 0, 39, 5, 1, 60, 1, 176, 1, 235, 1, 255, 7, 239, 1, 128, 1, 56, 1, 12, 1, 0, 39, 11, 1, 98, 1, 176, 1, 255, 7, 245, 1, 175, 1, 89, 1, 25, 1, 0, 39, 5, 1, 35, 1, 141, 1, 219, 1, 255, 7, 203, 1, 128, 1, 56, 1, 0, 40, 5, 1, 60, 1, 176, 1, 235, 1, 255, 6, 239, 1, 175, 1, 89, 1, 12, 1, 0, 42, 176, 1, 255, 7, 203, 1, 89, 1, 25, 1, 0, 45, 175, 1, 245, 1, 255, 6, 154, 1, 60, 1, 5, 1, 0, 46, 56, 1, 175, 1, 239, 1, 255, 6, 176, 1, 98, 1, 35, 1, 0, 46, 25, 1, 128, 1, 239, 1, 255, 6, 235, 1, 141, 1, 60, 1, 5, 1, 0, 45, 25, 1, 89, 1, 203, 1, 255, 7, 176, 1, 98, 1, 35, 1, 0, 45, 12, 1, 89, 1, 175, 1, 245, 1, 255, 6, 235, 1, 141, 1, 60, 1, 11, 1, 0, 45, 56, 1, 128, 1, 239, 1, 255, 7, 219, 1, 98, 1, 35, 1, 0, 45, 25, 1, 128, 1, 203, 1, 255, 7, 235, 1, 141, 1, 60, 1, 0, 45, 12, 1, 89, 1, 203, 1, 245, 1, 255, 7, 0, 47, 12, 1, 56, 1, 175, 1, 245, 1, 255, 5, 0, 50, 56, 1, 128, 1, 239, 1, 255, 3, 0, 52, 25, 1, 128, 1, 203, 1, 255, 1, 0, 54, 12, 1, 89, 1, 0, 20 };
+static const uint8_t image_data_FontT48_0x0077_mod[580] = { 0, 34, 11, 1, 60, 1, 0, 51, 5, 1, 35, 1, 141, 1, 219, 1, 255, 1, 0, 48, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 3, 0, 46, 35, 1, 98, 1, 176, 1, 235, 1, 255, 6, 0, 43, 11, 1, 60, 1, 141, 1, 235, 1, 255, 9, 0, 40, 11, 1, 60, 1, 141, 1, 219, 1, 255, 9, 245, 1, 203, 1, 128, 1, 0, 37, 5, 1, 35, 1, 98, 1, 219, 1, 255, 9, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 35, 5, 1, 35, 1, 98, 1, 176, 1, 235, 1, 255, 8, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 36, 11, 1, 60, 1, 176, 1, 235, 1, 255, 8, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 38, 141, 1, 219, 1, 255, 8, 245, 1, 203, 1, 128, 1, 56, 1, 12, 1, 0, 41, 203, 1, 255, 8, 168, 1, 56, 1, 12, 1, 0, 44, 12, 1, 89, 1, 203, 1, 245, 1, 255, 5, 235, 1, 141, 1, 60, 1, 5, 1, 0, 45, 12, 1, 56, 1, 175, 1, 239, 1, 255, 6, 176, 1, 98, 1, 11, 1, 0, 46, 25, 1, 128, 1, 239, 1, 255, 6, 219, 1, 141, 1, 35, 1, 5, 1, 0, 45, 25, 1, 89, 1, 203, 1, 255, 6, 235, 1, 176, 1, 60, 1, 11, 1, 0, 45, 12, 1, 89, 1, 175, 1, 245, 1, 255, 6, 219, 1, 98, 1, 35, 1, 0, 46, 56, 1, 175, 1, 239, 1, 255, 6, 235, 1, 141, 1, 60, 1, 5, 1, 0, 45, 25, 1, 128, 1, 255, 8, 176, 1, 0, 45, 11, 1, 98, 1, 255, 7, 245, 1, 175, 1, 0, 43, 35, 1, 141, 1, 219, 1, 255, 6, 239, 1, 128, 1, 56, 1, 0, 41, 5, 1, 60, 1, 141, 1, 235, 1, 255, 6, 203, 1, 89, 1, 25, 1, 0, 41, 11, 1, 60, 1, 176, 1, 255, 6, 245, 1, 175, 1, 89, 1, 12, 1, 0, 41, 11, 1, 98, 1, 219, 1, 255, 6, 239, 1, 128, 1, 56, 1, 0, 41, 5, 1, 35, 1, 141, 1, 219, 1, 255, 6, 203, 1, 128, 1, 25, 1, 0, 41, 5, 1, 60, 1, 176, 1, 235, 1, 255, 5, 245, 1, 175, 1, 89, 1, 12, 1, 0, 43, 176, 1, 255, 8, 159, 1, 11, 1, 0, 45, 175, 1, 239, 1, 255, 8, 219, 1, 141, 1, 60, 1, 11, 1, 0, 43, 25, 1, 89, 1, 203, 1, 245, 1, 255, 8, 219, 1, 141, 1, 60, 1, 11, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 8, 219, 1, 98, 1, 35, 1, 5, 1, 0, 42, 12, 1, 56, 1, 128, 1, 239, 1, 255, 8, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 42, 25, 1, 89, 1, 175, 1, 239, 1, 255, 8, 235, 1, 176, 1, 60, 1, 11, 1, 0, 43, 25, 1, 89, 1, 175, 1, 245, 1, 255, 8, 219, 1, 0, 46, 56, 1, 128, 1, 203, 1, 245, 1, 255, 6, 0, 48, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 3, 0, 51, 12, 1, 56, 1, 175, 1, 239, 1, 255, 1, 0, 54, 25, 1, 89, 1, 0, 20 };
+static const uint8_t image_data_FontT48_0x0078_mod[396] = { 0, 11, 98, 1, 0, 23, 5, 1, 0, 31, 255, 1, 141, 1, 11, 1, 0, 20, 5, 1, 176, 1, 0, 31, 255, 2, 219, 1, 35, 1, 0, 18, 35, 1, 176, 1, 255, 1, 0, 31, 255, 3, 235, 1, 98, 1, 5, 1, 0, 14, 5, 1, 98, 1, 235, 1, 255, 2, 0, 31, 255, 5, 176, 1, 35, 1, 0, 12, 35, 1, 176, 1, 255, 4, 0, 31, 203, 1, 255, 5, 235, 1, 98, 1, 0, 10, 98, 1, 235, 1, 255, 5, 0, 31, 12, 1, 128, 1, 245, 1, 255, 5, 141, 1, 11, 1, 0, 6, 11, 1, 141, 1, 255, 5, 245, 1, 128, 1, 0, 33, 56, 1, 239, 1, 255, 5, 219, 1, 60, 1, 0, 4, 60, 1, 219, 1, 255, 5, 203, 1, 56, 1, 0, 35, 25, 1, 175, 1, 255, 6, 141, 1, 11, 2, 141, 1, 255, 6, 128, 1, 12, 1, 0, 38, 89, 1, 239, 1, 255, 5, 219, 2, 255, 5, 239, 1, 89, 1, 0, 41, 25, 1, 175, 1, 255, 10, 175, 1, 25, 1, 0, 44, 89, 1, 255, 8, 89, 1, 0, 45, 5, 1, 98, 1, 255, 8, 60, 1, 0, 44, 35, 1, 176, 1, 255, 10, 141, 1, 11, 1, 0, 41, 60, 1, 235, 1, 255, 5, 239, 1, 203, 1, 255, 5, 219, 1, 60, 1, 0, 38, 11, 1, 141, 1, 255, 6, 175, 1, 25, 1, 12, 1, 128, 1, 245, 1, 255, 5, 141, 1, 5, 1, 0, 35, 60, 1, 219, 1, 255, 5, 239, 1, 89, 1, 0, 4, 56, 1, 239, 1, 255, 5, 176, 1, 35, 1, 0, 32, 11, 1, 141, 1, 255, 6, 175, 1, 25, 1, 0, 6, 25, 1, 175, 1, 255, 5, 235, 1, 98, 1, 0, 31, 219, 1, 255, 5, 245, 1, 128, 1, 0, 10, 89, 1, 239, 1, 255, 5, 0, 31, 255, 5, 203, 1, 56, 1, 0, 12, 25, 1, 175, 1, 255, 4, 0, 31, 255, 3, 245, 1, 128, 1, 12, 1, 0, 15, 89, 1, 245, 1, 255, 2, 0, 31, 255, 2, 239, 1, 56, 1, 0, 18, 56, 1, 203, 1, 255, 1, 0, 31, 255, 1, 175, 1, 25, 1, 0, 20, 12, 1, 175, 1, 0, 20, 1, 1 };
+static const uint8_t image_data_FontT48_0x0079_mod[432] = { 0, 34, 11, 1, 60, 1, 0, 51, 5, 1, 35, 1, 98, 1, 219, 1, 255, 1, 0, 21, 5, 4, 0, 24, 11, 1, 60, 1, 176, 1, 235, 1, 255, 3, 0, 21, 176, 4, 0, 21, 5, 1, 35, 1, 141, 1, 219, 1, 255, 6, 0, 21, 255, 4, 0, 19, 11, 1, 98, 1, 176, 1, 235, 1, 255, 7, 245, 1, 0, 21, 255, 4, 5, 1, 0, 15, 5, 1, 60, 1, 141, 1, 219, 1, 255, 8, 239, 1, 175, 1, 56, 1, 0, 21, 175, 1, 255, 3, 176, 1, 0, 13, 35, 1, 98, 1, 176, 1, 255, 8, 245, 1, 175, 1, 89, 1, 25, 1, 0, 24, 255, 4, 5, 1, 0, 9, 11, 1, 60, 1, 141, 1, 235, 1, 255, 8, 203, 1, 128, 1, 56, 1, 0, 27, 245, 1, 255, 3, 176, 1, 5, 1, 0, 5, 5, 1, 35, 1, 98, 1, 219, 1, 255, 8, 239, 1, 175, 1, 89, 1, 12, 1, 0, 29, 56, 1, 255, 4, 176, 1, 60, 1, 35, 2, 60, 1, 98, 1, 176, 1, 235, 1, 255, 7, 245, 1, 203, 1, 89, 1, 25, 1, 0, 33, 175, 1, 255, 5, 235, 2, 255, 9, 203, 1, 128, 1, 56, 1, 12, 1, 0, 36, 175, 1, 255, 12, 239, 1, 175, 1, 89, 1, 12, 1, 0, 40, 128, 1, 203, 1, 255, 10, 85, 1, 11, 1, 0, 43, 12, 1, 89, 1, 175, 1, 239, 1, 255, 8, 219, 1, 141, 1, 60, 1, 5, 1, 0, 43, 25, 1, 89, 1, 175, 1, 239, 1, 255, 8, 176, 1, 98, 1, 35, 1, 5, 1, 0, 43, 25, 1, 128, 1, 203, 1, 245, 1, 255, 7, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 42, 12, 1, 56, 1, 128, 1, 203, 1, 255, 8, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 42, 12, 1, 89, 1, 175, 1, 239, 1, 255, 8, 235, 1, 176, 1, 98, 1, 35, 1, 5, 1, 0, 42, 25, 1, 89, 1, 175, 1, 239, 1, 255, 8, 235, 1, 176, 1, 98, 1, 35, 1, 0, 43, 25, 1, 128, 1, 203, 1, 245, 1, 255, 8, 235, 1, 0, 45, 12, 1, 56, 1, 128, 1, 203, 1, 245, 1, 255, 6, 0, 48, 12, 1, 56, 1, 175, 1, 239, 1, 255, 4, 0, 51, 25, 1, 89, 1, 175, 1, 239, 1, 255, 1, 0, 54, 25, 1, 128, 1, 0, 20 };
+static const uint8_t image_data_FontT48_0x007a_mod[330] = { 0, 11, 11, 1, 5, 1, 0, 19, 5, 4, 0, 31, 219, 1, 176, 1, 35, 1, 0, 18, 176, 4, 0, 31, 255, 2, 235, 1, 60, 1, 0, 17, 255, 4, 0, 31, 255, 4, 141, 1, 11, 1, 0, 15, 255, 4, 0, 31, 255, 5, 219, 1, 35, 1, 0, 14, 255, 4, 0, 31, 255, 6, 235, 1, 98, 1, 5, 1, 0, 12, 255, 4, 0, 31, 255, 8, 176, 1, 11, 1, 0, 11, 255, 4, 0, 31, 255, 9, 219, 1, 60, 1, 0, 10, 255, 4, 0, 31, 255, 4, 89, 1, 239, 1, 255, 5, 141, 1, 11, 1, 0, 8, 255, 4, 0, 31, 255, 4, 0, 1, 25, 1, 175, 1, 255, 5, 219, 1, 35, 1, 0, 7, 255, 4, 0, 31, 255, 4, 0, 3, 89, 1, 239, 1, 255, 4, 235, 1, 98, 1, 5, 1, 0, 5, 255, 4, 0, 31, 255, 4, 0, 4, 25, 1, 203, 1, 255, 5, 176, 1, 11, 1, 0, 4, 255, 4, 0, 31, 255, 4, 0, 5, 12, 1, 128, 1, 245, 1, 255, 4, 219, 1, 60, 1, 0, 3, 255, 4, 0, 31, 255, 4, 0, 7, 56, 1, 203, 1, 255, 5, 141, 1, 5, 1, 0, 1, 255, 4, 0, 31, 255, 4, 0, 8, 12, 1, 128, 1, 255, 5, 176, 1, 35, 1, 255, 4, 0, 31, 255, 4, 0, 10, 89, 1, 239, 1, 255, 4, 235, 1, 255, 4, 0, 31, 255, 4, 0, 11, 25, 1, 175, 1, 255, 8, 0, 31, 255, 4, 0, 13, 89, 1, 239, 1, 255, 6, 0, 31, 255, 4, 0, 14, 25, 1, 175, 1, 255, 5, 0, 31, 255, 4, 0, 16, 128, 1, 245, 1, 255, 3, 0, 31, 255, 4, 0, 17, 56, 1, 203, 1, 255, 2, 0, 31, 203, 4, 0, 18, 12, 1, 128, 1, 175, 1, 0, 31, 12, 4, 0, 41 };
+static const uint8_t image_data_FontT48_0x007b_mod[356] = { 0, 23, 35, 2, 0, 54, 235, 2, 0, 53, 5, 1, 255, 2, 11, 1, 0, 36, 5, 1, 11, 2, 5, 1, 0, 12, 176, 1, 255, 2, 219, 1, 0, 11, 5, 1, 11, 2, 0, 20, 11, 1, 98, 1, 176, 1, 219, 2, 176, 1, 141, 1, 98, 1, 35, 1, 5, 1, 0, 7, 60, 1, 255, 2, 239, 1, 255, 1, 98, 1, 0, 7, 11, 1, 60, 1, 141, 1, 176, 1, 219, 2, 141, 1, 35, 1, 0, 17, 11, 1, 219, 1, 255, 7, 235, 1, 176, 1, 141, 1, 60, 1, 35, 4, 98, 1, 255, 3, 25, 1, 255, 2, 141, 1, 60, 1, 35, 3, 98, 1, 141, 1, 219, 1, 255, 6, 235, 1, 35, 1, 0, 16, 219, 1, 255, 12, 235, 4, 255, 3, 239, 1, 0, 1, 175, 1, 255, 3, 235, 3, 255, 10, 235, 1, 5, 1, 0, 14, 141, 1, 255, 20, 25, 1, 0, 2, 239, 1, 255, 16, 176, 1, 0, 14, 255, 6, 203, 1, 175, 2, 203, 1, 239, 1, 245, 1, 255, 7, 245, 1, 89, 1, 0, 3, 25, 1, 239, 1, 255, 6, 245, 1, 239, 1, 175, 2, 203, 1, 245, 1, 255, 4, 0, 13, 60, 1, 255, 4, 239, 1, 89, 1, 12, 1, 0, 2, 12, 1, 25, 1, 56, 1, 128, 1, 175, 1, 239, 1, 245, 3, 203, 1, 56, 1, 0, 5, 25, 1, 175, 1, 245, 3, 203, 1, 128, 1, 56, 1, 25, 1, 0, 2, 12, 1, 56, 1, 255, 4, 98, 1, 0, 12, 255, 5, 25, 1, 0, 9, 25, 1, 56, 3, 12, 1, 0, 8, 56, 3, 12, 1, 0, 7, 89, 1, 255, 4, 0, 12, 255, 4, 175, 1, 0, 35, 255, 4, 0, 12, 255, 4, 0, 36, 255, 4, 0, 12, 255, 4, 0, 36, 255, 4, 0, 12, 255, 4, 0, 36, 255, 4, 0, 12, 255, 4, 0, 36, 255, 4, 0, 12, 239, 4, 0, 36, 239, 4, 0, 12, 25, 4, 0, 36, 25, 4, 0, 11 };
+static const uint8_t image_data_FontT48_0x007c_mod[26] = { 1, 10, 0, 5, 60, 39, 0, 17, 255, 39, 0, 17, 255, 39, 0, 17, 245, 39, 0, 17, 56, 39, 0, 12, 1, 10 };
+static const uint8_t image_data_FontT48_0x007d_mod[376] = { 0, 1, 35, 4, 0, 36, 35, 4, 0, 12, 235, 4, 0, 36, 235, 4, 0, 12, 255, 4, 0, 36, 255, 4, 0, 12, 255, 4, 0, 36, 255, 4, 0, 12, 255, 4, 0, 36, 255, 4, 0, 12, 255, 4, 11, 1, 0, 35, 255, 4, 0, 12, 255, 4, 219, 1, 0, 35, 255, 4, 0, 12, 239, 1, 255, 4, 60, 1, 0, 8, 5, 1, 35, 1, 60, 1, 98, 1, 60, 1, 11, 1, 0, 7, 11, 1, 60, 1, 98, 1, 60, 1, 11, 1, 5, 1, 0, 6, 98, 1, 255, 4, 0, 12, 25, 1, 255, 5, 98, 1, 35, 1, 11, 1, 5, 1, 11, 1, 35, 1, 60, 1, 141, 1, 176, 1, 235, 1, 255, 3, 219, 1, 60, 1, 0, 5, 35, 1, 219, 1, 255, 3, 219, 1, 176, 1, 60, 1, 35, 1, 11, 1, 5, 1, 11, 1, 98, 1, 255, 4, 89, 1, 0, 13, 255, 6, 235, 1, 219, 1, 176, 1, 219, 1, 235, 1, 255, 9, 98, 1, 0, 3, 35, 1, 235, 1, 255, 7, 235, 1, 219, 1, 176, 1, 219, 1, 255, 5, 0, 14, 89, 1, 255, 20, 35, 1, 0, 1, 5, 1, 235, 1, 255, 16, 175, 1, 0, 15, 203, 1, 255, 11, 245, 1, 239, 1, 203, 2, 239, 1, 255, 3, 235, 1, 0, 1, 176, 1, 255, 2, 245, 1, 239, 1, 203, 1, 239, 1, 255, 10, 239, 1, 0, 16, 12, 1, 175, 1, 255, 6, 245, 1, 239, 1, 175, 1, 128, 1, 56, 1, 25, 1, 12, 2, 25, 1, 89, 1, 239, 1, 255, 2, 35, 1, 255, 2, 128, 1, 56, 1, 25, 1, 12, 1, 25, 1, 89, 1, 128, 1, 203, 1, 245, 1, 255, 5, 239, 1, 25, 1, 0, 18, 89, 1, 175, 1, 203, 2, 175, 1, 128, 1, 56, 1, 25, 1, 0, 8, 25, 1, 255, 2, 235, 1, 255, 1, 89, 1, 0, 7, 12, 1, 56, 1, 128, 1, 175, 1, 203, 1, 175, 1, 128, 1, 25, 1, 0, 21, 12, 2, 0, 13, 175, 1, 255, 2, 203, 1, 0, 12, 12, 1, 0, 17, 1, 3 };
+static const uint8_t image_data_FontT48_0x007e_mod[130] = { 1, 3, 0, 24, 35, 1, 11, 1, 0, 54, 235, 1, 219, 1, 98, 1, 5, 1, 0, 52, 239, 1, 255, 2, 176, 1, 5, 1, 0, 51, 25, 1, 203, 1, 255, 2, 176, 1, 0, 52, 12, 1, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 0, 52, 141, 1, 255, 2, 245, 1, 0, 52, 255, 3, 56, 1, 0, 52, 255, 3, 0, 52, 98, 1, 255, 2, 245, 1, 0, 52, 255, 3, 56, 1, 0, 52, 255, 3, 0, 53, 255, 3, 0, 53, 255, 3, 11, 1, 0, 52, 128, 1, 255, 2, 219, 1, 35, 1, 0, 52, 128, 1, 245, 1, 255, 1, 235, 1, 0, 53, 56, 1, 175, 1, 203, 1, 0, 27, 1, 4 };
+
+static const tImageComp FontT48_0x00b0_mod = {  image_data_FontT48_0x00b0,  image_data_FontT48_0x00b0_mod, 146, 14, 56 };
+static const tImageComp FontT48_0x0020_mod = {  image_data_FontT48_0x0020,  image_data_FontT48_0x0020_mod, 2, 14, 56 };
+static const tImageComp FontT48_0x0021_mod = {  image_data_FontT48_0x0021,  image_data_FontT48_0x0021_mod, 154, 18, 56 };
+static const tImageComp FontT48_0x0022_mod = {  image_data_FontT48_0x0022,  image_data_FontT48_0x0022_mod, 94, 16, 56 };
+static const tImageComp FontT48_0x0023_mod = {  image_data_FontT48_0x0023,  image_data_FontT48_0x0023_mod, 546, 26, 56 };
+static const tImageComp FontT48_0x0024_mod = {  image_data_FontT48_0x0024,  image_data_FontT48_0x0024_mod, 400, 25, 56 };
+static const tImageComp FontT48_0x0025_mod = {  image_data_FontT48_0x0025,  image_data_FontT48_0x0025_mod, 726, 29, 56 };
+static const tImageComp FontT48_0x0026_mod = {  image_data_FontT48_0x0026,  image_data_FontT48_0x0026_mod, 492, 34, 56 };
+static const tImageComp FontT48_0x0027_mod = {  image_data_FontT48_0x0027,  image_data_FontT48_0x0027_mod, 52, 8, 56 };
+static const tImageComp FontT48_0x0028_mod = {  image_data_FontT48_0x0028,  image_data_FontT48_0x0028_mod, 294, 18, 56 };
+static const tImageComp FontT48_0x0029_mod = {  image_data_FontT48_0x0029,  image_data_FontT48_0x0029_mod, 272, 18, 56 };
+static const tImageComp FontT48_0x002a_mod = {  image_data_FontT48_0x002a,  image_data_FontT48_0x002a_mod, 224, 18, 56 };
+static const tImageComp FontT48_0x002b_mod = {  image_data_FontT48_0x002b,  image_data_FontT48_0x002b_mod, 102, 25, 56 };
+static const tImageComp FontT48_0x002c_mod = {  image_data_FontT48_0x002c,  image_data_FontT48_0x002c_mod, 140, 18, 56 };
+static const tImageComp FontT48_0x002d_mod = {  image_data_FontT48_0x002d,  image_data_FontT48_0x002d_mod, 54, 18, 56 };
+static const tImageComp FontT48_0x002e_mod = {  image_data_FontT48_0x002e,  image_data_FontT48_0x002e_mod, 74, 18, 56 };
+static const tImageComp FontT48_0x002f_mod = {  image_data_FontT48_0x002f,  image_data_FontT48_0x002f_mod, 274, 25, 56 };
+static const tImageComp FontT48_0x0030_mod = {  image_data_FontT48_0x0030,  image_data_FontT48_0x0030_mod, 426, 25, 56 };
+static const tImageComp FontT48_0x0031_mod = {  image_data_FontT48_0x0031,  image_data_FontT48_0x0031_mod, 96, 25, 56 };
+static const tImageComp FontT48_0x0032_mod = {  image_data_FontT48_0x0032,  image_data_FontT48_0x0032_mod, 386, 25, 56 };
+static const tImageComp FontT48_0x0033_mod = {  image_data_FontT48_0x0033,  image_data_FontT48_0x0033_mod, 378, 25, 56 };
+static const tImageComp FontT48_0x0034_mod = {  image_data_FontT48_0x0034,  image_data_FontT48_0x0034_mod, 254, 25, 56 };
+static const tImageComp FontT48_0x0035_mod = {  image_data_FontT48_0x0035,  image_data_FontT48_0x0035_mod, 334, 25, 56 };
+static const tImageComp FontT48_0x0036_mod = {  image_data_FontT48_0x0036,  image_data_FontT48_0x0036_mod, 446, 25, 56 };
+static const tImageComp FontT48_0x0037_mod = {  image_data_FontT48_0x0037,  image_data_FontT48_0x0037_mod, 336, 25, 56 };
+static const tImageComp FontT48_0x0038_mod = {  image_data_FontT48_0x0038,  image_data_FontT48_0x0038_mod, 486, 25, 56 };
+static const tImageComp FontT48_0x0039_mod = {  image_data_FontT48_0x0039,  image_data_FontT48_0x0039_mod, 446, 25, 56 };
+static const tImageComp FontT48_0x003a_mod = {  image_data_FontT48_0x003a,  image_data_FontT48_0x003a_mod, 142, 18, 56 };
+static const tImageComp FontT48_0x003b_mod = {  image_data_FontT48_0x003b,  image_data_FontT48_0x003b_mod, 200, 18, 56 };
+static const tImageComp FontT48_0x003c_mod = {  image_data_FontT48_0x003c,  image_data_FontT48_0x003c_mod, 214, 25, 56 };
+static const tImageComp FontT48_0x003d_mod = {  image_data_FontT48_0x003d,  image_data_FontT48_0x003d_mod, 174, 25, 56 };
+static const tImageComp FontT48_0x003e_mod = {  image_data_FontT48_0x003e,  image_data_FontT48_0x003e_mod, 216, 25, 56 };
+static const tImageComp FontT48_0x003f_mod = {  image_data_FontT48_0x003f,  image_data_FontT48_0x003f_mod, 312, 18, 56 };
+static const tImageComp FontT48_0x0040_mod = {  image_data_FontT48_0x0040,  image_data_FontT48_0x0040_mod, 774, 37, 56 };
+static const tImageComp FontT48_0x0041_mod = {  image_data_FontT48_0x0041,  image_data_FontT48_0x0041_mod, 472, 28, 56 };
+static const tImageComp FontT48_0x0042_mod = {  image_data_FontT48_0x0042,  image_data_FontT48_0x0042_mod, 378, 27, 56 };
+static const tImageComp FontT48_0x0043_mod = {  image_data_FontT48_0x0043,  image_data_FontT48_0x0043_mod, 380, 29, 56 };
+static const tImageComp FontT48_0x0044_mod = {  image_data_FontT48_0x0044,  image_data_FontT48_0x0044_mod, 322, 29, 56 };
+static const tImageComp FontT48_0x0045_mod = {  image_data_FontT48_0x0045,  image_data_FontT48_0x0045_mod, 210, 26, 56 };
+static const tImageComp FontT48_0x0046_mod = {  image_data_FontT48_0x0046,  image_data_FontT48_0x0046_mod, 154, 26, 56 };
+static const tImageComp FontT48_0x0047_mod = {  image_data_FontT48_0x0047,  image_data_FontT48_0x0047_mod, 434, 32, 56 };
+static const tImageComp FontT48_0x0048_mod = {  image_data_FontT48_0x0048,  image_data_FontT48_0x0048_mod, 122, 31, 56 };
+static const tImageComp FontT48_0x0049_mod = {  image_data_FontT48_0x0049,  image_data_FontT48_0x0049_mod, 34, 13, 56 };
+static const tImageComp FontT48_0x004a_mod = {  image_data_FontT48_0x004a,  image_data_FontT48_0x004a_mod, 162, 23, 56 };
+static const tImageComp FontT48_0x004b_mod = {  image_data_FontT48_0x004b,  image_data_FontT48_0x004b_mod, 354, 28, 56 };
+static const tImageComp FontT48_0x004c_mod = {  image_data_FontT48_0x004c,  image_data_FontT48_0x004c_mod, 92, 24, 56 };
+static const tImageComp FontT48_0x004d_mod = {  image_data_FontT48_0x004d,  image_data_FontT48_0x004d_mod, 758, 36, 56 };
+static const tImageComp FontT48_0x004e_mod = {  image_data_FontT48_0x004e,  image_data_FontT48_0x004e_mod, 252, 31, 56 };
+static const tImageComp FontT48_0x004f_mod = {  image_data_FontT48_0x004f,  image_data_FontT48_0x004f_mod, 492, 32, 56 };
+static const tImageComp FontT48_0x0050_mod = {  image_data_FontT48_0x0050,  image_data_FontT48_0x0050_mod, 238, 27, 56 };
+static const tImageComp FontT48_0x0051_mod = {  image_data_FontT48_0x0051,  image_data_FontT48_0x0051_mod, 564, 34, 56 };
+static const tImageComp FontT48_0x0052_mod = {  image_data_FontT48_0x0052,  image_data_FontT48_0x0052_mod, 344, 28, 56 };
+static const tImageComp FontT48_0x0053_mod = {  image_data_FontT48_0x0053,  image_data_FontT48_0x0053_mod, 414, 23, 56 };
+static const tImageComp FontT48_0x0054_mod = {  image_data_FontT48_0x0054,  image_data_FontT48_0x0054_mod, 120, 28, 56 };
+static const tImageComp FontT48_0x0055_mod = {  image_data_FontT48_0x0055,  image_data_FontT48_0x0055_mod, 202, 31, 56 };
+static const tImageComp FontT48_0x0056_mod = {  image_data_FontT48_0x0056,  image_data_FontT48_0x0056_mod, 448, 28, 56 };
+static const tImageComp FontT48_0x0057_mod = {  image_data_FontT48_0x0057,  image_data_FontT48_0x0057_mod, 776, 41, 56 };
+static const tImageComp FontT48_0x0058_mod = {  image_data_FontT48_0x0058,  image_data_FontT48_0x0058_mod, 532, 27, 56 };
+static const tImageComp FontT48_0x0059_mod = {  image_data_FontT48_0x0059,  image_data_FontT48_0x0059_mod, 312, 27, 56 };
+static const tImageComp FontT48_0x005a_mod = {  image_data_FontT48_0x005a,  image_data_FontT48_0x005a_mod, 386, 26, 56 };
+static const tImageComp FontT48_0x005b_mod = {  image_data_FontT48_0x005b,  image_data_FontT48_0x005b_mod, 90, 18, 56 };
+static const tImageComp FontT48_0x005c_mod = {  image_data_FontT48_0x005c,  image_data_FontT48_0x005c_mod, 256, 17, 56 };
+static const tImageComp FontT48_0x005d_mod = {  image_data_FontT48_0x005d,  image_data_FontT48_0x005d_mod, 90, 18, 56 };
+static const tImageComp FontT48_0x005e_mod = {  image_data_FontT48_0x005e,  image_data_FontT48_0x005e_mod, 210, 25, 56 };
+static const tImageComp FontT48_0x005f_mod = {  image_data_FontT48_0x005f,  image_data_FontT48_0x005f_mod, 102, 25, 56 };
+static const tImageComp FontT48_0x0061_mod = {  image_data_FontT48_0x0061,  image_data_FontT48_0x0061_mod, 366, 25, 56 };
+static const tImageComp FontT48_0x0062_mod = {  image_data_FontT48_0x0062,  image_data_FontT48_0x0062_mod, 302, 27, 56 };
+static const tImageComp FontT48_0x0063_mod = {  image_data_FontT48_0x0063,  image_data_FontT48_0x0063_mod, 306, 24, 56 };
+static const tImageComp FontT48_0x0064_mod = {  image_data_FontT48_0x0064,  image_data_FontT48_0x0064_mod, 294, 27, 56 };
+static const tImageComp FontT48_0x0065_mod = {  image_data_FontT48_0x0065,  image_data_FontT48_0x0065_mod, 406, 26, 56 };
+static const tImageComp FontT48_0x0066_mod = {  image_data_FontT48_0x0066,  image_data_FontT48_0x0066_mod, 142, 18, 56 };
+static const tImageComp FontT48_0x0067_mod = {  image_data_FontT48_0x0067,  image_data_FontT48_0x0067_mod, 588, 24, 56 };
+static const tImageComp FontT48_0x0068_mod = {  image_data_FontT48_0x0068,  image_data_FontT48_0x0068_mod, 156, 26, 56 };
+static const tImageComp FontT48_0x0069_mod = {  image_data_FontT48_0x0069,  image_data_FontT48_0x0069_mod, 92, 14, 56 };
+static const tImageComp FontT48_0x006a_mod = {  image_data_FontT48_0x006a,  image_data_FontT48_0x006a_mod, 180, 18, 56 };
+static const tImageComp FontT48_0x006b_mod = {  image_data_FontT48_0x006b,  image_data_FontT48_0x006b_mod, 284, 25, 56 };
+static const tImageComp FontT48_0x006c_mod = {  image_data_FontT48_0x006c,  image_data_FontT48_0x006c_mod, 84, 14, 56 };
+static const tImageComp FontT48_0x006d_mod = {  image_data_FontT48_0x006d,  image_data_FontT48_0x006d_mod, 262, 40, 56 };
+static const tImageComp FontT48_0x006e_mod = {  image_data_FontT48_0x006e,  image_data_FontT48_0x006e_mod, 170, 26, 56 };
+static const tImageComp FontT48_0x006f_mod = {  image_data_FontT48_0x006f,  image_data_FontT48_0x006f_mod, 354, 26, 56 };
+static const tImageComp FontT48_0x0070_mod = {  image_data_FontT48_0x0070,  image_data_FontT48_0x0070_mod, 296, 27, 56 };
+static const tImageComp FontT48_0x0071_mod = {  image_data_FontT48_0x0071,  image_data_FontT48_0x0071_mod, 290, 27, 56 };
+static const tImageComp FontT48_0x0072_mod = {  image_data_FontT48_0x0072,  image_data_FontT48_0x0072_mod, 120, 20, 56 };
+static const tImageComp FontT48_0x0073_mod = {  image_data_FontT48_0x0073,  image_data_FontT48_0x0073_mod, 308, 19, 56 };
+static const tImageComp FontT48_0x0074_mod = {  image_data_FontT48_0x0074,  image_data_FontT48_0x0074_mod, 170, 19, 56 };
+static const tImageComp FontT48_0x0075_mod = {  image_data_FontT48_0x0075,  image_data_FontT48_0x0075_mod, 160, 26, 56 };
+static const tImageComp FontT48_0x0076_mod = {  image_data_FontT48_0x0076,  image_data_FontT48_0x0076_mod, 336, 24, 56 };
+static const tImageComp FontT48_0x0077_mod = {  image_data_FontT48_0x0077,  image_data_FontT48_0x0077_mod, 580, 36, 56 };
+static const tImageComp FontT48_0x0078_mod = {  image_data_FontT48_0x0078,  image_data_FontT48_0x0078_mod, 396, 24, 56 };
+static const tImageComp FontT48_0x0079_mod = {  image_data_FontT48_0x0079,  image_data_FontT48_0x0079_mod, 432, 24, 56 };
+static const tImageComp FontT48_0x007a_mod = {  image_data_FontT48_0x007a,  image_data_FontT48_0x007a_mod, 330, 23, 56 };
+static const tImageComp FontT48_0x007b_mod = {  image_data_FontT48_0x007b,  image_data_FontT48_0x007b_mod, 356, 18, 56 };
+static const tImageComp FontT48_0x007c_mod = {  image_data_FontT48_0x007c,  image_data_FontT48_0x007c_mod, 26, 25, 56 };
+static const tImageComp FontT48_0x007d_mod = {  image_data_FontT48_0x007d,  image_data_FontT48_0x007d_mod, 376, 18, 56 };
+static const tImageComp FontT48_0x007e_mod = {  image_data_FontT48_0x007e,  image_data_FontT48_0x007e_mod, 130, 25, 56 };
+
+static const tImageComp* FontT48_Comp[] = {
+
+  &FontT48_0x0020_mod,
+  &FontT48_0x0021_mod,
+  &FontT48_0x0022_mod,
+  &FontT48_0x0023_mod,
+  &FontT48_0x0024_mod,
+  &FontT48_0x0025_mod,
+  &FontT48_0x0026_mod,
+  &FontT48_0x0027_mod,
+  &FontT48_0x0028_mod,
+  &FontT48_0x0029_mod,
+  &FontT48_0x002a_mod,
+  &FontT48_0x002b_mod,
+  &FontT48_0x002c_mod,
+  &FontT48_0x002d_mod,
+  &FontT48_0x002e_mod,
+  &FontT48_0x002f_mod,
+  &FontT48_0x0030_mod,
+  &FontT48_0x0031_mod,
+  &FontT48_0x0032_mod,
+  &FontT48_0x0033_mod,
+  &FontT48_0x0034_mod,
+  &FontT48_0x0035_mod,
+  &FontT48_0x0036_mod,
+  &FontT48_0x0037_mod,
+  &FontT48_0x0038_mod,
+  &FontT48_0x0039_mod,
+  &FontT48_0x003a_mod,
+  &FontT48_0x003b_mod,
+  &FontT48_0x003c_mod,
+  &FontT48_0x003d_mod,
+  &FontT48_0x003e_mod,
+  &FontT48_0x003f_mod,
+  &FontT48_0x0040_mod,
+  &FontT48_0x0041_mod,
+  &FontT48_0x0042_mod,
+  &FontT48_0x0043_mod,
+  &FontT48_0x0044_mod,
+  &FontT48_0x0045_mod,
+  &FontT48_0x0046_mod,
+  &FontT48_0x0047_mod,
+  &FontT48_0x0048_mod,
+  &FontT48_0x0049_mod,
+  &FontT48_0x004a_mod,
+  &FontT48_0x004b_mod,
+  &FontT48_0x004c_mod,
+  &FontT48_0x004d_mod,
+  &FontT48_0x004e_mod,
+  &FontT48_0x004f_mod,
+  &FontT48_0x0050_mod,
+  &FontT48_0x0051_mod,
+  &FontT48_0x0052_mod,
+  &FontT48_0x0053_mod,
+  &FontT48_0x0054_mod,
+  &FontT48_0x0055_mod,
+  &FontT48_0x0056_mod,
+  &FontT48_0x0057_mod,
+  &FontT48_0x0058_mod,
+  &FontT48_0x0059_mod,
+  &FontT48_0x005a_mod,
+  &FontT48_0x005b_mod,
+  &FontT48_0x005c_mod,
+  &FontT48_0x005d_mod,
+  &FontT48_0x005e_mod,
+  &FontT48_0x005f_mod,
+  &FontT48_0x00b0_mod,
+  &FontT48_0x0061_mod,
+  &FontT48_0x0062_mod,
+  &FontT48_0x0063_mod,
+  &FontT48_0x0064_mod,
+  &FontT48_0x0065_mod,
+  &FontT48_0x0066_mod,
+  &FontT48_0x0067_mod,
+  &FontT48_0x0068_mod,
+  &FontT48_0x0069_mod,
+  &FontT48_0x006a_mod,
+  &FontT48_0x006b_mod,
+  &FontT48_0x006c_mod,
+  &FontT48_0x006d_mod,
+  &FontT48_0x006e_mod,
+  &FontT48_0x006f_mod,
+  &FontT48_0x0070_mod,
+  &FontT48_0x0071_mod,
+  &FontT48_0x0072_mod,
+  &FontT48_0x0073_mod,
+  &FontT48_0x0074_mod,
+  &FontT48_0x0075_mod,
+  &FontT48_0x0076_mod,
+  &FontT48_0x0077_mod,
+  &FontT48_0x0078_mod,
+  &FontT48_0x0079_mod,
+  &FontT48_0x007a_mod,
+  &FontT48_0x007b_mod,
+  &FontT48_0x007c_mod,
+  &FontT48_0x007d_mod,
+  &FontT48_0x007e_mod
+};
+
+
--- a/BootLoader/Src/base_bootlader.c	Sat Nov 15 15:16:14 2025 +0100
+++ b/BootLoader/Src/base_bootlader.c	Sat Nov 15 19:29:44 2025 +0100
@@ -223,18 +223,9 @@
 #include "stm32f4xx_hal_flash_ex.h"
 #include "stm32f4xx_hal_wwdg.h"
 
-#ifdef BOOTLOADER_STANDALONE
-#include "Fonts/Font_T144_plus.h"
-#include "Fonts/Font_T84.h"
-#include "Fonts/Font_T105.h"
-#include "Fonts/Font_T54.h"
-#include "Fonts/Font_T48_plus.h"
-#include "Fonts/Font_T24.h"
-#include "Fonts/Font_T42.h"
-#include "Fonts/image_battery.h"
+#include "font_T48_min.h"
+#include "font_T24_min.h"
 #include "Fonts/image_heinrichs_weikamp.h"
-#include "Fonts/image_ostc.h"
-#endif
 
 // From Discovery/Inc (shall be shared...)
 #include "data_exchange_main.h"
@@ -248,6 +239,9 @@
 #include <stdio.h>
 #include <string.h> // for memcopy
 
+
+extern void decompressFont(const tFont* pFont, tImageComp** pFontComp);
+
 /* Private define ------------------------------------------------------------*/
 #define BUFFER_SIZE         ((uint32_t)0x00177000)
 #define WRITE_READ_ADDR     ((uint32_t)0x0000)
@@ -268,8 +262,8 @@
 	.signature = "mh",
 
 	.release_year   = 25,
-	.release_month  = 1,
-	.release_day    = 13,
+	.release_month  = 11,
+	.release_day    = 15,
 	.release_sub    = 0,
 
 	/* max 48 with trailing 0 */
@@ -286,7 +280,7 @@
 {
 
 	// first 52 bytes
-	.primarySerial = 0xFFFF,
+	.primarySerial = 0x06a4,
 	.primaryLicence	= 0x00,
 	.revision8bit = 0x02,
 	.production_year = 0x19,
@@ -418,8 +412,7 @@
 	}
 }
 
-
-int main(void)
+int __attribute__((optimize("O0"))) main(void)
 {
 
 /*
@@ -449,7 +442,7 @@
 	/* button press is only 40 to 50 us low */
 	MX_GPIO_One_Button_only_Init();
 
-	uint32_t i = 500000;
+	uint32_t i = 4000000;
 
 	callForUpdate = __HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST);
 
@@ -473,7 +466,7 @@
 		}
 		if(i)
 		{
-			i = 200000;
+			i = 4000000;
 			while(!MX_GPIO_Read_The_One_Button() && i)
 			{
 				i--;
@@ -481,30 +474,12 @@
 			}
 			if(i)
 			{
-				i = 200000;
+				i = 4000000;
 				while(MX_GPIO_Read_The_One_Button() && i)
 				{
 					i--;
 					__NOP();
 				}
-				if(i)
-				{
-					i = 200000;
-					while(!MX_GPIO_Read_The_One_Button() && i)
-					{
-						i--;
-						__NOP();
-					}
-					if(i)
-					{
-						i = 200000;
-						while(MX_GPIO_Read_The_One_Button() && i)
-						{
-							i--;
-							__NOP();
-						}
-					}
-				}
 			}
 		}
 	}
@@ -514,6 +489,10 @@
 
 	MX_SPI_Init();
 	SDRAM_Config();
+
+	decompressFont(&FontT24min, (tImageComp**)&FontT24_Comp);
+	decompressFont(&FontT48min, (tImageComp**)&FontT48_Comp);
+
 	HAL_Delay(100);
 
 	GFX_init1_no_DMA(&pLayerInvisible, 2);
@@ -709,21 +688,17 @@
 	tComm_init();
 
 	tInfo_button_text("exit","","sleep");
-	tInfo_newpage("bootloader 250113");
+	tInfo_newpage("bootloader 251115");
 	tInfo_write("start bluetooth");
-	tInfo_write("");
 	tInfo_write(textVersion);
+#if 0
 	if(tComm_Set_Bluetooth_Name(0) == 0xFF)
+#else
+	if(hardwareDataGetPointer()->production_bluetooth_name_set == 0xFF)
+#endif
 	{
 		tInfo_write("init bluetooth");
-		if(isNewDisplay())
-		{
-			tComm_StartBlueModBaseInit();
-		}
-		else
-		{
-			tComm_StartBlueModConfig();
-		}
+		tComm_StartBlueModBaseInit();
 	}
 	else
 	{
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Src/display_mini.c	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,1163 @@
+
+#include "stm32f4xx_hal.h" /* for HAL_Delay() */
+#include "ostc.h"
+#include "display.h"
+
+#define TFT_ENABLE_EXTENDED_COMMANDS	0xB9
+#define TFT_SET_POWER					0xB1
+#define TFT_SLEEP_OUT					0x11
+#define TFT_DISPLAY_INVERSION_OFF		0x20
+#define TFT_MEMORY_ACCESS_ONTROL		0x36
+#define TFT_INTERFACE_PIXEL_FORMAT		0x3A
+#define TFT_SET_RGB_INTERFACE_RELATED	0xB3
+#define TFT_SET_DISPLAY_WAVEFORM		0xB4
+#define TFT_SET_PANEL					0xCC
+#define TFT_SET_GAMMA_CURVE_RELATED		0xE0
+#define TFT_DISPLAY_ON					0x29
+#define TFT_DISPLAY_OFF					0x28
+#define TFT_SLEEP_IN					0x10
+
+#define OLED_SCTE_SET_31h				0x31		// 0x0008
+#define OLED_WCWE_SET_32h				0x32		// 0x0014
+#define OLED_GATELESS1_30h				0x30		// 0x0002
+#define OLED_GATELESS2_27h				0x27		// 0x0000
+#define	OLED_OSCILLATOR					0x11		// 0x00A1
+#define OLED_VBP_SET_12h				0x12		// 0x0008
+#define OLED_VFP_SET_13h				0x13		// 0x0008
+#define OLED_DISPLAY_CON_15h			0x15		// 0x0000
+#define OLED_COLOR_DEPTH_SET_16h		0x16		// 0x0000
+#define OLED_PENTILE_KEY_EFh			0xEF		// 0x00D0 or 0x00E8
+#define	OLED_PENTILE1_A0h				0xA0		// 0x0063
+#define	OLED_PENTILE2_A1h				0xA1		// 0x00C0
+#define	OLED_PENTILE3_A2h				0xA2		// 0x0032
+#define	OLED_PENTILE4_A3h				0xA3		// 0x0002
+#define	OLED_BRIGHTNESS_CTRL_39h		0x39		// 0044h
+// gamma table 0x40 - 0x66
+#define OLED_BOOSTING_FREQ				0x17		// 0x0022
+#define OLED_AMP_SET_18h				0x18		// 0x0033
+#define OLED_GAMMA_AMP_19h				0x19		// 0x0003
+#define OLED_POWER_CONTROL2_1Ah			0x1A		// 0x0001
+#define	OLED_POWER_CONTROL2_1Bh			0x1B		//
+#define	OLED_POWER_CONTROL2_1Ch			0x1C		//
+#define OLED_INTERNAL_LOGIC_VOLTAGE		0x22		// VCC*0,65 = 3,3V * 0,55 = 0x00A2
+#define OLED_POWER_SET					0x23		// VC1OUT = VCI X 0.98 (default) = 0x00
+#define OLED_POWER_SET2					0x24		// VREG2OUT = 5,4V, VREG1OUT = 4,2V =0x77
+#define OLED_DISPLAY_CONDITION_SET_26h	0x26		// 0x00A0
+#define	OLED_STB_BY_OFF_1Dh				0x1D		// 00A0 + 300ms wait
+#define	OLED_DDISP_ON_14h				0x14		// 0003
+
+static void Display_Error_Handler(void);
+static void display_power_on__2_of_2__post_RGB_display1(void);
+void display_1_brightness_max(void);
+void display_1_brightness_high(void);
+void display_1_brightness_std(void);
+void display_1_brightness_eco(void);
+void display_1_brightness_cave(void);
+
+uint8_t brightness_screen1;
+
+void display_power_on__1_of_2__pre_RGB(void)
+{
+	/* reset system */
+	HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select
+
+	HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_RESET);
+	HAL_Delay(10);
+	HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_SET);
+	HAL_Delay(25);
+
+	/* RGB signals should be now for 2 frames or more (datasheet) */
+}
+
+
+static void send(uint8_t *pData, uint16_t inputlength)
+{
+	HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_RESET); // chip select
+
+	if(HAL_SPI_Transmit(&hspiDisplay,(uint8_t*)pData, inputlength, 10000) != HAL_OK)
+		Display_Error_Handler();
+
+	while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY)
+  {
+  }
+	HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select
+}
+
+void display_power_off(void)
+{
+	uint8_t aTxBuffer[3];
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_DDISP_ON_14h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+	HAL_Delay(25);
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_STB_BY_OFF_1Dh;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xA1;
+	send((uint8_t*)aTxBuffer, 2);
+	HAL_Delay(200);
+	HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_RESET);
+}
+
+
+void display_power_on__2_of_2__post_RGB(void)
+{
+	display_power_on__2_of_2__post_RGB_display1();
+}
+
+void display_power_on__2_of_2__post_RGB_display1(void)
+{
+	uint8_t aTxBuffer[3];
+
+	aTxBuffer[0] = 0x71;	// Read chip Index & revision number
+	aTxBuffer[1] = 0x00;	// Dummy write - reads out 0x27
+	aTxBuffer[1] = 0x00;	// Dummy write - reads out 0x96
+	send((uint8_t*)aTxBuffer, 3);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_OSCILLATOR;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xA4;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_SCTE_SET_31h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x08;//8
+	send((uint8_t*)aTxBuffer, 2);
+
+	/*//debug read
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_SCTE_SET_31h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x73;	// Read internal register
+	aTxBuffer[1] = 0x00;	// Dummy write - reads out 0x08 (The just-set OLED_SCTE_SET value)
+	send((uint8_t*)aTxBuffer, 2);
+	*/
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_WCWE_SET_32h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x14;//14
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_GATELESS1_30h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x02;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_GATELESS2_27h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x01;
+	send((uint8_t*)aTxBuffer, 2);
+
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_VBP_SET_12h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x08;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_VFP_SET_13h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x0C;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_DISPLAY_CON_15h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x01;		//SS=0
+	//aTxBuffer[1] = 0x11;		//SS=1
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_COLOR_DEPTH_SET_16h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_PENTILE_KEY_EFh;	// write-only register...
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xD0;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xE8;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_PENTILE1_A0h;	// write-only register...
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x63;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_PENTILE2_A1h;	// write-only register...
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xC0;				// SID1&SID0=00
+//	aTxBuffer[1] = 0xC4;				// SID1&SID0=01    CC C8 C4 C0
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_PENTILE3_A2h;	// write-only register...
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x32;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_PENTILE4_A3h;	// write-only register...
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x02;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_BRIGHTNESS_CTRL_39h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x44;//44
+	send((uint8_t*)aTxBuffer, 2);
+
+
+	display_1_brightness_std();			// boot brightness
+
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_BOOSTING_FREQ;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x22;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_AMP_SET_18h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x22;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_GAMMA_AMP_19h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x02;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_POWER_CONTROL2_1Ah;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	/*
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_POWER_CONTROL2_1Bh;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x4B;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_POWER_CONTROL2_1Ch;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x05;
+	send((uint8_t*)aTxBuffer, 2);
+	*/
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_INTERNAL_LOGIC_VOLTAGE;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xA2;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_POWER_SET;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_POWER_SET2;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x77;
+	send((uint8_t*)aTxBuffer, 2);
+
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_DISPLAY_CONDITION_SET_26h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xA0;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_STB_BY_OFF_1Dh;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0xA0;
+	send((uint8_t*)aTxBuffer, 2);
+
+	HAL_Delay(250);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = OLED_DDISP_ON_14h;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x03;
+	send((uint8_t*)aTxBuffer, 2);
+}
+
+void display_1_brightness_max(void)
+{
+	uint8_t aTxBuffer[3];
+
+	if (brightness_screen1 == 4)
+	{
+		// do nothing
+	}
+	else
+	{
+		// GAMMA L=250
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x40;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x00;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x41;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x3F;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x42;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x2A;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x43;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x27;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x44;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x27;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x45;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x1F;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x46;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x44;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x50;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x00;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x51;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x00;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x52;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x17;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x53;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x24;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x54;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x26;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x55;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x1F;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x56;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x43;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x60;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x00;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x61;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x3F;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x62;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x2A;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x63;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x25;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x64;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x24;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x65;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x1B;
+		send((uint8_t*)aTxBuffer, 2);
+
+		aTxBuffer[0] = 0x70;
+		aTxBuffer[1] = 0x66;
+		send((uint8_t*)aTxBuffer, 2);
+		aTxBuffer[0] = 0x72;
+		aTxBuffer[1] = 0x5C;
+		send((uint8_t*)aTxBuffer, 2);
+
+		brightness_screen1=4;
+	}
+}
+
+void display_1_brightness_high(void)
+{
+	uint8_t aTxBuffer[3];
+	if (brightness_screen1 == 3)
+	{
+		// do nothing
+	}
+	else
+	{
+	// GAMMA L=200
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x40;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x41;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x42;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2A;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x43;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x27;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x44;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x27;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x45;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x1F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x46;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x44;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x50;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x51;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x52;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x17;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x53;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x24;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x54;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x26;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x55;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x1F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x56;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x43;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x60;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x61;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x62;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2A;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x63;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x25;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x64;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x24;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x65;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x1B;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x66;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x5C;
+	send((uint8_t*)aTxBuffer, 2);
+
+	brightness_screen1=3;
+	}
+}
+
+
+void display_1_brightness_std(void)
+{
+	uint8_t aTxBuffer[3];
+
+	if (brightness_screen1 == 2)
+	{
+		// do nothing
+	}
+	else
+	{
+	// GAMMA L=150
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x40;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x41;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x42;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2D;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x43;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x29;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x44;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x28;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x45;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x23;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x46;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x37;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x50;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x51;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x52;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x0B;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x53;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x25;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x54;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x28;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x55;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x22;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x56;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x36;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x60;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x61;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x62;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2B;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x63;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x28;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x64;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x26;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x65;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x1F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x66;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x4A;
+	send((uint8_t*)aTxBuffer, 2);
+
+	brightness_screen1=2;
+	}
+}
+
+void display_1_brightness_eco(void)
+{
+	uint8_t aTxBuffer[3];
+
+	if (brightness_screen1 == 1)
+	{
+		// do nothing
+	}
+	else
+	{
+	// GAMMA L=100
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x40;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x41;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x42;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x30;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x43;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2A;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x44;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2B;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x45;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x24;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x46;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x50;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x51;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x52;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x53;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x25;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x54;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x29;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x55;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x24;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x56;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2E;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x60;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x61;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x62;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x63;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x29;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x64;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x29;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x65;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x21;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x66;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	brightness_screen1=1;
+	}
+}
+
+void display_1_brightness_cave(void)
+{
+	uint8_t aTxBuffer[3];
+
+	if (brightness_screen1 == 0)
+	{
+		// do nothing
+	}
+	else
+	{
+	// GAMMA L=50
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x40;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x41;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x42;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3C;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x43;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2C;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x44;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2D;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x45;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x27;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x46;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x24;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x50;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x51;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x52;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x53;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x22;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x54;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2A;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x55;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x27;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x56;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x23;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x60;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x00;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x61;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3F;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x62;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x3B;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x63;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2C;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x64;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x2B;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x65;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x24;
+	send((uint8_t*)aTxBuffer, 2);
+
+	aTxBuffer[0] = 0x70;
+	aTxBuffer[1] = 0x66;
+	send((uint8_t*)aTxBuffer, 2);
+	aTxBuffer[0] = 0x72;
+	aTxBuffer[1] = 0x31;
+	send((uint8_t*)aTxBuffer, 2);
+
+	brightness_screen1=0;
+	}
+}
+
+static void Display_Error_Handler(void)
+{
+  //while(1)
+  {
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Src/externCPU2bootloader_mini.c	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,294 @@
+/**
+  ******************************************************************************
+  * @file    externCPU2bootloader.c Template
+  * @author  heinrichs weikamp gmbh
+  * @version V0.0.1
+  * @date    23-Oct-2014
+  * @version V0.0.1
+  * @since   23-Oct-2014
+  * @brief   Main Template to communicate with the second CPU in bootloader mode
+	*						bootloader ROM build by ST and defined in AN4286
+  *
+  @verbatim
+  ==============================================================================
+                        ##### How to use #####
+  ==============================================================================
+  @endverbatim
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2016 heinrichs weikamp</center></h2>
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_hal.h"
+#include "stdio.h"
+#include "ostc.h"
+#include "settings.h"
+#include "externCPU2bootloader.h"
+#include "externLogbookFlash.h"
+#include "tComm.h"
+
+
+/* Exported variables --------------------------------------------------------*/
+
+/* Private types -------------------------------------------------------------*/
+
+/* Private variables ---------------------------------------------------------*/
+
+/* Private function prototypes -----------------------------------------------*/
+
+static uint8_t boot_sync_frame(void);
+static uint8_t boot_ack(void);
+static uint8_t boot_get_id(uint8_t *RxBuffer);
+static uint8_t boot_get_version(uint8_t *RxBuffer);
+static uint8_t boot_write_memory(uint32_t address, uint8_t length_minus_1, uint8_t *data);
+static uint8_t boot_erase_memory(void);
+static void	Bootloader_send_command(uint8_t command);
+static void Bootloader_spi_single(uint8_t TxByte);
+static void Bootloader_spi(uint16_t lengthData, uint8_t *aTxBuffer, uint8_t *aRxBuffer);
+
+
+/* Exported functions --------------------------------------------------------*/
+
+uint8_t extCPU2bootloader_start(uint8_t *version, uint16_t *chipID)
+{
+	uint8_t aRxBuffer[256] = { 0 };
+
+	HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_RESET);
+	
+	boot_sync_frame();
+	boot_get_version(aRxBuffer);
+	*version = aRxBuffer[1];
+	HAL_Delay(10);
+	boot_get_id(aRxBuffer);
+	*chipID = ((uint16_t)aRxBuffer[2]) << 8;
+	*chipID += (uint16_t)aRxBuffer[3];
+	HAL_Delay(10);
+	if((*chipID == 0x431) && (*version > 10) && (*version < 32))
+		return 1;
+	else
+		return 0;
+}
+
+
+uint8_t extCPU2bootloader_internal(uint8_t* buffer, uint32_t length, char* display_text)
+{
+  uint8_t version = 0;
+  uint16_t chipID = 0;
+
+  if(!extCPU2bootloader_start(&version,&chipID))
+    return 0;
+	if(!boot_erase_memory())
+	  return 0;
+	HAL_Delay(100);
+	uint16_t i=0;
+	uint32_t lengthsave = length;
+	uint8_t percent = 0;
+  
+	while(length)
+	{
+		percent = (100 * (i * 256)) /lengthsave;
+		tComm_verlauf(percent);
+
+	  if(length > 256)
+	  {
+	    if( !boot_write_memory(0x08000000 + (i * 256), 255, &buffer[i * 256]) )
+				return 0;;
+	    length -= 256;
+
+	  }
+	  else
+    {
+      if(!boot_write_memory(0x08000000 + (i * 256), length - 1, &buffer[i * 256]))
+				return 0;
+      length = 0;
+    }
+		i++;
+	}
+	return 2;
+}
+
+
+uint8_t extCPU2bootloader(uint8_t* buffer, uint32_t length, char* display_text)
+{
+	uint8_t result = 0;
+
+	MX_SmallCPU_Reset_To_Boot();
+	result = extCPU2bootloader_internal(buffer,length,display_text);
+	MX_SmallCPU_Reset_To_Standard();
+	return result;
+}
+
+/* Private functions --------------------------------------------------------*/
+
+static uint8_t boot_sync_frame(void)
+{
+	Bootloader_spi_single(0x5a);
+	return boot_ack();
+}
+
+static uint8_t boot_get_version(uint8_t *RxBuffer)
+{
+	Bootloader_spi_single(0x5a);
+	Bootloader_send_command(0x01);
+	if(!boot_ack())
+		return 0;
+	Bootloader_spi(3, NULL, RxBuffer);
+	return boot_ack();
+}
+
+
+static uint8_t boot_get_id(uint8_t *RxBuffer)
+{
+	Bootloader_spi_single(0x5a);
+	Bootloader_send_command(0x02);
+	if(!boot_ack())
+		return 0;
+	Bootloader_spi(5, NULL, RxBuffer);
+	return boot_ack();
+}
+
+
+uint8_t boot_write_memory(uint32_t address, uint8_t length_minus_1, uint8_t *data)
+{
+	uint8_t addressNew[4];
+	uint8_t checksum = 0;
+	uint16_t length;
+
+	Bootloader_spi_single(0x5a);
+	Bootloader_send_command(0x31);
+	if(!boot_ack())
+		return 1;
+	HAL_Delay(5);
+	addressNew[0] = (uint8_t)((address >> 24) & 0xFF);
+	addressNew[1] = (uint8_t)((address >> 16) & 0xFF);
+	addressNew[2] = (uint8_t)((address >>  8) & 0xFF);
+	addressNew[3] = (uint8_t)((address >>  0) & 0xFF);
+	Bootloader_spi(4, addressNew, NULL);
+	checksum = 0;
+	checksum ^= addressNew[0];
+	checksum ^= addressNew[1];
+	checksum ^= addressNew[2];
+	checksum ^= addressNew[3];
+	Bootloader_spi_single(checksum);
+	if(!boot_ack())
+		return 0;
+	HAL_Delay(1);
+	Bootloader_spi_single(length_minus_1);
+	length = ((uint16_t)length_minus_1) + 1;
+	Bootloader_spi(length, data, NULL);
+	HAL_Delay(26);
+	checksum = 0;
+	checksum ^= length_minus_1;
+	for(int i=0;i<length;i++)
+		checksum ^= data[i];
+	Bootloader_spi_single(checksum);
+	
+	if(!boot_ack())
+		return 0;
+	HAL_Delay(1);
+  return 1;
+}
+
+static uint8_t boot_erase_memory(void)
+{
+	uint8_t special_erase_with_checksum[3] = {0xFF, 0xFF, 0x00};
+
+	Bootloader_spi_single(0x5a);
+	Bootloader_send_command(0x44);
+	if(!boot_ack())
+		return 0;
+	Bootloader_spi(3, special_erase_with_checksum, NULL);
+	HAL_Delay(11000); /* 5.5 to 11 seconds */
+	if(!boot_ack())
+		return 0;
+  return 1;
+}
+
+/* write unprotect does reset the system !! */
+uint8_t boot_write_unprotect(void)
+{
+	Bootloader_spi_single(0x5a);
+	Bootloader_send_command(0x73);
+	if(!boot_ack())
+		return 0;
+	return boot_ack();
+}
+
+static uint8_t boot_ack(void)
+{
+	uint8_t answer = 0;
+
+	Bootloader_spi_single(0x00);
+	for(int i=0; i< 1000; i++)
+	{
+		Bootloader_spi(1, NULL, &answer);
+		if((answer == 0x79) || (answer == 0x1F))
+		{
+			Bootloader_spi_single(0x79);
+			break;
+		}
+		HAL_Delay(10);
+	}
+	if(answer == 0x79)
+		return 1;
+	else
+		return 0;
+}
+
+static void	Bootloader_send_command(uint8_t command)
+{
+	uint8_t send[2];
+	uint8_t receive[2];
+
+	send[0] = command;
+	send[1] = 0xFF ^ command;
+	Bootloader_spi(2, send, receive);
+}
+
+static void Bootloader_spi_single(uint8_t TxByte)
+{
+	Bootloader_spi(1,&TxByte, 0);
+}
+
+
+static void Bootloader_spi(uint16_t lengthData, uint8_t *aTxBuffer, uint8_t *aRxBuffer)
+{
+	uint8_t dummy[256] = { 0 };
+	uint8_t *tx_data;
+	uint8_t *rx_data;
+
+	tx_data = aTxBuffer;
+	rx_data = aRxBuffer;
+
+	if(aTxBuffer == NULL)
+		tx_data = dummy;
+	if(aRxBuffer == NULL)
+		rx_data = dummy;
+
+	//HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_RESET); // only for testing with Oscilloscope
+
+	
+	HAL_SPI_TransmitReceive(&cpu2DmaSpi, (uint8_t *)tx_data, (uint8_t *)rx_data, (uint16_t)lengthData,1000);
+/*
+	if(HAL_SPI_TransmitReceive_DMA(&cpu2DmaSpi, (uint8_t *)tx_data, (uint8_t *)rx_data, (uint16_t)lengthData) != HAL_OK)
+	if(HAL_SPI_TransmitReceive_DMA(&cpu2DmaSpi, (uint8_t *)tx_data, (uint8_t *)rx_data, (uint16_t)lengthData) != HAL_OK)
+			Bootloader_Error_Handler();
+
+	while (HAL_SPI_GetState(&cpu2DmaSpi) != HAL_SPI_STATE_READY)// only for testing with Oscilloscope
+  {
+  }
+	HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_SET); // only for testing with Oscilloscope
+*/
+}
+
+
+/*
+static void Bootloader_Error_Handler(void)
+{
+	while(1);
+}
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Src/externLogbookFlash_mini.c	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,865 @@
+/**
+  ******************************************************************************
+	* @copyright heinrichs weikamp
+  * @file    externLogbookFlash.c
+  * @author  heinrichs weikamp gmbh
+  * @date    07-Aug-2014
+  * @version V0.0.4
+  * @since   29-Sept-2015
+  * @brief   Main File to access the new 1.8 Volt Spansion S25FS256S 256 Mbit (32 Mbyte)
+	* @bug
+	* @warning
+  *
+  @verbatim
+  ==============================================================================
+              ##### Logbook Header (TOC) #####
+  ==============================================================================
+  [..] Memory useage:
+	NEW: Spansion S25FS-S256S
+	
+			only 8x 4KB and 1x 32KB, remaining is 64KB or 256KB
+			Sector Size (kbyte) Sector Count Sector Range Address Range (Byte Address) Notes
+			 4   8	SA00  00000000h-00000FFFh 
+								:							:
+							SA07  00007000h-00007FFFh
+
+			32   1  SA08  00008000h-0000FFFFh
+
+			64 511  SA09  00010000h-0001FFFFh
+								: 						:
+							SA519 01FF0000h-01FFFFFFh			
+	OLD:
+				1kB each header
+				with predive header at beginning
+				and postdive header with 0x400 HEADER2OFFSET
+				4kB (one erase) has two dives with 4 headers total
+				total of 512 kB (with 256 header ids (8 bit))
+				Size is 280 Byte (as of 25.Nov. 2014)
+
+	[..] Output to PC / UART is postdive header
+
+	[..] Block Protection Lock-Down is to erase logbook only
+
+	[..] Timing (see page 137 of LOGBOOK_V3_S25FS-S_00-271247.pdf
+				bulk erase is 2 minutes typ., 6 minutes max.
+
+  ==============================================================================
+              ##### DEMOMODE #####
+  ==============================================================================
+	151215: ext_flash_write_settings() is DISABLED!
+	
+	==============================================================================
+              ##### bug fixes #####
+  ==============================================================================
+	150917:	end in header and length of sample was one byte too long 
+					as stated by Jef Driesen email 15.09.2015
+					
+	@endverbatim
+	******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_hal.h"
+#include "externLogbookFlash.h"
+#include "ostc.h"
+#include "settings.h"
+#include "gfx_engine.h"
+
+/* Private types -------------------------------------------------------------*/
+#define FLASHSTART 	0x000000
+//#define FLASHSTOP 	0x01FFFFFF all 32 MB with 4byte addressing
+#define FLASHSTOP 	0x00FFFFFF 
+//#define FLASHSTOP 	0x3FFFFF
+#define RELEASE		1
+#define HOLDCS		0
+
+#define HEADER2OFFSET 0x400
+
+typedef struct{
+uint8_t IsBusy:1;
+uint8_t IsWriteEnabled:1;
+uint8_t BlockProtect0:1;
+uint8_t BlockProtect1:1;
+uint8_t BlockProtect2:1;
+uint8_t BlockProtect3:1;
+uint8_t IsAutoAddressIncMode:1;
+uint8_t BlockProtectL:1;
+} extFlashStatusUbit8_t;
+
+typedef union{
+extFlashStatusUbit8_t ub;
+uint8_t uw;
+} extFlashStatusBit8_Type;
+
+
+/* Exported variables --------------------------------------------------------*/
+
+/* Private variables ---------------------------------------------------------*/
+
+static uint32_t	actualAddress = 0;
+static uint32_t	preparedPageAddress = 0;
+static uint32_t closeSectorAddress = 0;
+static uint32_t	actualPointerHeader = 0;
+static uint32_t	actualPointerSample = 0;
+static uint32_t	actualPointerDevicedata = DDSTART;
+static uint32_t	actualPointerVPM = 0;
+static uint32_t	actualPointerSettings = SETTINGSSTART;
+static uint32_t	actualPointerFirmware = 0;
+static uint32_t	actualPointerFirmware2 = 0;
+
+/* Private function prototypes -----------------------------------------------*/
+static void chip_unselect(void);
+static void chip_select(void);
+static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards);
+static uint8_t read_spi(uint8_t unselect_CS_afterwards);
+static void write_address(uint8_t unselect_CS_afterwards);
+static void Error_Handler_extflash(void);
+static void wait_chip_not_busy(void);
+static void ext_flash_incf_address(uint8_t type);
+//void ext_flash_incf_address_ring(void);
+
+static void ext_flash_erase4kB(void);
+static void ext_flash_erase32kB(void);
+static void ext_flash_erase64kB(void);
+static uint8_t ext_flash_erase_if_on_page_start(void);
+
+static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase);
+
+static void ext_flash_read_block(uint8_t *getByte, uint8_t type);
+static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type);
+static void ext_flash_read_block_stop(void);
+
+static void ef_hw_rough_delay_us(uint32_t delayUs);
+static void ef_erase_64K(uint32_t blocks);
+
+
+/* Exported functions --------------------------------------------------------*/
+
+void ext_flash_write_firmware(uint8_t *pSample1, uint32_t length1)//, uint8_t *pSample2, uint32_t length2)
+{
+	general32to8_Type lengthTransform;
+
+	lengthTransform.u32 = length1;
+	
+	actualPointerFirmware = FWSTART;
+	ef_write_block(lengthTransform.u8,4, EF_FIRMWARE, 1);
+	ef_write_block(pSample1,length1, EF_FIRMWARE, 1);
+
+//	if(length2)
+//		ef_write_block(pSample2,length2, EF_FIRMWARE, 1);
+}
+
+uint8_t ext_flash_read_firmware_version(char *text)
+{
+	uint32_t backup = actualAddress;
+	uint8_t buffer[4];
+	
+	// + 4 for length data, see ext_flash_write_firmware
+	actualAddress = FWSTART + 4 + 0x10000;
+	ext_flash_read_block_start();
+	ext_flash_read_block(&buffer[0], EF_FIRMWARE);
+	ext_flash_read_block(&buffer[1], EF_FIRMWARE);
+	ext_flash_read_block(&buffer[2], EF_FIRMWARE);
+	ext_flash_read_block(&buffer[3], EF_FIRMWARE);
+
+	ext_flash_read_block_stop();
+	actualAddress = backup;
+
+	uint8_t ptr = 0;
+	text[ptr++] = 'V';
+	ptr += gfx_number_to_string(2,0,&text[ptr],buffer[0] & 0x3F);
+	text[ptr++] = '.';
+	ptr += gfx_number_to_string(2,0,&text[ptr],buffer[1] & 0x3F);
+	text[ptr++] = '.';
+	ptr += gfx_number_to_string(2,0,&text[ptr],buffer[2] & 0x3F);
+	text[ptr++] = ' ';
+	if(buffer[3])
+	{
+		text[ptr++] = 'b';
+		text[ptr++] = 'e';
+		text[ptr++] = 't';
+		text[ptr++] = 'a';
+		text[ptr++] = ' ';
+	}
+	return ptr;
+}
+
+
+uint32_t ext_flash_read_firmware(uint8_t *pSample1, uint32_t max_length, uint8_t *magicByte)
+{
+	uint32_t backup = actualAddress;
+	general32to8_Type lengthTransform;
+	
+	actualAddress = FWSTART;
+	ext_flash_read_block_start();
+
+	ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE);
+	ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE);
+	ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE);
+	ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE);
+
+	
+	if(lengthTransform.u32 == 0xFFFFFFFF)
+	{
+		lengthTransform.u32 = 0xFFFFFFFF;
+	}
+	else
+	if(lengthTransform.u32 > max_length)
+	{
+		lengthTransform.u32 = 0xFF000000;
+	}
+	else
+	{
+		for(uint32_t i = 0; i<lengthTransform.u32; i++)
+		{
+			ext_flash_read_block(&pSample1[i], EF_FIRMWARE);
+		}
+		
+	}
+	
+	ext_flash_read_block_stop();
+	
+	if(magicByte)
+	{
+		*magicByte = pSample1[0x10000 + 0x3E]; // 0x3E == 62 
+	}
+	
+	actualAddress = backup;
+	return lengthTransform.u32;
+}
+
+
+void ext_flash_write_firmware2(uint32_t offset, uint8_t *pSample1, uint32_t length1, uint8_t *pSample2, uint32_t length2)
+{
+	general32to8_Type lengthTransform, offsetTransform;
+
+	lengthTransform.u32 = length1 + length2;
+	offsetTransform.u32 = offset;
+	
+	actualPointerFirmware2 = FWSTART2;
+	ef_write_block(lengthTransform.u8,4, EF_FIRMWARE2, 1);
+	ef_write_block(offsetTransform.u8,4, EF_FIRMWARE2, 1);
+	ef_write_block(pSample1,length1, EF_FIRMWARE2, 1);
+	if(length2)
+		ef_write_block(pSample2,length2, EF_FIRMWARE2, 1);
+}
+
+
+uint32_t ext_flash_read_firmware2(uint32_t *offset, uint8_t *pSample1, uint32_t max_length1, uint8_t *pSample2, uint32_t max_length2)
+{
+	uint32_t backup = actualAddress;
+	uint32_t length1, length2;
+	general32to8_Type lengthTransform, offsetTransform;
+
+	actualAddress = FWSTART2;
+	ext_flash_read_block_start();
+
+	ext_flash_read_block(&lengthTransform.u8[0], EF_FIRMWARE2);
+	ext_flash_read_block(&lengthTransform.u8[1], EF_FIRMWARE2);
+	ext_flash_read_block(&lengthTransform.u8[2], EF_FIRMWARE2);
+	ext_flash_read_block(&lengthTransform.u8[3], EF_FIRMWARE2);
+
+	ext_flash_read_block(&offsetTransform.u8[0], EF_FIRMWARE2);
+	ext_flash_read_block(&offsetTransform.u8[1], EF_FIRMWARE2);
+	ext_flash_read_block(&offsetTransform.u8[2], EF_FIRMWARE2);
+	ext_flash_read_block(&offsetTransform.u8[3], EF_FIRMWARE2);
+	
+	*offset = offsetTransform.u32;
+	
+	if(lengthTransform.u32 == 0xFFFFFFFF)
+	{
+		lengthTransform.u32 = 0xFFFFFFFF;
+	}
+	else
+	if(lengthTransform.u32 > max_length1 + max_length2)
+	{
+		lengthTransform.u32 = 0xFF000000;
+	}
+	else
+	{
+		if(lengthTransform.u32 <  max_length1)
+		{
+			length1 = lengthTransform.u32;
+			length2 = 0;
+		}
+		else
+		{
+			length1 = max_length1;
+			length2 = lengthTransform.u32 - max_length1;
+		}
+		
+		if(pSample1)
+		{
+			for(uint32_t i = 0; i<length1; i++)
+			{
+				ext_flash_read_block(&pSample1[i], EF_FIRMWARE2);
+			}
+			if(pSample2)
+			{
+				for(uint32_t i = 0; i<length2; i++)
+				{
+					ext_flash_read_block(&pSample2[i], EF_FIRMWARE2);
+				}
+			}
+		}
+		else if(pSample2)
+		{
+			/* actualAddress += length1; do dummy read to get EEPROM to the correct address */
+			for(uint32_t i = 0; i<length1; i++)
+			{
+				ext_flash_read_block(&pSample2[0], EF_FIRMWARE2);
+			}
+			for(uint32_t i = 0; i<length2; i++)
+			{
+				ext_flash_read_block(&pSample2[i], EF_FIRMWARE2);
+			}
+		}
+	}
+	ext_flash_read_block_stop();
+	actualAddress = backup;
+	return lengthTransform.u32;
+}
+
+
+void ext_flash_read_fixed_16_devicedata_blocks_formated_128byte_total(uint8_t *buffer)
+{
+	SDeviceLine data[16];
+	uint8_t tempLengthIngnore;
+	uint16_t count;
+	uint8_t transfer;
+
+	RTC_DateTypeDef Sdate;
+	RTC_TimeTypeDef Stime;
+	
+	actualAddress = DDSTART;
+
+	ext_flash_read_block_start();
+	ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA);
+	ext_flash_read_block(&tempLengthIngnore, EF_DEVICEDATA);
+	
+	ext_flash_read_block_multi((uint8_t *)data,16*3*4, EF_DEVICEDATA);
+	ext_flash_read_block_stop();
+
+	count = 0;
+	for(int i=0;i<16;i++)
+	{
+		transfer = (data[i].value_int32 >> 24) & 0xFF;
+		buffer[count++] = transfer;
+		transfer = (data[i].value_int32 >> 16) & 0xFF;
+		buffer[count++] = transfer;
+		transfer = (data[i].value_int32 >> 8) & 0xFF;
+		buffer[count++] = transfer;
+		transfer = (data[i].value_int32) & 0xFF;
+		buffer[count++] = transfer;
+
+		translateDate(data[i].date_rtc_dr, &Sdate);
+		translateTime(data[i].time_rtc_tr, &Stime);
+		buffer[count++] = Sdate.Year;
+		buffer[count++] = Sdate.Month;
+		buffer[count++] = Sdate.Date;
+		buffer[count++] = Stime.Hours;
+	}
+}
+
+void ext_flash_erase_firmware(void)
+{
+	uint32_t size, blocks_64k;
+
+	actualAddress = FWSTART;
+	size = 1 + FWSTOP - FWSTART;
+	blocks_64k = size / 0x10000;
+	ef_erase_64K(blocks_64k);
+}
+
+void ext_flash_erase_firmware2(void)
+{
+	uint32_t size, blocks_64k;
+
+	actualAddress = FWSTART2;
+	size = 1 + FWSTOP2 - FWSTART2;
+	blocks_64k = size / 0x10000;
+	ef_erase_64K(blocks_64k);
+}
+
+
+
+static void ext_flash_erase4kB(void)
+{
+	wait_chip_not_busy();
+	write_spi(0x06,RELEASE);/* WREN */
+	write_spi(0x20,HOLDCS);/* sector erase cmd */
+	write_address(RELEASE);
+}
+
+/* be careful - might not work with entire family and other products
+ * see page 14 of LOGBOOK_V3_S25FS-S_00-271247.pdf
+ */
+static void ext_flash_erase32kB(void)
+{
+	uint32_t actualAddress_backup;
+	
+	actualAddress_backup = actualAddress;
+	actualAddress = 0;
+	wait_chip_not_busy();
+	write_spi(0x06,RELEASE);/* WREN */
+	write_spi(0xD8,HOLDCS);/* sector erase cmd */
+	write_address(RELEASE);
+	actualAddress = actualAddress_backup;
+}
+
+
+static void ext_flash_erase64kB(void)
+{
+	wait_chip_not_busy();
+	write_spi(0x06,RELEASE);/* WREN */
+	write_spi(0xD8,HOLDCS);/* sector erase cmd */
+	write_address(RELEASE);
+}
+
+
+void ext_flash_read_block_start(void)
+{
+	wait_chip_not_busy();
+	write_spi(0x03,HOLDCS);		/* WREN */
+	write_address(HOLDCS);
+}
+
+/* 4KB, 32KB, 64 KB, not the upper 16 MB with 4 Byte address at the moment */
+static uint8_t ext_flash_erase_if_on_page_start(void)
+{
+	if(actualAddress < 0x00008000)
+	{
+		/* 4K Byte is 0x1000 */
+		if((actualAddress & 0xFFF) == 0)
+		{
+			ext_flash_erase4kB();
+			return 1;
+		}
+	}
+	else
+	if(actualAddress < 0x00010000)
+	{
+		/* 32K Byte is only one page */
+		if(actualAddress == 0x00010000)
+		{
+			ext_flash_erase32kB();
+			return 1;
+		}
+	}
+	else
+	{
+		/* 64K Byte is 0x10000 */
+		if((actualAddress & 0xFFFF) == 0)
+		{
+			if(preparedPageAddress == actualAddress)	/* has page already been prepared before? (at the moment for samples only) */
+			{
+				preparedPageAddress = 0;
+
+			}
+			else
+			{
+				ext_flash_erase64kB();
+			}
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
+
+static void ext_flash_read_block(uint8_t *getByte, uint8_t type)
+{
+	*getByte = read_spi(HOLDCS);/* read data */
+	ext_flash_incf_address(type);
+}
+
+
+static void ext_flash_read_block_multi(void *getByte, uint32_t size, uint8_t type)
+{
+	uint8_t  *data;
+	data = getByte;
+
+	for(uint32_t i=0;i<size;i++)
+	{
+		data[i] = read_spi(HOLDCS);/* read data */
+		ext_flash_incf_address(type);
+	}
+}
+
+
+static void ext_flash_read_block_stop(void)
+{
+	chip_unselect();
+}
+
+
+/* Private functions ---------------------------------------------------------*/
+
+static void ef_write_block(uint8_t * sendByte, uint32_t length, uint8_t type, uint8_t do_not_erase)
+{
+	uint32_t remaining_page_size, remaining_length, remaining_space_to_ring_end;
+	uint32_t i=0;
+
+	if(!length)
+		return;
+
+	uint32_t ringStart, ringStop;
+
+	switch(type)
+	{
+		case EF_HEADER:
+			actualAddress = actualPointerHeader;
+			ringStart = HEADERSTART;
+			ringStop = HEADERSTOP;
+			break;
+		case EF_SAMPLE:
+			actualAddress = actualPointerSample;
+			ringStart = SAMPLESTART;
+			ringStop = SAMPLESTOP;
+			break;
+		case EF_DEVICEDATA:
+			actualAddress = actualPointerDevicedata;
+			ringStart = DDSTART;
+			ringStop = DDSTOP;
+			break;
+		case EF_VPMDATA:
+			actualAddress = actualPointerVPM;
+			ringStart = VPMSTART;
+			ringStop = VPMSTOP;
+			break;
+		case EF_SETTINGS:
+			actualAddress = actualPointerSettings;
+			ringStart = SETTINGSSTART;
+			ringStop = SETTINGSSTOP;
+			break;
+		case EF_FIRMWARE:
+			actualAddress = actualPointerFirmware;
+			ringStart = FWSTART;
+			ringStop = FWSTOP;
+			break;
+		case EF_FIRMWARE2:
+			actualAddress = actualPointerFirmware2;
+			ringStart = FWSTART2;
+			ringStop = FWSTOP2;
+			break;
+		default:
+			ringStart = FLASHSTART;
+			ringStop = FLASHSTOP;
+			break;
+	}
+	/* safety */
+	if(actualAddress < ringStart)
+		actualAddress = ringStart;
+
+	if(do_not_erase == 0)
+	{
+		ext_flash_erase_if_on_page_start();
+	}
+	
+	while( i<length)
+	{
+		ef_hw_rough_delay_us(5);
+		wait_chip_not_busy();
+		write_spi(0x06,RELEASE);		/* WREN */
+		write_spi(0x02,HOLDCS);			/* write cmd */
+		write_address(HOLDCS);
+		
+		remaining_length = length - i;
+		remaining_page_size = 0xFF - (uint8_t)(actualAddress & 0xFF) +1;
+		remaining_space_to_ring_end = ringStop - actualAddress;
+		
+		if(remaining_length >= 256)
+		{
+			remaining_length = 255;	/* up to 256 bytes may be written in one burst. Last byte is written with release */
+		}
+		else
+		{
+			remaining_length--;		/* last byte needed for release */
+		}
+		if(remaining_length >= (remaining_page_size) ) /* use 256 byte page and calculate number of bytes left */
+		{
+			remaining_length = remaining_page_size - 1;
+		}
+		if( (remaining_space_to_ring_end >= 256)) 
+		{
+			for(int j=0; j<remaining_length; j++)
+			{
+				write_spi(sendByte[i],HOLDCS);/* write data */
+				actualAddress++;
+				i++;
+			}
+		}
+		/* byte with RELEASE */
+		write_spi(sendByte[i],RELEASE);/* write data */
+		actualAddress++;
+		i++;
+
+		if(actualAddress > ringStop)
+			actualAddress = ringStart;
+
+		if(do_not_erase == 0)
+			ext_flash_erase_if_on_page_start();
+	}
+	switch(type)
+	{
+		case EF_HEADER:
+			actualPointerHeader = actualAddress;
+			break;
+		case EF_SAMPLE:
+			actualPointerSample = actualAddress;
+			break;
+		case EF_DEVICEDATA:
+			actualPointerDevicedata = actualAddress;
+			break;
+		case EF_VPMDATA:
+			actualPointerVPM = actualAddress;
+			break;
+		case EF_SETTINGS:
+			actualPointerSettings = actualAddress;
+			break;
+		case EF_FIRMWARE:
+			actualPointerFirmware = actualAddress;
+			break;
+		case EF_FIRMWARE2:
+			actualPointerFirmware2 = actualAddress;
+			break;
+		default:
+			break;
+	}
+}
+
+
+static void ef_erase_64K(uint32_t blocks)
+{
+	for(uint32_t i = 0; i < blocks; i++)
+	{
+		wait_chip_not_busy();
+		write_spi(0x06,RELEASE);/* WREN */
+		write_spi(0xD8,HOLDCS);/* 64k erase cmd */
+		write_address(RELEASE);
+		actualAddress += 0x10000;
+		HAL_Delay(25);
+	}
+}
+
+static void chip_unselect(void)
+{
+		HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_SET); // chip select
+}
+
+static void chip_select(void)
+{
+	HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_RESET); // chip select
+}
+
+static uint8_t read_spi(uint8_t unselect_CS_afterwards)
+{
+	uint8_t byte;
+
+	chip_select();
+
+	if(HAL_SPI_Receive(&hspiDisplay, &byte, 1, 10000) != HAL_OK)
+		Error_Handler_extflash();
+
+	while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY)
+  {
+  }
+	if(unselect_CS_afterwards)
+		chip_unselect();
+
+	return byte;
+}
+
+
+static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards)
+{
+	chip_select();
+
+	if(HAL_SPI_Transmit(&hspiDisplay, &data, 1, 10000) != HAL_OK)
+		Error_Handler_extflash();
+
+	while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY)
+  {
+  }
+	if(unselect_CS_afterwards)
+		chip_unselect();
+}
+
+
+static void write_address(uint8_t unselect_CS_afterwards)
+{
+	uint8_t hi, med ,lo;
+
+	hi = (actualAddress >> 16) & 0xFF;
+	med = (actualAddress >> 8) & 0xFF;
+	lo = actualAddress & 0xFF;
+
+	write_spi(hi, HOLDCS);
+	write_spi(med, HOLDCS);
+	write_spi(lo, unselect_CS_afterwards);
+}
+
+
+static void wait_chip_not_busy(void)
+{
+	uint8_t status;
+
+	chip_unselect();
+
+	write_spi(0x05,HOLDCS);		/* RDSR */
+	status = read_spi(HOLDCS);/* read status */
+	while(status & 0x01)
+	{
+		HAL_Delay(1);
+		status = read_spi(HOLDCS);/* read status */
+	}
+	chip_unselect();
+}
+
+
+static void ext_flash_incf_address(uint8_t type)
+{
+	uint32_t ringStart, ringStop;
+	
+	actualAddress += 1;
+	
+	switch(type)
+	{
+		case EF_HEADER:
+			ringStart = HEADERSTART;
+			ringStop = HEADERSTOP;
+			break;
+		case EF_SAMPLE:
+			ringStart = SAMPLESTART;
+			ringStop = SAMPLESTOP;
+			break;
+		case EF_DEVICEDATA:
+			ringStart = DDSTART;
+			ringStop = DDSTOP;
+			break;
+		case EF_VPMDATA:
+			ringStart = VPMSTART;
+			ringStop = VPMSTOP;
+			break;
+		case EF_SETTINGS:
+			ringStart = SETTINGSSTART;
+			ringStop = SETTINGSSTOP;
+			break;
+		case EF_FIRMWARE:
+			ringStart = FWSTART;
+			ringStop = FWSTOP;
+			break;
+		case EF_FIRMWARE2:
+			ringStart = FWSTART2;
+			ringStop = FWSTOP2;
+			break;
+		default:
+			ringStart = FLASHSTART;
+			ringStop = FLASHSTOP;
+			break;
+	}
+	
+	if((actualAddress < ringStart) || (actualAddress > ringStop))
+		actualAddress = ringStart;
+}
+
+static void ef_hw_rough_delay_us(uint32_t delayUs)
+{
+	if(!delayUs)
+		return;
+	delayUs*= 12;
+	while(delayUs--);
+	return;
+}
+
+static void Error_Handler_extflash(void)
+{
+  while(1)
+  {
+  }
+}
+
+void ext_flash_CloseSector(void)
+{
+	uint32_t actualAddressBackup = actualAddress;
+	int i=0;
+
+	if(closeSectorAddress != 0)
+	{
+	/* write some dummy bytes to the sector which is currently used for storing samples. This is done to "hide" problem if function is calles again */
+		actualAddress = closeSectorAddress;
+
+		wait_chip_not_busy();
+		write_spi(0x06,RELEASE);		/* WREN */
+		write_spi(0x02,HOLDCS);			/* write cmd */
+		write_address(HOLDCS);
+		for(i = 0; i<8; i++)
+		{
+			write_spi(0xA5,HOLDCS);/* write data */
+			actualAddress++;
+		}
+		/* byte with RELEASE */
+		write_spi(0xA5,RELEASE);/* write data */
+		actualAddress = actualAddressBackup;
+		closeSectorAddress = 0;
+	}
+}
+
+
+uint8_t ext_flash_erase_firmware_if_not_empty(void)
+{
+	const uint8_t TESTSIZE_FW = 4;
+	
+	uint8_t data[TESTSIZE_FW];
+	uint8_t notEmpty = 0;
+	
+	actualAddress = FWSTART;
+	ext_flash_read_block_start();
+	for(int i = 0; i < TESTSIZE_FW; i++)
+	{
+		ext_flash_read_block(&data[i], EF_FIRMWARE);
+		if(data[i] != 0xFF)
+			notEmpty = 1;
+	}
+	ext_flash_read_block_stop();
+	
+	if(notEmpty)
+	{
+		ext_flash_erase_firmware();
+		return 1;
+	}
+	else
+		return 0;
+}
+
+uint8_t ext_flash_erase_firmware2_if_not_empty(void)
+{
+	const uint8_t TESTSIZE_FW = 4;
+	
+	uint8_t data[TESTSIZE_FW];
+	uint8_t notEmpty = 0;
+	
+	actualAddress = FWSTART2;
+	ext_flash_read_block_start();
+	for(int i = 0; i < TESTSIZE_FW; i++)
+	{
+		ext_flash_read_block(&data[i], EF_FIRMWARE2);
+		if(data[i] != 0xFF)
+			notEmpty = 1;
+	}
+	ext_flash_read_block_stop();
+	
+	if(notEmpty)
+	{
+		ext_flash_erase_firmware2();
+		return 1;
+	}
+	else
+		return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Src/gfx_engine_mini.c	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,3126 @@
+/**
+  ******************************************************************************
+  * @file    gfx_engine.c
+  * @author  heinrichs weikamp gmbh
+  * @version V0.0.2
+  * @date    30-April-2014
+  * @brief   Main source file of GFX Graphic Engine
+  *          This file provides firmware functions to manage the following
+  *          functions to draw on the screen:
+  *           + write string to display
+  *
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 heinrichs weikamp</center></h2>
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "stm32f4xx_hal.h"
+
+#include "gfx.h"
+#include "gfx_engine.h"
+#include "gfx_fonts.h"
+#include "gfx_colors.h"
+#include "ostc.h"
+#include "settings.h"
+#include "text_multilanguage.h"
+
+/* Exported variables --------------------------------------------------------*/
+
+/* Private types -------------------------------------------------------------*/
+
+#define RING_BUF_SIZE			(5u)
+#define MAX_COLOR_STRING_LENGTH	(100u)
+
+typedef struct
+{
+	uint32_t Xdelta;
+	uint32_t Ydelta;
+	uint8_t	 invert;
+	uint8_t  color;
+	uint8_t  dualFont;
+	uint8_t  resize;
+	uint32_t font;
+	uint8_t  spaceMode;
+	uint8_t  singleSpaceWithSizeOfNextChar;
+	uint8_t	useTinyFont;
+	uint32_t TinyFont;
+	int8_t TinyFontExtraYdelta;
+	tFont *actualFont;
+	uint8_t doubleSize;
+} GFX_CfgWriteString;
+
+typedef struct
+{
+	uint32_t  pBuffer;
+	uint32_t  height;
+	uint32_t  width;
+	uint32_t 	leftStart;
+	uint32_t 	bottomStart;
+} GFX_layerSingle;
+/*
+typedef struct
+{
+	GFX_layerSingle top;
+	GFX_layerSingle bottom;
+} GFX_layersTopBottom;
+*/
+typedef struct
+{
+	uint32_t pActualTopBuffer;
+	uint32_t pNextTopBuffer[RING_BUF_SIZE];
+	GFX_layerSingle actualBottom;
+	GFX_layerSingle nextBottom[RING_BUF_SIZE];
+	uint8_t NextTopWrite;
+	uint8_t NextBottomWrite;
+	uint8_t NextTopRead;
+	uint8_t NextBottomRead;
+} GFX_layerControl;
+
+typedef struct
+{
+	uint32_t 	StartAddress;
+	int8_t 		status;
+	uint8_t		caller;
+} SFrameList;
+
+enum FRAMESTATE
+{
+	CLEAR = 0,
+	BLOCKED,
+	RELEASED
+};
+
+enum LOGOSTATE
+{
+	LOGOOFF = 0,
+	LOGOSTART = 1,
+	LOGOSTOP = 255
+};
+
+// should be 43
+#define MAXFRAMES 39
+
+#define SDRAM_BANK_ADDR    	((uint32_t)0xD0000000)
+#define	FBGlobalStart				SDRAM_BANK_ADDR
+#define	FBOffsetEachIndex		(800*480*2)
+
+#define SDRAM_DOUBLE_BUFFER_ONE ((uint32_t)(FBGlobalStart + (MAXFRAMES * FBOffsetEachIndex)))
+#define SDRAM_DOUBLE_BUFFER_TWO ((uint32_t)(SDRAM_DOUBLE_BUFFER_ONE + (2 * FBOffsetEachIndex)))
+#define SDRAM_DOUBLE_BUFFER_END ((uint32_t)(SDRAM_DOUBLE_BUFFER_TWO + (2 * FBOffsetEachIndex)))
+
+/* Semi Private variables ---------------------------------------------------------*/
+
+DMA2D_HandleTypeDef	Dma2dHandle;
+static LTDC_HandleTypeDef	LtdcHandle;
+
+/* Private variables ---------------------------------------------------------*/
+
+static uint8_t DMA2D_at_work = 0;
+
+static GFX_layerControl FrameHandler = { 0 };
+
+static uint32_t pInvisibleFrame = 0;
+static uint32_t pLogoFrame = 0;
+static uint8_t logoStatus;
+static uint32_t pBackgroundHwFrame = 0;
+static uint8_t backgroundHwStatus;
+
+static SFrameList frame[MAXFRAMES];
+
+static void GFX_clear_frame_immediately(uint32_t pDestination);
+static void GFX_draw_image_color(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image);
+/* ITM Trace-----------------------------------------------------------------*/
+
+#include "stdio.h"
+
+#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
+#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
+#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))
+
+#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))
+#define TRCENA          0x01000000
+
+struct __FILE { int handle; /* Add whatever needed */ };
+FILE __stdout;
+FILE __stdin;
+
+int fputc(int ch, FILE *f) {
+  if (DEMCR & TRCENA) {
+    while (ITM_Port32(0) == 0);
+    ITM_Port8(0) = ch;
+  }
+  return(ch);
+}
+
+uint32_t MinU32GFX(uint32_t a, uint32_t b)
+{
+	return ((a<b)?a:b);
+}
+
+
+uint32_t MaxU32GFX(uint32_t a, uint32_t b)
+{
+	return((a>b)?a:b);
+}
+
+/* Private function prototypes -----------------------------------------------*/
+
+static uint32_t GFX_write_char(GFX_DrawCfgWindow* hgfx, GFX_CfgWriteString* cfg, uint8_t character, tFont *Font);
+static uint32_t GFX_write_substring(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, uint8_t textId, int8_t nextCharFor2Byte);
+static void GFX_Error_Handler(void);
+static void GFX_Dma2d_TransferComplete(DMA2D_HandleTypeDef* Dma2dHandle);
+static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle);
+static void  GFX_clear_frame_dma2d(uint8_t frameId);
+
+static uint32_t GFX_doubleBufferOne(void);
+static uint32_t GFX_doubleBufferTwo(void);
+
+static void GFX_LTDC_Init_display1(void);
+
+
+/* Exported functions --------------------------------------------------------*/
+
+uint8_t GFX_logoStatus(void)
+{
+	return logoStatus;
+}
+
+void GFX_SetWindowLayer0(uint32_t pDestination, int16_t XleftGimpStyle, int16_t XrightGimpStyle, int16_t YtopGimpStyle, int16_t YbottomGimpStyle)
+{
+	int16_t XSize, YSize, X0, Y0;
+
+	if(XleftGimpStyle 	< 0) 		XleftGimpStyle = 0;
+	if(XrightGimpStyle 	< 0) 		XrightGimpStyle = 0;
+	if(XleftGimpStyle 	> 799)	XleftGimpStyle = 800;
+	if(XrightGimpStyle 	> 799)	XrightGimpStyle = 800;
+
+	if(YtopGimpStyle 		< 0) 		YtopGimpStyle = 0;
+	if(YbottomGimpStyle < 0) 		YbottomGimpStyle = 0;
+	if(YtopGimpStyle 		> 479)	YtopGimpStyle = 480;
+	if(YbottomGimpStyle > 479)	YbottomGimpStyle = 480;
+
+/*
+	XSize = YbottomGimpStyle 	- YtopGimpStyle;
+	YSize = XrightGimpStyle		- XleftGimpStyle;
+	if((XSize <= 0) || (YSize <= 0))
+		return;
+	X0 = 479 - YbottomGimpStyle;
+	Y0 = XleftGimpStyle;
+	while((LTDC->CPSR & LTDC_CPSR_CYPOS) <= (uint32_t)800);
+	HAL_LTDC_SetWindowSize(&LtdcHandle, XSize, YSize, LayerIdx);
+	HAL_LTDC_SetWindowPosition(&LtdcHandle, X0, Y0,LayerIdx);
+	HAL_LTDC_SetAddress(&LtdcHandle, pDestination, LayerIdx);
+*/
+
+	XSize = XrightGimpStyle		- XleftGimpStyle;
+	YSize = YbottomGimpStyle 	- YtopGimpStyle;
+	if((XSize <= 0) || (YSize <= 0))
+		return;
+	Y0 = 479 - YbottomGimpStyle;
+	X0 = XleftGimpStyle;
+
+	GFX_SetFrameBottom(pDestination, X0, Y0, XSize, YSize);
+}
+
+
+void GFX_logoAutoOff(void)
+{
+	if(logoStatus == LOGOOFF)
+		logoStatus = LOGOSTART;
+}
+
+
+void GFX_hwBackgroundOn(void)
+{
+	backgroundHwStatus = LOGOSTART;
+}
+
+
+void GFX_hwBackgroundOff(void)
+{
+	backgroundHwStatus = LOGOSTOP;
+}
+
+void GFX_build_hw_background_frame(void)
+{
+	GFX_DrawCfgScreen	tLogoTemp;
+	SWindowGimpStyle windowGimp;
+	
+	pBackgroundHwFrame = getFrame(1);
+	backgroundHwStatus = 0;
+
+	tLogoTemp.FBStartAdress = pBackgroundHwFrame;
+	tLogoTemp.ImageHeight = 480;
+	tLogoTemp.ImageWidth = 800;
+	tLogoTemp.LayerIndex = 1;
+
+	windowGimp.left = (800 - 400) / 2;
+	windowGimp.top =  0;//(480 -  46) / 2;
+	
+	GFX_draw_image_color(&tLogoTemp, windowGimp, &ImgHWcolor);
+/*	
+	char localtext[256];
+	uint8_t ptr = 0;
+	
+	localtext[ptr++] = ' ';
+	localtext[ptr++] = ' ';
+	localtext[ptr++] = 'O';
+	localtext[ptr++] = 'S';
+	localtext[ptr++] = ' ';
+	ptr += GFX_printf_firmware(&localtext[ptr]);
+	localtext[ptr] = 0;
+
+	write_content_simple(&tLogoTemp, 0, 800, 240-24, &FontT24,localtext,CLUT_Font020);
+*/	
+}
+
+void decompressFont(const tFont* pFont, const tImageComp** pFontComp)
+{
+	uint16_t indexFont = 0;
+	uint16_t indexData = 0;
+	uint8_t data = 0;
+	uint8_t count = 0;
+	uint8_t targetIndex = 0;
+	uint8_t* pPixel;
+
+	for (indexFont = 0; indexFont < pFont->length; indexFont++)
+	{
+		pPixel = (uint8_t*)pFont->chars[indexFont].image->data;
+		for(indexData = 0; indexData < pFontComp[indexFont]->sizeComp; indexData += 2)
+		{
+			data = pFontComp[indexFont]->dataComp[indexData];
+			count = pFontComp[indexFont]->dataComp[indexData + 1];
+			for (targetIndex = 0; targetIndex < count; targetIndex++)
+			{
+				*pPixel++ = data;
+			}
+		}
+	}
+}
+
+void GFX_build_logo_frame(void)
+{
+	GFX_DrawCfgScreen	tLogoTemp;
+	SWindowGimpStyle windowGimp;
+	
+	pLogoFrame = getFrame(1);
+	logoStatus = LOGOOFF;
+
+	tLogoTemp.FBStartAdress = pLogoFrame;
+	tLogoTemp.ImageHeight = 480;
+	tLogoTemp.ImageWidth = 800;
+	tLogoTemp.LayerIndex = 1;
+
+	windowGimp.left = (800 - 400) / 2;
+	windowGimp.top =  (480 -  46) / 2;
+	
+	GFX_draw_image_color(&tLogoTemp, windowGimp, &ImgHWcolor);
+/*	
+	char localtext[256];
+	uint8_t ptr = 0;
+	
+	localtext[ptr++] = ' ';
+	localtext[ptr++] = ' ';
+	localtext[ptr++] = 'O';
+	localtext[ptr++] = 'S';
+	localtext[ptr++] = ' ';
+	ptr += GFX_printf_firmware(&localtext[ptr]);
+	localtext[ptr] = 0;
+
+	write_content_simple(&tLogoTemp, 0, 800, 240-24, &FontT24,localtext,CLUT_Font020);
+*/	
+}
+
+void GFX_init(uint32_t  * pDestinationOut)
+{
+	frame[0].StartAddress = FBGlobalStart;
+	GFX_clear_frame_immediately(frame[0].StartAddress);
+	frame[0].status = CLEAR;
+	frame[0].caller = 0;
+
+	for(int i=1;i<MAXFRAMES;i++)
+	{
+		frame[i].StartAddress = frame[i-1].StartAddress + FBOffsetEachIndex;
+		GFX_clear_frame_immediately(frame[i].StartAddress);
+		frame[i].status = CLEAR;
+		frame[i].caller = 0;
+	}
+
+	pInvisibleFrame = getFrame(2);
+	*pDestinationOut = pInvisibleFrame;
+
+	GFX_build_logo_frame();
+	GFX_build_hw_background_frame();
+	
+  /* Register to memory mode with ARGB8888 as color Mode */
+  Dma2dHandle.Init.Mode         = DMA2D_R2M;
+  Dma2dHandle.Init.ColorMode    = DMA2D_ARGB4444;//to fake AL88,  before: DMA2D_ARGB8888;
+  Dma2dHandle.Init.OutputOffset = 0;
+
+  /* DMA2D Callbacks Configuration */
+  Dma2dHandle.XferCpltCallback  = GFX_Dma2d_TransferComplete;
+  Dma2dHandle.XferErrorCallback = GFX_Dma2d_TransferError;
+
+  Dma2dHandle.Instance  = DMA2D;
+
+  /* DMA2D Initialisation */
+	if(HAL_DMA2D_Init(&Dma2dHandle) != HAL_OK)
+		GFX_Error_Handler();
+
+  if(HAL_DMA2D_ConfigLayer(&Dma2dHandle, 1) != HAL_OK)
+		GFX_Error_Handler();
+
+	DMA2D_at_work = 255;
+}
+void GFX_init1_no_DMA(uint32_t  * pDestinationOut, uint8_t blockFrames)
+{
+	frame[0].StartAddress = FBGlobalStart;
+	GFX_clear_frame_immediately(frame[0].StartAddress);
+	frame[0].status = CLEAR;
+	frame[0].caller = 0;
+
+	for(int i=1;i<MAXFRAMES;i++)
+	{
+		frame[i].StartAddress = frame[i-1].StartAddress + FBOffsetEachIndex;
+		GFX_clear_frame_immediately(frame[i].StartAddress);
+		frame[i].status = CLEAR;
+		frame[i].caller = 0;
+	}
+
+	for(int i=0;i<blockFrames;i++)
+	{
+		frame[i].status = BLOCKED;
+		frame[i].caller = 1;
+	}
+	
+	pInvisibleFrame = getFrame(2);
+	*pDestinationOut = pInvisibleFrame;
+
+	GFX_build_logo_frame();
+	GFX_build_hw_background_frame();
+}
+
+
+void GFX_init2_DMA(void)
+{
+  /* Register to memory mode with ARGB8888 as color Mode */
+  Dma2dHandle.Init.Mode         = DMA2D_R2M;
+  Dma2dHandle.Init.ColorMode    = DMA2D_ARGB4444;//to fake AL88,  before: DMA2D_ARGB8888;
+  Dma2dHandle.Init.OutputOffset = 0;
+
+  /* DMA2D Callbacks Configuration */
+  Dma2dHandle.XferCpltCallback  = GFX_Dma2d_TransferComplete;
+  Dma2dHandle.XferErrorCallback = GFX_Dma2d_TransferError;
+
+  Dma2dHandle.Instance  = DMA2D;
+
+  /* DMA2D Initialisation */
+	if(HAL_DMA2D_Init(&Dma2dHandle) != HAL_OK)
+		GFX_Error_Handler();
+
+  if(HAL_DMA2D_ConfigLayer(&Dma2dHandle, 1) != HAL_OK)
+		GFX_Error_Handler();
+
+	DMA2D_at_work = 255;
+}
+
+
+void GFX_SetFrameTop(uint32_t pDestination)
+{
+	uint8_t NextTopWork = FrameHandler.NextTopWrite + 1;
+
+	if(NextTopWork == RING_BUF_SIZE)
+	{
+		NextTopWork = 0;
+	}
+
+	if(pDestination == 0)
+		pDestination = pInvisibleFrame;
+
+	FrameHandler.pNextTopBuffer[NextTopWork] = pDestination;
+	FrameHandler.NextTopWrite = NextTopWork;
+}
+
+
+void GFX_SetFrameBottom(uint32_t pDestination, uint32_t x0, uint32_t y0, uint32_t width, uint32_t height)
+{
+	uint8_t NextBottomWork = FrameHandler.NextBottomWrite + 1;
+
+	if(NextBottomWork == RING_BUF_SIZE)
+	{
+		NextBottomWork = 0;
+	}
+
+	if(pDestination == 0)
+		pDestination = pInvisibleFrame;
+
+	FrameHandler.nextBottom[NextBottomWork].pBuffer = pDestination;
+	FrameHandler.nextBottom[NextBottomWork].height = height;
+	FrameHandler.nextBottom[NextBottomWork].width = width;
+	FrameHandler.nextBottom[NextBottomWork].leftStart = x0;
+	FrameHandler.nextBottom[NextBottomWork].bottomStart = y0;
+	FrameHandler.NextBottomWrite = NextBottomWork;
+}
+
+
+void GFX_SetFramesTopBottom(uint32_t pTop, uint32_t pBottom, uint32_t heightBottom)
+{
+	GFX_SetFrameTop(pTop);
+	GFX_SetFrameBottom(pBottom, 0, 0, 800, heightBottom);
+}
+
+
+static uint32_t GFX_get_pActualFrameTop(void)
+{
+	return FrameHandler.pActualTopBuffer;
+}
+
+
+static uint32_t GFX_get_pActualFrameBottom(void)
+{
+	return FrameHandler.actualBottom.pBuffer;
+}
+
+
+void GFX_start_VSYNC_IRQ(void)
+{
+  GPIO_InitTypeDef   GPIO_InitStructure;
+
+  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
+  GPIO_InitStructure.Pull = GPIO_NOPULL;
+	GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
+  GPIO_InitStructure.Pin = VSYNC_IRQ_PIN;
+  HAL_GPIO_Init(VSYNC_IRQ_GPIO_PORT, &GPIO_InitStructure);
+
+  HAL_NVIC_SetPriority(VSYNC_IRQ_EXTI_IRQn, 1, 0);
+  HAL_NVIC_EnableIRQ(VSYNC_IRQ_EXTI_IRQn);
+}
+
+
+void GFX_change_LTDC(void)
+{
+	uint32_t pTop = 0;
+	uint32_t pBot = 0;
+	uint32_t heightBot = 0;
+	uint32_t widthBot = 0;
+	uint32_t leftStartBot = 0;
+	uint32_t bottomStartBot = 0;
+	uint8_t change_position = 0;
+	uint8_t change_size = 0;
+	uint8_t nextBottomBackup = FrameHandler.NextBottomRead;		/* Restore entry value in case off logo handling */
+
+	// Top Frame
+	if(FrameHandler.NextTopRead != FrameHandler.NextTopWrite)
+	{
+		FrameHandler.NextTopRead++;
+		if(FrameHandler.NextTopRead == RING_BUF_SIZE)
+		{
+			FrameHandler.NextTopRead = 0;
+		}
+	}
+	pTop = FrameHandler.pNextTopBuffer[FrameHandler.NextTopRead];
+
+	if(FrameHandler.pActualTopBuffer != pTop)
+	{
+		HAL_LTDC_SetAddress(&LtdcHandle, pTop, 1);
+		FrameHandler.pActualTopBuffer = pTop;
+	}	
+	
+	// Bottom Frame
+	if(FrameHandler.NextBottomRead != FrameHandler.NextBottomWrite)
+	{
+		FrameHandler.NextBottomRead++;
+		if(FrameHandler.NextBottomRead == RING_BUF_SIZE)
+		{
+			FrameHandler.NextBottomRead = 0;
+		}
+	}
+	if(logoStatus != LOGOOFF)
+	{
+		switch(logoStatus)
+			{
+			case LOGOSTART:
+				HAL_LTDC_SetAlpha(&LtdcHandle, 0, 1);
+				HAL_LTDC_SetAlpha(&LtdcHandle, 34, 0);
+				HAL_LTDC_ConfigCLUT(&LtdcHandle, (uint32_t *)indexHWcolor, indexHWcolorSIZE, 0);
+				HAL_LTDC_SetAddress(&LtdcHandle, pLogoFrame, 0);
+				HAL_LTDC_SetWindowSize(&LtdcHandle, 480, 800, 0);
+				HAL_LTDC_SetWindowPosition(&LtdcHandle, 0, 0, 0);
+				logoStatus = 2;
+				FrameHandler.NextBottomRead = nextBottomBackup;
+				break;
+
+			case LOGOSTOP:
+				HAL_LTDC_SetAlpha(&LtdcHandle, 255, 1);
+				HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, 0);
+
+				pBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].pBuffer;
+				heightBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].height;
+				widthBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].width;
+				leftStartBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].leftStart;
+				bottomStartBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].bottomStart;
+				HAL_LTDC_SetWindowSize(&LtdcHandle, heightBot, widthBot, 0);
+				HAL_LTDC_SetWindowPosition(&LtdcHandle, bottomStartBot, leftStartBot, 0);
+				HAL_LTDC_SetAddress(&LtdcHandle, pBot, 0);
+				HAL_LTDC_SetAlpha(&LtdcHandle, 255, 0);
+				FrameHandler.actualBottom.height = heightBot;
+				FrameHandler.actualBottom.width = widthBot;
+				FrameHandler.actualBottom.leftStart = leftStartBot;
+				FrameHandler.actualBottom.bottomStart = bottomStartBot;
+				FrameHandler.actualBottom.pBuffer = pBot;
+
+				logoStatus = LOGOOFF;
+				if(backgroundHwStatus == 2)
+				{
+					backgroundHwStatus = LOGOSTART;
+				}
+				break;
+			default:
+				if(logoStatus < 35)
+				{
+					logoStatus++;
+					if(logoStatus <= 15)
+						HAL_LTDC_SetAlpha(&LtdcHandle, 17*logoStatus, 0);
+				}
+				else
+				{
+					logoStatus +=20;
+					HAL_LTDC_SetAlpha(&LtdcHandle, logoStatus-55, 1);
+					HAL_LTDC_SetAlpha(&LtdcHandle, 255+55-logoStatus, 0);
+				}
+				FrameHandler.NextBottomRead = nextBottomBackup;
+				break;
+			}
+		return;
+	}
+	else if (backgroundHwStatus != LOGOOFF)
+	{
+
+		switch(backgroundHwStatus)
+			{
+			case LOGOSTART:
+				HAL_LTDC_ConfigCLUT(&LtdcHandle, (uint32_t *)indexHWcolor, indexHWcolorSIZE, 0);
+				HAL_LTDC_SetAddress(&LtdcHandle, pBackgroundHwFrame, 0);
+				HAL_LTDC_SetWindowSize(&LtdcHandle, 480, 800, 0);
+				HAL_LTDC_SetWindowPosition(&LtdcHandle, 0, 0, 0);
+				backgroundHwStatus = 2;
+				FrameHandler.NextBottomRead = nextBottomBackup;
+				break;
+
+			case LOGOSTOP:
+				HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, 0);
+				pBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].pBuffer;
+				heightBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].height;
+				widthBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].width;
+				leftStartBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].leftStart;
+				bottomStartBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].bottomStart;
+				HAL_LTDC_SetWindowSize(&LtdcHandle, heightBot, widthBot, 0);
+				HAL_LTDC_SetWindowPosition(&LtdcHandle, bottomStartBot, leftStartBot, 0);
+				HAL_LTDC_SetAddress(&LtdcHandle, pBot, 0);
+				HAL_LTDC_SetAlpha(&LtdcHandle, 255, 0);
+				FrameHandler.actualBottom.height = heightBot;
+				FrameHandler.actualBottom.width = widthBot;
+				FrameHandler.actualBottom.leftStart = leftStartBot;
+				FrameHandler.actualBottom.bottomStart = bottomStartBot;
+				FrameHandler.actualBottom.pBuffer = pBot;
+				backgroundHwStatus = LOGOOFF;
+				break;
+
+			default:
+				FrameHandler.NextBottomRead = nextBottomBackup;
+				break;
+			}
+
+		return;
+	}
+	else
+	{
+		pBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].pBuffer;
+		heightBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].height;
+		widthBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].width;
+		leftStartBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].leftStart;
+		bottomStartBot = FrameHandler.nextBottom[FrameHandler.NextBottomRead].bottomStart;
+
+		if(FrameHandler.actualBottom.pBuffer == pBot)
+			pBot = 0;
+		
+		if((FrameHandler.actualBottom.height != heightBot) || (FrameHandler.actualBottom.width != widthBot))
+			change_size = 1;
+
+		if((FrameHandler.actualBottom.leftStart != leftStartBot) || (FrameHandler.actualBottom.bottomStart != bottomStartBot))
+			change_position = 1;
+
+		if(pBot || change_size || change_position)
+		{
+			if(heightBot && widthBot)
+				HAL_LTDC_SetWindowSize(&LtdcHandle, heightBot, widthBot, 0);
+
+			if(change_position || leftStartBot || bottomStartBot)
+				HAL_LTDC_SetWindowPosition(&LtdcHandle, bottomStartBot, leftStartBot, 0);
+
+			if(pBot)
+				HAL_LTDC_SetAddress(&LtdcHandle, pBot, 0);
+
+			if(change_size)
+			{
+				FrameHandler.actualBottom.height = heightBot;
+				FrameHandler.actualBottom.width = widthBot;
+			}
+			if(change_position)
+			{
+				FrameHandler.actualBottom.leftStart = leftStartBot;
+				FrameHandler.actualBottom.bottomStart = bottomStartBot;
+			}
+			if(pBot)
+				FrameHandler.actualBottom.pBuffer = pBot;
+		}		
+	}
+}
+
+uint8_t GFX_is_colorschemeDiveStandard(void)
+{
+	return (ColorLUT[CLUT_Font027] == 0x00FFFFFF);
+}
+
+
+void change_CLUT_entry(uint8_t entryToChange, uint8_t entryUsedForChange)
+{
+/* bug fix
+	static uint8_t counter = 0;
+	
+	if(entryToChange == 0x1C)
+		counter++;
+*/	
+	ColorLUT[entryToChange] = ColorLUT[entryUsedForChange];
+	HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, 1);
+	if(logoStatus == LOGOOFF)
+		HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, 0);
+}
+
+
+void GFX_use_colorscheme(uint8_t colorscheme)
+{
+	uint8_t ColorSchemeStart;
+
+	if(colorscheme > 3)
+		colorscheme = 0;
+
+	ColorSchemeStart = CLUT_Colorscheme0 + (8 * colorscheme);
+	for(int i=1; i<8; i++)
+	{
+		ColorLUT[CLUT_Font027 + i] = ColorLUT[ColorSchemeStart + i];
+	}
+	change_CLUT_entry(CLUT_Font027, ColorSchemeStart);
+}
+
+
+void GFX_VGA_transform(uint32_t pSource, uint32_t pDestination)
+{
+	int h, v;
+	uint32_t offsetSource, offsetSourceStartOfLine;
+
+	offsetSourceStartOfLine = 480 + 480 - 2;
+	for(v=0;v<480;v++)
+	{
+		offsetSource = offsetSourceStartOfLine;
+		for(h=0;h<640;h++)
+		{
+			*(__IO uint8_t*)pDestination = *(uint8_t*)(pSource + offsetSource);
+			pDestination++;
+			offsetSource += 1;
+			*(__IO uint8_t*)pDestination = *(uint8_t*)(pSource + offsetSource);
+			pDestination++;
+			offsetSource += 480 + 479;
+		}
+		offsetSourceStartOfLine -= 2;
+	}
+}
+
+
+static void GFX_clear_frame_immediately(uint32_t pDestination)
+{
+	uint32_t i;
+	uint32_t* pfill = (uint32_t*) pDestination;
+
+
+	for(i = 200*480; i > 0; i--)
+	{
+		*pfill++ = 0;
+		*pfill++ = 0;
+	}
+}
+
+
+void GFX_clear_window_immediately(GFX_DrawCfgWindow* hgfx)
+{
+	uint32_t pDestination, i, j;
+	uint16_t left, width, bottom, height, nextlineStep;
+
+	pDestination = (uint32_t)hgfx->Image->FBStartAdress;
+
+	left 		= hgfx->WindowX0;
+	width 	= 1 + hgfx->WindowX1 - left;
+	bottom 	= hgfx->WindowY0;
+	height 	= 1 + hgfx->WindowY1 - bottom;
+	nextlineStep = hgfx->Image->ImageHeight - height;
+	nextlineStep *= 2;
+
+	pDestination += 2 * bottom;
+	pDestination += 2 * hgfx->Image->ImageHeight * left;
+
+	for(j = width; j > 0; j--)
+	{
+		for(i = height; i > 0; i--)
+		{
+			*(__IO uint16_t*)pDestination = 0;
+			pDestination += 2;
+		}
+		pDestination += nextlineStep;
+	}
+}
+
+
+static void  GFX_clear_frame_dma2d(uint8_t frameId)
+{
+	if(frameId >= MAXFRAMES)
+		return;
+
+	DMA2D_at_work = frameId;
+
+	if (HAL_DMA2D_Start_IT(&Dma2dHandle, 0x0000000000, frame[frameId].StartAddress, 480, 800) != HAL_OK)
+		GFX_Error_Handler();
+}
+
+
+void GFX_fill_buffer(uint32_t pDestination, uint8_t alpha, uint8_t color)
+{
+
+	union al88_u
+	{
+		uint8_t al8[2];
+		uint16_t al88;
+	};
+	union al88_u colorcombination;
+	uint32_t i;
+	uint32_t* pfill = (uint32_t*) pDestination;
+	uint32_t fillpattern;
+
+	colorcombination.al8[0] = color;
+	colorcombination.al8[1] = alpha;
+
+	fillpattern = (colorcombination.al88 << 16) | colorcombination.al88;
+	for(i = 800*480/2; i > 0; i--)
+	{
+		*pfill++ = fillpattern;
+	}
+}
+
+static void GFX_draw_image_color(GFX_DrawCfgScreen *hgfx, SWindowGimpStyle window, const tImage *image)
+{
+	uint16_t* pDestination;
+
+	uint32_t j;
+	point_t start, stop;
+
+	start.x = window.left;
+	start.y = (hgfx->ImageHeight - image->height - window.top);
+	stop.y = start.y + image->height;
+	stop.x = start.x + image->width;
+	j = 0;
+	
+	for(int xx = start.x; xx < stop.x; xx++)
+	{
+		pDestination = (uint16_t*)hgfx->FBStartAdress;
+		pDestination += xx * hgfx->ImageHeight;
+		pDestination += start.y;
+		for(int yy = start.y; yy < stop.y; yy++)
+		{
+			*(__IO uint16_t*)pDestination++ = 0xFF << 8 | image->data[j++];
+		}
+	}
+}
+
+
+/* this is NOT fast nor optimized */
+void GFX_draw_pixel(GFX_DrawCfgScreen *hgfx, int16_t x, int16_t y, uint8_t color)
+{
+	uint16_t* pDestination;
+
+	pDestination = (uint16_t*)hgfx->FBStartAdress;
+	pDestination += x * hgfx->ImageHeight;
+	pDestination += y;
+
+	*(__IO uint16_t*)pDestination = 0xFF << 8 | color;
+}
+
+/* this is NOT fast nor optimized */
+void GFX_draw_circle(GFX_DrawCfgScreen *hgfx, point_t center, uint8_t radius, int8_t color)
+{
+  int x, y;
+  int l;
+  int r2, y2;
+  int y2_new;
+  int ty;
+
+  /* cos pi/4 = 185363 / 2^18 (approx) */
+  l = (radius * 185363) >> 18;
+
+	/* hw */
+	l += 1;
+	
+  /* At x=0, y=radius */
+  y = radius;
+
+  r2 = y2 = y * y;
+  ty = (2 * y) - 1;
+  y2_new = r2 + 3;
+
+  for (x = 0; x <= l; x++) {
+    y2_new -= (2 * x) - 3;
+
+    if ((y2 - y2_new) >= ty) {
+      y2 -= ty;
+      y -= 1;
+      ty -= 2;
+    }
+
+    GFX_draw_pixel (hgfx,  x + center.x,  y + center.y, color);
+    GFX_draw_pixel (hgfx,  x + center.x, -y + center.y, color);
+    GFX_draw_pixel (hgfx, -x + center.x,  y + center.y, color);
+    GFX_draw_pixel (hgfx, -x + center.x, -y + center.y, color);
+
+    GFX_draw_pixel (hgfx,  y + center.x,  x + center.y, color);
+    GFX_draw_pixel (hgfx,  y + center.x, -x + center.y, color);
+    GFX_draw_pixel (hgfx, -y + center.x,  x + center.y, color);
+    GFX_draw_pixel (hgfx, -y + center.x, -x + center.y, color);
+  }
+}
+
+
+void GFX_draw_colorline(GFX_DrawCfgScreen *hgfx, point_t start, point_t stop, uint8_t color)
+{
+	uint32_t pDestination;
+	uint32_t j;
+	uint32_t temp;
+
+	if(start.x == stop.x)
+	{
+		if(stop.y < start.y)
+		{
+			temp = stop.y;
+			stop.y = start.y;
+			start.y = temp;
+		}
+		pDestination = (uint32_t)hgfx->FBStartAdress;
+		pDestination += start.x * hgfx->ImageHeight * 2;
+		pDestination += start.y * 2;
+		for (j = stop.y - start.y; j > 0; j--)
+		{
+			*(__IO uint8_t*)pDestination = color;
+			pDestination += 1;
+			*(__IO uint8_t*)pDestination = 0xFF;
+			pDestination += 1;
+		}
+	}
+	else
+	if(start.y == stop.y)
+	{
+		if(stop.x < start.x)
+		{
+			temp = stop.x;
+			stop.x = start.x;
+			start.x = temp;
+		}
+		pDestination = (uint32_t)hgfx->FBStartAdress;
+		pDestination += start.x * hgfx->ImageHeight * 2;
+		pDestination += start.y * 2;
+		for (j = stop.x - start.x; j > 0; j--)
+		{
+			*(__IO uint8_t*)pDestination = color;
+			pDestination += 1;
+			*(__IO uint8_t*)pDestination = 0xFF;
+			pDestination -= 1;
+			pDestination += hgfx->ImageHeight * 2;
+		}
+	}
+	else // diagonal Bresenham's_line_algorithm
+	{
+		int x0 = start.x;
+		int y0 = start.y;
+		int x1 = stop.x;
+		int y1 = stop.y;
+		int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;
+		int dy = abs(y1-y0), sy = y0<y1 ? 1 : -1; 
+		int err = (dx>dy ? dx : -dy)/2, e2;
+	 
+		for(;;)
+		{
+			pDestination = (uint32_t)hgfx->FBStartAdress;
+			pDestination += ((x0 * hgfx->ImageHeight) + y0) * 2;
+			*(__IO uint8_t*)pDestination = color;
+			pDestination += 1;
+			*(__IO uint8_t*)pDestination = 0xFF;
+			if (x0==x1 && y0==y1) break;
+			e2 = err;
+			if (e2 >-dx) { err -= dy; x0 += sx; }
+			if (e2 < dy) { err += dx; y0 += sy; }
+		}
+	}
+}
+
+//  ===============================================================================
+//	GFX_graph_print
+/// @brief	Print all those nice curves, especially in logbook und miniLiveLogGraph
+///	@version 0.0.2 hw 160519
+///	
+/// 151022 hw -bug fix 
+/// - die aktuelle Version macht keine Linien mehr �ber die gesamte Bildschirmh�he.
+/// - daf�r sind L�cher in der Kurve (z.B. Temperaturgraph Tauchgang Matthias 17.10.15 15:19)
+///
+/// more details about range can be found in show_logbook_logbook_show_log_page2() - temperature graph
+///
+///	@param 	window: top and bottom is only the range used by the data of the graph, not the entire screen / scale
+/// @param 	drawVeilUntil: ist auff�llen des Bereichs unter der Kurve mit etwas hellerer Farbe
+///	@param 	Xdivide: wird bisher nichr benutzt.
+//  ===============================================================================
+
+
+void GFX_graph_print(GFX_DrawCfgScreen *hgfx, const  SWindowGimpStyle *window, const int16_t drawVeilUntil, uint8_t Xdivide, uint16_t dataMin, uint16_t dataMax,  uint16_t *data, uint16_t datalength, uint8_t color, uint8_t *colour_data)
+{
+	uint16_t* pDestination_tmp;
+	uint16_t* pDestination_start;
+	uint16_t* pDestination_end;
+	uint16_t* pDestination_zero_veil;
+
+	uint32_t max = 0;
+	int windowheight = -1;
+	int windowwidth = -1;
+	int i = -1;
+	int w1 = -1;
+	int w2 = -1;
+
+	uint32_t h_ulong = 0;
+	uint32_t h_ulong_old = 0;
+	_Bool invert = 0;
+
+	uint16_t dataDelta = 0;
+	uint16_t dataDeltaHalve = 0;
+	uint16_t dataTemp = 0;
+	
+	uint8_t colorDataTemp;
+	uint8_t	colormask = 0;
+
+	pDestination_zero_veil = 0;
+
+	if(dataMin > dataMax)
+	{
+		uint16_t dataFlip;
+		dataFlip = dataMin;
+		dataMin = dataMax;
+		dataMax = dataFlip;
+		invert = 1;
+	}
+	else
+		invert = 0;
+
+	colormask = color;
+		
+	if(window->bottom > 479)
+		return;
+	if(window->top > 479)
+		return;
+	if(window->right > 799)
+		return;
+	if(window->left > 799)
+		return;
+	if(window->bottom < 0)
+		return;
+	if(window->top < 0)
+		return;
+	if(window->right < 0)
+		return;
+	if(window->left < 0)
+		return;
+	if(window->bottom <= window->top)
+		return;
+	if(window->right <= window->left)
+		return;
+	
+	windowheight = window->bottom - window->top ;
+	windowwidth = window->right - window->left;
+	w1 = 0;
+	w2 = 0;
+	if(dataMax == dataMin)
+		dataMax++;
+	dataDelta =  (unsigned long)(dataMax - dataMin);
+	dataDeltaHalve = dataDelta / 2;
+	while((w1 <= windowwidth) && (w2 < datalength))
+	{
+		int tmp = (10 * w1 * (long)datalength)/windowwidth;
+		w2 = tmp/10;
+		int rest = tmp - w2*10;
+		if(rest >= 5)
+			w2++;
+
+		if((datalength - 1) < w2)
+			w2 = datalength-1;
+
+		if(colour_data != NULL)
+		{
+			colorDataTemp = colour_data[w2];
+			colormask =    color + colorDataTemp;
+		}
+
+		dataTemp = data[w2];
+		if(Xdivide > 1)
+		{
+			w2++;
+			for(i=1;i<Xdivide;i++)
+			{
+				if(data[w2]>dataTemp)
+					dataTemp = data[w2];
+				w2++;
+			}
+		}
+		
+		if(dataTemp > dataMin)
+			dataTemp -= dataMin;
+		else
+			dataTemp = 0;
+
+		if(invert)
+		{
+			if(dataTemp < dataDelta)
+				dataTemp = dataDelta - dataTemp;
+			else
+				dataTemp = 0;
+		}
+		
+		h_ulong = (unsigned long)dataTemp;
+		h_ulong *= windowheight;
+		h_ulong += dataDeltaHalve;
+		h_ulong /= dataDelta;
+		
+		if(h_ulong > (window->bottom - window->top))
+			h_ulong = (window->bottom - window->top);
+
+		if(drawVeilUntil > 0)
+		{
+				pDestination_zero_veil = (uint16_t*)hgfx->FBStartAdress;
+				pDestination_zero_veil += ((479 - (drawVeilUntil - 2) ) + ((w1 + window->left) * hgfx->ImageHeight) );
+		}
+		else if(drawVeilUntil < 0 )
+		{
+				pDestination_zero_veil = (uint16_t*)hgfx->FBStartAdress;
+				pDestination_zero_veil += ((479 + (drawVeilUntil)) + ((w1 + window->left) * hgfx->ImageHeight) );
+		}
+
+		if(h_ulong + window->top > max)
+		{
+			max = h_ulong + window->top;
+		}
+
+// hw 160519 wof�r ist das? Damit funktioniert Temperatur 25,5�C nicht!
+//		if((dataMax == 255) || (data[w2] != 255))
+//		{
+			//output_content[pointer] = colormask;
+			//output_mask[pointer] = true;
+		if(dataTemp != 0xFFFF)	/* do not draw invalid data pixels */
+		{
+			if(w1 > 0)
+			{
+				pDestination_start = (uint16_t*)hgfx->FBStartAdress;
+				pDestination_start += (((479 - (window->top)) + ((w1 + window->left) * hgfx->ImageHeight)));
+				pDestination_end = pDestination_start;
+
+				if(h_ulong >= h_ulong_old)
+				{
+					pDestination_start -= h_ulong_old;
+					pDestination_end -= h_ulong;
+
+				}
+				else
+				{
+					if(h_ulong < h_ulong_old)
+					{
+						pDestination_start += h_ulong_old;
+						pDestination_end += h_ulong;
+					}
+					else
+					{
+						pDestination_start += h_ulong;
+						pDestination_end += h_ulong_old;
+					}
+				}
+
+				
+				// deco stops
+				if(drawVeilUntil < 0)
+				{
+					pDestination_tmp = pDestination_end;
+					while(pDestination_tmp <= pDestination_zero_veil)
+					{
+						*(__IO uint16_t*)pDestination_tmp = (0x80 << 8) | colormask;
+						pDestination_tmp++;
+					}
+				}
+				else
+				{
+					// regular graph with veil underneath if requested
+					// von oben nach unten
+					// von grossen pDestination Werten zu kleinen pDestination Werten
+					{
+						pDestination_tmp = pDestination_start;
+						while(pDestination_tmp >= pDestination_end)
+						{
+							*(__IO uint16_t*)pDestination_tmp = (0xFF << 8) | colormask ;
+							pDestination_tmp--;
+						}
+					}
+
+					while((drawVeilUntil > 0) && (pDestination_tmp >= pDestination_zero_veil))
+					{
+						*(__IO uint16_t*)pDestination_tmp = (0x20 << 8) | colormask ;
+						pDestination_tmp--;
+					}
+				}
+			}
+			h_ulong_old = h_ulong;
+		}
+		w1++;
+		w2++;
+	}
+}
+
+
+void GFX_draw_header(GFX_DrawCfgScreen *hgfx, uint8_t colorId)
+{
+	uint32_t pDestination;
+	point_t start, stop, now;
+	uint8_t alpha;
+
+	/* display coordinate system */
+	start.y = 400;
+	stop.y = 479;
+
+	start.x = 0;
+	stop.x = 799;
+
+	now.y = start.y;
+	now.x = start.x;
+
+	while (now.x <= stop.x)
+	{
+		now.y = start.y;
+		pDestination = (uint32_t)hgfx->FBStartAdress;
+		pDestination += now.x * hgfx->ImageHeight * 2;
+		pDestination += now.y * 2;
+		now.x += 1;
+
+		alpha = 27;
+		while(alpha < 246)
+		{
+			alpha += 9;
+			*(__IO uint8_t*)pDestination = colorId;
+			pDestination += 1;
+			*(__IO uint8_t*)pDestination = alpha;
+			pDestination += 1;
+			now.y += 1;
+		}
+
+		while(now.y <= stop.y)
+		{
+			*(__IO uint8_t*)pDestination = colorId;
+			pDestination += 1;
+			*(__IO uint8_t*)pDestination = 0xFF;
+			pDestination += 1;
+			now.y += 1;
+		}
+	}
+}
+
+void GFX_draw_box2(GFX_DrawCfgScreen *hgfx, point_t start, point_t stop, uint8_t color, uint8_t roundCorners)
+{
+	point_t point2, point4;
+
+	if(roundCorners)
+	{
+		point2.x  = stop.x - start.x;
+		point2.y  = stop.y - start.y;
+		GFX_draw_box(hgfx,start,point2,1,color);
+	}
+	else
+	{
+		point2.x  = stop.x;
+		point2.y  = start.y;
+
+		point4.x  = start.x;
+		point4.y  = stop.y;
+		
+		GFX_draw_line(hgfx,start,point2,color);
+		GFX_draw_line(hgfx,point2,stop,color);
+		GFX_draw_line(hgfx,stop,point4,color);
+		GFX_draw_line(hgfx,point4,start,color);
+	}
+}
+
+void GFX_draw_box(GFX_DrawCfgScreen *hgfx, point_t LeftLow, point_t WidthHeight, uint8_t Style, uint8_t color)
+{
+	uint16_t* pDestination;
+	uint16_t* pStart;
+	uint32_t j;
+	uint32_t lineWidth, lineHeight;
+	int x, y;
+	uint8_t intensity;
+	int stepdir;
+
+	typedef struct {
+			int x;
+			int y;
+			uint8_t intensity;
+	} corner_t;
+	const corner_t corner[16] = {
+		{3,3,255}, // nur einmal
+		{9,0,242},
+		{8,0,194},
+		{7,0,115},
+		{6,0,36},
+		{9,1,33},
+		{8,1,84},
+		{7,1,161},
+		{6,1,255},
+		{5,1,242},
+		{4,1,36},
+		{6,2,33},
+		{5,2,84},
+		{4,2,255},
+		{3,2,84},
+		{4,3,110}
+	};
+
+	lineWidth = WidthHeight.x;
+	lineHeight = WidthHeight.y;
+	pStart = (uint16_t*)hgfx->FBStartAdress;
+
+	pStart += LeftLow.x * hgfx->ImageHeight;
+	pStart += LeftLow.y;
+	stepdir = 1;
+
+	// Untere Linie
+	pDestination = pStart;
+	if(Style)
+	{
+		pDestination += stepdir * 10 * hgfx->ImageHeight;
+		lineWidth -= 18;
+	}
+	for (j = lineWidth; j > 0; j--)
+	{
+
+		*(__IO uint16_t*)pDestination = 0xFF00 + color;
+		pDestination += stepdir * hgfx->ImageHeight;
+	}
+
+	// Obere Linie
+
+	pDestination = pStart + stepdir * WidthHeight.y;
+	if(Style)
+	{
+		pDestination += stepdir * 10 * hgfx->ImageHeight;
+	}
+
+	for (j = lineWidth; j > 0; j--)
+	{
+		*(__IO uint16_t*)pDestination = 0xFF00 + color;
+		pDestination += stepdir * hgfx->ImageHeight;
+	}
+
+	// Linke Linie
+	pDestination = pStart;
+
+	if(Style)
+	{
+		pDestination += stepdir * 10;
+		lineHeight -= 18;
+	}
+
+	for (j = lineHeight; j > 0; j--)
+	{
+		*(__IO uint16_t*)pDestination = 0xFF00 + color;
+		pDestination += stepdir;
+	}
+
+
+	// Rechte Linie
+
+	pDestination = pStart + stepdir * WidthHeight.x * hgfx->ImageHeight;
+	if(Style)
+	{
+		pDestination += stepdir * 10;
+	}
+
+	for (j = lineHeight; j > 0; j--)
+	{
+		*(__IO uint16_t*)pDestination = 0xFF00 + color;
+		pDestination += stepdir;
+	}
+
+
+	// Ecken wenn notwendig == Style
+	if(Style)
+	{
+		// links unten
+		pDestination = pStart;
+		x = corner[0].x;
+		y = corner[0].y;
+		intensity = corner[0].intensity;
+
+    *(__IO uint16_t*)(pDestination  + stepdir * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+
+		for(j = 15; j > 0; j--)
+		{
+			x = corner[j].x;
+			y = corner[j].y;
+			intensity = corner[j].intensity;
+			*(__IO uint16_t*)(pDestination + stepdir * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+			*(__IO uint16_t*)(pDestination + stepdir	* (x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+		}
+		// links oben
+		pDestination = pStart + stepdir * WidthHeight.y;
+		x = corner[0].x;
+		y = corner[0].y;
+		intensity = corner[0].intensity;
+    *(__IO uint16_t*)(pDestination + stepdir * (-y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+
+		for(j = 15; j > 0; j--)
+		{
+			x = corner[j].x;
+			y = corner[j].y;
+			intensity = corner[j].intensity;
+			*(__IO uint16_t*)(pDestination + stepdir * (-y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+			*(__IO uint16_t*)(pDestination + stepdir * (-x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+		}
+		// rechts unten
+		pDestination = pStart + stepdir * WidthHeight.x * hgfx->ImageHeight;
+		x = corner[0].x;
+		y = corner[0].y;
+		intensity = corner[0].intensity;
+    *(__IO uint16_t*)(pDestination + stepdir * (y - (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+
+		for(j = 15; j > 0; j--)
+		{
+			x = corner[j].x;
+			y = corner[j].y;
+			intensity = corner[j].intensity;
+			*(__IO uint16_t*)(pDestination + stepdir * (y - (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+			*(__IO uint16_t*)(pDestination + stepdir * (x - (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+		}
+		// rechts oben
+		pDestination = pStart + stepdir * WidthHeight.y + stepdir * WidthHeight.x * hgfx->ImageHeight;
+		x = corner[0].x;
+		y = corner[0].y;
+		intensity = corner[0].intensity;
+    *(__IO uint16_t*)(pDestination + stepdir * -1 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+
+		for(j = 15; j > 0; j--)
+		{
+			x = corner[j].x;
+			y = corner[j].y;
+			intensity = corner[j].intensity;
+			*(__IO uint16_t*)(pDestination + stepdir * -1 * (y + (x * hgfx->ImageHeight))) = (intensity << 8) + color;
+			*(__IO uint16_t*)(pDestination + stepdir * -1 * (x + (y * hgfx->ImageHeight))) = (intensity << 8) + color;
+		}
+	}
+}
+
+
+/**
+  ******************************************************************************
+  * @brief   GFX write label. /  Write string with defined color
+  * @author  heinrichs weikamp gmbh
+  * @version V0.0.1
+  * @date    07-July-2014
+  ******************************************************************************
+	*
+  * @param  hgfx: 			check gfx_engine.h.
+  * @param  color: 			16bit Alpha+CLUT.
+  * @retval None
+  */
+
+uint32_t GFX_write_label(const tFont *Font, GFX_DrawCfgWindow* hgfx, const char *pText, uint8_t color)
+{
+	return GFX_write_string_color(Font, hgfx, pText, 0, color);
+}
+
+
+/**
+  ******************************************************************************
+  * @brief   GFX writeGfx_write_label_varstring. /  Write string with all parameters and font color options
+	heinrichs weikamp gmbh
+  * @version V0.0.1
+  * @date    22-April-2014
+  ******************************************************************************
+	*
+  * @param  XleftGimpStyle:
+  * @param  XrightGimpStyle:
+  * @param  YtopGimpStyle:
+  * @param  color:
+  * @param  tFont:
+  * @param  text: 	text to be printed
+  * @retval None
+  */
+
+void Gfx_write_label_var(GFX_DrawCfgScreen *screenInput, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle,  const tFont *Font, const uint8_t color, const char *text)
+{
+
+    GFX_DrawCfgWindow	hgfx;
+
+	if(XrightGimpStyle > 799)
+		XrightGimpStyle = 799;
+	if(XleftGimpStyle >= XrightGimpStyle)
+		XleftGimpStyle = 0;
+	if(YtopGimpStyle > 479)
+		YtopGimpStyle = 479;
+    hgfx.Image = screenInput;
+	hgfx.WindowNumberOfTextLines = 1;
+	hgfx.WindowLineSpacing = 0;
+	hgfx.WindowTab = 0;
+
+	hgfx.WindowX0 = XleftGimpStyle;
+	hgfx.WindowX1 = XrightGimpStyle;
+	hgfx.WindowY1 = 479 - YtopGimpStyle;
+	if(hgfx.WindowY1 < Font->height)
+		hgfx.WindowY0 = 0;
+	else
+		hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+	GFX_write_label(Font, &hgfx, text, color);
+}
+
+/**
+  ******************************************************************************
+  * @brief   GFX write string. /  Write string with all parameters and font options
+  * @author  heinrichs weikamp gmbh
+  * @version V0.0.1
+  * @date    22-April-2014
+  ******************************************************************************
+	*
+  * @param  hgfx: 			check gfx_engine.h.
+  * @param  color: 			32bit ARGB8888.
+  * @retval None
+  */
+
+uint16_t GFX_return_offset(const tFont *Font, char *pText, uint8_t position)
+{
+	char character;
+	uint16_t digit, i;
+	uint8_t found;
+	uint16_t distance;
+
+	if(position == 0)
+		return 0;
+
+	distance = 0;
+	for(digit = 0; digit < position; digit++)
+	{
+		character = pText[digit];
+		if(character == 0)
+			return 0;
+
+		found = 0;
+		for(i=0;i<Font->length;i++)
+		{
+			if(Font->chars[i].code == character)
+			{
+				found = 1;
+				break;
+			}
+		}
+		if(found)
+		{
+			distance += (uint16_t)(Font->chars[i].image->width);
+		}
+	}
+	return distance;
+
+	/*	 FEHLT:
+	if(*pText < ' ')
+	if((*pText) & 0x80)
+
+	*/
+}
+
+void GFX_clean_line(GFX_DrawCfgWindow* hgfx, uint32_t line_number)
+{
+	uint16_t height;
+	uint32_t pDestination, i, j;
+	uint16_t left, width, bottom, nextlineStep;
+
+	bottom = hgfx->WindowY0;
+
+	if(hgfx->WindowNumberOfTextLines && line_number && (line_number <= hgfx->WindowNumberOfTextLines))
+	{
+		bottom += hgfx->WindowLineSpacing * (hgfx->WindowNumberOfTextLines - line_number);
+		height = hgfx->WindowLineSpacing;
+	}
+	else
+	{
+		height 	= 1 + hgfx->WindowY1 - bottom;
+	}
+
+	pDestination = (uint32_t)hgfx->Image->FBStartAdress;
+
+	left 		= hgfx->WindowX0;
+	width 	= 1 + hgfx->WindowX1 - left;
+	nextlineStep = hgfx->Image->ImageHeight - height;
+	nextlineStep *= 2;
+	pDestination += 2 * bottom;
+	pDestination += 2 * hgfx->Image->ImageHeight * left;
+
+	for(j = width; j > 0; j--)
+	{
+		for(i = height; i > 0; i--)
+		{
+			*(__IO uint16_t*)pDestination = 0;
+			pDestination += 2;
+		}
+		pDestination += nextlineStep;
+	}
+}
+
+
+void GFX_clean_area(GFX_DrawCfgScreen *tMscreen, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, uint16_t YBottomGimpStyle)
+{
+	uint16_t height;
+	uint32_t pDestination, i, j;
+	int32_t left, width, bottom, nextlineStep;
+
+	bottom = tMscreen->ImageHeight - YBottomGimpStyle;
+	height = 1 + YBottomGimpStyle - YtopGimpStyle;
+
+	if(bottom < 0)
+		bottom = 0;
+	if(height > tMscreen->ImageHeight)
+		height = tMscreen->ImageHeight;
+	
+	pDestination = tMscreen->FBStartAdress;
+
+	left 		= XleftGimpStyle;
+	width 	= 1 + XrightGimpStyle - left;
+	if(width < 1)
+		width = 1;
+
+	if(width > tMscreen->ImageWidth)
+		width = tMscreen->ImageWidth;
+
+	nextlineStep = tMscreen->ImageHeight - height;
+	nextlineStep *= 2;
+	pDestination += 2 * bottom;
+	pDestination += 2 * tMscreen->ImageHeight * left;
+
+	for(j = width; j > 0; j--)
+	{
+		for(i = height; i > 0; i--)
+		{
+			*(__IO uint16_t*)pDestination = 0;
+			pDestination += 2;
+		}
+		pDestination += nextlineStep;
+	}
+}
+
+
+uint32_t GFX_write_string(const tFont *Font, GFX_DrawCfgWindow* hgfx, const char *pText, uint32_t line_number)
+{
+	return GFX_write_string_color(Font, hgfx, pText, line_number, 0);
+}
+
+uint32_t GFX_write_string_color(const tFont *Font, GFX_DrawCfgWindow* hgfx, const char *pText, uint32_t line_number, uint8_t color)
+{
+	if(hgfx->Image->FBStartAdress < FBGlobalStart)
+		return 0;
+
+	GFX_CfgWriteString settings;
+	uint32_t newXdelta;
+	uint8_t minimal = 0;
+//	uint32_t try_again;
+
+	if(hgfx->WindowNumberOfTextLines && line_number && (line_number <= hgfx->WindowNumberOfTextLines))
+	{
+		settings.Ydelta = hgfx->WindowLineSpacing * (hgfx->WindowNumberOfTextLines - line_number);
+	}
+	else
+	{
+		settings.Ydelta = 0;
+	}
+	settings.font = (uint32_t)Font;
+	settings.Xdelta = 0;
+	settings.color = color;
+	settings.invert = 0;
+	settings.resize = 0;
+	settings.dualFont = 0;
+	settings.spaceMode = 0;
+	settings.singleSpaceWithSizeOfNextChar = 0;
+	settings.useTinyFont = 0;
+	settings.TinyFontExtraYdelta = 0;
+	settings.TinyFont = (uint32_t)Font;
+	settings.doubleSize = 0;
+
+	if((*pText) == TXT_MINIMAL) // for customtext and anything with Sonderzeichen
+		minimal = 1;
+	else
+		minimal = 0;
+
+	if(Font == &FontT48min)
+	{
+		settings.TinyFont = (uint32_t)&FontT24min;
+		settings.TinyFontExtraYdelta = 6;
+	}
+
+	settings.actualFont = (tFont *)settings.font;
+
+	while ((*pText != 0) && (settings.Xdelta != 0x0000FFFF))// und fehlend: Abfrage window / image size
+	{
+//		try_again = 0;
+
+		if((*pText == '\177') && !minimal)
+		{
+			if(settings.singleSpaceWithSizeOfNextChar)
+			{
+				settings.singleSpaceWithSizeOfNextChar = 0;
+				pText++;
+				settings.Xdelta += *pText;
+			}
+			else
+				settings.singleSpaceWithSizeOfNextChar = 1;
+		}
+		else
+		if(*pText < ' ')
+		{
+			/* Xdelta -inline- changes */
+			if((*pText == '\t') && !minimal)
+				settings.Xdelta = hgfx->WindowTab - hgfx->WindowX0;
+			else
+			if(*pText == '\r') // carriage return, no newline
+				settings.Xdelta = 0;
+			else
+			if((*pText == '\003') && !minimal) // doubleSize
+				settings.doubleSize = 1;
+			else
+			/* Xdelta -up/down changes */
+			if((*pText == '\f') && !minimal) // form feed = top align
+			{
+					if((hgfx->WindowY1 - hgfx->WindowY0) >= ((tFont *)settings.font)->height)
+					{
+						settings.Ydelta = hgfx->WindowY1 - hgfx->WindowY0;
+						settings.Ydelta -= ((tFont *)settings.font)->height;
+					}
+			}
+			else
+			if(*pText == '\n') // newline, no carriage return
+			{
+				if(hgfx->WindowNumberOfTextLines && (line_number < hgfx->WindowNumberOfTextLines))
+				{
+					line_number++;
+					settings.Ydelta = hgfx->WindowLineSpacing * (hgfx->WindowNumberOfTextLines - line_number);
+				}
+			}
+			else
+			/* Font style changes */
+			if(*pText == '\a')
+				settings.invert = settings.invert ? 0 : 1;
+			else
+			if((*pText == '\016') && !minimal)
+			{
+				if(settings.dualFont == 0)
+					settings.dualFont = 1;
+				else
+					settings.actualFont = (tFont *)settings.TinyFont;
+			}
+			else
+			if((*pText == '\017') && !minimal)
+			{
+				settings.dualFont = 0;
+				settings.actualFont = (tFont *)settings.font;
+			}
+			else
+			if((*pText >= '\020') && (*pText <= '\032') && !minimal)
+				settings.color = *pText - '\020';
+			else
+			if((*pText == '\034') && !minimal)
+				settings.spaceMode = 1;
+			else
+			if((*pText == '\035') && !minimal)
+				settings.spaceMode = 0;
+		}
+		else
+		if(((*pText) == TXT_2BYTE) && !minimal)
+		{
+			pText++;
+			settings.Xdelta = GFX_write_substring(&settings, hgfx, (uint8_t)TXT_2BYTE, (int8_t)*pText);
+		}
+		else
+		if(((*pText) & 0x80) && !minimal)
+			settings.Xdelta = GFX_write_substring(&settings, hgfx, (uint8_t)*pText, 0);
+		else
+		if(!settings.invert && (*pText == ' '))
+		{
+			if(settings.spaceMode == 0)
+				settings.Xdelta += ((tFont *)settings.font)->spacesize;
+			else
+				settings.Xdelta += ((tFont *)settings.font)->spacesize2Monospaced;
+		}
+		else
+		if((settings.spaceMode == 1) && (*pText == ' '))
+				settings.Xdelta += ((tFont *)settings.font)->spacesize2Monospaced;
+		else
+		{
+			if(settings.actualFont == (tFont *)settings.TinyFont)
+				settings.Ydelta += settings.TinyFontExtraYdelta;
+
+			newXdelta = GFX_write_char(hgfx, &settings, *(uint8_t *)pText, settings.actualFont);
+			settings.Xdelta = newXdelta;
+
+			if(settings.actualFont == (tFont *)settings.TinyFont)
+				settings.Ydelta -= settings.TinyFontExtraYdelta;
+		}
+		if(pText != 0) /* for TXT_2BYTE */
+			pText++;
+	}
+	return settings.Ydelta;
+}
+
+/* Private functions ---------------------------------------------------------*/
+/******************************************************************************
+                            Static Function
+*******************************************************************************/
+
+/**
+  ******************************************************************************
+  * @brief   GFX write substring. /  Write string without parameters
+  * @author  heinrichs weikamp gmbh
+  * @version V0.0.1
+  * @date    22-April-2014
+  ******************************************************************************
+	*
+  * @param  hgfx: 			check gfx_engine.h.
+  * @param  color: 			32bit ARGB8888.
+  * @retval None
+  */
+
+static uint32_t GFX_write_substring(GFX_CfgWriteString* cfg, GFX_DrawCfgWindow* hgfx, uint8_t textId, int8_t nextCharFor2Byte)
+{
+	uint8_t i, j;
+	uint32_t found;
+	uint32_t pText;
+	uint16_t decodeUTF8;
+
+// -----------------------------
+ 	if(textId != (uint8_t)TXT_2BYTE)
+	{
+		found = 0;
+		j = 0;
+		for(i=(uint8_t)TXT_Language;i<(uint8_t)TXT_END;i++)
+		{
+			j++;
+		}
+		if(!found)
+			return cfg->Xdelta;
+
+	}
+// -----------------------------
+	else
+	{
+		if(!nextCharFor2Byte)
+			return cfg->Xdelta;
+		
+		found = 0;
+
+		if(!found)
+			return cfg->Xdelta;
+	}
+// -----------------------------
+	
+	if(cfg->actualFont == (tFont *)cfg->TinyFont)
+		cfg->Ydelta += cfg->TinyFontExtraYdelta;
+
+	while (*(char*)pText != 0)// und fehlend: Abfrage window / image size
+	{
+		if(*(char*)pText == '\t')
+			cfg->Xdelta = hgfx->WindowTab - hgfx->WindowX0;
+		else
+		if((*(char*)pText == ' ') && (cfg->invert == 0))	/* bypass drawing of white space only for not inverted mode */
+		{
+			cfg->Xdelta += ((tFont *)cfg->actualFont)->spacesize;
+		}
+		else
+		if((*(char*)pText) & 0x80) /* Identify a UNICODE character other than standard ASCII using the highest bit */
+		{
+			decodeUTF8 = ((*(char*)pText) & 0x1F) << 6; /* use 5bits of first byte for upper part of unicode */
+			pText++;
+			decodeUTF8 |= (*(char*)pText) & 0x3F; /* add lower 6bits as second part of the unicode */
+			if (decodeUTF8 <= 0xff) /* The following function has a uint8 input parameter ==> no UNICODEs > 0xff supported */
+			{
+				cfg->Xdelta = GFX_write_char(hgfx, cfg, (uint8_t)decodeUTF8, (tFont *)cfg->actualFont);
+			}
+		}
+		else
+			cfg->Xdelta = GFX_write_char(hgfx, cfg, *(uint8_t *)pText, (tFont *)cfg->actualFont);
+
+    pText++;
+	}
+
+	if(cfg->actualFont == (tFont *)cfg->TinyFont)
+		cfg->Ydelta -= cfg->TinyFontExtraYdelta;
+
+	return cfg->Xdelta;
+}
+
+
+/**
+  ******************************************************************************
+  * @brief   GFX write char. /  Write non-inverted, non-colored with entire 8 bit range
+  * @author  heinrichs weikamp gmbh
+  * @version V0.0.1
+  * @date    22-April-2014
+  ******************************************************************************
+	*
+  * @param  hgfx: 			check gfx_engine.h.
+  * @param  Ydelta: 		input
+  * @param  character: 	character
+  * @param  *Font:		 	pointer to font to be used for this char
+	* @retval Ydelta:			0x0000FFFF if not successful or char_truncated
+  */
+
+static uint32_t GFX_write_char_doubleSize(GFX_DrawCfgWindow* hgfx, GFX_CfgWriteString* cfg, uint8_t character, tFont *Font)
+{
+	uint32_t i, j;
+	uint32_t width, height;
+	uint32_t found;
+	uint16_t* pDestination;
+	uint32_t pSource;
+	uint32_t OffsetDestination;
+	uint32_t width_left;
+	uint32_t height_left;
+	uint32_t char_truncated_WidthFlag;
+	uint32_t char_truncated_Height;
+	uint8_t fill;
+	uint32_t widthFont, heightFont;
+	uint32_t nextLine;
+	int32_t stepdir;
+
+	stepdir = 1;
+
+	if(hgfx->Image->ImageWidth <= (hgfx->WindowX0 + cfg->Xdelta))
+		return 0x0000FFFF;
+
+	// -----------------------------
+	found = 0;
+	for(i=0;i<Font->length;i++)
+	{
+		if(Font->chars[i].code == character)
+		{
+			found = 1;
+			break;
+		}
+	}
+	if(!found)
+		return cfg->Xdelta;
+
+	pSource = ((uint32_t)Font->chars[i].image->data);
+	pDestination = (uint16_t*)(hgfx->Image->FBStartAdress);
+
+	heightFont = Font->chars[i].image->height;
+	widthFont = Font->chars[i].image->width;
+
+	height = heightFont*2;
+	width = widthFont*2;
+
+
+	pDestination += (uint32_t)(hgfx->WindowX0 + cfg->Xdelta) * hgfx->Image->ImageHeight;  /* set pointer to delta row */
+	pDestination += (hgfx->WindowY0 + cfg->Ydelta);							   /* set pointer to delta colum */
+
+	OffsetDestination = (hgfx->Image->ImageHeight - height);
+	nextLine = hgfx->Image->ImageHeight;
+
+// -----------------------------
+	char_truncated_WidthFlag = 0;
+	width_left = hgfx->Image->ImageWidth - (hgfx->WindowX0 + cfg->Xdelta);
+	if(width_left < width)
+	{
+		char_truncated_WidthFlag = 1;
+		width = width_left;
+		widthFont = width/2;
+	}
+// -----------------------------
+
+	char_truncated_Height = 0;
+	height_left = hgfx->Image->ImageHeight - (hgfx->WindowY0 + cfg->Ydelta);
+	if(height_left < height)
+	{
+		char_truncated_Height = height - height_left;
+		if((char_truncated_Height & 1) != 0)
+		{
+			height_left -= 1;
+			char_truncated_Height += 1;
+		}
+		height = height_left;
+		heightFont = height/2;
+	}
+
+	OffsetDestination += char_truncated_Height;
+// -----------------------------
+	if(height == 0)
+		return 0x0000FFFF;
+// -----------------------------
+
+	if(cfg->singleSpaceWithSizeOfNextChar)
+	{
+		cfg->singleSpaceWithSizeOfNextChar = 0;
+ 
+		if(cfg->invert)
+			fill = 0xFF;
+		else
+			fill = 0;
+
+		height /= 2;
+		for(i = width; i > 0; i--)
+		{
+			for (j = height; j > 0; j--)
+			{
+				*(__IO uint16_t*)pDestination =  fill << 8 | cfg->color;
+				pDestination += stepdir;
+				*(__IO uint16_t*)pDestination =  fill << 8 | cfg->color;
+				pDestination += stepdir;
+			}
+			pDestination += stepdir * OffsetDestination;
+		}
+	}
+	else
+	if(cfg->invert)
+	{
+		if((heightFont & 3) == 0) /* unroll for perfomance, by 4 if possible, by 2 (16bit) otherwise */
+		{
+			heightFont /= 4;
+			for(i = widthFont; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+					for (j = heightFont; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+					}
+					pSource += char_truncated_Height;
+				}
+				else
+				{
+					pSource++;
+					for (j = heightFont; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+					}
+				}
+				pDestination += (OffsetDestination + nextLine) * stepdir;
+			}
+		}
+		else
+		{
+			heightFont /= 2;
+			for(i = widthFont; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+					for (j = heightFont; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  (0xFF - *(uint8_t*)pSource) << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+					}
+					pSource += char_truncated_Height;
+				}
+				else
+				{
+					pSource++;
+					for (j = heightFont; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + nextLine) =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+					}
+				}
+				pDestination += (OffsetDestination + nextLine) * stepdir;
+			}
+		}
+	} /* inverted */
+	else
+	{
+		if((heightFont & 3) == 0) /* unroll for perfomance, by 4 if possible, by 2 (16bit) otherwise */
+		{
+			heightFont /= 4;
+			for(i = widthFont; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+					for (j = heightFont; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+					}
+					pSource += char_truncated_Height;
+				}
+				else
+				{
+					pSource++;
+					pDestination +=  stepdir * height;
+				}
+				pDestination += stepdir * (OffsetDestination + nextLine);
+			}
+		}
+		else
+		{
+			heightFont /= 2;
+			for(i = widthFont; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+					for (j = heightFont; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   *(uint8_t*)pSource << 8 | cfg->color;
+						*(__IO uint16_t*)(pDestination + (stepdir * nextLine)) =   *(uint8_t*)pSource << 8 | cfg->color;
+						pDestination += stepdir;
+						pSource++;
+					}
+					pSource += char_truncated_Height;
+				}
+				else
+				{
+					pSource++;
+					pDestination +=  stepdir * height;
+				}
+				pDestination += stepdir * (OffsetDestination + nextLine);
+			}
+		}
+	}
+
+
+// -----------------------------
+
+	if(char_truncated_WidthFlag)
+		return 0x0000FFFF;
+	else
+		return cfg->Xdelta + width;
+	
+}
+
+
+/**
+  ******************************************************************************
+  * @brief   GFX write char. /  Write non-inverted, non-colored with entire 8 bit range
+  * @author  heinrichs weikamp gmbh
+  * @version V0.0.1
+  * @date    22-April-2014
+  ******************************************************************************
+	*
+  * @param  hgfx: 			check gfx_engine.h.
+  * @param  Ydelta: 		input
+  * @param  character: 	character
+  * @param  *Font:		 	pointer to font to be used for this char
+	* @retval Ydelta:			0x0000FFFF if not successful or char_truncated
+  */
+
+static uint32_t GFX_write_char(GFX_DrawCfgWindow* hgfx, GFX_CfgWriteString* cfg, uint8_t character, tFont *Font)
+{
+	if(cfg->doubleSize)
+	{
+		return GFX_write_char_doubleSize(hgfx, cfg, character, Font);
+	}
+	
+	uint32_t i, j;
+	uint32_t width, height;
+	uint32_t found;
+	uint16_t* pDestination;
+	uint32_t pSource;
+	uint32_t OffsetDestination;
+	uint32_t width_left;
+	uint32_t height_left;
+	uint32_t char_truncated_WidthFlag;
+	uint32_t char_truncated_Height;
+	uint8_t fill;
+	uint32_t fillpattern;
+	int16_t stepdir;
+
+	stepdir = 1;
+
+	if(hgfx->Image->ImageWidth <= (hgfx->WindowX0 + cfg->Xdelta))
+		return 0x0000FFFF;
+
+	// -----------------------------
+	found = 0;
+	for(i=0;i<Font->length;i++)
+	{
+		if(Font->chars[i].code == character)
+		{
+			found = 1;
+			break;
+		}
+	}
+	if(!found)
+		return cfg->Xdelta;
+// -----------------------------
+/*
+	if(Font == &Font144)
+		cfg->Xdelta += 3;
+	else
+	if(Font == &Font84)
+		cfg->Xdelta += 2;
+*/
+// -----------------------------
+
+
+	pSource = ((uint32_t)Font->chars[i].image->data);
+	pDestination = (uint16_t*)(hgfx->Image->FBStartAdress);
+
+
+	height = Font->chars[i].image->height;
+	width = Font->chars[i].image->width;
+
+	OffsetDestination = hgfx->Image->ImageHeight - height;
+
+
+	/* Xyyyyy   y= height */
+	/* Xyyyyy   x= width  */
+	/* Xyyyyy             */
+
+	pDestination += (hgfx->WindowX0 + cfg->Xdelta) * hgfx->Image->ImageHeight; /* set pointer to delta row */
+	pDestination += (hgfx->WindowY0 + cfg->Ydelta);							   /* set pointer to delta colum */
+
+// -----------------------------
+	char_truncated_WidthFlag = 0;
+	width_left = hgfx->Image->ImageWidth - (hgfx->WindowX0 + cfg->Xdelta);
+	if(width_left < width)
+	{
+		char_truncated_WidthFlag = 1;
+		width = width_left;
+	}
+// -----------------------------
+	char_truncated_Height = 0;
+	height_left = hgfx->Image->ImageHeight - (hgfx->WindowY0 + cfg->Ydelta);
+	if(height_left < height)
+	{
+		char_truncated_Height = height - height_left;
+		if((char_truncated_Height & 1) != 0)
+		{
+			height_left -= 1;
+			char_truncated_Height += 1;
+		}
+		height = height_left;
+	}
+	OffsetDestination += char_truncated_Height;
+// -----------------------------
+	if(height == 0)
+		return 0x0000FFFF;
+// -----------------------------
+	
+	if(cfg->singleSpaceWithSizeOfNextChar)
+	{
+		cfg->singleSpaceWithSizeOfNextChar = 0;
+ 
+		if(cfg->invert)
+			fill = 0xFF;
+		else
+			fill = 0;
+
+		height /= 2;
+		for(i = width; i > 0; i--)
+		{
+			for (j = height; j > 0; j--)
+			{
+				*(__IO uint16_t*)pDestination =  fill << 8 | cfg->color;
+				pDestination += stepdir;
+				*(__IO uint16_t*)pDestination =  fill << 8 | cfg->color;
+				pDestination += stepdir;
+			}
+			pDestination += stepdir * OffsetDestination;
+		}
+	}
+	else
+	if(cfg->invert)
+	{
+		if((height & 3) == 0) /* unroll for perfomance, by 4 if possible, by 2 (16bit) otherwise */
+		{
+			height /= 4;
+			for(i = width; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+
+					for (j = height; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =   (0xFF - *(uint8_t*)pSource++) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   (0xFF - *(uint8_t*)pSource++) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   (0xFF - *(uint8_t*)pSource++) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   (0xFF - *(uint8_t*)pSource++) << 8 | cfg->color;
+						pDestination += stepdir;
+					}
+					pSource += char_truncated_Height;
+				}
+				else /* empty line => fast fill */
+				{
+					pSource++;
+					fillpattern = (( 0xFF << 8 | cfg->color) << 16) | ( 0xFF << 8 | cfg->color);
+					for (j = height; j > 0; j--)
+					{
+						*(__IO uint32_t*)pDestination =  fillpattern;
+						pDestination += stepdir;
+						pDestination += stepdir;
+						*(__IO uint32_t*)pDestination =  fillpattern;
+						pDestination += stepdir;
+						pDestination += stepdir;
+					}
+				}
+				pDestination += stepdir * OffsetDestination;
+			}
+		}
+		else
+		{
+			height /= 2;
+			for(i = width; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+					for (j = height; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =   (0xFF - *(uint8_t*)pSource++) << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =   (0xFF - *(uint8_t*)pSource++) << 8 | cfg->color;
+						pDestination += stepdir;
+					}
+					pSource += char_truncated_Height;
+				}
+				else
+				{
+					pSource++;
+					for (j = height; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  0xFF << 8 | cfg->color;
+						pDestination += stepdir;
+					}
+				}
+				pDestination += stepdir * OffsetDestination;
+			}
+		}
+	}
+	else  /* not inverted */
+	{
+		if((height & 3) == 0) /* unroll for perfomance, by 4 if possible, by 2 (16bit) otherwise */
+		{
+
+			height /= 4;
+
+			for(i = width; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+					for (j = height; j > 0; j--)
+					{
+							*(__IO uint16_t*)pDestination =  ( *(uint8_t*)pSource++ << 8) | (cfg->color);
+							pDestination += stepdir;
+							*(__IO uint16_t*)pDestination =  ( *(uint8_t*)pSource++ << 8) | (cfg->color);
+							pDestination += stepdir;
+							*(__IO uint16_t*)pDestination =  ( *(uint8_t*)pSource++ << 8) | (cfg->color);
+							pDestination += stepdir;
+							*(__IO uint16_t*)pDestination =  ( *(uint8_t*)pSource++ << 8) | (cfg->color);
+							pDestination += stepdir;
+					}
+
+					pSource += char_truncated_Height;
+				}
+				else  /* clear line */
+				{
+					pSource++;
+					fillpattern = (cfg->color << 16) | cfg->color;
+
+					for (j = height; j > 0; j--)
+					{
+						*(__IO uint32_t*)pDestination =  fillpattern;
+						pDestination += stepdir;
+						pDestination += stepdir;
+						*(__IO uint32_t*)pDestination =  fillpattern;
+						pDestination += stepdir;
+						pDestination += stepdir;
+					}
+				}
+				pDestination += stepdir * OffsetDestination;
+			}
+		}
+		else
+		{
+			height /= 2;
+			for(i = width; i > 0; i--)
+			{
+				if(*(uint8_t*)pSource != 0x01)
+				{
+					for (j = height; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =  ( *(uint8_t*)pSource++ << 8) | (cfg->color);
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  ( *(uint8_t*)pSource++ << 8) | (cfg->color);
+						pDestination += stepdir;
+					}
+					pSource += char_truncated_Height;
+				}
+				else /* clear line */
+				{
+					pSource++;
+					for (j = height; j > 0; j--)
+					{
+						*(__IO uint16_t*)pDestination =  cfg->color;
+						pDestination += stepdir;
+						*(__IO uint16_t*)pDestination =  cfg->color;
+						pDestination += stepdir;
+					}
+				}
+				pDestination += stepdir * OffsetDestination;
+			}
+		}
+	}
+
+
+/*
+	else
+	if(Font == &Font144)
+		width += 3;
+	else
+	if(Font == &Font84)
+		width += 1;
+*/
+// -----------------------------
+
+	if(char_truncated_WidthFlag)
+		return 0x0000FFFF;
+	else
+		return cfg->Xdelta + width;
+}
+
+void GFX_LTDC_Init(void)
+{
+	GFX_LTDC_Init_display1();
+}
+
+void GFX_LTDC_Init_display1(void)
+{
+	  /* Timing configuration */
+#define		ActiveH_d1 800
+#define		ActiveW_d1	480
+
+#define		Hsync_d1 	2
+#define		HFP_d1		8
+#define		HBP_d1		8
+
+#define		Vsync_d1	2
+#define		VFP_d1		4	// make sure this value * VSYNC is also set in display.c for OLED_VFP_SET
+#define		VBP_d1		6	// make sure this value * VSYNC is also set in display.c for OLED_VBP_SET
+
+  /* Horizontal synchronization width = Hsync - 1 */
+  LtdcHandle.Init.HorizontalSync = Hsync_d1 - 1;
+  /* Vertical synchronization height = Vsync - 1 */
+  LtdcHandle.Init.VerticalSync = Vsync_d1 -1;
+  /* Accumulated horizontal back porch = Hsync + HBP - 1 */
+  LtdcHandle.Init.AccumulatedHBP = Hsync_d1 + HBP_d1 - 1;
+  /* Accumulated vertical back porch = Vsync + VBP - 1 */
+  LtdcHandle.Init.AccumulatedVBP = Vsync_d1 + VBP_d1 - 1;
+  /* Accumulated active width = Hsync + HBP + Active Width - 1 */
+  LtdcHandle.Init.AccumulatedActiveW = Hsync_d1 + HBP_d1 + ActiveW_d1 - 1;
+  /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */
+  LtdcHandle.Init.AccumulatedActiveH = Vsync_d1 + VBP_d1 + ActiveH_d1 - 1;
+  /* Total width = Hsync + HBP + Active Width + HFP - 1 */
+  LtdcHandle.Init.TotalWidth = Hsync_d1 + HBP_d1 + ActiveW_d1 + HFP_d1 - 1;
+  /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */
+  LtdcHandle.Init.TotalHeigh = Vsync_d1 + VBP_d1 + ActiveH_d1 + VFP_d1 - 1;
+
+	/* Configure R,G,B component values for LCD background color */
+	LtdcHandle.Init.Backcolor.Red= 0;
+	LtdcHandle.Init.Backcolor.Blue= 0;
+	LtdcHandle.Init.Backcolor.Green= 0;
+
+	/* LCD clock configuration */
+	/* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
+	/* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */
+	/* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */
+	/* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */
+
+/* done in base.c SystemClockConfig
+
+	PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
+	PeriphClkInitStruct.PLLSAI.PLLSAIN = 192;
+	PeriphClkInitStruct.PLLSAI.PLLSAIR = 4;
+	PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8;
+	HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
+*/
+	/* Polarity */
+	LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL;
+	LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL;
+	LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL;
+	LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC;
+
+	LtdcHandle.Instance = LTDC;
+
+  /* Configure the LTDC */
+  if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // initialize GPIO Pins, too
+  {
+    /* Initialization Error */
+    GFX_Error_Handler();
+  }
+}
+
+void GFX_LTDC_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address)
+{
+  LTDC_LayerCfgTypeDef   Layercfg;
+
+ /* Layer Init */
+  Layercfg.WindowX0 = 0;
+  Layercfg.WindowX1 = 480;
+  Layercfg.WindowY0 = 0;
+  Layercfg.WindowY1 = 800;
+  Layercfg.PixelFormat = LTDC_PIXEL_FORMAT_AL88;//LTDC_PIXEL_FORMAT_ARGB8888;
+  Layercfg.FBStartAdress = FB_Address;
+  Layercfg.Alpha = 255;
+  Layercfg.Alpha0 = 0;
+  Layercfg.Backcolor.Blue = 0;
+  Layercfg.Backcolor.Green = 0;
+  Layercfg.Backcolor.Red = 0;
+  Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
+  Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
+  Layercfg.ImageWidth = 480;
+  Layercfg.ImageHeight = 800;
+
+	HAL_LTDC_ConfigCLUT(&LtdcHandle, ColorLUT, CLUT_END, LayerIndex);
+  HAL_LTDC_ConfigLayer(&LtdcHandle, &Layercfg, LayerIndex);
+	HAL_LTDC_EnableCLUT(&LtdcHandle, LayerIndex);
+}
+
+static uint32_t GFX_doubleBufferOne(void)
+{
+	return SDRAM_DOUBLE_BUFFER_ONE;
+}
+
+
+static uint32_t GFX_doubleBufferTwo(void)
+{
+	return SDRAM_DOUBLE_BUFFER_TWO;
+}
+
+uint32_t getFrame(uint8_t callerId)
+{
+	static uint8_t lastFrameProvided = 0;
+	uint8_t i;
+
+/* first iteration: look for a clear frame */
+	i = lastFrameProvided;
+	do
+	{
+		i++;
+		if(i == MAXFRAMES)
+		{
+			i = 0;
+		}
+	} while((i != lastFrameProvided) && (frame[i].status != CLEAR));
+
+	if((i < MAXFRAMES) && (frame[i].status == CLEAR))
+	{
+		frame[i].status = BLOCKED;
+		frame[i].caller = callerId;
+		lastFrameProvided = i;
+		return frame[i].StartAddress;
+	}
+
+/* second iteration: look for a frame which may be reused after clearing */
+	i = lastFrameProvided;
+	do
+	{
+		i++;
+		if(i == MAXFRAMES)
+		{
+			i = 0;
+		}
+	}while((i != lastFrameProvided) && (frame[i].status != RELEASED));
+
+
+	if((i < MAXFRAMES) && (frame[i].status == RELEASED))
+	{
+		GFX_clear_frame_immediately(frame[i].StartAddress);
+		frame[i].status = BLOCKED;
+		lastFrameProvided = i;
+		return frame[i].StartAddress;
+	}
+	return 0;
+}
+
+
+void GFX_forceReleaseFramesWithId(uint8_t callerId)
+{
+	for(int i=0; i<MAXFRAMES; i++)
+		if((frame[i].caller == callerId) && (frame[i].status == BLOCKED))
+			frame[i].status = RELEASED;
+}
+
+
+void releaseAllFramesExcept(uint8_t callerId, uint32_t frameStartAddress)
+{
+	for(int i=0; i<MAXFRAMES; i++)
+		if((frame[i].caller == callerId) && (frame[i].status == BLOCKED) && (frame[i].StartAddress != frameStartAddress))
+			frame[i].status = RELEASED;
+}
+
+
+uint8_t releaseFrame(uint8_t callerId, uint32_t frameStartAddress)
+{
+	static uint8_t countErrorCalls = 0;
+	
+	if(frameStartAddress < FBGlobalStart)
+		return 2;
+
+
+	uint8_t i;
+
+	i = 0;
+	while((i < MAXFRAMES) && (frame[i].StartAddress != frameStartAddress))
+		i++;
+
+	if((i < MAXFRAMES) && (frame[i].StartAddress == frameStartAddress))
+	{
+		if(frame[i].caller == callerId)
+		{
+			frame[i].status = RELEASED;
+			return 1;
+		}
+		else
+			countErrorCalls++;
+	}
+	return 0;
+}
+
+
+uint16_t blockedFramesCount(void)
+{
+	uint16_t count = MAXFRAMES;
+	
+	for(int i = 0;i<MAXFRAMES;i++)
+		if(frame[i].status == BLOCKED)
+			count--;
+		
+	return count;
+}
+
+
+uint8_t housekeepingFrame(void)
+{
+	static uint8_t countLogClear = 0;
+	uint8_t i;
+	uint8_t retVal = 1;
+	
+	if(DMA2D_at_work == 255)
+	{
+		i = 0;
+		/* skip frame cleaning for actual frames which have not yet been replaced by new top/bottom frames */
+		while((i < MAXFRAMES) && ((frame[i].status != RELEASED) || (frame[i].StartAddress == GFX_get_pActualFrameTop()) || (frame[i].StartAddress == GFX_get_pActualFrameBottom())))
+			i++;
+	
+		if((i < MAXFRAMES) && (frame[i].status == RELEASED))
+		{
+			if(frame[i].caller == 15)
+				countLogClear++;
+			GFX_clear_frame_dma2d(i);
+		}
+		else
+		{
+			retVal = 0;		/* no more frame to be cleaned found */
+		}
+	}
+	return retVal;
+}
+
+
+static void GFX_Dma2d_TransferComplete(DMA2D_HandleTypeDef* Dma2dHandle)
+{
+	if(DMA2D_at_work < MAXFRAMES)
+		frame[DMA2D_at_work].status = CLEAR;
+
+	DMA2D_at_work = 255;
+}
+
+
+static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle)
+{
+
+}
+
+static void GFX_Error_Handler(void)
+{
+    /* Turn LED3 on */
+//    BSP_LED_On(LED3);
+    while(1)
+    {
+    }
+}
+
+void write_content_simple(GFX_DrawCfgScreen *tMscreen, uint16_t XleftGimpStyle, uint16_t XrightGimpStyle, uint16_t YtopGimpStyle, const tFont *Font, const char *text, uint8_t color)
+{
+	GFX_DrawCfgWindow	hgfx;
+
+
+	if(XrightGimpStyle > 799)
+		XrightGimpStyle = 799;
+	if(XleftGimpStyle >= XrightGimpStyle)
+		XleftGimpStyle = 0;
+	if(YtopGimpStyle > 479)
+		YtopGimpStyle = 479;
+
+	hgfx.Image = tMscreen;
+	hgfx.WindowNumberOfTextLines = 1;
+	hgfx.WindowLineSpacing = 0;
+	hgfx.WindowTab = 0;
+
+	hgfx.WindowX0 = XleftGimpStyle;
+	hgfx.WindowX1 = XrightGimpStyle;
+	hgfx.WindowY1 = 479 - YtopGimpStyle;
+	if(hgfx.WindowY1 < Font->height)
+		hgfx.WindowY0 = 0;
+	else
+		hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+	GFX_write_string_color(Font, &hgfx, text, 0, color);
+}
+
+
+void gfx_write_topline_simple(GFX_DrawCfgScreen *tMscreen, const char *text, uint8_t color)
+{
+	GFX_DrawCfgWindow	hgfx;
+	const tFont *Font = &FontT48min;
+	
+	hgfx.Image = tMscreen;
+	hgfx.WindowNumberOfTextLines = 1;
+	hgfx.WindowLineSpacing = 0;
+
+	hgfx.WindowTab = 0;
+	hgfx.WindowX0 = 20;
+	hgfx.WindowX1 = 779;
+
+	hgfx.WindowY1 = 479;
+	hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+	GFX_write_label(Font, &hgfx, text, color);
+}
+
+
+void gfx_write_page_number(GFX_DrawCfgScreen *tMscreen, uint8_t page, uint8_t total, uint8_t color)
+{
+	GFX_DrawCfgWindow	hgfx;
+	const tFont *Font = &FontT48min;
+	char text[7];
+	uint8_t i, secondDigitPage, secondDigitTotal;
+
+	if(total > 8)
+	{
+		Font = &FontT24min;
+	}
+
+	hgfx.Image = tMscreen;
+	hgfx.WindowNumberOfTextLines = 1;
+	hgfx.WindowLineSpacing = 0;
+	hgfx.WindowTab = 0;
+
+	hgfx.WindowX1 = 779;
+	if(Font == &FontT24min)
+	{
+		hgfx.WindowX0 = hgfx.WindowX1 - (Font->spacesize*3);
+	}
+	else
+	{
+		hgfx.WindowX0 = hgfx.WindowX1 - (Font->spacesize2Monospaced*3);
+	}
+	hgfx.WindowY1 = 479;
+	hgfx.WindowY0 = hgfx.WindowY1 - Font->height;
+	if(page > 99)
+		page = 99;
+	if(total > 99)
+		total = 99;
+	
+	i = 0;
+	text[i++] = '\002';
+	
+	secondDigitPage = page / 10;
+	page -= secondDigitPage * 10;
+
+	secondDigitTotal = total / 10;
+	total -= secondDigitTotal * 10;
+	
+	if(secondDigitPage)
+		text[i++] = '0' + secondDigitPage;
+	text[i++] = '0' + page;
+
+	text[i++] = '/';
+
+	if(secondDigitTotal)
+		text[i++] = '0' + secondDigitTotal;
+	text[i++] = '0' + total;
+
+	text[i] = 0;
+	
+	GFX_clear_window_immediately(&hgfx);
+	GFX_write_label(Font, &hgfx, text, color);
+}
+
+
+uint8_t gfx_number_to_string(uint8_t max_digits, _Bool fill, char *pText, uint32_t input)
+{
+	uint8_t digits[10];
+	uint32_t number, divider;
+	int first;
+	uint8_t out;
+	
+	number = input;
+	first = 0;
+	divider = 1000000000;
+	for(int i=9;i>=0;i--)
+	{
+		digits[i] = (uint8_t)(number / divider);
+		number -= digits[i] * divider;
+		divider /= 10;
+		if((first == 0) && (digits[i] != 0))
+			first = i;
+	}
+	
+	if((first + 1) > max_digits)
+	{
+		for(int i = 0; i<max_digits; i++)
+			pText[i] = '9';
+		out = max_digits;
+	}
+	else if(fill)
+	{
+		int i = 0;
+		for(int k = max_digits; k>0; k--)
+			pText[i++] = digits[k -1] +  '0';
+		out = max_digits;
+	}
+	else
+	{
+		int i = 0;
+		for(int k = first; k>=0; k--)
+			pText[i++] = digits[k] +  '0';
+		out = i;
+	}
+	
+	return out;
+}
+
+
+	/* output is
+	 * 0->
+	 *    |
+	 *    v
+	 *
+	 * input is
+	 * 
+	 *   -> 
+	 * A
+	 * |
+	 * 0
+	 */
+void GFX_screenshot(void)
+{
+	uint32_t pSource = GFX_get_pActualFrameTop();
+	uint32_t pSourceBottom =GFX_get_pActualFrameBottom();
+	uint32_t pBottomNew = getFrame(99);
+	uint32_t pDestination = GFX_doubleBufferOne();
+	uint32_t sourceNow;
+
+	
+	uint32_t 	bot_leftStart = FrameHandler.actualBottom.leftStart; 			// x0 z.B. 0
+	uint32_t 	bot_bottomStart = FrameHandler.actualBottom.bottomStart; 	// y0 z.B. 25
+	uint32_t  bot_width = FrameHandler.actualBottom.width;							// 800
+	uint32_t  bot_height = FrameHandler.actualBottom.height;						// 390
+
+	struct split
+	{
+		uint8_t blue;
+		uint8_t green;
+		uint8_t red;
+		uint8_t alpha;
+	};
+
+	union inout_u
+	{
+		uint32_t in;
+		struct split out;
+	};
+	
+	union inout_u value;
+
+/* test	
+ uint32_t pSourceTemp = pSource + (2*479);
+	for (int j = 0xFFFF; j > 0x00FF; j -= 0x0100)
+	{
+		*(__IO uint16_t*)pSourceTemp = j;
+		pSourceTemp += 480*2;
+	}
+*/
+	// Top Layer
+	const unsigned width = 800, height = 480;
+	const uint32_t heightX2 = height*2;
+	
+	for(unsigned y = 0; y < height; y++)
+	{
+		sourceNow = pSource + 2 * ((height - 1) - y);
+		for(unsigned x = 0; x < width; x++)
+		{
+//			sourceNow += 2 * height * x  + 2 * (height - 1 - y);
+			value.in = ColorLUT[*(__IO uint8_t*)(sourceNow)];
+			value.out.alpha = *(__IO uint8_t*)(sourceNow + 1);
+			
+			*(__IO uint8_t*)(pDestination++) = value.out.red;
+			*(__IO uint8_t*)(pDestination++) = value.out.green;
+			*(__IO uint8_t*)(pDestination++) = value.out.blue;
+			*(__IO uint8_t*)(pDestination++) = value.out.alpha;
+			sourceNow += heightX2;
+		}
+	}
+	
+	// Bottom Layer
+	// build newBottom
+	pSource = pSourceBottom;
+	for(unsigned x = bot_leftStart; x < bot_leftStart+bot_width; x++)
+	{
+		for(unsigned y = bot_bottomStart; y < bot_bottomStart+bot_height; y++)
+		{
+				pDestination = pBottomNew + (2 * y);
+				pDestination += heightX2 * x;
+				*(__IO uint16_t*)(pDestination) = *(__IO uint16_t*)(pSource);
+				pSource += 2;
+		}
+	}		
+	
+	// output Bottom Layer
+	pSource = pBottomNew;
+	pDestination = GFX_doubleBufferTwo();
+
+	for(unsigned y = 0; y < height; y++)
+	{
+		sourceNow = pSource + 2 * ((height - 1) - y);
+		for(unsigned x = 0; x < width; x++)
+		{
+//		sourceNow =  pSource + 2 * height * x  + 2 * (height - 1 - y);
+			value.in = ColorLUT[*(__IO uint8_t*)(sourceNow)];
+			value.out.alpha = *(__IO uint8_t*)(sourceNow + 1);
+			
+			*(__IO uint8_t*)(pDestination++) = value.out.red;
+			*(__IO uint8_t*)(pDestination++) = value.out.green;
+			*(__IO uint8_t*)(pDestination++) = value.out.blue;
+			*(__IO uint8_t*)(pDestination++) = value.out.alpha;
+			sourceNow += heightX2;
+		}
+	}
+	releaseFrame(99,pBottomNew);
+/*
+	// das kommt dazu!
+	unsigned yEnd = 480 - FrameHandler.actualBottom.bottomStart;
+	unsigned yStart = yEnd - FrameHandler.actualBottom.height;
+	
+	if(yStart > 0)
+	{
+		for(unsigned y = 0; y < yStart; y++)
+		for(unsigned x = 0; x < width; x++)
+		{
+			*(__IO uint8_t*)(pDestination++) = 0;
+			*(__IO uint8_t*)(pDestination++) = 0;
+			*(__IO uint8_t*)(pDestination++) = 0;
+			*(__IO uint8_t*)(pDestination++) = 0;
+		}
+	}
+	for(unsigned y = yStart; y < yEnd; y++)
+	for(unsigned x = 0; x < width; x++)
+	{
+		sourceNow =  pSource + 2 * height * x  + 2 * (height - 1 - y);
+		value.in = ColorLUT[*(__IO uint8_t*)(sourceNow)];
+		value.out.alpha = *(__IO uint8_t*)(sourceNow + 1);
+		
+		*(__IO uint8_t*)(pDestination++) = value.out.red;
+		*(__IO uint8_t*)(pDestination++) = value.out.green;
+		*(__IO uint8_t*)(pDestination++) = value.out.blue;
+		*(__IO uint8_t*)(pDestination++) = value.out.alpha;
+	}
+	if(yEnd < 480)
+	{
+		for(unsigned y = yEnd; y < 480; y++)
+		for(unsigned x = 0; x < width; x++)
+		{
+			*(__IO uint8_t*)(pDestination++) = 0;
+			*(__IO uint8_t*)(pDestination++) = 0;
+			*(__IO uint8_t*)(pDestination++) = 0;
+			*(__IO uint8_t*)(pDestination++) = 0;
+		}
+	}
+*/	
+}
+
+uint32_t GFX_Character_Width(uint8_t character, tFont *Font)
+{
+	uint32_t i;
+	for(i=0;i<Font->length;i++)
+	{
+		if(Font->chars[i].code == character)
+		{
+			return Font->chars[i].image->width;
+		}
+	}
+
+	return 0;
+}
+
+void Gfx_colorsscheme_mod(char *text, uint8_t alternativeColor)
+{
+	char *p = text;
+	uint8_t index = 0;
+
+	while ((*p) && (index < MAX_COLOR_STRING_LENGTH))
+	{
+		if (*p == '\020')
+		{
+			if(!GFX_is_colorschemeDiveStandard())
+			{
+				*p = '\027';
+			}
+			else if(alternativeColor != 0)
+			{
+				*p += alternativeColor;
+			}
+		}
+		p++;
+		index++;
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Src/ostc_mini.c	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,418 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file   Discovery/Src/ostc.c
+/// \brief  Hardware specific configuration
+/// \author Heinrichs Weikamp gmbh
+/// \date   05-Dec-2014
+///
+/// \details
+///
+/// $Id$
+///////////////////////////////////////////////////////////////////////////////
+/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+///
+///     This program is free software: you can redistribute it and/or modify
+///     it under the terms of the GNU General Public License as published by
+///     the Free Software Foundation, either version 3 of the License, or
+///     (at your option) any later version.
+///
+///     This program is distributed in the hope that it will be useful,
+///     but WITHOUT ANY WARRANTY; without even the implied warranty of
+///     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+///     GNU General Public License for more details.
+///
+///     You should have received a copy of the GNU General Public License
+///     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//////////////////////////////////////////////////////////////////////////////
+
+/* Includes ------------------------------------------------------------------*/
+#include "ostc.h"
+#include "stm32f4xx_hal.h"
+
+
+/* Exported variables --------------------------------------------------------*/
+SPI_HandleTypeDef hspiDisplay;
+SPI_HandleTypeDef cpu2DmaSpi;
+
+
+UART_HandleTypeDef UartHandle;
+#ifdef USART_PIEZO
+UART_HandleTypeDef UartPiezoTxHandle;
+#endif
+UART_HandleTypeDef UartIR_HUD_Handle;
+
+__IO ITStatus UartReady = RESET;
+__IO ITStatus UartReadyHUD = RESET;
+
+/* Private types -------------------------------------------------------------*/
+
+/* Private variables ---------------------------------------------------------*/
+
+/* Private variables with external access via get_xxx() function -------------*/
+
+/* Exported functions --------------------------------------------------------*/
+
+/** SPI init function
+    * called from HAL
+    */
+void MX_SPI_Init(void)
+{
+    hspiDisplay.Instance = SPI5;
+    hspiDisplay.Init.Mode = SPI_MODE_MASTER;
+    hspiDisplay.Init.Direction = SPI_DIRECTION_2LINES;
+    hspiDisplay.Init.DataSize = SPI_DATASIZE_8BIT;
+    hspiDisplay.Init.CLKPolarity = SPI_POLARITY_LOW;
+    hspiDisplay.Init.CLKPhase = SPI_PHASE_1EDGE;
+    hspiDisplay.Init.NSS = SPI_NSS_SOFT;
+    hspiDisplay.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;//SPI_BAUDRATEPRESCALER_4;//SPI_BAUDRATEPRESCALER_256;
+    hspiDisplay.Init.FirstBit = SPI_FIRSTBIT_MSB;
+    hspiDisplay.Init.TIMode = SPI_TIMODE_DISABLED;
+    hspiDisplay.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
+    HAL_SPI_Init(&hspiDisplay);
+
+    cpu2DmaSpi.Instance                 = SPI1;
+    cpu2DmaSpi.Init.Mode                = SPI_MODE_MASTER;
+    cpu2DmaSpi.Init.Direction           = SPI_DIRECTION_2LINES;
+    cpu2DmaSpi.Init.DataSize            = SPI_DATASIZE_8BIT;
+    cpu2DmaSpi.Init.CLKPolarity         = SPI_POLARITY_LOW;
+    cpu2DmaSpi.Init.CLKPhase            = SPI_PHASE_1EDGE;
+    cpu2DmaSpi.Init.NSS                 = SPI_NSS_SOFT;//SPI_NSS_HARD_OUTPUT;//SPI_NSS_SOFT;
+    cpu2DmaSpi.Init.BaudRatePrescaler   = SPI_BAUDRATEPRESCALER_128; 
+    cpu2DmaSpi.Init.FirstBit            = SPI_FIRSTBIT_MSB;
+    cpu2DmaSpi.Init.TIMode              = SPI_TIMODE_DISABLED;
+    cpu2DmaSpi.Init.CRCCalculation 		= SPI_CRCCALCULATION_DISABLED;
+    cpu2DmaSpi.Init.CRCPolynomial 		= 7;
+
+    HAL_SPI_Init(&cpu2DmaSpi);
+}
+
+
+void MX_GPIO_Backlight_max_static_only_Init(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+    TIM_BACKLIGHT_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    GPIO_InitStruct.Pin = TIM_BACKLIGHT_PIN;
+    HAL_GPIO_Init(TIM_BACKLIGHT_GPIO_PORT, &GPIO_InitStruct);
+
+    HAL_GPIO_WritePin(TIM_BACKLIGHT_GPIO_PORT,TIM_BACKLIGHT_PIN,GPIO_PIN_SET);
+}
+
+
+void MX_GPIO_One_Button_only_Init(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+    BUTTON_NEXT_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    GPIO_InitStruct.Pin = BUTTON_NEXT_PIN;
+    HAL_GPIO_Init(BUTTON_NEXT_GPIO_PORT, &GPIO_InitStruct);
+}
+
+
+GPIO_PinState MX_GPIO_Read_The_One_Button(void)
+{
+    return HAL_GPIO_ReadPin(BUTTON_NEXT_GPIO_PORT, BUTTON_NEXT_PIN);
+}
+
+void MX_GPIO_Init(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    DISPLAY_CSB_GPIO_ENABLE();
+    DISPLAY_RESETB_GPIO_ENABLE();
+    EXTFLASH_CSB_GPIO_ENABLE();
+    SMALLCPU_CSB_GPIO_ENABLE();
+    OSCILLOSCOPE_GPIO_ENABLE();
+    OSCILLOSCOPE2_GPIO_ENABLE();
+    BLE_UBLOX_DSR_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    GPIO_InitStruct.Pin = DISPLAY_CSB_PIN;
+    HAL_GPIO_Init(DISPLAY_CSB_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = DISPLAY_RESETB_PIN;
+    HAL_GPIO_Init(DISPLAY_RESETB_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = EXTFLASH_CSB_PIN;
+    HAL_GPIO_Init(EXTFLASH_CSB_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = OSCILLOSCOPE_PIN;
+    HAL_GPIO_Init(OSCILLOSCOPE_GPIO_PORT, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = OSCILLOSCOPE2_PIN;
+    HAL_GPIO_Init(OSCILLOSCOPE2_GPIO_PORT, &GPIO_InitStruct);
+
+#ifdef DISPLAY_BACKLIGHT_PIN
+    DISPLAY_BACKLIGHT_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = DISPLAY_BACKLIGHT_PIN;
+    HAL_GPIO_Init(DISPLAY_BACKLIGHT_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(DISPLAY_BACKLIGHT_GPIO_PORT,DISPLAY_BACKLIGHT_PIN,GPIO_PIN_SET);
+#endif
+
+#ifdef SMALLCPU_CSB_PIN
+    SMALLCPU_CSB_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_CSB_PIN;
+    HAL_GPIO_Init(SMALLCPU_CSB_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_SET);
+#endif
+
+#ifdef SMALLCPU_BOOT0_PIN
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    SMALLCPU_BOOT0_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_BOOT0_PIN;
+    HAL_GPIO_Init(SMALLCPU_BOOT0_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+#endif
+
+#ifdef IR_HUD_ENABLE_PIN
+    IR_HUD_ENABLE_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = IR_HUD_ENABLE_PIN;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    HAL_GPIO_Init(IR_HUD_ENABLE_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(IR_HUD_ENABLE_GPIO_PORT,IR_HUD_ENABLE_PIN,GPIO_PIN_SET);
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+#endif
+
+#ifdef BLE_NENABLE_PIN
+    BLE_NENABLE_GPIO_ENABLE();
+    MX_Bluetooth_PowerOff();
+#endif
+
+#ifdef TESTPIN
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    TEST_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = TEST_PIN;
+    HAL_GPIO_Init(TEST_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_SET);
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+#endif
+}
+
+
+void MX_TestPin_High(void)
+{
+#ifdef TESTPIN
+    HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_SET);
+#endif
+}
+
+
+void MX_TestPin_Low(void)
+{
+#ifdef TESTPIN
+    HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_RESET);
+#endif
+}
+
+void MX_Bluetooth_PowerOn(void)
+{
+    GPIO_InitTypeDef GPIO_InitStruct;
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+    GPIO_InitStruct.Pin = BLE_NENABLE_PIN;
+    HAL_GPIO_Init(BLE_NENABLE_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(BLE_NENABLE_GPIO_PORT,BLE_NENABLE_PIN,GPIO_PIN_RESET);
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+    GPIO_InitStruct.Pin = BLE_UBLOX_DSR_PIN;
+    HAL_GPIO_Init(BLE_UBLOX_DSR_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_RESET);
+}
+
+
+void MX_Bluetooth_PowerOff(void)
+{
+	HAL_GPIO_WritePin(BLE_NENABLE_GPIO_PORT,BLE_NENABLE_PIN,GPIO_PIN_SET);
+	HAL_Delay(10);
+	GPIO_InitTypeDef GPIO_InitStruct;
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    GPIO_InitStruct.Pin = BLE_NENABLE_PIN;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    HAL_GPIO_Init(BLE_NENABLE_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_RESET);
+}
+
+
+void MX_SmallCPU_Reset_To_Boot(void)
+{
+#ifdef SMALLCPU_NRESET_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    SMALLCPU_NRESET_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_NRESET_PIN;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_RESET);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_SET);
+    HAL_Delay(2);
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_Delay(100);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
+#endif
+}
+
+
+void MX_SmallCPU_NO_Reset_Helper(void)
+{
+#ifdef SMALLCPU_NRESET_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    SMALLCPU_NRESET_GPIO_ENABLE();
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_SET);
+//	HAL_Delay(100);
+//  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+//  HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+#endif
+}
+
+
+void MX_SmallCPU_Reset_To_Standard(void)
+{
+#ifdef SMALLCPU_NRESET_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+
+    SMALLCPU_NRESET_GPIO_ENABLE();
+    GPIO_InitStruct.Pin = SMALLCPU_NRESET_PIN;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+    HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_RESET);
+    HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
+    HAL_Delay(2);
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
+#endif
+}
+
+
+uint8_t MX_UART_ButtonAdjust(uint8_t *array)
+{
+#ifdef USART_PIEZO
+    uint8_t answer[4];
+    HAL_UART_Transmit(&UartPiezoTxHandle,array,4,1000);
+    HAL_UART_Receive(&UartPiezoTxHandle,answer,4,2000);
+    if(	(answer[0] == array[0])
+        &&(answer[1] == array[1])
+        &&(answer[2] == array[2])
+        &&(answer[3] == array[3]))
+    return 1;
+#endif
+    return 0;
+}
+
+
+void MX_UART_Init(void)
+{
+  /*##-1- Configure the UART peripheral ######################################*/
+  /* Put the USART peripheral in the Asynchronous mode (UART Mode) */
+  /* UART1 configured as follow:
+      - Word Length = 8 Bits
+      - Stop Bit = One Stop bit
+      - Parity = None
+      - BaudRate = 9600 baud
+      - Hardware flow control disabled (RTS and CTS signals) */
+
+#ifdef USARTx_CTS_PIN
+    UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_RTS_CTS;
+#else
+    UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
+#endif
+    UartHandle.Instance        = USARTx;
+    UartHandle.Init.BaudRate   = 115200;
+    UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
+    UartHandle.Init.StopBits   = UART_STOPBITS_1;
+    UartHandle.Init.Parity     = UART_PARITY_NONE;
+    UartHandle.Init.Mode       = UART_MODE_TX_RX;
+    /* HAL_UART_Init(&UartHandle); moved final init step into BT config function to avoid problems while module power is off */
+
+#ifdef USART_PIEZO
+    UartPiezoTxHandle.Instance        = USART_PIEZO;
+    UartPiezoTxHandle.Init.BaudRate   = 1200;
+    UartPiezoTxHandle.Init.WordLength = UART_WORDLENGTH_8B;
+    UartPiezoTxHandle.Init.StopBits   = UART_STOPBITS_1;
+    UartPiezoTxHandle.Init.Parity     = UART_PARITY_NONE;
+    UartPiezoTxHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
+    UartPiezoTxHandle.Init.Mode       = UART_MODE_TX_RX;
+
+    HAL_UART_Init(&UartPiezoTxHandle);
+#endif
+
+#ifdef USART_IR_HUD
+    UartIR_HUD_Handle.Instance        = USART_IR_HUD;
+    UartIR_HUD_Handle.Init.BaudRate   = 2400;
+    UartIR_HUD_Handle.Init.WordLength = UART_WORDLENGTH_8B;
+    UartIR_HUD_Handle.Init.StopBits   = UART_STOPBITS_1;
+    UartIR_HUD_Handle.Init.Parity     = UART_PARITY_NONE;
+    UartIR_HUD_Handle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
+    UartIR_HUD_Handle.Init.Mode       = UART_MODE_TX_RX;
+
+    HAL_UART_Init(&UartIR_HUD_Handle);
+#endif
+}
+
+void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
+{
+    if(huart == &UartHandle)
+        UartReady = SET;
+}
+
+
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
+{
+    if(huart == &UartHandle)
+        UartReady = SET;
+    else
+    if(huart == &UartIR_HUD_Handle)
+    {
+		UartReadyHUD = SET;
+    }
+}
+
+void MX_tell_reset_logik_alles_ok(void)
+{
+#ifdef RESET_LOGIC_ALLES_OK_PIN
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    RESET_LOGIC_ALLES_OK_GPIO_ENABLE();
+
+    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+    GPIO_InitStruct.Pin = RESET_LOGIC_ALLES_OK_PIN;
+    HAL_GPIO_Init(RESET_LOGIC_ALLES_OK_GPIO_PORT, &GPIO_InitStruct);
+
+    HAL_GPIO_WritePin(RESET_LOGIC_ALLES_OK_GPIO_PORT,RESET_LOGIC_ALLES_OK_PIN,GPIO_PIN_RESET);
+    HAL_Delay(1);
+    HAL_GPIO_WritePin(RESET_LOGIC_ALLES_OK_GPIO_PORT,RESET_LOGIC_ALLES_OK_PIN,GPIO_PIN_SET);
+
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    HAL_GPIO_Init(RESET_LOGIC_ALLES_OK_GPIO_PORT, &GPIO_InitStruct);
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BootLoader/Src/tComm_mini.c	Sat Nov 15 19:29:44 2025 +0100
@@ -0,0 +1,2037 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file   Discovery/Src/tComm.c
+/// \brief  Main file for communication reduced to needs of the bootloader
+/// \author heinrichs weikamp gmbh
+/// \date   29-Mar-2025
+///
+/// \details
+///
+/// $Id$
+///////////////////////////////////////////////////////////////////////////////
+/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+///
+///     This program is free software: you can redistribute it and/or modify
+///     it under the terms of the GNU General Public License as published by
+///     the Free Software Foundation, either version 3 of the License, or
+///     (at your option) any later version.
+///
+///     This program is distributed in the hope that it will be useful,
+///     but WITHOUT ANY WARRANTY; without even the implied warranty of
+///     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+///     GNU General Public License for more details.
+///
+///     You should have received a copy of the GNU General Public License
+///     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//////////////////////////////////////////////////////////////////////////////
+
+/**
+  ==============================================================================
+                        ##### How to use #####
+  ==============================================================================
+    ==============================================================================
+              ##### History #####
+  ==============================================================================
+    160211 added 4 bytes Serial in update Files after checksum prior to binary
+    160211 0x6B changed to version only
+    160623 fixed 0x72 (in V1.0.9)
+    160623 fixed rebuild menu (before update) for V1.0.10
+
+    ==============================================================================
+              ##### CTS / RTS #####
+  ==============================================================================
+    RTS is Output, CTS is Input
+
+    BlueMod Pin D7 UART-RTS# is Output
+    connected to STM32F429 PA11 CTS (Input)
+    also STM32 PA12 RTS is connected to BlueMod UART-CTS# F3
+
+    see BlueMod_SR_HWreference_r06.pdf, page 156
+    and MAIN_CPU STM32F4 Reference manual DM00031020.pdf, page 990
+
+
+    ==============================================================================
+              ##### Codes #####
+  ==============================================================================
+  [0x73] upload CPU2 firmware in SDRAM and update CPU2
+
+  [0x74] upload MainCPU firmware in EEPROM and start bootloader
+
+  */
+
+/* Includes ------------------------------------------------------------------*/
+
+#include "tComm.h"
+
+#include "externCPU2bootloader.h"
+#include "externLogbookFlash.h"
+#include "gfx_colors.h"
+#include "gfx_engine.h"
+#include "gfx_fonts.h"
+#include "ostc.h"
+
+#include "base_bootloader.h"
+#include "firmwareEraseProgram.h"
+#include "text_multilanguage.h"
+#include "tInfoBootloader.h"
+
+#ifdef SPECIALPROGRAMM
+#	include "firmwareEraseProgram.h"
+#endif
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Private variables ---------------------------------------------------------*/
+GFX_DrawCfgScreen	tCscreen;
+GFX_DrawCfgWindow	tCwindow;
+
+uint8_t receiveStartByteUart = 0;
+uint8_t bluetoothActiveLastTime = 0;
+
+uint8_t StartListeningToUART = 0;
+char display_text[256] = { 0 };
+
+uint8_t setForcedBluetoothName = 0;
+
+uint8_t updateSettingsAndMenuOnExit = 0;
+
+/* Private types -------------------------------------------------------------*/
+#define BYTE_DOWNLOAD_MODE			(0xBB)
+#define BYTE_SERVICE_MODE			(0xAA)
+
+#define UART_OPERATION_TIMEOUT		(500u)		/* Timeout for common read / write operations (ms) */
+#define UART_TIMEOUT_SECONDS		(120u)		/* Timeout for keeping connection open and waiting for data */
+#define UART_TIMEOUT_LARGE_BLOCK 	(6000u)		/* Timeout (ms) for reception of an 16K data block (typical RX time ~4,5seconds) */
+
+#define UART_CMD_BUF_SIZE			(30u)		/* size of buffer for command exchange */
+
+const uint8_t id_Region1_firmware = 0xFF;
+const uint8_t id_RTE = 0xFE;
+const uint8_t id_FONT = 0x10;
+const uint8_t id_FONT_OLD = 0x00;
+
+static BlueModTmpConfig_t BmTmpConfig = BM_CONFIG_OFF;	/* Config BlueMod without storing the changes */
+static uint8_t EvaluateBluetoothSignalStrength = 0;
+
+/* Private function prototypes -----------------------------------------------*/
+static void tComm_Error_Handler(void);
+static uint8_t select_mode(uint8_t aRxByte);
+static uint8_t tComm_CheckAnswerOK(void);
+static uint8_t tComm_HandleBlueModConfig(void);
+static void tComm_EvaluateBluetoothStrength(void);
+uint8_t receive_update_flex(uint8_t isRTEupdateALLOWED);
+uint8_t receive_update_data_flex(uint8_t* pBuffer1, uint8_t* pBuffer2, uint8_t RTEupdateALLOWED);
+uint8_t receive_update_data_mainCPU_firmware(void);
+uint8_t receive_update_data_mainCPU_variable_firmware(void);
+uint8_t receive_update_data_mainCPU_firmware_subroutine(uint8_t region, uint8_t* pBuffer1, uint8_t* pBuffer2);
+HAL_StatusTypeDef receive_uart_large_size(UART_HandleTypeDef *huart, uint8_t *pData, uint32_t Size);
+static uint8_t openComm(uint8_t aRxByte);
+uint8_t HW_Set_Bluetooth_Name(uint16_t serial, uint8_t withEscapeSequence);
+uint8_t prompt4D4C(uint8_t mode);
+uint8_t tComm_GetBTCmdStr(BTCmd cmdId, char* pCmdStr);
+
+
+static uint8_t receive_update_data_cpu2(void);
+uint8_t receive_update_data_cpu2_sub(uint8_t* pBuffer);
+
+
+/* #define OSTC4_HW */
+/* Exported functions --------------------------------------------------------*/
+
+void tComm_init(void)
+{
+    tCscreen.FBStartAdress = 0;
+    tCscreen.ImageHeight = 480;
+    tCscreen.ImageWidth = 800;
+    tCscreen.LayerIndex = 1;
+
+    tCwindow.Image = &tCscreen;
+    tCwindow.WindowNumberOfTextLines = 6;
+    tCwindow.WindowLineSpacing = 65;
+    tCwindow.WindowTab = 400;
+    tCwindow.WindowX0 = 20;
+    tCwindow.WindowX1 = 779;
+
+    tCwindow.WindowY0 = 0;
+    tCwindow.WindowY1 = 479;
+
+    StartListeningToUART = 1;
+}
+
+uint8_t tComm_control(void)
+{
+    uint8_t answer  = 0;
+
+    if(BmTmpConfig != BM_CONFIG_DONE)
+    {
+    	tComm_HandleBlueModConfig();
+    }
+    else
+    {
+    /*##-2- Put UART peripheral in reception process ###########################*/
+
+		if((UartReady == RESET) && StartListeningToUART)
+		{
+				StartListeningToUART = 0;
+				if(HAL_UART_Receive_IT(&UartHandle, &receiveStartByteUart, 1) != HAL_OK)
+						tComm_Error_Handler();
+		}
+		/* Reset transmission flag */
+		if(UartReady == SET)
+		{
+				UartReady = RESET;
+				if((receiveStartByteUart == BYTE_DOWNLOAD_MODE) || (receiveStartByteUart == BYTE_SERVICE_MODE))
+					answer = openComm(receiveStartByteUart);
+				StartListeningToUART = 1;
+				return answer;
+		}
+    }
+    return 0;
+}
+
+
+void tComm_refresh(void)
+{
+	char localString[255];
+
+    if(tCscreen.FBStartAdress == 0)
+    {
+        GFX_hwBackgroundOn();
+        tCscreen.FBStartAdress = getFrame(18);
+        write_content_simple(&tCscreen, 0, 800, 480-24, &FontT24min,"Exit",CLUT_ButtonSurfaceScreen);
+        write_content_simple(&tCscreen, 800 - 70, 800, 480-24, &FontT24min,"Signal",CLUT_ButtonSurfaceScreen);
+
+        if(receiveStartByteUart == BYTE_SERVICE_MODE)
+            GFX_write_string(&FontT48min, &tCwindow, "Service mode enabled",2);
+        else
+            GFX_write_string(&FontT48min, &tCwindow, "Download mode enabled",2);
+        GFX_SetFramesTopBottom(tCscreen.FBStartAdress, 0,480);
+        display_text[0] = 0;
+        display_text[255] = 0;
+    }
+    else if(display_text[255])
+    {
+        display_text[(uint8_t)display_text[255]] = 0;
+        localString[0] = TXT_MINIMAL;
+        strcpy (&localString[1],display_text);
+        releaseFrame(18,tCscreen.FBStartAdress);
+        tCscreen.FBStartAdress = getFrame(18);
+        write_content_simple(&tCscreen, 0, 800, 480-24, &FontT24min,"Exit",CLUT_ButtonSurfaceScreen);
+        write_content_simple(&tCscreen, 800 - 70, 800, 480-24, &FontT24min,"Signal",CLUT_ButtonSurfaceScreen);
+        GFX_write_string(&FontT48min, &tCwindow, localString,2);
+        GFX_SetFrameTop(tCscreen.FBStartAdress);
+        display_text[0] = 0;
+        display_text[255] = 0;
+    }
+}
+
+
+void tComm_verlauf(uint8_t percentage_complete)
+{
+    uint32_t pDestination;
+
+    pDestination = (uint32_t)tCscreen.FBStartAdress;
+    pDestination += 150 * tCscreen.ImageHeight * 2;
+    pDestination += 100 * 2;
+
+    if(percentage_complete > 100)
+        percentage_complete = 100;
+
+    int i = 1;
+    while(i<=percentage_complete)
+    {
+        i += 1;
+        for(int y=0;y<4;y++)
+        {
+            for(int x=0;x<40;x++)
+            {
+                *(__IO uint16_t*)pDestination = 0xFF00 + 00;
+                    pDestination += 2;
+            }
+            pDestination += (tCscreen.ImageHeight  - 40 )* 2;
+        }
+        pDestination += tCscreen.ImageHeight * 2; // one spare line
+    }
+}
+
+
+void tComm_exit(void)
+{
+    SStateList status;
+    get_globalStateList(&status);
+
+    releaseFrame(18,tCscreen.FBStartAdress);
+    tCscreen.FBStartAdress = 0;
+    GFX_hwBackgroundOff();
+
+    if(setForcedBluetoothName)
+    {
+        setForcedBluetoothName = 0;
+        MX_Bluetooth_PowerOff();
+        HAL_Delay(1000);
+        MX_Bluetooth_PowerOn();
+        tComm_Set_Bluetooth_Name(1);
+        tComm_StartBlueModConfig();
+    }
+
+    updateSettingsAndMenuOnExit = 0;
+
+    if(status.base == BaseComm)
+    {
+    	set_globalState_Base();
+    }
+    MX_Bluetooth_PowerOff();						// Power down Bluetooth on the way out
+}
+
+
+uint8_t tComm_Set_Bluetooth_Name(uint8_t force)
+{
+    uint8_t answer = 0;
+
+    if(hardwareDataGetPointer()->secondarySerial != 0xFFFF)
+    {
+        if(force || (hardwareDataGetPointer()->secondary_bluetooth_name_set == 0xFF))
+            answer = HW_Set_Bluetooth_Name(hardwareDataGetPointer()->secondarySerial, 0);
+        if(answer == HAL_OK)
+            hardware_programmSecondaryBluetoothNameSet();
+    }
+    else
+    if(hardwareDataGetPointer()->primarySerial != 0xFFFF)
+    {
+        if(force || (hardwareDataGetPointer()->production_bluetooth_name_set == 0xFF))
+            answer = HW_Set_Bluetooth_Name(hardwareDataGetPointer()->primarySerial, 0);
+
+        if(answer == HAL_OK)
+             hardware_programmPrimaryBluetoothNameSet();
+
+    }
+    else	/* no serial set at all => do default configuration of the module */
+    {
+#define NINAB22103B00
+#ifdef NINAB22103B00
+    	answer = 0xFF;
+#endif
+    }
+    return answer;
+}
+
+
+uint8_t HW_Set_Bluetooth_Name(uint16_t serial, uint8_t withEscapeSequence)
+{
+    uint8_t answer = HAL_OK;
+    uint8_t aRxBuffer[50];
+    char aTxBufferName[50];
+
+//	char aTxFactoryDefaults[50] = "AT&F1\r";
+
+    char aTxBufferEscapeSequence[50] = "+++";	/* factory default */
+    // limit is 19 chars, with 7 chars shown in BLE advertising mode
+    //________________________123456789012345678901
+
+    tComm_GetBTCmdStr(BT_CMD_NAME, aTxBufferName);
+
+    char answerOkay[6] = "\r\nOK\r\n";
+
+    gfx_number_to_string(5,1,&aTxBufferName[15],serial);
+
+    // store active configuration in non-volatile memory
+    char aTxBufferWrite[50] = "AT&W\r";
+
+//	char aTxBufferReset[50] = "AT+RESET\r";
+
+
+    HAL_Delay(1010);
+    if(withEscapeSequence)
+    {
+        aRxBuffer[0] = 0;
+        if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferEscapeSequence, 3, 2000)!= HAL_OK)
+            answer = HAL_ERROR;
+        HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 3, 2000);
+        HAL_Delay(1010);
+
+        for(int i=0;i<3;i++)
+        if(aRxBuffer[i] != '+')
+            answer = HAL_ERROR;
+    }
+
+    aRxBuffer[0] = 0;
+    if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferName, 21, 2000)!= HAL_OK)
+        answer = HAL_ERROR;
+    HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 21+6, 2000);
+
+    for(int i=0;i<21;i++)
+    if(aRxBuffer[i] != aTxBufferName[i])
+        answer = HAL_ERROR;
+
+    for(int i=0;i<6;i++)
+    if(aRxBuffer[21+i] != answerOkay[i])
+        answer = HAL_ERROR;
+
+    HAL_Delay(200);
+
+    if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferWrite, 5, 2000)!= HAL_OK)
+        answer = HAL_ERROR;
+    HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 5+6, 2000);
+
+    for(int i=0;i<5;i++)
+    if(aRxBuffer[i] != aTxBufferWrite[i])
+        answer = HAL_ERROR;
+
+    for(int i=0;i<6;i++)
+    if(aRxBuffer[5+i] != answerOkay[i])
+        answer = HAL_ERROR;
+
+    answer = HAL_OK;
+    return answer;
+}
+
+uint8_t openComm(uint8_t aRxByte)
+{
+	SStateList status;
+	uint8_t localRx;
+	uint8_t timeoutCounter = 0;
+    uint8_t answer = 0;
+    uint8_t service_mode_last_three_bytes[3];
+    uint8_t service_mode_response[5] =
+    {
+        0x4B,
+        0xAB,
+        0xCD,
+        0xEF,
+        0x4C
+    };
+    uint8_t download_mode_response[2] =
+    {
+        0xBB,
+        0x4D
+    };
+
+    if((aRxByte != BYTE_DOWNLOAD_MODE) && (aRxByte != BYTE_SERVICE_MODE))
+        return 0;
+
+    set_globalState(StUART_STANDARD);
+
+    /* service mode is four bytes
+    0xAA 0xAB 0xCD 0xEF
+    answer is
+    */
+    localRx = aRxByte;
+
+    if(aRxByte == BYTE_SERVICE_MODE)
+    {
+        if((HAL_UART_Receive(&UartHandle, (uint8_t*)service_mode_last_three_bytes, 3, 2000)!= HAL_OK))
+            answer = 0x00;
+        else
+        {
+            if((service_mode_last_three_bytes[0] != 0xAB) || (service_mode_last_three_bytes[1] != 0xCD) || (service_mode_last_three_bytes[2] != 0xEF))
+                answer = 0x00;
+            else
+            {
+                if(HAL_UART_Transmit(&UartHandle, (uint8_t*)service_mode_response, 5, 2000)!= HAL_OK)
+                    answer = 0x00;
+                else
+                    answer = prompt4D4C(receiveStartByteUart);
+            }
+        }
+    }
+    else	//if(aRxByte == BYTE_SERVICE_MODE)
+    {
+        if(HAL_UART_Transmit(&UartHandle, (uint8_t*)download_mode_response, 2, 2000)!= HAL_OK)
+            answer = 0x00;
+        else
+            answer = prompt4D4C(receiveStartByteUart);
+    }
+
+    while((answer == prompt4D4C(receiveStartByteUart)) && (timeoutCounter < UART_TIMEOUT_SECONDS)) 	/* try receive once a second */
+    {
+    	if(HAL_UART_Receive(&UartHandle, (uint8_t*)&localRx, 1, UART_OPERATION_TIMEOUT)!= HAL_OK)
+    	{
+    		timeoutCounter++;
+    		get_globalStateList(&status);
+    		if (status.base != BaseComm)
+    		{
+    			timeoutCounter = UART_TIMEOUT_SECONDS; /* Abort action triggered outside main loop => exit */
+    		}
+    		if(EvaluateBluetoothSignalStrength)
+    		{
+    			tComm_EvaluateBluetoothStrength();
+    		}
+    	}
+    	else
+    	{
+    		answer = select_mode(localRx);
+    		timeoutCounter = 0;
+    	}
+    }
+    set_returnFromComm();
+    return 1;
+}
+
+
+uint8_t prompt4D4C(uint8_t mode)
+{
+    if(mode == BYTE_SERVICE_MODE)
+        return 0x4C;
+    else
+        return 0x4D;
+}
+
+
+uint8_t select_mode(uint8_t type)
+{
+    uint8_t dummyForBootloader[256] = {0};
+    uint8_t count;
+    uint8_t aTxBuffer[128];
+    uint8_t aRxBuffer[68];
+    uint8_t answer;
+    aTxBuffer[0] = type;
+    aTxBuffer[1] = prompt4D4C(receiveStartByteUart);
+    uint8_t tempHigh, tempLow;
+    count = 0;
+
+    // service mode only commands
+    if(receiveStartByteUart == BYTE_SERVICE_MODE)
+    {
+        // first part
+        switch(type)
+        {
+        // start communication (again)
+        case 0xAA:
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 2, 1000)!= HAL_OK)
+                return 0;
+            else
+                return prompt4D4C(receiveStartByteUart);
+        default:
+            break;
+        }
+
+
+        // Exit communication on Text like RING, CONNECT, ... or 0xFF command
+        if((type < 0x60) || (type == 0xFF))
+            return 0;
+
+        // return of command for (almost) all commands
+        switch(type)
+        {
+        // not supported yet case 0x20: // 	send hi:lo:temp1 bytes starting from ext_flash_address:3
+        // not supported yet case 0x22: // 	Resets all logbook pointers and the logbook (!)
+        // not supported yet case 0x23: // 	Resets battery gauge registers
+        // not supported yet case 0x30: // 	write bytes starting from ext_flash_address:3 (Stop when timeout)
+        // not supported yet case 0x40: // 	erases 4kB block from ext_flash_address:3 (Warning: No confirmation or built-in security here...)
+        // not supported yet case 0x42: // 	erases range in 4kB steps (Get 3 bytes address and 1byte amount of 4kB blocks)
+        // not supported yet case 0x50: // 	sends firmware from external flash from 0x3E0000 to 0x3FD000 (118784bytes) via comm
+        case 0xFE: // hw unit_tests
+        case 0x71: // hw read manufacturing data
+        case 0x73: // hw update FLEX
+        case 0x79: // hw read device data
+        case 0x74: // hw update Firmware
+        case 0x75: // hw update RTE
+        case 0x76: // hw update Fonts
+        case 0x80: // hw write manufacturing data
+        case 0x81: // hw write second serial
+        case 0x82: // hw set bluetooth name
+        case 0xC1: // 	Start low-level bootloader
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 1, UART_OPERATION_TIMEOUT)!= HAL_OK)
+                return 0;
+            break;
+        default:
+            break;
+        }
+
+        // now send content or update firmware
+        switch(type)
+        {
+        case 0xFE:
+            // work to do :-)  12. Oct. 2015
+            // 256 bytes output
+            memset(aTxBuffer,0,128);
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 128,5000)!= HAL_OK)
+                return 0;
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 128,5000)!= HAL_OK)
+                return 0;
+            aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+            break;
+
+        case 0x71:
+            memcpy(aTxBuffer,hardwareDataGetPointer(),64);
+            count += 64;
+            aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+            break;
+
+        case 0x73:
+            answer = receive_update_flex(1);
+            if(answer == 0)
+                return 0;
+            else if(answer == 2) // 2 = RTE without bootToBootloader
+            {
+                aTxBuffer[0] = 0xFF;
+                HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 1,10000);
+                return 0;
+            }
+            else
+            {
+                aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+                if(answer == 1) /* 0xFF is checksum error, 2 = RTE without bootToBootloader */
+                {
+                    extern	uint8_t bootToBootloader;
+                    bootToBootloader = 1;
+                }
+            }
+            break;
+
+        case 0x79:
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 1,10000)!= HAL_OK)
+                return 0;
+            ext_flash_read_fixed_16_devicedata_blocks_formated_128byte_total(aTxBuffer);
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 128,5000)!= HAL_OK)
+                return 0;
+            aTxBuffer[0] = prompt4D4C(receiveStartByteUart);
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 1,10000)!= HAL_OK)
+                return 0;
+            else
+                return prompt4D4C(receiveStartByteUart);
+
+        case 0x82:
+            setForcedBluetoothName = 1;
+            return 0;
+
+        case 0x74:
+            answer = receive_update_data_mainCPU_firmware();
+            if(answer != 0)
+            {
+                aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+                if(answer == 1) // 0xFF is checksum error
+                {
+                    extern	uint8_t bootToBootloader;
+                    bootToBootloader = 1;
+                }
+            }
+            else
+                return 0;
+            break;
+
+        case 0x75:
+            receive_update_data_cpu2();
+            aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+            break;
+
+        case 0x76:
+            answer = receive_update_data_mainCPU_variable_firmware();
+            if(answer != 0)
+            {
+                aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+                if(answer == 1) // 0xFF is checksum error
+                {
+                    extern	uint8_t bootToBootloader;
+                    bootToBootloader = 1;
+                }
+            }
+            else
+                return 0;
+            break;
+
+        case 0x80:
+            if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer,  52, 5000)!= HAL_OK)
+                return 0;
+            if(hardware_programmProductionData(aRxBuffer) == HAL_OK)
+            {
+                aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+            }
+            else
+                return 0;
+            break;
+
+        case 0x81:
+            if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer,  12, 1000)!= HAL_OK)
+                return 0;
+            if(hardware_programmSecondarySerial(aRxBuffer) == HAL_OK)
+            {
+                aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+            }
+            else
+                return 0;
+            break;
+
+        }
+
+        // was service command? Yes, finish and exit
+        if(count)
+        {
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, count,10000)!= HAL_OK)
+                return 0;
+            else
+                return prompt4D4C(receiveStartByteUart);
+        }
+    }
+
+
+    // download mode commands
+    switch(type)
+    {
+    // return of command for almost all commands
+    case 0x60: // get model + features
+    case 0x61: // get all headers full (256 bytes)
+    case 0x62: // set clock
+    case 0x63: // set custom text
+    case 0x66: // get dive profile
+    case 0x69: // get serial, old version numbering, custom text
+    case 0x6A: // get model
+    case 0x6B: // get specific firmware version
+    case 0x6C: /* Display Bluetooth signal strength */
+    case 0x6D: // get all compact headers (16 byte)
+    case 0x6E: // display text
+    case 0x70: // read min, default, max setting
+    case 0x72: // read setting
+    case 0x77: // write setting
+    case 0x78: // reset all settings
+        if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 1, 1000)!= HAL_OK)
+            return 0;
+        break;
+
+    // start communication (again)
+    case 0xBB:
+        if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 2, 1000)!= HAL_OK)
+            return 0;
+        else
+            return prompt4D4C(receiveStartByteUart);
+
+    // stop communication
+    case 0xFF:
+        HAL_UART_Transmit(&UartHandle, (uint8_t*)&aTxBuffer, 1, 1000);
+        return 0;
+
+    default:
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    }
+
+    switch(type)
+    {
+    case 0x62:
+        if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer,  6, 2000)!= HAL_OK)
+            return 0;
+        break;
+    case 0x63:
+        if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 60, 5000)!= HAL_OK)
+            return 0;
+        break;
+    case 0x66:
+        if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer,  1, 1000)!= HAL_OK)
+            return 0;
+        break;
+    case 0x6B:
+        if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer,  1, 1000)!= HAL_OK)
+            return 0;
+        break;
+    case 0x6E:
+        if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 16, 5000)!= HAL_OK)
+            return 0;
+        break;
+    case 0x77:
+  if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 5, 5000)!= HAL_OK)
+            return 0;
+  break;
+    case 0x72:
+  if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 1, 5000)!= HAL_OK)
+            return 0;
+        break;
+    case 0x70:
+  if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, 1, 5000)!= HAL_OK)
+            return 0;
+        break;
+    }
+
+    switch(type)
+    {
+    /* common to standard and bootloader */
+
+    // get model + features
+    case 0x60:
+        aTxBuffer[count++] = 0x00; // hardware descriptor HIGH byte
+        aTxBuffer[count++] = 0x3B; // hardware descriptor LOW byte // 0x3B is OSTC 4/5 //  0x1A is OTSC3
+        aTxBuffer[count++] = 0x00; // feature descriptor HIGH byte
+        aTxBuffer[count++] = 0x00; // feature descriptor LOW byte
+        aTxBuffer[count++] = 0x44; // model id OSTC5
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+
+    // get model
+    case 0x6A:
+        aTxBuffer[count++] = 0x3B; // 0x3B is OSTC 4/5 //  0x1A is OTSC3
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+
+    // get all firmware version and status (OSTC4 only)
+    case 0x6B:
+        switch(*aRxBuffer)
+        {
+            case 0xFF:
+            // firmware
+            aTxBuffer[count++] = firmwareDataGetPointer()->versionFirst;
+            aTxBuffer[count++] = firmwareDataGetPointer()->versionSecond;
+            aTxBuffer[count++] = firmwareDataGetPointer()->versionThird;
+            aTxBuffer[count++] = firmwareDataGetPointer()->versionBeta;
+            break;
+            case 0xFE:
+            // RTE
+            getActualRTEandFONTversion(&tempHigh, &tempLow, 0, 0); // RTE
+            aTxBuffer[count++] = tempHigh;
+            aTxBuffer[count++] = tempLow;
+            aTxBuffer[count++] = 0;
+            aTxBuffer[count++] = 0;
+            break;
+            case 0x10:
+            getActualRTEandFONTversion( 0, 0, &tempHigh, &tempLow); // font
+            aTxBuffer[count++] = tempHigh;
+            aTxBuffer[count++] = tempLow;
+            aTxBuffer[count++] = 0;
+            aTxBuffer[count++] = 0;
+            break;
+            default:
+            // not supported
+            aTxBuffer[count++] = 0xFF;
+            aTxBuffer[count++] = 0xFF;
+            aTxBuffer[count++] = 0xFF;
+            aTxBuffer[count++] = 0xFF;
+            break;
+/* Jef Driesen Test
+            default:
+            // not supported
+            aTxBuffer[count++] = 0x1;
+            aTxBuffer[count++] = 0x1;
+            aTxBuffer[count++] = 0x1;
+            aTxBuffer[count++] = 0x1;
+            break;
+*/
+        }
+/*
+        // serial
+        aTxBuffer[count++] = pSettings->serialLow;
+        aTxBuffer[count++] = pSettings->serialHigh;
+        // batch code (date)
+        hardwareBatchCode(&tempHigh, &tempLow);
+        aTxBuffer[count++] = tempLow;
+        aTxBuffer[count++] = tempHigh;
+        // status and status detail (future feature)
+        aTxBuffer[count++] = 0;
+        aTxBuffer[count++] = 0;
+        aTxBuffer[count++] = 0;
+        aTxBuffer[count++] = 0;
+*/
+        // prompt
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+
+    /* Trigger Bluetooth signal strength evaluation */
+    case 0x6C:  tComm_EvaluateBluetoothStrength();
+    			aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+    	break;
+    // display text
+    case 0x6E:
+        for(int i=0;i<16;i++)
+            display_text[i] = aRxBuffer[i];
+        display_text[15] = 0;
+        display_text[255] = 16;
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+
+    // version / identify
+    case 0x69:
+        aTxBuffer[count++] = 0;//pSettings->serialLow;
+        aTxBuffer[count++] = 0;//pSettings->serialHigh;
+        aTxBuffer[count++] = 0;//firmwareVersion_16bit_low();
+        aTxBuffer[count++] = 0;//firmwareVersion_16bit_high();
+        memset(&aTxBuffer[count], 0, 60);
+        count += 60;
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+
+    /* bootloader dummies */
+    // full headers (256 byte)
+    case 0x61:
+        for(int StepBackwards = 0;StepBackwards<256;StepBackwards++)
+        {
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)dummyForBootloader, 256,5000)!= HAL_OK)
+                return 0;
+        }
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    // compact headers (16 byte)
+    case 0x6D:
+        for(int StepBackwards = 0;StepBackwards<256;StepBackwards++)
+        {
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)dummyForBootloader, 16,5000)!= HAL_OK)
+                return 0;
+        }
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    // set clock & date
+    case 0x62:
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    // set custom text
+    case 0x63:
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    // get dive profile
+    case 0x66:
+        if(HAL_UART_Transmit(&UartHandle, (uint8_t*)dummyForBootloader, 256,5000)!= HAL_OK)
+            return 0;
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    // read min,default,max setting
+    // read settings
+
+
+    case 0x72:
+        memcpy(&aTxBuffer[count], dummyForBootloader, 4);
+  count += 4;
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    // write settings
+    case 0x77:
+        aTxBuffer[count++] = prompt4D4C(receiveStartByteUart);
+        break;
+    }
+
+    if(count)
+    {
+        if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, count,10000)!= HAL_OK)
+            return 0;
+        else
+            return prompt4D4C(receiveStartByteUart);
+    }
+    return 0;
+}
+
+#define BLOCKSIZE 0x1000
+
+HAL_StatusTypeDef receive_uart_large_size(UART_HandleTypeDef *huart, uint8_t *pData, uint32_t Size)
+{
+    uint16_t length_4k_blocks;
+    uint16_t length_4k_remainder;
+    uint32_t temp;
+    HAL_StatusTypeDef result = HAL_OK;
+    uint32_t pDataLocal;
+
+    length_4k_blocks = (uint16_t) (Size / BLOCKSIZE);
+    temp = length_4k_blocks;
+    temp *= BLOCKSIZE;
+    length_4k_remainder = (uint16_t) ( Size - temp);
+
+    pDataLocal = (uint32_t)pData;
+
+
+    while((result == HAL_OK) && length_4k_blocks)
+    {
+        result = HAL_UART_Receive(&UartHandle, (uint8_t *)pDataLocal, BLOCKSIZE , UART_TIMEOUT_LARGE_BLOCK);
+        pDataLocal += BLOCKSIZE;
+        length_4k_blocks--;
+    }
+
+    if((result == HAL_OK) && length_4k_remainder)
+    {
+        result = HAL_UART_Receive(&UartHandle, (uint8_t *)pDataLocal, length_4k_remainder , UART_TIMEOUT_LARGE_BLOCK);
+    }
+    return result;
+}
+
+
+/* for safety reason (memory blocking this code is main and sub */
+
+uint8_t receive_update_data_cpu2(void)
+{
+    uint8_t answer;
+
+    uint8_t* pBuffer = (uint8_t*)getFrame(20);
+    answer = receive_update_data_cpu2_sub(pBuffer);
+    releaseFrame(20,(uint32_t)pBuffer);
+    return answer;
+}
+
+
+uint8_t receive_update_data_cpu2_sub(uint8_t* pBuffer)
+{
+    uint8_t sBuffer[10];
+    uint32_t length, offsetTotal, checksum, checksumCalc;
+    uint8_t id;
+    const uint8_t id_RTE = 0xFE;
+
+    //Get length
+    if(HAL_UART_Receive(&UartHandle, pBuffer, 4,5000)!= HAL_OK) // 58000
+    {
+        return 0;
+    }
+    length = 256  * 256 * 256 * (uint32_t)pBuffer[0] +  256 * 256 * (uint32_t)pBuffer[1] + 256 * (uint32_t)pBuffer[2] + pBuffer[3];
+
+    //Get id
+    if(HAL_UART_Receive(&UartHandle, pBuffer, 4,5000)!= HAL_OK) // 58000
+    {
+        return 0;
+    }
+    id = pBuffer[0];
+    offsetTotal = 256  * 256 * 256 * (uint32_t)pBuffer[0] +  256 * 256 * (uint32_t)pBuffer[1] + 256 * (uint32_t)pBuffer[2] + pBuffer[3];
+
+    // get checksum, bytes are in different order on Dev C++ code!!!
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+    {
+        return 0;
+    }
+    checksum = 256  * 256 * 256 * (uint32_t)sBuffer[3] +  256 * 256 * (uint32_t)sBuffer[2] + 256 * (uint32_t)sBuffer[1] + sBuffer[0];
+    checksumCalc = length + offsetTotal;
+
+    // no need to get code if checksum == length is wrong
+    if(checksumCalc != checksum)
+    {
+        return 0;
+    }
+
+    //get Code
+    if(receive_uart_large_size(&UartHandle, pBuffer, length)!= HAL_OK)
+    {
+        return 0;
+    }
+
+    //get Checksum
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 580000
+    {
+        return 0;
+    }
+    checksum = 256  * 256 * 256 *(uint32_t)sBuffer[0] + 256 * 256 *  (uint32_t)sBuffer[1] + 256 *  (uint32_t)sBuffer[2] + sBuffer[3];
+//  uint32_t checksumCalc = crc32c_checksum(pBuffer, length,0,0);
+    checksumCalc = CRC_CalcBlockCRC((uint32_t*)pBuffer, length/4);
+
+    if(checksum !=  checksumCalc)
+    {
+        return 0;
+    }
+
+    if(id != id_RTE)
+    {
+        strcpy(display_text,"wrong data.");
+        display_text[255] = 32;
+        return 0;
+    }
+
+    strcpy(display_text,"  RTE update.");
+    display_text[255] = 32;
+
+    return extCPU2bootloader(pBuffer,length,display_text);
+}
+
+uint8_t receive_update_flex(uint8_t isRTEupdateALLOWED)
+{
+    uint8_t answer;
+
+    uint8_t* pBuffer1 = (uint8_t*)getFrame(20);
+    uint8_t* pBuffer2 = (uint8_t*)getFrame(20);
+
+    answer = receive_update_data_flex(pBuffer1, pBuffer2, isRTEupdateALLOWED);
+
+    releaseFrame(20,(uint32_t)pBuffer1);
+    releaseFrame(20,(uint32_t)pBuffer2);
+
+    return answer;
+}
+
+uint8_t receive_update_data_mainCPU_firmware(void)
+{
+    uint8_t answer;
+
+    uint8_t* pBuffer1 = (uint8_t*)getFrame(20);
+
+    answer = receive_update_data_mainCPU_firmware_subroutine(1, pBuffer1, 0);
+
+    releaseFrame(20,(uint32_t)pBuffer1);
+
+    return answer;
+}
+
+/* multi buffer (long data) not tested yet */
+uint8_t receive_update_data_mainCPU_variable_firmware(void)
+{
+    uint8_t answer;
+
+    uint8_t* pBuffer1 = (uint8_t*)getFrame(20);
+    uint8_t* pBuffer2 = (uint8_t*)getFrame(20);
+
+    answer = receive_update_data_mainCPU_firmware_subroutine(2, pBuffer1, pBuffer2);
+
+    releaseFrame(20,(uint32_t)pBuffer1);
+    releaseFrame(20,(uint32_t)pBuffer2);
+
+    return answer;
+}
+
+uint8_t receive_update_data_flex(uint8_t* pBuffer1, uint8_t* pBuffer2, uint8_t RTEupdateALLOWED)
+{
+    uint8_t sBuffer[10];
+    uint8_t serialBuffer[10];
+    uint32_t length1, length2, lengthCompare, offsetCompare, ByteCompareStatus;
+    uint32_t lengthTotal, offsetTotal;
+    uint32_t checksum, checksumCalc = 0;
+    uint8_t id;
+    const uint8_t id_Region1_firmware = 0xFF;
+    const uint8_t id_RTE = 0xFE;
+    uint8_t textpointer = 0;
+    uint32_t index = 0;
+
+    //Get length
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+    {
+        return 0;
+    }
+    lengthTotal = 256 * 256 * 256 * (uint32_t)sBuffer[0] +  256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
+
+    //Get offset and/or id (id is 0xFF for RTE, 0xFE for firmware and offset if var)
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+    {
+        return 0;
+    }
+    id = sBuffer[0];
+
+    checksumCalc = 256 * 256 * 256 * (uint32_t)sBuffer[0] +  256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
+    checksumCalc += lengthTotal;
+    //old, does no longer work because of the fonts: checksumCalc = lengthTotal + offsetTotal;
+
+    if((id != id_Region1_firmware) && (id != id_RTE) && (id != id_FONT) && (id != id_FONT_OLD))
+    {
+        return 0;
+    }
+
+    // neu 110212
+    if(id == id_FONT)
+        offsetTotal = 256 * 256 * 256 * (uint32_t)sBuffer[1] +  256 * 256 * (uint32_t)sBuffer[2] + 256 * (uint32_t)sBuffer[3];
+    else
+        offsetTotal = 256 * 256 * 256 * (uint32_t)sBuffer[0] +  256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
+
+    // get checksum, bytes are in different order on Dev C++ code!!!
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+    {
+        return 0;
+    }
+    checksum = 256 * 256 * 256 * (uint32_t)sBuffer[3] +  256 * 256 * (uint32_t)sBuffer[2] + 256 * (uint32_t)sBuffer[1] + sBuffer[0];
+
+
+    if(checksumCalc != checksum)
+    {
+        uint8_t ptr = 0;
+        strcpy(&display_text[ptr]," checksum error");
+        ptr += 15;
+        strcpy(&display_text[ptr],"\n\r");
+        ptr += 2;
+        ptr += gfx_number_to_string(10,0,&display_text[ptr],checksumCalc);
+        display_text[ptr] = 0;
+        display_text[255] = ptr + 1;
+        return 0xFF;
+    }
+
+    //Get serial (new since 160211)
+    if(HAL_UART_Receive(&UartHandle, serialBuffer, 4,5000)!= HAL_OK)
+    {
+        return 0;
+    }
+
+    if(lengthTotal > 768000)
+    {
+        length1 = 768000;
+        length2 = lengthTotal - length1;
+    }
+    else
+    {
+        length1 = lengthTotal;
+        length2 = 0;
+    }
+
+    if((pBuffer2 == 0) && (length2 != 0))
+        return 0;
+
+    //get Code
+    if(receive_uart_large_size(&UartHandle, pBuffer1, length1)!= HAL_OK)
+        return 0;
+
+    if(length2)
+        if(receive_uart_large_size(&UartHandle, pBuffer2, length2)!= HAL_OK)
+            return 0;
+
+    //get Checksum
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+        return 0;
+
+    checksum = 256  * 256 * 256 *(uint32_t)sBuffer[0] + 256 * 256 *  (uint32_t)sBuffer[1] + 256 *  (uint32_t)sBuffer[2] + sBuffer[3];
+//  uint32_t checksumCalc = crc32c_checksum(pBuffer1, length1, pBuffer2, length2);
+    if(length2)
+        checksumCalc = CRC_CalcBlockCRC_moreThan768000((uint32_t*)pBuffer1, (uint32_t*)pBuffer2, lengthTotal/4);
+    else
+        checksumCalc = CRC_CalcBlockCRC((uint32_t*)pBuffer1, length1/4);
+
+    /* check id now */
+    /*
+    if(region == 2)
+    {
+        if((id == id_Region1_firmware) || (id == id_RTE))
+        {
+            strcpy(display_text,"wrong data.");
+            display_text[255] = 32;
+            return 0;
+        }
+    }
+    else
+    {
+        if(id != id_Region1_firmware)
+        {
+            strcpy(display_text,"wrong data.");
+            display_text[255] = 32;
+            return 0;
+        }
+    }
+    */
+    /* test checksum */
+    if(checksum !=  checksumCalc)
+    {
+        uint8_t ptr = 0;
+        strcpy(&display_text[ptr]," checksum error");
+        ptr += 15;
+        strcpy(&display_text[ptr],"\n\r");
+        display_text[ptr] = 0;
+        display_text[255] = ptr + 1;
+        return 0xFF;
+    }
+
+    if(id == id_Region1_firmware)
+    {
+        uint8_t ptr = 0;
+        display_text[ptr++] = 'V';
+        ptr += gfx_number_to_string(2,0,&display_text[ptr],pBuffer1[0x10000] & 0x1F);
+        display_text[ptr++] = '.';
+        ptr += gfx_number_to_string(2,0,&display_text[ptr],pBuffer1[0x10001] & 0x1F);
+        display_text[ptr++] = '.';
+        ptr += gfx_number_to_string(2,0,&display_text[ptr],pBuffer1[0x10002] & 0x1F);
+        display_text[ptr++] = ' ';
+        if(pBuffer1[0x10003])
+        {
+            strcpy(&display_text[ptr],"beta ");
+            ptr +=5;
+        }
+        strcpy(&display_text[ptr],"\n\rpreparing for install.");
+        ptr += 25;
+        display_text[255] = ptr + 1;
+    }
+    else if(id == id_RTE)
+    {
+        if(RTEupdateALLOWED)
+        {
+            strcpy(display_text,"  RTE update.\n\r");
+            textpointer = 0;
+            while((display_text[textpointer] != 0) && (textpointer < 50))
+                textpointer++;
+            display_text[255] = textpointer+1;
+            return extCPU2bootloader(pBuffer1,length1,display_text);
+        }
+        else
+            return 0xFF;
+    }
+    else
+    if(id == id_FONT)
+    {
+        uint8_t ptr = 0;
+        ptr += gfx_number_to_string(7,0,&display_text[ptr],lengthTotal);
+        strcpy(&display_text[ptr]," bytes with ");
+        ptr += 12;
+        ptr += gfx_number_to_string(7,0,&display_text[ptr],offsetTotal);
+        strcpy(&display_text[ptr]," offset");
+        ptr += 7;
+        strcpy(&display_text[ptr],"\n\rpreparing for install.");
+        ptr += 25;
+        display_text[255] = ptr + 1;
+    }
+
+
+    /* only non RTE !! (at this point RTE path already performed a return some lines above */
+    uint8_t* pBufferCompare = (uint8_t*)getFrame(20);
+    ByteCompareStatus = 0;
+
+    if(id == id_Region1_firmware)
+    {
+        /* standard firmware limited to 768000 */
+        if(ext_flash_read_firmware(pBufferCompare,4,0) != 0xFFFFFFFF)
+            ext_flash_erase_firmware();
+        ext_flash_write_firmware(pBuffer1, length1);
+        lengthCompare = ext_flash_read_firmware(pBufferCompare,768000,0);
+
+        if(lengthCompare != length1)
+            ByteCompareStatus = 10000;
+        for(index = 0; index < length1; index++)
+        {
+            if(pBuffer1[index] != pBufferCompare[index])
+                ByteCompareStatus++;
+        }
+    }
+    else
+    if(id == id_FONT)
+    {
+        /* upper region firmware can be larger (1MB) */
+        if(ext_flash_read_firmware2(0, pBufferCompare,4, 0,0) != 0xFFFFFFFF)
+            ext_flash_erase_firmware2();
+        ext_flash_write_firmware2(offsetTotal, pBuffer1, length1, pBuffer2, length2);
+        lengthCompare = ext_flash_read_firmware2(&offsetCompare, pBufferCompare,768000, 0,768000);
+
+        if(lengthCompare != length1 + length2)
+            ByteCompareStatus = 10000;
+        if(offsetTotal != offsetCompare)
+            ByteCompareStatus += 20000;
+        for(index = 0; index < length1; index++)
+        {
+            if(pBuffer1[index] != pBufferCompare[index])
+                ByteCompareStatus++;
+        }
+
+        lengthCompare = ext_flash_read_firmware2(0, 0,768000, pBufferCompare,768000);
+        for(index = 0; index < length2; index++)
+        {
+            if(pBuffer2[index] != pBufferCompare[index])
+                ByteCompareStatus++;
+        }
+    }
+
+    releaseFrame(20,(uint32_t)pBufferCompare);
+
+    if(ByteCompareStatus != 0)
+    {
+        strcpy(&display_text[0],"\n\rcopy error.");
+        display_text[255] = 21;
+        return 0;
+    }
+    else
+    {
+        strcpy(&display_text[0],"\n\rready to install.");
+        display_text[255] = 21;
+        return 1;
+    }
+}
+
+
+uint8_t receive_update_data_mainCPU_firmware_subroutine(uint8_t region, uint8_t* pBuffer1, uint8_t* pBuffer2)
+{
+    uint8_t sBuffer[10];
+    uint32_t length1, length2, lengthCompare, offsetCompare, ByteCompareStatus;
+    uint32_t lengthTotal, offsetTotal, checksum, checksumCalc = 0;
+    uint8_t id;
+
+    //Get length
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+        return 0;
+
+    lengthTotal = 256  * 256 * 256 * (uint32_t)sBuffer[0] +  256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
+
+    //Get offset and/or id (id is 0xFF for RTE, 0xFE for firmware and offset if var)
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+        return 0;
+
+    id = sBuffer[0];
+
+    checksumCalc = 256 * 256 * 256 * (uint32_t)sBuffer[0] +  256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
+    checksumCalc += lengthTotal;
+
+    if((id != id_Region1_firmware) && (id != id_RTE) && (id != id_FONT) && (id != id_FONT_OLD))
+        return 0;
+
+    if(id == id_FONT)
+        offsetTotal = 256 * 256 * 256 * (uint32_t)sBuffer[1] +  256 * 256 * (uint32_t)sBuffer[2] + 256 * (uint32_t)sBuffer[3];
+        // alt, prior to id for font
+    else
+        offsetTotal = 256 * 256 * 256 * (uint32_t)sBuffer[0] +  256 * 256 * (uint32_t)sBuffer[1] + 256 * (uint32_t)sBuffer[2] + sBuffer[3];
+
+    // get checksum, bytes are in different order on Dev C++ code!!!
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+        return 0;
+
+    checksum = 256  * 256 * 256 * (uint32_t)sBuffer[3] +  256 * 256 * (uint32_t)sBuffer[2] + 256 * (uint32_t)sBuffer[1] + sBuffer[0];
+
+    //old: checksumCalc = lengthTotal + offsetTotal;
+
+    if(checksumCalc != checksum)
+    {
+        uint8_t ptr = 0;
+        strcpy(&display_text[ptr]," checksum error");
+        ptr += 15;
+        strcpy(&display_text[ptr],"\n\r");
+        ptr += 2;
+        ptr += gfx_number_to_string(10,0,&display_text[ptr],checksumCalc);
+        display_text[ptr] = 0;
+        display_text[255] = ptr + 1;
+        return 0xFF;
+    }
+
+    if(lengthTotal > 768000)
+    {
+        length1 = 768000;
+        length2 = lengthTotal - length1;
+    }
+    else
+    {
+        length1 = lengthTotal;
+        length2 = 0;
+    }
+
+    if((pBuffer2 == 0) && (length2 != 0))
+        return 0;
+
+    //get Code
+    if(receive_uart_large_size(&UartHandle, pBuffer1, length1)!= HAL_OK)
+        return 0;
+
+    if(length2)
+        if(receive_uart_large_size(&UartHandle, pBuffer2, length2)!= HAL_OK)
+            return 0;
+
+    //get Checksum
+    if(HAL_UART_Receive(&UartHandle, sBuffer, 4,5000)!= HAL_OK) // 58000
+        return 0;
+
+    checksum = 256  * 256 * 256 *(uint32_t)sBuffer[0] + 256 * 256 *  (uint32_t)sBuffer[1] + 256 *  (uint32_t)sBuffer[2] + sBuffer[3];
+//  uint32_t checksumCalc = crc32c_checksum(pBuffer1, length1, pBuffer2, length2);
+    if(length2)
+        checksumCalc = CRC_CalcBlockCRC_moreThan768000((uint32_t*)pBuffer1, (uint32_t*)pBuffer2, lengthTotal/4);
+    else
+        checksumCalc = CRC_CalcBlockCRC((uint32_t*)pBuffer1, length1/4);
+
+    /* check id now */
+    if(region == 2)
+    {
+        if((id == id_Region1_firmware) || (id == id_RTE))
+        {
+            strcpy(display_text,"wrong data.");
+            display_text[255] = 32;
+            return 0;
+        }
+    }
+    else
+    {
+        if(id != id_Region1_firmware)
+        {
+            strcpy(display_text,"wrong data.");
+            display_text[255] = 32;
+            return 0;
+        }
+    }
+
+    /* test checksum */
+    if(checksum !=  checksumCalc)
+    {
+        uint8_t ptr = 0;
+        strcpy(&display_text[ptr]," pruefsummen error");
+        ptr += 15;
+        strcpy(&display_text[ptr],"\n\r");
+        display_text[ptr] = 0;
+        display_text[255] = ptr + 1;
+        return 0xFF;
+    }
+
+    if(region == 2)
+    {
+        uint8_t ptr = 0;
+        ptr += gfx_number_to_string(7,0,&display_text[ptr],lengthTotal);
+        strcpy(&display_text[ptr]," bytes with ");
+        ptr += 12;
+        ptr += gfx_number_to_string(7,0,&display_text[ptr],offsetTotal);
+        strcpy(&display_text[ptr]," offset");
+        ptr += 7;
+        strcpy(&display_text[ptr],"\n\rpreparing for install.");
+        ptr += 25;
+        display_text[255] = ptr + 1;
+
+    }
+    else
+    {
+        uint8_t ptr = 0;
+        display_text[ptr++] = 'V';
+        ptr += gfx_number_to_string(2,0,&display_text[ptr],pBuffer1[0x10000] & 0x1F);
+        display_text[ptr++] = '.';
+        ptr += gfx_number_to_string(2,0,&display_text[ptr],pBuffer1[0x10001] & 0x1F);
+        display_text[ptr++] = '.';
+        ptr += gfx_number_to_string(2,0,&display_text[ptr],pBuffer1[0x10002] & 0x1F);
+        display_text[ptr++] = ' ';
+        if(pBuffer1[0x10003])
+        {
+            strcpy(&display_text[ptr],"beta ");
+            ptr +=5;
+        }
+        strcpy(&display_text[ptr],"\n\rpreparing for install.");
+        ptr += 25;
+        display_text[255] = ptr + 1;
+    }
+
+    uint8_t* pBufferCompare = (uint8_t*)getFrame(20);
+    ByteCompareStatus = 0;
+
+    if(region == 2)
+    {
+        /* upper region firmware can be larger (1MB) */
+        if(ext_flash_read_firmware2(0, pBufferCompare,4, 0,0) != 0xFFFFFFFF)
+            ext_flash_erase_firmware2();
+        ext_flash_write_firmware2(offsetTotal, pBuffer1, length1, pBuffer2, length2);
+        lengthCompare = ext_flash_read_firmware2(&offsetCompare, pBufferCompare,768000, 0,768000);
+
+        if(lengthCompare != length1 + length2)
+            ByteCompareStatus = 10000;
+        if(offsetTotal != offsetCompare)
+            ByteCompareStatus += 20000;
+        for(int i = 0; i < length1; i++)
+        {
+            if(pBuffer1[0] != pBufferCompare[0])
+                ByteCompareStatus++;
+        }
+
+        lengthCompare = ext_flash_read_firmware2(0, 0,768000, pBufferCompare,768000);
+        for(int i = 0; i < length2; i++)
+        {
+            if(pBuffer2[0] != pBufferCompare[0])
+                ByteCompareStatus++;
+        }
+    }
+    else
+    {
+        /* standard firmware limited to 768000 */
+        if(ext_flash_read_firmware(pBufferCompare,4,0) != 0xFFFFFFFF)
+            ext_flash_erase_firmware();
+        ext_flash_write_firmware(pBuffer1, length1);
+        lengthCompare = ext_flash_read_firmware(pBufferCompare,768000,0);
+
+        if(lengthCompare != length1)
+            ByteCompareStatus = 10000;
+        for(int i = 0; i < length1; i++)
+        {
+            if(pBuffer1[0] != pBufferCompare[0])
+                ByteCompareStatus++;
+        }
+    }
+
+    releaseFrame(20,(uint32_t)pBufferCompare);
+
+    if(ByteCompareStatus != 0)
+    {
+        strcpy(&display_text[0],"\n\rcopy error.");
+        display_text[255] = 21;
+        return 0;
+    }
+    else
+    {
+        strcpy(&display_text[0],"\n\rready to install.");
+        display_text[255] = 21;
+        return 1;
+    }
+}
+
+void tComm_RequestBluetoothStrength(void)
+{
+	EvaluateBluetoothSignalStrength = 1;
+}
+
+/* read, validate the modul answer and flush rx que if necessary */
+uint8_t tComm_CheckAnswerOK()
+{
+    char answerOkay[] = "\r\nOK\r\n";
+    char aRxBuffer[UART_CMD_BUF_SIZE];
+    uint8_t sizeAnswer = sizeof(answerOkay) -1;
+	uint8_t result = HAL_OK;
+	uint8_t indexRef = 0;
+	uint8_t indexBuf = 0;
+	uint8_t answer;
+
+	memset(aRxBuffer,0,UART_CMD_BUF_SIZE);
+	if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, sizeAnswer, UART_OPERATION_TIMEOUT) == HAL_OK)
+	{
+		do
+		{
+			if(answerOkay[indexRef] == aRxBuffer[indexBuf])
+			{
+				indexRef++;
+			}
+			else
+			{
+				if(indexRef != 0)
+				{
+					if((answerOkay[0] == aRxBuffer[indexBuf]))
+					{
+						indexRef = 1;
+					}
+					else
+					{
+						indexRef = 0;
+					}
+				}
+			}
+			indexBuf++;
+		}while(indexBuf < sizeAnswer);
+
+		if(indexRef != sizeAnswer)		/* unexpected answer => there might be characters left in RX que => read and check all rx bytes */
+		{
+			do
+			{
+				answer = HAL_ERROR;
+				if (indexBuf < UART_CMD_BUF_SIZE)
+				{
+					answer = HAL_UART_Receive(&UartHandle, (uint8_t*)&aRxBuffer[indexBuf], 1, 10);
+
+					if(answerOkay[indexRef] == aRxBuffer[indexBuf])
+					{
+						indexRef++;
+					}
+					else
+					{
+						if(indexRef != 0)
+						{
+							indexRef = 0;
+						}
+					}
+					indexBuf++;
+				}
+			}while((answer == HAL_OK) && (indexRef != sizeAnswer));
+			if(indexRef != sizeAnswer)
+			{
+				result = HAL_ERROR;
+			}
+		}
+	}
+	else
+	{
+		result = HAL_ERROR;
+	}
+	return result;
+
+}
+
+
+void tComm_EvaluateBluetoothStrength(void)
+{
+	char aTxBufferBarSSI[] = "AT+BARSSI\r";
+	char aTxBufferEscapeSequence[] = "+++";
+	char aTxBufferEnd[] = "ATO\r";
+    uint8_t sizeRequest = sizeof(aTxBufferBarSSI) -1;
+
+    uint8_t answer = HAL_OK;
+    char aRxBuffer[UART_CMD_BUF_SIZE];
+	char SignalStr[UART_CMD_BUF_SIZE];
+    uint8_t index = 0;
+    uint8_t strindex = 0;
+    int8_t sigqual = 0;
+
+    HAL_Delay(200);
+    if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferEscapeSequence, 3, 2000)== HAL_OK)
+    {
+    	if(tComm_CheckAnswerOK() == HAL_OK)
+		{
+			HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferBarSSI,sizeRequest , 2000);
+			{
+				index = 0;
+				do						/* Answer is not the common one. Instead the signal strength is received => read all available bytes one by one*/
+				{
+					answer = HAL_UART_Receive(&UartHandle, (uint8_t*)&aRxBuffer[index], 1, 100);
+					if(index < UART_CMD_BUF_SIZE) 
+					{
+						index++;
+					}
+				}while(answer == HAL_OK);
+
+				if((aRxBuffer[index] != 'E') && (aRxBuffer[index] != 0))		/* E represents the first letter of the string ERROR */
+				{
+					index = 0;
+					strindex = 0;
+					do
+					{
+						SignalStr[strindex++] = aRxBuffer[index++];
+					}while ((index < UART_CMD_BUF_SIZE - 1) && (aRxBuffer[index] != '\r'));
+					SignalStr[strindex] = 0;	/* terminate String */
+					sigqual = strtol(SignalStr,NULL,0);
+					/* Map db to abstract Bargraph */
+					if(sigqual > 0)
+					{
+						sprintf(SignalStr,"Bluetooth ||||||||");
+					}
+					else
+					{
+						sprintf(SignalStr,"Bluetooth |");
+						strindex = strlen(SignalStr);
+						sigqual *=-1;
+						sigqual = 100 - sigqual;	/* invert because of negative db value */
+						while(sigqual / 10 > 0 )
+						{
+							SignalStr[strindex++] = '|';
+							sigqual -= 10;
+						}
+						SignalStr[strindex] = 0;
+					}
+					strcpy(display_text,SignalStr);
+					display_text[255] = strlen(SignalStr);
+					EvaluateBluetoothSignalStrength = 0;
+				}
+			}
+			HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferEnd, 4, 2000);	/* exit terminal mode */
+			index = 0;
+			do	/* module will answer with current connection state */
+			{
+				answer = HAL_UART_Receive(&UartHandle, (uint8_t*)&aRxBuffer[index], 1, 100);
+				if(index < UART_CMD_BUF_SIZE)
+				{
+					index++;
+				}
+			}while(answer == HAL_OK);
+		}
+    }
+}
+
+
+void tComm_StartBlueModBaseInit()
+{
+	BmTmpConfig = BM_INIT_POWEROFF;
+}
+
+
+uint8_t tComm_GetBTCmdStr(BTCmd cmdId, char* pCmdStr)
+{
+	uint8_t ret = 0;
+#ifndef OSTC4_HW
+	switch (cmdId)
+	{
+		case BT_CMD_ECHO:	sprintf(pCmdStr,"ATE0\r");
+							ret = 1;
+			break;
+		case BT_CMD_BAUDRATE_115:	strcpy(pCmdStr,"AT+UMRS=115200,1,8,1,1,1\r");
+									ret = 1;
+			break;
+
+		case BT_CMD_BAUDRATE_460:	strcpy(pCmdStr,"AT+UMRS=460800,1,8,1,1,1\r");
+									ret = 1;
+			break;
+		case BT_CMD_NAME:			strcpy(pCmdStr,"AT+UBTLN=OSTC5-12345\r");
+									ret = 1;
+			break;
+		case BT_CMD_EXIT_CMD:		strcpy(pCmdStr,"ATO1\r");
+									ret = 1;
+			break;
+		default:
+			break;
+	}
+#else
+	switch (cmdId)
+	{
+		case BT_CMD_ECHO:	sprintf(pCmdStr,"ATE0\r");
+							ret = 1;
+			break;
+		case BT_CMD_SILENCE:		strcpy(pCmdStr,"ATS30=0\r");
+									ret = 1;
+
+			break;
+		case BT_CMD_ESCAPE_DELAY:		strcpy(pCmdStr,"ATS12=10\r");
+										ret = 1;
+
+			break;
+		case BT_CMD_SIGNAL_POLL:	strcpy(pCmdStr,"AT+BSTPOLL=100\r");
+									ret = 1;
+
+			break;
+		case BT_CMD_BAUDRATE_115:	strcpy(pCmdStr,"AT%B8\r");
+									ret = 1;
+			break;
+
+		case BT_CMD_BAUDRATE_460:	strcpy(pCmdStr,"AT%B22\r");
+									ret = 1;
+			break;
+		case BT_CMD_NAME:			strcpy(pCmdStr,"AT+BNAME=OSTC4-12345\r");
+									ret = 1;
+			break;
+		case BT_CMD_EXIT_CMD:		strcpy(pCmdStr,"ATO\r");
+									ret = 1;
+			break;
+		default:
+			break;
+	}
+#endif
+	return ret;
+}
+
+void tComm_StartBlueModConfig()
+{
+	HAL_UART_Init(&UartHandle);
+
+#ifdef OSTC4_HW
+	uint8_t answer = HAL_OK;
+	uint8_t RxBuffer[UART_CMD_BUF_SIZE];
+	uint8_t index = 0;
+
+	BmTmpConfig = BM_CONFIG_ECHO;
+	do	/* flush RX buffer */
+	{
+		answer = HAL_UART_Receive(&UartHandle, (uint8_t*)&RxBuffer[index], 1, 10);
+		if(index < UART_CMD_BUF_SIZE) index++;
+	}while(answer == HAL_OK);
+#else
+	BmTmpConfig = BM_CONFIG_DONE;
+#endif
+}
+
+uint32_t time_elapsed_ms(uint32_t ticksstart,uint32_t ticksnow)
+{
+	if(ticksstart <= ticksnow)
+		return ticksnow - ticksstart;
+	else
+		return 0xFFFFFFFF - ticksstart + ticksnow;
+}
+
+uint8_t tComm_HandleBlueModConfig()
+{
+#ifdef OSTC4_HW
+	static uint8_t RestartModule = 1; 		/* used to do power off / on cycle */
+#endif
+	static uint8_t ConfigRetryCnt = 0;		/* Retry count without power cycle */
+	static uint8_t lastConfigStep = BM_CONFIG_OFF;
+	static uint32_t cmdStartTick = 0;
+
+	char TxBuffer[UART_CMD_BUF_SIZE];
+	uint8_t CmdSize = 0;
+
+	uint8_t result = HAL_OK;
+
+	memset(TxBuffer, 0, sizeof(TxBuffer));
+
+	if(lastConfigStep != BmTmpConfig)
+	{
+		ConfigRetryCnt = 0;
+		lastConfigStep = BmTmpConfig;
+	}
+
+	if(time_elapsed_ms(cmdStartTick, HAL_GetTick()) > 100)
+	{
+		cmdStartTick = HAL_GetTick();
+		switch (BmTmpConfig)
+		{
+			case BM_CONFIG_ECHO: 			tComm_GetBTCmdStr (BT_CMD_ECHO, TxBuffer);
+				break;
+			case BM_CONFIG_SILENCE:			tComm_GetBTCmdStr (BT_CMD_SILENCE, TxBuffer);
+				break;
+			case BM_CONFIG_ESCAPE_DELAY:	tComm_GetBTCmdStr (BT_CMD_ESCAPE_DELAY, TxBuffer);
+				break;
+			case BM_CONFIG_SIGNAL_POLL:		tComm_GetBTCmdStr(BT_CMD_SIGNAL_POLL, TxBuffer);
+				break;
+			case BM_CONFIG_BAUD:
+	#ifdef ENABLE_FAST_COMM
+											tComm_GetBTCmdStr(BT_CMD_BAUDRATE_460, TxBuffer);
+	#else
+											BmTmpConfig = BM_CONFIG_DONE;
+	#endif
+				break;
+			case BM_CONFIG_RETRY:			ConfigRetryCnt--;
+											HAL_Delay(1);
+											if(ConfigRetryCnt == 0)
+											{
+												MX_Bluetooth_PowerOn();
+												tComm_StartBlueModConfig();
+											}
+				break;
+			case BM_CONFIG_DONE:
+			case BM_CONFIG_OFF:
+				ConfigRetryCnt = 0;
+#ifdef OSTC4_HW
+				RestartModule = 1;
+#endif
+				break;
+
+
+#ifndef OSTC4_HW
+	/* the procedure below is just needed for the initial bluetooth module initialization */
+			case BM_INIT_POWEROFF:		MX_Bluetooth_PowerOff();
+										HAL_Delay(1000);
+										BmTmpConfig++;
+									break;
+			case BM_INIT_POWERON:		MX_Bluetooth_PowerOn();
+										HAL_UART_Init(&UartHandle);
+										BmTmpConfig++;
+									break;
+			case BM_INIT_COMMAND_ON:	HAL_Delay(2600);
+										HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_SET);
+										BmTmpConfig++;
+									break;
+#if 0
+			case BM_INIT_TRIGGER_OFF:	HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_SET);
+										HAL_Delay(2000);
+										BmTmpConfig++;
+									break;
+#endif
+			case BM_INIT_ECHO:
+			case BM_INIT_ECHO2:			sprintf(TxBuffer,"ATE0\r");
+				break;
+			case BM_INIT_FACTORY:		sprintf(TxBuffer,"AT+UFACTORY\r");      /*Set to factory defined configuration */
+									break;
+			case BM_INIT_MODE:			sprintf(TxBuffer,"AT+UMSM=1\r");        /* start in Data mode */
+									break;
+			case BM_INIT_BLE:			sprintf(TxBuffer,"AT+UBTLE=2\r"); 		/* Bluetooth low energy Peripheral */
+									break;
+			case BM_INIT_NAME:			sprintf(TxBuffer,"AT+UBTLN=OSTC5-12345\r"); /* Bluetooth name */
+										if(hardwareDataGetPointer()->primarySerial != 0xFFFF) /* module reinit? => restore old name */
+										{
+											gfx_number_to_string(5,1,&TxBuffer[15],hardwareDataGetPointer()->primarySerial);
+											hardware_programmPrimaryBluetoothNameSet();
+										}
+									break;
+			case BM_INIT_SSP_IDO_OFF:	sprintf(TxBuffer,"AT+UDSC=0,0\r");    /* Disable SPP Server on ID0 */
+									break;
+			case BM_INIT_SSP_IDO_ON:	sprintf(TxBuffer,"AT+UDSC=0,3\r"); 	  /* SPP Server on ID0 */
+									break;
+			case BM_INIT_SSP_ID1_OFF:	sprintf(TxBuffer,"AT+UDSC=1,0\r");    /* Disable SPS Server on ID1 */
+									break;
+			case BM_INIT_SSP_ID1_ON:	sprintf(TxBuffer,"AT+UDSC=1,6\r");	  /* SPS Server on ID1 */
+									break;
+			case BM_INIT_STORE:			sprintf(TxBuffer,"AT&W0\r");	      /* write settings into eeprom */
+									break;
+			case BM_INIT_RESTART:		sprintf(TxBuffer,"AT+CPWROFF\r");	  /* reboot module */
+									break;
+			case BM_INIT_DONE:			tInfo_write("Done");
+										BmTmpConfig = BM_CONFIG_DONE;
+										HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_RESET);
+									break;
+			default:
+				break;
+		}
+#else
+		case BM_INIT_TRIGGER_ON:	HAL_Delay(2000);
+									BmTmpConfig++;
+								break;
+		case BM_INIT_TRIGGER_OFF:	HAL_Delay(1);
+									HAL_Delay(2000);
+									BmTmpConfig++;
+								break;
+		case BM_INIT_ECHO:
+		case BM_INIT_ECHO2:			sprintf(TxBuffer,"ATE0\r");
+			break;
+		case BM_INIT_FACTORY:		sprintf(TxBuffer,"AT&F1\r");      /*Set to factory defined configuration */
+								break;
+		case BM_INIT_MODE:			BmTmpConfig++;
+								break;
+		case BM_INIT_BLE:			BmTmpConfig++;
+								break;
+		case BM_INIT_NAME:			sprintf(TxBuffer,"AT+BNAME=OSTC4-12345\r"); /* Bluetooth name */
+									if(hardwareDataGetPointer()->primarySerial != 0xFFFF) /* module reinit? => restore old name */
+									{
+										gfx_number_to_string(5,1,&TxBuffer[15],hardwareDataGetPointer()->primarySerial);
+										hardware_programmPrimaryBluetoothNameSet();
+									}
+								break;
+		case BM_INIT_SSP_IDO_OFF:	BmTmpConfig++;
+								break;
+		case BM_INIT_SSP_IDO_ON:	BmTmpConfig++;
+								break;
+		case BM_INIT_SSP_ID1_OFF:	BmTmpConfig++;
+								break;
+		case BM_INIT_SSP_ID1_ON:	BmTmpConfig++;
+								break;
+		case BM_INIT_STORE:			sprintf(TxBuffer,"AT&W\r");	          /* write settings into eeprom */
+								break;
+		case BM_INIT_RESTART:		sprintf(TxBuffer,"AT+RESET\r");	  /* reboot module */
+								break;
+		case BM_INIT_DONE:			BmTmpConfig = BM_CONFIG_ECHO;
+								break;
+		default:
+			break;
+	}
+#endif
+
+		if(TxBuffer[0] != 0)		/* forward command to module */
+		{
+			CmdSize = strlen(TxBuffer);
+			result = HAL_UART_Transmit(&UartHandle, (uint8_t*)TxBuffer,CmdSize, 500);
+			if(result == HAL_OK)
+			{
+				result = tComm_CheckAnswerOK();
+#ifdef OSTC4_HW
+				if((BmTmpConfig == BM_CONFIG_BAUD) && (result == HAL_OK) && (UartHandle.Init.BaudRate != 460800)) /* is com already switched to fast speed? */
+				{
+					HAL_UART_DeInit(&UartHandle);
+					HAL_Delay(1);
+					UartHandle.Init.BaudRate   = 460800;
+					HAL_UART_Init(&UartHandle);
+				}
+				else if((BmTmpConfig == BM_CONFIG_BAUD) && (result == HAL_OK) && (UartHandle.Init.BaudRate == 460800)) /* This shut not happen because default speed is 115200 => update module configuration */
+				{
+					tComm_GetBTCmdStr(BT_CMD_BAUDRATE_115, TxBuffer);
+
+					CmdSize = strlen(TxBuffer);
+					HAL_UART_Transmit(&UartHandle, (uint8_t*)TxBuffer,CmdSize, 2000);
+					HAL_UART_DeInit(&UartHandle);
+					HAL_Delay(10);
+					UartHandle.Init.BaudRate   = 115200;
+					HAL_UART_Init(&UartHandle);
+					sprintf(TxBuffer,"AT&W\r");		/* write configuration */
+					CmdSize = strlen(TxBuffer);
+					HAL_UART_Transmit(&UartHandle, (uint8_t*)TxBuffer,CmdSize, 2000);
+				}
+#endif
+				if(result == HAL_OK)
+				{
+					ConfigRetryCnt = 0;
+					BmTmpConfig++;
+					if(BmTmpConfig == BM_CONFIG_RETRY)
+					{
+						BmTmpConfig = BM_CONFIG_DONE;
+					}
+				}
+#ifdef OSTC4_HW
+				if(BmTmpConfig == BM_CONFIG_ECHO)
+				{
+					BmTmpConfig = BM_CONFIG_DONE;
+					ConfigRetryCnt = 0;
+					RestartModule = 1;
+				}
+#endif
+			}
+		}
+		else		/* no command for the configuration step found => skip step */
+		{
+			if((BmTmpConfig > BM_CONFIG_OFF) && (BmTmpConfig < BM_CONFIG_DONE))
+			{
+				BmTmpConfig++;
+			}
+		}
+		if(result != HAL_OK)
+		{
+			ConfigRetryCnt++;
+			if(ConfigRetryCnt > 3)		/* Configuration failed => switch off module */
+			{
+				MX_Bluetooth_PowerOff();
+				tInfo_write("Failed");
+				BmTmpConfig = BM_CONFIG_OFF;
+
+#ifdef OSTC4_HW
+				if(RestartModule)
+				{
+					RestartModule = 0;      /* only one try */
+					ConfigRetryCnt = 200;	/* used for delay to startup module again */
+
+					if((BmTmpConfig == BM_CONFIG_ECHO) || (BmTmpConfig == BM_INIT_ECHO))	/* the module did not answer even once => try again with alternative baud rate */
+					{
+						HAL_UART_DeInit(&UartHandle);
+						HAL_Delay(1);
+						UartHandle.Init.BaudRate   = 460800;
+						HAL_UART_Init(&UartHandle);
+					}
+					BmTmpConfig = BM_CONFIG_RETRY;
+				}
+				else						/* even restarting module failed => switch bluetooth off */
+				{
+					ConfigRetryCnt = 0;
+					BmTmpConfig = BM_CONFIG_OFF;
+				}
+#endif
+			}
+		}
+	}
+	return result;
+}
+
+static void tComm_Error_Handler(void)
+{
+  while(1)
+  {}
+}
--- a/BootLoader/Src/tInfoBootloader.c	Sat Nov 15 15:16:14 2025 +0100
+++ b/BootLoader/Src/tInfoBootloader.c	Sat Nov 15 19:29:44 2025 +0100
@@ -96,15 +96,15 @@
 	tIBscreen.FBStartAdress = getFrame(18);
 	line = 1;
 	if(text)
-		GFX_write_string(&FontT48, &tIBwindow, text,line);
+		GFX_write_string(&FontT48min, &tIBwindow, text,line);
 	line++;
 
 	if(*textButtonLeft)
-		write_content_simple(&tIBscreen, 0, 800, 480-24, &FontT24,textButtonLeft,CLUT_ButtonSurfaceScreen);
+		write_content_simple(&tIBscreen, 0, 800, 480-24, &FontT24min,textButtonLeft,CLUT_ButtonSurfaceScreen);
 	if(*textButtonMid)
-		write_content_simple(&tIBscreen, 0, 800, 480-24, &FontT24,textButtonMid,CLUT_ButtonSurfaceScreen);
+		write_content_simple(&tIBscreen, 0, 800, 480-24, &FontT24min,textButtonMid,CLUT_ButtonSurfaceScreen);
 	if(*textButtonRight)
-		write_content_simple(&tIBscreen, 0, 800, 480-24, &FontT24,textButtonRight,CLUT_ButtonSurfaceScreen);
+		write_content_simple(&tIBscreen, 0, 800, 480-24, &FontT24min,textButtonRight,CLUT_ButtonSurfaceScreen);
 
 	GFX_SetFrameTop(tIBscreen.FBStartAdress);
 	GFX_change_LTDC();
@@ -121,7 +121,7 @@
 	else
 	{
 		if(text)
-			GFX_write_string(&FontT48, &tIBwindow, text,line);
+			GFX_write_string(&FontT48min, &tIBwindow, text,line);
 		line++;
 
 	}
--- a/Discovery/Inc/gfx.h	Sat Nov 15 15:16:14 2025 +0100
+++ b/Discovery/Inc/gfx.h	Sat Nov 15 19:29:44 2025 +0100
@@ -39,6 +39,13 @@
 		 uint16_t width;
 		 uint16_t height;
 		 } tImage;
+typedef struct {
+		 uint8_t *data;
+		 const uint8_t *dataComp;
+		 uint16_t sizeComp;
+ 		 uint16_t width;
+ 		 uint16_t height;
+ 		 } tImageComp;
 
 typedef struct {
 		 long int code;
@@ -46,6 +53,12 @@
 		 } tChar;
 
 typedef struct {
+		long int code;
+		const tImageComp *image;
+		} tCharComp;
+
+
+typedef struct {
 		 uint32_t length;
 		 const tChar *chars;
 		 uint8_t spacesize;
@@ -54,6 +67,15 @@
 		 } tFont;
 
 typedef struct {
+ 		 uint32_t length;
+ 		 const tCharComp *chars;
+ 		 uint8_t spacesize;
+ 		 uint8_t spacesize2Monospaced;
+ 		 uint8_t height;
+ 		 } tFontComp;
+
+
+typedef struct {
 		uint32_t x;
 		uint32_t y;
 } point_t;
--- a/Discovery/Inc/gfx_fonts.h	Sat Nov 15 15:16:14 2025 +0100
+++ b/Discovery/Inc/gfx_fonts.h	Sat Nov 15 19:29:44 2025 +0100
@@ -55,8 +55,10 @@
 
 extern const tFont Awe48;
 extern const tFont FontT24;
+extern const tFont FontT24min;
 extern const tFont FontT42;
 extern const tFont FontT48;
+extern const tFont FontT48min;
 extern const tFont FontT54;
 extern const tFont FontT84;
 extern const tFont FontT105;
--- a/Discovery/Inc/tComm.h	Sat Nov 15 15:16:14 2025 +0100
+++ b/Discovery/Inc/tComm.h	Sat Nov 15 19:29:44 2025 +0100
@@ -47,10 +47,12 @@
 		BM_CONFIG5_ESCAPE2,
 		BM_CONFIG5_BAUD,
 		BM_CONFIG5_DATAMODE,
-		BM_INIT_TRIGGER_ON = 100,
-		BM_INIT_TRIGGER_OFF,
+		BM_INIT_POWEROFF = 100,
+		BM_INIT_POWERON,
+		BM_INIT_COMMAND_ON,
 		BM_INIT_ECHO,
 		BM_INIT_FACTORY,
+		BM_INIT_ECHO2,
 		BM_INIT_MODE,
 		BM_INIT_BLE,
 		BM_INIT_NAME,
--- a/OtherSources/data_central_mini.c	Sat Nov 15 15:16:14 2025 +0100
+++ b/OtherSources/data_central_mini.c	Sat Nov 15 19:29:44 2025 +0100
@@ -111,10 +111,12 @@
 
 uint32_t	CRC_CalcBlockCRC_moreThan768000(uint32_t *buffer1, uint32_t *buffer2, uint32_t words)
 {
- cm_t        crc_model;
- uint32_t      word_to_do;
- uint8_t       byte_to_do;
- int         i;
+	 cm_t        crc_model;
+	 uint32_t      word_to_do;
+	 uint8_t       byte_to_do;
+	 int         i;
+
+	 uint32_t wordCnt = 0;
  
      // Values for the STM32F generator.
  
@@ -127,10 +129,10 @@
  
      cm_ini(&crc_model);
  
-     while (words--)
+     do
      {
          // The STM32F10x hardware does 32-bit words at a time!!!
-				if(words > (768000/4))
+				if(wordCnt >= (768000/4))
 					word_to_do = *buffer2++;
 				else
 					word_to_do = *buffer1++;
@@ -159,7 +161,8 @@
  
              cm_nxt(&crc_model, byte_to_do);
          }
-     }
+         wordCnt++;
+     } while (wordCnt != words);
  
      // Return the final result.